Merge "Revert "When aborting EnhancedRC block line, block should reflect that""
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 16 Sep 2015 10:12:02 +0000 (10:12 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 16 Sep 2015 10:12:02 +0000 (10:12 +0000)
1523 files changed:
.jscsrc
.jshintignore
.jshintrc
.rubocop.yml
.travis.yml
CREDITS
Gemfile.lock
Gruntfile.js
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/extension.schema.json
docs/hooks.txt
docs/uidesign/design.html
includes/DefaultSettings.php
includes/EditPage.php
includes/Export.php
includes/GlobalFunctions.php
includes/Hooks.php
includes/Html.php
includes/HtmlFormatter.php
includes/HttpFunctions.php
includes/Linker.php
includes/MWNamespace.php
includes/MWTimestamp.php
includes/MagicWord.php
includes/MediaWiki.php
includes/Message.php
includes/MovePage.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Preferences.php
includes/PrefixSearch.php
includes/ProtectionForm.php
includes/Revision.php
includes/Sanitizer.php
includes/Setup.php
includes/Status.php
includes/StubObject.php
includes/TemplateParser.php
includes/Title.php
includes/User.php
includes/WatchedItem.php
includes/WebRequest.php
includes/WebStart.php
includes/WikiMap.php
includes/XmlSelect.php
includes/ZhConversion.php
includes/actions/Action.php
includes/actions/DeleteAction.php
includes/actions/EditAction.php
includes/actions/InfoAction.php
includes/actions/RevertAction.php
includes/actions/RollbackAction.php
includes/actions/WatchAction.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatRaw.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiMessage.php
includes/api/ApiMove.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParse.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllDeletedRevisions.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiResult.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiStashEdit.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/i18n/ar.json
includes/api/i18n/bs.json
includes/api/i18n/ca.json
includes/api/i18n/ckb.json [new file with mode: 0644]
includes/api/i18n/de.json
includes/api/i18n/el.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/eu.json
includes/api/i18n/fi.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/ht.json [new file with mode: 0644]
includes/api/i18n/hu.json
includes/api/i18n/ia.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/ky.json [new file with mode: 0644]
includes/api/i18n/lb.json
includes/api/i18n/lv.json
includes/api/i18n/mk.json
includes/api/i18n/mr.json [new file with mode: 0644]
includes/api/i18n/oc.json
includes/api/i18n/olo.json [new file with mode: 0644]
includes/api/i18n/pl.json
includes/api/i18n/ps.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/shn.json [new file with mode: 0644]
includes/api/i18n/sq.json [new file with mode: 0644]
includes/api/i18n/sv.json
includes/api/i18n/uk.json
includes/api/i18n/vi.json
includes/api/i18n/wuu.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/cache/BacklinkCache.php
includes/cache/LCStoreStaticArray.php
includes/cache/LinkBatch.php
includes/cache/LinkCache.php
includes/cache/MessageCache.php
includes/cache/UserCache.php
includes/changes/EnhancedChangesList.php
includes/changes/RecentChange.php
includes/changetags/ChangeTags.php
includes/changetags/ChangeTagsLogList.php
includes/changetags/ChangeTagsRevisionList.php
includes/clientpool/RedisConnectionPool.php
includes/compat/IPSetCompat.php [new file with mode: 0644]
includes/compat/normal/.gitignore [deleted file]
includes/content/CssContent.php
includes/content/CssContentHandler.php
includes/content/JavaScriptContent.php
includes/content/JavaScriptContentHandler.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/MutableContext.php [new file with mode: 0644]
includes/context/RequestContext.php
includes/dao/DBAccessObjectUtils.php [new file with mode: 0644]
includes/db/DBConnRef.php
includes/db/Database.php
includes/db/DatabaseError.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabasePostgres.php
includes/db/DatabaseSqlite.php
includes/db/IDatabase.php [new file with mode: 0644]
includes/db/LBFactory.php
includes/db/LBFactoryMulti.php
includes/db/LoadMonitor.php
includes/db/LoadMonitorMySQL.php [new file with mode: 0644]
includes/debug/logger/LegacyLogger.php
includes/debug/logger/LegacySpi.php
includes/debug/logger/LoggerFactory.php
includes/debug/logger/MonologSpi.php
includes/debug/logger/NullSpi.php
includes/debug/logger/Spi.php
includes/debug/logger/monolog/LegacyFormatter.php
includes/debug/logger/monolog/LineFormatter.php [new file with mode: 0644]
includes/exception/MWExceptionHandler.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filerepo/FileBackendDBRepoWrapper.php [new file with mode: 0644]
includes/filerepo/FileRepo.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/ForeignDBViaLBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/gallery/PackedImageGallery.php
includes/htmlform/HTMLButtonField.php
includes/htmlform/HTMLCheckField.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php
includes/htmlform/HTMLSelectAndOtherField.php
includes/htmlform/HTMLSelectNamespace.php
includes/htmlform/HTMLSelectOrOtherField.php
includes/htmlform/HTMLTextField.php
includes/htmlform/HTMLTitleTextField.php [new file with mode: 0644]
includes/htmlform/HTMLUserTextField.php [new file with mode: 0644]
includes/htmlform/OOUIHTMLForm.php
includes/htmlform/VFormHTMLForm.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerPage.php
includes/installer/i18n/ar.json
includes/installer/i18n/azb.json
includes/installer/i18n/bn.json
includes/installer/i18n/bs.json
includes/installer/i18n/ca.json
includes/installer/i18n/ce.json
includes/installer/i18n/cu.json
includes/installer/i18n/de-ch.json
includes/installer/i18n/el.json
includes/installer/i18n/en.json
includes/installer/i18n/eo.json
includes/installer/i18n/es.json
includes/installer/i18n/eu.json
includes/installer/i18n/gl.json
includes/installer/i18n/hy.json
includes/installer/i18n/ia.json
includes/installer/i18n/it.json
includes/installer/i18n/ja.json
includes/installer/i18n/km.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/lv.json
includes/installer/i18n/mg.json
includes/installer/i18n/mk.json
includes/installer/i18n/nan.json
includes/installer/i18n/nap.json
includes/installer/i18n/olo.json [new file with mode: 0644]
includes/installer/i18n/pl.json
includes/installer/i18n/ps.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/ro.json
includes/installer/i18n/sah.json
includes/installer/i18n/sq.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sv.json
includes/installer/i18n/tokipona.json [new file with mode: 0644]
includes/installer/i18n/tt-cyrl.json
includes/installer/i18n/uk.json
includes/installer/i18n/vi.json
includes/installer/i18n/yi.json
includes/installer/i18n/zh-hans.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/EmaillingJob.php
includes/jobqueue/jobs/EnqueueJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/ThumbnailRenderJob.php
includes/jobqueue/jobs/UploadFromUrlJob.php
includes/libs/BufferingStatsdDataFactory.php
includes/libs/CSSMin.php
includes/libs/HashRing.php
includes/libs/IPSet.php [deleted file]
includes/libs/JavaScriptMinifier.php
includes/libs/MultiHttpClient.php
includes/libs/ObjectFactory.php
includes/libs/ReplacementArray.php
includes/libs/SamplingStatsdClient.php [new file with mode: 0644]
includes/libs/ScopedPHPTimeout.php [deleted file]
includes/libs/objectcache/APCBagOStuff.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/EmptyBagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/ReplicatedBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/objectcache/WinCacheBagOStuff.php
includes/libs/objectcache/XCacheBagOStuff.php
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/libs/virtualrest/SwiftVirtualRESTService.php
includes/libs/virtualrest/VirtualRESTService.php
includes/logging/LogFormatter.php
includes/logging/ProtectLogFormatter.php [new file with mode: 0644]
includes/mail/EmailNotification.php
includes/mail/UserMailer.php
includes/media/Bitmap.php
includes/media/DjVuImage.php
includes/media/SVG.php
includes/media/SVGMetadataExtractor.php
includes/media/WebP.php
includes/media/XMP.php
includes/media/XMPInfo.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/ObjectCacheSessionHandler.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/pager/TablePager.php
includes/parser/CoreParserFunctions.php
includes/parser/MWTidy.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOptions.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/password/UserPasswordPolicy.php
includes/poolcounter/PoolCounterRedis.php
includes/poolcounter/PoolWorkArticleView.php
includes/profiler/output/ProfilerOutputStats.php
includes/rcfeed/RCFeedFormatter.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderForeignApiModule.php [new file with mode: 0644]
includes/resourceloader/ResourceLoaderJqueryMsgModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchMySQL.php
includes/search/SearchPostgres.php
includes/site/CachingSiteStore.php
includes/site/DBSiteStore.php
includes/site/SiteSQLStore.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/FormSpecialPage.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialAllMessages.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialChangeContentModel.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialFewestrevisions.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialImport.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListDuplicatedFiles.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialPagesWithProp.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRandomInCategory.php
includes/specials/SpecialRandompage.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialShortpages.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialTags.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWhatlinkshere.php
includes/templates/Usercreate.php
includes/templates/Userlogin.php
includes/tidy.conf [deleted file]
includes/tidy/Html5Depurate.php [new file with mode: 0644]
includes/tidy/RaggettBase.php [new file with mode: 0644]
includes/tidy/RaggettExternal.php [new file with mode: 0644]
includes/tidy/RaggettInternalHHVM.php [new file with mode: 0644]
includes/tidy/RaggettInternalPHP.php [new file with mode: 0644]
includes/tidy/RaggettWrapper.php [new file with mode: 0644]
includes/tidy/TidyDriverBase.php [new file with mode: 0644]
includes/tidy/tidy.conf [new file with mode: 0644]
includes/upload/UploadBase.php
includes/upload/UploadFromUrl.php
includes/utils/BatchRowIterator.php [new file with mode: 0644]
includes/utils/BatchRowUpdate.php [new file with mode: 0644]
includes/utils/BatchRowWriter.php [new file with mode: 0644]
includes/utils/IP.php
includes/utils/MWCryptHKDF.php
includes/utils/RowUpdateGenerator.php [new file with mode: 0644]
includes/utils/UIDGenerator.php
includes/utils/iterators/IteratorDecorator.php [new file with mode: 0644]
includes/utils/iterators/NotRecursiveIterator.php [new file with mode: 0644]
includes/widget/AUTHORS.txt
includes/widget/ComplexNamespaceInputWidget.php [new file with mode: 0644]
includes/widget/ComplexTitleInputWidget.php [new file with mode: 0644]
includes/widget/NamespaceInputWidget.php [new file with mode: 0644]
includes/widget/TitleInputWidget.php
includes/widget/UserInputWidget.php [new file with mode: 0644]
jsduck.json
languages/Language.php
languages/Names.php
languages/i18n/ady-cyrl.json [new file with mode: 0644]
languages/i18n/aeb-arab.json
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/arn.json
languages/i18n/ary.json
languages/i18n/arz.json
languages/i18n/as.json
languages/i18n/ase.json [new file with mode: 0644]
languages/i18n/ast.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dty.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kab.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/ky.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/luz.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mai.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/olo.json [new file with mode: 0644]
languages/i18n/or.json
languages/i18n/pam.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/rm.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/ses.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/i18n/zh-tw.json
languages/messages/MessagesAce.php
languages/messages/MessagesAdy.php [new file with mode: 0644]
languages/messages/MessagesAdy_cyrl.php [new file with mode: 0644]
languages/messages/MessagesAf.php
languages/messages/MessagesAln.php
languages/messages/MessagesAn.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAv.php
languages/messages/MessagesAvk.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBgn.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesBxr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCdo.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEl.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFur.php
languages/messages/MessagesFy.php
languages/messages/MessagesGag.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.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/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKaa.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKk_arab.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKw.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLi.php
languages/messages/MessagesLij.php
languages/messages/MessagesLrc.php
languages/messages/MessagesLt.php
languages/messages/MessagesLuz.php [new file with mode: 0644]
languages/messages/MessagesLv.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMt.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPnb.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQu.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesScn.php
languages/messages/MessagesSd.php
languages/messages/MessagesSdc.php
languages/messages/MessagesSdh.php [new file with mode: 0644]
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSq.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSu.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTe.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTr.php
languages/messages/MessagesTt_cyrl.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/createAndPromote.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteEqualMessages.php
maintenance/dev/includes/php.sh [changed mode: 0755->0644]
maintenance/dev/includes/require-php.sh [changed mode: 0755->0644]
maintenance/findHooks.php
maintenance/fixSlaveDesync.php [deleted file]
maintenance/getConfiguration.php
maintenance/interwiki.list
maintenance/interwiki.sql
maintenance/jsduck/categories.json
maintenance/jsduck/custom_tags.rb
maintenance/jsduck/eg-iframe.html
maintenance/jsduck/external.js
maintenance/language/generateNormalizerDataAr.php
maintenance/language/generateNormalizerDataMl.php
maintenance/language/zhtable/simp2trad.manual
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/migrateFileRepoLayout.php [new file with mode: 0644]
maintenance/namespaceDupes.php
maintenance/parse.php
maintenance/postgres/archives/patch-textsearch_bug66650.sql [new file with mode: 0644]
maintenance/postgres/update-keys.sql
maintenance/rebuildLocalisationCache.php
maintenance/refreshLinks.php
maintenance/showJobs.php
maintenance/sql.php
maintenance/tables.sql
mw-config/config.css
mw-config/config.js
mw-config/images/help-question-hover.gif [new file with mode: 0644]
mw-config/images/help-question.gif [new file with mode: 0644]
package.json
phpcs.xml [new file with mode: 0644]
resources/Resources.php
resources/ResourcesOOUI.php
resources/lib/jquery.i18n/CREDITS [new file with mode: 0644]
resources/lib/jquery.i18n/GPL-LICENSE [new file with mode: 0644]
resources/lib/jquery.i18n/MIT-LICENSE [new file with mode: 0644]
resources/lib/jquery.i18n/README.md [new file with mode: 0644]
resources/lib/jquery.i18n/package.json [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.emitter.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.language.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/jquery.i18n.parser.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/bs.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/dsb.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/fi.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/ga.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/he.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/hsb.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/hu.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/hy.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/la.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/ml.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/os.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/ru.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/sl.js [new file with mode: 0644]
resources/lib/jquery.i18n/src/languages/uk.js [new file with mode: 0644]
resources/lib/mustache/LICENSE [new file with mode: 0644]
resources/lib/oojs-ui/i18n/ar.json
resources/lib/oojs-ui/i18n/arq.json
resources/lib/oojs-ui/i18n/as.json
resources/lib/oojs-ui/i18n/ast.json
resources/lib/oojs-ui/i18n/be-tarask.json
resources/lib/oojs-ui/i18n/be.json
resources/lib/oojs-ui/i18n/bg.json
resources/lib/oojs-ui/i18n/bn.json
resources/lib/oojs-ui/i18n/bs.json
resources/lib/oojs-ui/i18n/ca.json
resources/lib/oojs-ui/i18n/ckb.json
resources/lib/oojs-ui/i18n/cu.json
resources/lib/oojs-ui/i18n/da.json
resources/lib/oojs-ui/i18n/de.json
resources/lib/oojs-ui/i18n/dty.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/el.json
resources/lib/oojs-ui/i18n/en-ca.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/en.json
resources/lib/oojs-ui/i18n/eo.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/eu.json
resources/lib/oojs-ui/i18n/fa.json
resources/lib/oojs-ui/i18n/fi.json
resources/lib/oojs-ui/i18n/fr.json
resources/lib/oojs-ui/i18n/gl.json
resources/lib/oojs-ui/i18n/glk.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/gu.json
resources/lib/oojs-ui/i18n/he.json
resources/lib/oojs-ui/i18n/hi.json
resources/lib/oojs-ui/i18n/hu-formal.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/hu.json
resources/lib/oojs-ui/i18n/hy.json
resources/lib/oojs-ui/i18n/id.json
resources/lib/oojs-ui/i18n/ja.json
resources/lib/oojs-ui/i18n/jv.json
resources/lib/oojs-ui/i18n/ka.json
resources/lib/oojs-ui/i18n/km.json
resources/lib/oojs-ui/i18n/ko.json
resources/lib/oojs-ui/i18n/ksh.json
resources/lib/oojs-ui/i18n/la.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/li.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/lt.json
resources/lib/oojs-ui/i18n/mk.json
resources/lib/oojs-ui/i18n/ml.json
resources/lib/oojs-ui/i18n/mr.json
resources/lib/oojs-ui/i18n/ms.json
resources/lib/oojs-ui/i18n/nap.json
resources/lib/oojs-ui/i18n/nb.json
resources/lib/oojs-ui/i18n/nl.json
resources/lib/oojs-ui/i18n/oc.json
resources/lib/oojs-ui/i18n/om.json
resources/lib/oojs-ui/i18n/or.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/i18n/pms.json
resources/lib/oojs-ui/i18n/ps.json
resources/lib/oojs-ui/i18n/pt-br.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/qqq.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/roa-tara.json
resources/lib/oojs-ui/i18n/ru.json
resources/lib/oojs-ui/i18n/sah.json
resources/lib/oojs-ui/i18n/sco.json
resources/lib/oojs-ui/i18n/sh.json
resources/lib/oojs-ui/i18n/sk.json
resources/lib/oojs-ui/i18n/sl.json
resources/lib/oojs-ui/i18n/sq.json
resources/lib/oojs-ui/i18n/su.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/ta.json
resources/lib/oojs-ui/i18n/tl.json
resources/lib/oojs-ui/i18n/uk.json
resources/lib/oojs-ui/i18n/vec.json
resources/lib/oojs-ui/i18n/vi.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex-noimages.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-mediawiki-noimages.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/themes/apex/icons-editing-advanced.json
resources/lib/oojs-ui/themes/apex/icons-editing-styling.json
resources/lib/oojs-ui/themes/apex/icons.json
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
resources/lib/oojs-ui/themes/apex/images/icons/advanced.svg
resources/lib/oojs-ui/themes/apex/images/icons/alert.png
resources/lib/oojs-ui/themes/apex/images/icons/alert.svg
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png
resources/lib/oojs-ui/themes/apex/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/cancel.svg
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/apex/images/icons/check.svg
resources/lib/oojs-ui/themes/apex/images/icons/close.png
resources/lib/oojs-ui/themes/apex/images/icons/close.svg
resources/lib/oojs-ui/themes/apex/images/icons/code.png
resources/lib/oojs-ui/themes/apex/images/icons/code.svg
resources/lib/oojs-ui/themes/apex/images/icons/editLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/editLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/history.png
resources/lib/oojs-ui/themes/apex/images/icons/history.svg
resources/lib/oojs-ui/themes/apex/images/icons/info.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-e.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png
resources/lib/oojs-ui/themes/apex/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/language.png
resources/lib/oojs-ui/themes/apex/images/icons/language.svg
resources/lib/oojs-ui/themes/apex/images/icons/link.svg
resources/lib/oojs-ui/themes/apex/images/icons/lock.svg
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/notice.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/notice.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/apex/images/icons/search.png
resources/lib/oojs-ui/themes/apex/images/icons/search.svg
resources/lib/oojs-ui/themes/apex/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/apex/images/icons/settings.svg
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/apex/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/apex/images/icons/tag.png
resources/lib/oojs-ui/themes/apex/images/icons/tag.svg
resources/lib/oojs-ui/themes/apex/images/icons/text-style.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png
resources/lib/oojs-ui/themes/apex/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/apex/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/apex/images/indicators/alert.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/apex/images/indicators/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/required.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/apex/images/textures/transparency.svg
resources/lib/oojs-ui/themes/apex/indicators.json
resources/lib/oojs-ui/themes/mediawiki/icons-accessibility.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/icons-editing-advanced.json
resources/lib/oojs-ui/themes/mediawiki/icons-editing-styling.json
resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-be.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/cancel.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/editLock-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/history.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/imageLock-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-e.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/language.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/lock-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/secure-link.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/strikethrough-s.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/text-style.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-destructive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/unLock-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-u.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.svg
resources/lib/oojs-ui/themes/mediawiki/indicators.json
resources/lib/oojs/oojs.jquery.js
resources/src/jquery/jquery.accessKeyLabel.js
resources/src/jquery/jquery.autoEllipsis.js
resources/src/jquery/jquery.byteLimit.js
resources/src/jquery/jquery.color.js
resources/src/jquery/jquery.colorUtil.js
resources/src/jquery/jquery.expandableField.js
resources/src/jquery/jquery.farbtastic.js
resources/src/jquery/jquery.getAttrs.js
resources/src/jquery/jquery.hidpi.js
resources/src/jquery/jquery.highlightText.js
resources/src/jquery/jquery.localize.js
resources/src/jquery/jquery.makeCollapsible.js
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.placeholder.js
resources/src/jquery/jquery.qunit.completenessTest.js
resources/src/jquery/jquery.spinner.js
resources/src/jquery/jquery.suggestions.js
resources/src/jquery/jquery.tablesorter.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/images/checker.png [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.edit.stash.js
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.action/mediawiki.action.view.filepage.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.metadata.css
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.api/mediawiki.ForeignApi.js [new file with mode: 0644]
resources/src/mediawiki.api/mediawiki.api.edit.js
resources/src/mediawiki.api/mediawiki.api.js
resources/src/mediawiki.api/mediawiki.api.login.js
resources/src/mediawiki.api/mediawiki.api.options.js
resources/src/mediawiki.api/mediawiki.api.parse.js
resources/src/mediawiki.api/mediawiki.api.upload.js [new file with mode: 0644]
resources/src/mediawiki.api/mediawiki.api.watch.js
resources/src/mediawiki.language/languages/bs.js
resources/src/mediawiki.language/languages/dsb.js
resources/src/mediawiki.language/languages/fi.js
resources/src/mediawiki.language/languages/ga.js
resources/src/mediawiki.language/languages/he.js
resources/src/mediawiki.language/languages/hsb.js
resources/src/mediawiki.language/languages/hu.js
resources/src/mediawiki.language/languages/hy.js
resources/src/mediawiki.language/languages/la.js
resources/src/mediawiki.language/languages/os.js
resources/src/mediawiki.language/languages/ru.js
resources/src/mediawiki.language/languages/sl.js
resources/src/mediawiki.language/languages/uk.js
resources/src/mediawiki.language/mediawiki.cldr.js
resources/src/mediawiki.language/mediawiki.language.init.js
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.language/mediawiki.language.numbers.js
resources/src/mediawiki.legacy/ajax.js [deleted file]
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/images/checker.png [deleted file]
resources/src/mediawiki.legacy/images/feed-icon.png [deleted file]
resources/src/mediawiki.legacy/images/feed-icon.svg [deleted file]
resources/src/mediawiki.legacy/images/question.png [deleted file]
resources/src/mediawiki.legacy/images/question.svg [deleted file]
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.ui/mixins.less
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
resources/src/mediawiki.page/mediawiki.page.gallery.css [new file with mode: 0644]
resources/src/mediawiki.page/mediawiki.page.gallery.js
resources/src/mediawiki.page/mediawiki.page.gallery.print.css [new file with mode: 0644]
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/src/mediawiki.page/mediawiki.page.startup.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.special/mediawiki.special.changeemail.js
resources/src/mediawiki.special/mediawiki.special.changeslist.enhanced.css
resources/src/mediawiki.special/mediawiki.special.movePage.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.movePage.js
resources/src/mediawiki.special/mediawiki.special.preferences.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.search.js
resources/src/mediawiki.special/mediawiki.special.unwatchedPages.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki.special/mediawiki.special.userlogin.common.js [deleted file]
resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js
resources/src/mediawiki.special/templates/thumbnail.html
resources/src/mediawiki.toolbar/toolbar.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.infuse.js [deleted file]
resources/src/mediawiki/images/feed-icon.png [new file with mode: 0644]
resources/src/mediawiki/images/feed-icon.svg [new file with mode: 0644]
resources/src/mediawiki/images/question.png [new file with mode: 0644]
resources/src/mediawiki/images/question.svg [new file with mode: 0644]
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.ForeignUpload.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.Upload.Dialog.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Upload.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Uri.js
resources/src/mediawiki/mediawiki.Uri.loose.regexp [new file with mode: 0644]
resources/src/mediawiki/mediawiki.Uri.strict.regexp [new file with mode: 0644]
resources/src/mediawiki/mediawiki.confirmCloseWindow.js
resources/src/mediawiki/mediawiki.debug.js
resources/src/mediawiki/mediawiki.errorLogger.js
resources/src/mediawiki/mediawiki.experiments.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.feedback.js
resources/src/mediawiki/mediawiki.feedlink.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.filewarning.less
resources/src/mediawiki/mediawiki.htmlform.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.htmlform.js
resources/src/mediawiki/mediawiki.htmlform.ooui.css
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/mediawiki.jqueryMsg.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.css
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.notify.js
resources/src/mediawiki/mediawiki.searchSuggest.js
resources/src/mediawiki/mediawiki.startUp.js [deleted file]
resources/src/mediawiki/mediawiki.storage.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.template.js
resources/src/mediawiki/mediawiki.template.regexp.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.userSuggest.js
resources/src/mediawiki/mediawiki.util.js
resources/src/moment-local-dmy.js [new file with mode: 0644]
resources/src/startup.js
tests/browser/environments.yml
tests/browser/features/step_definitions/create_account_steps.rb
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parser/preprocess/All_system_messages.expected
tests/parser/preprocess/All_system_messages.txt
tests/phpunit/LessFileCompilationTest.php
tests/phpunit/Makefile
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/helpers/WellProtectedClass.php
tests/phpunit/data/less/common/test.common.mixins.less
tests/phpunit/data/less/module/styles.css
tests/phpunit/data/templates/bad_partial.mustache [new file with mode: 0644]
tests/phpunit/data/templates/has_partial.mustache [new file with mode: 0644]
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php
tests/phpunit/includes/GlobalFunctions/wfUrlencodeTest.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TemplateParserTest.php
tests/phpunit/includes/TestingAccessWrapper.php
tests/phpunit/includes/TestingAccessWrapperTest.php
tests/phpunit/includes/WikiMapTest.php [new file with mode: 0644]
tests/phpunit/includes/WikiReferenceTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiMessageTest.php
tests/phpunit/includes/api/ApiResultTest.php
tests/phpunit/includes/api/ApiRevisionDeleteTest.php
tests/phpunit/includes/api/ApiUnblockTest.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/content/CssContentHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/content/CssContentTest.php
tests/phpunit/includes/content/JavaScriptContentHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/content/JavaScriptContentTest.php
tests/phpunit/includes/content/TextContentHandlerTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/db/ORMTableTest.php
tests/phpunit/includes/debug/logger/LegacyLoggerTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logger/MonologSpiTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/debug/logging/LegacyLoggerTest.php [deleted file]
tests/phpunit/includes/filebackend/SwiftFileBackendTest.php [new file with mode: 0644]
tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php [new file with mode: 0644]
tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/IEUrlExtensionTest.php
tests/phpunit/includes/libs/IPSetTest.php [deleted file]
tests/phpunit/includes/libs/JavaScriptMinifierTest.php
tests/phpunit/includes/libs/ObjectFactoryTest.php
tests/phpunit/includes/libs/SamplingStatsdClientTest.php [new file with mode: 0644]
tests/phpunit/includes/logging/LogFormatterTestCase.php
tests/phpunit/includes/logging/ProtectLogFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/includes/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/parser/MediaWikiParserTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/parser/TagHooksTest.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/site/DBSiteStoreTest.php
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/includes/utils/BatchRowUpdateTest.php [new file with mode: 0644]
tests/phpunit/languages/LanguageTest.php
tests/phpunit/phpunit.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/generateJqueryMsgData.php
tests/qunit/data/mediawiki.jqueryMsg.data.js
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js
tests/qunit/suites/resources/jquery/jquery.color.test.js
tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js
tests/qunit/suites/resources/jquery/jquery.hidpi.test.js
tests/qunit/suites/resources/jquery/jquery.localize.test.js
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js
tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/jquery/jquery.textSelection.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
thumb.php

diff --git a/.jscsrc b/.jscsrc
index 98b81db..aaa876c 100644 (file)
--- a/.jscsrc
+++ b/.jscsrc
@@ -1,7 +1,26 @@
 {
        "preset": "wikimedia",
+       "es3": true,
 
-       "disallowQuotedKeysInObjects": null,
-       "requireSpacesInsideParentheses": null,
-       "requireSpacesInsideArrayBrackets": null
+       "requireVarDeclFirst": null,
+
+       "disallowQuotedKeysInObjects": "allButReserved",
+       "requireDotNotation": { "allExcept": [ "keywords" ] },
+       "jsDoc": {
+               "requireNewlineAfterDescription": true,
+               "requireParamTypes": true,
+               "requireReturnTypes": true
+       },
+
+       "excludeFiles": [
+               "docs/**",
+               "extensions/**",
+               "node_modules/**",
+               "resources/lib/**",
+               "resources/src/jquery.tipsy/**",
+               "resources/src/jquery/jquery.farbtastic.js",
+               "resources/src/mediawiki.libs/**",
+               "skins/**",
+               "vendor/**"
+       ]
 }
index 1882151..fdde7d0 100644 (file)
@@ -8,4 +8,5 @@ resources/lib/**
 resources/src/jquery.tipsy/**
 resources/src/jquery/jquery.farbtastic.js
 resources/src/mediawiki.libs/**
-tests/frontend/node_modules/**
+skins/**
+vendor/**
index d72c31d..b776e8f 100644 (file)
--- a/.jshintrc
+++ b/.jshintrc
@@ -22,6 +22,7 @@
                "mediaWiki": true,
                "JSON": true,
                "OO": true,
+               "mwPerformance": true,
                "jQuery": false,
                "QUnit": false,
                "sinon": false
index 61ffc1a..5b6c3f2 100644 (file)
@@ -1,6 +1,7 @@
 AllCops:
   Exclude:
     - 'extensions/**/*'
+    - 'node_modules/**/*'
     - 'skins/**/*'
     - 'tests/frontend/node_modules/**/*'
     - 'vendor/**/*'
index 512d735..8ba46b5 100644 (file)
@@ -8,19 +8,17 @@
 #
 language: php
 
-php:
-  - hhvm-nightly
-  - 5.3
-
-env:
-  - dbtype=mysql
-  - dbtype=postgres
-
-# TODO: Travis CI's hhvm does not support PostgreSQL at the moment.
 matrix:
-  exclude:
-    - php: hhvm-nightly
-      env: dbtype=postgres
+  fast_finish: true
+  include:
+    - env: dbtype=mysql
+      php: 5.3
+    - env: dbtype=postgres
+      php: 5.3
+    - env: dbtype=mysql
+      php: hhvm
+    - env: dbtype=mysql
+      php: 7
 
 services:
   - mysql
diff --git a/CREDITS b/CREDITS
index 22dee7b..44adc4f 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -24,6 +24,7 @@ following names for their contribution to the product.
 * Bryan Tong Minh
 * Chad Horohoe
 * Charles Melbye
+* Chris Steipp
 * church of emacs
 * Daniel Friesen
 * Daniel Kinzler
@@ -43,6 +44,7 @@ following names for their contribution to the product.
 * Jack D. Pond
 * Jack Phoenix
 * Jackmcbarn
+* James Forrester
 * Jan Paul Posma
 * Jason Richey
 * Jeroen De Dauw
@@ -91,6 +93,7 @@ following names for their contribution to the product.
 * Tim Starling
 * Timo Tijhof
 * Trevor Parscal
+* Tyler Anthony Romeo
 * Victor Vasiliev
 * Yesid Carrillo
 * Yuri Astrakhan
@@ -116,7 +119,6 @@ following names for their contribution to the product.
 * Brianna Laugher
 * Carlin
 * Carsten Nielsen
-* Chris Steipp
 * Christian Aistleitner
 * Christian Neubauer
 * Conrad Irwin
@@ -139,6 +141,7 @@ following names for their contribution to the product.
 * fomafix
 * FunPika
 * Gabriel Wicke
+* Geoffrey Mon
 * Gero Scholz
 * Gilles van den Hoven
 * Grunny
@@ -227,6 +230,7 @@ following names for their contribution to the product.
 * Simon Walker
 * Solitarius
 * Søren Løvborg
+* Southparkfan
 * Srikanth Lakshmanan
 * Stefano Codari
 * Str4nd
@@ -235,7 +239,6 @@ following names for their contribution to the product.
 * The Evil IP address
 * Tim Landscheidt
 * Tisane
-* Tyler Anthony Romeo
 * Umherirrender
 * Van de Bugger
 * Ville Stadista
index 7aa9dae..3a695ef 100644 (file)
@@ -7,7 +7,7 @@ GEM
     builder (3.2.2)
     childprocess (0.5.6)
       ffi (~> 1.0, >= 1.0.11)
-    cucumber (1.3.19)
+    cucumber (1.3.20)
       builder (>= 2.1.2)
       diff-lcs (>= 1.1.3)
       gherkin (~> 2.12)
@@ -26,7 +26,7 @@ GEM
     faraday-cookie_jar (0.0.6)
       faraday (>= 0.7.4)
       http-cookie (~> 1.0.0)
-    ffi (1.9.8)
+    ffi (1.9.10)
     gherkin (2.12.2)
       multi_json (~> 1.3)
     headless (1.0.2)
@@ -34,7 +34,7 @@ GEM
       domain_name (~> 0.5)
     i18n (0.7.0)
     json (1.8.3)
-    mediawiki_api (0.3.1)
+    mediawiki_api (0.4.1)
       faraday (~> 0.9, >= 0.9.0)
       faraday-cookie_jar (~> 0.0, >= 0.0.6)
     mediawiki_selenium (1.2.1)
@@ -48,7 +48,7 @@ GEM
       syntax (~> 1.2, >= 1.2.0)
       thor (~> 0.19, >= 0.19.1)
     mime-types (2.6.1)
-    multi_json (1.11.0)
+    multi_json (1.11.2)
     multi_test (0.1.2)
     multipart-post (2.0.0)
     netrc (0.10.3)
@@ -58,7 +58,7 @@ GEM
       watir-webdriver (>= 0.6.11)
     page_navigation (0.9)
       data_magic (>= 0.14)
-    parser (2.2.2.5)
+    parser (2.2.2.6)
       ast (>= 1.1, < 3.0)
     powerpack (0.1.1)
     rainbow (2.0.0)
@@ -68,15 +68,15 @@ GEM
       netrc (~> 0.7)
     rspec-expectations (2.99.2)
       diff-lcs (>= 1.1.3, < 2.0)
-    rubocop (0.31.0)
+    rubocop (0.32.1)
       astrolabe (~> 1.3)
-      parser (>= 2.2.2.1, < 3.0)
+      parser (>= 2.2.2.5, < 3.0)
       powerpack (~> 0.1)
       rainbow (>= 1.99.1, < 3.0)
       ruby-progressbar (~> 1.4)
     ruby-progressbar (1.7.5)
     rubyzip (1.1.7)
-    selenium-webdriver (2.45.0)
+    selenium-webdriver (2.46.2)
       childprocess (~> 0.5)
       multi_json (~> 1.0)
       rubyzip (~> 1.0)
@@ -86,8 +86,8 @@ GEM
     unf (0.1.4)
       unf_ext
     unf_ext (0.0.7.1)
-    watir-webdriver (0.7.0)
-      selenium-webdriver (>= 2.45)
+    watir-webdriver (0.8.0)
+      selenium-webdriver (>= 2.46.2)
     websocket (1.2.2)
     yml_reader (0.5)
 
@@ -97,3 +97,6 @@ PLATFORMS
 DEPENDENCIES
   mediawiki_selenium (~> 1.2.1)
   rubocop
+
+BUNDLED WITH
+   1.10.5
index 573db69..8dbeb6b 100644 (file)
@@ -12,55 +12,40 @@ module.exports = function ( grunt ) {
                wgScriptPath = process.env.MW_SCRIPT_PATH,
                karmaProxy = {};
 
-       karmaProxy[wgScriptPath] = wgServer + wgScriptPath;
+       karmaProxy[ wgScriptPath ] = wgServer + wgScriptPath;
 
        grunt.initConfig( {
-               pkg: grunt.file.readJSON( 'package.json' ),
                jshint: {
                        options: {
                                jshintrc: true
                        },
-                       all: [
-                               '*.js',
-                               '{includes,languages,resources,tests}/**/*.js'
-                       ]
+                       all: '.'
                },
                jscs: {
-                       all: [
-                               '<%= jshint.all %>',
-                               // Auto-generated file with JSON (double quotes)
-                               '!tests/qunit/data/mediawiki.jqueryMsg.data.js',
-                               // Skip functions are stored as script files but wrapped in a function when
-                               // executed. node-jscs trips on the would-be "Illegal return statement".
-                               '!resources/src/*-skip.js'
-
-                       // Exclude all files ignored by jshint
-                       ].concat( grunt.file.read( '.jshintignore' ).split( '\n' ).reduce( function ( patterns, pattern ) {
-                               // Filter out empty lines
-                               if ( pattern.length && pattern[0] !== '#' ) {
-                                       patterns.push( '!' + pattern );
-                               }
-                               return patterns;
-                       }, [] ) )
+                       all: '.'
                },
                jsonlint: {
                        all: [
                                '.jscsrc',
-                               '{languages,maintenance,resources}/**/*.json',
-                               'package.json'
+                               '**/*.json',
+                               '!{docs/js,extensions,node_modules,skins,vendor}/**'
                        ]
                },
                banana: {
+                       options: {
+                               disallowBlankTranslations: false,
+                               disallowDuplicateTranslations: false,
+                               disallowUnusedTranslations: false
+                       },
                        core: 'languages/i18n/',
                        api: 'includes/api/i18n/',
                        installer: 'includes/installer/i18n/'
                },
                watch: {
                        files: [
-                               '<%= jscs.all %>',
-                               '<%= jsonlint.all %>',
-                               '.jshintignore',
-                               '.jshintrc'
+                               '.js*',
+                               '**/*',
+                               '!{docs,extensions,node_modules,skins,vendor}/**'
                        ],
                        tasks: 'test'
                },
@@ -107,14 +92,14 @@ module.exports = function ( grunt ) {
                }
                if ( !process.env.MW_SCRIPT_PATH ) {
                        grunt.log.error( 'Environment variable MW_SCRIPT_PATH must be set.\n' +
-                               'Set this like $wgScriptPath, e.g. "/w"');
+                               'Set this like $wgScriptPath, e.g. "/w"' );
                }
                return !!( process.env.MW_SERVER && process.env.MW_SCRIPT_PATH );
        } );
 
-       grunt.registerTask( 'lint', ['jshint', 'jscs', 'jsonlint', 'banana'] );
+       grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'jsonlint', 'banana' ] );
        grunt.registerTask( 'qunit', [ 'assert-mw-env', 'karma:main' ] );
 
-       grunt.registerTask( 'test', ['lint'] );
+       grunt.registerTask( 'test', [ 'lint' ] );
        grunt.registerTask( 'default', 'test' );
 };
index 81269b8..4463c78 100644 (file)
@@ -9,12 +9,27 @@ MediaWiki 1.26 is an alpha-quality branch and is not recommended for use in
 production.
 
 === Configuration changes in 1.26 ===
+* $wgPasswordResetRoutes['email'] = true by default.
 * $wgEnableParserCache was deprecated, set $wgParserCacheType to CACHE_NONE
   instead if you want to disable the parser cache.
 * New-style continuation is now the default for API action=continue. Clients may
   use the 'rawcontinue' parameter to receive raw query-continue data, but the
   new style is encouraged as it's harder to implement incorrectly.
 * Deprecated API formats dump and wddx have been completely removed.
+* (T7645) The "Signature" button on the edit toolbar is now hidden by default
+  in non-talk namespaces. A new configuration variable,
+  $wgExtraSignatureNamespaces, controls in which subject (non-talk) namespaces
+  the "Signature" button on the edit toolbar will be displayed.
+* $wgResourceLoaderUseESI was deprecated and removed. This was an experimental
+  feature that was never enabled by default.
+* $wgResourceLoaderExperimentalAsyncLoading was deprecated and removed.
+  This experimental feature was never enabled by default and is obsolete as of
+  MediaWiki 1.26, in where ResourceLoader became fully asynchronous.
+* $wgMasterWaitTimeout was removed (deprecated in 1.24).
+* Fields in ParserOptions are now private. Use the accessors instead.
+* Custom LESS functions (defined via $wgResourceLoaderLESSFunctions)
+  have been removed, after being deprecated in 1.24.
+* $wgAlwaysUseTidy has been removed.
 
 === New features in 1.26 ===
 * (T51506) Now action=info gives estimates of actual watchers for a page.
@@ -41,6 +56,23 @@ production.
 * Added new hooks 'EnhancedChangesListModifyLineData' &
   'EnhancedChangesListModifyBlockLineData', to modify the data used to build
   lines in enhanced recentchanges and watchlist.
+* Caches that need purging ability now use the WANObjectCache interface.
+  This corresponds to a new $wgMainWANCache setting, which defaults to using
+  the $wgMainCacheType settings.
+* Callers needing fast light-weight data stores use $wgMainStash to select
+  the store type from $wgObjectCaches. The default is the local database.
+* Interface message overrides in the MediaWiki namespace will now be cached in
+  memcached and APC (if available), rather than memcached and local files.
+* Added a new hook, 'RandomPageQuery', to allow modification of the query used
+  by Special:Random to select random pages.
+* $wgTransactionalTimeLimit was added, which controls the request time limit
+  for potentially slow POST requests that need to be as atomic as possible.
+* ResourceLoader now loads all scripts asynchronously. The top-queue and
+  startup modules are no longer synchronously loaded.
+* 'mediawiki.ui.button' styles are no longer unconditionally loaded on every
+  page. During the deprecation period, the styles will only be loaded on pages
+  which contain 'mw-ui-button' in their HTML. Starting in 1.28, the styles will
+  only be loaded if explicitly required.
 
 ==== External libraries ====
 * Update es5-shim from v4.0.0 to v4.1.5.
@@ -53,6 +85,9 @@ production.
 === Bug fixes in 1.26 ===
 * (T53283) load.php sometimes sends 304 response without full headers
 * (T65198) Talk page tabs now have a "rel=discussion" attribute
+* (T98841) {{msgnw:}} now preserves comments even when subst: is not used.
+* (T104142) $wgEmergencyContact and $wgPasswordSender now use their default
+  value if set to an empty string.
 
 === Action API changes in 1.26 ===
 * New-style continuation is now the default for action=continue. Clients may
@@ -71,8 +106,22 @@ production.
   sometimes being numerically-indexed objects with formatversion=2.
 * When errors about users being blocked are returned, they now include
   information about the relevant block.
+* (T99926) list=random has higher limits, in line with other API modules.
+* list=random's rnredirect parameter is deprecated in favor of a new
+  rnfilterredir parameter that also allows for listing both redirects and
+  non-redirects.
+* list=random now supports continuation.
+* API responses to GET requests may now include ETag and Last-Modified headers,
+  and will honor corresponding If-None-Match and If-Modified-Since on such
+  requests.
 
 === Action API internal changes in 1.26 ===
+* New metadata item ApiResult::META_KVP_MERGE to allow for merging the KVP key
+  into the value when the value is an assoc.
+* API action modules may now provide values for the RFC 7232 ETag and
+  Last-Modified headers. The API will check these against If-None-Match and
+  If-Modified-Since request headers on GET requests and avoid executing the
+  module when appropriate.
 
 === Languages updated in 1.26 ===
 
@@ -81,13 +130,16 @@ regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Phabricator reports.
 
 * Languages added:
+** ase (American sign language), thanks to translator Icemandeaf
 ** dty (डोटेली/Doteli), thanks to translators जनक राज भट्ट, बिप्लब आनन्द,
    मेश सिंह बोहरा, and राम प्रसाद जोशी
+** luz (لئری دوٙمینی / Southern Luri)
 
 === Other changes in 1.26 ===
 * ChangeTags::tagDescription() will return false if the interface message
   for the tag is disabled.
 * Added PageHistoryPager::doBatchLookups hook.
+* Added $wikiId parameter to FormatAutocomments hook.
 * Added ParserCacheSaveComplete to ParserCache
 * supportsDirectEditing and supportsDirectApiEditing methods added to
   ContentHandler, to provide a way for ApiEditPage and EditPage to check
@@ -127,6 +179,14 @@ changes to languages because of Phabricator reports.
 * $wgSpecialPageGroups was removed (deprecated in 1.21).
 * SpecialPageFactory::setGroup was removed (deprecated in 1.21).
 * SpecialPageFactory::getGroup was removed (deprecated in 1.21).
+* DatabaseBase::ignoreErrors() is now protected.
+* BREAKING CHANGE: mediawiki.legacy.ajax has been removed, following
+  a lengthy deprecation period.
+* The ScopedPHPTimeout class was removed.
+* Removed maintenance script fixSlaveDesync.php.
+* Watchlist tokens, SpecialResetTokens, and User::getTokenFromOption()
+  are deprecated. Applications using those can work via the OAuth
+  extension instead. New tokens types should not be added.
 
 == Compatibility ==
 
index 8e4da1e..5adfbe5 100644 (file)
@@ -157,6 +157,9 @@ $wgAutoloadLocalClasses = array(
        'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php',
        'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
        'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php',
+       'BatchRowIterator' => __DIR__ . '/includes/utils/BatchRowIterator.php',
+       'BatchRowUpdate' => __DIR__ . '/includes/utils/BatchRowUpdate.php',
+       'BatchRowWriter' => __DIR__ . '/includes/utils/BatchRowWriter.php',
        'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
        'BcryptPassword' => __DIR__ . '/includes/password/BcryptPassword.php',
        'BenchHttpHttps' => __DIR__ . '/maintenance/benchmarks/bench_HTTP_HTTPS.php',
@@ -279,6 +282,7 @@ $wgAutoloadLocalClasses = array(
        'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
        'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php',
        'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php',
+       'DBAccessObjectUtils' => __DIR__ . '/includes/dao/DBAccessObjectUtils.php',
        'DBConnRef' => __DIR__ . '/includes/db/DBConnRef.php',
        'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php',
        'DBError' => __DIR__ . '/includes/db/DatabaseError.php',
@@ -418,6 +422,7 @@ $wgAutoloadLocalClasses = array(
        'Field' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'File' => __DIR__ . '/includes/filerepo/file/File.php',
        'FileBackend' => __DIR__ . '/includes/filebackend/FileBackend.php',
+       'FileBackendDBRepoWrapper' => __DIR__ . '/includes/filerepo/FileBackendDBRepoWrapper.php',
        'FileBackendError' => __DIR__ . '/includes/filebackend/FileBackend.php',
        'FileBackendException' => __DIR__ . '/includes/filebackend/FileBackend.php',
        'FileBackendGroup' => __DIR__ . '/includes/filebackend/FileBackendGroup.php',
@@ -442,7 +447,6 @@ $wgAutoloadLocalClasses = array(
        'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php',
        'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php',
        'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php',
-       'FixSlaveDesync' => __DIR__ . '/maintenance/fixSlaveDesync.php',
        'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php',
        'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php',
        'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php',
@@ -488,10 +492,10 @@ $wgAutoloadLocalClasses = array(
        'HTMLFileCache' => __DIR__ . '/includes/cache/HTMLFileCache.php',
        'HTMLFloatField' => __DIR__ . '/includes/htmlform/HTMLFloatField.php',
        'HTMLForm' => __DIR__ . '/includes/htmlform/HTMLForm.php',
-       'HTMLFormFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLFormFieldWithButton.php',
        'HTMLFormField' => __DIR__ . '/includes/htmlform/HTMLFormField.php',
        'HTMLFormFieldCloner' => __DIR__ . '/includes/htmlform/HTMLFormFieldCloner.php',
        'HTMLFormFieldRequiredOptionsException' => __DIR__ . '/includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
+       'HTMLFormFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLFormFieldWithButton.php',
        'HTMLHiddenField' => __DIR__ . '/includes/htmlform/HTMLHiddenField.php',
        'HTMLInfoField' => __DIR__ . '/includes/htmlform/HTMLInfoField.php',
        'HTMLIntField' => __DIR__ . '/includes/htmlform/HTMLIntField.php',
@@ -509,6 +513,8 @@ $wgAutoloadLocalClasses = array(
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
        'HTMLTextFieldWithButton' => __DIR__ . '/includes/htmlform/HTMLTextFieldWithButton.php',
+       'HTMLTitleTextField' => __DIR__ . '/includes/htmlform/HTMLTitleTextField.php',
+       'HTMLUserTextField' => __DIR__ . '/includes/htmlform/HTMLUserTextField.php',
        'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
        'HashBagOStuff' => __DIR__ . '/includes/libs/objectcache/HashBagOStuff.php',
        'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
@@ -530,14 +536,14 @@ $wgAutoloadLocalClasses = array(
        'ICacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
        'IContextSource' => __DIR__ . '/includes/context/IContextSource.php',
        'IDBAccessObject' => __DIR__ . '/includes/dao/IDBAccessObject.php',
-       'IDatabase' => __DIR__ . '/includes/db/Database.php',
+       'IDatabase' => __DIR__ . '/includes/db/IDatabase.php',
        'IEContentAnalyzer' => __DIR__ . '/includes/libs/IEContentAnalyzer.php',
        'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php',
        'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
        'IORMRow' => __DIR__ . '/includes/db/IORMRow.php',
        'IORMTable' => __DIR__ . '/includes/db/IORMTable.php',
        'IP' => __DIR__ . '/includes/utils/IP.php',
-       'IPSet' => __DIR__ . '/includes/libs/IPSet.php',
+       'IPSet' => __DIR__ . '/includes/compat/IPSetCompat.php',
        'IPTC' => __DIR__ . '/includes/media/IPTC.php',
        'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php',
        'IcuCollation' => __DIR__ . '/includes/Collation.php',
@@ -569,6 +575,7 @@ $wgAutoloadLocalClasses = array(
        'InstallerOverrides' => __DIR__ . '/mw-config/overrides.php',
        'Interwiki' => __DIR__ . '/includes/interwiki/Interwiki.php',
        'InvalidPassword' => __DIR__ . '/includes/password/InvalidPassword.php',
+       'IteratorDecorator' => __DIR__ . '/includes/utils/iterators/IteratorDecorator.php',
        'IuConverter' => __DIR__ . '/languages/classes/LanguageIu.php',
        'JSCompilerContext' => __DIR__ . '/includes/libs/jsminplus.php',
        'JSMinPlus' => __DIR__ . '/includes/libs/jsminplus.php',
@@ -678,7 +685,7 @@ $wgAutoloadLocalClasses = array(
        'LoadBalancer' => __DIR__ . '/includes/db/LoadBalancer.php',
        'LoadBalancerSingle' => __DIR__ . '/includes/db/LBFactorySingle.php',
        'LoadMonitor' => __DIR__ . '/includes/db/LoadMonitor.php',
-       'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitor.php',
+       'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitorMySQL.php',
        'LoadMonitorNull' => __DIR__ . '/includes/db/LoadMonitor.php',
        'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
        'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
@@ -717,7 +724,6 @@ $wgAutoloadLocalClasses = array(
        'MWOldPassword' => __DIR__ . '/includes/password/MWOldPassword.php',
        'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php',
        'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php',
-       'MWTidyWrapper' => __DIR__ . '/includes/parser/MWTidy.php',
        'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php',
        'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
        'MagicWord' => __DIR__ . '/includes/MagicWord.php',
@@ -749,11 +755,23 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
        'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
        'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
+       'MediaWiki\\Logger\\Monolog\\LineFormatter' => __DIR__ . '/includes/debug/logger/monolog/LineFormatter.php',
        'MediaWiki\\Logger\\Monolog\\SyslogHandler' => __DIR__ . '/includes/debug/logger/monolog/SyslogHandler.php',
        'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
        'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
        'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
+       'MediaWiki\\Tidy\\Html5Depurate' => __DIR__ . '/includes/tidy/Html5Depurate.php',
+       'MediaWiki\\Tidy\\RaggettBase' => __DIR__ . '/includes/tidy/RaggettBase.php',
+       'MediaWiki\\Tidy\\RaggettExternal' => __DIR__ . '/includes/tidy/RaggettExternal.php',
+       'MediaWiki\\Tidy\\RaggettInternalHHVM' => __DIR__ . '/includes/tidy/RaggettInternalHHVM.php',
+       'MediaWiki\\Tidy\\RaggettInternalPHP' => __DIR__ . '/includes/tidy/RaggettInternalPHP.php',
+       'MediaWiki\\Tidy\\RaggettWrapper' => __DIR__ . '/includes/tidy/RaggettWrapper.php',
+       'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php',
+       'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
+       'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
+       'MediaWiki\\Widget\\NamespaceInputWidget' => __DIR__ . '/includes/widget/NamespaceInputWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
+       'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
        'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
        'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
        'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
@@ -768,6 +786,7 @@ $wgAutoloadLocalClasses = array(
        'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php',
        'MessageContent' => __DIR__ . '/includes/content/MessageContent.php',
        'MessageSpecifier' => __DIR__ . '/includes/libs/MessageSpecifier.php',
+       'MigrateFileRepoLayout' => __DIR__ . '/maintenance/migrateFileRepoLayout.php',
        'MigrateUserGroup' => __DIR__ . '/maintenance/migrateUserGroup.php',
        'MimeMagic' => __DIR__ . '/includes/MimeMagic.php',
        'MinifyScript' => __DIR__ . '/maintenance/minify.php',
@@ -792,6 +811,7 @@ $wgAutoloadLocalClasses = array(
        'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php',
        'MultiWriteBagOStuff' => __DIR__ . '/includes/objectcache/MultiWriteBagOStuff.php',
        'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
+       'MutableContext' => __DIR__ . '/includes/context/MutableContext.php',
        'MwSql' => __DIR__ . '/maintenance/sql.php',
        'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php',
        'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
@@ -808,6 +828,7 @@ $wgAutoloadLocalClasses = array(
        'NewPagesPager' => __DIR__ . '/includes/specials/SpecialNewpages.php',
        'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php',
        'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php',
+       'NotRecursiveIterator' => __DIR__ . '/includes/utils/iterators/NotRecursiveIterator.php',
        'NukeNS' => __DIR__ . '/maintenance/nukeNS.php',
        'NukePage' => __DIR__ . '/maintenance/nukePage.php',
        'NullFileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php',
@@ -896,6 +917,7 @@ $wgAutoloadLocalClasses = array(
        'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
        'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
        'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
+       'PopulateContentModel' => __DIR__ . '/maintenance/populateContentModel.php',
        'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
        'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
        'PopulateLogSearch' => __DIR__ . '/maintenance/populateLogSearch.php',
@@ -932,6 +954,7 @@ $wgAutoloadLocalClasses = array(
        'ProfilerXhprof' => __DIR__ . '/includes/profiler/ProfilerXhprof.php',
        'Protect' => __DIR__ . '/maintenance/protect.php',
        'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php',
+       'ProtectLogFormatter' => __DIR__ . '/includes/logging/ProtectLogFormatter.php',
        'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
        'ProtectedTitlesPager' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php',
        'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php',
@@ -996,6 +1019,7 @@ $wgAutoloadLocalClasses = array(
        'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php',
        'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
        'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
+       'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderForeignApiModule.php',
        'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
        'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
        'ResourceLoaderJqueryMsgModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderJqueryMsgModule.php',
@@ -1044,16 +1068,17 @@ $wgAutoloadLocalClasses = array(
        'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php',
        'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
        'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php',
+       'RowUpdateGenerator' => __DIR__ . '/includes/utils/RowUpdateGenerator.php',
        'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
        'RunningStat' => __DIR__ . '/includes/libs/RunningStat.php',
        'SQLiteField' => __DIR__ . '/includes/db/DatabaseSqlite.php',
        'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
        'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+       'SamplingStatsdClient' => __DIR__ . '/includes/libs/SamplingStatsdClient.php',
        'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
        'SavepointPostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php',
        'ScopedLock' => __DIR__ . '/includes/filebackend/lockmanager/ScopedLock.php',
-       'ScopedPHPTimeout' => __DIR__ . '/includes/libs/ScopedPHPTimeout.php',
        'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php',
        'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php',
        'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php',
index 2570a40..1fe1e50 100644 (file)
                "cssjanus/cssjanus": "1.1.1",
                "ext-iconv": "*",
                "leafo/lessphp": "0.5.0",
-               "liuggio/statsd-php-client": "1.0.12",
+               "liuggio/statsd-php-client": "1.0.16",
                "mediawiki/at-ease": "1.0.0",
-               "oojs/oojs-ui": "0.11.8",
+               "oojs/oojs-ui": "0.12.8",
                "php": ">=5.3.3",
                "psr/log": "1.0.0",
-               "wikimedia/cdb": "1.0.1",
                "wikimedia/assert": "0.2.2",
+               "wikimedia/cdb": "1.3.0",
                "wikimedia/composer-merge-plugin": "1.2.1",
-               "wikimedia/utfnormal": "1.0.2",
+               "wikimedia/ip-set": "1.0.1",
+               "wikimedia/utfnormal": "1.0.3",
+               "wikimedia/wrappedstring": "2.0.0",
                "zordius/lightncandy": "0.21"
        },
        "require-dev": {
                "mediawiki/mediawiki-codesniffer": "0.3.0"
        },
        "suggest": {
-               "ext-fileinfo": "*",
-               "ext-intl": "*",
-               "ext-mbstring": "*",
-               "ext-wikidiff2": "*",
-               "ext-apc": "*",
-               "monolog/monolog": "*"
+               "ext-fileinfo": "Improved mime magic detection",
+               "ext-intl": "ICU integration",
+               "ext-mbstring": "Multibyte string support",
+               "ext-wikidiff2": "Diff accelerator",
+               "ext-apc": "Local data and opcode cache",
+               "monolog/monolog": "Flexible debug logging system",
+               "pear/mail": "Mail sending support",
+               "pear/mail_mime": "Mail sending support",
+               "pear/mail_mime-decode": "Mail sending support"
        },
        "autoload": {
                "psr-0": {
@@ -51,7 +56,7 @@
        },
        "scripts": {
                "lint": "parallel-lint --exclude vendor",
-               "phpcs": "phpcs $PHPCS_ARGS -s --standard=vendor/mediawiki/mediawiki-codesniffer/MediaWiki --ignore=vendor,node_modules --encoding=utf-8 --extensions=php,php5,inc,sample",
+               "phpcs": "phpcs -p $PHPCS_ARGS",
                "test": [
                        "composer lint",
                        "composer phpcs"
@@ -60,7 +65,6 @@
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        },
        "config": {
-               "classmap-authoritative": true,
                "prepend-autoloader": false,
                "optimize-autoloader": true
        },
index c9f629c..d11635d 100644 (file)
                                                                "bottom",
                                                                "top"
                                                        ]
+                                               },
+                                               "templates": {
+                                                       "type": "object",
+                                                       "description": "Templates to be loaded for client-side usage"
                                                }
                                        }
                                }
                        "type": "object",
                        "description": "ResourceLoader LESS variables"
                },
-               "ResourceLoaderLESSFunctions": {
-                       "type": "object",
-                       "description": "ResourceLoader LESS functions"
-               },
                "ResourceLoaderLESSImportPaths": {
                        "type": "object",
                        "description": "ResourceLoader import paths"
                        "description": "Registry of factory functions to create Config objects"
                },
                "namespaces": {
-                       "type": "object",
+                       "type": "array",
                        "description": "Method to add extra namespaces",
-                       "properties": {
-                               "id": {
-                                       "type": "integer"
-                               },
-                               "constant": {
-                                       "type": "string"
-                               },
-                               "name": {
-                                       "type": "string"
-                               },
-                               "gender": {
-                                       "type": "object",
-                                       "properties": {
-                                               "male": {
-                                                       "type": "string"
-                                               },
-                                               "female": {
-                                                       "type": "string"
+                       "items": {
+                               "type": "object",
+                               "properties": {
+                                       "id": {
+                                               "type": "integer"
+                                       },
+                                       "constant": {
+                                               "type": "string"
+                                       },
+                                       "name": {
+                                               "type": "string"
+                                       },
+                                       "gender": {
+                                               "type": "object",
+                                               "properties": {
+                                                       "male": {
+                                                               "type": "string"
+                                                       },
+                                                       "female": {
+                                                               "type": "string"
+                                                       }
                                                }
+                                       },
+                                       "subpages": {
+                                               "type": "boolean",
+                                               "default": false
+                                       },
+                                       "content": {
+                                               "type": "boolean",
+                                               "default": false
+                                       },
+                                       "defaultcontentmodel": {
+                                               "type": "string"
+                                       },
+                                       "protection": {
+                                               "type": ["string", "array"],
+                                               "description": "Userright(s) required to edit in this namespace"
+                                       },
+                                       "capitallinkoverride": {
+                                               "type": "boolean",
+                                               "description": "Set $wgCapitalLinks on a per-namespace basis"
                                        }
                                },
-                               "subpages": {
-                                       "type": "boolean",
-                                       "default": false
-                               },
-                               "content": {
-                                       "type": "boolean",
-                                       "default": false
-                               },
-                               "defaultcontentmodel": {
-                                       "type": "string"
-                               }
+                               "required": ["id", "constant", "name"]
                        }
                },
                "TrackingCategories": {
                },
                "config": {
                        "type": "object",
-                       "description": "Configuration options for this extension"
+                       "description": "Configuration options for this extension",
+                       "properties": {
+                               "_prefix": {
+                                       "type": "string",
+                                       "default": "wg",
+                                       "description": "Prefix to put in front of configuration settings when exporting them to $GLOBALS"
+                               }
+                       },
+                       "patternProperties": {
+                               "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
+                                       "type": ["object", "array", "string", "integer", "null", "boolean"],
+                                       "properties": {
+                                               "_merge_strategy": {
+                                                       "type": "string",
+                                                       "enum": [
+                                                               "array_merge_recursive",
+                                                               "array_plus_2d",
+                                                               "array_plus",
+                                                               "array_merge"
+                                                       ],
+                                                       "default": "array_merge"
+                                               }
+                                       }
+                               }
+                       }
                },
                "ParserTestFiles": {
                        "type": "array",
index 23df983..54ab46c 100644 (file)
@@ -1376,6 +1376,9 @@ $auto: The extracted part of the parsed comment before the call to the hook.
 $post: Boolean, true if there is text after this autocomment
 $title: An optional title object used to links to sections. Can be null.
 $local: Boolean indicating whether section links should refer to local page.
+$wikiId: String containing the ID (as used by WikiMap) of the wiki from which the
+  autocomment originated; null for the local wiki. Added in 1.26, should default
+  to null in handler functions, for backwards compatibility.
 
 'GalleryGetModes': Get list of classes that can render different modes of a
 gallery.
@@ -2177,7 +2180,7 @@ the key.
 &$confstr: reference to a hash key string which can be modified
 $user: User (object) requesting the page
 
-'PageViewUpdate': Allow database (or other) changes to be made after a
+'PageViewUpdates': Allow database (or other) changes to be made after a
 page view is seen by MediaWiki.  Note this does not capture views made
 via external caches such as Squid.
 $wikipage: WikiPage (object) for the page being viewed.
@@ -2313,6 +2316,8 @@ that tests continue to run properly.
 'PasswordPoliciesForUser': Alter the effective password policy for a user.
 $user: User object whose policy you are modifying
 &$effectivePolicy: Array of policy statements that apply to this user
+$purpose: string indicating purpose of the check, one of 'login', 'create',
+  or 'reset'
 
 'PerformRetroactiveAutoblock': Called before a retroactive autoblock is applied
 to a user.
@@ -2405,6 +2410,12 @@ shown.
 $article: the page the form is shown for
 $out: OutputPage object
 
+'RandomPageQuery': Lets you modify the query used by Special:Random to select
+random pages.
+&$tables: Database tables to be used in the query
+&$conds: Conditions to be applied in the query
+&$joinConds: Join conditions to be applied in the query
+
 'RawPageViewBeforeOutput': Right before the text is blown out in action=raw.
 &$obj: RawAction object
 &$text: The text that's going to be the output
@@ -2440,6 +2451,13 @@ $user: The user having their password expiration reset
 $oldSessionID: old session id
 $newSessionID: new session id
 
+'ResourceLoaderForeignApiModules': Called from ResourceLoaderForeignApiModule.
+Use this to add dependencies to 'mediawiki.ForeignApi' module when you wish
+to override its behavior. See the module docs for more information.
+&$dependencies: string[] List of modules that 'mediawiki.ForeignApi' should
+depend on
+$context: ResourceLoaderContext|null
+
 'ResourceLoaderGetConfigVars': Called at the end of
 ResourceLoaderStartUpModule::getConfigSettings(). Use this to export static
 configuration variables to JavaScript. Things that depend on the current page
index 51c1b55..6ab57d7 100644 (file)
@@ -2,6 +2,7 @@
 <html lang="en" dir="ltr">
 <head>
        <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
+       <link rel="stylesheet" href="../../resources/src/mediawiki/mediawiki.feedlink.css">
 </head>
 <body style="font-size: small;">
 
index f233ad7..37429b9 100644 (file)
@@ -211,7 +211,7 @@ $wgLoadScript = false;
 
 /**
  * The URL path of the skins directory.
- * Defaults to "{$wgScriptPath}/skins".
+ * Defaults to "{$wgResourceBasePath}/skins".
  * @since 1.3
  */
 $wgStylePath = false;
@@ -226,7 +226,7 @@ $wgLocalStylePath = false;
 
 /**
  * The URL path of the extensions directory.
- * Defaults to "{$wgScriptPath}/extensions".
+ * Defaults to "{$wgResourceBasePath}/extensions".
  * @since 1.16
  */
 $wgExtensionAssetsPath = false;
@@ -1021,7 +1021,7 @@ $wgSVGConverterPath = '';
 /**
  * Don't scale a SVG larger than this
  */
-$wgSVGMaxSize = 2048;
+$wgSVGMaxSize = 5120;
 
 /**
  * Don't read SVG metadata beyond this point.
@@ -1597,7 +1597,8 @@ $wgEnotifRevealEditorAddress = false;
 
 /**
  * Send notification mails on minor edits to watchlist pages. This is enabled
- * by default. Does not affect user talk notifications.
+ * by default. User talk notifications are affected by this, $wgEnotifUserTalk, and
+ * the nominornewtalk user right.
  */
 $wgEnotifMinorEdits = true;
 
@@ -1622,15 +1623,6 @@ $wgEnotifMaxRecips = 500;
  */
 $wgEnotifUseJobQ = false;
 
-/**
- * Use the job queue for user activity updates like updating "last visited"
- * fields for email notifications of page changes. This should only be enabled
- * if the jobs have a dedicated runner to avoid update lag.
- *
- * @since 1.26
- */
-$wgActivityUpdatesUseJobQueue = false;
-
 /**
  * Use real name instead of username in e-mail "from" field.
  */
@@ -1868,12 +1860,6 @@ $wgDBservers = false;
  */
 $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' );
 
-/**
- * How long to wait for a slave to catch up to the master
- * @deprecated since 1.24
- */
-$wgMasterWaitTimeout = 10;
-
 /**
  * File to log database errors to
  */
@@ -2086,6 +2072,14 @@ $wgMaxArticleSize = 2048;
  */
 $wgMemoryLimit = "50M";
 
+/**
+ * The minimum amount of time that MediaWiki needs for "slow" write request,
+ * particularly ones with multiple non-atomic writes that *should* be as
+ * transactional as possible; MediaWiki will call set_time_limit() if needed.
+ * @since 1.26
+ */
+$wgTransactionalTimeLimit = 120;
+
 /** @} */ # end performance hacks }
 
 /************************************************************************//**
@@ -3479,8 +3473,8 @@ $wgResourceModuleSkinStyles = array();
 $wgResourceLoaderSources = array();
 
 /**
- * Default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
- * If not set, then $wgScriptPath will be used as a fallback.
+ * The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
+ * Defaults to $wgScriptPath.
  */
 $wgResourceBasePath = null;
 
@@ -3518,13 +3512,6 @@ $wgResourceLoaderMaxage = array(
  */
 $wgResourceLoaderDebug = false;
 
-/**
- * Enable embedding of certain resources using Edge Side Includes. This will
- * improve performance but only works if there is something in front of the
- * web server (e..g a Squid or Varnish server) configured to process the ESI.
- */
-$wgResourceLoaderUseESI = false;
-
 /**
  * Put each statement on its own line when minifying JavaScript. This makes
  * debugging in non-debug mode a bit easier.
@@ -3539,28 +3526,27 @@ $wgResourceLoaderMinifierStatementsOnOwnLine = false;
 $wgResourceLoaderMinifierMaxLineLength = 1000;
 
 /**
- * Whether to include the mediawiki.legacy JS library (old wikibits.js), and its
- * dependencies.
+ * Whether to ensure the mediawiki.legacy library is loaded before other modules.
+ *
+ * @deprecated since 1.26: Always declare dependencies.
  */
 $wgIncludeLegacyJavaScript = true;
 
 /**
- * Whether to preload the mediawiki.util module as blocking module in the top
- * queue.
+ * Whether to ensure the mediawiki.util is loaded before other modules.
  *
- * Before MediaWiki 1.19, modules used to load slower/less asynchronous which
- * allowed modules to lack dependencies on 'popular' modules that were likely
- * loaded already.
+ * Before MediaWiki 1.19, modules used to load less asynchronous which allowed
+ * modules to lack dependencies on 'popular' modules that were likely loaded already.
  *
  * This setting is to aid scripts during migration by providing mediawiki.util
- * unconditionally (which was the most commonly missed dependency).
- * It doesn't cover all missing dependencies obviously but should fix most of
- * them.
+ * unconditionally (which was the most commonly missed dependency). It doesn't
+ * cover all missing dependencies obviously but should fix most of them.
  *
  * This should be removed at some point after site/user scripts have been fixed.
  * Enable this if your wiki has a large amount of user/site scripts that are
  * lacking dependencies.
- * @todo Deprecate
+ *
+ * @deprecated since 1.26: Always declare dependencies.
  */
 $wgPreloadJavaScriptMwUtil = false;
 
@@ -3625,13 +3611,6 @@ $wgResourceLoaderValidateJS = true;
  */
 $wgResourceLoaderValidateStaticJS = false;
 
-/**
- * If set to true, asynchronous loading of bottom-queue scripts in the "<head>"
- * will be enabled. This is an experimental feature that's supposed to make
- * JavaScript load faster.
- */
-$wgResourceLoaderExperimentalAsyncLoading = false;
-
 /**
  * Global LESS variables. An associative array binding variable names to
  * LESS code snippets representing their values.
@@ -3657,18 +3636,6 @@ $wgResourceLoaderExperimentalAsyncLoading = false;
  */
 $wgResourceLoaderLESSVars = array();
 
-/**
- * Custom LESS functions. An associative array mapping function name to PHP
- * callable.
- *
- * Changes to LESS functions do not trigger cache invalidation.
- *
- * @since 1.22
- * @deprecated since 1.24 Questionable usefulness and problematic to support,
- *     will be removed in the future.
- */
-$wgResourceLoaderLESSFunctions = array();
-
 /**
  * Default import paths for LESS modules. LESS files referenced in @import
  * statements will be looked up here first, and relative to the importing file
@@ -3741,8 +3708,8 @@ $wgMetaNamespaceTalk = false;
  * Additional namespaces. If the namespaces defined in Language.php and
  * Namespace.php are insufficient, you can create new ones here, for example,
  * to import Help files in other languages. You can also override the namespace
- * names of existing namespaces. Extensions developers should use
- * $wgCanonicalNamespaceNames.
+ * names of existing namespaces. Extensions should use the CanonicalNamespaces
+ * hook or extension.json.
  *
  * @warning Once you delete a namespace, the pages in that namespace will
  * no longer be accessible. If you rename it, then you can access them through
@@ -3977,6 +3944,15 @@ $wgTrackingCategories = array();
  */
 $wgContentNamespaces = array( NS_MAIN );
 
+/**
+ * Array of namespaces, in addition to the talk namespaces, where signatures
+ * (~~~~) are likely to be used. This determines whether to display the
+ * Signature button on the edit toolbar, and may also be used by extensions.
+ * For example, "traditional" style wikis, where content and discussion are
+ * intermixed, could place NS_MAIN and NS_PROJECT namespaces in this array.
+ */
+$wgExtraSignatureNamespaces = array();
+
 /**
  * Max number of redirects to follow when resolving redirects.
  * 1 means only the first redirect is followed (default behavior).
@@ -4128,44 +4104,55 @@ $wgEnableImageWhitelist = true;
 $wgAllowImageTag = false;
 
 /**
- * $wgUseTidy: use tidy to make sure HTML output is sane.
- * Tidy is a free tool that fixes broken HTML.
- * See http://www.w3.org/People/Raggett/tidy/
+ * Configuration for HTML postprocessing tool. Set this to a configuration
+ * array to enable an external tool. Dave Raggett's "HTML Tidy" is typically
+ * used. See http://www.w3.org/People/Raggett/tidy/
+ *
+ * If this is null and $wgUseTidy is true, the deprecated configuration
+ * parameters will be used instead.
  *
- * - $wgTidyBin should be set to the path of the binary and
- * - $wgTidyConf to the path of the configuration file.
- * - $wgTidyOpts can include any number of parameters.
- * - $wgTidyInternal controls the use of the PECL extension or the
- *   libtidy (PHP >= 5) extension to use an in-process tidy library instead
- *   of spawning a separate program.
- *   Normally you shouldn't need to override the setting except for
- *   debugging. To install, use 'pear install tidy' and add a line
- *   'extension=tidy.so' to php.ini.
+ * If this is null and $wgUseTidy is false, a pure PHP fallback will be used.
+ *
+ * Keys are:
+ *  - driver: May be:
+ *    - RaggettInternalHHVM: Use the limited-functionality HHVM extension
+ *    - RaggettInternalPHP: Use the PECL extension
+ *    - RaggettExternal: Shell out to an external binary (tidyBin)
+ *
+ *  - tidyConfigFile: Path to configuration file for any of the Raggett drivers
+ *  - debugComment: True to add a comment to the output with warning messages
+ *  - tidyBin: For RaggettExternal, the path to the tidy binary.
+ *  - tidyCommandLine: For RaggettExternal, additional command line options.
  */
-$wgUseTidy = false;
+$wgTidyConfig = null;
 
 /**
- * @see $wgUseTidy
+ * Set this to true to use the deprecated tidy configuration parameters.
+ * @deprecated use $wgTidyConfig
  */
-$wgAlwaysUseTidy = false;
+$wgUseTidy = false;
 
 /**
- * @see $wgUseTidy
+ * The path to the tidy binary.
+ * @deprecated Use $wgTidyConfig['tidyBin']
  */
 $wgTidyBin = 'tidy';
 
 /**
- * @see $wgUseTidy
+ * The path to the tidy config file
+ * @deprecated Use $wgTidyConfig['tidyConfigFile']
  */
-$wgTidyConf = $IP . '/includes/tidy.conf';
+$wgTidyConf = $IP . '/includes/tidy/tidy.conf';
 
 /**
- * @see $wgUseTidy
+ * The command line options to the tidy binary
+ * @deprecated Use $wgTidyConfig['tidyCommandLine']
  */
 $wgTidyOpts = '';
 
 /**
- * @see $wgUseTidy
+ * Set this to true to use the tidy extension
+ * @deprecated Use $wgTidyConfig['driver']
  */
 $wgTidyInternal = extension_loaded( 'tidy' );
 
@@ -4447,7 +4434,7 @@ $wgPasswordConfig = array(
  */
 $wgPasswordResetRoutes = array(
        'username' => true,
-       'email' => false,
+       'email' => true,
 );
 
 /**
@@ -6735,7 +6722,7 @@ $wgJobSerialCommitThreshold = false;
  * These settings should be global to all wikis.
  */
 $wgJobTypeConf = array(
-       'default' => array( 'class' => 'JobQueueDB', 'order' => 'random' ),
+       'default' => array( 'class' => 'JobQueueDB', 'order' => 'random', 'claimTTL' => 3600 ),
 );
 
 /**
@@ -6927,15 +6914,15 @@ $wgLogNames = array(
 $wgLogHeaders = array(
        '' => 'alllogstext',
        'block' => 'blocklogtext',
-       'protect' => 'protectlogtext',
-       'rights' => 'rightslogtext',
        'delete' => 'dellogpagetext',
-       'upload' => 'uploadlogpagetext',
-       'move' => 'movelogpagetext',
        'import' => 'importlogpagetext',
-       'patrol' => 'patrol-log-header',
        'merge' => 'mergelogpagetext',
+       'move' => 'movelogpagetext',
+       'patrol' => 'patrol-log-header',
+       'protect' => 'protectlogtext',
+       'rights' => 'rightslogtext',
        'suppress' => 'suppressionlogtext',
+       'upload' => 'uploadlogpagetext',
 );
 
 /**
@@ -6945,10 +6932,9 @@ $wgLogHeaders = array(
  * Extensions with custom log types may add to this array.
  */
 $wgLogActions = array(
-       'protect/protect' => 'protectedarticle',
        'protect/modify' => 'modifiedarticleprotection',
+       'protect/protect' => 'protectedarticle',
        'protect/unprotect' => 'unprotectedarticle',
-       'protect/move_prot' => 'movedarticleprotection',
 );
 
 /**
@@ -6958,35 +6944,36 @@ $wgLogActions = array(
  * @see LogFormatter
  */
 $wgLogActionsHandlers = array(
-       'move/move' => 'MoveLogFormatter',
-       'move/move_redir' => 'MoveLogFormatter',
+       'block/block' => 'BlockLogFormatter',
+       'block/reblock' => 'BlockLogFormatter',
+       'block/unblock' => 'BlockLogFormatter',
+       'contentmodel/change' => 'ContentModelLogFormatter',
        'delete/delete' => 'DeleteLogFormatter',
+       'delete/event' => 'DeleteLogFormatter',
        'delete/restore' => 'DeleteLogFormatter',
        'delete/revision' => 'DeleteLogFormatter',
-       'delete/event' => 'DeleteLogFormatter',
-       'suppress/revision' => 'DeleteLogFormatter',
-       'suppress/event' => 'DeleteLogFormatter',
-       'suppress/delete' => 'DeleteLogFormatter',
-       'patrol/patrol' => 'PatrolLogFormatter',
-       'rights/rights' => 'RightsLogFormatter',
-       'rights/autopromote' => 'RightsLogFormatter',
-       'upload/upload' => 'UploadLogFormatter',
-       'upload/overwrite' => 'UploadLogFormatter',
-       'upload/revert' => 'UploadLogFormatter',
-       'merge/merge' => 'MergeLogFormatter',
-       'tag/update' => 'TagLogFormatter',
-       'managetags/create' => 'LogFormatter',
-       'managetags/delete' => 'LogFormatter',
+       'import/interwiki' => 'LogFormatter',
+       'import/upload' => 'LogFormatter',
        'managetags/activate' => 'LogFormatter',
+       'managetags/create' => 'LogFormatter',
        'managetags/deactivate' => 'LogFormatter',
-       'block/block' => 'BlockLogFormatter',
-       'block/unblock' => 'BlockLogFormatter',
-       'block/reblock' => 'BlockLogFormatter',
+       'managetags/delete' => 'LogFormatter',
+       'merge/merge' => 'MergeLogFormatter',
+       'move/move' => 'MoveLogFormatter',
+       'move/move_redir' => 'MoveLogFormatter',
+       'patrol/patrol' => 'PatrolLogFormatter',
+       'protect/move_prot' => 'ProtectLogFormatter',
+       'rights/autopromote' => 'RightsLogFormatter',
+       'rights/rights' => 'RightsLogFormatter',
        'suppress/block' => 'BlockLogFormatter',
+       'suppress/delete' => 'DeleteLogFormatter',
+       'suppress/event' => 'DeleteLogFormatter',
        'suppress/reblock' => 'BlockLogFormatter',
-       'import/upload' => 'LogFormatter',
-       'import/interwiki' => 'LogFormatter',
-       'contentmodel/change' => 'ContentModelLogFormatter',
+       'suppress/revision' => 'DeleteLogFormatter',
+       'tag/update' => 'TagLogFormatter',
+       'upload/overwrite' => 'UploadLogFormatter',
+       'upload/revert' => 'UploadLogFormatter',
+       'upload/upload' => 'UploadLogFormatter',
 );
 
 /**
@@ -7249,12 +7236,6 @@ $wgAPIPropModules = array();
  */
 $wgAPIListModules = array();
 
-/**
- * This variable is ignored. To add your module to the API, please add it to $wgAPI*Modules
- * @deprecated since 1.21
- */
-$wgAPIGeneratorModules = array();
-
 /**
  * Maximum amount of rows to scan in a DB query in the API
  * The default value is generally fine
@@ -7705,6 +7686,7 @@ $wgUseLinkNamespaceDBFields = true;
  *   $wgVirtualRestConfig['modules']['parsoid'] = array(
  *     'url' => 'http://localhost:8000',
  *     'prefix' => 'enwiki',
+ *     'domain' => 'en.wikipedia.org',
  *   );
  *
  * @var array
@@ -7715,11 +7697,22 @@ $wgVirtualRestConfig = array(
        'global' => array(
                # Timeout in seconds
                'timeout' => 360,
+               # 'domain' is set to $wgCanonicalServer in Setup.php
                'forwardCookies' => false,
                'HTTPProxy' => null
        )
 );
 
+/**
+ * Controls the percentage of zero-result search queries with suggestions that
+ * run the suggestion automatically. Must be a number between 0 and 1.  This
+ * can be lowered to reduce query volume at the expense of result quality.
+ *
+ * @var float
+ * @since 1.26
+ */
+$wgSearchRunSuggestedQueryPercent = 1;
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index bf322ae..05e0ac0 100644 (file)
@@ -527,7 +527,10 @@ class EditPage {
                if ( $permErrors ) {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
                        // Auto-block user's IP if the account was "hard" blocked
-                       $wgUser->spreadAnyEditBlock();
+                       $user = $wgUser;
+                       DeferredUpdates::addCallableUpdate( function() use ( $user ) {
+                               $user->spreadAnyEditBlock();
+                       } );
 
                        $this->displayPermissionsError( $permErrors );
 
@@ -652,6 +655,9 @@ class EditPage {
                        $this->getContextTitle()->getPrefixedText()
                ) );
                $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
+               $wgOut->addHTML( $this->editFormPageTop );
+               $wgOut->addHTML( $this->editFormTextTop );
+
                $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
                $wgOut->addHTML( "<hr />\n" );
 
@@ -665,13 +671,16 @@ class EditPage {
                        $wgOut->addWikiMsg( 'viewsourcetext' );
                }
 
+               $wgOut->addHTML( $this->editFormTextBeforeContent );
                $this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) );
+               $wgOut->addHTML( $this->editFormTextAfterContent );
 
                $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
                        Linker::formatTemplates( $this->getTemplates() ) ) );
 
                $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' );
 
+               $wgOut->addHTML( $this->editFormTextBottom );
                if ( $this->mTitle->exists() ) {
                        $wgOut->returnToMain( null, $this->mTitle );
                }
@@ -1943,7 +1952,7 @@ class EditPage {
                        $this->summary,
                        $flags,
                        false,
-                       null,
+                       $wgUser,
                        $content->getDefaultFormat()
                );
 
@@ -2545,7 +2554,7 @@ class EditPage {
                $wgOut->addHTML( $this->editFormTextBeforeContent );
 
                if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
-                       $wgOut->addHTML( EditPage::getEditToolbar() );
+                       $wgOut->addHTML( EditPage::getEditToolbar( $this->mTitle ) );
                }
 
                if ( $this->blankArticle ) {
@@ -3445,7 +3454,7 @@ HTML
 
                $this->deletedSinceEdit = false;
 
-               if ( $this->mTitle->isDeletedQuick() ) {
+               if ( !$this->mTitle->exists() && $this->mTitle->isDeletedQuick() ) {
                        $this->lastDelete = $this->getLastDelete();
                        if ( $this->lastDelete ) {
                                $deleteTime = wfTimestamp( TS_MW, $this->lastDelete->log_timestamp );
@@ -3686,13 +3695,18 @@ HTML
         * Shows a bulletin board style toolbar for common editing functions.
         * It can be disabled in the user preferences.
         *
+        * @param $title Title object for the page being edited (optional)
         * @return string
         */
-       static function getEditToolbar() {
+       static function getEditToolbar( $title = null ) {
                global $wgContLang, $wgOut;
                global $wgEnableUploads, $wgForeignFileRepos;
 
                $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
+               $showSignature = true;
+               if ( $title ) {
+                        $showSignature = MWNamespace::wantSignatures( $title->getNamespace() );
+               }
 
                /**
                 * $toolarray is an array of arrays each of which includes the
@@ -3760,13 +3774,13 @@ HTML
                                'sample' => wfMessage( 'nowiki_sample' )->text(),
                                'tip'    => wfMessage( 'nowiki_tip' )->text(),
                        ),
-                       array(
+                       $showSignature ? array(
                                'id'     => 'mw-editbutton-signature',
                                'open'   => '--~~~~',
                                'close'  => '',
                                'sample' => '',
                                'tip'    => wfMessage( 'sig_tip' )->text(),
-                       ),
+                       ) : false,
                        array(
                                'id'     => 'mw-editbutton-hr',
                                'open'   => "\n----\n",
index 0d55d7d..adab21c 100644 (file)
@@ -874,7 +874,7 @@ class XmlDumpWriter {
                }
 
                global $wgContLang;
-               $prefix = str_replace( '_', ' ', $wgContLang->getNsText( $title->getNamespace() ) );
+               $prefix = $wgContLang->getFormattedNsText( $title->getNamespace() );
 
                if ( $prefix !== '' ) {
                        $prefix .= ':';
index 97042fd..2852561 100644 (file)
@@ -24,7 +24,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        die( "This file is part of MediaWiki, it is not a valid entry point" );
 }
 
-use Liuggio\StatsdClient\StatsdClient;
 use Liuggio\StatsdClient\Sender\SocketSender;
 use MediaWiki\Logger\LoggerFactory;
 
@@ -402,12 +401,17 @@ function wfRandomString( $length = 32 ) {
  *
  * ;:@&=$-_.+!*'(),
  *
+ * RFC 1738 says ~ is unsafe, however RFC 3986 considers it an unreserved
+ * character which should not be encoded. More importantly, google chrome
+ * always converts %7E back to ~, and converting it in this function can
+ * cause a redirect loop (T105265).
+ *
  * But + is not safe because it's used to indicate a space; &= are only safe in
  * paths and not in queries (and we don't distinguish here); ' seems kind of
  * scary; and urlencode() doesn't touch -_. to begin with.  Plus, although /
  * is reserved, we don't care.  So the list we unescape is:
  *
- * ;:@$!*(),/
+ * ;:@$!*(),/~
  *
  * However, IIS7 redirects fail when the url contains a colon (Bug 22709),
  * so no fancy : for IIS7.
@@ -426,7 +430,7 @@ function wfUrlencode( $s ) {
        }
 
        if ( is_null( $needle ) ) {
-               $needle = array( '%3B', '%40', '%24', '%21', '%2A', '%28', '%29', '%2C', '%2F' );
+               $needle = array( '%3B', '%40', '%24', '%21', '%2A', '%28', '%29', '%2C', '%2F', '%7E' );
                if ( !isset( $_SERVER['SERVER_SOFTWARE'] ) ||
                        ( strpos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/7' ) === false )
                ) {
@@ -437,7 +441,7 @@ function wfUrlencode( $s ) {
        $s = urlencode( $s );
        $s = str_ireplace(
                $needle,
-               array( ';', '@', '$', '!', '*', '(', ')', ',', '/', ':' ),
+               array( ';', '@', '$', '!', '*', '(', ')', ',', '/', '~', ':' ),
                $s
        );
 
@@ -1249,12 +1253,16 @@ function wfLogProfilingData() {
 
        $config = $context->getConfig();
        if ( $config->get( 'StatsdServer' ) ) {
-               $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
-               $statsdHost = $statsdServer[0];
-               $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
-               $statsdSender = new SocketSender( $statsdHost, $statsdPort );
-               $statsdClient = new StatsdClient( $statsdSender );
-               $statsdClient->send( $context->getStats()->getBuffer() );
+               try {
+                       $statsdServer = explode( ':', $config->get( 'StatsdServer' ) );
+                       $statsdHost = $statsdServer[0];
+                       $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
+                       $statsdSender = new SocketSender( $statsdHost, $statsdPort );
+                       $statsdClient = new SamplingStatsdClient( $statsdSender, true, false );
+                       $statsdClient->send( $context->getStats()->getBuffer() );
+               } catch ( Exception $ex ) {
+                       MWExceptionHandler::logException( $ex );
+               }
        }
 
        # Profiling must actually be enabled...
@@ -1416,7 +1424,7 @@ function wfGetLangObj( $langcode = false ) {
  *
  * This function replaces all old wfMsg* functions.
  *
- * @param string|string[] $key Message key, or array of keys
+ * @param string|string[]|MessageSpecifier $key Message key, or array of keys, or a MessageSpecifier
  * @param mixed $params,... Normal message parameters
  * @return Message
  *
@@ -2171,14 +2179,24 @@ function wfResetOutputBuffers( $resetGzipEncoding = true ) {
                $wgDisableOutputCompression = true;
        }
        while ( $status = ob_get_status() ) {
-               if ( $status['type'] == 0 /* PHP_OUTPUT_HANDLER_INTERNAL */ ) {
-                       // Probably from zlib.output_compression or other
-                       // PHP-internal setting which can't be removed.
-                       //
+               if ( isset( $status['flags'] ) ) {
+                       $flags = PHP_OUTPUT_HANDLER_CLEANABLE | PHP_OUTPUT_HANDLER_REMOVABLE;
+                       $deleteable = ( $status['flags'] & $flags ) === $flags;
+               } elseif ( isset( $status['del'] ) ) {
+                       $deleteable = $status['del'];
+               } else {
+                       // Guess that any PHP-internal setting can't be removed.
+                       $deleteable = $status['type'] !== 0; /* PHP_OUTPUT_HANDLER_INTERNAL */
+               }
+               if ( !$deleteable ) {
                        // Give up, and hope the result doesn't break
                        // output behavior.
                        break;
                }
+               if ( $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier' ) {
+                       // Unit testing barrier to prevent this function from breaking PHPUnit.
+                       break;
+               }
                if ( !ob_end_clean() ) {
                        // Could not remove output buffer handler; abort now
                        // to avoid getting in some kind of infinite loop.
@@ -3453,15 +3471,17 @@ function wfResetSessionID() {
  * @param bool $sessionId
  */
 function wfSetupSession( $sessionId = false ) {
-       global $wgSessionsInMemcached, $wgSessionsInObjectCache, $wgCookiePath, $wgCookieDomain,
-                       $wgCookieSecure, $wgCookieHttpOnly, $wgSessionHandler;
-       if ( $wgSessionsInObjectCache || $wgSessionsInMemcached ) {
+       global $wgSessionsInObjectCache, $wgSessionHandler;
+       global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly;
+
+       if ( $wgSessionsInObjectCache ) {
                ObjectCacheSessionHandler::install();
        } elseif ( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) {
                # Only set this if $wgSessionHandler isn't null and session.save_handler
                # hasn't already been set to the desired value (that causes errors)
                ini_set( 'session.save_handler', $wgSessionHandler );
        }
+
        session_set_cookie_params(
                0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
        session_cache_limiter( 'private, must-revalidate' );
@@ -3470,9 +3490,14 @@ function wfSetupSession( $sessionId = false ) {
        } else {
                wfFixSessionID();
        }
+
        MediaWiki\suppressWarnings();
        session_start();
        MediaWiki\restoreWarnings();
+
+       if ( $wgSessionsInObjectCache ) {
+               ObjectCacheSessionHandler::renewCurrentSession();
+       }
 }
 
 /**
@@ -3505,8 +3530,7 @@ function wfMemcKey( /*...*/ ) {
        $prefix = $wgCachePrefix === false ? wfWikiID() : $wgCachePrefix;
        $args = func_get_args();
        $key = $prefix . ':' . implode( ':', $args );
-       $key = str_replace( ' ', '_', $key );
-       return $key;
+       return strtr( $key, ' ', '_' );
 }
 
 /**
@@ -3527,7 +3551,7 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
        } else {
                $key = $db . ':' . implode( ':', $args );
        }
-       return str_replace( ' ', '_', $key );
+       return strtr( $key, ' ', '_' );
 }
 
 /**
@@ -3544,8 +3568,7 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
 function wfGlobalCacheKey( /*...*/ ) {
        $args = func_get_args();
        $key = 'global:' . implode( ':', $args );
-       $key = str_replace( ' ', '_', $key );
-       return $key;
+       return strtr( $key, ' ', '_' );
 }
 
 /**
@@ -3835,9 +3858,9 @@ function wfStripIllegalFilenameChars( $name ) {
 }
 
 /**
- * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit;
+ * Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit
  *
- * @return int Value the memory limit was set to.
+ * @return int Resulting value of the memory limit.
  */
 function wfMemoryLimit() {
        global $wgMemoryLimit;
@@ -3861,6 +3884,26 @@ function wfMemoryLimit() {
        return $memlimit;
 }
 
+/**
+ * Set PHP's time limit to the larger of php.ini or $wgTransactionalTimeLimit
+ *
+ * @return int Prior time limit
+ * @since 1.26
+ */
+function wfTransactionalTimeLimit() {
+       global $wgTransactionalTimeLimit;
+
+       $timeLimit = ini_get( 'max_execution_time' );
+       // Note that CLI scripts use 0
+       if ( $timeLimit > 0 && $wgTransactionalTimeLimit > $timeLimit ) {
+               set_time_limit( $wgTransactionalTimeLimit );
+       }
+
+       ignore_user_abort( true ); // ignore client disconnects
+
+       return $timeLimit;
+}
+
 /**
  * Converts shorthand byte notation to integer form
  *
@@ -3921,13 +3964,13 @@ function wfBCP47( $code ) {
 }
 
 /**
- * Get a cache object.
+ * Get a specific cache object.
  *
- * @param int $inputType Cache type, one of the CACHE_* constants.
+ * @param int|string $cacheType A CACHE_* constants, or other key in $wgObjectCaches
  * @return BagOStuff
  */
-function wfGetCache( $inputType ) {
-       return ObjectCache::getInstance( $inputType );
+function wfGetCache( $cacheType ) {
+       return ObjectCache::getInstance( $cacheType );
 }
 
 /**
@@ -4240,3 +4283,28 @@ function wfThumbIsStandard( File $file, array $params ) {
 
        return true;
 }
+
+/**
+ * Merges two (possibly) 2 dimensional arrays into the target array ($baseArray).
+ *
+ * Values that exist in both values will be combined with += (all values of the array
+ * of $newValues will be added to the values of the array of $baseArray, while values,
+ * that exists in both, the value of $baseArray will be used).
+ *
+ * @param array $baseArray The array where you want to add the values of $newValues to
+ * @param array $newValues An array with new values
+ * @return array The combined array
+ * @since 1.26
+ */
+function wfArrayPlus2d( array $baseArray, array $newValues ) {
+       // First merge items that are in both arrays
+       foreach ( $baseArray as $name => &$groupVal ) {
+               if ( isset( $newValues[$name] ) ) {
+                       $groupVal += $newValues[$name];
+               }
+       }
+       // Now add items that didn't exist yet
+       $baseArray += $newValues;
+
+       return $baseArray;
+}
index 28c54d2..a414562 100644 (file)
@@ -135,7 +135,6 @@ class Hooks {
         *   returning null) is equivalent to returning true.
         */
        public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
-               RequestContext::getMain()->getStats()->increment( 'hooks.' . $event );
                foreach ( self::getHandlers( $event ) as $hook ) {
                        // Turn non-array values into an array. (Can't use casting because of objects.)
                        if ( !is_array( $hook ) ) {
@@ -232,22 +231,25 @@ class Hooks {
        }
 
        /**
-        * Handle PHP errors issued inside a hook. Catch errors that have to do with
-        * a function expecting a reference, and let all others pass through.
-        *
-        * This REALLY should be protected... but it's public for compatibility
+        * Handle PHP errors issued inside a hook. Catch errors that have to do
+        * with a function expecting a reference, and pass all others through to
+        * MWExceptionHandler::handleError() for default processing.
         *
         * @since 1.18
         *
         * @param int $errno Error number (unused)
         * @param string $errstr Error message
         * @throws MWHookException If the error has to do with the function signature
-        * @return bool Always returns false
+        * @return bool
         */
        public static function hookErrorHandler( $errno, $errstr ) {
                if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false ) {
                        throw new MWHookException( $errstr, $errno );
                }
-               return false;
+
+               // Delegate unhandled errors to the default MW handler
+               return call_user_func_array(
+                       'MWExceptionHandler::handleError', func_get_args()
+               );
        }
 }
index 235096d..62ae0b8 100644 (file)
@@ -822,6 +822,47 @@ class Html {
                return self::element( 'textarea', self::getTextInputAttributes( $attribs ), $spacedValue );
        }
 
+       /**
+        * Helper for Html::namespaceSelector().
+        * @param array $params See Html::namespaceSelector()
+        * @return array
+        */
+       public static function namespaceSelectorOptions( array $params = array() ) {
+               global $wgContLang;
+
+               $options = array();
+
+               if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) {
+                       $params['exclude'] = array();
+               }
+
+               if ( isset( $params['all'] ) ) {
+                       // add an option that would let the user select all namespaces.
+                       // Value is provided by user, the name shown is localized for the user.
+                       $options[$params['all']] = wfMessage( 'namespacesall' )->text();
+               }
+               // Add all namespaces as options (in the content language)
+               $options += $wgContLang->getFormattedNamespaces();
+
+               $optionsOut = array();
+               // Filter out namespaces below 0 and massage labels
+               foreach ( $options as $nsId => $nsName ) {
+                       if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) {
+                               continue;
+                       }
+                       if ( $nsId === NS_MAIN ) {
+                               // For other namespaces use the namespace prefix as label, but for
+                               // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
+                               $nsName = wfMessage( 'blanknamespace' )->text();
+                       } elseif ( is_int( $nsId ) ) {
+                               $nsName = $wgContLang->convertNamespace( $nsId );
+                       }
+                       $optionsOut[ $nsId ] = $nsName;
+               }
+
+               return $optionsOut;
+       }
+
        /**
         * Build a drop-down box for selecting a namespace
         *
@@ -841,8 +882,6 @@ class Html {
        public static function namespaceSelector( array $params = array(),
                array $selectAttribs = array()
        ) {
-               global $wgContLang;
-
                ksort( $selectAttribs );
 
                // Is a namespace selected?
@@ -859,37 +898,16 @@ class Html {
                        $params['selected'] = '';
                }
 
-               if ( !isset( $params['exclude'] ) || !is_array( $params['exclude'] ) ) {
-                       $params['exclude'] = array();
-               }
                if ( !isset( $params['disable'] ) || !is_array( $params['disable'] ) ) {
                        $params['disable'] = array();
                }
 
                // Associative array between option-values and option-labels
-               $options = array();
-
-               if ( isset( $params['all'] ) ) {
-                       // add an option that would let the user select all namespaces.
-                       // Value is provided by user, the name shown is localized for the user.
-                       $options[$params['all']] = wfMessage( 'namespacesall' )->text();
-               }
-               // Add all namespaces as options (in the content language)
-               $options += $wgContLang->getFormattedNamespaces();
+               $options = self::namespaceSelectorOptions( $params );
 
-               // Convert $options to HTML and filter out namespaces below 0
+               // Convert $options to HTML
                $optionsHtml = array();
                foreach ( $options as $nsId => $nsName ) {
-                       if ( $nsId < NS_MAIN || in_array( $nsId, $params['exclude'] ) ) {
-                               continue;
-                       }
-                       if ( $nsId === NS_MAIN ) {
-                               // For other namespaces use the namespace prefix as label, but for
-                               // main we don't use "" but the user message describing it (e.g. "(Main)" or "(Article)")
-                               $nsName = wfMessage( 'blanknamespace' )->text();
-                       } elseif ( is_int( $nsId ) ) {
-                               $nsName = $wgContLang->convertNamespace( $nsId );
-                       }
                        $optionsHtml[] = self::element(
                                'option', array(
                                        'disabled' => in_array( $nsId, $params['disable'] ),
index b2926d1..221cefb 100644 (file)
@@ -63,7 +63,15 @@ class HtmlFormatter {
         */
        public function getDoc() {
                if ( !$this->doc ) {
-                       $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
+                       // DOMDocument::loadHTML apparently isn't very good with encodings, so
+                       // convert input to ASCII by encoding everything above 128 as entities.
+                       if ( function_exists( 'mb_convert_encoding' ) ) {
+                               $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
+                       } else {
+                               $html = preg_replace_callback( '/[\x{80}-\x{10ffff}]/u', function ( $m ) {
+                                       return '&#' . UtfNormal\Utils::utf8ToCodepoint( $m[0] ) . ';';
+                               }, $this->html );
+                       }
 
                        // Workaround for bug that caused spaces before references
                        // to disappear during processing:
@@ -244,7 +252,14 @@ class HtmlFormatter {
                        ) );
                }
                $html = $replacements->replace( $html );
-               $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
+
+               if ( function_exists( 'mb_convert_encoding' ) ) {
+                       // Just in case the conversion in getDoc() above used named
+                       // entities that aren't known to html_entity_decode().
+                       $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
+               } else {
+                       $html = html_entity_decode( $html, ENT_COMPAT, 'utf-8' );
+               }
                return $html;
        }
 
index 825cd06..bc5a957 100644 (file)
@@ -25,6 +25,8 @@
  * @defgroup HTTP HTTP
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Various HTTP related functions
  * @ingroup HTTP
@@ -73,11 +75,14 @@ class Http {
                $req = MWHttpRequest::factory( $url, $options, $caller );
                $status = $req->execute();
 
-               $content = false;
                if ( $status->isOK() ) {
-                       $content = $req->getContent();
+                       return $req->getContent();
+               } else {
+                       $errors = $status->getErrorsByType( 'error' );
+                       $logger = LoggerFactory::getInstance( 'http' );
+                       $logger->warning( $status->getWikiText(), array( 'caller' => $caller ) );
+                       return false;
                }
-               return $content;
        }
 
        /**
@@ -252,7 +257,7 @@ class MWHttpRequest {
                $this->parsedUrl = wfParseUrl( $this->url );
 
                if ( !$this->parsedUrl || !Http::isValidURI( $this->url ) ) {
-                       $this->status = Status::newFatal( 'http-invalid-url' );
+                       $this->status = Status::newFatal( 'http-invalid-url', $url );
                } else {
                        $this->status = Status::newGood( 100 ); // continue
                }
@@ -850,6 +855,8 @@ class CurlHttpRequest extends MWHttpRequest {
 
 class PhpHttpRequest extends MWHttpRequest {
 
+       private $fopenErrors = array();
+
        /**
         * @param string $url
         * @return string
@@ -860,6 +867,60 @@ class PhpHttpRequest extends MWHttpRequest {
                return 'tcp://' . $parsedUrl['host'] . ':' . $parsedUrl['port'];
        }
 
+       /**
+        * Returns an array with a 'capath' or 'cafile' key that is suitable to be merged into the 'ssl' sub-array of a
+        * stream context options array. Uses the 'caInfo' option of the class if it is provided, otherwise uses the system
+        * default CA bundle if PHP supports that, or searches a few standard locations.
+        * @return array
+        * @throws DomainException
+        */
+       protected function getCertOptions() {
+               $certOptions = array();
+               $certLocations = array();
+               if ( $this->caInfo ) {
+                       $certLocations = array( 'manual' => $this->caInfo );
+               } elseif ( version_compare( PHP_VERSION, '5.6.0', '<' ) ) {
+                       // Default locations, based on
+                       // https://www.happyassassin.net/2015/01/12/a-note-about-ssltls-trusted-certificate-stores-and-platforms/
+                       // PHP 5.5 and older doesn't have any defaults, so we try to guess ourselves. PHP 5.6+ gets the CA location
+                       // from OpenSSL as long as it is not set manually, so we should leave capath/cafile empty there.
+                       $certLocations = array_filter( array(
+                               getenv( 'SSL_CERT_DIR' ),
+                               getenv( 'SSL_CERT_PATH' ),
+                               '/etc/pki/tls/certs/ca-bundle.crt', # Fedora et al
+                               '/etc/ssl/certs',  # Debian et al
+                               '/etc/pki/tls/certs/ca-bundle.trust.crt',
+                               '/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem',
+                               '/System/Library/OpenSSL', # OSX
+                       ) );
+               }
+
+               foreach( $certLocations as $key => $cert ) {
+                       if ( is_dir( $cert ) ) {
+                               $certOptions['capath'] = $cert;
+                               break;
+                       } elseif ( is_file( $cert ) ) {
+                               $certOptions['cafile'] = $cert;
+                               break;
+                       } elseif ( $key === 'manual' ) {
+                               // fail more loudly if a cert path was manually configured and it is not valid
+                               throw new DomainException( "Invalid CA info passed: $cert" );
+                       }
+               }
+
+               return $certOptions;
+       }
+
+       /**
+        * Custom error handler for dealing with fopen() errors. fopen() tends to fire multiple errors in succession, and the last one
+        * is completely useless (something like "fopen: failed to open stream") so normal methods of handling errors programmatically
+        * like get_last_error() don't work.
+        */
+       public function errorHandler( $errno, $errstr ) {
+               $n = count( $this->fopenErrors ) + 1;
+               $this->fopenErrors += array( "errno$n" => $errno, "errstr$n" => $errstr );
+       }
+
        public function execute() {
 
                parent::execute();
@@ -912,16 +973,16 @@ class PhpHttpRequest extends MWHttpRequest {
                }
 
                if ( $this->sslVerifyHost ) {
-                       $options['ssl']['CN_match'] = $this->parsedUrl['host'];
+                       // PHP 5.6.0 deprecates CN_match, in favour of peer_name which
+                       // actually checks SubjectAltName properly.
+                       if ( version_compare( PHP_VERSION, '5.6.0', '>=' ) ) {
+                               $options['ssl']['peer_name'] = $this->parsedUrl['host'];
+                       } else {
+                               $options['ssl']['CN_match'] = $this->parsedUrl['host'];
+                       }
                }
 
-               if ( is_dir( $this->caInfo ) ) {
-                       $options['ssl']['capath'] = $this->caInfo;
-               } elseif ( is_file( $this->caInfo ) ) {
-                       $options['ssl']['cafile'] = $this->caInfo;
-               } elseif ( $this->caInfo ) {
-                       throw new MWException( "Invalid CA info passed: {$this->caInfo}" );
-               }
+               $options['ssl'] += $this->getCertOptions();
 
                $context = stream_context_create( $options );
 
@@ -938,11 +999,25 @@ class PhpHttpRequest extends MWHttpRequest {
                }
                do {
                        $reqCount++;
-                       MediaWiki\suppressWarnings();
+                       $this->fopenErrors = array();
+                       set_error_handler( array( $this, 'errorHandler' ) );
                        $fh = fopen( $url, "r", false, $context );
-                       MediaWiki\restoreWarnings();
+                       restore_error_handler();
 
                        if ( !$fh ) {
+                               // HACK for instant commons.
+                               // If we are contacting (commons|upload).wikimedia.org
+                               // try again with CN_match for en.wikipedia.org
+                               // as php does not handle SubjectAltName properly
+                               // prior to "peer_name" option in php 5.6
+                               if ( isset( $options['ssl']['CN_match'] )
+                                       && ( $options['ssl']['CN_match'] === 'commons.wikimedia.org'
+                                               || $options['ssl']['CN_match'] === 'upload.wikimedia.org' )
+                               ) {
+                                       $options['ssl']['CN_match'] = 'en.wikipedia.org';
+                                       $context = stream_context_create( $options );
+                                       continue;
+                               }
                                break;
                        }
 
@@ -973,6 +1048,10 @@ class PhpHttpRequest extends MWHttpRequest {
                $this->setStatus();
 
                if ( $fh === false ) {
+                       if ( $this->fopenErrors ) {
+                               LoggerFactory::getInstance( 'http' )->warning( __CLASS__
+                                       . ': error opening connection: {errstr1}', $this->fopenErrors );
+                       }
                        $this->status->fatal( 'http-request-error' );
                        return $this->status;
                }
index 4a1aa87..9b5ff27 100644 (file)
@@ -77,7 +77,7 @@ class Linker {
                wfDeprecated( __METHOD__, '1.25' );
 
                $title = urldecode( $title );
-               $title = str_replace( '_', ' ', $title );
+               $title = strtr( $title, '_', ' ' );
                return self::getLinkAttributesInternal( $title, $class );
        }
 
@@ -1276,9 +1276,11 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to the section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
+        *
         * @return mixed|string
         */
-       public static function formatComment( $comment, $title = null, $local = false ) {
+       public static function formatComment( $comment, $title = null, $local = false, $wikiId = null ) {
 
                # Sanitize text a bit:
                $comment = str_replace( "\n", " ", $comment );
@@ -1286,8 +1288,8 @@ class Linker {
                $comment = Sanitizer::escapeHtmlAllowEntities( $comment );
 
                # Render autocomments and make links:
-               $comment = self::formatAutocomments( $comment, $title, $local );
-               $comment = self::formatLinksInComment( $comment, $title, $local );
+               $comment = self::formatAutocomments( $comment, $title, $local, $wikiId );
+               $comment = self::formatLinksInComment( $comment, $title, $local, $wikiId );
 
                return $comment;
        }
@@ -1304,9 +1306,11 @@ class Linker {
         * @param string $comment Comment text
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @return string Formatted comment
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        *
+        * @return string Formatted comment (wikitext)
         */
-       private static function formatAutocomments( $comment, $title = null, $local = false ) {
+       private static function formatAutocomments( $comment, $title = null, $local = false, $wikiId = null ) {
                // @todo $append here is something of a hack to preserve the status
                // quo. Someone who knows more about bidi and such should decide
                // (1) what sane rendering even *is* for an LTR edit summary on an RTL
@@ -1320,7 +1324,7 @@ class Linker {
                        // zero-width assertions optional, so wrap them in a non-capturing
                        // group.
                        '!(?:(?<=(.)))?/\*\s*(.*?)\s*\*/(?:(?=(.)))?!',
-                       function ( $match ) use ( $title, $local, &$append ) {
+                       function ( $match ) use ( $title, $local, $wikiId, &$append ) {
                                global $wgLang;
 
                                // Ensure all match positions are defined
@@ -1330,7 +1334,7 @@ class Linker {
                                $auto = $match[2];
                                $post = $match[3] !== '';
                                $comment = null;
-                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local ) );
+                               Hooks::run( 'FormatAutocomments', array( &$comment, $pre, $auto, $post, $title, $local, $wikiId ) );
                                if ( $comment === null ) {
                                        $link = '';
                                        if ( $title ) {
@@ -1349,9 +1353,7 @@ class Linker {
                                                                $title->getDBkey(), $section );
                                                }
                                                if ( $sectionTitle ) {
-                                                       $link = Linker::link( $sectionTitle,
-                                                               $wgLang->getArrow(), array(), array(),
-                                                               'noclasses' );
+                                                       $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
                                                } else {
                                                        $link = '';
                                                }
@@ -1384,7 +1386,7 @@ class Linker {
         * @param string $comment Text to format links in
         * @param Title|null $title An optional title object used to links to sections
         * @param bool $local Whether section links should refer to local page
-        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
         *
         * @return string
         */
@@ -1414,10 +1416,9 @@ class Linker {
 
                                # fix up urlencoded title texts (copied from Parser::replaceInternalLinks)
                                if ( strpos( $match[1], '%' ) !== false ) {
-                                       $match[1] = str_replace(
-                                               array( '<', '>' ),
-                                               array( '&lt;', '&gt;' ),
-                                               rawurldecode( $match[1] )
+                                       $match[1] = strtr(
+                                               rawurldecode( $match[1] ),
+                                               array( '<' => '&lt;', '>' => '&gt;' )
                                        );
                                }
 
@@ -1460,22 +1461,9 @@ class Linker {
                                                        $newTarget = clone ( $title );
                                                        $newTarget->setFragment( '#' . $target->getFragment() );
                                                        $target = $newTarget;
-
-                                               }
-
-                                               if ( $wikiId !== null ) {
-                                                       $thelink = Linker::makeExternalLink(
-                                                               WikiMap::getForeignURL( $wikiId, $target->getFullText() ),
-                                                               $linkText . $inside,
-                                                               /* escape = */ false // Already escaped
-                                                       ) . $trail;
-                                               } else {
-                                                       $thelink = Linker::link(
-                                                               $target,
-                                                               $linkText . $inside
-                                                       ) . $trail;
                                                }
 
+                                               $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
                                        }
                                }
                                if ( $thelink ) {
@@ -1494,6 +1482,32 @@ class Linker {
                );
        }
 
+       /**
+        * Generates a link to the given Title
+        *
+        * @note This is only public for technical reasons. It's not intended for use outside Linker.
+        *
+        * @param Title $title
+        * @param string $text
+        * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap.
+        * @param string|string[] $options See the $options parameter in Linker::link.
+        *
+        * @return string HTML link
+        */
+       public static function makeCommentLink( Title $title, $text, $wikiId = null, $options = array() ) {
+               if ( $wikiId !== null && !$title->isExternal() ) {
+                       $link = Linker::makeExternalLink(
+                                       WikiMap::getForeignURL( $wikiId, $title->getPrefixedText(), $title->getFragment() ),
+                                       $text,
+                                       /* escape = */ false // Already escaped
+                               );
+               } else {
+                       $link = Linker::link( $title, $text, array(), array(), $options );
+               }
+
+               return $link;
+       }
+
        /**
         * @param Title $contextTitle
         * @param string $target
@@ -1580,17 +1594,18 @@ class Linker {
         * @param string $comment
         * @param Title|null $title Title object (to generate link to section in autocomment) or null
         * @param bool $local Whether section links should refer to local page
+        * @param string|null $wikiId Id (as used by WikiMap) of the wiki to generate links to. For use with external changes.
         *
         * @return string
         */
-       public static function commentBlock( $comment, $title = null, $local = false ) {
+       public static function commentBlock( $comment, $title = null, $local = false, $wikiId = null ) {
                // '*' used to be the comment inserted by the software way back
                // in antiquity in case none was provided, here for backwards
                // compatibility, acc. to brion -ævar
                if ( $comment == '' || $comment == '*' ) {
                        return '';
                } else {
-                       $formatted = self::formatComment( $comment, $title, $local );
+                       $formatted = self::formatComment( $comment, $title, $local, $wikiId );
                        $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
                        return " <span class=\"comment\">$formatted</span>";
                }
@@ -1705,8 +1720,7 @@ class Linker {
        }
 
        /**
-        * Generate a table of contents from a section tree
-        * Currently unused.
+        * Generate a table of contents from a section tree.
         *
         * @param array $tree Return value of ParserOutput::getSections()
         * @param string|Language|bool $lang Language for the toc title, defaults to user language
@@ -2384,6 +2398,7 @@ class Linker {
                        'title' => $tooltip
                ) );
        }
+
 }
 
 /**
index bd68551..8ca205a 100644 (file)
@@ -210,6 +210,8 @@ class MWNamespace {
                if ( $namespaces === null || $rebuild ) {
                        global $wgExtraNamespaces, $wgCanonicalNamespaceNames;
                        $namespaces = array( NS_MAIN => '' ) + $wgCanonicalNamespaceNames;
+                       // Add extension namespaces
+                       $namespaces += ExtensionRegistry::getInstance()->getAttribute( 'ExtensionNamespaces' );
                        if ( is_array( $wgExtraNamespaces ) ) {
                                $namespaces += $wgExtraNamespaces;
                        }
@@ -296,6 +298,18 @@ class MWNamespace {
                return $index == NS_MAIN || in_array( $index, $wgContentNamespaces );
        }
 
+       /**
+        * Might pages in this namespace require the use of the Signature button on
+        * the edit toolbar?
+        *
+        * @param int $index Index to check
+        * @return bool
+        */
+       public static function wantSignatures( $index ) {
+               global $wgExtraSignatureNamespaces;
+               return self::isTalk( $index ) || in_array( $index, $wgExtraSignatureNamespaces );
+       }
+
        /**
         * Can pages in a namespace be watched?
         *
index f2bd6ba..d28f88e 100644 (file)
@@ -56,7 +56,7 @@ class MWTimestamp {
         *
         * @since 1.20
         *
-        * @param bool|string $timestamp Timestamp to set, or false for current time
+        * @param bool|string|int|float $timestamp Timestamp to set, or false for current time
         */
        public function __construct( $timestamp = false ) {
                $this->setTimestamp( $timestamp );
@@ -74,6 +74,7 @@ class MWTimestamp {
         * @throws TimestampException
         */
        public function setTimestamp( $ts = false ) {
+               $m = array();
                $da = array();
                $strtime = '';
 
@@ -87,9 +88,9 @@ class MWTimestamp {
                        # TS_EXIF
                } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) {
                        # TS_MW
-               } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) {
+               } elseif ( preg_match( '/^(-?\d{1,13})(\.\d+)?$/D', $ts, $m ) ) {
                        # TS_UNIX
-                       $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php
+                       $strtime = "@{$m[1]}"; // http://php.net/manual/en/datetime.formats.compound.php
                } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) {
                        # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6
                        $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3",
index 186821d..833f852 100644 (file)
@@ -718,9 +718,6 @@ class MagicWordArray {
 
        private $regex;
 
-       /** @todo Unused? */
-       private $matches;
-
        /**
         * @param array $names
         */
index 5510d35..fbacb25 100644 (file)
@@ -283,9 +283,11 @@ class MediaWiki {
         *   /w/index.php?title=Foo_Bar -> /wiki/Foo_Bar
         * - Don't redirect anything with query parameters other than 'title' or 'action=view'.
         *
+        * @param Title $title
         * @return bool True if a redirect was set.
+        * @throws HttpError
         */
-       private function tryNormaliseRedirect( $title ) {
+       private function tryNormaliseRedirect( Title $title ) {
                $request = $this->context->getRequest();
                $output = $this->context->getOutput();
 
@@ -363,9 +365,8 @@ class MediaWiki {
                        $this->context->setWikiPage( $article->getPage() );
                }
 
-               // NS_MEDIAWIKI has no redirects.
-               // It is also used for CSS/JS, so performance matters here...
-               if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+               // Skip some unnecessary code if the content model doesn't support redirects
+               if ( !ContentHandler::getForTitle( $title )->supportsRedirects() ) {
                        return $article;
                }
 
@@ -496,36 +497,39 @@ class MediaWiki {
        public function doPreOutputCommit() {
                // Either all DBs should commit or none
                ignore_user_abort( true );
-               wfGetLBFactory()->commitMasterChanges();
+
+               // Commit all changes and record ChronologyProtector positions
+               $factory = wfGetLBFactory();
+               $factory->commitMasterChanges();
+               $factory->shutdown();
+
+               wfDebug( __METHOD__ . ' completed; all transactions committed' );
        }
 
        /**
         * This function does work that can be done *after* the
         * user gets the HTTP response so they don't block on it
         *
+        * This manages deferred updates, job insertion,
+        * final commit, and the logging of profiling data
+        *
         * @param string $mode Use 'fast' to always skip job running
         * @since 1.26
         */
        public function doPostOutputShutdown( $mode = 'normal' ) {
-               // Show profiling data if enabled
+               // Show visible profiling data if enabled (which cannot be post-send)
                Profiler::instance()->logDataPageOutputOnly();
 
                $that = $this;
                $callback = function () use ( $that, $mode ) {
                        try {
-                               // Assure deferred updates are not in the main transaction
-                               wfGetLBFactory()->commitMasterChanges();
-                               // Run jobs occasionally, if enabled
-                               if ( $mode === 'normal' ) {
-                                       $that->triggerJobs();
-                               }
-                               // Do deferred updates and job insertion and final commit
-                               $that->restInPeace();
+                               $that->restInPeace( $mode );
                        } catch ( Exception $e ) {
                                MWExceptionHandler::handleException( $e );
                        }
                };
 
+               // Defer everything else...
                if ( function_exists( 'register_postsend_function' ) ) {
                        // https://github.com/facebook/hhvm/issues/1230
                        register_postsend_function( $callback );
@@ -688,8 +692,12 @@ class MediaWiki {
 
        /**
         * Ends this task peacefully
+        * @param string $mode Use 'fast' to always skip job running
         */
-       public function restInPeace() {
+       public function restInPeace( $mode = 'fast' ) {
+               // Assure deferred updates are not in the main transaction
+               wfGetLBFactory()->commitMasterChanges();
+
                // Ignore things like master queries/connections on GET requests
                // as long as they are in deferred updates (which catch errors).
                Profiler::instance()->getTransactionProfiler()->resetExpectations();
@@ -700,6 +708,12 @@ class MediaWiki {
                // Make sure any lazy jobs are pushed
                JobQueueGroup::pushLazyJobs();
 
+               // Now that everything specific to this request is done,
+               // try to occasionally run jobs (if enabled) from the queues
+               if ( $mode === 'normal' ) {
+                       $this->triggerJobs();
+               }
+
                // Log profiling data, e.g. in the database or UDP
                wfLogProfilingData();
 
index 329d97a..54abfd1 100644 (file)
  *
  * @since 1.17
  */
-class Message implements MessageSpecifier {
+class Message implements MessageSpecifier, Serializable {
 
        /**
         * In which language to get this message. True, which is the default,
@@ -226,8 +226,9 @@ class Message implements MessageSpecifier {
        /**
         * @since 1.17
         *
-        * @param string|string[] $key Message key or array of message keys to try and use the first
-        * non-empty message for.
+        * @param string|string[]|MessageSpecifier $key Message key, or array of
+        * message keys to try and use the first non-empty message for, or a
+        * MessageSpecifier to copy from.
         * @param array $params Message parameters.
         * @param Language $language Optional language of the message, defaults to $wgLang.
         *
@@ -236,6 +237,16 @@ class Message implements MessageSpecifier {
        public function __construct( $key, $params = array(), Language $language = null ) {
                global $wgLang;
 
+               if ( $key instanceof MessageSpecifier ) {
+                       if ( $params ) {
+                               throw new InvalidArgumentException(
+                                       '$params must be empty if $key is a MessageSpecifier'
+                               );
+                       }
+                       $params = $key->getParams();
+                       $key = $key->getKey();
+               }
+
                if ( !is_string( $key ) && !is_array( $key ) ) {
                        throw new InvalidArgumentException( '$key must be a string or an array' );
                }
@@ -252,6 +263,41 @@ class Message implements MessageSpecifier {
                $this->language = $language ?: $wgLang;
        }
 
+       /**
+        * @see Serializable::serialize()
+        * @since 1.26
+        * @return string
+        */
+       public function serialize() {
+               return serialize( array(
+                       'interface' => $this->interface,
+                       'language' => $this->language->getCode(),
+                       'key' => $this->key,
+                       'keysToTry' => $this->keysToTry,
+                       'parameters' => $this->parameters,
+                       'format' => $this->format,
+                       'useDatabase' => $this->useDatabase,
+                       'title' => $this->title,
+               ) );
+       }
+
+       /**
+        * @see Serializable::unserialize()
+        * @since 1.26
+        * @param string $serialized
+        */
+       public function unserialize( $serialized ) {
+               $data = unserialize( $serialized );
+               $this->interface = $data['interface'];
+               $this->key = $data['key'];
+               $this->keysToTry = $data['keysToTry'];
+               $this->parameters = $data['parameters'];
+               $this->format = $data['format'];
+               $this->useDatabase = $data['useDatabase'];
+               $this->language = Language::factory( $data['language'] );
+               $this->title = $data['title'];
+       }
+
        /**
         * @since 1.24
         *
@@ -327,7 +373,7 @@ class Message implements MessageSpecifier {
         *
         * @since 1.17
         *
-        * @param string|string[] $key Message key or array of keys.
+        * @param string|string[]|MessageSpecifier $key
         * @param mixed $param,... Parameters as strings.
         *
         * @return Message
index 9891106..2cd9698 100644 (file)
@@ -305,8 +305,8 @@ class MovePage {
                                __METHOD__,
                                array( 'IGNORE' )
                        );
-                       # Update the protection log
-                       $log = new LogPage( 'protect' );
+
+                       // Build comment for log
                        $comment = wfMessage(
                                'prot_1movedto2',
                                $this->oldTitle->getPrefixedText(),
@@ -315,14 +315,6 @@ class MovePage {
                        if ( $reason ) {
                                $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                        }
-                       // @todo FIXME: $params?
-                       $logId = $log->addEntry(
-                               'move_prot',
-                               $this->newTitle,
-                               $comment,
-                               array( $this->oldTitle->getPrefixedText() ),
-                               $user
-                       );
 
                        // reread inserted pr_ids for log relation
                        $insertedPrIds = $dbw->select(
@@ -335,7 +327,18 @@ class MovePage {
                        foreach ( $insertedPrIds as $prid ) {
                                $logRelationsValues[] = $prid->pr_id;
                        }
-                       $log->addRelations( 'pr_id', $logRelationsValues, $logId );
+
+                       // Update the protection log
+                       $logEntry = new ManualLogEntry( 'protect', 'move_prot' );
+                       $logEntry->setTarget( $this->newTitle );
+                       $logEntry->setComment( $comment );
+                       $logEntry->setPerformer( $user );
+                       $logEntry->setParameters( array(
+                               '4::oldtitle' => $this->oldTitle->getPrefixedText(),
+                       ) );
+                       $logEntry->setRelations( array( 'pr_id' => $logRelationsValues ) );
+                       $logId = $logEntry->insert();
+                       $logEntry->publish( $logId );
                }
 
                // Update *_from_namespace fields as needed
@@ -416,6 +419,13 @@ class MovePage {
                        $redirectContent = null;
                }
 
+               // Figure out whether the content model is no longer the default
+               $oldDefault = ContentHandler::getDefaultModelFor( $this->oldTitle );
+               $contentModel = $this->oldTitle->getContentModel();
+               $newDefault = ContentHandler::getDefaultModelFor( $nt );
+               $defaultContentModelChanging = ( $oldDefault !== $newDefault
+                       && $oldDefault === $contentModel );
+
                // bug 57084: log_page should be the ID of the *moved* page
                $oldid = $this->oldTitle->getArticleID();
                $logTitle = clone $this->oldTitle;
@@ -493,6 +503,16 @@ class MovePage {
                $newpage->doEditUpdates( $nullRevision, $user,
                        array( 'changed' => false, 'moved' => true, 'oldcountable' => $oldcountable ) );
 
+               // If the default content model changes, we need to populate rev_content_model
+               if ( $defaultContentModelChanging ) {
+                       $dbw->update(
+                               'revision',
+                               array( 'rev_content_model' => $contentModel ),
+                               array( 'rev_page' => $nt->getArticleID(), 'rev_content_model IS NULL' ),
+                               __METHOD__
+                       );
+               }
+
                if ( !$moveOverRedirect ) {
                        WikiPage::onArticleCreate( $nt );
                }
index 30ee19c..552e181 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
+use WrappedString\WrappedString;
 
 /**
  * This class should be covered by a general architecture document which does
@@ -141,9 +142,6 @@ class OutputPage extends ContextSource {
        /** @var string Inline CSS styles. Use addInlineStyle() sparingly */
        protected $mInlineStyles = '';
 
-       /** @todo Unused? */
-       private $mLinkColours;
-
        /**
         * @var string Used by skin template.
         * Example: $tpl->set( 'displaytitle', $out->mPageLinkTitle );
@@ -1817,6 +1815,11 @@ class OutputPage extends ContextSource {
                        }
                }
 
+               // enable OOUI if requested via ParserOutput
+               if ( $parserOutput->getEnableOOUI() ) {
+                       $this->enableOOUI();
+               }
+
                // Link flags are ignored for now, but may in the future be
                // used to mark individual language links.
                $linkFlags = array();
@@ -2006,21 +2009,20 @@ class OutputPage extends ContextSource {
         * Add an HTTP header that will influence on the cache
         *
         * @param string $header Header name
-        * @param array|null $option
-        * @todo FIXME: Document the $option parameter; it appears to be for
-        *        X-Vary-Options but what format is acceptable?
+        * @param string[]|null $option Options for X-Vary-Options. Possible options are:
+        *  - "string-contains=$XXX" varies on whether the header value as a string
+        *    contains $XXX as a substring.
+        *  - "list-contains=$XXX" varies on whether the header value as a
+        *    comma-separated list contains $XXX as one of the list items.
         */
-       public function addVaryHeader( $header, $option = null ) {
+       public function addVaryHeader( $header, array $option = null ) {
                if ( !array_key_exists( $header, $this->mVaryHeader ) ) {
-                       $this->mVaryHeader[$header] = (array)$option;
-               } elseif ( is_array( $option ) ) {
-                       if ( is_array( $this->mVaryHeader[$header] ) ) {
-                               $this->mVaryHeader[$header] = array_merge( $this->mVaryHeader[$header], $option );
-                       } else {
-                               $this->mVaryHeader[$header] = $option;
-                       }
+                       $this->mVaryHeader[$header] = array();
                }
-               $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
+               if ( !is_array( $option ) ) {
+                       $option = array();
+               }
+               $this->mVaryHeader[$header] = array_unique( array_merge( $this->mVaryHeader[$header], $option ) );
        }
 
        /**
@@ -2286,9 +2288,10 @@ class OutputPage extends ContextSource {
                        // add skin specific modules
                        $modules = $sk->getDefaultModules();
 
-                       // enforce various default modules for all skins
+                       // Enforce various default modules for all skins
                        $coreModules = array(
-                               // keep this list as small as possible
+                               // Keep this list as small as possible
+                               'site',
                                'mediawiki.page.startup',
                                'mediawiki.user',
                        );
@@ -2695,16 +2698,14 @@ class OutputPage extends ContextSource {
                }
 
                $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n";
+               $ret .= $this->getInlineHeadScripts() . "\n";
+               $ret .= $this->buildCssLinks() . "\n";
+               $ret .= $this->getExternalHeadScripts() . "\n";
 
                foreach ( $this->getHeadLinksArray() as $item ) {
                        $ret .= $item . "\n";
                }
 
-               // No newline after buildCssLinks since makeResourceLoaderLink did that already
-               $ret .= $this->buildCssLinks();
-
-               $ret .= $this->getHeadScripts() . "\n";
-
                foreach ( $this->mHeadItems as $item ) {
                        $ret .= $item . "\n";
                }
@@ -2761,23 +2762,22 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * @todo Document
+        * Construct neccecary html and loader preset states to load modules on a page.
+        *
+        * Use getHtmlFromLoaderLinks() to convert this array to HTML.
+        *
         * @param array|string $modules One or more module names
         * @param string $only ResourceLoaderModule TYPE_ class constant
-        * @param bool $useESI
-        * @param array $extraQuery Array with extra query parameters to add to each
-        *   request. array( param => value ).
-        * @param bool $loadCall If true, output an (asynchronous) mw.loader.load()
-        *   call rather than a "<script src='...'>" tag.
-        * @return string The html "<script>", "<link>" and "<style>" tags
-        */
-       public function makeResourceLoaderLink( $modules, $only, $useESI = false,
-               array $extraQuery = array(), $loadCall = false
-       ) {
+        * @param array $extraQuery [optional] Array with extra query parameters for the request
+        * @return array A list of HTML strings and array of client loader preset states
+        */
+       public function makeResourceLoaderLink( $modules, $only, array $extraQuery = array() ) {
                $modules = (array)$modules;
 
                $links = array(
-                       'html' => '',
+                       // List of html strings
+                       'html' => array(),
+                       // Associative array of module names and their states
                        'states' => array(),
                );
 
@@ -2794,8 +2794,8 @@ class OutputPage extends ContextSource {
                        if ( ResourceLoader::inDebugMode() ) {
                                // Recursively call us for every item
                                foreach ( $modules as $name ) {
-                                       $link = $this->makeResourceLoaderLink( $name, $only, $useESI );
-                                       $links['html'] .= $link['html'];
+                                       $link = $this->makeResourceLoaderLink( $name, $only, $extraQuery );
+                                       $links['html'] = array_merge( $links['html'], $link['html'] );
                                        $links['states'] += $link['states'];
                                }
                                return $links;
@@ -2809,7 +2809,6 @@ class OutputPage extends ContextSource {
                // Create keyed-by-source and then keyed-by-group list of module objects from modules list
                $sortedModules = array();
                $resourceLoader = $this->getResourceLoader();
-               $resourceLoaderUseESI = $this->getConfig()->get( 'ResourceLoaderUseESI' );
                foreach ( $modules as $name ) {
                        $module = $resourceLoader->getModule( $name );
                        # Check that we're allowed to include this module on this page
@@ -2875,19 +2874,18 @@ class OutputPage extends ContextSource {
 
                                // Inline private modules. These can't be loaded through load.php for security
                                // reasons, see bug 34907. Note that these modules should be loaded from
-                               // getHeadScripts() before the first loader call. Otherwise other modules can't
+                               // getExternalHeadScripts() before the first loader call. Otherwise other modules can't
                                // properly use them as dependencies (bug 30914)
                                if ( $group === 'private' ) {
                                        if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
-                                               $links['html'] .= Html::inlineStyle(
+                                               $links['html'][] = Html::inlineStyle(
                                                        $resourceLoader->makeModuleResponse( $context, $grpModules )
                                                );
                                        } else {
-                                               $links['html'] .= ResourceLoader::makeInlineScript(
+                                               $links['html'][] = ResourceLoader::makeInlineScript(
                                                        $resourceLoader->makeModuleResponse( $context, $grpModules )
                                                );
                                        }
-                                       $links['html'] .= "\n";
                                        continue;
                                }
 
@@ -2905,48 +2903,37 @@ class OutputPage extends ContextSource {
                                $moduleContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                                $url = $resourceLoader->createLoaderURL( $source, $moduleContext, $extraQuery );
 
-                               if ( $useESI && $resourceLoaderUseESI ) {
-                                       $esi = Xml::element( 'esi:include', array( 'src' => $url ) );
-                                       if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
-                                               $link = Html::inlineStyle( $esi );
-                                       } else {
-                                               $link = Html::inlineScript( $esi );
-                                       }
+                               // Automatically select style/script elements
+                               if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
+                                       $link = Html::linkedStyle( $url );
                                } else {
-                                       // Automatically select style/script elements
-                                       if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
-                                               $link = Html::linkedStyle( $url );
-                                       } elseif ( $loadCall ) {
+                                       if ( $context->getRaw() || $isRaw ) {
+                                               // Startup module can't load itself, needs to use <script> instead of mw.loader.load
+                                               $link = Html::element( 'script', array(
+                                                       // In SpecialJavaScriptTest, QUnit must load synchronous
+                                                       'async' => !isset( $extraQuery['sync'] ),
+                                                       'src' => $url
+                                               ) );
+                                       } else {
                                                $link = ResourceLoader::makeInlineScript(
-                                                       Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) )
+                                                       Xml::encodeJsCall( 'mw.loader.load', array( $url ) )
                                                );
-                                       } else {
-                                               $link = Html::linkedScript( $url );
-                                               if ( !$context->getRaw() && !$isRaw ) {
-                                                       // Wrap only=script / only=combined requests in a conditional as
-                                                       // browsers not supported by the startup module would unconditionally
-                                                       // execute this module. Otherwise users will get "ReferenceError: mw is
-                                                       // undefined" or "jQuery is undefined" from e.g. a "site" module.
-                                                       $link = ResourceLoader::makeInlineScript(
-                                                               Xml::encodeJsCall( 'document.write', array( $link ) )
-                                                       );
-                                               }
+                                       }
 
-                                               // For modules requested directly in the html via <link> or <script>,
-                                               // tell mw.loader they are being loading to prevent duplicate requests.
-                                               foreach ( $grpModules as $key => $module ) {
-                                                       // Don't output state=loading for the startup module..
-                                                       if ( $key !== 'startup' ) {
-                                                               $links['states'][$key] = 'loading';
-                                                       }
+                                       // For modules requested directly in the html via <script> or mw.loader.load
+                                       // tell mw.loader they are being loading to prevent duplicate requests.
+                                       foreach ( $grpModules as $key => $module ) {
+                                               // Don't output state=loading for the startup module.
+                                               if ( $key !== 'startup' ) {
+                                                       $links['states'][$key] = 'loading';
                                                }
                                        }
                                }
 
                                if ( $group == 'noscript' ) {
-                                       $links['html'] .= Html::rawElement( 'noscript', array(), $link ) . "\n";
+                                       $links['html'][] = Html::rawElement( 'noscript', array(), $link );
                                } else {
-                                       $links['html'] .= $link . "\n";
+                                       $links['html'][] = $link;
                                }
                        }
                }
@@ -2960,24 +2947,26 @@ class OutputPage extends ContextSource {
         * @return string HTML
         */
        protected static function getHtmlFromLoaderLinks( array $links ) {
-               $html = '';
+               $html = array();
                $states = array();
                foreach ( $links as $link ) {
                        if ( !is_array( $link ) ) {
-                               $html .= $link;
+                               $html[] = $link;
                        } else {
-                               $html .= $link['html'];
+                               $html = array_merge( $html, $link['html'] );
                                $states += $link['states'];
                        }
                }
+               // Filter out empty values
+               $html = array_filter( $html, 'strlen' );
 
                if ( count( $states ) ) {
-                       $html = ResourceLoader::makeInlineScript(
+                       array_unshift( $html, ResourceLoader::makeInlineScript(
                                ResourceLoader::makeLoaderStateScript( $states )
-                       ) . "\n" . $html;
+                       ) );
                }
 
-               return $html;
+               return WrappedString::join( "\n", $html );
        }
 
        /**
@@ -2987,9 +2976,42 @@ class OutputPage extends ContextSource {
         * @return string HTML fragment
         */
        function getHeadScripts() {
-               // Startup - this will immediately load jquery and mediawiki modules
+               return $this->getInlineHeadScripts() . "\n" . $this->getExternalHeadScripts();
+       }
+
+       /**
+        * <script src="..."> tags for "<head>". This is the startup module
+        * and other modules marked with position 'top'.
+        *
+        * @return string HTML fragment
+        */
+       function getExternalHeadScripts() {
+               $links = array();
+
+               // Startup - this provides the client with the module manifest and loads jquery and mediawiki base modules
+               $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS );
+
+               return self::getHtmlFromLoaderLinks( $links );
+       }
+
+       /**
+        * <script>...</script> tags to put in "<head>".
+        *
+        * @return string HTML fragment
+        */
+       function getInlineHeadScripts() {
                $links = array();
-               $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS, true );
+
+               // Client profile classes for <html>. Allows for easy hiding/showing of UI components.
+               // Must be done synchronously on every page to avoid flashes of wrong content.
+               // Note: This class distinguishes MediaWiki-supported JavaScript from the rest.
+               // The "rest" includes browsers that support JavaScript but not supported by our runtime.
+               // For the performance benefit of the majority, this is added unconditionally here and is
+               // then fixed up by the startup module for unsupported browsers.
+               $links[] = Html::inlineScript(
+                       'document.documentElement.className = document.documentElement.className'
+                       . '.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );'
+               );
 
                // Load config before anything else
                $links[] = ResourceLoader::makeInlineScript(
@@ -3004,12 +3026,6 @@ class OutputPage extends ContextSource {
                // Separate user.tokens as otherwise caching will be allowed (T84960)
                $links[] = $this->makeResourceLoaderLink( 'user.tokens', ResourceLoaderModule::TYPE_COMBINED );
 
-               // Scripts and messages "only" requests marked for top inclusion
-               $links[] = $this->makeResourceLoaderLink(
-                       $this->getModuleScripts( true, 'top' ),
-                       ResourceLoaderModule::TYPE_SCRIPTS
-               );
-
                // Modules requests - let the client calculate dependencies and batch requests as it likes
                // Only load modules that have marked themselves for loading at the top
                $modules = $this->getModules( true, 'top' );
@@ -3019,37 +3035,35 @@ class OutputPage extends ContextSource {
                        );
                }
 
-               if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
-                       $links[] = $this->getScriptsForBottomQueue( true );
-               }
+               // "Scripts only" modules marked for top inclusion
+               $links[] = $this->makeResourceLoaderLink(
+                       $this->getModuleScripts( true, 'top' ),
+                       ResourceLoaderModule::TYPE_SCRIPTS
+               );
 
                return self::getHtmlFromLoaderLinks( $links );
        }
 
        /**
-        * JS stuff to put at the 'bottom', which can either be the bottom of the
-        * "<body>" or the bottom of the "<head>" depending on
-        * $wgResourceLoaderExperimentalAsyncLoading: modules marked with position
-        * 'bottom', legacy scripts ($this->mScripts), user preferences, site JS
-        * and user JS.
+        * JS stuff to put at the 'bottom', which goes at the bottom of the `<body>`.
+        * These are modules marked with position 'bottom', legacy scripts ($this->mScripts),
+        * site JS, and user JS.
         *
-        * @param bool $inHead If true, this HTML goes into the "<head>",
-        *   if false it goes into the "<body>".
+        * @param bool $unused Previously used to let this method change its output based
+        *  on whether it was called by getExternalHeadScripts() or getBottomScripts().
         * @return string
         */
-       function getScriptsForBottomQueue( $inHead ) {
+       function getScriptsForBottomQueue( $unused = null ) {
                // Scripts "only" requests marked for bottom inclusion
                // If we're in the <head>, use load() calls rather than <script src="..."> tags
                $links = array();
 
                $links[] = $this->makeResourceLoaderLink( $this->getModuleScripts( true, 'bottom' ),
-                       ResourceLoaderModule::TYPE_SCRIPTS, /* $useESI = */ false, /* $extraQuery = */ array(),
-                       /* $loadCall = */ $inHead
+                       ResourceLoaderModule::TYPE_SCRIPTS
                );
 
                $links[] = $this->makeResourceLoaderLink( $this->getModuleStyles( true, 'bottom' ),
-                       ResourceLoaderModule::TYPE_STYLES, /* $useESI = */ false, /* $extraQuery = */ array(),
-                       /* $loadCall = */ $inHead
+                       ResourceLoaderModule::TYPE_STYLES
                );
 
                // Modules requests - let the client calculate dependencies and batch requests as it likes
@@ -3057,49 +3071,54 @@ class OutputPage extends ContextSource {
                $modules = $this->getModules( true, 'bottom' );
                if ( $modules ) {
                        $links[] = ResourceLoader::makeInlineScript(
-                               Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) )
+                               Xml::encodeJsCall( 'mw.loader.load', array( $modules ) )
                        );
                }
 
                // Legacy Scripts
-               $links[] = "\n" . $this->mScripts;
-
-               // Add site JS if enabled
-               $links[] = $this->makeResourceLoaderLink( 'site', ResourceLoaderModule::TYPE_SCRIPTS,
-                       /* $useESI = */ false, /* $extraQuery = */ array(), /* $loadCall = */ $inHead
-               );
+               $links[] = $this->mScripts;
 
                // Add user JS if enabled
+               // This must use TYPE_COMBINED instead of only=scripts so that its request is handled by
+               // mw.loader.implement() which ensures that execution is scheduled after the "site" module.
                if ( $this->getConfig()->get( 'AllowUserJs' )
                        && $this->getUser()->isLoggedIn()
                        && $this->getTitle()
                        && $this->getTitle()->isJsSubpage()
                        && $this->userCanPreview()
                ) {
-                       # XXX: additional security check/prompt?
-                       // We're on a preview of a JS subpage
-                       // Exclude this page from the user module in case it's in there (bug 26283)
-                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_SCRIPTS, false,
-                               array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() ), $inHead
+                       // We're on a preview of a JS subpage. Exclude this page from the user module (T28283)
+                       // and include the draft contents as a raw script instead.
+                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED,
+                               array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() )
                        );
                        // Load the previewed JS
-                       $links[] = Html::inlineScript( "\n"
-                                       . $this->getRequest()->getText( 'wpTextbox1' ) . "\n" ) . "\n";
+                       $links[] = ResourceLoader::makeInlineScript(
+                               Xml::encodeJsCall( 'mw.loader.using', array(
+                                       array( 'user', 'site' ),
+                                       new XmlJsCode(
+                                               'function () {'
+                                                       . Xml::encodeJsCall( '$.globalEval', array(
+                                                               $this->getRequest()->getText( 'wpTextbox1' )
+                                                       ) )
+                                                       . '}'
+                                       )
+                               ) )
+                       );
 
                        // FIXME: If the user is previewing, say, ./vector.js, his ./common.js will be loaded
                        // asynchronously and may arrive *after* the inline script here. So the previewed code
-                       // may execute before ./common.js runs. Normally, ./common.js runs before ./vector.js...
+                       // may execute before ./common.js runs. Normally, ./common.js runs before ./vector.js.
+                       // Similarly, when previewing ./common.js and the user module does arrive first, it will
+                       // arrive without common.js and the inline script runs after. Thus running common after
+                       // the excluded subpage.
                } else {
                        // Include the user module normally, i.e., raw to avoid it being wrapped in a closure.
-                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_SCRIPTS,
-                               /* $useESI = */ false, /* $extraQuery = */ array(), /* $loadCall = */ $inHead
-                       );
+                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED );
                }
 
                // Group JS is only enabled if site JS is enabled.
-               $links[] = $this->makeResourceLoaderLink( 'user.groups', ResourceLoaderModule::TYPE_COMBINED,
-                       /* $useESI = */ false, /* $extraQuery = */ array(), /* $loadCall = */ $inHead
-               );
+               $links[] = $this->makeResourceLoaderLink( 'user.groups', ResourceLoaderModule::TYPE_COMBINED );
 
                return self::getHtmlFromLoaderLinks( $links );
        }
@@ -3112,17 +3131,7 @@ class OutputPage extends ContextSource {
                // In case the skin wants to add bottom CSS
                $this->getSkin()->setupSkinUserCss( $this );
 
-               // Optimise jQuery ready event cross-browser.
-               // This also enforces $.isReady to be true at </body> which fixes the
-               // mw.loader bug in Firefox with using document.write between </body>
-               // and the DOMContentReady event (bug 47457).
-               $html = Html::inlineScript( 'if(window.jQuery)jQuery.ready();' );
-
-               if ( !$this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
-                       $html .= $this->getScriptsForBottomQueue( false );
-               }
-
-               return $html;
+               return $this->getScriptsForBottomQueue();
        }
 
        /**
@@ -3433,11 +3442,11 @@ class OutputPage extends ContextSource {
                        $lang = $this->getTitle()->getPageLanguage();
                        if ( $lang->hasVariants() ) {
                                $variants = $lang->getVariants();
-                               foreach ( $variants as $_v ) {
-                                       $tags["variant-$_v"] = Html::element( 'link', array(
+                               foreach ( $variants as $variant ) {
+                                       $tags["variant-$variant"] = Html::element( 'link', array(
                                                'rel' => 'alternate',
-                                               'hreflang' => wfBCP47( $_v ),
-                                               'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
+                                               'hreflang' => wfBCP47( $variant ),
+                                               'href' => $this->getTitle()->getLocalURL( array( 'variant' => $variant ) ) )
                                        );
                                }
                                # x-default link per https://support.google.com/webmasters/answer/189077?hl=en
@@ -3641,7 +3650,7 @@ class OutputPage extends ContextSource {
                        'noscript' => array()
                );
                $links = array();
-               $otherTags = ''; // Tags to append after the normal <link> tags
+               $otherTags = array(); // Tags to append after the normal <link> tags
                $resourceLoader = $this->getResourceLoader();
 
                $moduleStyles = $this->getModuleStyles( true, 'top' );
@@ -3657,10 +3666,10 @@ class OutputPage extends ContextSource {
                ) {
                        // We're on a preview of a CSS subpage
                        // Exclude this page from the user module in case it's in there (bug 26283)
-                       $link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES, false,
+                       $link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES,
                                array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() )
                        );
-                       $otherTags .= $link['html'];
+                       $otherTags = array_merge( $otherTags, $link['html'] );
 
                        // Load the previewed CSS
                        // If needed, Janus it first. This is user-supplied CSS, so it's
@@ -3669,7 +3678,7 @@ class OutputPage extends ContextSource {
                        if ( $this->getLanguage()->getDir() !== $wgContLang->getDir() ) {
                                $previewedCSS = CSSJanus::transform( $previewedCSS, true, false );
                        }
-                       $otherTags .= Html::inlineStyle( $previewedCSS ) . "\n";
+                       $otherTags[] = Html::inlineStyle( $previewedCSS ) . "\n";
                } else {
                        // Load the user styles normally
                        $moduleStyles[] = 'user';
@@ -3683,9 +3692,17 @@ class OutputPage extends ContextSource {
                        if ( !$module ) {
                                continue;
                        }
+                       if ( $name === 'site' ) {
+                               // HACK: The site module shouldn't be fragmented with a cache group and
+                               // http request. But in order to ensure its styles are separated and after the
+                               // ResourceLoaderDynamicStyles marker, pretend it is in a group called 'site'.
+                               // The scripts remain ungrouped and rides the bottom queue.
+                               $styles['site'][] = $name;
+                               continue;
+                       }
                        $group = $module->getGroup();
-                       // Modules in groups different than the ones listed on top (see $styles assignment)
-                       // will be placed in the "other" group
+                       // Modules in groups other than the ones needing special treatment (see $styles assignment)
+                       // will be placed in the "other" style category.
                        $styles[isset( $styles[$group] ) ? $group : 'other'][] = $name;
                }
 
@@ -3702,9 +3719,9 @@ class OutputPage extends ContextSource {
                $links[] = Html::element(
                        'meta',
                        array( 'name' => 'ResourceLoaderDynamicStyles', 'content' => '' )
-               ) . "\n";
+               );
 
-               // Add site, private and user styles
+               // Add site-specific and user-specific styles
                // 'private' at present only contains user.options, so put that before 'user'
                // Any future private modules will likely have a similar user-specific character
                foreach ( array( 'site', 'noscript', 'private', 'user' ) as $group ) {
@@ -3714,7 +3731,7 @@ class OutputPage extends ContextSource {
                }
 
                // Add stuff in $otherTags (previewed user CSS if applicable)
-               return self::getHtmlFromLoaderLinks( $links ) . $otherTags;
+               return self::getHtmlFromLoaderLinks( $links ) . implode( '', $otherTags );
        }
 
        /**
@@ -3945,6 +3962,24 @@ class OutputPage extends ContextSource {
                return $this->mEnableSectionEditLinks;
        }
 
+       /**
+        * Helper function to setup the PHP implementation of OOUI to use in this request.
+        *
+        * @since 1.26
+        * @param String $skinName The Skin name to determine the correct OOUI theme
+        * @param String $dir Language direction
+        */
+       public static function setupOOUI( $skinName = '', $dir = 'ltr' ) {
+               $themes = ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' );
+               // Make keys (skin names) lowercase for case-insensitive matching.
+               $themes = array_change_key_case( $themes, CASE_LOWER );
+               $theme = isset( $themes[ $skinName ] ) ? $themes[ $skinName ] : 'MediaWiki';
+               // For example, 'OOUI\MediaWikiTheme'.
+               $themeClass = "OOUI\\{$theme}Theme";
+               OOUI\Theme::setSingleton( new $themeClass() );
+               OOUI\Element::setDefaultDir( $dir );
+       }
+
        /**
         * Add ResourceLoader module styles for OOUI and set up the PHP implementation of it for use with
         * MediaWiki and this OutputPage instance.
@@ -3952,13 +3987,16 @@ class OutputPage extends ContextSource {
         * @since 1.25
         */
        public function enableOOUI() {
-               OOUI\Theme::setSingleton( new OOUI\MediaWikiTheme() );
-               OOUI\Element::setDefaultDir( $this->getLanguage()->getDir() );
+               self::setupOOUI(
+                       strtolower( $this->getSkin()->getSkinName() ),
+                       $this->getLanguage()->getDir()
+               );
                $this->addModuleStyles( array(
                        'oojs-ui.styles',
                        'oojs-ui.styles.icons',
                        'oojs-ui.styles.indicators',
                        'oojs-ui.styles.textures',
+                       'mediawiki.widgets.styles',
                ) );
        }
 }
index d11d021..9dec950 100644 (file)
 /**
  * Check php version and that external dependencies are installed, and
  * display an informative error if either condition is not satisfied.
+ *
+ * @note Since we can't rely on anything, the minimum PHP versions and MW current
+ * version are hardcoded here
  */
 function wfEntryPointCheck( $entryPoint ) {
+       $mwVersion = '1.26';
+       $minimumVersionPHP = '5.3.3';
+       $phpVersion = PHP_VERSION;
+
        if ( !function_exists( 'version_compare' )
-               || version_compare( PHP_VERSION, '5.3.3' ) < 0
-               || !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' )
+               || version_compare( $phpVersion, $minimumVersionPHP ) < 0
        ) {
-               wfPHPVersionError( $entryPoint );
+               wfPHPVersionError( $entryPoint, $mwVersion, $minimumVersionPHP, $phpVersion );
+       }
+
+       if ( !file_exists( dirname( __FILE__ ) . '/../vendor/autoload.php' ) ) {
+               wfMissingVendorError( $entryPoint, $mwVersion );
        }
 }
 
@@ -49,47 +59,39 @@ function wfEntryPointCheck( $entryPoint ) {
  *   - api.php
  *   - mw-config/index.php
  *   - cli
- *
- * @note Since we can't rely on anything, the minimum PHP versions and MW current
- * version are hardcoded here
+ * @param string $mwVersion The number of the MediaWiki version used
+ * @param string $title HTML code to be put within an <h2> tag
+ * @param string $shortText
+ * @param string $longText
+ * @param string $longHtml
  */
-function wfPHPVersionError( $type ) {
-       $mwVersion = '1.26';
-       $minimumVersionPHP = '5.3.3';
-
-       $phpVersion = PHP_VERSION;
+function wfGenericError( $type, $mwVersion, $title, $shortText, $longText, $longHtml ) {
        $protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
-       $message = "MediaWiki $mwVersion requires at least "
-               . "PHP version $minimumVersionPHP, you are using PHP $phpVersion. Installing some "
-               . " external dependencies (e.g. via composer) is also required.";
 
        if ( $type == 'cli' ) {
-               $finalOutput = "Error: You are missing some external dependencies or are using on older PHP version. \n"
-                       . "MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher.\n\n"
-                       . "Check if you have a newer php executable with a different name, such as php5.\n\n"
-                       . "MediaWiki now also has some external dependencies that need to be installed\n"
-                       . "via composer or from a separate git repo. Please see\n"
-                       . "https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries\n"
-                       . "for help on installing the required components.";
-       } elseif ( $type == 'index.php' || $type == 'mw-config/index.php' ) {
-               $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
-               if ( $type == 'mw-config/index.php' ) {
-                       $dirname = dirname( $pathinfo['dirname'] );
-               } else {
-                       $dirname = $pathinfo['dirname'];
-               }
-               $encLogo = htmlspecialchars(
-                       str_replace( '//', '/', $dirname . '/' ) .
-                       'resources/assets/mediawiki.png'
-               );
-
+               $finalOutput = $longText;
+       } else {
                header( "$protocol 500 MediaWiki configuration Error" );
-               header( 'Content-type: text/html; charset=UTF-8' );
                // Don't cache error pages!  They cause no end of trouble...
                header( 'Cache-control: none' );
                header( 'Pragma: no-cache' );
 
-               $finalOutput = <<<HTML
+               if ( $type == 'index.php' || $type == 'mw-config/index.php' ) {
+                       $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
+                       if ( $type == 'mw-config/index.php' ) {
+                               $dirname = dirname( $pathinfo['dirname'] );
+                       } else {
+                               $dirname = $pathinfo['dirname'];
+                       }
+                       $encLogo = htmlspecialchars(
+                               str_replace( '//', '/', $dirname . '/' ) .
+                               'resources/assets/mediawiki.png'
+                       );
+                       $shortHtml = htmlspecialchars( $shortText );
+
+                       header( 'Content-type: text/html; charset=UTF-8' );
+
+                       $finalOutput = <<<HTML
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
        <head>
@@ -120,10 +122,43 @@ function wfPHPVersionError( $type ) {
                <h1>MediaWiki {$mwVersion} internal error</h1>
                <div class='error'>
                <p>
-                       {$message}
+                       {$shortHtml}
                </p>
-               <h2>Supported PHP versions</h2>
+               <h2>{$title}</h2>
                <p>
+                       {$longHtml}
+               </p>
+               </div>
+       </body>
+</html>
+HTML;
+               // Handle everything that's not index.php
+               } else {
+                       // So nothing thinks this is JS or CSS
+                       $finalOutput = ( $type == 'load.php' ) ? "/* $shortText */" : $shortText;
+               }
+       }
+       echo "$finalOutput\n";
+       die( 1 );
+}
+
+/**
+ * Display an error for the minimum PHP version requirement not being satisfied.
+ *
+ * @param string $type See wfGenericError
+ * @param string $mwVersion See wfGenericError
+ * @param string $minimumVersionPHP The minimum PHP version supported by MediaWiki
+ * @param string $phpVersion The current PHP version
+ */
+function wfPHPVersionError( $type, $mwVersion, $minimumVersionPHP, $phpVersion ) {
+       $shortText = "MediaWiki $mwVersion requires at least "
+               . "PHP version $minimumVersionPHP, you are using PHP $phpVersion.";
+
+       $longText = "Error: You might be using on older PHP version. \n"
+               . "MediaWiki $mwVersion needs PHP $minimumVersionPHP or higher.\n\n"
+               . "Check if you have a newer php executable with a different name, such as php5.\n\n";
+
+       $longHtml = <<<HTML
                        Please consider <a href="http://www.php.net/downloads.php">upgrading your copy of PHP</a>.
                        PHP versions less than 5.3.0 are no longer supported by the PHP Group and will not receive
                        security or bugfix updates.
@@ -134,24 +169,31 @@ function wfPHPVersionError( $type ) {
                        of MediaWiki from our website.  See our
                        <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
                        for details of which versions are compatible with prior versions of PHP.
-               </p>
-               <h2>External dependencies</h2>
-               <p>
+HTML;
+       wfGenericError( $type, $mwVersion, 'Supported PHP versions', $shortText, $longText, $longHtml );
+}
+
+/**
+ * Display an error for the vendor/autoload.php file not being found.
+ *
+ * @param string $type See wfGenericError
+ * @param string $mwVersion See wfGenericError
+ */
+function wfMissingVendorError( $type, $mwVersion ) {
+       $shortText = "Installing some external dependencies (e.g. via composer) is also required.";
+
+       $longText = "Error: You are missing some external dependencies. \n"
+               . "MediaWiki now also has some external dependencies that need to be installed\n"
+               . "via composer or from a separate git repo. Please see\n"
+               . "https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries\n"
+               . "for help on installing the required components.";
+
+       $longHtml = <<<HTML
                        MediaWiki now also has some external dependencies that need to be installed via
                        composer or from a separate git repo. Please see
                        <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a>
                        for help on installing the required components.
-               </p>
-               </div>
-       </body>
-</html>
 HTML;
-       // Handle everything that's not index.php
-       } else {
-               // So nothing thinks this is JS or CSS
-               $finalOutput = ( $type == 'load.php' ) ? "/* $message */" : $message;
-               header( "$protocol 500 MediaWiki configuration Error" );
-       }
-       echo "$finalOutput\n";
-       die( 1 );
+
+       wfGenericError( $type, $mwVersion, 'External dependencies', $shortText, $longText, $longHtml );
 }
index 9497ee7..248b308 100644 (file)
@@ -124,6 +124,7 @@ class Preferences {
 
                $disable = !$user->isAllowed( 'editmyoptions' );
 
+               $defaultOptions = User::getDefaultOptions();
                ## Prod in defaults from the user
                foreach ( $defaultPreferences as $name => &$info ) {
                        $prefFromUser = self::getOptionFromUser( $name, $info, $user );
@@ -131,7 +132,6 @@ class Preferences {
                                $info['disabled'] = 'disabled';
                        }
                        $field = HTMLForm::loadInputFromParameters( $name, $info, $dummyForm ); // For validation
-                       $defaultOptions = User::getDefaultOptions();
                        $globalDefault = isset( $defaultOptions[$name] )
                                ? $defaultOptions[$name]
                                : null;
@@ -751,7 +751,11 @@ class Preferences {
                        'type' => 'select',
                        'section' => 'rendering/advancedrendering',
                        'options' => $stubThresholdOptions,
-                       'label-raw' => $context->msg( 'stub-threshold' )->text(), // Raw HTML message. Yay?
+                       // This is not a raw HTML message; label-raw is needed for the manual <a></a>
+                       'label-raw' => $context->msg( 'stub-threshold' )->rawParams(
+                               '<a href="#" class="stub">' .
+                               $context->msg( 'stub-threshold-sample-link' )->parse() .
+                               '</a>' )->parse(),
                );
 
                $defaultPreferences['showhiddencats'] = array(
index 55a4f49..430b4b8 100644 (file)
@@ -362,7 +362,11 @@ abstract class PrefixSearch {
                        $ns = NS_MAIN; // if searching on many always default to main
                }
 
-               $t = Title::newFromText( $search, $ns );
+               $t = null;
+               if ( is_string( $search ) ) {
+                       $t = Title::newFromText( $search, $ns );
+               }
+
                $prefix = $t ? $t->getDBkey() : '';
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select( 'page',
index 1443d1c..4cad7b7 100644 (file)
@@ -384,7 +384,12 @@ class ProtectionForm {
                                "mwProtect-$action-expires"
                        );
 
-                       $expiryFormOptions = '';
+                       $expiryFormOptions = new XmlSelect( "wpProtectExpirySelection-$action", "mwProtectExpirySelection-$action", $this->mExpirySelection[$action] );
+                       $expiryFormOptions->setAttribute( 'tabindex', '2' );
+                       if ( $this->disabled ) {
+                               $expiryFormOptions->setAttribute( 'disabled', 'disabled' );
+                       }
+
                        if ( $this->mExistingExpiry[$action] ) {
                                if ( $this->mExistingExpiry[$action] == 'infinity' ) {
                                        $existingExpiryMessage = $context->msg( 'protect-existing-expiry-infinity' );
@@ -394,29 +399,17 @@ class ProtectionForm {
                                        $t = $lang->userTime( $this->mExistingExpiry[$action], $user );
                                        $existingExpiryMessage = $context->msg( 'protect-existing-expiry', $timestamp, $d, $t );
                                }
-                               $expiryFormOptions .=
-                                       Xml::option(
-                                               $existingExpiryMessage->text(),
-                                               'existing',
-                                               $this->mExpirySelection[$action] == 'existing'
-                                       ) . "\n";
+                               $expiryFormOptions->addOption( $existingExpiryMessage->text(), 'existing' );
                        }
 
-                       $expiryFormOptions .= Xml::option(
-                               $context->msg( 'protect-othertime-op' )->text(),
-                               "othertime"
-                       ) . "\n";
+                       $expiryFormOptions->addOption( $context->msg( 'protect-othertime-op' )->text(), 'othertime' );
                        foreach ( explode( ',', $scExpiryOptions ) as $option ) {
                                if ( strpos( $option, ":" ) === false ) {
                                        $show = $value = $option;
                                } else {
                                        list( $show, $value ) = explode( ":", $option );
                                }
-                               $expiryFormOptions .= Xml::option(
-                                       $show,
-                                       htmlspecialchars( $value ),
-                                       $this->mExpirySelection[$action] === $value
-                               ) . "\n";
+                               $expiryFormOptions->addOption( $show, htmlspecialchars( $value ) );
                        }
                        # Add expiry dropdown
                        if ( $showProtectOptions && !$this->disabled ) {
@@ -426,12 +419,7 @@ class ProtectionForm {
                                                        {$mProtectexpiry}
                                                </td>
                                                <td class='mw-input'>" .
-                                                       Xml::tags( 'select',
-                                                               array(
-                                                                       'id' => "mwProtectExpirySelection-$action",
-                                                                       'name' => "wpProtectExpirySelection-$action",
-                                                                       'tabindex' => '2' ) + $this->disabledAttrib,
-                                                               $expiryFormOptions ) .
+                                                       $expiryFormOptions->getHTML() .
                                                "</td>
                                        </tr></table>";
                        }
@@ -576,18 +564,18 @@ class ProtectionForm {
                );
 
                $id = 'mwProtect-level-' . $action;
-               $attribs = array(
-                       'id' => $id,
-                       'name' => $id,
-                       'size' => count( $levels ),
-               ) + $this->disabledAttrib;
 
-               $out = Xml::openElement( 'select', $attribs );
+               $select = new XmlSelect( $id, $id, $selected );
+               $select->setAttribute( 'size', count( $levels ) );
+               if ( $this->disabled ) {
+                       $select->setAttribute( 'disabled', 'disabled' );
+               }
+
                foreach ( $levels as $key ) {
-                       $out .= Xml::option( $this->getOptionLabel( $key ), $key, $key == $selected );
+                       $select->addOption( $this->getOptionLabel( $key ), $key );
                }
-               $out .= Xml::closeElement( 'select' );
-               return $out;
+
+               return $select->getHTML();
        }
 
        /**
index 71bdf58..32ee259 100644 (file)
@@ -1641,8 +1641,9 @@ class Revision implements IDBAccessObject {
                                $row['content_format'] = $current->rev_content_format;
                        }
 
+                       $row['title'] = Title::makeTitle( $current->page_namespace, $current->page_title );
+
                        $revision = new Revision( $row );
-                       $revision->setTitle( Title::makeTitle( $current->page_namespace, $current->page_title ) );
                } else {
                        $revision = null;
                }
index 2340cd9..de63af7 100644 (file)
@@ -346,12 +346,9 @@ class Sanitizer {
                                  ($space*=$space*
                                        (?:
                                         # The attribute value: quoted or alone
-                                         \"([^<\"]*)\"
-                                        | '([^<']*)'
+                                         \"([^<\"]*)(?:\"|\$)
+                                        | '([^<']*)(?:'|\$)
                                         |  ([a-zA-Z0-9!#$%&()*,\\-.\\/:;<>?@[\\]^_`{|}~]+)
-                                        |  (\#[0-9a-fA-F]+) # Technically wrong, but lots of
-                                                                                # colors are specified like this.
-                                                                                # We'll be normalizing it.
                                        )
                                )?(?=$space|\$)/sx";
                }
@@ -457,15 +454,13 @@ class Sanitizer {
        public static function removeHTMLtags( $text, $processCallback = null,
                $args = array(), $extratags = array(), $removetags = array()
        ) {
-               global $wgUseTidy;
-
                extract( self::getRecognizedTagData( $extratags, $removetags ) );
 
                # Remove HTML comments
                $text = Sanitizer::removeHTMLcomments( $text );
                $bits = explode( '<', $text );
                $text = str_replace( '>', '&gt;', array_shift( $bits ) );
-               if ( !$wgUseTidy ) {
+               if ( !MWTidy::isEnabled() ) {
                        $tagstack = $tablestack = array();
                        foreach ( $bits as $x ) {
                                $regs = array();
@@ -753,7 +748,7 @@ class Sanitizer {
                        }
 
                        # Allow any attribute beginning with "data-"
-                       if ( !preg_match( '/^data-/i', $attribute ) && !isset( $whitelist[$attribute] ) ) {
+                       if ( !preg_match( '/^data-(?!ooui)/i', $attribute ) && !isset( $whitelist[$attribute] ) ) {
                                continue;
                        }
 
@@ -966,7 +961,8 @@ class Sanitizer {
                $value = self::normalizeCss( $value );
 
                // Reject problematic keywords and control characters
-               if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) {
+               if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ||
+                       strpos( $value, UtfNormal\Constants::UTF8_REPLACEMENT ) !== false ) {
                        return '/* invalid control char */';
                } elseif ( preg_match(
                        '! expression
@@ -1263,10 +1259,7 @@ class Sanitizer {
         * @return string
         */
        private static function getTagAttributeCallback( $set ) {
-               if ( isset( $set[6] ) ) {
-                       # Illegal #XXXXXX color with no quotes.
-                       return $set[6];
-               } elseif ( isset( $set[5] ) ) {
+               if ( isset( $set[5] ) ) {
                        # No quotes.
                        return $set[5];
                } elseif ( isset( $set[4] ) ) {
@@ -1276,9 +1269,10 @@ class Sanitizer {
                        # Double-quoted
                        return $set[3];
                } elseif ( !isset( $set[2] ) ) {
-                       # In XHTML, attributes must have a value.
-                       # For 'reduced' form, return explicitly the attribute name here.
-                       return $set[1];
+                       # In XHTML, attributes must have a value so return an empty string.
+                       # See "Empty attribute syntax",
+                       # http://www.w3.org/TR/html5/syntax.html#syntax-attribute-name
+                       return "";
                } else {
                        throw new MWException( "Tag conditions not met. This should never happen and is a bug." );
                }
@@ -1398,15 +1392,19 @@ class Sanitizer {
        }
 
        /**
-        * Returns true if a given Unicode codepoint is a valid character in XML.
+        * Returns true if a given Unicode codepoint is a valid character in
+        * both HTML5 and XML.
         * @param int $codepoint
         * @return bool
         */
        private static function validateCodepoint( $codepoint ) {
+               # U+000C is valid in HTML5 but not allowed in XML.
+               # U+000D is valid in XML but not allowed in HTML5.
+               # U+007F - U+009F are disallowed in HTML5 (control characters).
                return $codepoint == 0x09
                        || $codepoint == 0x0a
-                       || $codepoint == 0x0d
-                       || ( $codepoint >= 0x20 && $codepoint <= 0xd7ff )
+                       || ( $codepoint >= 0x20 && $codepoint <= 0x7e )
+                       || ( $codepoint >= 0xa0 && $codepoint <= 0xd7ff )
                        || ( $codepoint >= 0xe000 && $codepoint <= 0xfffd )
                        || ( $codepoint >= 0x10000 && $codepoint <= 0x10ffff );
        }
@@ -1808,6 +1806,11 @@ class Sanitizer {
 
                        $host = preg_replace( $strip, '', $host );
 
+                       // IPv6 host names are bracketed with [].  Url-decode these.
+                       if ( substr_compare( "//%5B", $host, 0, 5 ) === 0 && preg_match( '!^//%5B([0-9A-Fa-f:.]+)%5D((:\d+)?)$!', $host, $matches ) ) {
+                               $host = '//[' . $matches[1] . ']' . $matches[2];
+                       }
+
                        // @todo FIXME: Validate hostnames here
 
                        return $protocol . $host . $rest;
index 0c1e99d..479ce8c 100644 (file)
@@ -68,17 +68,18 @@ if ( !empty( $wgActionPaths ) && !isset( $wgActionPaths['view'] ) ) {
        $wgActionPaths['view'] = $wgArticlePath;
 }
 
+if ( $wgResourceBasePath === null ) {
+       $wgResourceBasePath = $wgScriptPath;
+}
 if ( $wgStylePath === false ) {
-       $wgStylePath = "$wgScriptPath/skins";
+       $wgStylePath = "$wgResourceBasePath/skins";
 }
 if ( $wgLocalStylePath === false ) {
+       // Avoid wgResourceBasePath here since that may point to a different domain (e.g. CDN)
        $wgLocalStylePath = "$wgScriptPath/skins";
 }
 if ( $wgExtensionAssetsPath === false ) {
-       $wgExtensionAssetsPath = "$wgScriptPath/extensions";
-}
-if ( $wgResourceBasePath === null ) {
-       $wgResourceBasePath = $wgScriptPath;
+       $wgExtensionAssetsPath = "$wgResourceBasePath/extensions";
 }
 
 if ( $wgLogo === false ) {
@@ -477,6 +478,12 @@ if ( $wgMaximalPasswordLength !== false ) {
        $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
 }
 
+// Backwards compatibility with deprecated alias
+// Must be before call to wfSetupSession()
+if ( $wgSessionsInMemcached ) {
+       $wgSessionsInObjectCache = true;
+}
+
 Profiler::instance()->scopedProfileOut( $ps_default );
 
 // Disable MWDebug for command line mode, this prevents MWDebug from eating up
@@ -515,11 +522,11 @@ unset( $serverParts );
 
 // Set defaults for configuration variables
 // that are derived from the server name by default
-if ( $wgEmergencyContact === false ) {
+// Note: $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
+if ( !$wgEmergencyContact ) {
        $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
 }
-
-if ( $wgPasswordSender === false ) {
+if ( !$wgPasswordSender ) {
        $wgPasswordSender = 'apache@' . $wgServerName;
 }
 
@@ -529,6 +536,8 @@ if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
                . 'HTTP or HTTPS. Disabling secure login.' );
 }
 
+$wgVirtualRestConfig['global']['domain'] = $wgCanonicalServer;
+
 // Now that GlobalFunctions is loaded, set defaults that depend on it.
 if ( $wgTmpDirectory === false ) {
        $wgTmpDirectory = wfTempDir();
index fbb5daa..28af7f5 100644 (file)
@@ -281,7 +281,7 @@ class Status {
         * Otherwise, if its an array, just use the first value as the
         * message and the remaining items as the params.
         *
-        * @return string
+        * @return Message
         */
        protected function getErrorMessage( $error ) {
                if ( is_array( $error ) ) {
@@ -316,9 +316,9 @@ class Status {
        }
 
        /**
-        * Return an array with the wikitext for each item in the array.
+        * Return an array with a Message object for each error.
         * @param array $errors
-        * @return array
+        * @return Message[]
         */
        protected function getErrorMessageArray( $errors ) {
                return array_map( array( $this, 'getErrorMessage' ), $errors );
index 2dfcdc2..49155d6 100644 (file)
@@ -194,7 +194,7 @@ class StubUserLang extends StubObject {
        public function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
                global $wgLang;
                $this->_unstub( 'findVariantLink', 3 );
-               return $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
+               $wgLang->findVariantLink( $link, $nt, $ignoreOtherCond );
        }
 
        /**
index d53d593..d6b101b 100644 (file)
@@ -103,7 +103,7 @@ class TemplateParser {
                        // See if the compiled PHP code is stored in cache.
                        // CACHE_ACCEL throws an exception if no suitable object cache is present, so fall
                        // back to CACHE_ANYTHING.
-                       $cache = ObjectCache::newAccelerator( array(), CACHE_ANYTHING );
+                       $cache = ObjectCache::newAccelerator( CACHE_ANYTHING );
                        $key = wfMemcKey( 'template', $templateName, $fastHash );
                        $code = $this->forceRecompile ? null : $cache->get( $key );
 
@@ -173,7 +173,9 @@ class TemplateParser {
                        array(
                                // Do not add more flags here without discussion.
                                // If you do add more flags, be sure to update unit tests as well.
-                               'flags' => LightnCandy::FLAG_ERROR_EXCEPTION
+                               'flags' => LightnCandy::FLAG_ERROR_EXCEPTION,
+                               'basedir' => $this->templateDir,
+                               'fileext' => '.mustache',
                        )
                );
        }
index 9c8ed47..b347edb 100644 (file)
@@ -313,7 +313,7 @@ class Title {
                $filteredText = Sanitizer::decodeCharReferencesAndNormalize( $text );
 
                $t = new Title();
-               $t->mDbkeyform = str_replace( ' ', '_', $filteredText );
+               $t->mDbkeyform = strtr( $filteredText, ' ', '_' );
                $t->mDefaultNamespace = intval( $defaultNamespace );
 
                $t->secureAndSplit();
@@ -345,10 +345,10 @@ class Title {
                # but some URLs used it as a space replacement and they still come
                # from some external search tools.
                if ( strpos( self::legalChars(), '+' ) === false ) {
-                       $url = str_replace( '+', ' ', $url );
+                       $url = strtr( $url, '+', ' ' );
                }
 
-               $t->mDbkeyform = str_replace( ' ', '_', $url );
+               $t->mDbkeyform = strtr( $url, ' ', '_' );
 
                try {
                        $t->secureAndSplit();
@@ -509,10 +509,10 @@ class Title {
                $t->mInterwiki = $interwiki;
                $t->mFragment = $fragment;
                $t->mNamespace = $ns = intval( $ns );
-               $t->mDbkeyform = str_replace( ' ', '_', $title );
+               $t->mDbkeyform = strtr( $title, ' ', '_' );
                $t->mArticleID = ( $ns >= 0 ) ? -1 : 0;
                $t->mUrlform = wfUrlencode( $t->mDbkeyform );
-               $t->mTextform = str_replace( '_', ' ', $title );
+               $t->mTextform = strtr( $title, '_', ' ' );
                $t->mContentModel = false; # initialized lazily in getContentModel()
                return $t;
        }
@@ -1419,7 +1419,7 @@ class Title {
         * @param string $fragment Text
         */
        public function setFragment( $fragment ) {
-               $this->mFragment = str_replace( '_', ' ', substr( $fragment, 1 ) );
+               $this->mFragment = strtr( substr( $fragment, 1 ), '_', ' ' );
        }
 
        /**
@@ -1449,7 +1449,7 @@ class Title {
         */
        public function getPrefixedDBkey() {
                $s = $this->prefix( $this->mDbkeyform );
-               $s = str_replace( ' ', '_', $s );
+               $s = strtr( $s, ' ', '_' );
                return $s;
        }
 
@@ -1462,7 +1462,7 @@ class Title {
        public function getPrefixedText() {
                if ( $this->mPrefixedText === null ) {
                        $s = $this->prefix( $this->mTextform );
-                       $s = str_replace( '_', ' ', $s );
+                       $s = strtr( $s, '_', ' ' );
                        $this->mPrefixedText = $s;
                }
                return $this->mPrefixedText;
@@ -1610,7 +1610,7 @@ class Title {
         */
        public function getSubpageUrlForm() {
                $text = $this->getSubpageText();
-               $text = wfUrlencode( str_replace( ' ', '_', $text ) );
+               $text = wfUrlencode( strtr( $text, ' ', '_' ) );
                return $text;
        }
 
@@ -1621,7 +1621,7 @@ class Title {
         */
        public function getPrefixedURL() {
                $s = $this->prefix( $this->mDbkeyform );
-               $s = wfUrlencode( str_replace( ' ', '_', $s ) );
+               $s = wfUrlencode( strtr( $s, ' ', '_' ) );
                return $s;
        }
 
@@ -1939,7 +1939,6 @@ class Title {
         *   - quick  : does cheap permission checks from slaves (usable for GUI creation)
         *   - full   : does cheap and expensive checks possibly from a slave
         *   - secure : does cheap and expensive checks, using the master as needed
-        * @param bool $short Set this to true to stop after the first permission error.
         * @param array $ignoreErrors Array of Strings Set this to a list of message keys
         *   whose corresponding errors may be ignored.
         * @return array Array of arguments to wfMessage to explain permissions problems.
@@ -3370,7 +3369,7 @@ class Title {
 
                $this->mDbkeyform = $parts['dbkey'];
                $this->mUrlform = wfUrlencode( $this->mDbkeyform );
-               $this->mTextform = str_replace( '_', ' ', $this->mDbkeyform );
+               $this->mTextform = strtr( $this->mDbkeyform, '_', ' ' );
 
                # We already know that some pages won't be in the database!
                if ( $this->isExternal() || $this->mNamespace == NS_SPECIAL ) {
@@ -4547,15 +4546,17 @@ class Title {
        public function isValidRedirectTarget() {
                global $wgInvalidRedirectTargets;
 
-               // invalid redirect targets are stored in a global array, but explicitly disallow Userlogout here
-               if ( $this->isSpecial( 'Userlogout' ) ) {
-                       return false;
-               }
-
-               foreach ( $wgInvalidRedirectTargets as $target ) {
-                       if ( $this->isSpecial( $target ) ) {
+               if ( $this->isSpecialPage() ) {
+                       // invalid redirect targets are stored in a global array, but explicitly disallow Userlogout here
+                       if ( $this->isSpecial( 'Userlogout' ) ) {
                                return false;
                        }
+
+                       foreach ( $wgInvalidRedirectTargets as $target ) {
+                               if ( $this->isSpecial( $target ) ) {
+                                       return false;
+                               }
+                       }
                }
 
                return true;
@@ -4738,7 +4739,7 @@ class Title {
                        }
                } else {
                        // Even if there are no subpages in namespace, we still don't want "/" in MediaWiki message keys
-                       $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->getDBkey() );
+                       $editnoticeText = $editnotice_ns . '-' . strtr( $this->getDBkey(), '/', '-' );
                        $msg = wfMessage( $editnoticeText );
                        if ( $msg->exists() ) {
                                $html = $msg->parseAsBlock();
@@ -4759,4 +4760,26 @@ class Title {
                Hooks::run( 'TitleGetEditNotices', array( $this, $oldid, &$notices ) );
                return $notices;
        }
+
+       /**
+        * @return array
+        */
+       public function __sleep() {
+               return array(
+                       'mNamespace',
+                       'mDbkeyform',
+                       'mFragment',
+                       'mInterwiki',
+                       'mLocalInterwiki',
+                       'mUserCaseDBKey',
+                       'mDefaultNamespace',
+               );
+       }
+
+       public function __wakeup() {
+               $this->mArticleID = ( $this->mNamespace >= 0 ) ? -1 : 0;
+               $this->mUrlform = wfUrlencode( $this->mDbkeyform );
+               $this->mTextform = strtr( $this->mDbkeyform, '_', ' ' );
+       }
+
 }
index 63c0d37..dbcbe31 100644 (file)
@@ -183,50 +183,50 @@ class User implements IDBAccessObject {
         */
        protected static $mAllRights = false;
 
-       /** @name Cache variables */
+       /** Cache variables */
        //@{
        public $mId;
-
+       /** @var string */
        public $mName;
-
+       /** @var string */
        public $mRealName;
-
        /**
         * @todo Make this actually private
         * @private
+        * @var Password
         */
        public $mPassword;
-
        /**
         * @todo Make this actually private
         * @private
+        * @var Password
         */
        public $mNewpassword;
-
+       /** @var string */
        public $mNewpassTime;
-
+       /** @var string */
        public $mEmail;
        /** @var string TS_MW timestamp from the DB */
        public $mTouched;
        /** @var string TS_MW timestamp from cache */
        protected $mQuickTouched;
-
+       /** @var string */
        protected $mToken;
-
+       /** @var string */
        public $mEmailAuthenticated;
-
+       /** @var string */
        protected $mEmailToken;
-
+       /** @var string */
        protected $mEmailTokenExpires;
-
+       /** @var string */
        protected $mRegistration;
-
+       /** @var int */
        protected $mEditCount;
-
+       /** @var array */
        public $mGroups;
-
+       /** @var array */
        protected $mOptionOverrides;
-
+       /** @var string */
        protected $mPasswordExpires;
        //@}
 
@@ -257,29 +257,29 @@ class User implements IDBAccessObject {
         * Lazy-initialized variables, invalidated with clearInstanceCache
         */
        protected $mNewtalk;
-
+       /** @var string */
        protected $mDatePreference;
-
+       /** @var string */
        public $mBlockedby;
-
+       /** @var string */
        protected $mHash;
-
+       /** @var array */
        public $mRights;
-
+       /** @var string */
        protected $mBlockreason;
-
+       /** @var array */
        protected $mEffectiveGroups;
-
+       /** @var array */
        protected $mImplicitGroups;
-
+       /** @var array */
        protected $mFormerGroups;
-
+       /** @var bool */
        protected $mBlockedGlobally;
-
+       /** @var bool */
        protected $mLocked;
-
+       /** @var bool */
        public $mHideName;
-
+       /** @var array */
        public $mOptions;
 
        /**
@@ -387,7 +387,8 @@ class User implements IDBAccessObject {
 
                // Try cache (unless this needs to lock the DB).
                // NOTE: if this thread called saveSettings(), the cache was cleared.
-               if ( ( $flags & self::READ_LOCKING ) || !$this->loadFromCache() ) {
+               $locking = ( ( $flags & self::READ_LOCKING ) == self::READ_LOCKING );
+               if ( $locking || !$this->loadFromCache() ) {
                        wfDebug( "User: cache miss for user {$this->mId}\n" );
                        // Load from DB (make sure this thread sees its own changes)
                        if ( wfGetLB()->hasOrMadeRecentMasterChanges() ) {
@@ -518,19 +519,24 @@ class User implements IDBAccessObject {
         * If the code is invalid or has expired, returns NULL.
         *
         * @param string $code Confirmation code
+        * @param int $flags User::READ_* bitfield
         * @return User|null
         */
-       public static function newFromConfirmationCode( $code ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $id = $dbr->selectField( 'user', 'user_id', array(
-                       'user_email_token' => md5( $code ),
-                       'user_email_token_expires > ' . $dbr->addQuotes( $dbr->timestamp() ),
-                       ) );
-               if ( $id !== false ) {
-                       return User::newFromId( $id );
-               } else {
-                       return null;
-               }
+       public static function newFromConfirmationCode( $code, $flags = 0 ) {
+               $db = ( $flags & self::READ_LATEST ) == self::READ_LATEST
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $id = $db->selectField(
+                       'user',
+                       'user_id',
+                       array(
+                               'user_email_token' => md5( $code ),
+                               'user_email_token_expires > ' . $db->addQuotes( $db->timestamp() ),
+                       )
+               );
+
+               return $id ? User::newFromId( $id ) : null;
        }
 
        /**
@@ -837,10 +843,11 @@ class User implements IDBAccessObject {
         * able to set their password to this.
         *
         * @param string $password Desired password
+        * @param string $purpose one of 'login', 'create', 'reset'
         * @return Status
         * @since 1.23
         */
-       public function checkPasswordValidity( $password ) {
+       public function checkPasswordValidity( $password, $purpose = 'login' ) {
                global $wgPasswordPolicy;
 
                $upp = new UserPasswordPolicy(
@@ -857,7 +864,7 @@ class User implements IDBAccessObject {
                }
 
                if ( $result === false ) {
-                       $status->merge( $upp->checkUserPassword( $this, $password ) );
+                       $status->merge( $upp->checkUserPassword( $this, $password, $purpose ) );
                        return $status;
                } elseif ( $result === true ) {
                        return $status;
@@ -2151,6 +2158,7 @@ class User implements IDBAccessObject {
                                && $newMessageLinks[0]['wiki'] === wfWikiID()
                                && $newMessageLinks[0]['rev']
                        ) {
+                               /** @var Revision $newMessageRevision */
                                $newMessageRevision = $newMessageLinks[0]['rev'];
                                $newMessageRevisionId = $newMessageRevision->getId();
                        }
@@ -2430,6 +2438,7 @@ class User implements IDBAccessObject {
         */
        public function setInternalPassword( $str ) {
                $this->setToken();
+               $this->setOption( 'watchlisttoken', false );
 
                $passwordFactory = self::getPasswordFactory();
                $this->mPassword = $passwordFactory->newFromPlaintext( $str );
@@ -2707,20 +2716,24 @@ class User implements IDBAccessObject {
         * @return string|bool User's current value for the option, or false if this option is disabled.
         * @see resetTokenFromOption()
         * @see getOption()
+        * @deprecated 1.26 Applications should use the OAuth extension
         */
        public function getTokenFromOption( $oname ) {
                global $wgHiddenPrefs;
-               if ( in_array( $oname, $wgHiddenPrefs ) ) {
+
+               $id = $this->getId();
+               if ( !$id || in_array( $oname, $wgHiddenPrefs ) ) {
                        return false;
                }
 
                $token = $this->getOption( $oname );
                if ( !$token ) {
-                       $token = $this->resetTokenFromOption( $oname );
-                       if ( !wfReadOnly() ) {
-                               $this->saveSettings();
-                       }
+                       // Default to a value based on the user token to avoid space
+                       // wasted on storing tokens for all users. When this option
+                       // is set manually by the user, only then is it stored.
+                       $token = hash_hmac( 'sha1', "$oname:$id", $this->getToken() );
                }
+
                return $token;
        }
 
@@ -3200,10 +3213,10 @@ class User implements IDBAccessObject {
        /**
         * Check if user is allowed to access a feature / make an action
         *
-        * @param string $permissions,... Permissions to test
+        * @param string ... Permissions to test
         * @return bool True if user is allowed to perform *any* of the given actions
         */
-       public function isAllowedAny( /*...*/ ) {
+       public function isAllowedAny() {
                $permissions = func_get_args();
                foreach ( $permissions as $permission ) {
                        if ( $this->isAllowed( $permission ) ) {
@@ -3215,10 +3228,10 @@ class User implements IDBAccessObject {
 
        /**
         *
-        * @param string $permissions,... Permissions to test
+        * @param string ... Permissions to test
         * @return bool True if the user is allowed to perform *all* of the given actions
         */
-       public function isAllowedAll( /*...*/ ) {
+       public function isAllowedAll() {
                $permissions = func_get_args();
                foreach ( $permissions as $permission ) {
                        if ( !$this->isAllowed( $permission ) ) {
@@ -3382,19 +3395,24 @@ class User implements IDBAccessObject {
                                return;
                        }
 
-                       $nextid = $oldid ? $title->getNextRevisionID( $oldid ) : null;
+                       $that = $this;
+                       // Try to update the DB post-send and only if needed...
+                       DeferredUpdates::addCallableUpdate( function() use ( $that, $title, $oldid ) {
+                               if ( !$that->getNewtalk() ) {
+                                       return; // no notifications to clear
+                               }
+
+                               // Delete the last notifications (they stack up)
+                               $that->setNewtalk( false );
 
-                       if ( !$oldid || !$nextid ) {
-                               // If we're looking at the latest revision, we should definitely clear it
-                               $this->setNewtalk( false );
-                       } else {
-                               // Otherwise we should update its revision, if it's present
-                               if ( $this->getNewtalk() ) {
-                                       // Naturally the other one won't clear by itself
-                                       $this->setNewtalk( false );
-                                       $this->setNewtalk( true, Revision::newFromId( $nextid ) );
+                               // If there is a new, unseen, revision, use its timestamp
+                               $nextid = $oldid
+                                       ? $title->getNextRevisionID( $oldid, Title::GAID_FOR_UPDATE )
+                                       : null;
+                               if ( $nextid ) {
+                                       $that->setNewtalk( true, Revision::newFromId( $nextid ) );
                                }
-                       }
+                       } );
                }
 
                if ( !$wgUseEnotif && !$wgShowUpdatedMarker ) {
@@ -3446,7 +3464,7 @@ class User implements IDBAccessObject {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->update( 'watchlist',
                                array( /* SET */ 'wl_notificationtimestamp' => null ),
-                               array( /* WHERE */ 'wl_user' => $id ),
+                               array( /* WHERE */ 'wl_user' => $id, 'wl_notificationtimestamp IS NOT NULL' ),
                                __METHOD__
                        );
                        // We also need to clear here the "you have new message" notification for the own user_talk page;
@@ -3679,12 +3697,10 @@ class User implements IDBAccessObject {
                        $this->clearSharedCache();
                        // User was changed in the meantime or loaded with stale data
                        $from = ( $this->queryFlagsUsed & self::READ_LATEST ) ? 'master' : 'slave';
-                       MWExceptionHandler::logException( new MWException(
+                       throw new MWException(
                                "CAS update failed on user_touched for user ID '{$this->mId}' (read from $from);" .
-                               "the version of the user to be saved is older than the current version."
-                       ) );
-
-                       return;
+                               " the version of the user to be saved is older than the current version."
+                       );
                }
 
                $this->mTouched = $newTouched;
@@ -3693,32 +3709,32 @@ class User implements IDBAccessObject {
                Hooks::run( 'UserSaveSettings', array( $this ) );
                $this->clearSharedCache();
                $this->getUserPage()->invalidateCache();
-
-               // T95839: clear the cache again post-commit to reduce race conditions
-               // where stale values are written back to the cache by other threads.
-               // Note: this *still* doesn't deal with REPEATABLE-READ snapshot lag...
-               $that = $this;
-               $dbw->onTransactionIdle( function() use ( $that ) {
-                       $that->clearSharedCache();
-               } );
        }
 
        /**
         * If only this user's username is known, and it exists, return the user ID.
+        *
+        * @param int $flags Bitfield of User:READ_* constants; useful for existence checks
         * @return int
         */
-       public function idForName() {
+       public function idForName( $flags = 0 ) {
                $s = trim( $this->getName() );
                if ( $s === '' ) {
                        return 0;
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $id = $dbr->selectField( 'user', 'user_id', array( 'user_name' => $s ), __METHOD__ );
-               if ( $id === false ) {
-                       $id = 0;
-               }
-               return $id;
+               $db = ( ( $flags & self::READ_LATEST ) == self::READ_LATEST )
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $options = ( ( $flags & self::READ_LOCKING ) == self::READ_LOCKING )
+                       ? array( 'LOCK IN SHARE MODE' )
+                       : array();
+
+               $id = $db->selectField( 'user',
+                       'user_id', array( 'user_name' => $s ), __METHOD__, $options );
+
+               return (int)$id;
        }
 
        /**
@@ -4222,22 +4238,25 @@ class User implements IDBAccessObject {
         *
         * @param string $subject Message subject
         * @param string $body Message body
-        * @param string $from Optional From address; if unspecified, default
+        * @param User|null $from Optional sending user; if unspecified, default
         *   $wgPasswordSender will be used.
         * @param string $replyto Reply-To address
         * @return Status
         */
        public function sendMail( $subject, $body, $from = null, $replyto = null ) {
-               if ( is_null( $from ) ) {
-                       global $wgPasswordSender;
+               global $wgPasswordSender;
+
+               if ( $from instanceof User ) {
+                       $sender = MailAddress::newFromUser( $from );
+               } else {
                        $sender = new MailAddress( $wgPasswordSender,
                                wfMessage( 'emailsender' )->inContentLanguage()->text() );
-               } else {
-                       $sender = MailAddress::newFromUser( $from );
                }
-
                $to = MailAddress::newFromUser( $this );
-               return UserMailer::send( $to, $sender, $subject, $body, $replyto );
+
+               return UserMailer::send( $to, $sender, $subject, $body, array(
+                       'replyTo' => $replyto,
+               ) );
        }
 
        /**
index 73b0b93..adee126 100644 (file)
@@ -224,8 +224,6 @@ class WatchedItem {
        public function resetNotificationTimestamp(
                $force = '', $oldid = 0, $mode = self::IMMEDIATE
        ) {
-               global $wgActivityUpdatesUseJobQueue;
-
                // Only loggedin user can have a watchlist
                if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
                        return;
@@ -275,20 +273,20 @@ class WatchedItem {
                }
 
                // If the page is watched by the user (or may be watched), update the timestamp
-               if ( $mode === self::DEFERRED && $wgActivityUpdatesUseJobQueue ) {
-                       JobQueueGroup::singleton()->push(
-                               EnqueueJob::newFromLocalJobs( new JobSpecification(
-                                       'activityUpdateJob',
-                                       array(
-                                               'type'      => 'updateWatchlistNotification',
-                                               'userid'    => $this->getUserId(),
-                                               'notifTime' => $notificationTimestamp,
-                                               'curTime'   => time()
-                                       ),
-                                       array( 'removeDuplicates' => true ),
-                                       $title
-                               ) )
+               if ( $mode === self::DEFERRED ) {
+                       $job = new ActivityUpdateJob(
+                               $title,
+                               array(
+                                       'type'      => 'updateWatchlistNotification',
+                                       'userid'    => $this->getUserId(),
+                                       'notifTime' => $notificationTimestamp,
+                                       'curTime'   => time()
+                               )
                        );
+                       // Try to run this post-send
+                       DeferredUpdates::addCallableUpdate( function() use ( $job ) {
+                               $job->run();
+                       } );
                } else {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->update( 'watchlist',
index 03410cc..850f101 100644 (file)
@@ -1324,14 +1324,6 @@ class FauxRequest extends WebRequest {
                $this->protocol = $protocol;
        }
 
-       /**
-        * @param string $method
-        * @throws MWException
-        */
-       private function notImplemented( $method ) {
-               throw new MWException( "{$method}() not implemented" );
-       }
-
        /**
         * @param string $name
         * @param string $default
@@ -1425,10 +1417,6 @@ class FauxRequest extends WebRequest {
                return $this->protocol;
        }
 
-       private function initHeaders() {
-               return;
-       }
-
        /**
         * @param string $name
         * @param string $val
index f97dc6a..f5a4f93 100644 (file)
@@ -136,3 +136,8 @@ if ( ob_get_level() == 0 ) {
 if ( !defined( 'MW_NO_SETUP' ) ) {
        require_once "$IP/includes/Setup.php";
 }
+
+# Multiple DBs or commits might be used; keep the request as transactional as possible
+if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] === 'POST' ) {
+       ignore_user_abort( true );
+}
index f16f5aa..027ff72 100644 (file)
@@ -108,13 +108,15 @@ class WikiMap {
         *
         * @param string $wikiID Wiki'd id (generally database name)
         * @param string $page Page name (must be normalised before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string|bool URL or false if the wiki was not found
         */
-       public static function getForeignURL( $wikiID, $page ) {
+       public static function getForeignURL( $wikiID, $page, $fragmentId = null ) {
                $wiki = WikiMap::getWiki( $wikiID );
 
                if ( $wiki ) {
-                       return $wiki->getFullUrl( $page );
+                       return $wiki->getFullUrl( $page, $fragmentId );
                }
 
                return false;
@@ -146,20 +148,6 @@ class WikiReference {
                $this->mServer = $server === null ? $canonicalServer : $server;
        }
 
-       /**
-        * @return string
-        * @throws MWException
-        */
-       public function getHostname() {
-               $prefixes = array( 'http://', 'https://' );
-               foreach ( $prefixes as $prefix ) {
-                       if ( substr( $this->mCanonicalServer, 0, strlen( $prefix ) ) ) {
-                               return substr( $this->mCanonicalServer, strlen( $prefix ) );
-                       }
-               }
-               throw new MWException( "Invalid hostname for wiki {$this->mMinor}.{$this->mMajor}" );
-       }
-
        /**
         * Get the URL in a way to be displayed to the user
         * More or less Wikimedia specific
@@ -167,13 +155,12 @@ class WikiReference {
         * @return string
         */
        public function getDisplayName() {
-               $url = $this->getUrl( '' );
-               $parsed = wfParseUrl( $url );
+               $parsed = wfParseUrl( $this->mCanonicalServer );
                if ( $parsed ) {
                        return $parsed['host'];
                } else {
-                       // Invalid URL. There's no sane thing to do here, so just return it
-                       return $url;
+                       // Invalid server spec. There's no sane thing to do here, so just return the canonical server name in full
+                       return $this->mCanonicalServer;
                }
        }
 
@@ -181,21 +168,32 @@ class WikiReference {
         * Helper function for getUrl()
         *
         * @todo FIXME: This may be generalized...
-        * @param string $page Page name (must be normalised before calling this function!)
-        * @return string Url fragment
+        *
+        * @param string $page Page name (must be normalised before calling this function! May contain a section part.)
+        * @param string|null $fragmentId
+        *
+        * @return string relative URL, without the server part.
         */
-       private function getLocalUrl( $page ) {
-               return str_replace( '$1', wfUrlEncode( str_replace( ' ', '_', $page ) ), $this->mPath );
+       private function getLocalUrl( $page, $fragmentId = null ) {
+               $page = wfUrlEncode( str_replace( ' ', '_', $page ) );
+
+               if ( is_string( $fragmentId ) && $fragmentId !== '' ) {
+                       $page .= '#' . wfUrlEncode( $fragmentId );
+               }
+
+               return str_replace( '$1', $page, $this->mPath );
        }
 
        /**
         * Get a canonical (i.e. based on $wgCanonicalServer) URL to a page on this foreign wiki
         *
         * @param string $page Page name (must be normalised before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string Url
         */
-       public function getCanonicalUrl( $page ) {
-               return $this->mCanonicalServer . $this->getLocalUrl( $page );
+       public function getCanonicalUrl( $page, $fragmentId = null ) {
+               return $this->mCanonicalServer . $this->getLocalUrl( $page, $fragmentId );
        }
 
        /**
@@ -209,10 +207,12 @@ class WikiReference {
        /**
         * Alias for getCanonicalUrl(), for backwards compatibility.
         * @param string $page
+        * @param string|null $fragmentId
+        *
         * @return string
         */
-       public function getUrl( $page ) {
-               return $this->getCanonicalUrl( $page );
+       public function getUrl( $page, $fragmentId = null ) {
+               return $this->getCanonicalUrl( $page, $fragmentId );
        }
 
        /**
@@ -220,10 +220,12 @@ class WikiReference {
         * when called locally on the wiki.
         *
         * @param string $page Page name (must be normalized before calling this function!)
+        * @param string|null $fragmentId
+        *
         * @return string URL
         */
-       public function getFullUrl( $page ) {
+       public function getFullUrl( $page, $fragmentId = null ) {
                return $this->mServer .
-                       $this->getLocalUrl( $page );
+                       $this->getLocalUrl( $page, $fragmentId );
        }
 }
index 1cd04ae..78f4764 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Class to generate XML <select>.
+ * Class for generating HTML <select> elements.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
  */
 
 /**
- * Module of static functions for generating XML <select> elements
+ * Class for generating HTML <select> elements.
  */
 class XmlSelect {
        protected $options = array();
@@ -43,7 +43,7 @@ class XmlSelect {
        }
 
        /**
-        * @param string $default
+        * @param string|array $default
         */
        public function setDefault( $default ) {
                $this->default = $default;
@@ -51,7 +51,7 @@ class XmlSelect {
 
        /**
         * @param string $name
-        * @param array $value
+        * @param string $value
         */
        public function setAttribute( $name, $value ) {
                $this->attributes[$name] = $value;
@@ -59,7 +59,7 @@ class XmlSelect {
 
        /**
         * @param string $name
-        * @return array|null
+        * @return string|null
         */
        public function getAttribute( $name ) {
                if ( isset( $this->attributes[$name] ) ) {
@@ -70,14 +70,12 @@ class XmlSelect {
        }
 
        /**
-        * @param string $name
-        * @param bool $value
+        * @param string $label
+        * @param string $value If not given, assumed equal to $label
         */
-       public function addOption( $name, $value = false ) {
-               // Stab stab stab
-               $value = $value !== false ? $value : $name;
-
-               $this->options[] = array( $name => $value );
+       public function addOption( $label, $value = false ) {
+               $value = $value !== false ? $value : $label;
+               $this->options[] = array( $label => $value );
        }
 
        /**
@@ -92,12 +90,12 @@ class XmlSelect {
        }
 
        /**
-        * This accepts an array of form
+        * This accepts an array of form:
         * label => value
         * label => ( label => value, label => value )
         *
         * @param array $options
-        * @param bool $default
+        * @param string|array $default
         * @return string
         */
        static function formatOptions( $options, $default = false ) {
@@ -108,7 +106,11 @@ class XmlSelect {
                                $contents = self::formatOptions( $value, $default );
                                $data .= Html::rawElement( 'optgroup', array( 'label' => $label ), $contents ) . "\n";
                        } else {
-                               $data .= Xml::option( $label, $value, $value === $default ) . "\n";
+                               // If $default is an array, then the <select> probably has the multiple attribute,
+                               // so we should check if each $value is in $default, rather than checking if
+                               // $value is equal to $default.
+                               $selected = is_array( $default ) ? in_array( $value, $default ) : $value === $default;
+                               $data .= Xml::option( $label, $value, $selected ) . "\n";
                        }
                }
 
index 87cc48e..893ae04 100644 (file)
@@ -1370,6 +1370,7 @@ $zh2Hant = array(
 '脶' => '腡',
 '脸' => '臉',
 '腊' => '臘',
+'腌' => '醃',
 '腘' => '膕',
 '腭' => '齶',
 '腻' => '膩',
@@ -3073,7 +3074,7 @@ $zh2Hant = array(
 '9只' => '9隻',
 '9余' => '9餘',
 '·范' => '·范',
-'’s ' => '’s',
+'’s' => '’s',
 '、面点' => '、麵點',
 '。个中' => '。箇中',
 '〇周后' => '〇周後',
@@ -3200,21 +3201,6 @@ $zh2Hant = array(
 '不好干预' => '不好干預',
 '不嫌母丑' => '不嫌母醜',
 '不寒而栗' => '不寒而慄',
-'不干事' => '不干事',
-'不干他' => '不干他',
-'不干休' => '不干休',
-'不干你' => '不干你',
-'不干她' => '不干她',
-'不干它' => '不干它',
-'不干我' => '不干我',
-'不干扰' => '不干擾',
-'不干擾' => '不干擾',
-'不干涉' => '不干涉',
-'不干牠' => '不干牠',
-'不干犯' => '不干犯',
-'不干預' => '不干預',
-'不干预' => '不干預',
-'不干' => '不幹',
 '不吊' => '不弔',
 '不卷' => '不捲',
 '不采' => '不採',
@@ -3355,6 +3341,7 @@ $zh2Hant = array(
 '干奴才' => '乾奴才',
 '干妹' => '乾妹',
 '干姊' => '乾姊',
+'干姐' => '乾姐',
 '干娘' => '乾娘',
 '干妈' => '乾媽',
 '干子' => '乾子',
@@ -3416,6 +3403,7 @@ $zh2Hant = array(
 '干癣' => '乾癬',
 '干瘾' => '乾癮',
 '干白儿' => '乾白兒',
+'干白葡萄酒' => '乾白葡萄酒',
 '干的' => '乾的',
 '干眼' => '乾眼',
 '干瞪眼' => '乾瞪眼',
@@ -3426,6 +3414,7 @@ $zh2Hant = array(
 '干篾片' => '乾篾片',
 '干粉' => '乾粉',
 '干粮' => '乾糧',
+'干红葡萄酒' => '乾紅葡萄酒',
 '干结' => '乾結',
 '干丝' => '乾絲',
 '干纲' => '乾綱',
@@ -3654,7 +3643,6 @@ $zh2Hant = array(
 '于贈' => '于贈',
 '于赠' => '于贈',
 '于越' => '于越',
-'于军' => '于軍',
 '于軍' => '于軍',
 '于道泉' => '于道泉',
 '于远伟' => '于遠偉',
@@ -3677,9 +3665,8 @@ $zh2Hant = array(
 '于韦斯屈莱' => '于韋斯屈萊',
 '于風政' => '于風政',
 '于风政' => '于風政',
+'于飛' => '于飛',
 '于飞' => '于飛',
-'于飛島' => '于飛島',
-'于飞岛' => '于飛島',
 '于余曲折' => '于餘曲折',
 '于鬯' => '于鬯',
 '于魁智' => '于魁智',
@@ -3731,6 +3718,7 @@ $zh2Hant = array(
 '人数里' => '人數裡',
 '人物志' => '人物誌',
 '人生天里' => '人生天里',
+'人发指' => '人髮指',
 '什锦面' => '什錦麵',
 '仇仇' => '仇讎',
 '介胄' => '介冑',
@@ -3744,7 +3732,6 @@ $zh2Hant = array(
 '代理发行' => '代理發行',
 '代码表' => '代碼表',
 '代表' => '代表',
-'令人发指' => '令人髮指',
 '以自制' => '以自制',
 '仲裁制' => '仲裁制',
 '件钟' => '件鐘',
@@ -3793,7 +3780,6 @@ $zh2Hant = array(
 '佛罗棱萨' => '佛羅稜薩',
 '佛钟' => '佛鐘',
 '作品里' => '作品裡',
-'作奸犯科' => '作姦犯科',
 '作准' => '作準',
 '你夸' => '你誇',
 '佣金' => '佣金',
@@ -3835,6 +3821,7 @@ $zh2Hant = array(
 '依托' => '依託',
 '侵并' => '侵併',
 '局促' => '侷促',
+'便于' => '便於',
 '系数' => '係數',
 '系为' => '係為',
 '保险柜' => '保險柜',
@@ -3844,6 +3831,7 @@ $zh2Hant = array(
 '修杰麟' => '修杰麟',
 '修胡刀' => '修鬍刀',
 '俯冲' => '俯衝',
+'个月里' => '個月裡',
 '个里' => '個裡',
 '个钟' => '個鐘',
 '个钟表' => '個鐘錶',
@@ -3854,7 +3842,6 @@ $zh2Hant = array(
 '候复' => '候覆',
 '倚闲' => '倚閑',
 '倛丑' => '倛醜',
-'借听于聋' => '借聽於聾',
 '借鉴' => '借鑑',
 '倦游' => '倦遊',
 '假里' => '假裡',
@@ -4066,8 +4053,8 @@ $zh2Hant = array(
 '分子钟' => '分子鐘',
 '分子云' => '分子雲',
 '分布于' => '分布於',
-'分散于' => '分散於',
 '分钟' => '分鐘',
+'分钟里' => '分鐘裡',
 '刑余' => '刑餘',
 '划一桨' => '划一槳',
 '划上' => '划上',
@@ -4216,6 +4203,7 @@ $zh2Hant = array(
 '千钧一发' => '千鈞一髮',
 '千只' => '千隻',
 '千余' => '千餘',
+'升高后' => '升高後',
 '半制品' => '半制品',
 '半只可' => '半只可',
 '半只够' => '半只夠',
@@ -4243,7 +4231,6 @@ $zh2Hant = array(
 '卵与石斗' => '卵與石鬥',
 '卷须' => '卷鬚',
 '厂部' => '厂部',
-'厝薪于火' => '厝薪於火',
 '原子钟' => '原子鐘',
 '原钟' => '原鐘',
 '历物之意' => '厤物之意',
@@ -4256,6 +4243,7 @@ $zh2Hant = array(
 '反复' => '反覆',
 '反覆' => '反覆',
 '取舍' => '取捨',
+'取决于' => '取決於',
 '受雇' => '受僱',
 '受托' => '受託',
 '丛林里' => '叢林裡',
@@ -4419,6 +4407,7 @@ $zh2Hant = array(
 '呼吁' => '呼籲',
 '命中注定' => '命中注定',
 '和奸' => '和姦',
+'和制汉' => '和製漢',
 '咎征' => '咎徵',
 '咕咕钟' => '咕咕鐘',
 '咪表' => '咪錶',
@@ -4517,6 +4506,7 @@ $zh2Hant = array(
 '回游' => '回遊',
 '因于' => '因於',
 '困倦起来' => '困倦起來',
+'困于' => '困於',
 '困兽之斗' => '困獸之鬥',
 '困兽犹斗' => '困獸猶鬥',
 '困斗' => '困鬥',
@@ -4568,6 +4558,7 @@ $zh2Hant = array(
 '埃及历史' => '埃及歷史',
 '埃及艳后' => '埃及豔后',
 '埃荣冲' => '埃榮衝',
+'城市里' => '城市裡',
 '城里' => '城裡',
 '埔子里' => '埔子里',
 '埔里社' => '埔裏社',
@@ -4586,9 +4577,12 @@ $zh2Hant = array(
 '墓志' => '墓誌',
 '增辟' => '增闢',
 '墨子里' => '墨子里',
+'墨斗' => '墨斗',
 '墨沈沈' => '墨沈沈',
 '墨沈' => '墨瀋',
 '垦辟' => '墾闢',
+'压制出' => '壓製出',
+'压制机' => '壓製機',
 '壮游' => '壯遊',
 '壮面' => '壯麵',
 '壹郁' => '壹鬱',
@@ -4765,7 +4759,6 @@ $zh2Hant = array(
 '字汇' => '字彙',
 '字码表' => '字碼表',
 '字里行间' => '字裡行間',
-'存十一于千百' => '存十一於千百',
 '存折' => '存摺',
 '存于' => '存於',
 '孛里海' => '孛里海',
@@ -4811,10 +4804,10 @@ $zh2Hant = array(
 '实干' => '實幹',
 '实累累' => '實纍纍',
 '写字台' => '寫字檯',
-'宽宽松松' => '寬寬鬆鬆',
 '宽于' => '寬於',
 '宽余' => '寬餘',
 '宽松' => '寬鬆',
+'宽松松' => '寬鬆鬆',
 '寮采' => '寮寀',
 '寶山庄' => '寶山庄',
 '宝历' => '寶曆',
@@ -4864,13 +4857,16 @@ $zh2Hant = array(
 '小型钟表面' => '小型鐘表面',
 '小型钟表' => '小型鐘錶',
 '小型钟面' => '小型鐘面',
+'小时里' => '小時裡',
 '小米面' => '小米麵',
 '小只' => '小隻',
 '少采' => '少採',
 '就范' => '就範',
 '就里' => '就裡',
 '尸位素餐' => '尸位素餐',
+'尸佼' => '尸佼',
 '尸利' => '尸利',
+'尸子' => '尸子',
 '尸居余气' => '尸居餘氣',
 '尸弃佛' => '尸棄佛',
 '尸祝' => '尸祝',
@@ -4900,7 +4896,7 @@ $zh2Hant = array(
 '山羊胡' => '山羊鬍',
 '山里有' => '山裡有',
 '山里的' => '山裡的',
-'山谷道' => '山谷道',
+'山谷' => '山谷',
 '山重水复' => '山重水複',
 '岫岩' => '岫巖',
 '岱岳' => '岱嶽',
@@ -4945,7 +4941,7 @@ $zh2Hant = array(
 '已占算' => '已占算',
 '巴尔干' => '巴爾幹',
 '巷里' => '巷裡',
-'市里' => '市裡',
+'市里的' => '市裡的',
 '布谷' => '布穀',
 '布谷鸟' => '布穀鳥',
 '布谷鸟钟' => '布穀鳥鐘',
@@ -4985,8 +4981,8 @@ $zh2Hant = array(
 '干了' => '幹了',
 '干事' => '幹事',
 '干些' => '幹些',
-'干人' => '幹人',
 '干什么' => '幹什麼',
+'干仗' => '幹仗',
 '干个' => '幹個',
 '干劲' => '幹勁',
 '干吏' => '幹吏',
@@ -5025,8 +5021,7 @@ $zh2Hant = array(
 '干起来' => '幹起來',
 '干路' => '幹路',
 '干办' => '幹辦',
-'干这一行' => '幹這一行',
-'干这种事' => '幹這種事',
+'干这' => '幹這',
 '干道' => '幹道',
 '干部' => '幹部',
 '干革命' => '幹革命',
@@ -5344,6 +5339,7 @@ $zh2Hant = array(
 '忠于' => '忠於',
 '快快当当' => '快快當當',
 '快冲' => '快衝',
+'怎么干' => '怎麼幹',
 '怒于' => '怒於',
 '怒气冲天' => '怒氣衝天',
 '怒火冲天' => '怒火衝天',
@@ -5441,6 +5437,7 @@ $zh2Hant = array(
 '截发' => '截髮',
 '战天斗地' => '戰天鬥地',
 '战栗' => '戰慄',
+'战于' => '戰於',
 '战斗' => '戰鬥',
 '戏里' => '戲裡',
 '戲院里' => '戲院里',
@@ -5712,6 +5709,7 @@ $zh2Hant = array(
 '采薇' => '採薇',
 '采薪' => '採薪',
 '采药' => '採藥',
+'采血' => '採血',
 '采行' => '採行',
 '采补' => '採補',
 '采访' => '採訪',
@@ -5734,11 +5732,11 @@ $zh2Hant = array(
 '控制' => '控制',
 '推情准理' => '推情準理',
 '推托之词' => '推托之詞',
-'推舟于陆' => '推舟於陸',
 '推托' => '推託',
 '提子干' => '提子乾',
 '提心吊胆' => '提心弔膽',
 '提摩太后书' => '提摩太後書',
+'提高后' => '提高後',
 '插于' => '插於',
 '换签' => '換籤',
 '换只' => '換隻',
@@ -5876,126 +5874,10 @@ $zh2Hant = array(
 '方志恒' => '方志恒',
 '方法里' => '方法裡',
 '方志' => '方誌',
-'于0' => '於0',
-'于1' => '於1',
-'于1天' => '於1天',
-'于2' => '於2',
-'于2天' => '於2天',
-'于3' => '於3',
-'于3天' => '於3天',
-'于4' => '於4',
-'于4天' => '於4天',
-'于5' => '於5',
-'于5天' => '於5天',
-'于6' => '於6',
-'于6天' => '於6天',
-'于7' => '於7',
-'于7天' => '於7天',
-'于8' => '於8',
-'于8天' => '於8天',
-'于9' => '於9',
-'于9天' => '於9天',
-'于一' => '於一',
-'于一天' => '於一天',
-'于一役' => '於一役',
-'于七' => '於七',
-'于七天' => '於七天',
-'于三' => '於三',
-'于三天' => '於三天',
-'于世' => '於世',
-'于之' => '於之',
-'于乎' => '於乎',
-'于九' => '於九',
-'于九天' => '於九天',
-'于事' => '於事',
-'于二' => '於二',
-'于二天' => '於二天',
-'于五' => '於五',
-'于五天' => '於五天',
-'于人' => '於人',
-'于今' => '於今',
-'于他' => '於他',
-'于伏' => '於伏',
-'于何' => '於何',
-'于你' => '於你',
-'于八' => '於八',
-'于八天' => '於八天',
-'于六' => '於六',
-'于六天' => '於六天',
-'于前' => '於前',
-'于劣' => '於劣',
-'于勤' => '於勤',
-'于十' => '於十',
-'于十天' => '於十天',
-'于半' => '於半',
-'于呼哀哉' => '於呼哀哉',
-'于四' => '於四',
-'于四天' => '於四天',
-'于国' => '於國',
-'于坏' => '於坏',
-'于垂' => '於垂',
-'于夫罗' => '於夫羅',
-'於夫罗' => '於夫羅',
-'於夫羅' => '於夫羅',
-'于她' => '於她',
-'于好' => '於好',
-'于始' => '於始',
-'於姓' => '於姓',
-'于它' => '於它',
-'于家' => '於家',
-'于密' => '於密',
-'于差' => '於差',
-'于己' => '於己',
-'于市' => '於市',
-'于幕' => '於幕',
-'于弱' => '於弱',
-'于强' => '於強',
 '于后' => '於後',
 '于征' => '於徵',
-'于心' => '於心',
-'于怀' => '於懷',
-'于我' => '於我',
-'于戏' => '於戲',
-'于敝' => '於敝',
-'于斯' => '於斯',
-'于是' => '於是',
-'于是乎' => '於是乎',
-'于时' => '於時',
-'于梨华' => '於梨華',
-'於梨華' => '於梨華',
-'于乐' => '於樂',
-'于此' => '於此',
-'於氏' => '於氏',
-'于民' => '於民',
-'于水' => '於水',
-'于法' => '於法',
 '于海上' => '於海上',
 '于海边' => '於海邊',
-'于潜县' => '於潛縣',
-'于火' => '於火',
-'于焉' => '於焉',
-'于墙' => '於牆',
-'于物' => '於物',
-'于毕' => '於畢',
-'于尽' => '於盡',
-'于盲' => '於盲',
-'于祂' => '於祂',
-'于穆' => '於穆',
-'于终' => '於終',
-'于美' => '於美',
-'于色' => '於色',
-'于菟' => '於菟',
-'于蓝' => '於藍',
-'于行' => '於行',
-'于衷' => '於衷',
-'于该' => '於該',
-'于农' => '於農',
-'于途' => '於途',
-'于过' => '於過',
-'于邑' => '於邑',
-'于丑' => '於醜',
-'于野' => '於野',
-'于陆' => '於陸',
 '于震中' => '於震中',
 '于震前' => '於震前',
 '于震后' => '於震後',
@@ -6053,7 +5935,7 @@ $zh2Hant = array(
 '历始' => '曆始',
 '历室' => '曆室',
 '历尾' => '曆尾',
-'历数' => 'æ\9b\86æ\95¸',
+'历数书' => 'æ\9b\86æ\95¸æ\9b¸',
 '历日' => '曆日',
 '历书' => '曆書',
 '历本' => '曆本',
@@ -6070,7 +5952,7 @@ $zh2Hant = array(
 '书签' => '書籤',
 '书面' => '書面',
 '曹子里' => '曹子里',
-'曼谷人' => '曼谷人',
+'曼谷' => '曼谷',
 '曾朴' => '曾樸',
 '最多' => '最多',
 '最多只' => '最多只',
@@ -6082,9 +5964,8 @@ $zh2Hant = array(
 '月历' => '月曆',
 '月历史' => '月歷史',
 '月球历表' => '月球曆表',
-'月离于毕' => '月離於畢',
+'月里来' => '月裡來',
 '月面' => '月面',
-'月丽于箕' => '月麗於箕',
 '有事之无范' => '有事之無範',
 '有仆' => '有僕',
 '有只不' => '有只不',
@@ -6115,6 +5996,7 @@ $zh2Hant = array(
 '望后石' => '望后石',
 '朝乾夕惕' => '朝乾夕惕',
 '朝钟' => '朝鐘',
+'朝鲜于' => '朝鮮於',
 '朦胧' => '朦朧',
 '蒙胧' => '朦朧',
 '木偶戏扎' => '木偶戲紮',
@@ -6276,8 +6158,8 @@ $zh2Hant = array(
 '朴陋' => '樸陋',
 '朴马' => '樸馬',
 '朴鲁' => '樸魯',
+'树干' => '樹幹',
 '树林里' => '樹林裡',
-'树干' => '樹榦',
 '树梁' => '樹樑',
 '桥梁' => '橋樑',
 '机械系' => '機械系',
@@ -6359,7 +6241,6 @@ $zh2Hant = array(
 '永志不忘' => '永誌不忘',
 '求知欲' => '求知慾',
 '求签' => '求籤',
-'求道于盲' => '求道於盲',
 '池里' => '池裡',
 '污蔑' => '污衊',
 '汤卤' => '汤滷',
@@ -6416,6 +6297,8 @@ $zh2Hant = array(
 '洗发' => '洗髮',
 '洛钟东应' => '洛鐘東應',
 '洞里' => '洞裡',
+'洞里萨' => '洞里薩',
+'洞里薩' => '洞里薩',
 '泄欲' => '洩慾',
 '洪范' => '洪範',
 '洪谷子' => '洪谷子',
@@ -6487,7 +6370,6 @@ $zh2Hant = array(
 '渠冲' => '渠衝',
 '测不准' => '測不準',
 '港制' => '港製',
-'游牧民族' => '游牧民族',
 '游离' => '游離',
 '浑朴' => '渾樸',
 '浑个' => '渾箇',
@@ -6542,6 +6424,7 @@ $zh2Hant = array(
 '准头' => '準頭',
 '准点' => '準點',
 '沟大曲' => '溝大麯',
+'沟谷' => '溝谷',
 '溟蒙' => '溟濛',
 '溢于' => '溢於',
 '温洛克期' => '溫洛克期',
@@ -6631,6 +6514,7 @@ $zh2Hant = array(
 '沈海高速' => '瀋海高速',
 '沈阳' => '瀋陽',
 '泸州大曲' => '瀘州大麯',
+'沥干' => '瀝乾',
 '潇洒' => '瀟洒',
 '弥山遍野' => '瀰山遍野',
 '弥漫' => '瀰漫',
@@ -6682,8 +6566,6 @@ $zh2Hant = array(
 '燎发' => '燎髮',
 '烧干' => '燒乾',
 '燕几' => '燕几',
-'燕巢于幕' => '燕巢於幕',
-'燕燕于飞' => '燕燕于飛',
 '燕游' => '燕遊',
 '烫一个发' => '燙一個髮',
 '烫一次发' => '燙一次髮',
@@ -6783,6 +6665,7 @@ $zh2Hant = array(
 '生发' => '生髮',
 '产卵洄游' => '產卵洄游',
 '苏醒' => '甦醒',
+'用于' => '用於',
 '用法里' => '用法裡',
 '甩发' => '甩髮',
 '田子里' => '田子里',
@@ -6826,13 +6709,11 @@ $zh2Hant = array(
 '癸丑' => '癸丑',
 '发干' => '發乾',
 '发呆' => '發獃',
-'发蒙' => '發矇',
 '发签' => '發籤',
 '发松' => '發鬆',
 '发面' => '發麵',
-'白干' => '白乾',
+'白干儿' => '白乾兒',
 '白子里' => '白子里',
-'白干儿' => '白干兒',
 '白术' => '白朮',
 '白朴' => '白樸',
 '白净面皮' => '白淨面皮',
@@ -6926,6 +6807,7 @@ $zh2Hant = array(
 '眼眶里' => '眼眶裡',
 '眼睛里' => '眼睛裡',
 '眼里' => '眼裡',
+'着眼于' => '着眼於',
 '困乏' => '睏乏',
 '困了' => '睏了',
 '困倦' => '睏倦',
@@ -7066,7 +6948,6 @@ $zh2Hant = array(
 '谷草' => '穀草',
 '谷贵饿农' => '穀貴餓農',
 '谷贱伤农' => '穀賤傷農',
-'谷道' => '穀道',
 '谷雨' => '穀雨',
 '谷类' => '穀類',
 '谷食' => '穀食',
@@ -7381,6 +7262,7 @@ $zh2Hant = array(
 '老懞' => '老懞',
 '老于' => '老於',
 '老爷钟' => '老爺鐘',
+'老白干' => '老白乾',
 '老姜' => '老薑',
 '老板' => '老闆',
 '老面皮' => '老面皮',
@@ -7419,6 +7301,7 @@ $zh2Hant = array(
 '胜肽' => '胜肽',
 '胜键' => '胜鍵',
 '胡云' => '胡云',
+'胡子婴' => '胡子嬰',
 '胡子昂' => '胡子昂',
 '胡杰' => '胡杰',
 '胡朴安' => '胡樸安',
@@ -7444,6 +7327,7 @@ $zh2Hant = array(
 '腊味' => '腊味',
 '腊毒' => '腊毒',
 '腊笔' => '腊筆',
+'腌臜' => '腌臢',
 '肾脏' => '腎臟',
 '腐干' => '腐乾',
 '腐余' => '腐餘',
@@ -7534,6 +7418,7 @@ $zh2Hant = array(
 '苑里' => '苑裡',
 '若干' => '若干',
 '苦干' => '苦幹',
+'苦于' => '苦於',
 '苦里' => '苦裡',
 '苦斗' => '苦鬥',
 '苎麻' => '苧麻',
@@ -7587,6 +7472,7 @@ $zh2Hant = array(
 '万象' => '萬象',
 '万只' => '萬隻',
 '万余' => '萬餘',
+'落于' => '落於',
 '落腮胡' => '落腮鬍',
 '落发' => '落髮',
 '叶叶琴' => '葉叶琴',
@@ -7594,6 +7480,7 @@ $zh2Hant = array(
 '葡萄干' => '葡萄乾',
 '董氏封发' => '董氏封髮',
 '葫芦里卖甚么药' => '葫蘆裡賣甚麼藥',
+'葬于' => '葬於',
 '蒙雾露' => '蒙霧露',
 '蒜发' => '蒜髮',
 '蒲席' => '蒲蓆',
@@ -7607,9 +7494,9 @@ $zh2Hant = array(
 '蓄须' => '蓄鬚',
 '席子' => '蓆子',
 '蓊郁' => '蓊鬱',
-'蓬蓬松松' => '蓬蓬鬆鬆',
 '蓬发' => '蓬髮',
 '蓬松' => '蓬鬆',
+'蓬松松' => '蓬鬆鬆',
 '参绥' => '蔘綏',
 '葱郁' => '蔥鬱',
 '荞麦面' => '蕎麥麵',
@@ -7687,6 +7574,7 @@ $zh2Hant = array(
 '萝卜干' => '蘿蔔乾',
 '虎须' => '虎鬚',
 '虎斗' => '虎鬥',
+'处于' => '處於',
 '虚夸' => '虛誇',
 '号志' => '號誌',
 '虫部' => '虫部',
@@ -7715,7 +7603,6 @@ $zh2Hant = array(
 '行凶' => '行兇',
 '行家里手' => '行家裡手',
 '行于' => '行於',
-'行百里者半于九十' => '行百里者半於九十',
 '卫后庄公' => '衛後莊公',
 '卫星钟' => '衛星鐘',
 '冲上' => '衝上',
@@ -7978,7 +7865,6 @@ $zh2Hant = array(
 '词汇' => '詞彙',
 '词余' => '詞餘',
 '询于' => '詢於',
-'询于刍荛' => '詢於芻蕘',
 '试制' => '試製',
 '詩云' => '詩云',
 '诗云' => '詩云',
@@ -8069,7 +7955,6 @@ $zh2Hant = array(
 '謷丑' => '謷醜',
 '謹愿' => '謹愿',
 '谨愿' => '謹愿',
-'谨于心' => '謹於心',
 '哗噪' => '譁噪',
 '哗嚣' => '譁囂',
 '哗然' => '譁然',
@@ -8183,8 +8068,8 @@ $zh2Hant = array(
 '挽输' => '輓輸',
 '挽辞' => '輓辭',
 '轻于' => '輕於',
-'轻轻松松' => '輕輕鬆鬆',
 '轻松' => '輕鬆',
+'轻松松' => '輕鬆鬆',
 '轮奸' => '輪姦',
 '轮回' => '輪迴',
 '转向往' => '轉向往',
@@ -8238,7 +8123,6 @@ $zh2Hant = array(
 '迷蒙' => '迷濛',
 '追凶' => '追兇',
 '退伙' => '退夥',
-'退藏于密' => '退藏於密',
 '逆钟' => '逆鐘',
 '逆钟向' => '逆鐘向',
 '逆风后' => '逆風後',
@@ -8275,6 +8159,7 @@ $zh2Hant = array(
 '这里' => '這裡',
 '这钟' => '這鐘',
 '这只' => '這隻',
+'这么干' => '這麼幹',
 '这出' => '這齣',
 '通奸' => '通姦',
 '通心面' => '通心麵',
@@ -8351,6 +8236,7 @@ $zh2Hant = array(
 '递回' => '遞迴',
 '远游' => '遠遊',
 '遨游' => '遨遊',
+'适于' => '適於',
 '遮丑' => '遮醜',
 '迁于' => '遷於',
 '选手表明' => '選手表明',
@@ -8393,6 +8279,7 @@ $zh2Hant = array(
 '部子里' => '部子里',
 '部落发' => '部落發',
 '郭后' => '郭后',
+'都市里' => '都市裡',
 '都于' => '都於',
 '乡愿' => '鄉愿',
 '鄉愿' => '鄉愿',
@@ -8409,6 +8296,7 @@ $zh2Hant = array(
 '酒麹' => '酒麴',
 '酥松' => '酥鬆',
 '酸姜' => '酸薑',
+'腌制' => '醃製',
 '醇朴' => '醇樸',
 '醉于' => '醉於',
 '醋坛' => '醋罈',
@@ -8882,11 +8770,13 @@ $zh2Hant = array(
 '风起云涌' => '風起雲湧',
 '風采' => '風采',
 '风采' => '風采',
+'风刮' => '風颳',
 '台风' => '颱風',
 '台风后' => '颱風後',
 '刮了' => '颳了',
 '刮倒' => '颳倒',
 '刮去' => '颳去',
+'刮大风' => '颳大風',
 '刮得' => '颳得',
 '刮走' => '颳走',
 '刮起' => '颳起',
@@ -9061,6 +8951,7 @@ $zh2Hant = array(
 '体范' => '體範',
 '体系' => '體系',
 '高几' => '高几',
+'高后' => '高后',
 '高干扰' => '高干擾',
 '高干预' => '高干預',
 '高干' => '高幹',
@@ -9087,7 +8978,6 @@ $zh2Hant = array(
 '发式' => '髮式',
 '发引千钧' => '髮引千鈞',
 '发披肩' => '髮披肩',
-'发指' => '髮指',
 '发卷' => '髮捲',
 '发根' => '髮根',
 '发油' => '髮油',
@@ -9152,7 +9042,7 @@ $zh2Hant = array(
 '松通' => '鬆通',
 '松开' => '鬆開',
 '松饼' => '鬆餅',
-'松松' => '鬆鬆',
+'松松地' => '鬆鬆地',
 '鬈发' => '鬈髮',
 '胡子' => '鬍子',
 '胡梢' => '鬍梢',
@@ -9198,6 +9088,7 @@ $zh2Hant = array(
 '斗志' => '鬥志',
 '斗闷' => '鬥悶',
 '斗成' => '鬥成',
+'斗战' => '鬥戰',
 '斗打' => '鬥打',
 '斗批改' => '鬥批改',
 '斗技' => '鬥技',
@@ -9303,12 +9194,11 @@ $zh2Hant = array(
 '魔表' => '魔錶',
 '鱼干' => '魚乾',
 '鱼松' => '魚鬆',
-'鮮于樞' => '鮮于樞',
-'鲜于枢' => '鮮于樞',
+'鮮于' => '鮮于',
+'鲜于' => '鮮于',
 '鲸须' => '鯨鬚',
 '鳥栖' => '鳥栖',
 '鸟栖市' => '鳥栖市',
-'鳳凰于飛' => '鳳凰于飛',
 '凤梨干' => '鳳梨乾',
 '鸣钟' => '鳴鐘',
 '鸿范' => '鴻範',
@@ -9343,7 +9233,7 @@ $zh2Hant = array(
 '咸菜' => '鹹菜',
 '咸菜干' => '鹹菜乾',
 '咸蛋' => '鹹蛋',
-'咸猪肉' => '鹹豬肉',
+'咸猪' => '鹹豬',
 '咸类' => '鹹類',
 '咸食' => '鹹食',
 '咸鱼' => '鹹魚',
@@ -9402,6 +9292,7 @@ $zh2Hant = array(
 '黃杰' => '黃杰',
 '黄杰' => '黃杰',
 '黄历史' => '黃歷史',
+'黄白术' => '黃白術',
 '黃詩杰' => '黃詩杰',
 '黄诗杰' => '黃詩杰',
 '黄金表' => '黃金表',
@@ -9417,6 +9308,7 @@ $zh2Hant = array(
 '黑干将' => '黑幹將',
 '黑长发' => '黑長髮',
 '黑发' => '黑髮',
+'点个赞' => '點個讚',
 '点札' => '點劄',
 '点半钟' => '點半鐘',
 '点多钟' => '點多鐘',
@@ -13948,8 +13840,6 @@ $zh2TW = array(
 '掌上壓' => '伏地挺身',
 '伯明翰' => '伯明罕',
 '服务器' => '伺服器',
-'字節' => '位元組',
-'字节' => '位元組',
 '佛罗伦萨' => '佛羅倫斯',
 '操作系统' => '作業系統',
 '系数' => '係數',
@@ -14164,6 +14054,7 @@ $zh2TW = array(
 '戒烟' => '戒菸',
 '戒煙' => '戒菸',
 '戴克里先' => '戴克里先',
+'打印度' => '打印度',
 '抽烟' => '抽菸',
 '抽煙' => '抽菸',
 '拉普兰' => '拉布蘭',
@@ -14180,9 +14071,12 @@ $zh2TW = array(
 '搜索引擎' => '搜尋引擎',
 '摩根士丹利' => '摩根史坦利',
 '台球' => '撞球',
-'攻打印' => '攻打印',
+'攻打' => '攻打',
 '数字技术' => '數位技術',
 '數碼技術' => '數位技術',
+'数字照相机' => '數位照相機',
+'数码照相机' => '數位照相機',
+'數碼照相機' => '數位照相機',
 '数码相机' => '數位相機',
 '數碼相機' => '數位相機',
 '数字信号' => '數位訊號',
@@ -14228,6 +14122,7 @@ $zh2TW = array(
 '撒切尔' => '柴契爾',
 '格林納達' => '格瑞那達',
 '格林纳达' => '格瑞那達',
+'台式电脑' => '桌上型電腦',
 '乒乓' => '桌球',
 '乒乓球' => '桌球',
 '杆弟' => '桿弟',
@@ -14363,6 +14258,8 @@ $zh2TW = array(
 '弗吉尼亚' => '維吉尼亞',
 '佛得角' => '維德角',
 '维特根斯坦' => '維根斯坦',
+'網絡遊戲' => '網路遊戲',
+'网络游戏' => '網路遊戲',
 '互联网' => '網際網路',
 '互联网络' => '網際網路',
 '互聯網' => '網際網路',
@@ -14465,6 +14362,7 @@ $zh2TW = array(
 '也門' => '葉門',
 '也门' => '葉門',
 '着' => '著',
+'着眼于' => '著眼於',
 '科摩罗' => '葛摩',
 '科摩羅' => '葛摩',
 '格林美獎' => '葛萊美獎',
@@ -14514,6 +14412,7 @@ $zh2TW = array(
 '瑙魯' => '諾魯',
 '瑙鲁' => '諾魯',
 '科特迪瓦' => '象牙海岸',
+'碧咸' => '貝克漢',
 '貝爾格萊德' => '貝爾格勒',
 '贝尔格莱德' => '貝爾格勒',
 '伯利兹' => '貝里斯',
@@ -14531,7 +14430,6 @@ $zh2TW = array(
 '莱索托' => '賴索托',
 '萊索托' => '賴索托',
 '塞浦路斯' => '賽普勒斯',
-'碧咸' => '贝克漢',
 '赫丘勒·波洛' => '赫丘勒·白羅',
 '赫鲁晓夫' => '赫魯雪夫',
 '切尔诺贝利' => '車諾比',
@@ -14553,7 +14451,6 @@ $zh2TW = array(
 '链接' => '連結',
 '連結他' => '連結他',
 '进制' => '進位',
-'算子' => '運算元',
 '达·芬奇' => '達·文西',
 '达芬奇' => '達文西',
 '溫納圖萬' => '那杜',
@@ -14680,6 +14577,7 @@ $zh2HK = array(
 '乘著作' => '乘著作',
 '乘著名' => '乘著名',
 '乘著書' => '乘著書',
+'乘著称' => '乘著稱',
 '乘著稱' => '乘著稱',
 '乘著者' => '乘著者',
 '乘著述' => '乘著述',
@@ -14697,6 +14595,7 @@ $zh2HK = array(
 '亮著作' => '亮著作',
 '亮著名' => '亮著名',
 '亮著書' => '亮著書',
+'亮著称' => '亮著稱',
 '亮著稱' => '亮著稱',
 '亮著者' => '亮著者',
 '亮著述' => '亮著述',
@@ -14772,6 +14671,7 @@ $zh2HK = array(
 '低著作' => '低著作',
 '低著名' => '低著名',
 '低著書' => '低著書',
+'低著称' => '低著稱',
 '低著稱' => '低著稱',
 '低著者' => '低著者',
 '低著述' => '低著述',
@@ -14991,10 +14891,12 @@ $zh2HK = array(
 '信著作' => '信著作',
 '信著名' => '信著名',
 '信著書' => '信著書',
+'信著称' => '信著稱',
 '信著稱' => '信著稱',
 '信著者' => '信著者',
 '信著述' => '信著述',
 '信著錄' => '信著錄',
+'个月里' => '個月裏',
 '个里' => '個裏',
 '倒楣' => '倒霉',
 '候著' => '候着',
@@ -15061,6 +14963,7 @@ $zh2HK = array(
 '光著作' => '光著作',
 '光著名' => '光著名',
 '光著書' => '光著書',
+'光著称' => '光著稱',
 '光著稱' => '光著稱',
 '光著者' => '光著者',
 '光著述' => '光著述',
@@ -15068,14 +14971,6 @@ $zh2HK = array(
 '柯林頓' => '克林頓',
 '克羅埃西亞' => '克羅地亞',
 '公布' => '公佈',
-'冀著' => '冀着',
-'冀著作' => '冀著作',
-'冀著名' => '冀著名',
-'冀著書' => '冀著書',
-'冀著稱' => '冀著稱',
-'冀著者' => '冀著者',
-'冀著述' => '冀著述',
-'冀著錄' => '冀著錄',
 '冒著' => '冒着',
 '冒著作' => '冒著作',
 '冒著名' => '冒著名',
@@ -15088,9 +14983,11 @@ $zh2HK = array(
 '恺撒' => '凱撒',
 '函数里' => '函數裏',
 '分布' => '分佈',
+'分布于' => '分佈於',
 '分佈著' => '分佈着',
 '分布著' => '分佈着',
 '分占' => '分佔',
+'分钟里' => '分鐘裏',
 '錢尼' => '切尼',
 '切尔诺贝利' => '切爾諾貝爾',
 '列支敦斯登' => '列支敦士登',
@@ -15110,6 +15007,7 @@ $zh2HK = array(
 '刻著作' => '刻著作',
 '刻著名' => '刻著名',
 '刻著書' => '刻著書',
+'刻著称' => '刻著稱',
 '刻著稱' => '刻著稱',
 '刻著者' => '刻著者',
 '刻著述' => '刻著述',
@@ -15127,18 +15025,11 @@ $zh2HK = array(
 '努力著作' => '努力著作',
 '努力著名' => '努力著名',
 '努力著書' => '努力著書',
+'努力著称' => '努力著稱',
 '努力著稱' => '努力著稱',
 '努力著者' => '努力著者',
 '努力著述' => '努力著述',
 '努力著錄' => '努力著錄',
-'努著' => '努着',
-'努著作' => '努著作',
-'努著名' => '努著名',
-'努著書' => '努著書',
-'努著稱' => '努著稱',
-'努著者' => '努著者',
-'努著述' => '努著述',
-'努著錄' => '努著錄',
 '布蘭登堡' => '勃蘭登堡',
 '動著' => '動着',
 '動著作' => '動著作',
@@ -15180,14 +15071,6 @@ $zh2HK = array(
 '厄利垂亞' => '厄立特里亞',
 '源代码' => '原始碼',
 '去山里' => '去山裏',
-'去著' => '去着',
-'去著作' => '去著作',
-'去著名' => '去著名',
-'去著書' => '去著書',
-'去著稱' => '去著稱',
-'去著者' => '去著者',
-'去著述' => '去著述',
-'去著錄' => '去著錄',
 '参数里' => '參數裏',
 '受著' => '受着',
 '受著作' => '受著作',
@@ -15254,6 +15137,7 @@ $zh2HK = array(
 '味著作' => '味著作',
 '味著名' => '味著名',
 '味著書' => '味著書',
+'味著称' => '味著稱',
 '味著稱' => '味著稱',
 '味著者' => '味著者',
 '味著述' => '味著述',
@@ -15346,14 +15230,6 @@ $zh2HK = array(
 '图里,' => '圖裏,',
 '土里' => '土裏',
 '在山里' => '在山裏',
-'在著' => '在着',
-'在著作' => '在著作',
-'在著名' => '在著名',
-'在著書' => '在著書',
-'在著稱' => '在著稱',
-'在著者' => '在著者',
-'在著述' => '在著述',
-'在著錄' => '在著錄',
 '蓋亞那' => '圭亞那',
 '地占' => '地佔',
 '地图里' => '地圖裏',
@@ -15372,9 +15248,11 @@ $zh2HK = array(
 '衣索匹亞' => '埃塞俄比亚',
 '衣索比亞' => '埃塞俄比亞',
 '葉里溫' => '埃里溫',
+'城市里' => '城市裏',
 '城里' => '城裏',
 '域里' => '域裏',
 '吉里巴斯' => '基里巴斯',
+'堅貞著' => '堅貞着',
 '场里' => '場裏',
 '塗著' => '塗着',
 '塞普勒斯' => '塞浦路斯',
@@ -15424,18 +15302,12 @@ $zh2HK = array(
 '威爾士' => '威爾斯',
 '子里' => '子裏',
 '字里行间' => '字裏行間',
+'存在著' => '存在着',
 '存著' => '存着',
+'存著作' => '存著作',
 '存著名' => '存著名',
 '孟德爾頌' => '孟德爾遜',
 '门德尔松' => '孟德爾遜',
-'孤著' => '孤着',
-'孤著作' => '孤著作',
-'孤著名' => '孤著名',
-'孤著書' => '孤著書',
-'孤著稱' => '孤著稱',
-'孤著者' => '孤著者',
-'孤著述' => '孤著述',
-'孤著錄' => '孤著錄',
 '學著' => '學着',
 '學著作' => '學著作',
 '學著名' => '學著名',
@@ -15449,6 +15321,7 @@ $zh2HK = array(
 '守著作' => '守著作',
 '守著名' => '守著名',
 '守著書' => '守著書',
+'守著称' => '守著稱',
 '守著稱' => '守著稱',
 '守著者' => '守著者',
 '守著述' => '守著述',
@@ -15459,6 +15332,7 @@ $zh2HK = array(
 '定著作' => '定著作',
 '定著名' => '定著名',
 '定著書' => '定著書',
+'定著称' => '定著稱',
 '定著稱' => '定著稱',
 '定著者' => '定著者',
 '定著述' => '定著述',
@@ -15502,6 +15376,7 @@ $zh2HK = array(
 '對著者' => '對著者',
 '對著述' => '對著述',
 '對著錄' => '對著錄',
+'小时里' => '小時裏',
 '少占' => '少佔',
 '就里' => '就裏',
 '尼克松' => '尼克遜',
@@ -15530,11 +15405,12 @@ $zh2HK = array(
 '巴士拉' => '巴斯拉',
 '巷里' => '巷裏',
 '市占' => '市佔',
-'市里' => '市裏',
+'市里的' => '市裏的',
 '布吉納法索' => '布基納法索',
 '布什' => '布殊',
 '布里斯托尔' => '布里斯托',
 '蒲隆地' => '布隆迪',
+'希冀著' => '希冀着',
 '席哈克' => '希拉克',
 '希拉蕊' => '希拉莉',
 '希特勒' => '希特拉',
@@ -15572,14 +15448,6 @@ $zh2HK = array(
 '店里' => '店裏',
 '坎城' => '康城',
 '戛纳' => '康城',
-'康著' => '康着',
-'康著作' => '康著作',
-'康著名' => '康著名',
-'康著書' => '康著書',
-'康著稱' => '康著稱',
-'康著者' => '康著者',
-'康著述' => '康著述',
-'康著錄' => '康著錄',
 '庙里' => '廟裏',
 '強占' => '強佔',
 '强占' => '強佔',
@@ -15628,6 +15496,7 @@ $zh2HK = array(
 '心著作' => '心著作',
 '心著名' => '心著名',
 '心著書' => '心著書',
+'心著称' => '心著稱',
 '心著稱' => '心著稱',
 '心著者' => '心著者',
 '心著述' => '心著述',
@@ -15642,13 +15511,6 @@ $zh2HK = array(
 '忍著者' => '忍著者',
 '忍著述' => '忍著述',
 '忍著錄' => '忍著錄',
-'志著作' => '志著作',
-'志著名' => '志著名',
-'志著書' => '志著書',
-'志著稱' => '志著稱',
-'志著者' => '志著者',
-'志著述' => '志著述',
-'志著錄' => '志著錄',
 '忙著' => '忙着',
 '忙著作' => '忙著作',
 '忙著名' => '忙著名',
@@ -15658,6 +15520,7 @@ $zh2HK = array(
 '忙著述' => '忙著述',
 '忙著錄' => '忙著錄',
 '忙里' => '忙裏',
+'忠貞著' => '忠貞着',
 '急著' => '急着',
 '急著作' => '急著作',
 '急著名' => '急著名',
@@ -15666,14 +15529,6 @@ $zh2HK = array(
 '急著者' => '急著者',
 '急著述' => '急著述',
 '急著錄' => '急著錄',
-'性著' => '性着',
-'性著作' => '性著作',
-'性著名' => '性著名',
-'性著書' => '性著書',
-'性著稱' => '性著稱',
-'性著者' => '性著者',
-'性著述' => '性著述',
-'性著錄' => '性著錄',
 '怪里怪气' => '怪裏怪氣',
 '悠著' => '悠着',
 '悠著作' => '悠著作',
@@ -15689,6 +15544,7 @@ $zh2HK = array(
 '想著作' => '想著作',
 '想著名' => '想著名',
 '想著書' => '想著書',
+'想著称' => '想著稱',
 '想著稱' => '想著稱',
 '想著者' => '想著者',
 '想著述' => '想著述',
@@ -15790,6 +15646,7 @@ $zh2HK = array(
 '扛著錄' => '扛著錄',
 '找不著' => '找不着',
 '找得著' => '找得着',
+'承宣布政' => '承宣布政',
 '抓著' => '抓着',
 '抓著作' => '抓著作',
 '抓著名' => '抓著名',
@@ -15992,6 +15849,8 @@ $zh2HK = array(
 '散布' => '散佈',
 '散佈著' => '散佈着',
 '散布著' => '散佈着',
+'数字照相机' => '数碼照相機',
+'數位照相機' => '数碼照相機',
 '數著' => '數着',
 '数字技术' => '數碼技術',
 '數位技術' => '數碼技術',
@@ -16070,6 +15929,7 @@ $zh2HK = array(
 '会占卜' => '會占卜',
 '會占卜' => '會占卜',
 '会里' => '會裏',
+'月裡来' => '月裏來',
 '有著' => '有着',
 '有著作' => '有著作',
 '有著名' => '有著名',
@@ -16137,6 +15997,7 @@ $zh2HK = array(
 '葛萊美獎' => '格林美獎',
 '格鲁吉亚' => '格魯吉亞',
 '框里' => '框裏',
+'台式电脑' => '桌上型電腦',
 '台球' => '桌球',
 '撞球' => '桌球',
 '梅鐸' => '梅鐸',
@@ -16270,14 +16131,6 @@ $zh2HK = array(
 '海洛因' => '海洛英',
 '海湾布雷' => '海灣佈雷',
 '海灣布雷' => '海灣佈雷',
-'涵著' => '涵着',
-'涵著作' => '涵著作',
-'涵著名' => '涵著名',
-'涵著書' => '涵著書',
-'涵著稱' => '涵著稱',
-'涵著者' => '涵著者',
-'涵著述' => '涵著述',
-'涵著錄' => '涵著錄',
 '涼著' => '涼着',
 '涼著作' => '涼著作',
 '涼著名' => '涼著名',
@@ -16404,19 +16257,12 @@ $zh2HK = array(
 '猜著者' => '猜著者',
 '猜著述' => '猜著述',
 '猜著錄' => '猜著錄',
+'猶豫著' => '猶豫着',
 '狱里' => '獄裏',
 '独占' => '獨佔',
 '獨占' => '獨佔',
-'獨著' => '獨着',
 '獨立國家國協' => '獨立國家聯合體',
 '獨立國協' => '獨聯體',
-'獨著作' => '獨著作',
-'獨著名' => '獨著名',
-'獨著書' => '獨著書',
-'獨著稱' => '獨著稱',
-'獨著者' => '獨著者',
-'獨著述' => '獨著述',
-'獨著錄' => '獨著錄',
 '獲著' => '獲着',
 '獲著作' => '獲著作',
 '獲著名' => '獲著名',
@@ -16539,14 +16385,6 @@ $zh2HK = array(
 '盯著者' => '盯著者',
 '盯著述' => '盯著述',
 '盯著錄' => '盯著錄',
-'盾著' => '盾着',
-'盾著作' => '盾著作',
-'盾著名' => '盾著名',
-'盾著書' => '盾著書',
-'盾著稱' => '盾著稱',
-'盾著者' => '盾著者',
-'盾著述' => '盾著述',
-'盾著錄' => '盾著錄',
 '看不著' => '看不着',
 '看得著' => '看得着',
 '看法里' => '看法裏',
@@ -16624,6 +16462,7 @@ $zh2HK = array(
 '瞪著者' => '瞪著者',
 '瞪著述' => '瞪著述',
 '瞪著錄' => '瞪著錄',
+'矛盾著' => '矛盾着',
 '智慧財產權' => '知識產權',
 '智財權' => '知識產權',
 '短信' => '短訊',
@@ -16634,8 +16473,8 @@ $zh2HK = array(
 '硬件' => '硬件',
 '硬體' => '硬件',
 '碗里' => '碗裏',
+'貝克漢' => '碧咸',
 '贝克汉姆' => '碧咸',
-'贝克漢' => '碧咸',
 '社里' => '社裏',
 '福馬林' => '福爾馬林',
 '福著' => '福着',
@@ -16679,6 +16518,15 @@ $zh2HK = array(
 '穿著述' => '穿著述',
 '穿著錄' => '穿著錄',
 '窝里' => '窩裏',
+'立著' => '立着',
+'立著《' => '立著《',
+'立著作' => '立著作',
+'立著名' => '立著名',
+'立著有' => '立著有',
+'立著称' => '立著稱',
+'立著稱' => '立著稱',
+'立著者' => '立著者',
+'立著(' => '立著(',
 '站著' => '站着',
 '站著作' => '站著作',
 '站著名' => '站著名',
@@ -16812,6 +16660,7 @@ $zh2HK = array(
 '美著作' => '美著作',
 '美著名' => '美著名',
 '美著書' => '美著書',
+'美著称' => '美著稱',
 '美著稱' => '美著稱',
 '美著者' => '美著者',
 '美著述' => '美著述',
@@ -16967,14 +16816,7 @@ $zh2HK = array(
 '藏著者' => '藏著者',
 '藏著述' => '藏著述',
 '藏著錄' => '藏著錄',
-'藝著' => '藝着',
-'藝著作' => '藝著作',
-'藝著名' => '藝著名',
-'藝著書' => '藝著書',
-'藝著稱' => '藝著稱',
-'藝著者' => '藝著者',
-'藝著述' => '藝著述',
-'藝著錄' => '藝著錄',
+'蘊涵著' => '蘊涵着',
 '蘸著' => '蘸着',
 '蘸著作' => '蘸著作',
 '蘸著名' => '蘸著名',
@@ -17122,24 +16964,8 @@ $zh2HK = array(
 '豎著錄' => '豎著錄',
 '象徵著名' => '象徵著名',
 '象徵著' => '象著着',
-'豫著' => '豫着',
-'豫著作' => '豫著作',
-'豫著名' => '豫著名',
-'豫著書' => '豫著書',
-'豫著稱' => '豫著稱',
-'豫著者' => '豫著者',
-'豫著述' => '豫著述',
-'豫著錄' => '豫著錄',
 '貝爾格勒' => '貝爾格萊德',
 '布莱尔' => '貝理雅',
-'貞著' => '貞着',
-'貞著作' => '貞著作',
-'貞著名' => '貞著名',
-'貞著書' => '貞著書',
-'貞著稱' => '貞著稱',
-'貞著者' => '貞著者',
-'貞著述' => '貞著述',
-'貞著錄' => '貞著錄',
 '負著' => '負着',
 '貢寮' => '貢寮',
 '買凶' => '買兇',
@@ -17339,11 +17165,14 @@ $zh2HK = array(
 '遇著作' => '遇著作',
 '遇著名' => '遇著名',
 '遇著書' => '遇著書',
+'遇著称' => '遇著稱',
 '遇著稱' => '遇著稱',
 '遇著者' => '遇著者',
 '遇著述' => '遇著述',
 '遇著錄' => '遇著錄',
 '遍布' => '遍佈',
+'遍佈著' => '遍佈着',
+'遍布著' => '遍佈着',
 '過著' => '過着',
 '达·芬奇' => '達·文西',
 '达芬奇' => '達文西',
@@ -17355,18 +17184,11 @@ $zh2HK = array(
 '達著者' => '達著者',
 '達著述' => '達著述',
 '達著錄' => '達著錄',
-'遠著' => '遠着',
-'遠著作' => '遠著作',
-'遠著名' => '遠著名',
-'遠著書' => '遠著書',
-'遠著稱' => '遠著稱',
-'遠著者' => '遠著者',
-'遠著述' => '遠著述',
-'遠著錄' => '遠著錄',
 '还占' => '還佔',
 '還占' => '還佔',
 '邋里邋遢' => '邋裏邋遢',
 '那里' => '那裏',
+'都市里' => '都市裏',
 '配合著' => '配合着',
 '配合著名' => '配合著名',
 '配图里' => '配圖裏',
@@ -17515,6 +17337,7 @@ $zh2HK = array(
 '雅著作' => '雅著作',
 '雅著名' => '雅著名',
 '雅著書' => '雅著書',
+'雅著称' => '雅著稱',
 '雅著稱' => '雅著稱',
 '雅著者' => '雅著者',
 '雅著述' => '雅著述',
@@ -17644,18 +17467,11 @@ $zh2HK = array(
 '高著作' => '高著作',
 '高著名' => '高著名',
 '高著書' => '高著書',
+'高著称' => '高著稱',
 '高著稱' => '高著稱',
 '高著者' => '高著者',
 '高著述' => '高著述',
 '高著錄' => '高著錄',
-'髭著' => '髭着',
-'髭著作' => '髭著作',
-'髭著名' => '髭著名',
-'髭著書' => '髭著書',
-'髭著稱' => '髭著稱',
-'髭著者' => '髭著者',
-'髭著述' => '髭著述',
-'髭著錄' => '髭著錄',
 '斗着' => '鬥着',
 '鬥著' => '鬥着',
 '鬥著作' => '鬥著作',
@@ -17814,6 +17630,7 @@ $zh2CN = array(
 '乘著作' => '乘著作',
 '乘著名' => '乘著名',
 '乘著錄' => '乘著录',
+'乘著称' => '乘著称',
 '乘著稱' => '乘著称',
 '乘著者' => '乘著者',
 '乘著述' => '乘著述',
@@ -17844,6 +17661,7 @@ $zh2CN = array(
 '亮著作' => '亮著作',
 '亮著名' => '亮著名',
 '亮著錄' => '亮著录',
+'亮著称' => '亮著称',
 '亮著稱' => '亮著称',
 '亮著者' => '亮著者',
 '亮著述' => '亮著述',
@@ -17899,6 +17717,7 @@ $zh2CN = array(
 '低著作' => '低著作',
 '低著名' => '低著名',
 '低著錄' => '低著录',
+'低著称' => '低著称',
 '低著稱' => '低著称',
 '低著者' => '低著者',
 '低著述' => '低著述',
@@ -17907,6 +17726,7 @@ $zh2CN = array(
 '住著作' => '住著作',
 '住著名' => '住著名',
 '住著錄' => '住著录',
+'住著称' => '住著称',
 '住著稱' => '住著称',
 '住著者' => '住著者',
 '住著述' => '住著述',
@@ -17929,6 +17749,7 @@ $zh2CN = array(
 '保障著作' => '保障著作',
 '保障著名' => '保障著名',
 '保障著錄' => '保障著录',
+'保障著称' => '保障著称',
 '保障著稱' => '保障著称',
 '保障著者' => '保障著者',
 '保障著述' => '保障著述',
@@ -17939,6 +17760,7 @@ $zh2CN = array(
 '信著作' => '信著作',
 '信著名' => '信著名',
 '信著錄' => '信著录',
+'信著称' => '信著称',
 '信著稱' => '信著称',
 '信著者' => '信著者',
 '信著述' => '信著述',
@@ -17986,6 +17808,7 @@ $zh2CN = array(
 '光著作' => '光著作',
 '光著名' => '光著名',
 '光著錄' => '光著录',
+'光著称' => '光著称',
 '光著稱' => '光著称',
 '光著者' => '光著者',
 '光著述' => '光著述',
@@ -18020,15 +17843,6 @@ $zh2CN = array(
 '關著者' => '关著者',
 '關著述' => '关著述',
 '關帳' => '关账',
-'氧份' => '养分',
-'冀著' => '冀着',
-'冀著書' => '冀著书',
-'冀著作' => '冀著作',
-'冀著名' => '冀著名',
-'冀著錄' => '冀著录',
-'冀著稱' => '冀著称',
-'冀著者' => '冀著者',
-'冀著述' => '冀著述',
 '記憶體' => '内存',
 '甘比亞' => '冈比亚',
 '冒著' => '冒着',
@@ -18051,6 +17865,7 @@ $zh2CN = array(
 '衝著' => '冲着',
 '沖著。' => '冲著。',
 '沖著《' => '冲著《',
+'沖著(' => '冲著(',
 '沖著,' => '冲著,',
 '沖帳' => '冲账',
 '涼著' => '凉着',
@@ -18096,6 +17911,7 @@ $zh2CN = array(
 '刻著作' => '刻著作',
 '刻著名' => '刻著名',
 '刻著錄' => '刻著录',
+'刻著称' => '刻著称',
 '刻著稱' => '刻著称',
 '刻著者' => '刻著者',
 '刻著述' => '刻著述',
@@ -18124,17 +17940,10 @@ $zh2CN = array(
 '努力著作' => '努力著作',
 '努力著名' => '努力著名',
 '努力著錄' => '努力著录',
+'努力著称' => '努力著称',
 '努力著稱' => '努力著称',
 '努力著者' => '努力著者',
 '努力著述' => '努力著述',
-'努著' => '努着',
-'努著書' => '努著书',
-'努著作' => '努著作',
-'努著名' => '努著名',
-'努著錄' => '努著录',
-'努著稱' => '努著称',
-'努著者' => '努著者',
-'努著述' => '努著述',
 '蘿拉' => '劳拉',
 '布蘭登堡' => '勃兰登堡',
 '白朗寧' => '勃朗宁',
@@ -18179,14 +17988,6 @@ $zh2CN = array(
 '壓著稱' => '压著称',
 '壓著者' => '压著者',
 '壓著述' => '压著述',
-'去著' => '去着',
-'去著書' => '去著书',
-'去著作' => '去著作',
-'去著名' => '去著名',
-'去著錄' => '去著录',
-'去著稱' => '去著称',
-'去著者' => '去著者',
-'去著述' => '去著述',
 '發著' => '发着',
 '發著《' => '发著《',
 '發著作' => '发著作',
@@ -18221,6 +18022,7 @@ $zh2CN = array(
 '叫著稱' => '叫著称',
 '叫著者' => '叫著者',
 '叫著述' => '叫著述',
+'桌上型電腦' => '台式电脑',
 '撞球' => '台球',
 '台帳' => '台账',
 '叱吒' => '叱咤',
@@ -18270,6 +18072,7 @@ $zh2CN = array(
 '味著作' => '味著作',
 '味著名' => '味著名',
 '味著錄' => '味著录',
+'味著称' => '味著称',
 '味著稱' => '味著称',
 '味著者' => '味著者',
 '味著述' => '味著述',
@@ -18360,14 +18163,6 @@ $zh2CN = array(
 '聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
 '聖馬利諾' => '圣马力诺',
-'在著' => '在着',
-'在著書' => '在著书',
-'在著作' => '在著作',
-'在著名' => '在著名',
-'在著錄' => '在著录',
-'在著稱' => '在著称',
-'在著者' => '在著者',
-'在著述' => '在著述',
 '蓋亞那' => '圭亚那',
 '坐著' => '坐着',
 '坐著書' => '坐著书',
@@ -18377,6 +18172,7 @@ $zh2CN = array(
 '坐著稱' => '坐著称',
 '坐著者' => '坐著者',
 '坐著述' => '坐著述',
+'堅貞著' => '坚贞着',
 '坦尚尼亞' => '坦桑尼亚',
 '伊波拉' => '埃博拉',
 '衣索匹亞' => '埃塞俄比亚',
@@ -18431,16 +18227,10 @@ $zh2CN = array(
 '字型檔' => '字库',
 '欄位' => '字段',
 '位元組' => '字节',
+'存在著' => '存在着',
 '存著' => '存着',
+'存著作' => '存著作',
 '存著名' => '存著名',
-'孤著' => '孤着',
-'孤著書' => '孤著书',
-'孤著作' => '孤著作',
-'孤著名' => '孤著名',
-'孤著錄' => '孤著录',
-'孤著稱' => '孤著称',
-'孤著者' => '孤著者',
-'孤著述' => '孤著述',
 '學姊' => '学姐',
 '學著' => '学着',
 '學著書' => '学著书',
@@ -18457,6 +18247,7 @@ $zh2CN = array(
 '守著作' => '守著作',
 '守著名' => '守著名',
 '守著錄' => '守著录',
+'守著称' => '守著称',
 '守著稱' => '守著称',
 '守著者' => '守著者',
 '守著述' => '守著述',
@@ -18468,6 +18259,7 @@ $zh2CN = array(
 '定著作' => '定著作',
 '定著名' => '定著名',
 '定著錄' => '定著录',
+'定著称' => '定著称',
 '定著稱' => '定著称',
 '定著者' => '定著者',
 '定著述' => '定著述',
@@ -18518,6 +18310,7 @@ $zh2CN = array(
 '布吉納法索' => '布基纳法索',
 '布隆泉' => '布隆方丹',
 '蒲隆地' => '布隆迪',
+'希冀著' => '希冀着',
 '席哈克' => '希拉克',
 '希拉莉' => '希拉里',
 '希拉蕊' => '希拉里',
@@ -18557,14 +18350,6 @@ $zh2CN = array(
 '應著稱' => '应著称',
 '應著者' => '应著者',
 '應著述' => '应著述',
-'康著' => '康着',
-'康著書' => '康著书',
-'康著作' => '康著作',
-'康著名' => '康著名',
-'康著錄' => '康著录',
-'康著稱' => '康著称',
-'康著者' => '康著者',
-'康著述' => '康著述',
 '建帳' => '建账',
 '克卜勒' => '开普勒',
 '蓋曼群島' => '开曼群岛',
@@ -18633,6 +18418,7 @@ $zh2CN = array(
 '心著作' => '心著作',
 '心著名' => '心著名',
 '心著錄' => '心著录',
+'心著称' => '心著称',
 '心著稱' => '心著称',
 '心著者' => '心著者',
 '心著述' => '心著述',
@@ -18644,14 +18430,6 @@ $zh2CN = array(
 '忍著稱' => '忍著称',
 '忍著者' => '忍著者',
 '忍著述' => '忍著述',
-'志著' => '志着',
-'志著書' => '志著书',
-'志著作' => '志著作',
-'志著名' => '志著名',
-'志著錄' => '志著录',
-'志著稱' => '志著称',
-'志著者' => '志著者',
-'志著述' => '志著述',
 '忙著' => '忙着',
 '忙著書' => '忙著书',
 '忙著作' => '忙著作',
@@ -18660,6 +18438,7 @@ $zh2CN = array(
 '忙著稱' => '忙著称',
 '忙著者' => '忙著者',
 '忙著述' => '忙著述',
+'忠貞著' => '忠贞着',
 '懷著' => '怀着',
 '懷著書' => '怀著书',
 '懷著作' => '怀著作',
@@ -18676,14 +18455,6 @@ $zh2CN = array(
 '急著稱' => '急著称',
 '急著者' => '急著者',
 '急著述' => '急著述',
-'性著' => '性着',
-'性著書' => '性著书',
-'性著作' => '性著作',
-'性著名' => '性著名',
-'性著錄' => '性著录',
-'性著稱' => '性著称',
-'性著者' => '性著者',
-'性著述' => '性著述',
 '匯流排' => '总线',
 '總帳' => '总账',
 '戀著' => '恋着',
@@ -18716,6 +18487,7 @@ $zh2CN = array(
 '想著作' => '想著作',
 '想著名' => '想著名',
 '想著錄' => '想著录',
+'想著称' => '想著称',
 '想著稱' => '想著称',
 '想著者' => '想著者',
 '想著述' => '想著述',
@@ -18988,6 +18760,7 @@ $zh2CN = array(
 '數碼電視' => '数字电视',
 '資料庫' => '数据库',
 '數著' => '数着',
+'數位照相機' => '数码照相机',
 '數位相機' => '数码相机',
 '數著作' => '数著作',
 '數著名' => '数著名',
@@ -19140,6 +18913,7 @@ $zh2CN = array(
 '柏林圍牆' => '柏林墙',
 '查帳' => '查账',
 '查維茲' => '查韦斯',
+'標志著' => '标志着',
 '標誌著' => '标志着',
 '格瑞那達' => '格林纳达',
 '格林美獎' => '格莱美奖',
@@ -19172,6 +18946,7 @@ $zh2CN = array(
 '毛里裘斯' => '毛里求斯',
 '公厘' => '毫米',
 '公釐' => '毫米',
+'氧份' => '氧分',
 '胺基酸' => '氨基酸',
 '水份' => '水分',
 '水氣' => '水汽',
@@ -19248,14 +19023,6 @@ $zh2CN = array(
 '潤著稱' => '润著称',
 '潤著者' => '润著者',
 '潤著述' => '润著述',
-'涵著' => '涵着',
-'涵著書' => '涵著书',
-'涵著作' => '涵著作',
-'涵著名' => '涵著名',
-'涵著錄' => '涵著录',
-'涵著稱' => '涵著称',
-'涵著者' => '涵著者',
-'涵著述' => '涵著述',
 '混帳' => '混账',
 '清澈' => '清澈',
 '清帳' => '清账',
@@ -19348,16 +19115,9 @@ $zh2CN = array(
 '千里達及托巴哥' => '特立尼达和多巴哥',
 '千里達托貝哥' => '特立尼达和托巴哥',
 '狗隻' => '犬只',
-'ç\8d¨è\91\97' => 'ç\8b¬着',
+'ç\8c¶è±«è\91\97' => 'ç\8a¹è±«着',
 '獨立國家國協' => '独立国家联合体',
 '獨立國協' => '独联体',
-'獨著書' => '独著书',
-'獨著作' => '独著作',
-'獨著名' => '独著名',
-'獨著錄' => '独著录',
-'獨著稱' => '独著称',
-'獨著者' => '独著者',
-'獨著述' => '独著述',
 '猜著' => '猜着',
 '猜著書' => '猜着书',
 '猜著作' => '猜著作',
@@ -19447,14 +19207,6 @@ $zh2CN = array(
 '盯著稱' => '盯著称',
 '盯著者' => '盯著者',
 '盯著述' => '盯著述',
-'盾著' => '盾着',
-'盾著書' => '盾著书',
-'盾著作' => '盾著作',
-'盾著名' => '盾著名',
-'盾著錄' => '盾著录',
-'盾著稱' => '盾著称',
-'盾著者' => '盾著者',
-'盾著述' => '盾著述',
 '看著' => '看着',
 '看著書' => '看着书',
 '看著作' => '看著作',
@@ -19597,6 +19349,7 @@ $zh2CN = array(
 '瞪著稱' => '瞪著称',
 '瞪著者' => '瞪著者',
 '瞪著述' => '瞪著述',
+'矛盾著' => '矛盾着',
 '智慧財產權' => '知识产权',
 '智財權' => '知识产权',
 '知識份子' => '知识分子',
@@ -19652,6 +19405,15 @@ $zh2CN = array(
 '穿著者' => '穿著者',
 '穿著述' => '穿著述',
 '突尼西亞' => '突尼斯',
+'立著' => '立着',
+'立著《' => '立著《',
+'立著作' => '立著作',
+'立著名' => '立著名',
+'立著有' => '立著有',
+'立著称' => '立著称',
+'立著稱' => '立著称',
+'立著者' => '立著者',
+'立著(' => '立著(',
 '豎著' => '竖着',
 '豎著書' => '竖著书',
 '豎著作' => '竖著作',
@@ -19752,6 +19514,7 @@ $zh2CN = array(
 '美著作' => '美著作',
 '美著名' => '美著名',
 '美著錄' => '美著录',
+'美著称' => '美著称',
 '美著稱' => '美著称',
 '美著者' => '美著者',
 '美著述' => '美著述',
@@ -19798,14 +19561,6 @@ $zh2CN = array(
 '舒麥加' => '舒马赫',
 '太空梭' => '航天飞机',
 '穿梭機' => '航天飞机',
-'藝著' => '艺着',
-'藝著書' => '艺著书',
-'藝著作' => '艺著作',
-'藝著名' => '艺著名',
-'藝著錄' => '艺著录',
-'藝著稱' => '艺著称',
-'藝著者' => '艺著者',
-'藝著述' => '艺著述',
 '愛滋' => '艾滋',
 '晶元' => '芯片',
 '晶片' => '芯片',
@@ -19858,6 +19613,7 @@ $zh2CN = array(
 '蒙著者' => '蒙著者',
 '蒙著述' => '蒙著述',
 '藍芽' => '蓝牙',
+'蘊涵著' => '蕴涵着',
 '薛丁格' => '薛定谔',
 '藏著' => '藏着',
 '藏著書' => '藏著书',
@@ -19888,6 +19644,7 @@ $zh2CN = array(
 '衣著作' => '衣著作',
 '衣著名' => '衣著名',
 '衣著錄' => '衣著录',
+'衣著称' => '衣著称',
 '衣著稱' => '衣著称',
 '衣著者' => '衣著者',
 '衣著述' => '衣著述',
@@ -19962,24 +19719,8 @@ $zh2CN = array(
 '數據機' => '调制解调器',
 '象徵著' => '象征着',
 '象徵著名' => '象征著名',
-'豫著' => '豫着',
-'豫著書' => '豫著书',
-'豫著作' => '豫著作',
-'豫著名' => '豫著名',
-'豫著錄' => '豫著录',
-'豫著稱' => '豫著称',
-'豫著者' => '豫著者',
-'豫著述' => '豫著述',
 '碧咸' => '贝克汉姆',
 '貝爾格勒' => '贝尔格莱德',
-'貞著' => '贞着',
-'貞著書' => '贞著书',
-'貞著作' => '贞著作',
-'貞著名' => '贞著名',
-'貞著錄' => '贞著录',
-'貞著稱' => '贞著称',
-'貞著者' => '贞著者',
-'貞著述' => '贞著述',
 '負著' => '负着',
 '貢寮' => '贡寮',
 '帳上' => '账上',
@@ -20151,14 +19892,6 @@ $zh2CN = array(
 '還帳' => '还账',
 '演化論' => '进化论',
 '進帳' => '进账',
-'遠著' => '远着',
-'遠著書' => '远著书',
-'遠著作' => '远著作',
-'遠著名' => '远著名',
-'遠著錄' => '远著录',
-'遠著稱' => '远著称',
-'遠著者' => '远著者',
-'遠著述' => '远著述',
 '連著' => '连着',
 '連結他' => '连结他',
 '連著書' => '连著书',
@@ -20200,9 +19933,12 @@ $zh2CN = array(
 '遇著作' => '遇著作',
 '遇著名' => '遇著名',
 '遇著錄' => '遇著录',
+'遇著称' => '遇著称',
 '遇著稱' => '遇著称',
 '遇著者' => '遇著者',
 '遇著述' => '遇著述',
+'遍佈著' => '遍布着',
+'遍布著' => '遍布着',
 '部份' => '部分',
 '配合著' => '配合着',
 '配合著名' => '配合著名',
@@ -20248,6 +19984,7 @@ $zh2CN = array(
 '鋪著稱' => '铺著称',
 '鋪著者' => '铺著者',
 '鋪著述' => '铺著述',
+'鏈結' => '链接',
 '銷帳' => '销账',
 '鉲' => '锎',
 '鎝' => '锝',
@@ -20330,6 +20067,7 @@ $zh2CN = array(
 '雅著作' => '雅著作',
 '雅著名' => '雅著名',
 '雅著錄' => '雅著录',
+'雅著称' => '雅著称',
 '雅著稱' => '雅著称',
 '雅著者' => '雅著者',
 '雅著述' => '雅著述',
@@ -20436,17 +20174,10 @@ $zh2CN = array(
 '高著作' => '高著作',
 '高著名' => '高著名',
 '高著錄' => '高著录',
+'高著称' => '高著称',
 '高著稱' => '高著称',
 '高著者' => '高著者',
 '高著述' => '高著述',
-'髭著' => '髭着',
-'髭著書' => '髭著书',
-'髭著作' => '髭著作',
-'髭著名' => '髭著名',
-'髭著錄' => '髭著录',
-'髭著稱' => '髭著称',
-'髭著者' => '髭著者',
-'髭著述' => '髭著述',
 '魚雷' => '鱼雷',
 '鱼雷' => '鱼雷',
 '咪高峰' => '麦克风',
index bb6a4d5..43f03c3 100644 (file)
@@ -407,4 +407,14 @@ abstract class Action {
         * @throws ErrorPageError
         */
        abstract public function show();
+
+       /**
+        * Call wfTransactionalTimeLimit() if this request was POSTed
+        * @since 1.26
+        */
+       protected function useTransactionalTimeLimit() {
+               if ( $this->getRequest()->wasPosted() ) {
+                       wfTransactionalTimeLimit();
+               }
+       }
 }
index be21a6f..841a94d 100644 (file)
@@ -41,6 +41,8 @@ class DeleteAction extends FormlessAction {
        }
 
        public function show() {
+               $this->useTransactionalTimeLimit();
+
                $out = $this->getOutput();
                if ( $this->getContext()->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
                        $out->addModuleStyles( array(
index 6c8440a..eb53f19 100644 (file)
@@ -41,6 +41,8 @@ class EditAction extends FormlessAction {
        }
 
        public function show() {
+               $this->useTransactionalTimeLimit();
+
                if ( $this->getContext()->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
                        $out = $this->getOutput();
                        $out->addModuleStyles( array(
index 0c1a344..f3670a8 100644 (file)
@@ -62,13 +62,17 @@ class InfoAction extends FormlessAction {
         *
         * @since 1.22
         * @param Title $title Title to clear cache for
+        * @param int|null $revid Revision id to clear
         */
-       public static function invalidateCache( Title $title ) {
+       public static function invalidateCache( Title $title, $revid = null ) {
                $cache = ObjectCache::getMainWANInstance();
 
-               $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
-               if ( $revision !== null ) {
-                       $key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revision->getId() );
+               if ( !$revid ) {
+                       $revision = Revision::newFromTitle( $title, 0, Revision::READ_LATEST );
+                       $revid = $revision ? $revision->getId() : null;
+               }
+               if ( $revid !== null ) {
+                       $key = wfMemcKey( 'infoaction', sha1( $title->getPrefixedText() ), $revid );
                        $cache->delete( $key );
                }
        }
@@ -675,11 +679,11 @@ class InfoAction extends FormlessAction {
                $id = $title->getArticleID();
                $config = $this->context->getConfig();
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbrWatchlist = wfGetDB( DB_SLAVE, 'watchlist' );
                $result = array();
 
                // Number of page watchers
-               $watchers = (int)$dbr->selectField(
+               $watchers = (int)$dbrWatchlist->selectField(
                        'watchlist',
                        'COUNT(*)',
                        array(
@@ -694,15 +698,15 @@ class InfoAction extends FormlessAction {
                        // Threshold: last visited about 26 weeks before latest edit
                        $updated = wfTimestamp( TS_UNIX, $this->page->getTimestamp() );
                        $age = $config->get( 'WatchersMaxAge' );
-                       $threshold = $dbr->timestamp( $updated - $age );
+                       $threshold = $dbrWatchlist->timestamp( $updated - $age );
                        // Number of page watchers who also visited a "recent" edit
-                       $visitingWatchers = (int)$dbr->selectField(
+                       $visitingWatchers = (int)$dbrWatchlist->selectField(
                                'watchlist',
                                'COUNT(*)',
                                array(
                                        'wl_namespace' => $title->getNamespace(),
                                        'wl_title' => $title->getDBkey(),
-                                       'wl_notificationtimestamp >= ' . $dbr->addQuotes( $threshold ) .
+                                       'wl_notificationtimestamp >= ' . $dbrWatchlist->addQuotes( $threshold ) .
                                        ' OR wl_notificationtimestamp IS NULL'
                                ),
                                __METHOD__
@@ -710,6 +714,7 @@ class InfoAction extends FormlessAction {
                        $result['visitingWatchers'] = $visitingWatchers;
                }
 
+               $dbr = wfGetDB( DB_SLAVE );
                // Total number of edits
                $edits = (int)$dbr->selectField(
                        'revision',
index d025878..c7f3346 100644 (file)
@@ -107,6 +107,8 @@ class RevertAction extends FormAction {
        }
 
        public function onSubmit( $data ) {
+               $this->useTransactionalTimeLimit();
+
                $source = $this->page->getFile()->getArchiveVirtualUrl(
                        $this->getRequest()->getText( 'oldimage' )
                );
index 76d70d7..93669cf 100644 (file)
@@ -36,6 +36,9 @@ class RollbackAction extends FormlessAction {
        }
 
        public function onView() {
+               // TODO: use $this->useTransactionalTimeLimit(); when POST only
+               wfTransactionalTimeLimit();
+
                $details = null;
 
                $request = $this->getRequest();
index 9647340..8b6e329 100644 (file)
@@ -64,7 +64,7 @@ class WatchAction extends FormAction {
                $this->checkCanExecute( $user );
 
                // Must have valid token for this action/title
-               $salt = array( $this->getName(), $this->getTitle()->getDBkey() );
+               $salt = array( $this->getName(), $this->getTitle()->getPrefixedDBkey() );
 
                if ( $user->matchEditToken( $this->getRequest()->getVal( 'token' ), $salt ) ) {
                        $this->onSubmit( array() );
index 393ff49..d53797b 100644 (file)
@@ -345,6 +345,22 @@ abstract class ApiBase extends ContextSource {
                return null;
        }
 
+       /**
+        * Returns data for HTTP conditional request mechanisms.
+        *
+        * @since 1.26
+        * @param string $condition Condition being queried:
+        *  - last-modified: Return a timestamp representing the maximum of the
+        *    last-modified dates for all resources involved in the request. See
+        *    RFC 7232 § 2.2 for semantics.
+        *  - etag: Return an entity-tag representing the state of all resources involved
+        *    in the request. Quotes must be included. See RFC 7232 § 2.3 for semantics.
+        * @return string|boolean|null As described above, or null if no value is available.
+        */
+       public function getConditionalRequestData( $condition ) {
+               return null;
+       }
+
        /**@}*/
 
        /************************************************************************//**
@@ -1229,7 +1245,7 @@ abstract class ApiBase extends ContextSource {
                                $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
                        }
                        $token = $user->getOption( 'watchlisttoken' );
-                       if ( $token == '' || $token != $params['token'] ) {
+                       if ( $token == '' || !hash_equals( $token, $params['token'] ) ) {
                                $this->dieUsage(
                                        'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
                                        'bad_wltoken'
@@ -2870,6 +2886,16 @@ abstract class ApiBase extends ContextSource {
                return $this->getResult()->getData();
        }
 
+       /**
+        * Call wfTransactionalTimeLimit() if this request was POSTed
+        * @since 1.26
+        */
+       protected function useTransactionalTimeLimit() {
+               if ( $this->getRequest()->wasPosted() ) {
+                       wfTransactionalTimeLimit();
+               }
+       }
+
        /**@}*/
 }
 
index b3a543a..5443fac 100644 (file)
@@ -21,6 +21,7 @@
  *
  * @file
  */
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * Unit to authenticate account registration attempts to the current wiki.
@@ -95,6 +96,10 @@ class ApiCreateAccount extends ApiBase {
                $loginForm->load();
 
                $status = $loginForm->addNewaccountInternal();
+               LoggerFactory::getInstance( 'authmanager' )->info( 'Account creation attempt via API', array(
+                       'event' => 'accountcreation',
+                       'status' => $status,
+               ) );
                $result = array();
                if ( $status->isGood() ) {
                        // Success!
index 6279dfd..bdf02bf 100644 (file)
@@ -39,6 +39,8 @@ class ApiDelete extends ApiBase {
         * result object.
         */
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $params = $this->extractRequestParams();
 
                $pageObj = $this->getTitleOrPageId( $params, 'fromdbmaster' );
index b623849..2f1c01c 100644 (file)
@@ -35,6 +35,8 @@
  */
 class ApiEditPage extends ApiBase {
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
index 853b138..0ddb3c3 100644 (file)
@@ -169,6 +169,11 @@ class ApiFeedWatchlist extends ApiBase {
         * @return FeedItem
         */
        private function createFeedItem( $info ) {
+               if ( !isset( $info['title'] ) ) {
+                       // Probably a revdeled log entry, skip it.
+                       return null;
+               }
+
                $titleStr = $info['title'];
                $title = Title::newFromText( $titleStr );
                $curidParam = array();
@@ -205,9 +210,14 @@ class ApiFeedWatchlist extends ApiBase {
                }
 
                $timestamp = $info['timestamp'];
-               $user = $info['user'];
 
-               $completeText = "$comment ($user)";
+               if ( isset( $info['user'] ) ) {
+                       $user = $info['user'];
+                       $completeText = "$comment ($user)";
+               } else {
+                       $user = '';
+                       $completeText = (string)$comment;
+               }
 
                return new FeedItem( $titleStr, $completeText, $titleUrl, $timestamp, $user );
        }
index 5517ee0..a49397d 100644 (file)
@@ -38,6 +38,8 @@ class ApiFileRevert extends ApiBase {
        protected $params;
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $this->params = $this->extractRequestParams();
                // Extract the file and archiveName from the request parameters
                $this->validateParameters();
index 4d80163..f54f20f 100644 (file)
@@ -182,7 +182,7 @@ abstract class ApiFormatBase extends ApiBase {
                        $out = new OutputPage( $context );
                        $context->setOutput( $out );
 
-                       $out->addModules( 'mediawiki.apipretty' );
+                       $out->addModuleStyles( 'mediawiki.apipretty' );
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
 
                        // When the format without suffix 'fm' is defined, there is a non-html version
index 43877b7..9538842 100644 (file)
@@ -35,6 +35,15 @@ class ApiFormatJson extends ApiFormatBase {
        public function __construct( ApiMain $main, $format ) {
                parent::__construct( $main, $format );
                $this->isRaw = ( $format === 'rawfm' );
+
+               if ( $this->getMain()->getCheck( 'callback' ) ) {
+                       # T94015: jQuery appends a useless '_' parameter in jsonp mode.
+                       # Mark the parameter as used in that case to avoid a warning that's
+                       # outside the control of the end user.
+                       # (and do it here because ApiMain::reportUnusedParams() gets called
+                       # before our ::execute())
+                       $this->getMain()->getCheck( '_' );
+               }
        }
 
        public function getMimeType() {
index 7bb2453..9dbd4a5 100644 (file)
 class ApiFormatRaw extends ApiFormatBase {
 
        private $errorFallback;
+       private $mFailWithHTTPError = false;
+
 
        /**
         * @param ApiMain $main
-        * @param ApiFormatBase $errorFallback Object to fall back on for errors
+        * @param ApiFormatBase |null $errorFallback Object to fall back on for errors
         */
-       public function __construct( ApiMain $main, ApiFormatBase $errorFallback ) {
+       public function __construct( ApiMain $main, ApiFormatBase $errorFallback = null ) {
                parent::__construct( $main, 'raw' );
-               $this->errorFallback = $errorFallback;
+               if ( $errorFallback === null ) {
+                       $this->errorFallback = $main->createPrinterByName( $main->getParameter( 'format' ) );
+               } else {
+                       $this->errorFallback = $errorFallback;
+               }
        }
 
        public function getMimeType() {
@@ -59,6 +65,9 @@ class ApiFormatRaw extends ApiFormatBase {
                $data = $this->getResult()->getResultData();
                if ( isset( $data['error'] ) ) {
                        $this->errorFallback->initPrinter( $unused );
+                       if ( $this->mFailWithHTTPError ) {
+                               $this->getMain()->getRequest()->response()->statusHeader( 400 );
+                       }
                } else {
                        parent::initPrinter( $unused );
                }
@@ -85,4 +94,17 @@ class ApiFormatRaw extends ApiFormatBase {
                }
                $this->printText( $data['text'] );
        }
+
+       /**
+        * Output HTTP error code 400 when if an error is encountered
+        *
+        * The purpose is for output formats where the user-agent will
+        * not be able to interpret the validity of the content in any
+        * other way. For example subtitle files read by browser video players.
+        *
+        * @param bool $fail
+        */
+       public function setFailWithHTTPError( $fail ) {
+               $this->mFailWithHTTPError = $fail;
+       }
 }
index c8390b6..7a544ec 100644 (file)
@@ -49,6 +49,8 @@ class ApiImageRotate extends ApiBase {
        }
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $params = $this->extractRequestParams();
                $rotation = $params['rotation'];
 
index 4154083..735cc7f 100644 (file)
@@ -32,6 +32,8 @@
 class ApiImport extends ApiBase {
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
index c4e7022..c66e215 100644 (file)
@@ -24,6 +24,7 @@
  *
  * @file
  */
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * Unit to authenticate log-in attempts to the current wiki.
@@ -144,10 +145,10 @@ class ApiLogin extends ApiBase {
                        case LoginForm::CREATE_BLOCKED:
                                $result['result'] = 'CreateBlocked';
                                $result['details'] = 'Your IP address is blocked from account creation';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( $context->getUser()->getBlock() )
-                               );
+                               $block = $context->getUser()->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::THROTTLED:
@@ -158,10 +159,10 @@ class ApiLogin extends ApiBase {
 
                        case LoginForm::USER_BLOCKED:
                                $result['result'] = 'Blocked';
-                               $result = array_merge(
-                                       $result,
-                                       ApiQueryUserInfo::getBlockInfo( User::newFromName( $params['name'] )->getBlock() )
-                               );
+                               $block = User::newFromName( $params['name'] )->getBlock();
+                               if ( $block ) {
+                                       $result = array_merge( $result, ApiQueryUserInfo::getBlockInfo( $block ) );
+                               }
                                break;
 
                        case LoginForm::ABORTED:
@@ -174,6 +175,12 @@ class ApiLogin extends ApiBase {
                }
 
                $this->getResult()->addValue( null, 'login', $result );
+
+               LoggerFactory::getInstance( 'authmanager' )->info( 'Login attempt', array(
+                       'event' => 'login',
+                       'successful' => $authRes === LoginForm::SUCCESS,
+                       'status' => LoginForm::$statusCodes[$authRes],
+               ) );
        }
 
        public function mustBePosted() {
index 46dc7df..c558c2b 100644 (file)
@@ -425,13 +425,16 @@ class ApiMain extends ApiBase {
 
                // In case an error occurs during data output,
                // clear the output buffer and print just the error information
+               $obLevel = ob_get_level();
                ob_start();
 
                $t = microtime( true );
                try {
                        $this->executeAction();
+                       $isError = false;
                } catch ( Exception $e ) {
                        $this->handleException( $e );
+                       $isError = true;
                }
 
                // Log the request whether or not there was an error
@@ -439,9 +442,13 @@ class ApiMain extends ApiBase {
 
                // Send cache headers after any code which might generate an error, to
                // avoid sending public cache headers for errors.
-               $this->sendCacheHeaders();
+               $this->sendCacheHeaders( $isError );
 
-               ob_end_flush();
+               // Executing the action might have already messed with the output
+               // buffers.
+               while ( ob_get_level() > $obLevel ) {
+                       ob_end_flush();
+               }
        }
 
        /**
@@ -532,7 +539,7 @@ class ApiMain extends ApiBase {
 
                // Log the request and reset cache headers
                $main->logRequest( 0 );
-               $main->sendCacheHeaders();
+               $main->sendCacheHeaders( true );
 
                ob_end_flush();
        }
@@ -701,7 +708,12 @@ class ApiMain extends ApiBase {
                return "/^https?:\/\/$wildcard$/";
        }
 
-       protected function sendCacheHeaders() {
+       /**
+        * Send caching headers
+        * @param boolean $isError Whether an error response is being output
+        * @since 1.26 added $isError parameter
+        */
+       protected function sendCacheHeaders( $isError ) {
                $response = $this->getRequest()->response();
                $out = $this->getOutput();
 
@@ -711,6 +723,19 @@ class ApiMain extends ApiBase {
                        $out->addVaryHeader( 'X-Forwarded-Proto' );
                }
 
+               if ( !$isError && $this->mModule &&
+                       ( $this->getRequest()->getMethod() === 'GET' || $this->getRequest()->getMethod() === 'HEAD' )
+               ) {
+                       $etag = $this->mModule->getConditionalRequestData( 'etag' );
+                       if ( $etag !== null ) {
+                               $response->header( "ETag: $etag" );
+                       }
+                       $lastMod = $this->mModule->getConditionalRequestData( 'last-modified' );
+                       if ( $lastMod !== null ) {
+                               $response->header( 'Last-Modified: ' . wfTimestamp( TS_RFC2822, $lastMod ) );
+                       }
+               }
+
                // The logic should be:
                // $this->mCacheControl['max-age'] is set?
                //    Use it, the module knows better than our guess.
@@ -993,6 +1018,121 @@ class ApiMain extends ApiBase {
                return true;
        }
 
+       /**
+        * Check selected RFC 7232 precondition headers
+        *
+        * RFC 7232 envisions a particular model where you send your request to "a
+        * resource", and for write requests that you can read "the resource" by
+        * changing the method to GET. When the API receives a GET request, it
+        * works out even though "the resource" from RFC 7232's perspective might
+        * be many resources from MediaWiki's perspective. But it totally fails for
+        * a POST, since what HTTP sees as "the resource" is probably just
+        * "/api.php" with all the interesting bits in the body.
+        *
+        * Therefore, we only support RFC 7232 precondition headers for GET (and
+        * HEAD). That means we don't need to bother with If-Match and
+        * If-Unmodified-Since since they only apply to modification requests.
+        *
+        * And since we don't support Range, If-Range is ignored too.
+        *
+        * @since 1.26
+        * @param ApiBase $module Api module being used
+        * @return bool True on success, false should exit immediately
+        */
+       protected function checkConditionalRequestHeaders( $module ) {
+               if ( $this->mInternalMode ) {
+                       // No headers to check in internal mode
+                       return true;
+               }
+
+               if ( $this->getRequest()->getMethod() !== 'GET' && $this->getRequest()->getMethod() !== 'HEAD' ) {
+                       // Don't check POSTs
+                       return true;
+               }
+
+               $return304 = false;
+
+               $ifNoneMatch = array_diff(
+                       $this->getRequest()->getHeader( 'If-None-Match', WebRequest::GETHEADER_LIST ) ?: array(),
+                       array( '' )
+               );
+               if ( $ifNoneMatch ) {
+                       if ( $ifNoneMatch === array( '*' ) ) {
+                               // API responses always "exist"
+                               $etag = '*';
+                       } else {
+                               $etag = $module->getConditionalRequestData( 'etag' );
+                       }
+               }
+               if ( $ifNoneMatch && $etag !== null ) {
+                       $test = substr( $etag, 0, 2 ) === 'W/' ? substr( $etag, 2 ) : $etag;
+                       $match = array_map( function ( $s ) {
+                               return substr( $s, 0, 2 ) === 'W/' ? substr( $s, 2 ) : $s;
+                       }, $ifNoneMatch );
+                       $return304 = in_array( $test, $match, true );
+               } else {
+                       $value = trim( $this->getRequest()->getHeader( 'If-Modified-Since' ) );
+
+                       // Some old browsers sends sizes after the date, like this:
+                       //  Wed, 20 Aug 2003 06:51:19 GMT; length=5202
+                       // Ignore that.
+                       $i = strpos( $value, ';' );
+                       if ( $i !== false ) {
+                               $value = trim( substr( $value, 0, $i ) );
+                       }
+
+                       if ( $value !== '' ) {
+                               try {
+                                       $ts = new MWTimestamp( $value );
+                                       if (
+                                               // RFC 7231 IMF-fixdate
+                                               $ts->getTimestamp( TS_RFC2822 ) === $value ||
+                                               // RFC 850
+                                               $ts->format( 'l, d-M-y H:i:s' ) . ' GMT' === $value ||
+                                               // asctime (with and without space-padded day)
+                                               $ts->format( 'D M j H:i:s Y' ) === $value ||
+                                               $ts->format( 'D M  j H:i:s Y' ) === $value
+                                       ) {
+                                               $lastMod = $module->getConditionalRequestData( 'last-modified' );
+                                               if ( $lastMod !== null ) {
+                                                       // Mix in some MediaWiki modification times
+                                                       $modifiedTimes = array(
+                                                               'page' => $lastMod,
+                                                               'user' => $this->getUser()->getTouched(),
+                                                               'epoch' => $this->getConfig()->get( 'CacheEpoch' ),
+                                                       );
+                                                       if ( $this->getConfig()->get( 'UseSquid' ) ) {
+                                                               // T46570: the core page itself may not change, but resources might
+                                                               $modifiedTimes['sepoch'] = wfTimestamp(
+                                                                       TS_MW, time() - $this->getConfig()->get( 'SquidMaxage' )
+                                                               );
+                                                       }
+                                                       Hooks::run( 'OutputPageCheckLastModified', array( &$modifiedTimes ) );
+                                                       $lastMod = max( $modifiedTimes );
+                                                       $return304 = wfTimestamp( TS_MW, $lastMod ) <= $ts->getTimestamp( TS_MW );
+                                               }
+                                       }
+                               } catch ( TimestampException $e ) {
+                                       // Invalid timestamp, ignore it
+                               }
+                       }
+               }
+
+               if ( $return304 ) {
+                       $this->getRequest()->response()->statusHeader( 304 );
+
+                       // Avoid outputting the compressed representation of a zero-length body
+                       MediaWiki\suppressWarnings();
+                       ini_set( 'zlib.output_compression', 0 );
+                       MediaWiki\restoreWarnings();
+                       wfClearOutputBuffers();
+
+                       return false;
+               }
+
+               return true;
+       }
+
        /**
         * Check for sufficient permissions to execute
         * @param ApiBase $module An Api module
@@ -1083,6 +1223,10 @@ class ApiMain extends ApiBase {
                        return;
                }
 
+               if ( !$this->checkConditionalRequestHeaders( $module ) ) {
+                       return;
+               }
+
                if ( !$this->mInternalMode ) {
                        $this->setupExternalResponse( $module, $params );
                }
@@ -1090,8 +1234,6 @@ class ApiMain extends ApiBase {
                $this->checkAsserts( $params );
 
                // Execute
-               $this->getContext()->getStats()->increment(
-                       'api.modules.' . strtr( $module->getModulePath(), '+', '.' ) );
                $module->execute();
                Hooks::run( 'APIAfterExecute', array( &$module ) );
 
index 6717c39..db826a6 100644 (file)
@@ -132,6 +132,21 @@ class ApiMessage extends Message implements IApiMessage {
        public function setApiData( array $data ) {
                $this->apiData = $data;
        }
+
+       public function serialize() {
+               return serialize( array(
+                       'parent' => parent::serialize(),
+                       'apiCode' => $this->apiCode,
+                       'apiData' => $this->apiData,
+               ) );
+       }
+
+       public function unserialize( $serialized ) {
+               $data = unserialize( $serialized );
+               parent::unserialize( $data['parent'] );
+               $this->apiCode = $data['apiCode'];
+               $this->apiData = $data['apiData'];
+       }
 }
 
 /**
@@ -188,4 +203,19 @@ class ApiRawMessage extends RawMessage implements IApiMessage {
        public function setApiData( array $data ) {
                $this->apiData = $data;
        }
+
+       public function serialize() {
+               return serialize( array(
+                       'parent' => parent::serialize(),
+                       'apiCode' => $this->apiCode,
+                       'apiData' => $this->apiData,
+               ) );
+       }
+
+       public function unserialize( $serialized ) {
+               $data = unserialize( $serialized );
+               parent::unserialize( $data['parent'] );
+               $this->apiCode = $data['apiCode'];
+               $this->apiData = $data['apiData'];
+       }
 }
index e42958b..aca4378 100644 (file)
@@ -31,6 +31,8 @@
 class ApiMove extends ApiBase {
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
index 436f22a..a62bcb6 100644 (file)
@@ -52,6 +52,14 @@ class ApiOptions extends ApiBase {
                        $this->dieUsageMsg( array( 'missingparam', 'optionname' ) );
                }
 
+               // Load the user from the master to reduce CAS errors on double post (T95839)
+               if ( wfGetLB()->getServerCount() > 1 ) {
+                       $user = User::newFromId( $user->getId() );
+                       if ( !$user->loadFromId( User::READ_LATEST ) ) {
+                               $this->dieUsage( 'Anonymous users cannot change preferences', 'notloggedin' );
+                       }
+               }
+
                if ( $params['reset'] ) {
                        $user->resetOptions( $params['resetkinds'], $this->getContext() );
                        $changed = true;
index d67b184..1415b79 100644 (file)
@@ -66,6 +66,7 @@ class ApiPageSet extends ApiBase {
        private $mInterwikiTitles = array();
        /** @var Title[] */
        private $mPendingRedirectIDs = array();
+       private $mResolvedRedirectTitles = array();
        private $mConvertedTitles = array();
        private $mGoodRevIDs = array();
        private $mLiveRevIDs = array();
@@ -434,7 +435,7 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Get a list of redirect resolutions - maps a title to its redirect
-        * target.
+        * target. Includes generator data for redirect source when available.
         * @param ApiResult $result
         * @return array Array of prefixed_title (string) => Title object
         * @since 1.21
@@ -452,6 +453,15 @@ class ApiPageSet extends ApiBase {
                        if ( $titleTo->isExternal() ) {
                                $r['tointerwiki'] = $titleTo->getInterwiki();
                        }
+                       if ( isset( $this->mResolvedRedirectTitles[$titleStrFrom] ) ) {
+                               $titleFrom = $this->mResolvedRedirectTitles[$titleStrFrom];
+                               $ns = $titleFrom->getNamespace();
+                               $dbkey = $titleFrom->getDBkey();
+                               if ( isset( $this->mGeneratorData[$ns][$dbkey] ) ) {
+                                       $r = array_merge( $this->mGeneratorData[$ns][$dbkey], $r );
+                               }
+                       }
+
                        $values[] = $r;
                }
                if ( !empty( $values ) && $result ) {
@@ -1030,6 +1040,7 @@ class ApiPageSet extends ApiBase {
                                $row->rd_fragment,
                                $row->rd_interwiki
                        );
+                       $this->mResolvedRedirectTitles[$from] = $this->mPendingRedirectIDs[$rdfrom];
                        unset( $this->mPendingRedirectIDs[$rdfrom] );
                        if ( $to->isExternal() ) {
                                $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
@@ -1050,7 +1061,9 @@ class ApiPageSet extends ApiBase {
                                        continue;
                                }
                                $lb->addObj( $rt );
-                               $this->mRedirectTitles[$title->getPrefixedText()] = $rt;
+                               $from = $title->getPrefixedText();
+                               $this->mResolvedRedirectTitles[$from] = $title;
+                               $this->mRedirectTitles[$from] = $rt;
                                unset( $this->mPendingRedirectIDs[$id] );
                        }
                }
index 577b525..cce8572 100644 (file)
@@ -169,9 +169,24 @@ class ApiParse extends ApiBase {
 
                                $popts = $this->makeParserOptions( $pageObj, $params );
 
-                               // Potentially cached
-                               $p_result = $this->getParsedContent( $pageObj, $popts, $pageid,
-                                       isset( $prop['wikitext'] ) );
+                               // Don't pollute the parser cache when setting options that aren't
+                               // in ParserOptions::optionsHash()
+                               /// @todo: This should be handled closer to the actual cache instead of here, see T110269
+                               $suppressCache =
+                                       $params['disablepp'] ||
+                                       $params['disablelimitreport'] ||
+                                       $params['preview'] ||
+                                       $params['sectionpreview'] ||
+                                       $params['disabletidy'];
+
+                               if ( $suppressCache ) {
+                                       $this->content = $this->getContent( $pageObj, $pageid );
+                                       $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
+                               } else {
+                                       // Potentially cached
+                                       $p_result = $this->getParsedContent( $pageObj, $popts, $pageid,
+                                               isset( $prop['wikitext'] ) );
+                               }
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
                        $titleObj = Title::newFromText( $title );
@@ -260,6 +275,7 @@ class ApiParse extends ApiBase {
                $result_array = array();
 
                $result_array['title'] = $titleObj->getPrefixedText();
+               $result_array['pageid'] = $pageid ? $pageid : $pageObj->getId();
 
                if ( !is_null( $oldid ) ) {
                        $result_array['revid'] = intval( $oldid );
@@ -463,10 +479,13 @@ class ApiParse extends ApiBase {
        protected function makeParserOptions( WikiPage $pageObj, array $params ) {
 
                $popts = $pageObj->makeParserOptions( $this->getContext() );
-               $popts->enableLimitReport( !$params['disablepp'] );
+               $popts->enableLimitReport( !$params['disablepp'] && !$params['disablelimitreport'] );
                $popts->setIsPreview( $params['preview'] || $params['sectionpreview'] );
                $popts->setIsSectionPreview( $params['sectionpreview'] );
                $popts->setEditSection( !$params['disableeditsection'] );
+               if ( $params['disabletidy'] ) {
+                       $popts->setTidy( false );
+               }
 
                return $popts;
        }
@@ -479,14 +498,9 @@ class ApiParse extends ApiBase {
         * @return ParserOutput
         */
        private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
-               $this->content = $page->getContent( Revision::RAW ); //XXX: really raw?
+               $this->content = $this->getContent( $page, $pageId );
 
                if ( $this->section !== false && $this->content !== null ) {
-                       $this->content = $this->getSectionContent(
-                               $this->content,
-                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getPrefixedText()
-                       );
-
                        // Not cached (save or load)
                        return $this->content->getParserOutput( $page->getTitle(), null, $popts );
                }
@@ -505,6 +519,27 @@ class ApiParse extends ApiBase {
        }
 
        /**
+        * Get the content for the given page and the requested section.
+        *
+        * @param WikiPage $page
+        * @param int $pageId
+        * @return Content
+        */
+       private function getContent( WikiPage $page, $pageId = null ) {
+               $content = $page->getContent( Revision::RAW ); //XXX: really raw?
+
+               if ( $this->section !== false && $content !== null ) {
+                       $content = $this->getSectionContent(
+                               $content,
+                               !is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getPrefixedText()
+                       );
+               }
+               return $content;
+       }
+
+       /**
+        * Extract the requested section from the given Content
+        *
         * @param Content $content
         * @param string $what Identifies the content in error messages, e.g. page title.
         * @return Content|bool
@@ -761,8 +796,13 @@ class ApiParse extends ApiBase {
                        'sectiontitle' => array(
                                ApiBase::PARAM_TYPE => 'string',
                        ),
-                       'disablepp' => false,
+                       'disablepp' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'disablelimitreport' => false,
                        'disableeditsection' => false,
+                       'disabletidy' => false,
                        'generatexml' => array(
                                ApiBase::PARAM_DFLT => false,
                                ApiBase::PARAM_HELP_MSG => array(
index cc0b71a..0711c90 100644 (file)
@@ -186,7 +186,8 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                        'prop' => array(
                                ApiBase::PARAM_TYPE => array( 'size', 'hidden' ),
                                ApiBase::PARAM_DFLT => '',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                );
        }
index 4e4d2af..172ee99 100644 (file)
@@ -55,7 +55,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
 
                $result = $this->getResult();
                $pageSet = $this->getPageSet();
-               $titles = $pageSet->getTitles();
 
                // This module operates in two modes:
                // 'user': List deleted revs by a certain user
@@ -83,6 +82,21 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
+               // If we're generating titles only, we can use DISTINCT for a better
+               // query. But we can't do that in 'user' mode (wrong index), and we can
+               // only do it when sorting ASC (because MySQL apparently can't use an
+               // index backwards for grouping even though it can for ORDER BY, WTF?)
+               $dir = $params['dir'];
+               $optimizeGenerateTitles = false;
+               if ( $mode === 'all' && $params['generatetitles'] && $resultPageSet !== null ) {
+                       if ( $dir === 'newer' ) {
+                               $optimizeGenerateTitles = true;
+                       } else {
+                               $p = $this->getModulePrefix();
+                               $this->setWarning( "For better performance when generating titles, set {$p}dir=newer" );
+                       }
+               }
+
                $this->addTables( 'archive' );
                if ( $resultPageSet === null ) {
                        $this->parseParameters( $params );
@@ -90,7 +104,12 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        $this->addFields( array( 'ar_title', 'ar_namespace' ) );
                } else {
                        $this->limit = $this->getParameter( 'limit' ) ?: 10;
-                       $this->addFields( array( 'ar_title', 'ar_namespace', 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+                       $this->addFields( array( 'ar_title', 'ar_namespace' ) );
+                       if ( $optimizeGenerateTitles ) {
+                               $this->addOption( 'DISTINCT' );
+                       } else {
+                               $this->addFields( array( 'ar_timestamp', 'ar_rev_id', 'ar_id' ) );
+                       }
                }
 
                if ( $this->fld_tags ) {
@@ -130,7 +149,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        }
                }
 
-               $dir = $params['dir'];
                $miser_ns = null;
 
                if ( $mode == 'all' ) {
@@ -229,7 +247,14 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                if ( !is_null( $params['continue'] ) ) {
                        $cont = explode( '|', $params['continue'] );
                        $op = ( $dir == 'newer' ? '>' : '<' );
-                       if ( $mode == 'all' ) {
+                       if ( $optimizeGenerateTitles ) {
+                               $this->dieContinueUsageIf( count( $cont ) != 2 );
+                               $ns = intval( $cont[0] );
+                               $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
+                               $title = $db->addQuotes( $cont[1] );
+                               $this->addWhere( "ar_namespace $op $ns OR " .
+                                       "(ar_namespace = $ns AND ar_title $op= $title)" );
+                       } elseif ( $mode == 'all' ) {
                                $this->dieContinueUsageIf( count( $cont ) != 4 );
                                $ns = intval( $cont[0] );
                                $this->dieContinueUsageIf( strval( $ns ) !== $cont[0] );
@@ -259,7 +284,13 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
 
                $sort = ( $dir == 'newer' ? '' : ' DESC' );
                $orderby = array();
-               if ( $mode == 'all' ) {
+               if ( $optimizeGenerateTitles ) {
+                       // Targeting index name_title_timestamp
+                       if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
+                               $orderby[] = "ar_namespace $sort";
+                       }
+                       $orderby[] = "ar_title $sort";
+               } elseif ( $mode == 'all' ) {
                        // Targeting index name_title_timestamp
                        if ( $params['namespace'] === null || count( array_unique( $params['namespace'] ) ) > 1 ) {
                                $orderby[] = "ar_namespace $sort";
@@ -283,7 +314,9 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                foreach ( $res as $row ) {
                        if ( ++$count > $this->limit ) {
                                // We've had enough
-                               if ( $mode == 'all' ) {
+                               if ( $optimizeGenerateTitles ) {
+                                       $this->setContinueEnumParameter( 'continue', "$row->ar_namespace|$row->ar_title" );
+                               } elseif ( $mode == 'all' ) {
                                        $this->setContinueEnumParameter( 'continue',
                                                "$row->ar_namespace|$row->ar_title|$row->ar_timestamp|$row->ar_id"
                                        );
index fadecfb..347da89 100644 (file)
@@ -255,6 +255,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array_merge(
                                        array( 'ids', 'title' ), array_keys( $this->props )
                                ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_DFLT => $this->dfltNamespace,
index cc884ec..152711f 100644 (file)
@@ -136,7 +136,11 @@ class ApiQueryAllMessages extends ApiQueryBase {
                        }
 
                        if ( !$skip ) {
-                               $a = array( 'name' => $message );
+                               $a = array(
+                                       'name' => $message,
+                                       'normalizedname' => MessageCache::normalizeKey( $message ),
+                               );
+
                                $args = array();
                                if ( isset( $params['args'] ) && count( $params['args'] ) != 0 ) {
                                        $args = $params['args'];
index 0149ad2..e441991 100644 (file)
@@ -175,10 +175,14 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                        // 1999 rules works fine, but that breaks other DBs. Sigh.
                        /// @todo Once we drop support for 1992-rule DBs, we can simplify this.
                        $dbType = $db->getType();
-                       if ( $dbType === 'mysql' || $dbType === 'sqlite' ||
-                               $dbType === 'postgres' && $db->getServerVersion() >= 9.1
-                       ) {
-                               // 1999 rules, or screw-the-rules
+                       if ( $dbType === 'mysql' || $dbType === 'sqlite' ) {
+                               // Ignore the rules, or 1999 rules if you count unique keys
+                               // over non-NULL columns as satisfying the requirement for
+                               // "functional dependency" and don't require including
+                               // constant-in-WHERE columns in the GROUP BY.
+                               $this->addOption( 'GROUP BY', array( 'page_title' ) );
+                       } elseif ( $dbType === 'postgres' && $db->getServerVersion() >= 9.1 ) {
+                               // 1999 rules only counting primary keys
                                $this->addOption( 'GROUP BY', array( 'page_title', 'page_id' ) );
                        } else {
                                // 1992 rules
index 05daa7a..eb3e553 100644 (file)
@@ -41,7 +41,7 @@ class ApiQueryAllUsers extends ApiQueryBase {
         * @return string
         */
        private function getCanonicalUserName( $name ) {
-               return str_replace( '_', ' ', $name );
+               return strtr( $name, '_', ' ' );
        }
 
        public function execute() {
@@ -340,7 +340,8 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                        'rights',
                                        'editcount',
                                        'registration'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
index dbed36c..a50d58b 100644 (file)
@@ -335,6 +335,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'pageid|title',
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
index 25f0bf7..d004020 100644 (file)
@@ -303,7 +303,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                        'range',
                                        'flags'
                                ),
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'show' => array(
                                ApiBase::PARAM_TYPE => array(
index 7b3e6e3..9e82fe7 100644 (file)
@@ -184,7 +184,8 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                        'sortkey',
                                        'timestamp',
                                        'hidden',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'show' => array(
                                ApiBase::PARAM_ISMULTI => true,
index 4042bd7..6dcfe0e 100644 (file)
@@ -314,7 +314,8 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        'sortkeyprefix',
                                        'type',
                                        'timestamp',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
index 3f65a19..38eba12 100644 (file)
@@ -155,7 +155,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                        'ids',
                                        'title',
                                        'url'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'offset' => array(
                                ApiBase::PARAM_TYPE => 'integer',
index 5488984..8156edb 100644 (file)
@@ -274,6 +274,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'bitdepth',
                                        'archivename',
                                ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
index 618387d..2fe4bd9 100644 (file)
@@ -186,6 +186,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                        'iwprefix',
                                        'iwtitle',
                                ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
index aca3f70..82619cc 100644 (file)
@@ -151,7 +151,8 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'url',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'prefix' => null,
                        'title' => null,
index bcd3c32..ba36c67 100644 (file)
@@ -592,7 +592,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
                $retval = array();
                if ( is_array( $metadata ) ) {
                        foreach ( $metadata as $key => $value ) {
-                               $r = array( 'name' => $key );
+                               $r = array(
+                                       'name' => $key,
+                                       ApiResult::META_BC_BOOLS => array( 'value' ),
+                               );
                                if ( is_array( $value ) ) {
                                        $r['value'] = self::processMetaData( $value, $result );
                                } else {
index c45e0ef..b05c75c 100644 (file)
@@ -37,7 +37,7 @@ class ApiQueryInfo extends ApiQueryBase {
                $fld_notificationtimestamp = false,
                $fld_preload = false, $fld_displaytitle = false;
 
-       private $params, $titles, $missing, $everything, $pageCounter;
+       private $params, $titles, $missing, $everything;
 
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
index 7be18b2..9f77b84 100644 (file)
@@ -185,6 +185,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                        'lllang',
                                        'lltitle',
                                ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
index 8f8a17d..25e534e 100644 (file)
@@ -146,7 +146,8 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                        'url',
                                        'langname',
                                        'autonym',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'lang' => null,
                        'title' => null,
index 7b2381f..d87ad1e 100644 (file)
@@ -401,7 +401,8 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        'parsedcomment',
                                        'details',
                                        'tags'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'type' => array(
                                ApiBase::PARAM_TYPE => $config->get( 'LogTypes' )
index 7bcaf24..ad641a4 100644 (file)
@@ -140,7 +140,8 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                                        'ids',
                                        'title',
                                        'value',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'continue' => array(
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
index 033310d..5ef2f70 100644 (file)
@@ -216,7 +216,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                        'parsedcomment',
                                        'expiry',
                                        'level'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'continue' => array(
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
index a2c2844..8e7031c 100644 (file)
@@ -31,8 +31,6 @@
  * @ingroup API
  */
 class ApiQueryRandom extends ApiQueryGeneratorBase {
-       private $pageIDs;
-
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'rn' );
        }
@@ -46,102 +44,131 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        }
 
        /**
-        * @param string $randstr
-        * @param int $limit
-        * @param int $namespace
-        * @param ApiPageSet $resultPageSet
-        * @param bool $redirect
-        * @return void
+        * Actually perform the query and add pages to the result.
+        * @param ApiPageSet|null $resultPageSet
+        * @param int $limit Number of pages to fetch
+        * @param string|null $start Starting page_random
+        * @param int|null $startId Starting page_id
+        * @param string|null $end Ending page_random
+        * @return array (int, string|null) Number of pages left to query and continuation string
         */
-       protected function prepareQuery( $randstr, $limit, $namespace, &$resultPageSet, $redirect ) {
+       protected function runQuery( $resultPageSet, $limit, $start, $startId, $end ) {
+               $params = $this->extractRequestParams();
+
                $this->resetQueryParams();
                $this->addTables( 'page' );
-               $this->addOption( 'LIMIT', $limit );
-               $this->addWhereFld( 'page_namespace', $namespace );
-               $this->addWhereRange( 'page_random', 'newer', $randstr, null );
-               $this->addWhereFld( 'page_is_redirect', $redirect );
+               $this->addFields( array( 'page_id', 'page_random' ) );
                if ( is_null( $resultPageSet ) ) {
-                       $this->addFields( array( 'page_id', 'page_title', 'page_namespace' ) );
+                       $this->addFields( array( 'page_title', 'page_namespace' ) );
                } else {
                        $this->addFields( $resultPageSet->getPageTableFields() );
                }
-       }
+               $this->addWhereFld( 'page_namespace', $params['namespace'] );
+               if ( $params['redirect'] || $params['filterredir'] === 'redirects' ) {
+                       $this->addWhereFld( 'page_is_redirect', 1 );
+               } elseif ( $params['filterredir'] === 'nonredirects' ) {
+                       $this->addWhereFld( 'page_is_redirect', 0 );
+               } elseif ( is_null( $resultPageSet ) ) {
+                       $this->addFields( array( 'page_is_redirect' ) );
+               }
+               $this->addOption( 'LIMIT', $limit + 1 );
+
+               if ( $start !== null ) {
+                       $start = $this->getDB()->addQuotes( $start );
+                       if ( $startId !== null ) {
+                               $startId = (int)$startId;
+                               $this->addWhere( "page_random = $start AND page_id >= $startId OR page_random > $start" );
+                       } else {
+                               $this->addWhere( "page_random >= $start" );
+                       }
+               }
+               if ( $end !== null ) {
+                       $this->addWhere( 'page_random < ' . $this->getDB()->addQuotes( $end ) );
+               }
+               $this->addOption( 'ORDER BY', array( 'page_random', 'page_id' ) );
+
+               $result = $this->getResult();
+               $path = array( 'query', $this->getModuleName() );
 
-       /**
-        * @param ApiPageSet $resultPageSet
-        * @return int
-        */
-       protected function runQuery( $resultPageSet = null ) {
                $res = $this->select( __METHOD__ );
                $count = 0;
                foreach ( $res as $row ) {
-                       $count++;
+                       if ( $count++ >= $limit ) {
+                               return array( 0, "{$row->page_random}|{$row->page_id}" );
+                       }
                        if ( is_null( $resultPageSet ) ) {
-                               // Prevent duplicates
-                               if ( !in_array( $row->page_id, $this->pageIDs ) ) {
-                                       $fit = $this->getResult()->addValue(
-                                               array( 'query', $this->getModuleName() ),
-                                               null, $this->extractRowInfo( $row ) );
-                                       if ( !$fit ) {
-                                               // We can't really query-continue a random list.
-                                               // Return an insanely high value so
-                                               // $count < $limit is false
-                                               return 1E9;
-                                       }
-                                       $this->pageIDs[] = $row->page_id;
+                               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+                               $page = array(
+                                       'id' => (int)$row->page_id,
+                               );
+                               ApiQueryBase::addTitleInfo( $page, $title );
+                               if ( isset( $row->page_is_redirect ) ) {
+                                       $page['redirect'] = (bool)$row->page_is_redirect;
+                               }
+                               $fit = $result->addValue( $path, null, $page );
+                               if ( !$fit ) {
+                                       return array( 0, "{$row->page_random}|{$row->page_id}" );
                                }
                        } else {
                                $resultPageSet->processDbRow( $row );
                        }
                }
 
-               return $count;
+               return array( $limit - $count, null );
        }
 
        /**
-        * @param ApiPageSet $resultPageSet
-        * @return void
+        * @param ApiPageSet|null $resultPageSet
         */
        public function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
-               $result = $this->getResult();
-               $this->pageIDs = array();
-
-               $this->prepareQuery(
-                       wfRandom(),
-                       $params['limit'],
-                       $params['namespace'],
-                       $resultPageSet,
-                       $params['redirect']
-               );
-               $count = $this->runQuery( $resultPageSet );
-               if ( $count < $params['limit'] ) {
-                       /* We got too few pages, we probably picked a high value
-                        * for page_random. We'll just take the lowest ones, see
-                        * also the comment in Title::getRandomTitle()
-                        */
-                       $this->prepareQuery(
-                               0,
-                               $params['limit'] - $count,
-                               $params['namespace'],
-                               $resultPageSet,
-                               $params['redirect']
-                       );
-                       $this->runQuery( $resultPageSet );
+
+               // Since 'filterredir" will always be set in $params, we have to dig
+               // into the WebRequest to see if it was actually passed.
+               $request = $this->getMain()->getRequest();
+               if ( $request->getCheck( $this->encodeParamName( 'filterredir' ) ) ) {
+                       $this->requireMaxOneParameter( $params, 'filterredir', 'redirect' );
                }
 
-               if ( is_null( $resultPageSet ) ) {
-                       $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+               if ( $params['redirect'] ) {
+                       $this->logFeatureUsage( "list=random&rnredirect=" );
+               }
+
+               if ( isset( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) != 4 );
+                       $rand = $cont[0];
+                       $start = $cont[1];
+                       $startId = (int)$cont[2];
+                       $end = $cont[3] ? $rand : null;
+                       $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $rand ) );
+                       $this->dieContinueUsageIf( !preg_match( '/^0\.\d+$/', $start ) );
+                       $this->dieContinueUsageIf( $cont[2] !== (string)$startId );
+                       $this->dieContinueUsageIf( $cont[3] !== '0' && $cont[3] !== '1' );
+               } else {
+                       $rand = wfRandom();
+                       $start = $rand;
+                       $startId = null;
+                       $end = null;
                }
-       }
 
-       private function extractRowInfo( $row ) {
-               $title = Title::makeTitle( $row->page_namespace, $row->page_title );
-               $vals = array();
-               $vals['id'] = intval( $row->page_id );
-               ApiQueryBase::addTitleInfo( $vals, $title );
+               list( $left, $continue ) = $this->runQuery( $resultPageSet, $params['limit'], $start, $startId, $end );
+               if ( $end === null && $continue === null ) {
+                       // Wrap around. We do this even if $left === 0 for continuation
+                       // (saving a DB query in this rare case probably isn't worth the
+                       // added code complexity it would require).
+                       $end = $rand;
+                       list( $left, $continue ) = $this->runQuery( $resultPageSet, $left, null, null, $end );
+               }
+
+               if ( $continue !== null ) {
+                       $endFlag = $end === null ? 0 : 1;
+                       $this->setContinueEnumParameter( 'continue', "$rand|$continue|$endFlag" );
+               }
 
-               return $vals;
+               if ( is_null( $resultPageSet ) ) {
+                       $this->getResult()->addIndexedTagName( array( 'query', $this->getModuleName() ), 'page' );
+               }
        }
 
        public function getCacheMode( $params ) {
@@ -154,14 +181,24 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_ISMULTI => true
                        ),
+                       'filterredir' => array(
+                               ApiBase::PARAM_TYPE => array( 'all', 'redirects', 'nonredirects' ),
+                               ApiBase::PARAM_DFLT => 'nonredirects', // for BC
+                       ),
+                       'redirect' => array(
+                               ApiBase::PARAM_DEPRECATED => true,
+                               ApiBase::PARAM_DFLT => false,
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 1,
                                ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => 10,
-                               ApiBase::PARAM_MAX2 => 20
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue'
                        ),
-                       'redirect' => false,
                );
        }
 
index 74bccc2..f579062 100644 (file)
@@ -636,7 +636,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                        'loginfo',
                                        'tags',
                                        'sha1',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'token' => array(
                                ApiBase::PARAM_DEPRECATED => true,
index 349e7fa..65fd727 100644 (file)
@@ -316,18 +316,19 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                        'size',
                                        'wordcount',
                                        'timestamp',
-                                       'score',
                                        'snippet',
                                        'titlesnippet',
                                        'redirecttitle',
                                        'redirectsnippet',
                                        'sectiontitle',
                                        'sectionsnippet',
-                                       'hasrelated',
                                        'isfilematch',
                                        'categorysnippet',
+                                       'score', // deprecated
+                                       'hasrelated', // deprecated
                                ),
                                ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'offset' => array(
                                ApiBase::PARAM_DFLT => 0,
index 1ce5761..bcd5d9e 100644 (file)
@@ -854,7 +854,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        'variables',
                                        'protocols',
                                        'defaultoptions',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'filteriw' => array(
                                ApiBase::PARAM_TYPE => array(
index 45f73b2..284bb82 100644 (file)
@@ -163,7 +163,8 @@ class ApiQueryTags extends ApiQueryBase {
                                        'source',
                                        'active',
                                ),
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        )
                );
        }
index 480a1ab..e303094 100644 (file)
@@ -491,7 +491,8 @@ class ApiQueryContributions extends ApiQueryBase {
                                        'flags',
                                        'patrolled',
                                        'tags'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'show' => array(
                                ApiBase::PARAM_ISMULTI => true,
index e003e31..251c42b 100644 (file)
@@ -78,7 +78,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
 
        protected function getCurrentUserInfo() {
                $user = $this->getUser();
-               $result = $this->getResult();
                $vals = array();
                $vals['id'] = intval( $user->getId() );
                $vals['name'] = $user->getName();
@@ -268,10 +267,12 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                        'registrationdate',
                                        'unreadcount',
                                ),
-                               ApiBase::PARAM_HELP_MSG => array(
-                                       'apihelp-query+userinfo-param-prop',
-                                       self::WL_UNREAD_LIMIT - 1,
-                                       self::WL_UNREAD_LIMIT . '+',
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(
+                                       'unreadcount' => array(
+                                               'apihelp-query+userinfo-paramvalue-prop-unreadcount',
+                                               self::WL_UNREAD_LIMIT - 1,
+                                               self::WL_UNREAD_LIMIT . '+',
+                                       ),
                                ),
                        )
                );
index 8b1a075..1d0048c 100644 (file)
@@ -305,7 +305,8 @@ class ApiQueryUsers extends ApiQueryBase {
                                        'registration',
                                        'emailable',
                                        'gender',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'users' => array(
                                ApiBase::PARAM_ISMULTI => true
index f45d7d7..fc7b80c 100644 (file)
@@ -171,7 +171,8 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'changed',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG_PER_VALUE => array(),
                        ),
                        'show' => array(
                                ApiBase::PARAM_ISMULTI => true,
index f0c7430..142a780 100644 (file)
@@ -108,12 +108,24 @@ class ApiResult implements ApiSerializable {
        const META_TYPE = '_type';
 
        /**
-        * Key (rather than "name" or other default) for when META_TYPE is 'kvp' or
-        * 'BCkvp'. Value is string.
+        * Key for the metadata item whose value specifies the name used for the
+        * kvp key in the alternative output format with META_TYPE 'kvp' or
+        * 'BCkvp', i.e. the "name" in <container><item name="key">value</item></container>.
+        * Value is string.
         * @since 1.25
         */
        const META_KVP_KEY_NAME = '_kvpkeyname';
 
+       /**
+        * Key for the metadata item that indicates that the KVP key should be
+        * added into an assoc value, i.e. {"key":{"val1":"a","val2":"b"}}
+        * transforms to {"name":"key","val1":"a","val2":"b"} rather than
+        * {"name":"key","value":{"val1":"a","val2":"b"}}.
+        * Value is boolean.
+        * @since 1.26
+        */
+       const META_KVP_MERGE = '_kvpmerge';
+
        /**
         * Key for the 'BC bools' metadata item. Value is string[].
         * Note no setter is provided.
@@ -276,7 +288,7 @@ class ApiResult implements ApiSerializable {
         * @param int $flags Zero or more OR-ed flags like OVERRIDE | ADD_ON_TOP.
         */
        public static function setValue( array &$arr, $name, $value, $flags = 0 ) {
-               if ( !( $flags & ApiResult::NO_VALIDATE ) ) {
+               if ( ( $flags & ApiResult::NO_VALIDATE ) !== ApiResult::NO_VALIDATE ) {
                        $value = self::validateValue( $value );
                }
 
@@ -390,6 +402,11 @@ class ApiResult implements ApiSerializable {
                $arr = &$this->path( $path, ( $flags & ApiResult::ADD_ON_TOP ) ? 'prepend' : 'append' );
 
                if ( $this->checkingSize && !( $flags & ApiResult::NO_SIZE_CHECK ) ) {
+                       // self::valueSize needs the validated value. Then flag
+                       // to not re-validate later.
+                       $value = self::validateValue( $value );
+                       $flags |= ApiResult::NO_VALIDATE;
+
                        $newsize = $this->size + self::valueSize( $value );
                        if ( $this->maxSize !== false && $newsize > $this->maxSize ) {
                                /// @todo Add i18n message when replacing calls to ->setWarning()
@@ -941,19 +958,43 @@ class ApiResult implements ApiSerializable {
                                                : $transformTypes['ArmorKVP'];
                                        $valKey = isset( $transforms['BC'] ) ? '*' : 'value';
                                        $assocAsObject = !empty( $transformTypes['AssocAsObject'] );
+                                       $merge = !empty( $metadata[self::META_KVP_MERGE] );
 
                                        $ret = array();
                                        foreach ( $data as $k => $v ) {
-                                               $item = array(
-                                                       $key => $k,
-                                                       $valKey => $v,
-                                               );
-                                               if ( $strip === 'none' ) {
-                                                       $item += array(
-                                                               self::META_PRESERVE_KEYS => array( $key ),
-                                                               self::META_CONTENT => $valKey,
-                                                               self::META_TYPE => 'assoc',
+                                               if ( $merge && ( is_array( $v ) || is_object( $v ) ) ) {
+                                                       $vArr = (array)$v;
+                                                       if ( isset( $vArr[self::META_TYPE] ) ) {
+                                                               $mergeType = $vArr[self::META_TYPE];
+                                                       } elseif ( is_object( $v ) ) {
+                                                               $mergeType = 'assoc';
+                                                       } else {
+                                                               $keys = array_keys( $vArr );
+                                                               sort( $keys, SORT_NUMERIC );
+                                                               $mergeType = ( $keys === array_keys( $keys ) ) ? 'array' : 'assoc';
+                                                       }
+                                               } else {
+                                                       $mergeType = 'n/a';
+                                               }
+                                               if ( $mergeType === 'assoc' ) {
+                                                       $item = $vArr + array(
+                                                               $key => $k,
+                                                       );
+                                                       if ( $strip === 'none' ) {
+                                                               self::setPreserveKeysList( $item, array( $key ) );
+                                                       }
+                                               } else {
+                                                       $item = array(
+                                                               $key => $k,
+                                                               $valKey => $v,
                                                        );
+                                                       if ( $strip === 'none' ) {
+                                                               $item += array(
+                                                                       self::META_PRESERVE_KEYS => array( $key ),
+                                                                       self::META_CONTENT => $valKey,
+                                                                       self::META_TYPE => 'assoc',
+                                                               );
+                                                       }
                                                }
                                                $ret[] = $assocAsObject ? (object)$item : $item;
                                        }
@@ -1043,14 +1084,12 @@ class ApiResult implements ApiSerializable {
         * or the sum of the strlen()s of the elements if the item is an array.
         * @note Once the deprecated public self::size is removed, we can rename
         *       this back to a less awkward name.
-        * @param mixed $value
+        * @param mixed $value Validated value (see self::validateValue())
         * @return int
         */
        private static function valueSize( $value ) {
                $s = 0;
-               if ( is_array( $value ) ||
-                       is_object( $value ) && !is_callable( array( $value, '__toString' ) )
-               ) {
+               if ( is_array( $value ) ) {
                        foreach ( $value as $k => $v ) {
                                if ( !self::isMetadataKey( $s ) ) {
                                        $s += self::valueSize( $v );
@@ -1238,7 +1277,7 @@ class ApiResult implements ApiSerializable {
         */
        public static function setElement( &$arr, $name, $value, $flags = 0 ) {
                wfDeprecated( __METHOD__, '1.25' );
-               return self::setValue( $arr, $name, $value, $flags );
+               self::setValue( $arr, $name, $value, $flags );
        }
 
        /**
@@ -1452,7 +1491,7 @@ class ApiResult implements ApiSerializable {
         */
        public static function size( $value ) {
                wfDeprecated( __METHOD__, '1.25' );
-               return self::valueSize( $value );
+               return self::valueSize( self::validateValue( $value ) );
        }
 
        /**
index 2896231..bb5c145 100644 (file)
@@ -32,6 +32,8 @@
 class ApiRevisionDelete extends ApiBase {
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $params = $this->extractRequestParams();
                $user = $this->getUser();
 
index 02e62a0..6a3346f 100644 (file)
@@ -40,6 +40,8 @@ class ApiRollback extends ApiBase {
        private $mUser = null;
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $user = $this->getUser();
                $params = $this->extractRequestParams();
 
index 1f469b8..a66b356 100644 (file)
@@ -112,6 +112,7 @@ class ApiStashEdit extends ApiBase {
                if ( $user->pingLimiter( 'stashedit' ) ) {
                        $status = 'ratelimited';
                } elseif ( $wgMemc->lock( $key, 0, 30 ) ) {
+                       /** @noinspection PhpUnusedLocalVariableInspection */
                        $unlocker = new ScopedCallback( function() use ( $key ) {
                                global $wgMemc;
                                $wgMemc->unlock( $key );
@@ -276,36 +277,55 @@ class ApiStashEdit extends ApiBase {
                }
 
                $dbr = wfGetDB( DB_SLAVE );
-               // Check that no templates used in the output changed...
-               $cWhr = array(); // conditions to find changes/creations
-               $dWhr = array(); // conditions to find deletions
+
+               $templates = array(); // conditions to find changes/creations
+               $templateUses = 0; // expected existing templates
                foreach ( $editInfo->output->getTemplateIds() as $ns => $stuff ) {
                        foreach ( $stuff as $dbkey => $revId ) {
-                               $cWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey,
-                                       'page_latest != ' . intval( $revId ) );
-                               $dWhr[] = array( 'page_namespace' => $ns, 'page_title' => $dbkey );
+                               $templates[(string)$ns][$dbkey] = (int)$revId;
+                               ++$templateUses;
                        }
                }
-               $change = $dbr->selectField( 'page', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
-               $n = $dbr->selectField( 'page', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
-               if ( $change || $n != count( $dWhr ) ) {
-                       wfDebugLog( 'StashEdit', "Stale cache for key '$key'; template changed." );
-                       return false;
+               // Check that no templates used in the output changed...
+               if ( count( $templates ) ) {
+                       $res = $dbr->select(
+                               'page',
+                               array( 'ns' => 'page_namespace', 'dbk' => 'page_title', 'page_latest' ),
+                               $dbr->makeWhereFrom2d( $templates, 'page_namespace', 'page_title' ),
+                               __METHOD__
+                       );
+                       $changed = false;
+                       foreach ( $res as $row ) {
+                               $changed = $changed || ( $row->page_latest != $templates[$row->ns][$row->dbk] );
+                       }
+
+                       if ( $changed || $res->numRows() != $templateUses ) {
+                               wfDebugLog( 'StashEdit', "Stale cache for key '$key'; template changed." );
+                               return false;
+                       }
                }
 
-               // Check that no files used in the output changed...
-               $cWhr = array(); // conditions to find changes/creations
-               $dWhr = array(); // conditions to find deletions
+               $files = array(); // conditions to find changes/creations
                foreach ( $editInfo->output->getFileSearchOptions() as $name => $options ) {
-                       $cWhr[] = array( 'img_name' => $dbkey,
-                               'img_sha1 != ' . $dbr->addQuotes( strval( $options['sha1'] ) ) );
-                       $dWhr[] = array( 'img_name' => $dbkey );
+                       $files[$name] = (string)$options['sha1'];
                }
-               $change = $dbr->selectField( 'image', '1', $dbr->makeList( $cWhr, LIST_OR ), __METHOD__ );
-               $n = $dbr->selectField( 'image', 'COUNT(*)', $dbr->makeList( $dWhr, LIST_OR ), __METHOD__ );
-               if ( $change || $n != count( $dWhr ) ) {
-                       wfDebugLog( 'StashEdit', "Stale cache for key '$key'; file changed." );
-                       return false;
+               // Check that no files used in the output changed...
+               if ( count( $files ) ) {
+                       $res = $dbr->select(
+                               'image',
+                               array( 'name' => 'img_name', 'img_sha1' ),
+                               array( 'img_name' => array_keys( $files ) ),
+                               __METHOD__
+                       );
+                       $changed = false;
+                       foreach ( $res as $row ) {
+                               $changed = $changed || ( $row->img_sha1 != $files[$row->name] );
+                       }
+
+                       if ( $changed || $res->numRows() != count( $files ) ) {
+                               wfDebugLog( 'StashEdit', "Stale cache for key '$key'; file changed." );
+                               return false;
+                       }
                }
 
                wfDebugLog( 'StashEdit', "Cache hit for key '$key'." );
index 28702b1..cd50ee6 100644 (file)
@@ -30,6 +30,8 @@
 class ApiUndelete extends ApiBase {
 
        public function execute() {
+               $this->useTransactionalTimeLimit();
+
                $params = $this->extractRequestParams();
 
                if ( !$this->getUser()->isAllowed( 'undelete' ) ) {
index 54294c9..398337b 100644 (file)
@@ -527,17 +527,28 @@ class ApiUpload extends ApiBase {
                                $this->dieUsage( $msg, 'filetype-banned', 0, $extradata );
                                break;
                        case UploadBase::VERIFICATION_ERROR:
+                               $params = $verification['details'];
+                               $key = array_shift( $params );
+                               $msg = $this->msg( $key, $params )->inLanguage( 'en' )->useDatabase( false )->text();
                                ApiResult::setIndexedTagName( $verification['details'], 'detail' );
-                               $this->dieUsage( 'This file did not pass file verification', 'verification-error',
+                               $this->dieUsage( "This file did not pass file verification: $msg", 'verification-error',
                                        0, array( 'details' => $verification['details'] ) );
                                break;
                        case UploadBase::HOOK_ABORTED:
-                               $this->dieUsage( "The modification you tried to make was aborted by an extension hook",
-                                       'hookaborted', 0, array( 'error' => $verification['error'] ) );
+                               if ( is_array( $verification['error'] ) ) {
+                                       $params = $verification['error'];
+                               } elseif ( $verification['error'] !== '' ) {
+                                       $params = array( $verification['error'] );
+                               } else {
+                                       $params = array( 'hookaborted' );
+                               }
+                               $key = array_shift( $params );
+                               $msg = $this->msg( $key, $params )->inLanguage( 'en' )->useDatabase( false )->text();
+                               $this->dieUsage( $msg, 'hookaborted', 0, array( 'details' => $verification['error'] ) );
                                break;
                        default:
                                $this->dieUsage( 'An unknown error occurred', 'unknown-error',
-                                       0, array( 'code' => $verification['status'] ) );
+                                       0, array( 'details' => array( 'code' => $verification['status'] ) ) );
                                break;
                }
        }
index aa456f0..7bdf29a 100644 (file)
@@ -4,7 +4,8 @@
                        "Meno25",
                        "أحمد المحمودي",
                        "Khaled",
-                       "Fatz"
+                       "Fatz",
+                       "Hiba Alshawi"
                ]
        },
        "apihelp-main-param-format": "صيغة الخرج.",
@@ -24,5 +25,6 @@
        "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
        "apihelp-emailuser-description": "مراسلة المستخدم",
        "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
 }
index 420e6ac..841bb2a 100644 (file)
@@ -1,14 +1,15 @@
 {
        "@metadata": {
                "authors": [
-                       "Palapa"
+                       "Palapa",
+                       "Semso98"
                ]
        },
        "apihelp-main-param-action": "Koju akciju izvesti.",
        "apihelp-main-param-format": "Format izlaza.",
        "apihelp-block-description": "Blokiraj korisnika",
        "apihelp-block-param-reason": "Razlog za blokadu",
-       "apihelp-block-example-ip-simple": "Blokiraj IP 192.0.2.5 na tri dana sa razlogom \"Prvi napad\"",
+       "apihelp-block-example-ip-simple": "Blokiraj IP adresu <kbd>192.0.2.5</kbd> na tri dana sa razlogom <kbd>Prvi napad</kbd>.",
        "apihelp-compare-param-fromtitle": "Prvi naslov za poređenje.",
        "apihelp-delete-description": "Obriši stranicu.",
        "apihelp-edit-param-text": "Sadržaj stranice.",
index 7aa1730..4aacd1a 100644 (file)
@@ -3,7 +3,9 @@
                "authors": [
                        "Toniher",
                        "Macofe",
-                       "Xavier Dengra"
+                       "Xavier Dengra",
+                       "F3RaN",
+                       "Eduardo Martinez"
                ]
        },
        "apihelp-main-param-format": "El format de la sortida.",
        "apihelp-feedrecentchanges-example-simple": "Mostra els canvis recents.",
        "apihelp-help-example-recursive": "Tota l'ajuda en una sola pàgina.",
        "apihelp-import-param-rootpage": "Importa com a subpàgina d'aquesta pàgina.",
-       "apihelp-login-example-login": "Inicia sessió."
+       "apihelp-login-param-name": "Nom d'usuari.",
+       "apihelp-login-param-password": "Contrasenya.",
+       "apihelp-login-example-login": "Inicia sessió.",
+       "apihelp-protect-param-cascade": "Activa la protecció en cascada (és a dir, protegeix les plantilles i imatges utilitzades en aquesta pàgina). S'ignora si cap dels nivells de protecció suporta la protecció en cascada.",
+       "apihelp-query+pageswithprop-example-generator": "Obtenir informació addicional sobre les 10 primeres pàgines utilitzant <code>__NOTOC__</code>.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Afegeix el títol de la pàgina.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Afegeix l'usuari que ha fet l'edició.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Afegeix l'IDentificador de l'usuari que ha fet l'edició.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Afegeix comentari de l'edició.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Afegeix timestamp de l'edició.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta les modificacions que són vigilades.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Afegeix informació de registre, si s'escau."
 }
diff --git a/includes/api/i18n/ckb.json b/includes/api/i18n/ckb.json
new file mode 100644 (file)
index 0000000..025741c
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Pirehelokan"
+               ]
+       },
+       "apihelp-parse-param-disabletoc": "پێرستی ناوەرۆک پیشان مەدە."
+}
index 5e86bcf..7c4ddcb 100644 (file)
@@ -12,7 +12,8 @@
                        "Purodha",
                        "Andreasburmeister",
                        "Anomie",
-                       "Duder"
+                       "Duder",
+                       "Ljonka"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokumentation]]\n* [[mw:API:FAQ/de|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].",
        "apihelp-expandtemplates-param-title": "Titel der Seite.",
        "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
        "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <nowiki>{{REVISIONID}}</nowiki> und ähnlichen Variablen verwendet wird.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Der expandierte Wikitext.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "Der XML-Parserbaum der Eingabe.",
        "apihelp-expandtemplates-param-includecomments": "Ob HTML-Kommentare in der Ausgabe eingeschlossen werden sollen.",
        "apihelp-expandtemplates-param-generatexml": "XML-Parserbaum erzeugen (ersetzt durch $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Den Wikitext <kbd><nowiki>{{Project:Spielwiese}}</nowiki></kbd> expandieren.",
        "apihelp-parse-paramvalue-prop-templates": "Gibt die Vorlagen im geparsten Wikitext zurück.",
        "apihelp-parse-paramvalue-prop-images": "Gibt die Bilder im geparsten Wikitext zurück.",
        "apihelp-parse-paramvalue-prop-externallinks": "Gibt die externen Links im geparsten Wikitext zurück.",
+       "apihelp-parse-paramvalue-prop-revid": "Ergänzt die Versionskennung der geparsten Seite.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Ergänzt den Titel des geparsten Wikitextes.",
        "apihelp-parse-param-section": "Gibt nur den Inhalt dieses Abschnittes zurück oder erstellt einen neuen Abschnitt, wenn <kbd>new</kbd> angegeben wird.\n\n<kbd>new</kbd> wird nur ausgewertet, wenn auch <var>text</var> angegeben wurde.",
        "apihelp-parse-param-sectiontitle": "Überschrift des neuen Abschnittes, wenn <var>section</var> = <kbd>new</kbd> ist.\n\nAnders als beim Bearbeiten der Seite wird der Parameter nicht durch die <var>summary</var> ersetzt, wenn er weggelassen oder leer ist.",
-       "apihelp-parse-param-disableeditsection": "Deaktiviert Abschnittsbearbeitungslinks in der Parserausgabe.",
+       "apihelp-parse-param-disableeditsection": "Lässt Abschnittsbearbeitungslinks in der Parserausgabe weg.",
        "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
-       "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe deaktivieren.",
+       "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe weglassen.",
        "apihelp-parse-example-page": "Eine Seite parsen.",
        "apihelp-parse-example-text": "Wikitext parsen.",
        "apihelp-parse-example-texttitle": "Parst den Wikitext über die Eingabe des Seitentitels.",
        "apihelp-protect-param-protections": "Liste der Schutzebenen nach dem Format <kbd>Aktion=Ebene</kbd> (z.B. <kbd>edit=sysop</kbd>).\n\n<strong>HINWEIS:</strong> Wenn eine Aktion nicht angegeben wird, wird deren Schutz entfernt.",
        "apihelp-protect-param-expiry": "Zeitstempel des Schutzablaufs. Wenn nur ein Zeitstempel übergeben wird, ist dieser für alle Seitenschutze gültig. Um eine unendliche Schutzdauer festzulegen, kannst du die Werte <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> oder <kbd>never</kbd> übergeben.",
        "apihelp-protect-param-reason": "Grund für den Seitenschutz oder dessen Aufhebung.",
-       "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (alle eingebundenen Seiten werden ebenfalls geschützt). Wenn die übergebenen Schutzebenen keinen Kaskadenschutz unterstützen, wird dieser Parameter ignoriert.",
+       "apihelp-protect-param-cascade": "Aktiviert den Kaskadenschutz (z.&nbsp;B. werden eingebundene Vorlagen und Bilder in dieser Seite geschützt). Wird ignoriert, falls keine der angegebenen Schutzebenen Kaskaden unterstützt.",
        "apihelp-protect-param-watch": "Wenn vorhanden, fügt dieser Parameter die zu (ent-)sperrende Seite der Beobachtungsliste des aktuellen Benutzers hinzu.",
        "apihelp-protect-param-watchlist": "Die Seite bedingungslos zur Beobachtungsliste des aktuellen Benutzers hinzufügen oder von ihr entfernen, Einstellungen verwenden oder Beobachtung nicht ändern.",
        "apihelp-protect-example-protect": "Schützt eine Seite",
        "apihelp-query+allcategories-param-min": "Gibt nur Kategorien zurück, die mindestens die angegebene Anzahl an Einträgen haben.",
        "apihelp-query+allcategories-param-max": "Gibt nur Kategorien zurück, die höchstens die angegebene Anzahl an Einträgen haben.",
        "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
-       "apihelp-query+allcategories-param-prop": "Zurückzugebende Eigenschaften:\n;size: Ergänzt die Anzahl der Einträge in der Antwort.\n;hidden: Markiert über _&#95;HIDDENCAT_&#95; versteckte Kategorien.",
+       "apihelp-query+allcategories-param-prop": "Zurückzugebende Eigenschaften:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Ergänzt die Anzahl der Einträge in der Antwort.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Markiert über <code>_&#95;HIDDENCAT_&#95;</code> versteckte Kategorien.",
        "apihelp-query+allcategories-example-size": "Listet Kategorien mit der Anzahl ihrer Einträge auf.",
        "apihelp-query+allcategories-example-generator": "Bezieht Informationen über die Kategorieseite selbst für Kategorien, die mit <kbd>List</kbd> beginnen.",
        "apihelp-query+alldeletedrevisions-description": "Bezieht alle gelöschten Versionen eines Benutzers oder eines Namensraumes.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
        "apihelp-query+allfileusages-param-from": "Titel der Datei, bei der die Aufzählung beginnen soll.",
        "apihelp-query+allfileusages-param-to": "Titel der Datei, bei der die Aufzählung enden soll.",
+       "apihelp-query+allfileusages-param-prop": "Informationsteile zum Einbinden:",
        "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
        "apihelp-query+allfileusages-param-dir": "Aufzählungsrichtung.",
        "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
        "apihelp-query+allredirects-param-to": "Titel der Weiterleitung, bei der die Auflistung enden soll.",
        "apihelp-query+allredirects-param-prefix": "Weiterleitungen auflisten, deren Zielseiten mit diesem Wert beginnen.",
        "apihelp-query+allredirects-param-unique": "Nur Weiterleitungen mit unterschiedlichen Zielseiten anzeigen. Kann nicht zusammen mit $1prop=ids|fragment|interwiki benutzt werden. Bei Nutzung als Generator werden die Zielseiten anstelle der Ursprungsseiten zurückgegeben.",
-       "apihelp-query+allredirects-param-prop": "Zu beziehende Informationen:\n; ids: Ergänzt die Seitenkennung der Weiterleitungsseite (kann nicht zusammen mit <var>$1unique</var> benutzt werden).\n; title: Ergänzt den Titel der Weiterleitung.\n; fragment: Ergänzt das Abschnittsziel der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).\n; interwiki: Ergänzt das Interwiki-Präfix der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+       "apihelp-query+allredirects-param-prop": "Zu beziehende Informationen:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Ergänzt die Seitenkennung der Weiterleitungsseite (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Ergänzt den Titel der Weiterleitung.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Ergänzt das Abschnittsziel der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Ergänzt das Interwiki-Präfix der Weiterleitung, falls vorhanden (kann nicht zusammen mit <var>$1unique</var> benutzt werden).",
        "apihelp-query+allredirects-param-namespace": "Der zu untersuchende Namensraum.",
        "apihelp-query+allredirects-param-limit": "Gesamtanzahl der aufzulistenden Einträge.",
        "apihelp-query+allredirects-param-dir": "Aufzählungsrichtung.",
        "apihelp-query+filearchive-param-from": "Der Bildertitel, bei dem die Auflistung beginnen soll.",
        "apihelp-query+filearchive-param-to": "Der Bildertitel, bei dem die Auflistung enden soll.",
        "apihelp-query+filearchive-param-limit": "Wie viele Bilder insgesamt zurückgegeben werden sollen.",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Ergänzt die SHA-1-Prüfsumme für das Bild.",
        "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
        "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
        "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
        "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
        "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
        "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
        "apihelp-query+prefixsearch-param-search": "Such-Zeichenfolge.",
+       "apihelp-query+search-param-prop": "Eigenschaften zur Rückgabe:",
        "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
        "apihelp-query+search-example-text": "Texte nach <kbd>meaning</kbd> durchsuchen.",
        "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
        "apihelp-query+tags-description": "Änderungs-Tags auflisten.",
        "apihelp-query+tags-example-simple": "Verfügbare Tags auflisten",
        "apihelp-query+usercontribs-description": "Alle Bearbeitungen von einem Benutzer abrufen.",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Ergänzt die Seiten- und Versionskennung.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Fügt den bürgerlichen Namen des Benutzers hinzu.",
        "apihelp-query+userinfo-example-simple": "Informationen über den aktuellen Benutzer abrufen",
        "apihelp-query+users-description": "Informationen über eine Liste von Benutzern abrufen.",
        "apihelp-rsd-description": "Ein RSD-Schema (Really Simple Discovery) exportieren.",
        "api-help-param-deprecated": "Veraltet.",
        "api-help-param-required": "Dieser Parameter ist erforderlich.",
        "api-help-datatypes-header": "Datentypen",
-       "api-help-param-list": "{{PLURAL:$1|1=Ein Wert|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Einer der folgenden Werte|2=Werte (mit <kbd>{{!}}</kbd> trennen)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Muss leer sein|Kann leer sein oder $2}}",
        "api-help-param-limit": "Nicht mehr als $1 erlaubt.",
        "api-help-param-limit2": "Nicht mehr als $1 ($2 für Bots) erlaubt.",
index 867f594..281dd29 100644 (file)
@@ -2,15 +2,25 @@
        "@metadata": {
                "authors": [
                        "Glavkos",
-                       "Protnet"
+                       "Protnet",
+                       "Stam.nikos"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Τεκμηρίωση]]\n* [[mw:API:FAQ|Συχνές ερωτήσεις]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Λίστα αλληλογραφίας]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ανακοινώσεις API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Σφάλματα & αιτήματα]\n</div>\n<strong>Κατάσταση:</strong> Όλα τα χαρακτηριστικά που εμφανίζονται σε αυτή τη σελίδα πρέπει να λειτουργούν, αλλά το API είναι ακόμα σε ενεργό ανάπτυξη, και μπορεί να αλλάξει ανά πάσα στιγμή. Εγγραφείτε στη [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce λίστα αλληλογραφίας] για να ειδοποιείστε για ενημερώσεις.\n\n<strong>Εσφαλμένα αιτήματα:</strong> Όταν στέλνονται εσφαλμένα αιτήματα στο API, επιστρέφεται μία κεφαλίδα HTTP (header) με το κλειδί \"MediaWiki-API-Error\" κι έπειτα η τιμή της κεφαλίδας και ο κωδικός σφάλματος που επιστρέφονται ορίζονται στην ίδια τιμή. Για περισσότερες πληροφορίες, δείτε [[mw:API:Errors_and_warnings|API: Σφάλματα και προειδοποιήσεις]].",
+       "apihelp-main-param-action": "Ποια ενέργει να εκτελεστεί.",
        "apihelp-main-param-format": "Η μορφή των δεδομένων εξόδου.",
+       "apihelp-main-param-curtimestamp": "Συμπερίληψη της τρέχουσας χρονοσφραγίδας στο αποτέλεσμα.",
+       "apihelp-main-param-uselang": "Γλώσσα για τις μεταφράσεις μηνυμάτων. Μία λίστα κωδικών μπορεί να αντληθεί από το <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> με το <kbd>siprop=languages</kbd>, ή καθορίστε <kbd>user</kbd> για να χρησιμοποιήσετε την προτίμηση γλώσσας του τρέχοντα χρήστη, ή καθορίστε <kbd>content</kbd> για να χρησιμοποιήσετε τη γλώσσα περιεχομένου αυτού του wiki.",
        "apihelp-block-description": "Φραγή χρήστη",
        "apihelp-block-param-user": "Όνομα χρήστη, διεύθυνση IP ή εύρος διευθύνσεων IP που θέλετε να επιβάλετε φραγή.",
+       "apihelp-block-param-expiry": "Ώρα λήξης. Μπορεί να είναι σχετική (π.χ. <kbd>σε 5 μήνες</kbd> ή <kbd>σε 2 εβδομάδες</kbd>) ή απόλυτη (π.χ. <kbd>2014-09-18T12:34:56Z</kbd>). Αν οριστεί σε <kbd>άπειρη</kbd>, <kbd>απεριόριστη</kbd>, ή <kbd>ποτέ</kbd>, ο αποκλεισμός δεν θα λήξει ποτέ.",
        "apihelp-block-param-reason": "Λόγος φραγής.",
+       "apihelp-block-param-anononly": "Αποκλείστε ανώνυμους χρήστες μόνο (δηλ. απενεργοποιήστε ανώνυμες επεξεργασίες για αυτή τη διεύθυνση IP).",
        "apihelp-block-param-nocreate": "Αποτροπή δημιουργίας λογαριασμού.",
+       "apihelp-block-param-autoblock": "Αποκλείστε αυτόματα την τελευταία χρησιμοποιημένη διεύθυνση IP και κάθε συνακόλουθη διεύθυνση IP από την οποία γίνεται προσπάθεια σύνδεσης.",
+       "apihelp-createaccount-description": "Δημιουργήστε νέο λογαριασμό χρήστη.",
        "apihelp-createaccount-param-name": "Όνομα χρήστη.",
+       "apihelp-createaccount-param-password": "Κωδικός πρόσβασης (αγνοείται, αν έχει οριστεί το <var>$1mailpassword</var>).",
        "apihelp-createaccount-param-email": "Διεύθυνση ηλεκτρονικού ταχυδρομείου χρήστη (προαιρετικό).",
        "apihelp-createaccount-param-realname": "Πραγματικό όνομα χρήστη (προαιρετικό).",
        "apihelp-createaccount-param-mailpassword": "Εάν οριστεί σε οποιαδήποτε τιμή, ένας τυχαίος κωδικός πρόσβασης θα αποσταλεί μέσω ηλεκτρονικού ταχυδρομείου στο χρήστη.",
@@ -79,5 +89,9 @@
        "apihelp-options-example-reset": "Επαναφορά όλων των προτιμήσεων.",
        "apihelp-paraminfo-param-helpformat": "Μορφή των συμβολοσειρών βοήθειας.",
        "apihelp-patrol-example-revid": "Περιπολία αναθεώρησης.",
-       "apihelp-protect-example-protect": "Προστασία σελίδας."
+       "apihelp-protect-example-protect": "Προστασία σελίδας.",
+       "apihelp-query+users-paramvalue-prop-gender": "Επισημαίνει το φύλο του χρήστη. Επιστρέφει «αρσενικό», «θηλυκό» ή «άγνωστο»",
+       "api-help-param-type-limit": "Τύπος: ακέραιος ή <kbd>max</kbd>",
+       "api-help-param-type-boolean": "Τύπος: boolean ([[Special:ApiHelp/main#main/datatypes|λεπτομέρειες]])",
+       "api-help-param-type-user": "Τύπος: {{PLURAL:$1|1=όνομα χρήστη|2=λίστα με ονόματα χρήστη}}"
 }
index f972a42..2cb0e37 100644 (file)
        "apihelp-emailuser-param-subject": "Subject header.",
        "apihelp-emailuser-param-text": "Mail body.",
        "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
-       "apihelp-emailuser-example-email": "Send an email to the User <kbd>WikiSysop</kbd> with the text <kbd>Content</kbd>.",
+       "apihelp-emailuser-example-email": "Send an email to user <kbd>WikiSysop</kbd> with the text <kbd>Content</kbd>.",
 
        "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
        "apihelp-expandtemplates-param-title": "Title of page.",
        "apihelp-opensearch-param-warningsaserror": "If warnings are raised with <kbd>format=json</kbd>, return an API error instead of ignoring them.",
        "apihelp-opensearch-example-te": "Find pages beginning with <kbd>Te</kbd>.",
 
-       "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with \"userjs-\" (intended to be used by user scripts), can be set.",
+       "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with <code>userjs-</code> (intended to be used by user scripts), can be set.",
        "apihelp-options-param-reset": "Resets preferences to the site defaults.",
        "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
        "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
-       "apihelp-options-param-optionname": "A name of a option which should be set to the value given by <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "A value of the option specified by <var>$1optionname</var>, can contain pipe characters.",
+       "apihelp-options-param-optionname": "The name of the option that should be set to the value given by <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "The value for the option specified by <var>$1optionname</var>, can contain pipe characters.",
        "apihelp-options-example-reset": "Reset all preferences.",
        "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
        "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Gives interwiki links in the parsed wikitext.",
        "apihelp-parse-paramvalue-prop-wikitext": "Gives the original wikitext that was parsed.",
        "apihelp-parse-paramvalue-prop-properties": "Gives various properties defined in the parsed wikitext.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablepp</var> is set.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablepp</var> is set.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablelimitreport</var> is set.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablelimitreport</var> is set.",
        "apihelp-parse-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>)",
        "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
        "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Only retrieve the content of this section number or when <kbd>new</kbd> generate a new section.\n\n<kbd>new</kbd> section is only honored when specifying <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "New section title when <var>section</var> is <kbd>new</kbd>.\n\nUnlike page editing, this does not fall back to <var>summary</var> when omitted or empty.",
-       "apihelp-parse-param-disablepp": "Omit the preprocessor report (\"NewPP limit report\") from the parser output.",
+       "apihelp-parse-param-disablelimitreport": "Omit the limit report (\"NewPP limit report\") from the parser output.",
+       "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> instead.",
        "apihelp-parse-param-disableeditsection": "Omit edit section links from the parser output.",
+       "apihelp-parse-param-disabletidy": "Do not run HTML cleanup (e.g. tidy) on the parser output.",
        "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model <code>$1</code>; replaced by <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Parse in preview mode.",
        "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
        "apihelp-protect-param-protections": "List of protection levels, formatted <kbd>action=level</kbd> (e.g. <kbd>edit=sysop</kbd>).\n\n<strong>Note:</strong> Any actions not listed will have restrictions removed.",
        "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, or <kbd>never</kbd>, for a never-expiring protection.",
        "apihelp-protect-param-reason": "Reason for (un)protecting.",
-       "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect pages included in this page). Ignored if all protection levels given do not support cascading.",
+       "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect transcluded templates and images used in this page). Ignored if none of the given protection levels support cascading.",
        "apihelp-protect-param-watch": "If set, add the page being (un)protected to the current user's watchlist.",
        "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from the current user's watchlist, use preferences or do not change watch.",
        "apihelp-protect-example-protect": "Protect a page.",
        "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
        "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
        "apihelp-query+allcategories-param-limit": "How many categories to return.",
-       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-param-prop": "Which properties to get:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Adds number of pages in the category.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Tags categories that are hidden with <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each.",
        "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning <kbd>List</kbd>.",
 
        "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
        "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
        "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the page IDs of the using pages (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "Adds the page IDs of the using pages (cannot be used with $1unique).",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Adds the title of the file.",
        "apihelp-query+allfileusages-param-limit": "How many total items to return.",
        "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
        "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page IDs they are from, starting at <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
        "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
        "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with <kbd>$1prop=ids</kbd>.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the linking page (cannot be used with <var>$1unique</var>).\n;title:Adds the title of the link.",
+       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Adds the page ID of the linking page (cannot be used with <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Adds the title of the link.",
        "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
        "apihelp-query+alllinks-param-limit": "How many total items to return.",
        "apihelp-query+alllinks-param-dir": "The direction in which to list.",
        "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
        "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
        "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the redirecting page (cannot be used with <var>$1unique</var>).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with <var>$1unique</var>).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with <var>$1unique</var>).",
+       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Adds the page ID of the redirecting page (cannot be used with <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Adds the title of the redirect.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Adds the fragment from the redirect, if any (cannot be used with <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Adds the interwiki prefix from the redirect, if any (cannot be used with <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
        "apihelp-query+allredirects-param-limit": "How many total items to return.",
        "apihelp-query+allredirects-param-dir": "The direction in which to list.",
        "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
        "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
        "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
-       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "Adds the page ID of the transcluding page (cannot be used with $1unique).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "Adds the title of the transclusion.",
        "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
        "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
        "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
        "apihelp-query+allusers-param-group": "Only include users in the given groups.",
        "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
        "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
-       "apihelp-query+allusers-param-prop": "Which pieces of information to include:\n;blockinfo:Adds the information about a current block on the user.\n;groups:Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.\n;implicitgroups:Lists all the groups the user is automatically in.\n;rights:Lists rights that the user has.\n;editcount:Adds the edit count of the user.\n;registration:Adds the timestamp of when the user registered if available (may be blank).",
+       "apihelp-query+allusers-param-prop": "Which pieces of information to include:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Adds the information about a current block on the user.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lists all the groups the user is automatically in.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Lists rights that the user has.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Adds the edit count of the user.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "Adds the timestamp of when the user registered if available (may be blank).",
        "apihelp-query+allusers-param-limit": "How many total user names to return.",
        "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
        "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
        "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
        "apihelp-query+backlinks-param-dir": "The direction in which to list.",
        "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to <kbd>nonredirects</kbd> when <var>$1redirect</var> is enabled, this is only applied to the second level.",
-       "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
+       "apihelp-query+backlinks-param-limit": "How many total pages to return. If <var>$1redirect</var> is enabled, the limit applies to each level separately (which means up to 2 * <var>$1limit</var> results may be returned).",
        "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
        "apihelp-query+backlinks-example-simple": "Show links to <kbd>Main page<kbd>.",
        "apihelp-query+backlinks-example-generator": "Get information about pages linking to <kbd>Main page<kbd>.",
        "apihelp-query+blocks-param-users": "List of users to search for (optional).",
        "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nCannot be used together with <var>$3users</var>. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
        "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
-       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IP addresses affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-prop": "Which properties to get:",
+       "apihelp-query+blocks-paramvalue-prop-id": "Adds the ID of the block.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Adds the username of the blocked user.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Adds the user ID of the blocked user.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Adds the username of the blocking user.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Adds the user ID of the blocking user.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Adds the timestamp of when the block was given.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Adds the timestamp of when the block expires.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Adds the reason given for the block.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Adds the range of IP addresses affected by the block.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "Tags the ban with (autoblock, anononly, etc.).",
        "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IP addresses, set <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "List blocks.",
        "apihelp-query+blocks-example-users": "List blocks of users <kbd>Alice</kbd> and <kbd>Bob</kbd>.",
 
        "apihelp-query+categories-description": "List all categories the pages belong to.",
-       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Adds timestamp of when the category was added.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Tags categories that are hidden with <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+categories-param-show": "Which kind of categories to show.",
        "apihelp-query+categories-param-limit": "How many categories to return.",
        "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
        "apihelp-query+categorymembers-description": "List all pages in a given category.",
        "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the <kbd>{{ns:category}}:</kbd> prefix. Cannot be used together with <var>$1pageid</var>.",
        "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with <var>$1title</var>.",
-       "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;sortkey:Adds the sortkey used for sorting in the category (hexadecimal string).\n;sortkeyprefix:Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).\n;type:Adds the type that the page has been categorised as (page, subcat or file).\n;timestamp:Adds the timestamp of when the page was included.",
+       "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Adds the page ID.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Adds the sortkey used for sorting in the category (hexadecimal string).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "Adds the type that the page has been categorised as (page, subcat or file).",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Adds the timestamp of when the page was included.",
        "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that <kbd>$1type=subcat</kbd> or <kbd>$1type=file</kbd> may be used instead of <kbd>$1namespace=14</kbd> or <kbd>6</kbd>.",
        "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when <kbd>$1sort=timestamp</kbd> is set.",
        "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
        "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
-       "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing at, as returned by <kbd>$1prop=sortkey</kbd>. Can only be used with <kbd>$1sort=sortkey</kbd>.",
        "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with <kbd>$1sort=sortkey</kbd>. Overrides <var>$1starthexsortkey</var>.",
-       "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing <strong>before</strong> (not <strong>at</strong>; if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
        "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
        "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
        "apihelp-query+categorymembers-example-simple": "Get first 10 pages in <kbd>Category:Physics</kbd>.",
        "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
        "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
        "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
-       "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID whom made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+       "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the ID of the user who made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
        "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of the pages <kbd>Main Page</kbd> and <kbd>Talk:Main Page</kbd>, with content (mode 1).",
        "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by <kbd>Bob</kbd> (mode 2).",
        "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3).",
        "apihelp-query+extlinks-example-simple": "Get a list of external links on <kbd>Main Page<kbd>.",
 
        "apihelp-query+exturlusage-description": "Enumerate pages that contain a given URL.",
-       "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:\n;ids:Adds the ID of page.\n;title:Adds the title and namespace ID of the page.\n;url:Adds the URL used in the page.",
-       "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
+       "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Adds the ID of page.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Adds the URL used in the page.",
+       "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and <var>$1query</var> is set, the protocol is <kbd>http</kbd>. Leave both this and <var>$1query</var> empty to list all external links.",
        "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
        "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
        "apihelp-query+exturlusage-param-limit": "How many pages to return.",
        "apihelp-query+filearchive-param-dir": "The direction in which to list.",
        "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
        "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
-       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the filename of the archive version for non-latest versions.",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Adds SHA-1 hash for the image.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Adds user who uploaded the image version.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Adds the size of the image in bytes and the height, width and page count (if applicable).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias for size.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Adds description of the image version.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Parse the description of the version.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Adds MIME of the image.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adds the media type of the image.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "Lists Exif metadata for the version of the image.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Adds the bit depth of the version.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Adds the filename of the archive version for non-latest versions.",
        "apihelp-query+filearchive-example-simple": "Show a list of all deleted files.",
 
        "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
        "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
 
        "apihelp-query+fileusage-description": "Find all pages that use the given files.",
-       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+fileusage-param-prop": "Which properties to get:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "Page ID of each page.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Title of each page.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Flag if the page is a redirect.",
        "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+fileusage-param-limit": "How many to return.",
        "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
        "apihelp-query+imageinfo-param-prop": "Which file information to get:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
        "apihelp-query+imageinfo-paramvalue-prop-user": "Adds the user who uploaded each file version.",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "Add the user ID that uploaded each file version.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Add the ID of the user that uploaded each file version.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Comment on the version.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Parse the comment on the version.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Adds the canonical title of the file.",
        "apihelp-query+info-paramvalue-prop-url": "Gives a full URL, an edit URL, and the canonical URL for each page.",
        "apihelp-query+info-paramvalue-prop-readable": "Whether the user can read this page.",
        "apihelp-query+info-paramvalue-prop-preload": "Gives the text returned by EditFormPreloadText.",
-       "apihelp-query+info-paramvalue-prop-displaytitle": "Gives the way the page title is actually displayed.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Gives the manner in which the page title is actually displayed.",
        "apihelp-query+info-param-testactions": "Test whether the current user can perform certain actions on the page.",
        "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
        "apihelp-query+info-example-simple": "Get information about the page <kbd>Main Page</kbd>.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
        "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with <var>$1blprefix</var>.",
        "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
-       "apihelp-query+iwbacklinks-param-prop": "Which properties to get:\n;iwprefix:Adds the prefix of the interwiki.\n;iwtitle:Adds the title of the interwiki.",
+       "apihelp-query+iwbacklinks-param-prop": "Which properties to get:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Adds the prefix of the interwiki.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Adds the title of the interwiki.",
        "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
        "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]].",
        "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]].",
 
        "apihelp-query+iwlinks-description": "Returns all interwiki links from the given pages.",
        "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
-       "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.",
+       "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Adds the full URL.",
        "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
        "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
        "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with <var>$1prefix</var>.",
        "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
        "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
        "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
-       "apihelp-query+langbacklinks-param-prop": "Which properties to get:\n;lllang:Adds the language code of the language link.\n;lltitle:Adds the title of the language link.",
+       "apihelp-query+langbacklinks-param-prop": "Which properties to get:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Adds the language code of the language link.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Adds the title of the language link.",
        "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
        "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]].",
        "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]].",
        "apihelp-query+langlinks-description": "Returns all interlanguage links from the given pages.",
        "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
        "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with <var>$1prop</var>).",
-       "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.\n;langname:Adds the localised language name (best effort). Use <var>$1inlanguagecode</var> to control the language.\n;autonym:Adds the native language name.",
+       "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Adds the full URL.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "Adds the localised language name (best effort). Use <var>$1inlanguagecode</var> to control the language.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Adds the native language name.",
        "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
        "apihelp-query+langlinks-param-title": "Link to search for. Must be used with <var>$1lang</var>.",
        "apihelp-query+langlinks-param-dir": "The direction in which to list.",
        "apihelp-query+links-example-namespaces": "Get links from the page <kbd>Main Page</kbd> in the {{ns:user}} and {{ns:template}} namespaces.",
 
        "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
-       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-prop": "Which properties to get:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "Page ID of each page.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Title of each page.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Flag if the page is a redirect.",
        "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+linkshere-param-limit": "How many to return.",
        "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
        "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]].",
 
        "apihelp-query+logevents-description": "Get events from logs.",
-       "apihelp-query+logevents-param-prop": "Which properties to get:\n;ids:Adds the ID of the log event.\n;title:Adds the title of the page for the log event.\n;type:Adds the type of log event.\n;user:Adds the user responsible for the log event.\n;userid:Adds the user ID who was responsible for the log event.\n;timestamp:Adds the timestamp for the event.\n;comment:Adds the comment of the event.\n;parsedcomment:Adds the parsed comment of the event.\n;details:Lists additional details about the event.\n;tags:Lists tags for the event.",
+       "apihelp-query+logevents-param-prop": "Which properties to get:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Adds the ID of the log event.",
+       "apihelp-query+logevents-paramvalue-prop-title": "Adds the title of the page for the log event.",
+       "apihelp-query+logevents-paramvalue-prop-type": "Adds the type of log event.",
+       "apihelp-query+logevents-paramvalue-prop-user": "Adds the user responsible for the log event.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "Adds the user ID who was responsible for the log event.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "Adds the timestamp for the log event.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "Adds the comment of the log event.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Adds the parsed comment of the log event.",
+       "apihelp-query+logevents-paramvalue-prop-details": "Lists additional details about the log event.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "Lists tags for the log event.",
        "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
-       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. Wildcard actions like <kbd>action/*</kbd> allows to specify any string for the asterisk.",
+       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides <var>$1type</var>. In the list of possible values, values with the asterisk wildcard such as <kbd>action/*</kbd> can have different strings after the slash (/).",
        "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
        "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
        "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
 
        "apihelp-query+pageswithprop-description": "List all pages using a given page property.",
        "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
-       "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;value:Adds the value of the page prop.",
+       "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Adds the page ID.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "Adds the value of the page prop.",
        "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
        "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
        "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
-       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Get additional information about the first 10 pages using <code>_&#95;NOTOC_&#95;</code>.",
 
        "apihelp-query+prefixsearch-description": "Perform a prefix search for page titles.",
        "apihelp-query+prefixsearch-param-search": "Search string.",
        "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
        "apihelp-query+prefixsearch-param-offset": "Number of results to skip.",
        "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with <kbd>meaning</kbd>.",
+
        "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
        "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
        "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
        "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
        "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
        "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
-       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user ID that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+       "apihelp-query+protectedtitles-param-prop": "Which properties to get:",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Adds the timestamp of when protection was added.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Adds the user that added the protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Adds the user ID that added the protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Adds the comment for the protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Adds the parsed comment for the protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Adds the timestamp of when the protection will be lifted.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Adds the protection level.",
        "apihelp-query+protectedtitles-example-simple": "List protected titles.",
        "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace.",
 
        "apihelp-query+querypage-param-limit": "Number of results to return.",
        "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
 
-       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.\n\nIf the number of pages in the namespace is lower than <var>$1limit</var>, fewer pages will be returned. The same page will not be returned twice.",
+       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, <samp>Main Page</samp> is the first random page in the list, <samp>List of fictional monkeys</samp> will <em>always</em> be second, <samp>List of people on stamps of Vanuatu</samp> third, etc.",
        "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
        "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
-       "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+       "apihelp-query+random-param-redirect": "Use <kbd>$1filterredir=redirects</kbd> instead.",
+       "apihelp-query+random-param-filterredir": "How to filter for redirects.",
        "apihelp-query+random-example-simple": "Return two random pages from the main namespace.",
        "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace.",
 
        "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
        "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
        "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
-       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user ID responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (log ID, log type, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Adds the user responsible for the edit and tags if they are an IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "Adds the user ID responsible for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Adds the comment for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Adds the parsed comment for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "Adds flags for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Adds timestamp of the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "Adds the page title of the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "Adds the page ID, recent changes ID and the new and old revision ID.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Adds the new and old page length in bytes.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "Tags edit if page is a redirect.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Tags patrollable edits as being patrolled or unpatrolled.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Adds log information (log ID, log type, etc) to log entries.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Lists tags for the entry.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Adds the content checksum for entries associated with a revision.",
        "apihelp-query+recentchanges-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
        "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
        "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes.",
 
        "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
-       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page ID of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+       "apihelp-query+redirects-param-prop": "Which properties to get:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "Page ID of each redirect.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Title of each redirect.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Fragment of each redirect, if any.",
        "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+redirects-param-limit": "How many redirects to return.",
        "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
        "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the <kbd>Main Page</kbd> made after 2006-05-01.",
        "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the <kbd>Main Page</kbd> that were not made by anonymous user <kbd>127.0.0.1</kbd>.",
        "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the <kbd>Main Page</kbd> that were made by the user <kbd>MediaWiki default</kbd>.",
+
        "apihelp-query+revisions+base-param-prop": "Which properties to get for each revision:",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "The ID of the revision.",
        "apihelp-query+revisions+base-paramvalue-prop-flags": "Revision flags (minor).",
        "apihelp-query+revisions+base-param-parse": "Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
        "apihelp-query+revisions+base-param-section": "Only retrieve the content of this section number.",
        "apihelp-query+revisions+base-param-diffto": "Revision ID to diff each revision to. Use <kbd>prev</kbd>, <kbd>next</kbd> and <kbd>cur</kbd> for the previous, next and current revision respectively.",
-       "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text",
+       "apihelp-query+revisions+base-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides <var>$1diffto</var>. If <var>$1section</var> is set, only that section will be diffed against this text.",
        "apihelp-query+revisions+base-param-contentformat": "Serialization format used for <var>$1difftotext</var> and expected for output of content.",
 
        "apihelp-query+search-description": "Perform a full text search.",
        "apihelp-query+search-param-namespace": "Search only within these namespaces.",
        "apihelp-query+search-param-what": "Which type of search to perform.",
        "apihelp-query+search-param-info": "Which metadata to return.",
-       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;categorysnippet:Adds a parsed snippet of the matching category.\n;isfilematch:Adds a boolean indicating if the search matched file content.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-prop": "Which properties to return:",
+       "apihelp-query+search-paramvalue-prop-size": "Adds the size of the page in bytes.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Adds the word count of the page.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Adds the timestamp of when the page was last edited.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Adds a parsed snippet of the page.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Adds a parsed snippet of the page title.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "Adds a parsed snippet of the redirect title.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Adds the title of the matching redirect.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adds a parsed snippet of the matching section title.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "Adds the title of the matching section.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "Adds a parsed snippet of the matching category.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Adds a boolean indicating if the search matched file content.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
        "apihelp-query+search-param-limit": "How many total pages to return.",
        "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
        "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
        "apihelp-query+search-example-generator": "Get page info about the pages returned for a search for <kbd>meaning</kbd>.",
 
        "apihelp-query+siteinfo-description": "Return general information about the site.",
-       "apihelp-query+siteinfo-param-prop": "Which information to get:\n;general:Overall system information.\n;namespaces:List of registered namespaces and their canonical names.\n;namespacealiases:List of registered namespace aliases.\n;specialpagealiases:List of special page aliases.\n;magicwords:List of magic words and their aliases.\n;statistics:Returns site statistics.\n;interwikimap:Returns interwiki map (optionally filtered, optionally localised by using <var>$1inlanguagecode</var>).\n;dbrepllag:Returns database server with the highest replication lag.\n;usergroups:Returns user groups and the associated permissions.\n;libraries:Returns libraries installed on the wiki.\n;extensions:Returns extensions installed on the wiki.\n;fileextensions:Returns list of file extensions allowed to be uploaded.\n;rightsinfo:Returns wiki rights (license) information if available.\n;restrictions:Returns information on available restriction (protection) types.\n;languages:Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).\n;skins:Returns a list of all enabled skins (optionally localised by using <var>$1inlanguagecode</var>, otherwise in the content language).\n;extensiontags:Returns a list of parser extension tags.\n;functionhooks:Returns a list of parser function hooks.\n;showhooks:Returns a list of all subscribed hooks (contents of <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Returns a list of variable IDs.\n;protocols:Returns a list of protocols that are allowed in external links.\n;defaultoptions:Returns the default values for user preferences.",
+       "apihelp-query+siteinfo-param-prop": "Which information to get:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Overall system information.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "List of registered namespaces and their canonical names.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "List of registered namespace aliases.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "List of special page aliases.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "List of magic words and their aliases.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Returns site statistics.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Returns interwiki map (optionally filtered, optionally localised by using <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Returns database server with the highest replication lag.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Returns user groups and the associated permissions.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Returns libraries installed on the wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Returns extensions installed on the wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions allowed to be uploaded.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Returns wiki rights (license) information if available.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Returns information on available restriction (protection) types.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Returns a list of all enabled skins (optionally localised by using <var>$1inlanguagecode</var>, otherwise in the content language).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Returns a list of parser extension tags.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Returns a list of parser function hooks.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Returns a list of all subscribed hooks (contents of <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Returns a list of variable IDs.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Returns a list of protocols that are allowed in external links.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Returns the default values for user preferences.",
        "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
        "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
        "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
 
        "apihelp-query+tags-description": "List change tags.",
        "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
-       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the number of revisions and log entries that have this tag.\n;defined:Indicate whether the tag is defined.\n;source:Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.\n;active:Whether the tag is still being applied.",
+       "apihelp-query+tags-param-prop": "Which properties to get:",
+       "apihelp-query+tags-paramvalue-prop-name": "Adds name of tag.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Adds system message for the tag.",
+       "apihelp-query+tags-paramvalue-prop-description": "Adds description of the tag.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "Adds the number of revisions and log entries that have this tag.",
+       "apihelp-query+tags-paramvalue-prop-defined": "Indicate whether the tag is defined.",
+       "apihelp-query+tags-paramvalue-prop-source": "Gets the sources of the tag, which may include <samp>extension</samp> for extension-defined tags and <samp>manual</samp> for tags that may be applied manually by users.",
+       "apihelp-query+tags-paramvalue-prop-active": "Whether the tag is still being applied.",
        "apihelp-query+tags-example-simple": "List available tags.",
 
        "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
        "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token.",
 
        "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
-       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+transcludedin-param-prop": "Which properties to get:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "Page ID of each page.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Title of each page.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Flag if the page is a redirect.",
        "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
        "apihelp-query+transcludedin-param-limit": "How many to return.",
        "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirect:Only show non-redirects.",
        "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
        "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
        "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
-       "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:\n;ids:Adds the page ID and revision ID.\n;title:Adds the title and namespace ID of the page.\n;timestamp:Adds the timestamp of the edit.\n;comment:Adds the comment of the edit.\n;parsedcomment:Adds the parsed comment of the edit.\n;size:Adds the new size of the edit.\n;sizediff:Adds the size delta of the edit against its parent.\n;flags:Adds flags of the edit.\n;patrolled:Tags patrolled edits.\n;tags:Lists tags for the edit.",
+       "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Adds the page ID and revision ID.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Adds the title and namespace ID of the page.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Adds the timestamp of the edit.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Adds the comment of the edit.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Adds the parsed comment of the edit.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "Adds the new size of the edit.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Adds the size delta of the edit against its parent.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "Adds flags of the edit.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Tags patrolled edits.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Lists tags for the edit.",
        "apihelp-query+usercontribs-param-show": "Show only items that meet these criteria, e.g. non minor edits only: <kbd>$2show=!minor</kbd>.\n\nIf <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd> is set, revisions older than <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
        "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
        "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
        "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IP addresses with prefix <kbd>192.0.2.</kbd>.",
 
        "apihelp-query+userinfo-description": "Get information about the current user.",
-       "apihelp-query+userinfo-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the current user is blocked, by whom, and for what reason.\n;hasmsg:Adds a tag <samp>message</samp> if the current user has pending messages.\n;groups:Lists all the groups the current user belongs to.\n;implicitgroups:Lists all the groups the current user is automatically a member of.\n;rights:Lists all the rights the current user has.\n;changeablegroups:Lists the groups the current user can add to and remove from.\n;options:Lists all preferences the current user has set.\n;preferencestoken:<span class=\"apihelp-deprecated\">Deprecated.</span> Get a token to change current user's preferences.\n;editcount:Adds the current user's edit count.\n;ratelimits:Lists all rate limits applying to the current user.\n;realname:Adds the user's real name.\n;email:Adds the user's email address and email authentication date.\n;acceptlang:Echoes the <code>Accept-Language</code> header sent by the client in a structured format.\n;registrationdate:Adds the user's registration date.\n;unreadcount:Adds the count of unread pages on the user's watchlist (maximum $1; returns <samp>$2</samp> if more).",
+       "apihelp-query+userinfo-param-prop": "Which pieces of information to include:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Tags if the current user is blocked, by whom, and for what reason.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Adds a tag <samp>messages</samp> if the current user has pending messages.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Lists all the groups the current user belongs to.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lists all the groups the current user is automatically a member of.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Lists all the rights the current user has.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lists the groups the current user can add to and remove from.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Lists all preferences the current user has set.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Deprecated.</span> Get a token to change current user's preferences.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Adds the current user's edit count.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lists all rate limits applying to the current user.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Adds the user's real name.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Adds the user's email address and email authentication date.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Echoes the <code>Accept-Language</code> header sent by the client in a structured format.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Adds the user's registration date.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adds the count of unread pages on the user's watchlist (maximum $1; returns <samp>$2</samp> if more).",
        "apihelp-query+userinfo-example-simple": "Get information about the current user.",
        "apihelp-query+userinfo-example-data": "Get additional information about the current user.",
 
        "apihelp-query+users-description": "Get information about a list of users.",
-       "apihelp-query+users-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the user is blocked, by whom, and for what reason.\n;groups:Lists all the groups each user belongs to.\n;implicitgroups:Lists all the groups a user is automatically a member of.\n;rights:Lists all the rights each user has.\n;editcount:Adds the user's edit count.\n;registration:Adds the user's registration timestamp.\n;emailable:Tags if the user can and wants to receive email through [[Special:Emailuser]].\n;gender:Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+       "apihelp-query+users-param-prop": "Which pieces of information to include:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "Tags if the user is blocked, by whom, and for what reason.",
+       "apihelp-query+users-paramvalue-prop-groups": "Lists all the groups each user belongs to.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "Lists all the groups a user is automatically a member of.",
+       "apihelp-query+users-paramvalue-prop-rights": "Lists all the rights each user has.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Adds the user's edit count.",
+       "apihelp-query+users-paramvalue-prop-registration": "Adds the user's registration timestamp.",
+       "apihelp-query+users-paramvalue-prop-emailable": "Tags if the user can and wants to receive email through [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
        "apihelp-query+users-param-users": "A list of users to obtain information for.",
        "apihelp-query+users-param-token": "Use <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> instead.",
        "apihelp-query+users-example-simple": "Return information for user <kbd>Example</kbd>.",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "Adds the old and new lengths of the page.",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Adds timestamp of when the user was last notified about the edit.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Adds log information where appropriate.",
-
        "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
        "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
        "apihelp-query+watchlistraw-description": "Get all pages on the current user's watchlist.",
        "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
        "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
-       "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:\n;changed:Adds timestamp of when the user was last notified about the edit.",
+       "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "Adds timestamp of when the user was last notified about the edit.",
        "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
        "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
        "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
        "apihelp-rsd-description": "Export an RSD (Really Simple Discovery) schema.",
        "apihelp-rsd-example-simple": "Export the RSD schema.",
 
-       "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"Email me when a page on my watchlist is changed\" preference is enabled.",
+       "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"{{int:tog-enotifwatchlistpages}}\" preference is enabled.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
        "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
        "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
        "apihelp-tag-param-add": "Tags to add. Only manually defined tags can be added.",
        "apihelp-tag-param-remove": "Tags to remove. Only tags that are either manually defined or completely undefined can be removed.",
        "apihelp-tag-param-reason": "Reason for the change.",
-       "apihelp-tag-example-rev": "Add the <kbd>vandalism</kbd> tag from revision ID 123 without specifying a reason",
+       "apihelp-tag-example-rev": "Add the <kbd>vandalism</kbd> tag to revision ID 123 without specifying a reason",
        "apihelp-tag-example-log": "Remove the <kbd>spam</kbd> tag from log entry ID 123 with the reason <kbd>Wrongly applied</kbd>",
 
        "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "api-help-param-type-password": "",
        "api-help-param-type-timestamp": "Type: {{PLURAL:$1|1=timestamp|2=list of timestamps}} ([[Special:ApiHelp/main#main/datatypes|allowed formats]])",
        "api-help-param-type-user": "Type: {{PLURAL:$1|1=user name|2=list of user names}}",
-       "api-help-param-list": "{{PLURAL:$1|1=One value|2=Values (separate with <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=One of the following values|2=Values (separate with <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Must be empty|Can be empty, or $2}}",
        "api-help-param-limit": "No more than $1 allowed.",
        "api-help-param-limit2": "No more than $1 ($2 for bots) allowed.",
        "api-help-right-apihighlimits": "Use higher limits in API queries (slow queries: $1; fast queries: $2). The limits for slow queries also apply to multivalue parameters.",
 
        "api-credits-header": "Credits",
-       "api-credits": "API developers:\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://phabricator.wikimedia.org/."
+       "api-credits": "API developers:\n* Yuri Astrakhan (creator, lead developer Sep 2006–Sep 2007)\n* Roan Kattouw (lead developer Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Brad Jorsch (lead developer 2013–present)\n\nPlease send your comments, suggestions and questions to mediawiki-api@lists.wikimedia.org\nor file a bug report at https://phabricator.wikimedia.org/."
 }
index ab99948..06478f6 100644 (file)
@@ -11,7 +11,8 @@
                        "Ryo567",
                        "Csbotero",
                        "Chris TR",
-                       "Ncontinanza"
+                       "Ncontinanza",
+                       "Poco a poco"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|Preguntas frecuentes]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correos]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API de anuncios]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> Todas las características que se muestran en esta página debería funcionar, pero la API aún está en desarrollo activo y puede cambiar en cualquier momento. Suscríbete a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la lista de correo de mediawiki-api-announce] para estar al día de las actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se envía un encabezado HTTP con la clave \"MediaWiki-API-Error\" y ambos valores, del encabezado y el código de error, se establecerán en el mismo valor. Para más información, véase [[mw:API:Errors_and_warnings|API: Errores y advertencias]].",
@@ -23,7 +24,7 @@
        "apihelp-main-param-requestid": "Cualquier valor dado aquí se incluirá en la respuesta. Se puede utilizar para distinguir solicitudes.",
        "apihelp-main-param-servedby": "Incluir el nombre del host que ha servido la solicitud en los resultados.",
        "apihelp-main-param-curtimestamp": "Incluir la marca de tiempo actual en el resultado.",
-       "apihelp-block-description": "Bloquear usuario",
+       "apihelp-block-description": "Bloquear a un usuario.",
        "apihelp-block-param-user": "El nombre de usuario, dirección IP o intervalo de IP que quieres bloquear.",
        "apihelp-block-param-expiry": "Fecha de expiración. Puede ser relativa (por ejemplo, <kbd>5 meses</kbd> o <kbd>2 semanas</kbd>) o absoluta (por ejemplo, <kbd>2014-09-18T12:34:56Z</kbd>). Si se establece en <kbd>infinito</kbd>, <kbd>indefinido</kbd>, o <kbd>nunca</kbd>, el bloqueo será permanente.",
        "apihelp-block-param-reason": "Razón para el bloqueo.",
@@ -49,7 +50,7 @@
        "apihelp-compare-param-fromid": "ID de la primera página a comparar.",
        "apihelp-compare-param-fromrev": "Primera revisión para comparar.",
        "apihelp-compare-param-totitle": "Segundo título para comparar.",
-       "apihelp-compare-param-toid": "Segunda página de IDENTIFICACIÓN para comparar.",
+       "apihelp-compare-param-toid": "Segunda identificador de página para comparar.",
        "apihelp-compare-param-torev": "Segunda revisión para comparar.",
        "apihelp-compare-example-1": "Crear una diferencia entre las revisiones 1 y 2.",
        "apihelp-createaccount-description": "Crear una nueva cuenta de usuario.",
@@ -93,7 +94,7 @@
        "apihelp-edit-param-undo": "Deshacer esta revisión. Reemplaza $1text, $1prependtext y $1appendtext.",
        "apihelp-edit-param-undoafter": "Deshacer todas las revisiones desde $1undo a esta. Si no está establecido solo se deshace una revisión.",
        "apihelp-edit-param-redirect": "Resolver redirecciones automáticamente.",
-       "apihelp-edit-param-contentformat": "Formato de serialización de contenido, utilizado para introducir texto.",
+       "apihelp-edit-param-contentformat": "Formato de serialización de contenido utilizado para el texto de entrada.",
        "apihelp-edit-param-contentmodel": "Modelo de contenido del nuevo contenido.",
        "apihelp-edit-param-token": "La clave debe enviarse siempre como el último parámetro o, al menos, después del parámetro $1text.",
        "apihelp-edit-example-edit": "Editar una página",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar los cambios realizados por bots.",
        "apihelp-feedrecentchanges-param-hideanons": "Ocultar los cambios realizados por usuarios anónimos.",
        "apihelp-feedrecentchanges-param-hideliu": "Ocultar los cambios realizados por usuarios registrados.",
-       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios patrullados.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar los cambios verificados.",
        "apihelp-feedrecentchanges-param-hidemyself": "Ocultar los cambios realizados por el usuario actual.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por etiquetas.",
        "apihelp-feedrecentchanges-param-target": "Mostrar solo los cambios en las páginas enlazadas en esta.",
        "apihelp-login-example-gettoken": "Recuperar clave de inicio de sesión.",
        "apihelp-login-example-login": "Acceder",
        "apihelp-logout-description": "Salir y vaciar los datos de la sesión.",
-       "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual",
+       "apihelp-logout-example-logout": "Cerrar la sesión del usuario actual.",
        "apihelp-managetags-description": "Realizar tareas de administración relacionadas con el cambio de etiquetas.",
        "apihelp-managetags-param-operation": "Qué operación realizar:\n;create: Crear una nueva etiqueta de cambio de uso manual.\n;delete: Eliminar una etiqueta de cambio de la base de datos, eliminando la etiqueta de todas las revisiones, cambios en entradas recientes y registros en los que se ha utilizado.\n;activate: Activar una etiqueta de cambio, permitiendo a los usuarios aplicarla manualmente.\n;deactivate: Desactivar una etiqueta de cambio, evitando que los usuarios la apliquen manualmente.",
        "apihelp-managetags-param-tag": "Etiqueta para crear, eliminar, activar o desactivar. Para crear una etiqueta, esta debe no existir. Para eliminarla, debe existir. Para activarla, debe existir y no estar en uso por ninguna extensión. Para desactivarla, debe estar activada y definida manualmente.",
        "apihelp-managetags-example-delete": "Eliminar la etiqueta <kbd>vandlaismo</kbd> con el motivo <kbd>mal deletreado</kbd>",
        "apihelp-managetags-example-activate": "Activar una etiqueta llamada <kbd>spam</kbd> con el motivo <kbd>Para utilizar en patrullaje de edición</kbd>",
        "apihelp-managetags-example-deactivate": "Desactivar una etiqueta llamada <kbd>spam</kbd> con el motivo <kbd>Para utilizar en patrullaje de edición</kbd>",
-       "apihelp-move-description": "Mover una página.",
+       "apihelp-move-description": "Trasladar una página.",
        "apihelp-move-param-from": "Título de la página a renombrar. No se puede utilizar con <var>$1fromid</var>.",
        "apihelp-move-param-fromid": "ID de la página a renombrar. No se puede utilizar con <var>$1from</var>.",
        "apihelp-move-param-to": "Título para cambiar el nombre de la página.",
        "apihelp-opensearch-param-format": "El formato de salida.",
        "apihelp-opensearch-param-warningsaserror": "Si las advertencias están planteadas con <kbd>format=json</kbd>, devolver un error de API en lugar de hacer caso omiso de ellas.",
        "apihelp-opensearch-example-te": "Buscar páginas que empiecen por <kbd>Te</kbd>.",
-       "apihelp-options-description": "Cambiar preferencias del usuario actual.\n\nSolo se pueden establecer opciones que estén registradas en el núcleo o en una de las extensiones instaladas u opciones con claves predefinidas con \"usersjs-\" (diseñadas para utilizarse con scripts de usuario).",
+       "apihelp-options-description": "Cambiar preferencias del usuario actual.\n\nSolo se pueden establecer opciones que estén registradas en el núcleo o en una de las extensiones instaladas u opciones con claves predefinidas con <code>userjs-</code> (diseñadas para utilizarse con scripts de usuario).",
        "apihelp-options-param-reset": "Restablece las preferencias de la página web a sus valores predeterminados.",
        "apihelp-options-param-resetkinds": "Lista de tipos de opciones a restablecer cuando la opción <var>$1reset</var> esté establecida.",
        "apihelp-options-param-change": "Lista de cambios con el formato name=value (por ejemplo: skin=vector). El valor no puede contener caracteres de barras verticales. Si no se da ningún valor (ni siquiera un signo de igual), por ejemplo: optionname|otheroption|..., la opción se restablecerá a sus valores predeterminados.",
-       "apihelp-options-param-optionname": "Un nombre de una opción que debe establecerse en el valor dado por <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "Un valor de la opción especificada por <var>$1optionname</var>, puede contener barras verticales.",
+       "apihelp-options-param-optionname": "El nombre de la opción que debe establecerse en el valor dado por <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "El valor de la opción especificada por <var>$1optionname</var>, puede contener barras verticales.",
        "apihelp-options-example-reset": "Restablecer todas las preferencias",
        "apihelp-options-example-change": "Cambiar las preferencias <kbd>skin</kbd> y <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Restablecer todas las preferencias y establecer <kbd>skin</kbd> y <kbd>nickname</kbd>.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Da los enlaces interwiki del texto analizado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Da el wikitexto original que se había analizado.",
        "apihelp-parse-paramvalue-prop-properties": "Da varias propiedades definidas en el wikitexto analizado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Da el informe del límite de forma estructurada. No da datos si <var>$1disablepp</var> está establecido.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Da la versión HTML del informe del límite. No da datos si <var>$1disablepp</var> está establecido.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Da el informe del límite de forma estructurada. No da datos si <var>$1disablelimitreport</var> está establecido.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Da la versión HTML del informe del límite. No da datos si <var>$1disablelimitreport</var> está establecido.",
        "apihelp-parse-param-effectivelanglinks": "Incluye enlaces de idiomas proporcionados por las extensiones (para utilizar con <kbd>$1prop=langlinks</kbd>).",
+       "apihelp-parse-param-disablepp": "Usa <var>$1disablelimitreport</var> en su lugar.",
        "apihelp-parse-param-preview": "Analizar en modo de vista previa.",
        "apihelp-parse-param-sectionpreview": "Analizar sección en modo de vista previa (activa el modo de vista previa).",
-       "apihelp-parse-param-disabletoc": "Desactivar la tabla de contenidos en la salida.",
+       "apihelp-parse-param-disabletoc": "Omitir la tabla de contenidos en la salida.",
        "apihelp-parse-example-page": "Analizar una página.",
        "apihelp-parse-example-text": "Analizar wikitexto.",
        "apihelp-parse-example-texttitle": "Analizar wikitexto, especificando el título de la página.",
        "apihelp-parse-example-summary": "Analizar un resumen.",
-       "apihelp-patrol-description": "Patrullar una página o revisión.",
-       "apihelp-patrol-example-rcid": "Patrullar un cambio reciente",
-       "apihelp-patrol-example-revid": "Patrullar una revisión",
+       "apihelp-patrol-description": "Verificar una página o revisión.",
+       "apihelp-patrol-param-rcid": "Identificador de cambios recientes que verificar.",
+       "apihelp-patrol-example-rcid": "Verificar un cambio reciente.",
+       "apihelp-patrol-example-revid": "Verificar una revisión.",
        "apihelp-protect-description": "Cambiar el nivel de protección de una página.",
        "apihelp-protect-param-title": "Título de la página a (des)proteger. No se puede utilizar con $1pageid.",
        "apihelp-protect-param-pageid": "ID de la página a (des)proteger. No se puede utilizar con $1title.",
        "apihelp-protect-param-protections": "Lista de los niveles de protección, con formato <kbd>action=level</kbd> (por ejemplo: <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Cualquier acción no mencionada tendrá las restricciones eliminadas.",
        "apihelp-protect-param-reason": "Motivo de la (des)protección.",
-       "apihelp-protect-param-cascade": "Activar la protección en cascada (por ejemple, proteger páginas incluida esta). Se ignorará si todos los niveles de protección dados no son compatibles con la función de cascada.",
+       "apihelp-protect-param-cascade": "Activar la protección en cascada (o sea, proteger plantillas e imágenes transcluidas usadas en esta página). Se ignorará si ninguno de los niveles de protección dados son compatibles con la función de cascada.",
        "apihelp-protect-example-protect": "Proteger una página",
        "apihelp-protect-example-unprotect": "Desproteger una página estableciendo la restricción a <kbd>todos</kbd>.",
        "apihelp-protect-example-unprotect2": "Desproteger una página anulando las restricciones.",
        "apihelp-query+allcategories-param-min": "Devolver solo categorías con al menos este número de miembros.",
        "apihelp-query+allcategories-param-max": "Devolver solo categorías con como mucho este número de miembros.",
        "apihelp-query+allcategories-param-limit": "Cuántas categorías se devolverán.",
-       "apihelp-query+allcategories-param-prop": "Qué propiedades se obtendrán:\n;size: Añade el número de páginas en la categorías.\n;hidden: Etiqueta las categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Añade el número de páginas en la categoría.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Etiqueta las categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+allcategories-example-size": "Lista las categorías con información sobre el número de páginas de cada una.",
        "apihelp-query+alldeletedrevisions-description": "Listar todas las revisiones eliminadas por un usuario o en un espacio de nombres.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Solo puede usarse con <var>$3user</var>.",
-       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "No puede ser utilizado con <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "No puede utilizarse con <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-param-start": "El sello de tiempo para comenzar la enumeración",
        "apihelp-query+alldeletedrevisions-param-end": "El sello de tiempo para detener la enumeración",
        "apihelp-query+alldeletedrevisions-param-from": "Empezar a listar en este título.",
        "apihelp-query+allfileusages-param-from": "El título del archivo para comenzar la enumeración.",
        "apihelp-query+allfileusages-param-to": "El título del archivo para detener la enumeración.",
        "apihelp-query+allfileusages-param-prefix": "Buscar todos los títulos de los archivos que comiencen con este valor.",
+       "apihelp-query+allfileusages-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Agrega el título del archivo.",
        "apihelp-query+allfileusages-param-limit": "Cuántos elementos en total se devolverán.",
        "apihelp-query+allfileusages-param-dir": "La dirección en la que se listará.",
        "apihelp-query+allfileusages-example-B": "Listar títulos de archivos, incluyendo los desaparecidos, con las ID de páginas a las que pertenecen, empezando por la <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-from": "El título del enlace para comenzar la enumeración.",
        "apihelp-query+alllinks-param-to": "El título del enlace para detener la enumeración.",
        "apihelp-query+alllinks-param-prefix": "Buscar todos los títulos vinculados que comiencen con este valor.",
-       "apihelp-query+alllinks-param-namespace": "El espacio de nombre a enumerar.",
+       "apihelp-query+alllinks-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Añade el título del enlace.",
+       "apihelp-query+alllinks-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+alllinks-param-limit": "Cuántos elementos en total se devolverán.",
        "apihelp-query+alllinks-example-unique-generator": "Obtiene todos los títulos enlazados, marcando los que falten.",
        "apihelp-query+allmessages-param-prop": "Qué propiedades se obtendrán.",
        "apihelp-query+allpages-param-from": "El título de página para comenzar la enumeración",
        "apihelp-query+allpages-param-to": "El título de página para detener la enumeración.",
        "apihelp-query+allpages-param-prefix": "Buscar todos los títulos de las páginas que comiencen con este valor.",
-       "apihelp-query+allpages-param-namespace": "El espacio de nombre a enumerar.",
+       "apihelp-query+allpages-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+allpages-param-filterredir": "Qué páginas listar.",
        "apihelp-query+allpages-param-minsize": "Limitar a páginas con al menos este número de bytes.",
        "apihelp-query+allpages-param-maxsize": "Limitar a páginas con este número máximo de bytes.",
        "apihelp-query+allpages-example-generator": "Mostrar información acerca de 4 páginas que empiecen por la letra <kbd>T</kbd>.",
        "apihelp-query+allpages-example-generator-revisions": "Mostrar el contenido de las 2 primeras páginas que no redirijan y empiecen por <kbd>Re</kbd>.",
        "apihelp-query+allredirects-param-prefix": "Buscar todas las páginas de destino que empiecen con este valor.",
+       "apihelp-query+allredirects-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Añade el título de la redirección.",
        "apihelp-query+allredirects-param-limit": "Cuántos elementos se devolverán.",
        "apihelp-query+alltransclusions-param-prefix": "Buscar todos los títulos transcluídos que comiencen con este valor.",
+       "apihelp-query+alltransclusions-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+alltransclusions-example-unique": "Listar títulos transcluidos de forma única.",
        "apihelp-query+alltransclusions-example-unique-generator": "Obtiene todos los títulos transcluídos, marcando los que faltan.",
        "apihelp-query+allusers-description": "Enumerar todos los usuarios registrados.",
        "apihelp-query+allusers-param-prefix": "Buscar todos los usuarios que empiecen con este valor.",
        "apihelp-query+allusers-param-group": "Incluir solo usuarios en los grupos dados.",
+       "apihelp-query+allusers-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Añade información sobre un bloque actual al usuario.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Lista los grupos a los que el usuario pertenece. Esto utiliza más recursos del servidor y puede devolver menos resultados que el límite.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Lista los permisos que tiene el usuario.",
        "apihelp-query+allusers-param-limit": "Cuántos nombres de usuario se devolverán.",
        "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
        "apihelp-query+allusers-example-Y": "Listar usuarios que empiecen por <kbd>Y</kbd>.",
        "apihelp-query+backlinks-param-pageid": "Identificador de página que buscar. No puede usarse junto con <var>$1title</var>",
+       "apihelp-query+backlinks-param-limit": "Cuántas páginas en total se devolverán. Si está activo <var>$1redirect</var>, el límite aplica a cada nivel por separado (lo que significa que se pueden devolver hasta 2 * <var>$1limit</var> resultados).",
        "apihelp-query+backlinks-example-simple": "Mostrar enlaces a la <kbd>Portada<kbd>.",
        "apihelp-query+blocks-description": "Listar todos los usuarios y direcciones IP bloqueadas.",
        "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
+       "apihelp-query+blocks-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Añade el identificador del usuario bloqueado.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Añade la fecha y hora de cuando se aplicó el bloque.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
+       "apihelp-query+categories-param-prop": "Qué propiedades adicionales obtener para cada categoría:",
        "apihelp-query+categories-param-show": "Qué tipo de categorías mostrar.",
        "apihelp-query+categories-param-limit": "Cuántas categorías se devolverán.",
        "apihelp-query+categories-example-generator": "Obtener información acerca de todas las categorías utilizadas en la página <kbd>Albert Einstein</kbd>.",
        "apihelp-query+categoryinfo-description": "Devuelve información acerca de las categorías dadas.",
        "apihelp-query+categoryinfo-example-simple": "Obtener información acerca de <kbd>Category:Foo</kbd> y <kbd>Category:Bar</kbd>",
+       "apihelp-query+categorymembers-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Añade el identificador de página.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+categorymembers-param-startsortkey": "Utilizar $1starthexsortkey en su lugar.",
        "apihelp-query+categorymembers-param-endsortkey": "Utilizar $1endhexsortkey en su lugar.",
        "apihelp-query+categorymembers-example-simple": "Obtener las primeras 10 páginas de la <kbd>Categoría:Física</kbd>",
        "apihelp-query+deletedrevs-example-mode3-talk": "Listar las primeras 50 páginas en el espacio de nombres {{ns:talk}} (modo 3).",
        "apihelp-query+disabled-description": "Se ha desactivado el módulo de consulta.",
        "apihelp-query+duplicatefiles-example-simple": "Buscar duplicados de [[:File:Alber Einstein Head.jpg]].",
-       "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados en todos los ficheros.",
+       "apihelp-query+duplicatefiles-example-generated": "Buscar duplicados en todos los archivos.",
        "apihelp-query+embeddedin-description": "Encuentra todas las páginas que transcluyen el título dado.",
        "apihelp-query+embeddedin-param-title": "Título a buscar. No puede usarse en conjunto con $1pageid.",
        "apihelp-query+embeddedin-param-filterredir": "Cómo filtrar las redirecciones.",
        "apihelp-query+embeddedin-param-limit": "Cuántas páginas se devolverán.",
        "apihelp-query+extlinks-param-limit": "Cuántos enlaces se devolverán.",
+       "apihelp-query+exturlusage-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Añade el identificado de la página.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+       "apihelp-query+exturlusage-param-protocol": "Protocolo del URL. Si está vacío y se establece <var>$1query</var>, el protocolo es <kbd>http</kbd>. Deja vacío esto y <var>$1query</var> para listar todos los enlaces externos.",
        "apihelp-query+exturlusage-param-limit": "Cuántas páginas se devolverán.",
        "apihelp-query+exturlusage-example-simple": "Mostrar páginas que enlacen con <kbd>http://www.mediawiki.org</kbd>.",
        "apihelp-query+filearchive-param-from": "El título de imagen para comenzar la enumeración",
        "apihelp-query+filearchive-param-to": "El título de imagen para detener la enumeración.",
        "apihelp-query+filearchive-param-prefix": "Buscar todos los títulos de las imágenes que comiencen con este valor.",
+       "apihelp-query+filearchive-param-prop": "Qué información de imagen se obtendrá:",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Agrega el tamaño de la imagen en bytes y la altura, la anchura y el número de páginas (si es aplicable).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias del tamaño.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Añade la descripción de la versión de la imagen.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analizar la descripción de la versión.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Añade el MIME de la imagen.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Añade el tipo multimedia de la imagen.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Añade el nombre de archivo de la versión archivada para las versiones que no son las últimas.",
        "apihelp-query+filearchive-example-simple": "Mostrar una lista de todos los archivos eliminados.",
        "apihelp-query+filerepoinfo-example-simple": "Obtener información acerca de los repositorios de archivos.",
+       "apihelp-query+fileusage-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "Identificador de cada página.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada página.",
        "apihelp-query+fileusage-param-limit": "Cuántos se devolverán.",
        "apihelp-query+fileusage-example-simple": "Obtener una lista de páginas que utilicen [[:File:Example.jpg]].",
        "apihelp-query+fileusage-example-generator": "Obtener información acerca de las páginas que utilicen [[:File:Example.jpg]].",
        "apihelp-query+info-paramvalue-prop-protection": "Listar el nivel de protección de cada página.",
        "apihelp-query+info-paramvalue-prop-subjectid": "La ID de página de la página principal de cada página de discusión.",
        "apihelp-query+info-paramvalue-prop-readable": "Si el usuario puede leer esta página.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Proporciona la manera en que se muestra realmente el título de la página",
        "apihelp-query+info-param-token": "Usa [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] en su lugar.",
        "apihelp-query+info-example-simple": "Obtener información acerca de la página <kbd>Main Page</kbd>.",
        "apihelp-query+info-example-protection": "Obtén información general y protección acerca de la página <kb>Página principal</kbd>.",
        "apihelp-query+iwbacklinks-param-limit": "Cuántas páginas se devolverán.",
+       "apihelp-query+iwbacklinks-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+iwbacklinks-example-simple": "Obtener las páginas enlazadas a [[wikibooks:Test]]",
+       "apihelp-query+iwlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Añade el URL completo.",
        "apihelp-query+langbacklinks-param-lang": "Idioma del enlace de idioma.",
        "apihelp-query+langbacklinks-param-limit": "Cuántas páginas en total se devolverán.",
+       "apihelp-query+langbacklinks-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Agrega el código de idioma del enlace de idioma.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Añade el título del enlace de idioma.",
        "apihelp-query+langbacklinks-example-simple": "Obtener las páginas enlazadas a [[:fr:Test]]",
        "apihelp-query+langbacklinks-example-generator": "Obtener información acerca de las páginas enlazadas a [[:fr:Test]].",
+       "apihelp-query+langlinks-param-prop": "Qué propiedades adicionales obtener para cada enlace interlingüe:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Añade el URL completo.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Añade el nombre del idioma nativo.",
        "apihelp-query+langlinks-param-lang": "Devolver solo enlaces de idioma con este código de idioma.",
        "apihelp-query+links-param-limit": "Cuántos enlaces se devolverán.",
+       "apihelp-query+linkshere-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "Identificador de cada página.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Título de cada página.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Indicar si la página es una redirección.",
        "apihelp-query+linkshere-param-limit": "Cuántos se devolverán.",
        "apihelp-query+linkshere-example-simple": "Obtener una lista de páginas que enlacen a la [[Main Page]].",
        "apihelp-query+linkshere-example-generator": "Obtener información acerca de las páginas enlazadas a la [[Main Page|Portada]].",
+       "apihelp-query+logevents-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Agrega el identificador del evento de registro.",
+       "apihelp-query+logevents-paramvalue-prop-type": "Añade el tipo del evento de registro.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Añade el comentario analizado del evento de registro.",
+       "apihelp-query+pageswithprop-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Añade el identificador de página.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
        "apihelp-query+pageswithprop-param-limit": "El máximo número de páginas que se devolverán.",
        "apihelp-query+pageswithprop-example-simple": "Listar las 10 primeras páginas que utilicen <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
-       "apihelp-query+pageswithprop-example-generator": "Obtener información acerca de las 10 primeras páginas que utilicen <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Obtener información adicional acerca de las 10 primeras páginas que utilicen <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-param-search": "Buscar cadena.",
        "apihelp-query+prefixsearch-param-namespace": "Espacio de nombres que buscar.",
        "apihelp-query+prefixsearch-param-limit": "Número máximo de resultados que devolver.",
        "apihelp-query+protectedtitles-param-namespace": "Listar solo los títulos en estos espacios de nombres.",
        "apihelp-query+protectedtitles-param-level": "Listar solo títulos con estos niveles de protección.",
        "apihelp-query+protectedtitles-param-limit": "Cuántas páginas se devolverán.",
+       "apihelp-query+protectedtitles-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Agrega el usuario que agregó la protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Agrega el identificador de usuario que agregó la protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Añade la fecha y hora de cuando se levantará la protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Agrega el nivel de protección.",
        "apihelp-query+protectedtitles-example-simple": "Listar títulos protegidos.",
        "apihelp-query+protectedtitles-example-generator": "Encuentra enlaces a títulos protegidos en el espacio de nombres principal.",
        "apihelp-query+querypage-param-page": "El nombre de la página especial. Recuerda, es sensible a mayúsculas y minúsculas.",
        "apihelp-query+recentchanges-param-user": "Listar solo los cambios de este usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "No listar cambios de este usuario.",
        "apihelp-query+recentchanges-param-tag": "Listar solo los cambios con esta etiqueta.",
+       "apihelp-query+recentchanges-param-prop": "Incluir piezas adicionales de información:",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Añade el comentario analizado para la edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "Añade marcas para la edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Etiqueta ediciones verificables como verificadas o no verificadas.",
        "apihelp-query+recentchanges-param-token": "Usa <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> en su lugar.",
        "apihelp-query+recentchanges-param-limit": "Cuántos cambios en total se devolverán.",
        "apihelp-query+recentchanges-param-type": "Cuántos tipos de cambios se mostrarán.",
        "apihelp-query+recentchanges-example-simple": "Lista de cambios recientes.",
+       "apihelp-query+redirects-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "Identificador de página de cada redirección.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirección.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirección, si los hubiere.",
        "apihelp-query+redirects-param-limit": "Cuántas redirecciones se devolverán.",
        "apihelp-query+redirects-example-simple": "Mostrar una lista de las redirecciones a la [[Main Page|Portada]]",
        "apihelp-query+revisions-example-last5": "Mostrar las últimas 5 revisiones de la <kbd>Portada</kbd>.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Texto de la revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para la revisión.",
        "apihelp-query+search-param-info": "Qué metadatos devolver.",
+       "apihelp-query+search-param-prop": "Qué propiedades se devolverán:",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Añade el título de la redirección coincidente.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Desaconsejado e ignorado.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Desaconsejado e ignorado.</span>",
        "apihelp-query+search-param-limit": "Cuántas páginas en total se devolverán.",
        "apihelp-query+search-param-interwiki": "Incluir resultados interwiki en la búsqueda, si es posible.",
        "apihelp-query+search-example-simple": "Buscar <kbd>significado</kbd>.",
        "apihelp-query+search-example-text": "Buscar <kbd>meaning</kbd> en los textos.",
        "apihelp-query+search-example-generator": "Obtener información acerca de las páginas devueltas por una búsqueda de <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-description": "Devolver información general acerca de la página web.",
+       "apihelp-query+siteinfo-param-prop": "Qué información se obtendrá:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Información global del sistema.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista de espacios de nombres registrados y sus nombres canónicos.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de alias registrados de espacios de nombres",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de páginas especiales.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palabras mágicas y sus alias.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devuelve las estadísticas del sitio.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devuelve el mapa interwiki (opcionalmente filtrado, opcionalmente localizado mediante el uso de <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devuelve el servidor de base de datos con el retraso de replicación más grande.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devuelve los grupos de usuarios y los permisos asociados.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devuelve las bibliotecas instaladas en el wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devuelve las extensiones instaladas en el wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devuelve una lista de extensiones de archivo permitidas para cargadarse.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devuelve información de permisos (licencia) del wiki, si está disponible.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devuelve información sobre tipos de restricciones (protección) disponible.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Devuelve una lista de los idiomas que admite MediaWiki (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Devuelve una lista de todos las apariencias habilitadas (opcionalmente localizada mediante el uso de <var>$1inlanguagecode</var>, de lo contrario en el idioma del contenido).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Devuelve una lista de identificadores variables.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devuelve una lista de los protocolos que se permiten en los enlaces externos.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devuelve los valores predeterminados de las preferencias del usuario.",
        "apihelp-query+siteinfo-example-simple": "Obtener información del sitio.",
        "apihelp-query+stashimageinfo-description": "Devuelve información del archivo para archivos escondidos.",
        "apihelp-query+stashimageinfo-param-sessionkey": "Alias de $1filekey, para retrocompatibilidad.",
        "apihelp-query+stashimageinfo-example-simple": "Devuelve información para un archivo escondido.",
        "apihelp-query+stashimageinfo-example-params": "Devuelve las miniaturas de dos archivos escondidos.",
        "apihelp-query+tags-param-limit": "El número máximo de etiquetas para enumerar.",
+       "apihelp-query+tags-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Agrega el mensaje de sistema para la etiqueta.",
+       "apihelp-query+tags-paramvalue-prop-source": "Obtiene las fuentes de la etiqueta, que pueden incluir <samp>extension</samp> para etiquetas definidas por extensiones y <samp>manual</samp> para etiquetas que pueden aplicarse manualmente por los usuarios.",
+       "apihelp-query+tags-paramvalue-prop-active": "Si la etiqueta aún se sigue aplicando.",
        "apihelp-query+templates-description": "Devuelve todas las páginas transcluídas en las páginas dadas.",
        "apihelp-query+templates-param-limit": "Cuántas plantillas se devolverán.",
        "apihelp-query+transcludedin-description": "Encuentra todas las páginas que transcluyan las páginas dadas.",
+       "apihelp-query+transcludedin-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "Identificador de cada página.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada página.",
+       "apihelp-query+transcludedin-param-namespace": "Incluir solo las páginas en estos espacios de nombres.",
        "apihelp-query+transcludedin-param-limit": "Cuántos se devolverán.",
        "apihelp-query+transcludedin-example-simple": "Obtener una lista de páginas transcluyendo <kbd>Main Page</kbd>.",
        "apihelp-query+usercontribs-param-limit": "Número máximo de contribuciones que se devolverán.",
+       "apihelp-query+usercontribs-param-prop": "Incluir piezas adicionales de información:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Añade el identificador de página y el de revisión.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Añade el comentario de la edición.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta ediciones verificadas.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista las etiquetas para la edición.",
+       "apihelp-query+usercontribs-param-show": "Mostrar solo los elementos que coinciden con estos criterios. Por ejemplo, solo ediciones no menores: <kbd>$2show=!minor</kbd>.\n\nSi se establece <kbd>$2show=patrolled</kbd> o <kbd>$2show=!patrolled</kbd>, las revisiones más antiguas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) no se mostrarán.",
        "apihelp-query+usercontribs-example-user": "Mostrar contribuciones del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar las contribuciones de todas las direcciones IP con el prefijo <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtener información sobre el usuario actual.",
+       "apihelp-query+userinfo-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos los grupos al que pertenece el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos los permisos que tiene el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas las preferencias que haya establecido el usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Añade el número de ediciones del usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos los límites de velocidad aplicados al usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Añade el nombre real del usuario.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Añade la fecha de registro del usuario.",
        "apihelp-query+userinfo-example-simple": "Obtener información sobre el usuario actual.",
        "apihelp-query+userinfo-example-data": "Obtener información adicional sobre el usuario actual.",
        "apihelp-query+users-description": "Obtener información sobre una lista de usuarios.",
+       "apihelp-query+users-param-prop": "Qué piezas de información incluir:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "Etiqueta si el usuario está bloqueado, por quién y por qué razón.",
+       "apihelp-query+users-paramvalue-prop-groups": "Lista todos los grupos a los que pertenece cada usuario.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.",
+       "apihelp-query+users-paramvalue-prop-gender": "Etiqueta el género del usuario. Devuelve \"masculino\", \"femenino\" o \"desconocido\".",
        "apihelp-query+users-example-simple": "Devolver información del usuario <kbd>Ejemplo</kbd>.",
        "apihelp-query+watchlist-param-start": "El sello de tiempo para comenzar la enumeración",
        "apihelp-query+watchlist-param-end": "El sello de tiempo para finalizar la enumeración.",
        "apihelp-query+watchlist-param-excludeuser": "No listar cambios de este usuario.",
+       "apihelp-query+watchlist-param-prop": "Qué propiedades adicionales se obtendrán:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Añade identificadores de revisiones y de páginas.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Añade el título de la página.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Añade marcas para la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Añade el usuario que hizo la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Añade el identificador de usuario de quien hizo la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Añade el comentario de la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Añade fecha y hora de la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Etiqueta las ediciones que están verificadas.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Añade la longitud vieja y la nueva de la página.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Añade fecha y hora de cuando el usuario fue notificado por última vez acerca de la edición.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Añade información del registro cuando corresponda.",
+       "apihelp-query+watchlist-param-type": "Qué tipos de cambios mostrar:\n;edit:ediciones comunes a páginas.\n;external:cambios externos.\n;new:creaciones de páginas.\n;log:entradas del registro.",
+       "apihelp-query+watchlistraw-param-prop": "Qué propiedades adicionales se obtendrán:",
        "apihelp-query+watchlistraw-param-show": "Sólo listar los elementos que cumplen estos criterios.",
        "apihelp-query+watchlistraw-param-fromtitle": "Título (con el prefijo de espacio de nombres) desde el que se empezará a enumerar.",
        "apihelp-query+watchlistraw-param-totitle": "Título (con el prefijo de espacio de nombres) desde el que se dejará de enumerar.",
        "apihelp-rollback-param-summary": "Resumen de edición personalizado. Si se deja vacío se utilizará el predeterminado.",
        "apihelp-tag-param-logid": "Uno o más identificadores de entradas del registro a los que agregar o eliminar la etiqueta.",
        "apihelp-tag-param-reason": "Motivo del cambio.",
+       "apihelp-tag-example-rev": "Añadir la etiqueta <kbd>vandalism</kbd> al identificador de revisión 123 sin especificar un motivo",
        "apihelp-tag-example-log": "Eliminar la etiqueta <kbd>spam</kbd> de la entrada del registro con identificador 123 con el motivo <kbd>aplicada incorrectamente</kbd>",
        "apihelp-unblock-description": "Desbloquear un usuario.",
        "apihelp-unblock-param-reason": "Motivo del desbloqueo.",
        "api-help-param-type-boolean": "Tipo: booleano/lógico ([[Special:ApiHelp/main#main/datatypes|detalles]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=timestamp|2=lista de timestamps}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nombre de usuario|2=lista de nombres de usuarios}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Uno de los siguientes valores|2=Valores (separados por <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe estar vacío|Puede estar vacío, o $2}}",
        "api-help-param-limit": "No se permite más de $1.",
        "api-help-param-limit2": "No se permite más de $1 ($2 para los bots).",
index b418f1d..b6a64dd 100644 (file)
@@ -1,17 +1,21 @@
 {
        "@metadata": {
                "authors": [
-                       "Subi"
+                       "Subi",
+                       "Sator"
                ]
        },
        "apihelp-block-description": "Blokeatu erabiltzaile bat.",
+       "apihelp-block-param-reason": "Blokeatzeko arrazoia.",
        "apihelp-createaccount-description": "Erabiltzaile kontu berria sortu.",
+       "apihelp-createaccount-param-name": "Erabiltzaile izena.",
        "apihelp-createaccount-param-email": "Erabiltzailearen helbide elektronikoa (aukerakoa).",
        "apihelp-createaccount-param-realname": "Erabiltzailearen benetako izena (aukerakoa).",
        "apihelp-delete-description": "Orrialde bat ezabatu.",
        "apihelp-edit-description": "Orrialdeak sortu eta aldatu.",
        "apihelp-edit-param-minor": "Aldaketa txikia.",
        "apihelp-edit-example-edit": "Orrialde bat aldatu",
+       "apihelp-emailuser-description": "Erabiltzaileari e-maila bidali",
        "apihelp-expandtemplates-param-title": "Orrialdearen izenburua.",
        "apihelp-feedcontributions-param-year": "Urtetik aurrera (eta lehenagotik)",
        "apihelp-feedcontributions-param-month": "Hilabetetik aurrera (eta lehenagotik)",
        "apihelp-feedrecentchanges-param-tagfilter": "Iragazi etiketen arabera.",
        "apihelp-feedrecentchanges-example-simple": "Erakutsi aldaketa berriak",
        "apihelp-feedrecentchanges-example-30days": "Erakutsi aldaketa berriak 30 egunez",
+       "apihelp-filerevert-param-comment": "Iruzkina igo.",
        "apihelp-imagerotate-description": "Irudi bat edo gehiago biratu.",
+       "apihelp-login-param-name": "Erabiltzaile izena.",
        "apihelp-login-param-password": "Pasahitza.",
        "apihelp-login-param-domain": "Domeinua (hautazkoa).",
        "apihelp-login-example-login": "Saioa hasi",
        "apihelp-move-description": "Orrialde bat mugitu",
+       "apihelp-move-param-reason": "Berrizenpenaren arrazoia.",
        "apihelp-options-example-reset": "Berrezarri hobespen guztiak.",
        "apihelp-protect-example-protect": "Orrialde bat babestu",
        "apihelp-query+allusers-param-witheditsonly": "Bakarrik zerrendatu aldaketak egin dituzten erabiltzaileak.",
        "apihelp-query+allusers-param-activeusers": "Bakarrik zerrendatu azken {{PLURAL:$1|eguneko|$1 egunetako}} erabiltzaile aktiboak.",
        "apihelp-query+imageinfo-param-urlheight": "$1urlwidth-en antzekoa.",
        "apihelp-query+imageusage-example-simple": "Erakutsi [[:File:Albert Einstein Head.jpg]] darabilten orriak",
+       "apihelp-query+langlinks-param-inlanguagecode": "Hizkuntza izenak aurkitzeko hizkuntza kodea.",
        "apihelp-query+prefixsearch-param-search": "Bilatu katea.",
        "apihelp-query+protectedtitles-example-simple": "Zerrendatu babestutako izenburuak",
        "apihelp-query+recentchanges-example-simple": "Zerrendatu aldaketa berriak.",
index b1a7e8c..ac46637 100644 (file)
@@ -2,9 +2,15 @@
        "@metadata": {
                "authors": [
                        "Nike",
-                       "MrTapsa"
+                       "MrTapsa",
+                       "Pitke",
+                       "Stryn"
                ]
        },
+       "apihelp-block-description": "Estä käyttäjä.",
+       "apihelp-block-param-reason": "Eston syy.",
+       "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
+       "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
        "apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
 }
index 3a201a5..5aec2c6 100644 (file)
                        "Crochet.david",
                        "0x010C",
                        "Lucky",
-                       "Freak2fast4u"
+                       "Freak2fast4u",
+                       "Urhixidur",
+                       "Wladek92",
+                       "Ash Crow",
+                       "L",
+                       "Umherirrender"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-opensearch-param-format": "Le format de sortie.",
        "apihelp-opensearch-param-warningsaserror": "Si des avertissements sont levés avec <kbd>format=json</kbd>, renvoyer une erreur d’API au lieu de les ignorer.",
        "apihelp-opensearch-example-te": "Trouver les pages commençant par <kbd>Te</kbd>.",
-       "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
+       "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec des clés préfixées par <code>userjs-</code> (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
        "apihelp-options-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
        "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option <var>$1reset</var> est définie.",
        "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). La valeur ne peut pas contenir de caractère barre verticale. Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Fournit les liens interwikis dans le wikitexte analysé.",
        "apihelp-parse-paramvalue-prop-wikitext": "Fournit le wikitexte d’origine qui a été analysé.",
        "apihelp-parse-paramvalue-prop-properties": "Fournit les diverses propriétés définies dans le wikitexte analysé.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablepp</var> est positionné.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablepp</var> est positionné.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
        "apihelp-parse-paramvalue-prop-parsetree": "L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>)",
        "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
        "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Récupérer uniquement le contenu de ce numéro de section ou quand <kbd>nouveau</kbd> génère une nouvelle section.\n\nLa <kbd>nouvelle</kbd> section est mise à l’honneur uniquement quand <var>text</var> est spécifié.",
        "apihelp-parse-param-sectiontitle": "Nouveau titre de section quand <var>section</var> vaut <kbd>nouveau</kbd>.\n\nÀ la différence de la modification de page, cela ne revient pas à <var>summary</var> quand il est omis ou vide.",
-       "apihelp-parse-param-disablepp": "Désactiver le rapport PP de la sortie de l’analyseur.",
-       "apihelp-parse-param-disableeditsection": "Désactiver les liens de modification de section de la sortie de l’analyseur.",
+       "apihelp-parse-param-disablelimitreport": "Omettre le rapport de limite (« rapport de limite du nouveau PP ») de la sortie de l’analyseur.",
+       "apihelp-parse-param-disablepp": "Utiliser <var>$1disablelimitreport</var> à la place.",
+       "apihelp-parse-param-disableeditsection": "Omettre les liens de modification de section de la sortie de l’analyseur.",
+       "apihelp-parse-param-disabletidy": "Ne pas exécuter de nettoyage du code HTML (par exemple,  réagencer) sur la sortie de l'analyseur.",
        "apihelp-parse-param-generatexml": "Générer un arbre d’analyse XML (nécessite le modèle de contenu <code>$1</code> ; remplacé par <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Analyser en mode aperçu.",
        "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
-       "apihelp-parse-param-disabletoc": "Désactiver la table des matières dans la sortie.",
+       "apihelp-parse-param-disabletoc": "Omettre la table des matières dans la sortie.",
        "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
        "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
        "apihelp-parse-example-page": "Analyser une page.",
        "apihelp-protect-param-protections": "Liste des niveaux de protection, au format <kbd>action=niveau</kbd> (par ex. <kbd>edit=sysop</kbd>).\n\n<strong>NOTE :<strong> Toutes les actions non listées auront leur restrictions supprimées.",
        "apihelp-protect-param-expiry": "Horodatages d’expiration. Si un seul horodatage est fourni, il sera utilisé pour toutes les protections. Utiliser <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd> pour une protection sans expiration.",
        "apihelp-protect-param-reason": "Motif de (dé)protection.",
-       "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les pages incluses dans cette page). Ignoré si tous les niveaux de protection fournis ne supportent pas la mise en cascade.",
+       "apihelp-protect-param-cascade": "Activer la protection en cascade (c’est-à-dire protéger les modèles transclus et les images utilisées dans cette page). Ignoré si aucun des niveaux de protection fournis ne supporte la mise en cascade.",
        "apihelp-protect-param-watch": "Si activé, ajouter la page (dé)protégée à la liste de suivi de l'utilisateur actuel.",
        "apihelp-protect-param-watchlist": "Ajouter ou supprimer sans condition la page de la liste de suivi de l'utilisateur actuel, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-protect-example-protect": "Protéger une page",
        "apihelp-query+allcategories-param-min": "Renvoyer uniquement les catégories avec au moins ce nombre de membres.",
        "apihelp-query+allcategories-param-max": "Renvoyer uniquement les catégories avec au plus ce nombre de membres.",
        "apihelp-query+allcategories-param-limit": "Combien de catégories renvoyer.",
-       "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :\n;size:Ajoute le nombre de pages dans la catégorie.\n;hidden:Marque les catégories qui sont cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-param-prop": "Quelles propriétés récupérer :",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Ajoute le nombre de pages dans la catégorie.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Marque les catégories qui sont masquées avec <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+allcategories-example-size": "Lister les catégories avec l’information sur le nombre de pages dans chacune",
        "apihelp-query+allcategories-example-generator": "Récupérer l’information sur la page de catégorie elle-même pour les catégories commençant par <kbd>List</kbd>.",
        "apihelp-query+alldeletedrevisions-description": "Lister toutes les révisions supprimées par un utilisateur ou dans un espace de noms.",
        "apihelp-query+allfileusages-param-to": "Le titre du fichier auquel arrêter l’énumération.",
        "apihelp-query+allfileusages-param-prefix": "Rechercher tous les fichiers dont le titre commence par cette valeur.",
        "apihelp-query+allfileusages-param-unique": "Afficher uniquement les titres de fichier distincts. Impossible à utiliser avec $1prop=ids.\nQuand utilisé comme générateur, produit les pages cibles au lieu des sources.",
-       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :\n;ids:Ajoute les IDs des pages utilisatrices (impossible à utiliser avec $1unique).\n;title:Ajoute le titre du fichier.",
+       "apihelp-query+allfileusages-param-prop": "Quelles informations inclure :",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "Ajoute les IDs de page des pages l’utilisant (impossible à utiliser avec $1unique).",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Ajoute le titre du fichier.",
        "apihelp-query+allfileusages-param-limit": "Combien d’éléments renvoyer au total.",
        "apihelp-query+allfileusages-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+allfileusages-example-B": "Lister les titres de fichier, y compris les manquants, avec les IDs de page d’où ils proviennent, en commençant à <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-to": "Le titre du lien auquel arrêter l’énumération.",
        "apihelp-query+alllinks-param-prefix": "Rechercher tous les titres liés commençant par cette valeur.",
        "apihelp-query+alllinks-param-unique": "Afficher uniquement les titres liés distincts. Impossible à utiliser avec <kbd>$1prop=ids</kbd>.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
-       "apihelp-query+alllinks-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de liaison (impossible à utiliser avec <var>$1unique</var>).\n;title:Ajoute le titre du lien.",
+       "apihelp-query+alllinks-param-prop": "Quelles informations inclure :",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Ajoute l’ID de la page avec le lien (impossible à utiliser avec <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Ajoute le titre du lien.",
        "apihelp-query+alllinks-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+alllinks-param-limit": "Combien d’éléments renvoyer au total.",
        "apihelp-query+alllinks-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+allredirects-param-to": "Le titre de la redirection auquel arrêter l’énumération.",
        "apihelp-query+allredirects-param-prefix": "Rechercher toutes les pages cible commençant par cette valeur.",
        "apihelp-query+allredirects-param-unique": "Afficher uniquement les pages cibles distinctes. Impossible à utiliser avec $1prop=ids|fragment|interwiki.\nUtilisé avec un générateur, produit les pages cible au lieu des pages source.",
-       "apihelp-query+allredirects-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page de redirection (impossible à utiliser avec <var>$1unique</var>).\n;title:Ajoute le titre de la redirection.\n;fragment:Ajoute le fragment de la redirection, s’il y en a un (impossible à utiliser avec <var>$1unique</var>).\n;interwiki:Ajoute le préfixe interwiki de la redirection, s’il y en a un (impossible à utiliser avec <var>$1unique</var>).",
+       "apihelp-query+allredirects-param-prop": "Quelles informations inclure :",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Ajoute l’ID de la page de redirection (impossible à utiliser avec <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Ajoute le titre de la redirection.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Ajoute le fragment de la redirection, s’il existe (impossible à utiliser avec <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Ajoute le préfixe interwiki de la redirection, s’il existe (impossible à utiliser avec <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+allredirects-param-limit": "Combien d’éléments renvoyer au total.",
        "apihelp-query+allredirects-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+alltransclusions-param-to": "Le titre de la transclusion auquel arrêter l’énumération.",
        "apihelp-query+alltransclusions-param-prefix": "Rechercher tous les titres inclus qui commencent par cette valeur.",
        "apihelp-query+alltransclusions-param-unique": "Afficher uniquement les titres inclus. Impossible à utiliser avec $1prop=ids.\nUtilisé avec un générateur, produit les pages cible plutôt que les pages source.",
-       "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page incluse (impossible à utiliser avec $1unique).\n;title:Ajoute le titre de la transclusion.",
+       "apihelp-query+alltransclusions-param-prop": "Quelles informations inclure :",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "Ajout l’ID de la page de transclusion (impossible à utiliser avec $1unique).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "Ajoute le titre de la transclusion.",
        "apihelp-query+alltransclusions-param-namespace": "L’espace de noms à énumérer.",
        "apihelp-query+alltransclusions-param-limit": "Combien d’éléments renvoyer au total.",
        "apihelp-query+alltransclusions-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+allusers-param-group": "Inclure uniquement les utilisateurs dans les groupes donnés.",
        "apihelp-query+allusers-param-excludegroup": "Exclure les utilisateurs dans les groupes donnés.",
        "apihelp-query+allusers-param-rights": "Inclure uniquement les utilisateurs avec les droits indiqués. Ne comprend pas les droits accordés par des groupes implicites ou auto-promus comme *, user ou autoconfirmed.",
-       "apihelp-query+allusers-param-prop": "Quelles informations inclure :\n;blockinfo:Ajoute l’information sur le bloc actuel d’un utilisateur.\n;groups:Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.\n;implicitgroups:Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.\n;rights:Liste les droits qu’à l’utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
+       "apihelp-query+allusers-param-prop": "Quelles informations inclure :",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Ajoute l’information sur le bloc actuel d’un utilisateur.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Liste des groupes auxquels appartient l’utilisateur. Cela utilise beaucoup de ressources du serveur et peut renvoyer moins de résultats que la limite.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Liste tous les groupes auxquels l’utilisateur est affecté automatiquement.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Liste les droits qu’à l’utilisateur.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "Ajoute l’horodatage de l’inscription de l’utilisateur, s’il est disponible (peut être vide).",
        "apihelp-query+allusers-param-limit": "Combien de noms d’utilisateur renvoyer au total.",
        "apihelp-query+allusers-param-witheditsonly": "Ne lister que les utilisateurs qui ont fait des modifications.",
        "apihelp-query+allusers-param-activeusers": "Lister uniquement les utilisateurs actifs durant {{PLURAL:$1|le dernier jour|les $1 derniers jours}}.",
        "apihelp-query+blocks-param-users": "Liste des utilisateurs à rechercher (facultatif).",
        "apihelp-query+blocks-param-ip": "Obtenir tous les blocs s’appliquant à cette adresse IP ou à cette plage CIDR, y compris les blocs de plage.\nImpossible à utiliser avec <var>$3users</var>. Les plages CIDR plus larges que IPv4/$1 ou IPv6/$2 ne sont pas acceptées.",
        "apihelp-query+blocks-param-limit": "Le nombre maximal de blocs à lister.",
-       "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :\n;id:Ajoute l’ID du blocage.\n;user:Ajoute le nom de l’utilisateur bloqué.\n;userid:Ajoute l’ID de l’utilisateur bloqué.\n;by:Ajoute le nom de l’utilisateur ayant bloqué.\n;byid:Ajoute l’ID de l’utilisateur ayant bloqué.\n;timestamp:Ajoute l’horodatage du blocage.\n;expiry:Ajoute l’horodatage d’expiration du blocage.\n;reason:Ajoute le motif du blocage.\n;range:Ajoute la plage d’adresses IP affectée par le blocage.\n;flags:Marque le bannissement avec (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+blocks-paramvalue-prop-id": "Ajoute l’ID du blocage.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Ajoute le nom de l’utilisateur bloqué.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur bloqué.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Ajoute le nom de l’utilisateur ayant bloqué.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Ajoute l’ID de l’utilisateur ayant bloqué.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Ajoute l’horodatage du blocage.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Ajoute l’horodatage d’expiration du blocage.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Ajoute le motif du blocage.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Ajoute la plage d’adresses IP affectée par le blocage.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "Marque le bannissement avec (autoblock, anononly, etc.).",
        "apihelp-query+blocks-param-show": "Afficher uniquement les éléments correspondant à ces critères.\nPar exemple, pour voir uniquement les blocages infinis sur les adresses IP, mettre <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Lister les blocages",
        "apihelp-query+blocks-example-users": "Lister les blocages des utilisateurs <kbd>Alice</kbd> et <kbd>Bob</kbd>.",
        "apihelp-query+categories-description": "Lister toutes les catégories auxquelles les pages appartiennent.",
-       "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :\n;sortkey:Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.\n;timestamp:Ajoute l’horodatage de l’ajout de la catégorie.\n;hidden:Marque les catégories cachées avec _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-prop": "Quelles propriétés supplémentaires obtenir de chaque catégorie :",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "Ajoute la clé de tri (chaîne hexadécimale) et son préfixe (partie lisible) de la catégorie.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la catégorie.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Marque les catégories cachées avec <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+categories-param-show": "Quelle sorte de catégories afficher.",
        "apihelp-query+categories-param-limit": "Combien de catégories renvoyer.",
        "apihelp-query+categories-param-categories": "Lister uniquement ces catégories. Utile pour vérifier si une certaine page est dans une certaine catégorie.",
        "apihelp-query+categorymembers-description": "Lister toutes les pages d’une catégorie donnée.",
        "apihelp-query+categorymembers-param-title": "Quelle catégorie énumérer (obligatoire). Doit comprendre le préfixe <kbd>{{ns:category}}:</kbd>. Impossible à utiliser avec <var>$1pageid</var>.",
        "apihelp-query+categorymembers-param-pageid": "ID de la page de la catégorie à énumérer. Impossible à utiliser avec <var>$1title</var>.",
-       "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;sortkey:Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).\n;sortkeyprefix:Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).\n;type:Ajoute le type dans lequel a été catégorisée la page (page, sous-catégorie ou fichier).\n;timestamp:Ajoute l’horodatage de l’inclusion de la page.",
+       "apihelp-query+categorymembers-param-prop": "Quelles informations inclure :",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Ajoute la clé de tri utilisée pour trier dans la catégorie (chaîne hexadécimale).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Ajoute le préfixe de la clé de tri utilisé pour trier dans la catégorie (partie lisible de la clé de tri).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "Ajoute le type dans lequel a été catégorisée la page (page, sous-catégorie ou fichier).",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’inclusion de la page.",
        "apihelp-query+categorymembers-param-namespace": "Inclure uniquement les pages dans ces espaces de nom. Remarquez que <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> peuvent  être utilisés à la place de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
        "apihelp-query+categorymembers-param-type": "Quel type de membres de la catégorie inclure. Ignoré quand <kbd>$1sort=timestamp</kbd> est positionné.",
        "apihelp-query+categorymembers-param-limit": "Le nombre maximal de pages à renvoyer.",
        "apihelp-query+categorymembers-param-starthexsortkey": "Clé de tri à laquelle démarrer le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
        "apihelp-query+categorymembers-param-endhexsortkey": "Clé de tri à laquelle arrêter le listage, telle que renvoyée par <kbd>$1prop=sortkey</kbd>. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>.",
        "apihelp-query+categorymembers-param-startsortkeyprefix": "Préfixe de la clé de tri à laquelle démarrer le listage. Utilisable uniquement avec <kbd>$1sort=sortkey</kbd>. Écrase <var>$1starthexsortkey</var>.",
-       "apihelp-query+categorymembers-param-endsortkeyprefix": "Préfixe de la clé de tri AVANT laquelle se termine le listage (et non pas à, si cette valeur existe elle ne sera pas incluse !). Utilisable uniquement avec $1sort=sortkey. Écrase $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Préfixe de la clé de tri <strong>avant</strong> laquelle se termine le listage (et non pas <strong>à</strong> ;  si cette valeur existe elle ne sera pas incluse !). Utilisable uniquement avec $1sort=sortkey. Écrase $1endhexsortkey.",
        "apihelp-query+categorymembers-param-startsortkey": "Utiliser plutôt $1starthexsortkey.",
        "apihelp-query+categorymembers-param-endsortkey": "Utiliser plutôt $1endhexsortkey.",
        "apihelp-query+categorymembers-example-simple": "Obtenir les 10 premières pages de <kbd>Category:Physics</kbd>.",
        "apihelp-query+extlinks-param-expandurl": "Étendre les URLs relatives au protocole avec le protocole canonique.",
        "apihelp-query+extlinks-example-simple": "Obtenir une liste des liens externes de <kbd>Main Page<kbd>.",
        "apihelp-query+exturlusage-description": "Énumérer les pages contenant une URL donnée.",
-       "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;url:Ajoute l’URL utilisée dans la page.",
+       "apihelp-query+exturlusage-param-prop": "Quelles informations inclure :",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Ajoute l’URL utilisée dans la page.",
        "apihelp-query+exturlusage-param-protocol": "Protocole de l’URL. Si vide et que <var>$1query</var>  est rempli, le protocole est <kbd>http</kbd>. Le laisser avec <var>$1query</var>  vide pour lister tous les liens externes.",
        "apihelp-query+exturlusage-param-query": "Rechercher une chaîne sans protocole. Voyez [[Special:LinkSearch]]. Le laisser vide liste tous les liens externes.",
        "apihelp-query+exturlusage-param-namespace": "Les espaces de nom à énumérer.",
        "apihelp-query+filearchive-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+filearchive-param-sha1": "Hachage SHA1 de l’image. Écrase $1sha1base36.",
        "apihelp-query+filearchive-param-sha1base36": "Hachage SHA1 de l’image en base 36 (utilisé dans MédiaWiki).",
-       "apihelp-query+filearchive-param-prop": "Quelle information obtenir sur l’image :\n;sha1:Ajoute le hachage SHA-1 pour l’image.\n;timestamp:Ajoute l÷’horodatage pour la version téléchargée.\n;user:Ajoute l’utilisateur qui a téléchargé la version de l’image.\n;size:Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de page (si c’est applicable).\n;dimensions:Alias pour la taille.\n;description:Ajoute la description de la version de l’image.\n;parseddescription:Analyser la description de la version.\n;mime:Ajoute le MIME de l’image.\n;mediatype:Ajoute le type de média de l’image.\n;metadata:Liste les métadonnées Exif pour la version de l’image.\n;bitdepth:Ajoute la profondeur de bit de la version.\n;archivename:Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
+       "apihelp-query+filearchive-param-prop": "Quelle information obtenir sur l’image :",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Ajoute le hachage SHA-1 pour l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Ajoute l÷’horodatage pour la version téléchargée.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Ajoute l’utilisateur qui a téléchargé la version de l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Ajoute la taille de l’image en octets et la hauteur, la largeur et le nombre de page (si c’est applicable).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias pour la taille.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Ajoute la description de la version de l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analyser la description de la version.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Ajoute le MIME de l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Ajoute le type de média de l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "Liste les métadonnées Exif pour la version de l’image.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Ajoute la profondeur de bit de la version.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
        "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
        "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’image configurés dans le wiki.",
        "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
        "apihelp-query+filerepoinfo-example-simple": "Obtenir l’information sur les référentiels de fichier",
        "apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.",
-       "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Marque si la page est une redirection.",
+       "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de chaque page.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Titre de chaque page.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Marque si la page est une redirection.",
        "apihelp-query+fileusage-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
        "apihelp-query+fileusage-param-limit": "Combien renvoyer.",
        "apihelp-query+fileusage-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
        "apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.",
        "apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1blprefix</var>.",
        "apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.",
-       "apihelp-query+iwbacklinks-param-prop": "Quelles propriétés obtenir :\n;iwprefix:Ajoute le préfixe de l’interwiki.\n;iwtitle:Ajoute le titre de l’interwiki.",
+       "apihelp-query+iwbacklinks-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Ajoute le préfixe de l’interwiki.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Ajoute le titre de l’interwiki.",
        "apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[wikibooks:Test]]",
        "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[wikibooks:Test]]",
        "apihelp-query+iwlinks-description": "Renvoie tous les liens interwiki des pages indiquées.",
        "apihelp-query+iwlinks-param-url": "S&il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
-       "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.",
+       "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Ajoute l’URL complète.",
        "apihelp-query+iwlinks-param-limit": "Combien de liens interwiki renvoyer.",
        "apihelp-query+iwlinks-param-prefix": "Renvoyer uniquement les liens interwiki avec ce préfixe.",
        "apihelp-query+iwlinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec <var>$1prefix</var>.",
        "apihelp-query+langbacklinks-param-lang": "Langue pour le lien de langue.",
        "apihelp-query+langbacklinks-param-title": "Lien interlangue à rechercher. Doit être utilisé avec $1lang.",
        "apihelp-query+langbacklinks-param-limit": "Combien de pages renvoyer au total.",
-       "apihelp-query+langbacklinks-param-prop": "Quelles propriétés obtenir :\n;lllang:Ajoute le code de langue du lien de langue.\n;lltitle:Ajoute le titre du lien de langue.",
+       "apihelp-query+langbacklinks-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Ajoute le code de langue du lien de langue.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Ajoute le titre du lien de langue.",
        "apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+langbacklinks-example-simple": "Obtenir les pages avec un lien avec [[:fr:Test]]",
        "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]]",
        "apihelp-query+langlinks-description": "Renvoie tous les liens interlangue des pages fournies.",
        "apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.",
        "apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec <var>$1prop</var>).",
-       "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.\n;langname:Ajoute le nom localisé de la langue (au mieux). Utiliser <var>$1inlanguagecode</var> pour contrôler la langue.\n;autonym:Ajoute le nom natif de la langue.",
+       "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Ajoute l’URL complète.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "Ajoute le nom localisé de la langue (au mieux). Utiliser <var>$1inlanguagecode</var> pour contrôler la langue.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Ajoute le nom natif de la langue.",
        "apihelp-query+langlinks-param-lang": "Renvoyer uniquement les liens interlangue avec ce code de langue.",
        "apihelp-query+langlinks-param-title": "Lien à rechercher. Doit être utilisé avec <var>$1lang</var>.",
        "apihelp-query+langlinks-param-dir": "La direction dans laquelle énumérer.",
        "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans <kbd>Main Page</kbd>.",
        "apihelp-query+links-example-namespaces": "Obtenir les liens de la page <kbd>Accueil</kbd> dans les espaces de nom {{ns:user}} et {{ns:template}}.",
        "apihelp-query+linkshere-description": "Trouver toutes les pages ayant un lien vers les pages données.",
-       "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Indique si la page est une redirection.",
+       "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de chaque page.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Titre de chaque page.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Indique si la page est une redirection.",
        "apihelp-query+linkshere-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
        "apihelp-query+linkshere-param-limit": "Combien de résultats renvoyer.",
        "apihelp-query+linkshere-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
        "apihelp-query+linkshere-example-simple": "Obtenir une liste des pages liées à  [[Main Page]]",
        "apihelp-query+linkshere-example-generator": "Obtenir des informations sur les pages liées à [[Main Page]]",
        "apihelp-query+logevents-description": "Obtenir des événements des journaux.",
-       "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :\n;ids:Ajoute l’ID de l’événement.\n;title:Ajoute le titre de la page pour l’événement.\n;type:Ajoute le type de l’événement.\n;user:Ajoute l’utilisateur responsable de l’événement.\n;userid:Ajoute l’ID de l’utilisateur responsable de l’événement.\n;timestamp:Ajoute l’horodatage de l’événement.\n;comment:Ajoute le commentaire de l’événement.\n;parsedcomment:Ajoute le commentaire analysé de l’événement.\n;details:Liste les détails supplémentaires sur l’événement.\n;tags:Liste les balises de l’événement.",
+       "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Ajoute l’ID de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-title": "Ajoute le titre de la page pour l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-type": "Ajoute le type de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-user": "Ajoute l’utilisateur responsable de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur responsable de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "Ajoute le commentaire de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-details": "Liste les détails supplémentaires sur l’événement.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "Liste les balises de l’événement.",
        "apihelp-query+logevents-param-type": "Filtrer les entrées du journal à ce seul type.",
        "apihelp-query+logevents-param-action": "Filtrer les actions du journal à cette seule action. Écrase <var>$1type</var>. Des actions avec une astérisque de la forme <var>$1type</var> sont autorisées pour spécifier n’importe quelle chaîne à la place de l’astérisque.",
        "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
        "apihelp-query+pageprops-example-simple": "Obtenir les propriétés des pages <kbd>Accueil</kbd> et <kbd>MédiaWiki</kbd>.",
        "apihelp-query+pageswithprop-description": "Lister toutes les pages utilisant une propriété de page donnée.",
        "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages.",
-       "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;value:Ajoute la valeur de la propriété de page.",
+       "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Ajoute l’ID de la page.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Ajoute le titre et l’ID de l’espace de noms de la page.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "Ajoute la valeur de la propriété de page.",
        "apihelp-query+pageswithprop-param-limit": "Le nombre maximal de pages à renvoyer.",
        "apihelp-query+pageswithprop-param-dir": "Dans quelle direction trier.",
        "apihelp-query+pageswithprop-example-simple": "Lister les 10 premières pages en utilisant <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
-       "apihelp-query+pageswithprop-example-generator": "Obtenir des informations sur les 10 premières pages utilisant <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Obtenir des informations supplémentaires sur les 10 premières pages utilisant <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-description": "Effectuer une recherche de préfixe sur les titres de page.",
        "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
        "apihelp-query+prefixsearch-param-namespace": "Espaces de nom à rechercher.",
        "apihelp-query+protectedtitles-param-limit": "Combien de pages renvoyer au total.",
        "apihelp-query+protectedtitles-param-start": "Démarrer la liste à cet horodatage de protection.",
        "apihelp-query+protectedtitles-param-end": "Arrêter la liste à cet horodatage de protection.",
-       "apihelp-query+protectedtitles-param-prop": "Quelles propriétés obtenir :\n;timestamp:Ajoute l’horodatage de l’ajout de la protection.\n;user:Ajoute l’utilisateur ayant ajouté la protection.\n;userid:Ajoute l’ID de l’utilisateur ayant ajouté la protection.\n;comment:Ajoute le commentaire de la protection.\n;parsedcomment:Ajoute le commentaire analysé de la protection.\n;expiry:Ajoute l’horodatage de levée de la protection.\n;level:Ajoute le niveau de protection.",
+       "apihelp-query+protectedtitles-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Ajoute l’horodatage de l’ajout de la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Ajoute l’utilisateur ayant ajouté la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur ayant ajouté la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Ajoute le commentaire pour la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Ajoute l’horodatage de levée de la protection.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Ajoute le niveau de protection.",
        "apihelp-query+protectedtitles-example-simple": "Lister les titres protégés",
        "apihelp-query+protectedtitles-example-generator": "Trouver les liens vers les titres protégés dans l’espace de noms principal",
        "apihelp-query+querypage-description": "Obtenir une liste fournie par une page spéciale basée sur QueryPage",
        "apihelp-query+recentchanges-param-user": "Lister uniquement les modifications par cet utilisateur.",
        "apihelp-query+recentchanges-param-excludeuser": "Ne pas lister les modifications par cet utilisateur.",
        "apihelp-query+recentchanges-param-tag": "Lister uniquement les modifications marquées avec cette balise.",
-       "apihelp-query+recentchanges-param-prop": "Inclure des informations supplémentaires :\n;user:Ajoute l’utilisateur responsable de la modification et marque si c’est une adresse IP.\n;userid:Ajoute l’ID de l’utilisateur responsable de la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé pour la modification.\n;flags:Ajoute les balises de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;title:Ajoute le titre de la page modifiée.\n;ids:Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et la nouvelle révisions.\n;sizes:Ajoute l’ancienne et la nouvelle tailles de la page en octets.\n;redirect:Marque la modification si la page est une redirection.\n;patrolled:Marque les modifications patrouillables comme patrouillées ou non.\n;loginfo:Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.\n;tags:Liste les balises de l’entrée.\n;sha1:Ajoute la somme de contrôle du contenu pour les entrées associées à une révision.",
+       "apihelp-query+recentchanges-param-prop": "Inclure des informations supplémentaires :",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Ajoute l’utilisateur responsable de la modification et marque si c’est une adresse IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur responsable de la modification.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé pour la modification.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "Ajoute les balises de la modification.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "Ajoute le titre de la page modifiée.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et la nouvelle révisions.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Ajoute l’ancienne et la nouvelle tailles de la page en octets.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "Marque la modification si la page est une redirection.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Marque les modifications patrouillables comme patrouillées ou non.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Liste les balises de l’entrée.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Ajoute la somme de contrôle du contenu pour les entrées associées à une révision.",
        "apihelp-query+recentchanges-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-query+recentchanges-param-show": "Afficher uniquement les éléments correspondant à ces critères. Par exemple, pour voir uniquement les modifications mineures par des utilisateurs connectés, mettre $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "Combien de modifications renvoyer au total.",
        "apihelp-query+recentchanges-example-simple": "Lister les modifications récentes",
        "apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non patrouillées",
        "apihelp-query+redirects-description": "Renvoie toutes les redirections vers les pages données.",
-       "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :\n;pageid:ID de page de chaque redirection.\n;title:Titre de chaque redirection.\n;fragment:Fragment de chaque redirection, s’il y en a un.",
+       "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "ID de page de chaque redirection.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Titre de chaque redirection.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Fragment de chaque redirection, s’il y en a un.",
        "apihelp-query+redirects-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
        "apihelp-query+redirects-param-limit": "Combien de redirections renvoyer.",
        "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.",
        "apihelp-query+revisions-example-first5-after": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> faites après le 01/05/2006.",
        "apihelp-query+revisions-example-first5-not-localhost": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui n’ont pas été faites par l’utilisateur anonyme <kbd>127.0.0.1</kbd>.",
        "apihelp-query+revisions-example-first5-user": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> qui ont été faites par l’utilisateur <kbd>MédiaWiki par défaut</kbd>.",
-       "apihelp-query+revisions+base-param-prop": "Quelles propriétés obtenir pour chaque révision :\n;ids:L’ID de la révision.\n;flags:Marques de la révision (mineure).\n;timestamp:L’horodatage de la révision.\n;user:Utilisateur ayant fait la révision.\n;userid:ID de l’utilisateur ayant créé la révision.\n;size:Taille (en octets) de la révision.\n;sha1:SHA-1 (base 16) de la révision.\n;contentmodel:ID du modèle de contenu de la révision.\n;comment:Commentaire par l’utilisateur de la révision.\n;parsedcomment:Commentaire analysé par l’utilisateur de la révision.\n;content:Texte de la révision.\n;tags:Balises de la révision.\n;parsetree:L’arbre d’analyse XML du contenu de la révision.",
+       "apihelp-query+revisions+base-param-prop": "Quelles propriétés obtenir pour chaque révision :",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "L’ID de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "Marques de la révision (mineure).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "L’horodatage de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "L’utilisateur qui a fait la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "L’ID de l’utilisateur créateur de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Longueur (en octets) de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "Hachage SHA-1 (base 16) de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID du modèle de contenu de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Commentaire de l’utilisateur sur la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Commentaire analysé de l’utilisateur sur la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Texte de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Balises de la révision.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Limiter le nombre de révisions retournées.",
        "apihelp-query+revisions+base-param-expandtemplates": "Développer les modèles dans le contenu de la révision (nécessite $1prop=content).",
        "apihelp-query+revisions+base-param-generatexml": "Générer l’arbre d’analyse XML pour le contenu de la révision (nécessite $1prop=content ; remplacé par <kbd>$1prop=parsetree</kbd>).",
        "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de nom.",
        "apihelp-query+search-param-what": "Quel type de recherche effectuer.",
        "apihelp-query+search-param-info": "Quelles métadonnées renvoyer.",
-       "apihelp-query+search-param-prop": "Quelles propriétés renvoyer :\n;size:Ajoute la taille de la page en octets.\n;wordcount:Ajoute le nombre de mots de la page.\n;timestamp:Ajoute l’horodatage de la dernière modification de la page.\n;snippet:Ajoute un extrait analysé de la page.\n;titlesnippet:Ajoute un extrait analysé du titre de la page.\n;redirectsnippet:Ajoute un extrait analysé du titre de la redirection.\n;redirecttitle:Ajoute le titre de la redirection correspondante.\n;sectionsnippet:Ajoute un extrait analysé du titre de la section correspondante.\n;sectiontitle:Ajoute le titre de la section correspondante.\n;categorysnippet:Ajoute un extrait analysé de la catégorie correspondante.\n;isfilematch:Ajoute un booléen indiquant si la recherche correspond au contenu du fichier.\n;score:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>",
+       "apihelp-query+search-param-prop": "Quelles propriétés renvoyer :",
+       "apihelp-query+search-paramvalue-prop-size": "Ajoute la taille de la page en octets.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Ajoute le nombre de mots de la page.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Ajoute l’horodatage de la dernière modification de la page.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Ajoute un extrait analysé de la page.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Ajoute un extrait analysé du titre de la page.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "Ajoute un extrait analysé du titre de la redirection.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Ajoute le titre de la redirection correspondante.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "Ajoute un extrait analysé du titre de la section correspondante.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "Ajoute le titre de la section correspondante.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "Ajoute un extrait analysé de la catégorie correspondante.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Ajoute un booléen indiquant si la recherche correspond au contenu du fichier.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>",
        "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
        "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
        "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
        "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>signification</kbd>.",
        "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>signification</kbd>.",
        "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.",
-       "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :\n;general:Information globale du système.\n;namespaces:Liste des espaces de nom déclarés et leur nom canonique.\n;namespacealiases:Liste des alias des espaces de nom déclarés.\n;specialpagealiases:Liste des alias des pages spéciales.\n;magicwords:Liste des mots magiques et leurs alias.\n;statistics:Renvoie les statistiques du site.\n;interwikimap:Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).\n;dbrepllag:Renvoie le serveur de base de donnée avec la plus grande latence de réplication.\n;usergroups:Renvoie les groupes utilisateur et les droits associés.\n;libraries:Renvoie les bibliothèques installées sur le wiki.\n;extensions:Renvoie les extensions installées sur le wiki.\n;fileextensions:Renvoie la liste des extensions de fichier autorisées au téléchargement.\n;rightsinfo:Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.\n;restrictions:Renvoie l’information sur les types de restriction disponibles (protection).\n;languages:Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant <var>$1inlanguagecode</var>).\n;skins:Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).\n;extensiontags:Renvoie une liste des balises d’extension de l’analyseur.\n;functionhooks:Renvoie une liste des accroches de fonction de l’analyseur.\n;showhooks:Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Renvoie une liste des IDs de variable.\n;protocols:Renvoie une liste des protocoles qui sont autorisés dans les liens externes.\n;defaultoptions:Renvoie les valeurs par défaut pour les préférences utilisateur.",
+       "apihelp-query+siteinfo-param-prop": "Quelles informations obtenir :",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Information globale du système.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Liste des espaces de nom déclarés et leur nom canonique.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Liste des alias des espaces de nom déclarés.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Liste des alias des pages spéciales.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Liste des mots magiques et leurs alias.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Renvoie les statistiques du site.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Renvoie le serveur de base de donnée avec la plus grande latence de réplication.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Renvoie les groupes utilisateur et les droits associés.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Renvoie les bibliothèques installées sur le wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Renvoie les extensions installées sur le wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Renvoie la liste des extensions de fichier autorisées au téléchargement.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Renvoie l’information sur les types de restriction disponibles (protection).",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Renvoie une liste des langues que supporte MédiaWiki (éventuellement localisé en utilisant <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Renvoie une liste des balises d’extension de l’analyseur.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Renvoie une liste des accroches de fonction de l’analyseur.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Renvoie une liste des IDs de variable.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Renvoie une liste des protocoles qui sont autorisés dans les liens externes.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Renvoie les valeurs par défaut pour les préférences utilisateur.",
        "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.",
        "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.",
        "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.",
        "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
        "apihelp-query+tags-description": "Lister les balises de modification.",
        "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
-       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.\n;defined:Indique si la balise est définie.\n;source:Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.\n;active:Si la balise est encore appliquée.",
+       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :",
+       "apihelp-query+tags-paramvalue-prop-name": "Ajoute le nom de la balise.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Ajoute le message système pour la balise.",
+       "apihelp-query+tags-paramvalue-prop-description": "Ajoute la description de la balise.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.",
+       "apihelp-query+tags-paramvalue-prop-defined": "Indique si la balise est définie.",
+       "apihelp-query+tags-paramvalue-prop-source": "Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
+       "apihelp-query+tags-paramvalue-prop-active": "Si la balise est encore appliquée.",
        "apihelp-query+tags-example-simple": "Lister les balises disponibles",
        "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
        "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
        "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut)",
        "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille",
        "apihelp-query+transcludedin-description": "Trouver toutes les pages qui incluent les pages données.",
-       "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de page de chaque page.\n;title:Titre de chaque page.\n;redirect:Marque si cette page est une redirection.",
+       "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de page de chaque page.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Titre de chaque page.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marque si cette page est une redirection.",
        "apihelp-query+transcludedin-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
        "apihelp-query+transcludedin-param-limit": "Combien en renvoyer.",
        "apihelp-query+transcludedin-param-show": "Afficher uniquement les éléments qui correspondent à ces critères:\n;redirect:Afficher uniquement les redirections.\n;!redirect:Afficher uniquement les non-redirections.",
        "apihelp-query+usercontribs-param-user": "Les utilisateurs pour lesquels récupérer les contributions.",
        "apihelp-query+usercontribs-param-userprefix": "Récupérer les contributions pour tous les utilisateurs dont les noms commencent par cette valeur. Écrase $1user.",
        "apihelp-query+usercontribs-param-namespace": "Lister uniquement les contributions dans ces espaces de nom.",
-       "apihelp-query+usercontribs-param-prop": "Inclure des informations supplémentaires:\n;ids:Ajoute l’ID de page et l’ID de révision.\n;title:Ajoute le titre et l’ID d’espace de noms de la page.\n;timestamp:Ajoute l’horodatage de la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;size:Ajoute la nouvelle taille de la modification.\n;sizediff:Ajoute le delta de taille de la modification par rapport à son parent.\n;flags:Ajoute les marques de la modification.\n;patrolled:Marque les modifications patrouillées.\n;tags:Liste les balises de la modification.",
+       "apihelp-query+usercontribs-param-prop": "Inclure des informations supplémentaires:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Ajoute l’ID de page et l’ID de révision.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Ajoute le titre et l’ID d’espace de noms de la page.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la modification.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "Ajoute la nouvelle taille de la modification.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Ajoute le delta de taille de la modification par rapport à son parent.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "Ajoute les marques de la modification.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marque les modifications patrouillées.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Liste les balises de la modification.",
        "apihelp-query+usercontribs-param-show": "Afficher uniquement les éléments correspondant à ces critères, par ex. les modifications non mineures uniquement : <kbd>$2show=!minor</kbd>.\n\nSi <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> est positionné, les révisions plus anciennes que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|seconde|secondes}}) ne seront pas affichées.",
        "apihelp-query+usercontribs-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
        "apihelp-query+usercontribs-param-toponly": "Lister uniquement les modifications qui sont la dernière révision.",
        "apihelp-query+usercontribs-example-user": "Afficher les contributions de l'utilisateur <kbd>Exemple</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Afficher les contributions de toutes les adresses IP avec le préfixe <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obtenir de l’information sur l’utilisateur courant.",
-       "apihelp-query+userinfo-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.\n;hasmsg:Ajoute une balise <samp>message</samp> si l’utilisateur actuel a des messages en cours.\n;groups:Liste tous les groupes auxquels appartient l’utilisateur actuel.\n;implicitgroups:Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.\n;rights:Liste tous les droits qu’a l’utilisateur actuel.\n;changeablegroups:Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.\n;options:Liste toutes les préférences qu’a défini l’utilisateur actuel.\n;preferencestoken:<span class=\"apihelp-deprecated\">Obsolete.</span> Obtient un jeton pour modifier les préférences de l’utilisateur actuel.\n;editcount:Ajoute le compteur de modifications de l’utilisateur actuel.\n;ratelimits:Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.\n;realname:Ajoute le vrai nom de l’utilisateur actuel.\n;email:Ajoute l’adresse de courriel de l’utilisateur et sa date d’authentification.\n;acceptlang:Renvoie en écho l’entête <code>Accept-Language</code> envoyé par le client dans un format structuré.\n;registrationdate:Ajoute la date d’inscription de l’utilisateur.\n;unreadcount:Ajoute le compteur de pages non lues de la liste de suivi de l’utilisateur (au maximum $1 ; renvoie <samp>$2</samp> s’il y en a plus).",
+       "apihelp-query+userinfo-param-prop": "Quelles informations inclure :",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marque si l’utilisateur actuel est bloqué, par qui, et pour quelle raison.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Ajoute une balise <samp>messages</samp> si l’utilisateur actuel a des messages en cours.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Liste tous les groupes auxquels appartient l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Liste tous les groupes dont l’utilisateur actuel est automatiquement membre.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Liste tous les droits qu’a l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Liste les groupes pour lesquels l’utilisateur actuel peut ajouter ou supprimer.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Liste toutes les préférences qu’a défini l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Obsolete.</span> Obtenir un jeton pour modifier les préférences de l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Liste toutes les limites de débit s’appliquant à l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Ajoute le vrai nom de l’utilisateur actuel.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Ajoute l’adresse de courriel de l’utilisateur et sa date d’authentification.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Renvoie en écho l’entête <code>Accept-Language</code> envoyé par le client dans un format structuré.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Ajoute la date d’inscription de l’utilisateur.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Ajoute le compteur de pages non lues de la liste de suivi de l’utilisateur (au maximum $1 ; renvoie <samp>$2</samp> s’il y en a plus).",
        "apihelp-query+userinfo-example-simple": "Obtenir de l’information sur l’utilisateur actuel",
        "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel",
        "apihelp-query+users-description": "Obtenir des information sur une liste d’utilisateurs",
-       "apihelp-query+users-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.\n;groups:Liste tous les groupes auquel appartient chaque utilisateur.\n;implicitgroups:Liste tous les groupes dont un utilisateur est automatiquement membre.\n;rights:Liste tous les droits qu’a un utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage d’inscription de l’utilisateur.\n;emailable:Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].\n;gender:Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
+       "apihelp-query+users-param-prop": "Quelles informations inclure :",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.",
+       "apihelp-query+users-paramvalue-prop-groups": "Liste tous les groupes auquel appartient chaque utilisateur.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "Liste tous les groupes dont un utilisateur est automatiquement membre.",
+       "apihelp-query+users-paramvalue-prop-rights": "Liste tous les droits qu’a un utilisateur.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Ajoute le compteur de modifications de l’utilisateur.",
+       "apihelp-query+users-paramvalue-prop-registration": "Ajoute l’horodatage d’inscription de l’utilisateur.",
+       "apihelp-query+users-paramvalue-prop-emailable": "Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
        "apihelp-query+users-param-users": "Une liste des utilisateurs sur lesquels obtenir de l’information.",
        "apihelp-query+users-param-token": "Utiliser plutôt <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-query+users-example-simple": "Renvoyer des informations pour l'utilisateur <kbd>Exemple</kbd>.",
        "apihelp-query+watchlist-param-user": "Lister uniquement les modifications par cet utilisateur.",
        "apihelp-query+watchlist-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
        "apihelp-query+watchlist-param-limit": "Combien de résultats au total renvoyer par demande.",
-       "apihelp-query+watchlist-param-prop": "Quels éléments supplémentaires obtenir :\n;ids:Ajoute les IDs de révision et de page.\n;title:Ajoute le titre de la page.\n;flags:Ajoute les marques de la modification.\n;user:Ajoute l’utilisateur ayant fait la modification.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;patrol:Marque les modifications patrouillées.\n;sizes:Ajoute les ancienne et nouvelle tailles de la page.\n;notificationtimestamp:Ajoute l’horodatage de quand l’utilisateur a été notifié de la modification la dernière fois.\n;loginfo:Ajoute l’information du journal quand c’est approprié.",
+       "apihelp-query+watchlist-param-prop": "Quelles propriétés supplémentaires obtenir :",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Ajoute les IDs de révision et de page",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Ajoute le titre de la page.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Ajoute les marqueurs de la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Ajoute l’utilisateur ayant fait la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Ajoute l’ID de l’utilisateur ayant fait la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Ajoute le commentaire de la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Ajoute le commentaire analysé de la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Marque les modifications patrouillées.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Ajoute les tailles ancienne et nouvelle de la page.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Ajoute l’horodatage de la dernière notification de la modification à l’utilisateur.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Ajoute l’information de trace le cas échéant.",
        "apihelp-query+watchlist-param-show": "Afficher uniquement les éléments qui correspondent à ces critères. Par exemple, pour voir uniquement les modifications mineures faites par des utilisateurs connectés, mettre $1show=minor|!anon.",
-       "apihelp-query+watchlist-param-type": "Quels types de modification afficher :\n;edit:Modifications de page normale.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
+       "apihelp-query+watchlist-param-type": "Quels types de modification afficher :\n;edit:Modifications ordinaires de page.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
        "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
        "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsiateur) pour autoriser l’accès à la liste de suivi d&un autre utilisateur.",
        "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel",
        "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
        "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
-       "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :\n;changed:Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
+       "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
        "apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
        "apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
        "apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
        "apihelp-rollback-example-summary": "Annuler les dernières modifications de la page <kbd>Main Page</kbd> par l’utilisateur à l’adresse IP <kbd>192.0.2.5</kbd> avec le résumé <kbd>Annulation de vandalisme<kbd>, et marquer ces modifications et l’annulation comme modifications de robots.",
        "apihelp-rsd-description": "Exporter un schéma RSD (Découverte Très Simple).",
        "apihelp-rsd-example-simple": "Exporter le schéma RSD",
-       "apihelp-setnotificationtimestamp-description": "Mettre à jour l’horodatage de notification pour les pages suivies.\n\nCela affecte la mise en évidence des pages modifiées dans la liste de suivi et l’historique, et l’envoi de courriel quand la préférence « M’envoyer un courriel quand une page de ma liste de suivi est modifiée » est activée.",
+       "apihelp-setnotificationtimestamp-description": "Mettre à jour l’horodatage de notification pour les pages suivies.\n\nCela affecte la mise en évidence des pages modifiées dans la liste de suivi et l’historique, et l’envoi de courriel quand la préférence « {{int:tog-enotifwatchlistpages}} » est activée.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Travailler sur toutes les pages suivies.",
        "apihelp-setnotificationtimestamp-param-timestamp": "Horodatage auquel dater la notification.",
        "apihelp-setnotificationtimestamp-param-torevid": "Révision pour laquelle fixer l’horodatage de notification (une page uniquement).",
        "apihelp-undelete-param-watchlist": "Ajouter ou supprimer la page de la liste de suivi de l’utilisateur actuel sans condition, utiliser les préférences ou ne pas modifier le suivi.",
        "apihelp-undelete-example-page": "Annuler la suppression de la page <kbd>Main Page</kbd>.",
        "apihelp-undelete-example-revisions": "Annuler la suppression de deux révisions de la page <kbd>Main Page</kbd>.",
-       "apihelp-upload-description": "Télécharger un fichier, ou obtenir l’état des téléchargements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Télécharger directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Télécharger le fichier par morceaux, en utilsiant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utiliser le paramètre <var>$1url</var>.\n* Terminer un téléchargement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléchargement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
+       "apihelp-upload-description": "Téléverser un fichier, ou obtenir l’état des téléversements en cours.\n\nPlusieurs méthodes sont disponibles :\n* Téléverser directement le contenu du fichier, en utilisant le paramètre <var>$1file</var>.\n* Téléverser le fichier par morceaux, en utilisant les paramètres <var>$1filesize</var>, <var>$1chunk</var>, and <var>$1offset</var>.\n* Pour que le serveur MédiaWiki cherche un fichier depuis une URL, utilisez le paramètre <var>$1url</var>.\n* Terminer un téléversement précédent qui a échoué à cause d’avertissements, en utilisant le paramètre <var>$1filekey</var>.\nNoter que le POST HTTP doit être fait comme un téléversement de fichier (par ex. en utilisant <code>multipart/form-data</code>) en envoyant le <code>multipart/form-data</code>.",
        "apihelp-upload-param-filename": "Nom de fichier cible.",
        "apihelp-upload-param-comment": "Télécharger le commentaire. Utilisé aussi comme texte de la page initiale pour les nouveaux fichiers si <var>$1text</var> n’est pas spécifié.",
        "apihelp-upload-param-text": "Texte de page initiale pour les nouveaux fichiers.",
        "apihelp-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).",
        "apihelp-yaml-description": "Extraire les données au format YAML.",
        "apihelp-yamlfm-description": "Extraire les données YAML (affiché proprement en HTML).",
-       "api-format-title": "Résultat de l’API de MédiaWiki",
+       "api-format-title": "Résultat de l’API de MediaWiki",
        "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de déboguage, et n’est pas approprié à une utilisation applicative.\n\nVoir la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-orm-param-props": "Champs à rechercher.",
        "api-pageset-param-redirects-nogenerator": "Résoudre automatiquement les redirections dans <var>$1titles</var>, <var>$1pageids</var> et <var>$1revids</var>.",
        "api-pageset-param-converttitles": "Convertir les titres dans d’autres variantes si nécessaire. Fonctionne uniquement si la langue de contenu du wiki supporte la conversion en variantes. Les langues qui supportent la conversion en variante incluent $1.",
        "api-help-title": "Aide de l’API de MediaWiki",
-       "api-help-lead": "Ceci est une page d’aide de l’API de MédiaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
+       "api-help-lead": "Ceci est une page d’aide de l’API de MediaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Module principal",
        "api-help-flag-deprecated": "Ce module est obsolète.",
        "api-help-flag-internal": "<strong>Ce module est interne ou instable.</strong> Son fonctionnement peut être modifié sans préavis.",
index c4166e7..6b6345d 100644 (file)
@@ -6,7 +6,10 @@
                        "Chairego apc",
                        "VaiPolaSombra",
                        "Banjo",
-                       "Fisterraeomar"
+                       "Fisterraeomar",
+                       "Toliño",
+                       "Umherirrender",
+                       "Amire80"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:API:Errors_and_warnings|API: Erros e avisos]].",
        "apihelp-opensearch-param-format": "O formato de saída.",
        "apihelp-opensearch-param-warningsaserror": "Se os avisos son recibidos con <kbd>format=json</kbd>, devolver un erro de API no canto de ignoralos.",
        "apihelp-opensearch-example-te": "Atopar páxinas que comezan por <kbd>Te</kbd>.",
-       "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou opcións con claves prefixadas con \"userjs-\" (previstas para ser usadas por scripts de usuario).",
-       "apihelp-options-param-reset": "Reiniciar preferencias ás iniciais do sitio.",
+       "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou aquelas opcións con claves prefixadas con <code>userjs-</code> (previstas para ser usadas por escrituras de usuario).",
+       "apihelp-options-param-reset": "Reinicia as preferencias ás iniciais do sitio.",
        "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
        "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). O valor non pode ter caracteres de barra vertical. Se non se indica un valor (sen u signo igual), p. ex. nomeopcion|outraopcion|..., a opción será gardada co seu valor por defecto.",
-       "apihelp-options-param-optionname": "Nome dunha opción que debe ser fixado ó valor dado por <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "Valor da opción especificada por <var>$1optionname</var>, pode conter o caracter da barra vertical.",
-       "apihelp-options-example-reset": "Restablecer tódaalas preferencias",
+       "apihelp-options-param-optionname": "O nome da opción que debe fixarse no valor dado por <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "O valor para a opción especificada por <var>$1optionname</var>. Pode conter barras verticais.",
+       "apihelp-options-example-reset": "Restablecer todas as preferencias.",
        "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Obter información sobre módulos API.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Devolve as ligazóns interwiki do texto wiki analizado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Devolve o texto wiki orixinal que foi analizado.",
        "apihelp-parse-paramvalue-prop-properties": "Obter varias propiedades definidas no texto wiki analizado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablepp</var> está fixado.",
-       "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablepp</var> está fixado.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
        "apihelp-parse-paramvalue-prop-parsetree": "Árbores de análise XML do contido da revisión (precisa o modelo de contido <code>$1</code>)",
        "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
        "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-section": "Recuperar unicamente o contido deste número de sección ou cando <kbd>new</kbd> xera unha nova sección.\n\nA sección <kbd>new</kbd> só é atendida cando se especifica <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Novo título de sección cando <var>section</var> é <kbd>new</kbd>.\n\nA diferenza da edición de páxinas, non se oculta no <var>summary</var> cando se omite ou está baleiro.",
-       "apihelp-parse-param-disablepp": "Desactivar o informe PP da saída do analizador.",
-       "apihelp-parse-param-disableeditsection": "Desactivar as ligazóns de edición de sección da saída do analizador.",
+       "apihelp-parse-param-disablelimitreport": "Omitir o informe de límite (\"Informe de límite NewPP\") da saída do analizador.",
+       "apihelp-parse-param-disablepp": "Use <var>$1disablelimitreport</var> no seu lugar.",
+       "apihelp-parse-param-disableeditsection": "Omitir as ligazóns de edición de sección da saída do analizador.",
+       "apihelp-parse-param-disabletidy": "Non executar limpeza de HTML no retorno da análise.",
        "apihelp-parse-param-generatexml": "Xenerar unha árbore de análise XML (necesita o modelo de contido <code>$1</code>; substituído por <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Analizar en modo vista previa.",
        "apihelp-parse-param-sectionpreview": "Analizar en modo vista previa de sección (activa tamén o modo de vista previa).",
-       "apihelp-parse-param-disabletoc": "Desactiva o índice na saída.",
+       "apihelp-parse-param-disabletoc": "Omitir o índice na saída.",
        "apihelp-parse-param-contentformat": "Formato de serialización do contido usado para o texto de entrada. Só válido cando se usa con $1text.",
        "apihelp-parse-param-contentmodel": "Modelo de contido do texto de entrada. Se se omite, debe especificarse $1title, e o valor por defecto será o modelo do título especificado. Só válido cando se usa con $1text.",
        "apihelp-parse-example-page": "Analizar unha páxina.",
        "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
        "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
        "apihelp-protect-param-reason": "Razón para (des)protexer.",
-       "apihelp-protect-param-cascade": "Activar protección en cascada (p. ex. protexer páxinas incluídas nesta páxina). Ignorado se todos os niveis de protección proporcionados non permiten o uso en cascada.",
+       "apihelp-protect-param-cascade": "Activar a protección en cascada (por exemplo, protexer os modelos transcluídos e as imaxes usadas nesta páxina). Ignórase se ningún dos niveis de protección soporta a protección en cascada.",
        "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
        "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-protect-example-protect": "Protexer unha páxina",
        "apihelp-query+allcategories-param-min": "Devolver só categorías con polo menos este número de membros.",
        "apihelp-query+allcategories-param-max": "Devolver só categorías con como moito este número de membros.",
        "apihelp-query+allcategories-param-limit": "Cantas categorías devolver.",
-       "apihelp-query+allcategories-param-prop": "Que propiedades recuperar:\n;size: Engade o número de páxinas na categoría.\n;hidden: Marca as categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-param-prop": "Que propiedades recuperar:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Engade o número de páxinas na categoría.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Marca as categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+allcategories-example-size": "Listar categorías con información do número de páxinas en cada unha.",
        "apihelp-query+allcategories-example-generator": "Obter información sobre a páxina de categoría para categorías que comezan por <kbd>List</kbd>.",
        "apihelp-query+alldeletedrevisions-description": "Listar todas as revisións borradas por un usuario ou nun espazo de nomes.",
        "apihelp-query+allfileusages-param-to": "Título do ficheiro no que rematar de enumerar.",
        "apihelp-query+allfileusages-param-prefix": "Buscar tódolos títulos de ficheiro que comezan con este valor.",
        "apihelp-query+allfileusages-param-unique": "Mostrar só nomes de ficheiro distintos. Non pode usarse con $1prop=ids.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
-       "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:\n;ids:Engade os IDs das páxinas usadas (non pode usarse con $1unique).\n;title:Engade o nome do ficheiro.",
+       "apihelp-query+allfileusages-param-prop": "Que partes de información incluír:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "Engade os IDs das páxinas usadas (non pode usarse con $1unique).",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Engade o nome do ficheiro.",
        "apihelp-query+allfileusages-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+allfileusages-param-dir": "Dirección na cal listar.",
        "apihelp-query+allfileusages-example-B": "Lista títulos de ficheiro, incluíndo os   eliminados, cos IDs de páxina dos que proveñen, comezando en <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-to": "Título da ligazón na que rematar de enumerar.",
        "apihelp-query+alllinks-param-prefix": "Buscar tódolos títulos ligados que comezan con este valor.",
        "apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
-       "apihelp-query+alllinks-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da ligazón (non pode usarse con <var>$1unique</var>).\n;título: Engade o título da ligazón.",
+       "apihelp-query+alllinks-param-prop": "Que partes de información incluír:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Engade o ID da páxina da ligazón (non pode usarse con <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Engade o título da ligazón.",
        "apihelp-query+alllinks-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+alllinks-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+alllinks-param-dir": "Dirección na cal listar.",
        "apihelp-query+allredirects-param-to": "Título da redirección na que rematar de enumerar.",
        "apihelp-query+allredirects-param-prefix": "Buscar todas as páxinas que comecen con este valor.",
        "apihelp-query+allredirects-param-unique": "Só mostrar páxinas obxectivo distintas. Non pode usarse con $1prop=ids|fragment|interwiki.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
-       "apihelp-query+allredirects-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina da redirección (non pode usarse con <var>$1unique</var>).\n;title:Engade o título da redirección.\n;fragment:Engade o fragmento da redirección, se o hai (non pode usarse con <var>$1unique</var>).\n;interwiki:Engade o prefixo interwiki da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
+       "apihelp-query+allredirects-param-prop": "Que información incluír:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Engade o ID da páxina da redirección (non pode usarse con <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Engade o título da redirección.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Engade o fragmento da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Engade o prefixo interwiki da redirección, se o hai (non pode usarse con <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+allredirects-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+allredirects-param-dir": "Dirección na cal listar.",
        "apihelp-query+alltransclusions-param-to": "Título da transclusión na que rematar de enumerar.",
        "apihelp-query+alltransclusions-param-prefix": "Buscar todos os títulos transcluídos que comezan con este valor.",
        "apihelp-query+alltransclusions-param-unique": "Mostrar só títulos transcluídos distintos. Non pode usarse con <kbd>$1prop=ids</kbd>.\nCando se usa como xenerador, produce páxinas obxectivo no canto de páxinas fonte.",
-       "apihelp-query+alltransclusions-param-prop": "Que partes de información incluír:\n;ids: Engade o ID da páxina da páxina transcluída (non pode usarse con $1unique).\n;title: Engade o título da transclusión.",
+       "apihelp-query+alltransclusions-param-prop": "Que partes de información incluír:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "Engade o ID da páxina da páxina transcluída (non pode usarse con $1unique).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "Engade o título da transclusión.",
        "apihelp-query+alltransclusions-param-namespace": "Nome de espazos a numerar.",
        "apihelp-query+alltransclusions-param-limit": "Número total de obxectos a devolver.",
        "apihelp-query+alltransclusions-param-dir": "Dirección na cal listar.",
        "apihelp-query+allusers-param-group": "Só incluír os usuarios nos grupos dados.",
        "apihelp-query+allusers-param-excludegroup": "Excluír usuarios nos grupos dados.",
        "apihelp-query+allusers-param-rights": "Incluír só ós usuarios cos dereitos dados. Non se inclúen grupo implícitos nin autopromocionados como *, usuario ou autoconfirmado.",
-       "apihelp-query+allusers-param-prop": "Que información incluír:\n;blockinfo:Engade información sobre o bloque actual do usuario.\n;groups:Lista de grupos nos que está o usuario. Isto usa máis recursos no servidor e pode devolver menos resultados que o límite.\n;implicitgroups:Lista todos os grupos ós que usuario pertence de forma automática.\n;rights:Lista os dereitos que ten o usuario.\n;editcount:Engade o número de edicións do usuario.\n;registration:Engade o selo de tempo do momento no que se rexistrou o usuario, se está dispoñible (pode ser branco).",
+       "apihelp-query+allusers-param-prop": "Que información incluír:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Engade información sobre o bloque actual do usuario.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Lista de grupos nos que está o usuario. Isto usa máis recursos no servidor e pode devolver menos resultados que o límite.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos os grupos ós que usuario pertence de forma automática.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Lista os dereitos que ten o usuario.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Engade o número de edicións do usuario.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "Engade o selo de tempo do momento no que se rexistrou o usuario, se está dispoñible (pode ser branco).",
        "apihelp-query+allusers-param-limit": "Número total de nomes de usuario a devolver.",
        "apihelp-query+allusers-param-witheditsonly": "Só listar usuarios que teñan feito edicións.",
        "apihelp-query+allusers-param-activeusers": "Só listar usuarios activos {{PLURAL:$1|no último día|nos $1 últimos días}}.",
        "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
        "apihelp-query+blocks-param-ip": "Obter todos os bloques aplicables a esta IPs ou a este rango CIDR, incluíndo bloques de rangos.\nNon pode usarse xunto con <var>$3users</var>. Os rangos CIDR maiores que IPv4/$1 ou IPv6/$2 non se aceptan.",
        "apihelp-query+blocks-param-limit": "Número máximo de bloques a listar.",
-       "apihelp-query+blocks-param-prop": "Que propiedades obter:\n;id:Engade o identificador do bloqueo.\n;user:Engade o nome de usario do usuario bloqueado.\n;userid:Engade o identificador de usuario do usuario bloqueado.\n;by:Engade o nome de usuario do usuario que fixo o bloqueo.\n;byid:Engade o identificador do usuario que fixo o bloqueo.\n;timestamp:Engade o selo de tempo de cando se realizou o bloqueo.\n;expiry:Engade o selo de tempo de cando remata o bloqueo.\n;reason:Engade a razón dada para o bloqueo.\n;range:Engade o rango de direccións IP afectadas polo bloqueo.\n;flags:Etiqueta o bloqueo con (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-prop": "Que propiedades obter:",
+       "apihelp-query+blocks-paramvalue-prop-id": "Engade o identificador do bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Engade o nome de usario do usuario bloqueado.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Engade o identificador de usuario do usuario bloqueado.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Engade o nome de usuario do usuario que fixo o bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Engade o identificador do usuario que fixo o bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se realizou o bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Engade o selo de tempo de cando remata o bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Engade a razón dada para o bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Engade o rango de direccións IP afectadas polo bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "Etiqueta o bloqueo con (autoblock, anononly, etc.).",
        "apihelp-query+blocks-param-show": "Só mostrar elementos correspondentes a eses criterios.\nPor exemplo, para ver só bloques indefinidos en direccións IP, ponga <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
        "apihelp-query+blocks-example-users": "Lista de bloques de usuarios <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
        "apihelp-query+categories-description": "Listar todas as categorías ás que pertencen as páxinas.",
-       "apihelp-query+categories-param-prop": "Que propiedades adicionais obter para cada categoría:\n;sortkey:Engade a clave de ordenación (cadea hexadecimal) e o prefixo da clave de ordenación (parte lexible) da categoría.\n;timestamp:Engade o selo de tempo de cando se engadíu a categoría.\n;hidden:Pon unha marca nas categorías que están ocultas con _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-prop": "Que propiedades adicionais obter para cada categoría:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "Engade a clave de ordenación (cadea hexadecimal) e o prefixo da clave de ordenación (parte lexible) da categoría.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se engadíu a categoría.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Pon unha marca nas categorías que están ocultas con <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+categories-param-show": "Tipo de categorías a amosar.",
        "apihelp-query+categories-param-limit": "Cantas categorías devolver.",
        "apihelp-query+categories-param-categories": "Listar só esas categorías. Útil para verificar se unha páxina concreta está nunha categoría determinada.",
        "apihelp-query+categorymembers-description": "Listar tódalas páxinas nunha categoría determinada.",
        "apihelp-query+categorymembers-param-title": "Que categoría enumerar (obrigatorio). Debe incluír o prefixo <kbd>{{ns:category}}:</kbd>. Non pode usarse xunto con <var>$1pageid</var>.",
        "apihelp-query+categorymembers-param-pageid": "ID de páxina da categoría a enumerar. Non se pode usar xunto con <var>$1title</var>.",
-       "apihelp-query+categorymembers-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;sortkey:Engade a clave de ordenación usada para ordenala na categoría (cadea hexadecimal).\n;sortkeyprefix:Engade o prefixo da clave de ordenación usado para ordenala na categoría (parte lexible da clave de ordenación).\n;type:Engade o tipo no que foi categorizado a páxina (páxina, subcategoría ou ficheiro)\n;timestamp:Engade o selo de tempo no que foi incluída a páxina.",
+       "apihelp-query+categorymembers-param-prop": "Que información incluír:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Engade o ID da páxina.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Engade a clave de ordenación usada para ordenala na categoría (cadea hexadecimal).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Engade o prefixo da clave de ordenación usado para ordenala na categoría (parte lexible da clave de ordenación).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "Engade o tipo no que foi categorizado a páxina (páxina, subcategoría ou ficheiro)",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Engade o selo de tempo no que foi incluída a páxina.",
        "apihelp-query+categorymembers-param-namespace": "Só incluír páxinas nestes espazos de nomes. Decátese de que poden usarse  <kbd>$1type=subcat</kbd> ou <kbd>$1type=file</kbd> no canto de <kbd>$1namespace=14</kbd> ou <kbd>6</kbd>.",
        "apihelp-query+categorymembers-param-type": "Que tipo de membros da categoría incluír. Ignorado cando está activo <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-limit": "Máximo número de páxinas a retornar.",
        "apihelp-query+categorymembers-param-dir": "En que dirección ordenar.",
        "apihelp-query+categorymembers-param-start": "Selo de tempo para comezar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-end": "Selo de tempo co que rematar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
-       "apihelp-query+categorymembers-param-starthexsortkey": "Chave de ordenación coa que comezar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
-       "apihelp-query+categorymembers-param-endhexsortkey": "Chave de ordenación coa que rematar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
-       "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da chave de ordenación coa que comezar o listado. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase <var>$1starthexsortkey</var>.",
-       "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da chave de ordenación ANTES de rematar o listado (e non a, se existe este valor entón non será incluído!). Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase $1endhexsortkey.",
-       "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no canto.",
-       "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no canto.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Clave de ordenación coa que comezar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Clave de ordenación na que rematar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da clave de ordenación co que comezar a lista. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Sobrescríbese <var>$1starthexsortkey</var>.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da clave de ordenación no que rematar a lista <strong>antes</strong> (e non <strong>en</strong>; se existe este valor entón non será incluído!). Pode usarse só con $1sort=sortkey. Sobrescríbese $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no seu lugar.",
+       "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no seu lugar.",
        "apihelp-query+categorymembers-example-simple": "Obter as dez primeiras páxinas de <kbd>Category:Physics</kbd>.",
        "apihelp-query+categorymembers-example-generator": "Obter a información das primeiras dez páxinas de <kbd>Category:Physics</kbd>.",
        "apihelp-query+contributors-description": "Obter a lista de contribuidores conectados e o número de contribuidores anónimos dunha páxina.",
        "apihelp-query+extlinks-param-expandurl": "Expandir as URLs relativas a un protocolo co protocolo canónico.",
        "apihelp-query+extlinks-example-simple": "Obter unha de ligazóns externas á <kbd>Páxina Principal<kbd>.",
        "apihelp-query+exturlusage-description": "Enumerar páxinas que conteñen unha dirección URL dada.",
-       "apihelp-query+exturlusage-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;url:Engade a URL usada na páxina.",
+       "apihelp-query+exturlusage-param-prop": "Que información incluír:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Engade o ID da páxina.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Engade a URL usada na páxina.",
        "apihelp-query+exturlusage-param-protocol": "Protocolo da URL. Se está baleiro e está activo <var>$1query</var>, o protocolo é <kbd>http</kbd>. Deixar esa variable e a <var>$1query</var> baleiras para listar todas as ligazóns externas.",
        "apihelp-query+exturlusage-param-query": "Buscar unha cadea sen protocolo. Ver [[Special:LinkSearch]]. Deixar baleira para listar todas as ligazóns externas.",
        "apihelp-query+exturlusage-param-namespace": "Espazo de nomes a enumerar.",
        "apihelp-query+filearchive-param-dir": "Dirección na cal listar.",
        "apihelp-query+filearchive-param-sha1": "Función hash SHA1 da imaxe. Invalida $1sha1base36.",
        "apihelp-query+filearchive-param-sha1base36": "Función hash SHA1 da imaxe en base 36 (usado en MediaWiki).",
-       "apihelp-query+filearchive-param-prop": "Que información de imaxe devolver:\n;sha1:Engade a función hash SHA-1 da imaxe.\n;timestamp:Engade o selo de tempo da versión subida.\n;user:Engade o usuario que subiu a versión da imaxe.\n;size:Engade o tamaño da imaxe en bytes e a altura, anchura e contador de páxina (se é aplicable).\n;dimensions:Alias para o tamaño.\n;description:Engade a descrición da versión da imaxe.\n;parseddescription:Analiza a descrición na versión.\n;mime:Engade o tipo MIME da imaxe.\n;mediatype:Engade o tipo multimedia da imaxe.\n;metadata:Lista os metadatos Exif da versión da imaxe.\n;bitdepth:Engade a profundidade de bit da versión.\n;archivename:Engade o nome do ficheiro da versión do ficheiro para as versións que non son a última.",
+       "apihelp-query+filearchive-param-prop": "Que información de imaxe devolver:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Engade a función hash SHA-1 da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Engade o selo de tempo da versión subida.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Engade o usuario que subiu a versión da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Engade o tamaño da imaxe en bytes e a altura, anchura e contador de páxina (se é aplicable).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias para o tamaño.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Engade a descrición da versión da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Analiza a descrición na versión.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Engade o tipo MIME da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Engade o tipo multimedia da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "Lista os metadatos Exif da versión da imaxe.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Engade a profundidade de bit da versión.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Engade o nome do ficheiro da versión do ficheiro para as versións que non son a última.",
        "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
        "apihelp-query+filerepoinfo-description": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
        "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
        "apihelp-query+filerepoinfo-example-simple": "Obter infomación sobre os repositorios de ficheiros",
        "apihelp-query+fileusage-description": "Atopar tódalas páxinas que usan os ficheiros dados.",
-       "apihelp-query+fileusage-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
+       "apihelp-query+fileusage-param-prop": "Que propiedades obter:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "ID de cada páxina.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Título de cada páxina.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Marca de se a páxina é unha redirección.",
        "apihelp-query+fileusage-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
        "apihelp-query+fileusage-param-limit": "Cantos mostrar.",
        "apihelp-query+fileusage-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefixo para a interwiki.",
        "apihelp-query+iwbacklinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1blprefix</var>.",
        "apihelp-query+iwbacklinks-param-limit": "Número total de páxinas a devolver.",
-       "apihelp-query+iwbacklinks-param-prop": "Que propiedades obter:\n;iwprefix:Engade o prefixo da interwiki.\n;iwtitle:Engade o título da interwiki.",
+       "apihelp-query+iwbacklinks-param-prop": "Que propiedades obter:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Engade o prefixo da interwiki.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Engade o título da interwiki.",
        "apihelp-query+iwbacklinks-param-dir": "Dirección na cal listar.",
        "apihelp-query+iwbacklinks-example-simple": "Obter as páxinas ligadas a [[wikibooks:Test]]",
        "apihelp-query+iwbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[wikibooks:Test]].",
        "apihelp-query+iwlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
        "apihelp-query+iwlinks-param-url": "Se obter a URL completa (non pode usarse con $1prop).",
-       "apihelp-query+iwlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interwiki:\n;url:Engade a URL completa.",
+       "apihelp-query+iwlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interwiki:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Engade a URL completa.",
        "apihelp-query+iwlinks-param-limit": "Cantas ligazóns interwiki devolver.",
        "apihelp-query+iwlinks-param-prefix": "Só devolver ligazóns interwiki con este prefixo.",
        "apihelp-query+iwlinks-param-title": "Ligazón interwiki a buscar. Debe usarse con <var>$1prefix</var>.",
        "apihelp-query+langbacklinks-param-lang": "Lingua para a ligazón de lingua.",
        "apihelp-query+langbacklinks-param-title": "Ligazón de lingua a buscar. Debe usarse con $1lang.",
        "apihelp-query+langbacklinks-param-limit": "Número total de páxinas a devolver.",
-       "apihelp-query+langbacklinks-param-prop": "Que propiedades obter:\n;lllang:Engade o código de lingua á ligazón de páxina.\n;lltitle:Engade o título da ligazón de lingua.",
+       "apihelp-query+langbacklinks-param-prop": "Que propiedades obter:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Engade o código de lingua á ligazón de páxina.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Engade o título da ligazón de lingua.",
        "apihelp-query+langbacklinks-param-dir": "Dirección na cal listar.",
        "apihelp-query+langbacklinks-example-simple": "Obter as páxinas ligadas a [[:fr:Test]].",
        "apihelp-query+langbacklinks-example-generator": "Obter información sobre as páxinas que ligan a [[:fr:Test]].",
        "apihelp-query+langlinks-description": "Devolve todas as ligazóns interwiki ás páxinas indicadas.",
        "apihelp-query+langlinks-param-limit": "Cantas ligazóns de lingua devolver.",
        "apihelp-query+langlinks-param-url": "Se obter a URL completa (non pode usarse con <var>$1prop</var>).",
-       "apihelp-query+langlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interlingüística:\n;url:Engade a URL completa.\n;langname:Engade o nome localizado da lingua (o mellor intento). Use <var>$1inlanguagecode</var> para controlar a lingua.\n;autonym:Engade o nome nativo da lingua.",
+       "apihelp-query+langlinks-param-prop": "Que propiedades adicionais obter para cada ligazón interlingüística:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Engade a URL completa.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "Engade o nome localizado da lingua (o mellor intento). Use <var>$1inlanguagecode</var> para controlar a lingua.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Engade o nome nativo da lingua.",
        "apihelp-query+langlinks-param-lang": "Devolver só ligazóns de lingua con este código de lingua.",
        "apihelp-query+langlinks-param-title": "Ligazón a buscar. Debe usarse con <var>$1lang</var>.",
        "apihelp-query+langlinks-param-dir": "Dirección na cal listar.",
        "apihelp-query+links-example-generator": "Obter información sobre as ligazóns de páxina da <kbd>Main Page</kbd>.",
        "apihelp-query+links-example-namespaces": "Obter as ligazóns á páxina <kbd>Main Page</kbd> nos espazos de nome {{ns:user}} e {{ns:template}}.",
        "apihelp-query+linkshere-description": "Atopar todas as páxinas que ligan coas páxinas dadas.",
-       "apihelp-query+linkshere-param-prop": "Que propiedades obter:\n;pageid:ID de cada páxina.\n;título:Título de cada páxina.\n;redirect:Marca de se a páxina é unha redirección.",
+       "apihelp-query+linkshere-param-prop": "Que propiedades obter:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "ID de cada páxina.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Título de cada páxina.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Marca de se a páxina é unha redirección.",
        "apihelp-query+linkshere-param-namespace": "Só incluír páxinas nestes espazos de nomes.",
        "apihelp-query+linkshere-param-limit": "Cantos mostrar.",
        "apihelp-query+linkshere-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
        "apihelp-query+linkshere-example-simple": "Obter unha lista que ligan á [[Main Page]]",
        "apihelp-query+linkshere-example-generator": "Obter a información das páxinas que ligan á [[Main Page]].",
        "apihelp-query+logevents-description": "Obter os eventos dos rexistros.",
-       "apihelp-query+logevents-param-prop": "Que propiedades obter:\n;ids:Engade o identificador do evento.\n;title:Engade o título da páxina para o evento.\n;type:Engade o tipo de evento.\n;user:Engade o usuario responsable do evento.\n;userid:Engade o identificador do usuario responsable do evento.\n;timestamp:Engade o selo de tempo do evento.\n;comment:Engade o comentario do evento.\n;parsedcomment:Engade o comentario analizado do evento.\n;details:Lista detalles adicionais do evento.\n;tags:Lista as etiquetas do evento.",
+       "apihelp-query+logevents-param-prop": "Que propiedades obter:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Engade o identificador do evento.",
+       "apihelp-query+logevents-paramvalue-prop-title": "Engade o título da páxina para o evento.",
+       "apihelp-query+logevents-paramvalue-prop-type": "Engade o tipo de evento.",
+       "apihelp-query+logevents-paramvalue-prop-user": "Engade o usuario responsable do evento.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "Engade o identificador do usuario responsable do evento.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "Engade o selo de tempo do evento.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "Engade o comentario do evento.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Engade o comentario analizado do evento.",
+       "apihelp-query+logevents-paramvalue-prop-details": "Lista detalles adicionais do evento.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "Lista as etiquetas do evento.",
        "apihelp-query+logevents-param-type": "Filtrar as entradas do rexistro para mostrar só as deste tipo.",
-       "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Accións comodín como  <kbd>action/*</kbd> permiten especificar calquera cadea para o asterisco.",
+       "apihelp-query+logevents-param-action": "Filtrar accións no rexistro para mostrar só esta acción. Ignora <var>$1type</var>. Na lista de posibles valores, valores coa máscara asterisco como <kbd>action/*</kbd> poden ter diferentes cadeas despois da barra (/).",
        "apihelp-query+logevents-param-start": "Selo de tempo no que comezar a enumeración.",
        "apihelp-query+logevents-param-end": "Selo de tempo para rematar a enumeración.",
        "apihelp-query+logevents-param-user": "Filtrar entradas ás feitas polo usuario indicado.",
        "apihelp-query+pageprops-example-simple": "Obter as propiedades para as páxinas <kbd>Main Page</kbd> e <kbd>MediaWiki</kbd>",
        "apihelp-query+pageswithprop-description": "Mostrar a lista de páxinas que empregan unha propiedade determinada.",
        "apihelp-query+pageswithprop-param-propname": "Propiedade de páxina pola que enumerar as páxinas.",
-       "apihelp-query+pageswithprop-param-prop": "Que información incluír:\n;ids:Engade o ID da páxina.\n;title:Engade o título e o ID do espazo de nomes da páxina.\n;value:Engade o valor da propiedade da páxina.",
+       "apihelp-query+pageswithprop-param-prop": "Que información incluír:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Engade o ID da páxina.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Engade o título e o ID do espazo de nomes da páxina.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "Engade o valor da propiedade da páxina.",
        "apihelp-query+pageswithprop-param-limit": "Máximo número de páxinas a retornar.",
        "apihelp-query+pageswithprop-param-dir": "En que dirección ordenar.",
        "apihelp-query+pageswithprop-example-simple": "Lista as dez primeiras páxinas que usan  <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
-       "apihelp-query+pageswithprop-example-generator": "Obter a infomación de páxina das dez primeiras páxinas que usan <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Obter información adicional das dez primeiras páxinas que usan <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-description": "Facer unha busca de prefixo nos títulos das páxinas.",
        "apihelp-query+prefixsearch-param-search": "Buscar texto.",
        "apihelp-query+prefixsearch-param-namespace": "Espazo de nomes no que buscar.",
        "apihelp-query+protectedtitles-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+protectedtitles-param-start": "Comezar a listar neste selo de tempo de protección.",
        "apihelp-query+protectedtitles-param-end": "Rematar de listar neste selo de tempo de protección.",
-       "apihelp-query+protectedtitles-param-prop": "Que propiedades obter:\n;timestamp:Engade o selo de tempo de cando se fixo a protección.\n;user:Engade o usuario que fixo a protección.\n;userid:Engade o ID do usuario que fixo a protección.\n;comment:Engade o comentario da protección.\n;parsedcomment:Engade o comentario analizado da protección.\n;expiry:Engade o selo de tempo no que rematará a protección\n;level:Engade o nivel de protección.",
+       "apihelp-query+protectedtitles-param-prop": "Que propiedades obter:",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Engade o selo de tempo de cando se fixo a protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Engade o usuario que fixo a protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Engade o ID do usuario que fixo a protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Engade o comentario da protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Engade o comentario analizado da protección.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Engade o selo de tempo no que rematará a protección",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Engade o nivel de protección.",
        "apihelp-query+protectedtitles-example-simple": "Listar títulos protexidos",
        "apihelp-query+protectedtitles-example-generator": "Atopar ligazóns ós títulos protexidos no espazo de nomes principal",
        "apihelp-query+querypage-description": "Obtén unha lista proporcionada por unha páxina especial basada en QueryPage.",
        "apihelp-query+querypage-param-page": "Nome da páxina especial. Teña en conta que diferencia entre maiúsculas e minúsculas.",
        "apihelp-query+querypage-param-limit": "Número de resultados a visualizar.",
        "apihelp-query+querypage-example-ancientpages": "Resultados devoltos de [[Special:Ancientpages]].",
-       "apihelp-query+random-description": "Obter un conxunto de páxinas aleatorias.\n\nAs páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.\n\nSe o númeor de páxinas do espazo de nomes é menor que <var>$1limit</var>, devolveranse menos páxinas. Non se devolverá dúas veces a mesma páxina.",
+       "apihelp-query+random-description": "Obter un conxunto de páxinas aleatorias.\n\nAs páxinas están listadas nunha secuencia fixa, só o punto de comezo é aleatorio. Isto significa que se, por exemplo, a <samp>Main Page</samp> é a primeira páxina aleatoria da lista, a <samp>Lista de monos ficticios</samp> será <em>sempre</em> a segunda, <samp>Lista de xente en selos de Vanuatu</samp> será a terceira, etc.",
        "apihelp-query+random-param-namespace": "Devolver páxinas só neste espazo de nomes.",
        "apihelp-query+random-param-limit": "Limitar cantas páxinas aleatorias se van devolver.",
-       "apihelp-query+random-param-redirect": "Cargar unha redirección aleatoria no canto dunha páxina aleatoria.",
+       "apihelp-query+random-param-redirect": "No canto use <kbd>$1filterredir=redirects</kbd>.",
+       "apihelp-query+random-param-filterredir": "Como filtrar para redireccións.",
        "apihelp-query+random-example-simple": "Obter dúas páxinas aleatorias do espazo de nomes principal.",
        "apihelp-query+random-example-generator": "Obter a información da páxina de dúas páxinas aleatorias do espazo de nomes principal.",
        "apihelp-query+recentchanges-description": "Enumerar cambios recentes.",
        "apihelp-query+recentchanges-param-user": "Só listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-excludeuser": "Non listar cambios deste usuario.",
        "apihelp-query+recentchanges-param-tag": "Só listar cambios marcados con esta etiqueta.",
-       "apihelp-query+recentchanges-param-prop": "Inclúe información adicional:\n;user:Engade o usuario responsable da modificación e marca se é unha dirección IP.\n;userid:Engade o identificador do usuario responsable da edición.\n;comment:Engade o comentario da edición.\n;parsedcomment:Engade o comentario analizado da edición.\n;flags:Engade os indicadores da edición.\n;timestamp:Engade o selo de tempo da edición.\n;title:Engade o título da páxina da edición.\n;ids:Engade o identificador da páxina, o identificador dos cambios recentes e o identificador da versión nova e da vella.\n;sizes:Engade a lonxitude nova e vella da páxina en bytes.\n;redirect:Pon unha marca se a páxina é unha redirección.\n;patrolled:Marca as edicións vixiables como vixiadas ou non vixiadas.\n;loginfo:Engade información do rexistro (identificador de rexistro, tipo de rexistro, etc) nas entradas do rexistro.\n;tags:Lista as etiquetas da entrada.\n;sha1:Engade o control de contido para as entradas asociadas a unha revisión.",
+       "apihelp-query+recentchanges-param-prop": "Inclúe información adicional:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Engade o usuario responsable da modificación e marca se é unha dirección IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "Engade o identificador do usuario responsable da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Engade o comentario da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Engade o comentario analizado da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "Engade os indicadores da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Engade o selo de tempo da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "Engade o título da páxina da edición.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "Engade o identificador da páxina, o identificador dos cambios recentes e o identificador da versión nova e da vella.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Engade a lonxitude nova e vella da páxina en bytes.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "Pon unha marca se a páxina é unha redirección.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Marca as edicións vixiables como vixiadas ou non vixiadas.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Engade información do rexistro (identificador de rexistro, tipo de rexistro, etc) nas entradas do rexistro.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Lista as etiquetas da entrada.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Engade o control de contido para as entradas asociadas a unha revisión.",
        "apihelp-query+recentchanges-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
        "apihelp-query+recentchanges-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+recentchanges-example-simple": "Listar cambios recentes.",
        "apihelp-query+recentchanges-example-generator": "Obter a información de páxina sobre cambios recentes sen vixiancia.",
        "apihelp-query+redirects-description": "Devolve todas as redireccións das páxinas indicadas.",
-       "apihelp-query+redirects-param-prop": "Que propiedades recuperar:\n;pageid:ID de páxina de cada redirección.\n;title:Título de cada redirección.\n;fragment:Fragmento de cada redirección, se hai algún.",
+       "apihelp-query+redirects-param-prop": "Que propiedades recuperar:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "ID de páxina de cada redirección.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirección.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirección, se hai algún.",
        "apihelp-query+redirects-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
        "apihelp-query+redirects-param-limit": "Cantos redireccións devolver.",
        "apihelp-query+redirects-param-show": "Só mostrar elementos que cumpran estos criterios:\n;fragment:Só mostrar redireccións que teñan un fragmento.\n;!fragment:Só mostrar redireccións que non teñan un fragmento.",
        "apihelp-query+search-param-namespace": "Buscar só nestes espazos de nomes.",
        "apihelp-query+search-param-what": "Que tipo de busca lanzar.",
        "apihelp-query+search-param-info": "Que metadatos devolver.",
-       "apihelp-query+search-param-prop": "Que propiedades devolver:\n;size:Engade o tamaño da páxina en bytes.\n;wordcount:Engade o número de palabras da páxina.\n;timestamp:Engade o selo de tempo da última vez que foi editada a páxina.\n;snippet:Engade o fragmento analizado da páxina.\n;titlesnippet:Engade un fragmento analizado do título da páxina.\n;redirectsnippet:Engade un fragmento analizado do título da redirección.\n;redirecttitle:Engade o título da redirección asociada.\n;sectionsnippet:Engade un fragmento analizado do título de sección asociado.\n;sectiontitle:Engade o título da sección asociada.\n;categorysnippet:Engade un fragmento analizado da categoría asociada.\n;isfilematch:Engade unha marca indicando se o resultado da busca é un ficheiro.\n;score:<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>",
+       "apihelp-query+search-param-prop": "Que propiedades devolver:",
+       "apihelp-query+search-paramvalue-prop-size": "Engade o tamaño da páxina en bytes.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Engade o número de palabras da páxina.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Engade o selo de tempo da última vez que foi editada a páxina.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Engade o fragmento analizado da páxina.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Engade un fragmento analizado do título da páxina.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "Engade un fragmento analizado do título da redirección.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Engade o título da redirección asociada.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "Engade un fragmento analizado do título de sección asociado.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "Engade o título da sección asociada.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "Engade un fragmento analizado da categoría asociada.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Engade unha marca indicando se o resultado da busca é un ficheiro.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Obsoleto e ignorado.</span>",
        "apihelp-query+search-param-limit": "Número total de páxinas a devolver.",
        "apihelp-query+search-param-interwiki": "Incluir na busca resultados de interwikis, se é posible.",
        "apihelp-query+search-param-backend": "Que servidor de busca usar, se non se indica usa o que hai por defecto.",
        "apihelp-query+search-example-text": "Buscar texto por <kbd>significado</kbd>.",
        "apihelp-query+search-example-generator": "Obter información da páxina sobre as páxinas devoltas por unha busca por <kbd>significado</kbd>.",
        "apihelp-query+siteinfo-description": "Devolver información xeral sobre o sitio.",
-       "apihelp-query+siteinfo-param-prop": "Que información obter:\n;general:Información xeral do sistema.\n;namespaces:Lista dos espazos de nomes rexistrados e os seus nomes canónicos.\n;namespacealiases:Lista de alias de espazos de nomes rexistrados .\n;specialpagealiases:Lista de alias de páxinas especiais.\n;magicwords:Lista de palabras máxicas e os seus alias.\n;statistics:Devolve as estatísticas do sitio.\n;interwikimap:Devolve o mapa interwiki (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).\n;dbrepllag:Devolve o servidor de base de datos con maior retardo de replicación.\n;usergroups:Devolve os grupos de usuarios e os permisos que teñen asociados.\n;libraries:Devolve as bibliotecas de funcións software instaladas na wiki.\n;extensions:Devolve as extensións instaladas na wiki.\n;fileextensions:Devolve a lista de extenxións de ficheiro permitidas para subir ficheiros.\n;rightsinfo:Devolve a información dos dereitos (licenza) da wiki se está dispoñible.\n;restrictions:Devolve información dos tipos de restricións (protección) dispoñibles.\n;languages:Devolve unha lista dos idiomas que soporta Mediawiki (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>).\n;skins:Devolve unha lista de todas as aparencias dispoñibles (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>, noutro caso no idioma do contido).\n;extensiontags:Devolve unha lista de etiquetas de extensión de analizador.\n;functionhooks:Devolve unha lista de ganchos de función de analizador.\n;showhooks:Devolve unha lista de todos os ganchos subscritos (contido de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Devolve unha lista de identificadores de variable.\n;protocols:Devolve unha lista de protocolos que están permitidos nas ligazóns externas.\n;defaultoptions:Devolve os valores por defecto das preferencias de usuario.",
+       "apihelp-query+siteinfo-param-prop": "Que información obter:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Información xeral do sistema.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista dos espazos de nomes rexistrados e os seus nomes canónicos.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista de alias de espazos de nomes rexistrados .",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Lista de alias de páxinas especiais.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Lista de palabras máxicas e os seus alias.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Devolve as estatísticas do sitio.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Devolve o mapa interwiki (opcionalmente filtrado, opcionalmente localizado usando <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devolve o servidor de base de datos con maior retardo de replicación.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Devolve os grupos de usuarios e os permisos que teñen asociados.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Devolve as bibliotecas de funcións software instaladas na wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Devolve as extensións instaladas na wiki.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Devolve a lista de extenxións de ficheiro permitidas para subir ficheiros.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devolve a información dos dereitos (licenza) da wiki se está dispoñible.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devolve información dos tipos de restricións (protección) dispoñibles.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Devolve unha lista dos idiomas que soporta Mediawiki (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Devolve unha lista de todas as aparencias dispoñibles (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>, noutro caso no idioma do contido).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devolve unha lista de etiquetas de extensión de analizador.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve unha lista de ganchos de función de analizador.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve unha lista de todos os ganchos subscritos (contido de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve unha lista de identificadores de variable.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve unha lista de protocolos que están permitidos nas ligazóns externas.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores por defecto das preferencias de usuario.",
        "apihelp-query+siteinfo-param-filteriw": "Só devolver entradas locais ou só non locais da correspondencia interwiki.",
        "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores de base de datos, non só o que teña máis retardo.",
        "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuarios nos grupos de usuarios.",
        "apihelp-query+stashimageinfo-example-params": "Devolve as miniaturas de dous ficheiros almacenados.",
        "apihelp-query+tags-description": "Lista de marcas de cambios.",
        "apihelp-query+tags-param-limit": "Máximo número de etiquetas a listar.",
-       "apihelp-query+tags-param-prop": "Que propiedades recuperar:\n;name:Engade o nome da etiqueta.\n;displayname:Engade a mensaxe do sistema para a etiqueta.\n;description:Engade a descrición da etiqueta.\n;hitcount:Engade o número de modificacións e de entradas do rexistro que teñen esta etiqueta.\n;defined:Indica se a etiqueta está definida.\n;source:Obtén as fontes da etiqueta, que poden incluír <samp>extension</samp> para etiquetas definidas en extensión e <samp>manual</samp> para etiquetas que poden ser aplicadas manualmente polos usuarios.\n;active:Se a etiqueta aínda está a ser usada.",
+       "apihelp-query+tags-param-prop": "Que propiedades recuperar:",
+       "apihelp-query+tags-paramvalue-prop-name": "Engade o nome da etiqueta.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Engade a mensaxe do sistema para a etiqueta.",
+       "apihelp-query+tags-paramvalue-prop-description": "Engade a descrición da etiqueta.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "Engade o número de modificacións e de entradas do rexistro que teñen esta etiqueta.",
+       "apihelp-query+tags-paramvalue-prop-defined": "Indica se a etiqueta está definida.",
+       "apihelp-query+tags-paramvalue-prop-source": "Obtén as fontes da etiqueta, que poden incluír <samp>extension</samp> para etiquetas definidas en extensión e <samp>manual</samp> para etiquetas que poden ser aplicadas manualmente polos usuarios.",
+       "apihelp-query+tags-paramvalue-prop-active": "Se a etiqueta aínda está a ser usada.",
        "apihelp-query+tags-example-simple": "Listar as marcas dispoñibles",
        "apihelp-query+templates-description": "Devolve todas as páxinas incluídas na páxina indicada.",
        "apihelp-query+templates-param-namespace": "Mostrar modelos só neste espazo de nomes.",
        "apihelp-query+tokens-example-simple": "Recuperar un identificador csrf (por defecto).",
        "apihelp-query+tokens-example-types": "Recuperar un identificador vixiancia e un de patrulla.",
        "apihelp-query+transcludedin-description": "Atopar todas as páxinas que inclúen ás páxinas indicadas.",
-       "apihelp-query+transcludedin-param-prop": "Que propiedades obter:\n;pageid:ID de páxina de cada páxina.\n;title:Título de cada páxina.\n;redirect:Marca si a páxina é unha redirección.",
+       "apihelp-query+transcludedin-param-prop": "Que propiedades obter:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de páxina de cada páxina.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Título de cada páxina.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Marca si a páxina é unha redirección.",
        "apihelp-query+transcludedin-param-namespace": "Só incluir páxinas nestes espacios de nomes.",
        "apihelp-query+transcludedin-param-limit": "Cantos mostrar.",
        "apihelp-query+transcludedin-param-show": "Mostrar só elementos que cumpren estes criterios:\n;redirect:Só mostra redireccións.\n;!redirect:Só mostra as que non son redireccións.",
        "apihelp-query+usercontribs-param-user": "Usuarios para os que recuperar as contribucións.",
        "apihelp-query+usercontribs-param-userprefix": "Recuperar as contribucións de todos os usuarios cuxo nome comece por este valor. Ignora $1user.",
        "apihelp-query+usercontribs-param-namespace": "Só listar contribucións nestes espazos de nomes.",
-       "apihelp-query+usercontribs-param-prop": "Engade información adicional:\n;ids:Engade os identificadores de páxina e modificación.\n;title:Engade o título e o identificador do espazo de nomes da páxina.\n;timestamp:Engade o selo de tempo da modificación.\n;comment:Engade o comentario da modificación.\n;parsedcomment:Engade o comentario analizado da modificación.\n;size:Engade o novo tamaño da modificación.\n;sizediff:Engade o delta do tamaño da modificación comparada coa anterior.\n;flags:Engade os indicadores da modificación.\n;patrolled:Marca as modificacións vixiadas.\n;tags:Lista as etiquetas da modificación.",
+       "apihelp-query+usercontribs-param-prop": "Engade información adicional:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Engade os identificadores de páxina e modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Engade o título e o identificador do espazo de nomes da páxina.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Engade o selo de tempo da modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Engade o comentario da modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Engade o comentario analizado da modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "Engade o novo tamaño da modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Engade o delta do tamaño da modificación comparada coa anterior.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "Engade os indicadores da modificación.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marca as modificacións vixiadas.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as etiquetas da modificación.",
        "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
        "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
        "apihelp-query+usercontribs-example-user": "Mostrar as contribucións do usuario <kbd>Exemplo</kbd>.",
        "apihelp-query+usercontribs-example-ipprefix": "Mostrar contribucións de tódalas direccións IP que comezan por <kbd>192.0.2.</kbd>.",
        "apihelp-query+userinfo-description": "Obter información sobre o usuario actual.",
-       "apihelp-query+userinfo-param-prop": "Que pezas de información incluír:\n;blockinfo:Marca se o usuario actual está bloqueado, por que, e por que razón.\n;hasmsg:Engade unha etiqueta <samp>message</samp> (mensaxe) se o usuario actual ten mensaxes pendentes.\n;groups:Lista todos os grupos ós que pertence o usuario actual.\n;implicitgroups:Lista todos so grupos dos que o usuario actual é membro automaticamente. \n;rights:Lista todos os dereitos que ten o usuario actual.\n;changeablegroups:Lista os grupos ós que o usuario pode engadir ou eliminar a outros usuarios.\n;options:Lista todas as preferencias que ten seleccionadas o usuario actual.\n;preferencestoken:<span class=\"apihelp-deprecated\">Obsoleto.</span>Obtén o identificador para cambiar as preferencias do usuario actual.\n;editcount:Engade o contador de edicións do usuario actual.\n;ratelimits:Lista todos o límites de rango aplicados ó usuario actual.\n;realname:Engade o nome real do usuario.\n;email:Engade a dirección de correo electrónico do usuario e a data de autenticación desa dirección.\n;acceptlang:Reenvía a cabeceira <code>Accept-Language</code> enviada polo cliente nun formato estruturado.\n;registrationdate:Engade a data de rexistro do usuario.\n;unreadcount:Engade o número de páxinas sen ler da lista de vixiancia do usuario (máximo $1; devolve <samp>$2</samp> se son máis).",
+       "apihelp-query+userinfo-param-prop": "Que pezas de información incluír:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Marca se o usuario actual está bloqueado, por que, e por que razón.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Engade unha etiqueta <samp>messages</samp> (mensaxe) se o usuario actual ten mensaxes pendentes.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Lista todos os grupos ós que pertence o usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lista todos so grupos dos que o usuario actual é membro automaticamente.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Lista todos os dereitos que ten o usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lista os grupos ós que o usuario pode engadir ou eliminar a outros usuarios.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Lista todas as preferencias que ten seleccionadas o usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Obsoleto.</span>Obtén o identificador para cambiar as preferencias do usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Engade o contador de edicións do usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lista todos o límites de rango aplicados ó usuario actual.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Engade o nome real do usuario.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Engade a dirección de correo electrónico do usuario e a data de autenticación desa dirección.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Reenvía a cabeceira <code>Accept-Language</code> enviada polo cliente nun formato estruturado.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Engade a data de rexistro do usuario.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Engade o número de páxinas sen ler da lista de vixiancia do usuario (máximo $1; devolve <samp>$2</samp> se son máis).",
        "apihelp-query+userinfo-example-simple": "Obter información sobre o usuario actual.",
        "apihelp-query+userinfo-example-data": "Obter información adicional sobre o usuario actual.",
        "apihelp-query+users-description": "Obter información sobre unha lista de usuarios.",
-       "apihelp-query+users-param-prop": "Que información incluír:\n;blockinfo:Etiquetas se o usuario está bloqueado, por quen, e por que razón.\n;groups:Lista todos os grupos ós que pertence cada usuario.\n;implicitgroups:Lista os grupos dos que un usuario é membro de forma automatica.\n;rights:Lista todos os dereitos que ten cada usuario.\n;editcount:Engade o contador de edicións do usuario.\n;registration:Engade o selo de tempo do rexistro do usuario.\n;emailable:Marca se o usuario pode e quere recibir correos usando [[Special:Emailuser]].\n;gender:Marca o xénero do usuario. Devolve \"home\", \"muller\" ou \"descoñecido\".",
+       "apihelp-query+users-param-prop": "Que información incluír:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "Etiquetas se o usuario está bloqueado, por quen, e por que razón.",
+       "apihelp-query+users-paramvalue-prop-groups": "Lista todos os grupos ós que pertence cada usuario.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "Lista os grupos dos que un usuario é membro de forma automatica.",
+       "apihelp-query+users-paramvalue-prop-rights": "Lista todos os dereitos que ten cada usuario.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Engade o contador de edicións do usuario.",
+       "apihelp-query+users-paramvalue-prop-registration": "Engade o selo de tempo do rexistro do usuario.",
+       "apihelp-query+users-paramvalue-prop-emailable": "Marca se o usuario pode e quere recibir correos usando [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "Marca o xénero do usuario. Devolve \"home\", \"muller\" ou \"descoñecido\".",
        "apihelp-query+users-param-users": "Lista de usuarios para os que obter información.",
        "apihelp-query+users-param-token": "Usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> no canto diso.",
        "apihelp-query+users-example-simple": "Mostar información para o usuario <kbd>Exemplo</kbd>.",
        "apihelp-query+watchlist-param-user": "Só listar cambios deste usuario.",
        "apihelp-query+watchlist-param-excludeuser": "Non listar cambios deste usuario.",
        "apihelp-query+watchlist-param-limit": "Cantos resultados totais mostrar por petición.",
-       "apihelp-query+watchlist-param-prop": "Que elementos adicionais obter:\n;ids:Engade os identificadores das revisións e os identificadores das páxinas.\n;title:Engade o título da páxina.\n;flags:Engade etiquetas para a edición.\n;user:Engade o usuario que fixo a edición.\n;userid:Engade o identificador do usuario que fixo a edición.\n;comment:Engade o comentario da edición.\n;parsedcomment:Engade o comentario analizado da edición.\n;timestamp:Engade o selo de tempo da edición.\n;patrol:Marca edicións que están vixiadas.\n;sizes:Engade o tamaño antigo e novo da páxina.\n;notificationtimestamp:Engade o selo de tempo da última vez en que o usuario foi avisado dunha modificación.\n;loginfo:Engade información do rexistro cando sexa axeitado.",
+       "apihelp-query+watchlist-param-prop": "Que propiedades adicionais obter:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Engade os identificadores das revisións e os identificadores das páxinas.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Engade o título da páxina.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Engade etiquetas para a edición.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Engade o usuario que fixo a edición.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Engade o identificador do usuario que fixo a edición.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Engade o comentario da edición.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Engade o comentario analizado da edición.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Engade o selo de tempo da edición.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Marca edicións que están vixiadas.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Engade o tamaño antigo e novo da páxina.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Engade o selo de tempo da última vez en que o usuario foi avisado da modificación.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Engade información do rexistro cando sexa axeitado.",
        "apihelp-query+watchlist-param-show": "Só mostrar elementos que cumpran esos criterios. Por exemplo, para ver só edicións menores feitas por usuarios conectados, activar $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Que tipos de cambios mostrar:\n;edit:Modificacións normais de páxina.\n;external:Modificacións externas.\n;new:Creación de páxinas.\n;log:Entradas no rexistro.",
        "apihelp-query+watchlist-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
        "apihelp-query+watchlistraw-description": "Obter todas as páxinas da lista de vixiancia do usuario actual.",
        "apihelp-query+watchlistraw-param-namespace": "Só listar páxinas nestes espazos de nomes.",
        "apihelp-query+watchlistraw-param-limit": "Cantos resultados totais mostrar por petición.",
-       "apihelp-query+watchlistraw-param-prop": "Que propiedades adicionais obter:\n;changed:Engade o selo de tempo da última notificación ó usuario dunha modificación.",
+       "apihelp-query+watchlistraw-param-prop": "Que propiedades adicionais obter:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "Engade o selo de tempo da última notificación ó usuario dunha modificación.",
        "apihelp-query+watchlistraw-param-show": "Só listar os elementos que cumplen estos criterios.",
        "apihelp-query+watchlistraw-param-owner": "Usado con $1token para acceder á lista de páxinas de vixiancia doutro usuario.",
        "apihelp-query+watchlistraw-param-token": "Identificador de seguridade (dispoñible nas [[Special:Preferences#mw-prefsection-watchlist|preferencias]] de usuario) para permitir o acceso a outros á súa páxina de vixiancia.",
        "apihelp-rollback-example-summary": "Desfacer as últimas edicións á páxina <kbd>Main Page</kbd> polo usuario da dirección IP <kbd>192.0.2.5</kbd> co resumo de edición <kbd>Revertindo vandalismo</kbd>, marcar esas edicións e a reversión como edicións de bot.",
        "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery, Descubrimento Moi Simple).",
        "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
-       "apihelp-setnotificationtimestamp-description": "Actualiza o selo de tempo de notificación das páxinas vixiadas.\n\nIsto afecta ó resalte das páxinas modificadas na lista de vixiancia e historial, e o envío de correo cando a preferencia \"Mandarme un correo cando cambie unha páxina da miña lista de vixiancia\" está activa.",
+       "apihelp-setnotificationtimestamp-description": "Actualizar a data e hora da notificación das páxinas vixiadas.\n\nIsto afecta ao realce das páxinas modificadas na lista de vixiancia e no historial, e ao envío de correos cando a preferencia \"{{int:tog-enotifwatchlistpages}}\" está activada.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Traballar en tódalas páxinas vixiadas.",
        "apihelp-setnotificationtimestamp-param-timestamp": "Selo de tempo ó que fixar a notificación.",
        "apihelp-setnotificationtimestamp-param-torevid": "Modificación á que fixar o selo de tempo de modificación (só unha páxina).",
        "apihelp-tag-param-add": "Etiquetas a engadir. Só poden engadirse etiquetas definidas manualmente.",
        "apihelp-tag-param-remove": "Etiquetas a eliminar. Só se poden eliminar as etiquetas definidas manualmente ou que non teñen ningunha definición.",
        "apihelp-tag-param-reason": "Razón para o cambio.",
-       "apihelp-tag-example-rev": "Engadir a marca <kbd>vandalismo</kbd> á modificación con identificador 123 sen indicar unha razón.",
+       "apihelp-tag-example-rev": "Engadir a etiqueta <kbd>vandalismo</kbd> á revisión con identificador 123 sen indicar un motivo",
        "apihelp-tag-example-log": "Eliminar a etiqueta <kbd>publicidade</kbd> da entrada do rexistro con identificador 123 co motivo <kbd>aplicada incorrectamente</kbd>",
        "apihelp-tokens-description": "Obter os identificadores para accións de modificación de datos.\n\nEste módulo está obsoleto e foi reemprazado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Tipos de identificadores a consultar.",
        "api-help-param-type-boolean": "Tipo: booleano ([[Special:ApiHelp/main#main/datatypes|detalles]])",
        "api-help-param-type-timestamp": "Tipo: {{PLURAL:$1|1=selo de tempo|2=lista de selos de tempo}} ([[Special:ApiHelp/main#main/datatypes|formatos permitidos]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de usuario|2=lista de nomes de usuarios}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Un valor|2=Valores (separados con <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Un valor dos seguintes valores|2=Valores (separados con <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Debe ser baleiro|Pode ser baleiro, ou $2}}",
        "api-help-param-limit": "Non se permiten máis de $1.",
        "api-help-param-limit2": "Non se permiten máis de $1 ($2 para bots).",
index c33805f..54815f8 100644 (file)
@@ -8,7 +8,8 @@
                        "YaronSh",
                        "ערן",
                        "LaG roiL",
-                       "Elyashiv"
+                       "Elyashiv",
+                       "Umherirrender"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|תיעוד]]\n* [[mw:API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:API:Errors_and_warnings|API: שגיאות ואזהרות]].",
@@ -21,7 +22,7 @@
        "apihelp-main-param-requestid": "כל ערך שיינתן כאן ייכלל בתשובה. אפשר להשתמש בזה כדי להבדיל בין בקשות.",
        "apihelp-main-param-servedby": "לכלול את שם המארח ששירת את הבקשה בתוצאות.",
        "apihelp-main-param-curtimestamp": "הכללת חותם־הזמן הנוכחי בתוצאה.",
-       "apihelp-main-param-origin": "×\91עת ×\92×\99ש×\94 ×\9cÖ¾API ×¢×\9d ×\91קשת AJAX ×\97×\95צ×\94 ×\9eת×\97×\9e×\99×\9d (CORS), ×\99ש ×\9c×\94צ×\99×\91 ×\9b×\90×\9f ×\90ת ×\94×\9eת×\97×\9d ×©×\9e×\9e× ×\95 ×\99×\95צ×\90ת ×\94×\91קש×\94. זה היה להיות כלול בכל בקשה מקדימה, ולכן הוא חייב להיות חלק מה־URI של הבקשה (לא גוף ה־POST). זה חייב להיות תואם במדויק לאחד המקורות בכותרת <code>Origin</code>, כך שזה צריך להיות מוגדר למשהו כמו <kbd>https://en.wikipedia.org</kbd> או <kbd>https://meta.wikimedia.org</kbd>. אם הפרמטר הזה אינו תואם לכותרת <code>Origin</code>, תוחזר תשובת 403. אם הפרמטר הזה תורם לכותרת <code>Origin</code> והמקור נמצא ברשימה הלבנה, תוגדר כותרת <code>Access-Control-Allow-Origin</code>.",
+       "apihelp-main-param-origin": "×\91עת ×\92×\99ש×\94 ×\9cÖ¾API ×¢×\9d ×\91קשת AJAX ×\97×\95צ×\94 ×\9eת×\97×\9e×\99×\9d (CORS), ×\99ש ×\9c×\94צ×\99×\91 ×\9b×\90×\9f ×\90ת ×\94×\9eת×\97×\9d ×©×\94×\91קש×\94 ×\99×\95צ×\90ת ×\9e×\9e× ×\95. זה היה להיות כלול בכל בקשה מקדימה, ולכן הוא חייב להיות חלק מה־URI של הבקשה (לא גוף ה־POST). זה חייב להיות תואם במדויק לאחד המקורות בכותרת <code>Origin</code>, כך שזה צריך להיות מוגדר למשהו כמו <kbd>https://en.wikipedia.org</kbd> או <kbd>https://meta.wikimedia.org</kbd>. אם הפרמטר הזה אינו תואם לכותרת <code>Origin</code>, תוחזר תשובת 403. אם הפרמטר הזה תורם לכותרת <code>Origin</code> והמקור נמצא ברשימה הלבנה, תוגדר כותרת <code>Access-Control-Allow-Origin</code>.",
        "apihelp-main-param-uselang": "באיזו שפה להשתמש לתרגומי הודעות. אפשר לקבל רשימת קודים מ־<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> עם <kbd>siprop=languages</kbd> או לציין <kbd>user</kbd> כדי להשתמש בהעדפת השפה של המשתמש הנוכחי, או להגדיר את <kbd>content</kbd> להשתמש בקוד השפה של הוויקי הזה.",
        "apihelp-block-description": "חסימת משתמש.",
        "apihelp-block-param-user": "שם משתמש, כתובת IP, או טווח IP שהנך רוצה לחסום.",
@@ -31,7 +32,7 @@
        "apihelp-block-param-nocreate": "מניעת יצירת חשבונות",
        "apihelp-block-param-autoblock": "חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת IP שינסה להשתמש בה בעתיד.",
        "apihelp-block-param-noemail": "למנוע ממשתמש לשלוח דואר אלקטרוני דרך הוויקי. (דורש את ההרשאה <code>blockemail</code>).",
-       "apihelp-block-param-hidename": "×\94תסרת ×\94ש×\9d ×\9e×\99×\95×\9e×\9f ×\94×\97ס×\99×\9e×\95ת. (×\93×\95רש ×\90ת ×\94×\94רש×\90×\94 <code>hideuser</code>.)",
+       "apihelp-block-param-hidename": "הסרת השם מיומן החסימות. (דורש את ההרשאה <code>hideuser</code>.)",
        "apihelp-block-param-allowusertalk": "לאפשר למשתמש לערוך את דף השיחה שלו או שלה (תלוי ב־<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "אם המשתמש כבר חסום, לדרוס את החסימה הנוכחית.",
        "apihelp-block-param-watchuser": "לעקוב אחרי דף המשתמש ודף השיחה של המשתמש או של כתובת ה־IP.",
        "apihelp-edit-param-notminor": "שינוי לא משני.",
        "apihelp-edit-param-bot": "סימון עריכה זו כבוט.",
        "apihelp-edit-param-basetimestamp": "חותם־זמן של גרסת הבסיס, משמש לזיהוי התנגשויות עריכה. אפשר לקבל אותו באמצעות [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "חותם־הזמן של תחילת תהליך העריכה, משמש לזיהוי התנגשויות. אפשר לקבל ערך מתאים באמצעות <var>[[Special:ApiHelp/main|curtimestamp]]</var> בעת תחילת תהליך העריכה (למשל בזמן טעינת תוכן הדף לעריכה).",
        "apihelp-edit-param-recreate": "לעקוב את כל הטעויות על כך שהדף נמחק בינתיים.",
        "apihelp-edit-param-createonly": "לא לערוך את הדף אם הוא כבר קיים.",
        "apihelp-edit-param-nocreate": "לזרוק שגיאה אם הדף אינו קיים.",
        "apihelp-edit-param-watch": "הוספת העמוד לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-edit-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
        "apihelp-edit-param-watchlist": "להוסיף את הדף לרשימת המעקב של המשתמש הנוכחי או להסיר אותו משם, להשתמש בהעדפות, או לא לשנות את מצב המעקב.",
+       "apihelp-edit-param-md5": "גיבוב MD5 של הפרמטר $1text או צירוף של הפטמטרים $1prependtext ו־$1appendtext. אם זה מוגדר, העריכה לא תיעשה אלא אם כן הגיבוב נכון.",
        "apihelp-edit-param-prependtext": "הוספת הטקסט הזה לתחילת הדף. דורס את $1text.",
+       "apihelp-edit-param-appendtext": "הוספת הטקסט הזה לסוף הדף. דורס את $1text.\n\nיש להשתמש ב־$1section=new כדי להוסיף פסקה חדשה, ולא בפרמטר הזה.",
+       "apihelp-edit-param-undo": "לבטל את הגרסה הזאת. דורס את $1text‏, $1prependtext ו־$1appendtext.",
+       "apihelp-edit-param-undoafter": "ביטול כל הגרסאות מ־$1undo עד כאן. אם זה לא מוגדר, לבטל רק גרסה אחת.",
        "apihelp-edit-param-redirect": "לפתור הפניות אוטומטית.",
        "apihelp-edit-param-contentformat": "תסדיר להסדרת תוכן שמשמש את טקסט הקלט.",
+       "apihelp-edit-param-contentmodel": "מודל התוכן של התוכן החדש.",
+       "apihelp-edit-param-token": "האסימון תמיד צריך להישלח בתור הפרמטר האחרון, או לפחות אחרי הפרמטר $1text parameter.",
        "apihelp-edit-example-edit": "עריכת דף",
+       "apihelp-edit-example-prepend": "הוספת <kbd>_&#95;NOTOC_&#95;</kbd> לתחילת העמוד.",
+       "apihelp-edit-example-undo": "ביטול גרסאות מ־13579 עד 13585 עם תקציר אוטומטי.",
        "apihelp-emailuser-description": "שליחת דוא\"ל למשתמש.",
        "apihelp-emailuser-param-target": "לאיזה משתמש לשלוח דוא\"ל.",
        "apihelp-emailuser-param-subject": "כותרת נושא.",
        "apihelp-emailuser-param-text": "גוף הדואר.",
        "apihelp-emailuser-param-ccme": "שליחת עותק של הדואר הזה אליי.",
+       "apihelp-emailuser-example-email": "שליחת דוא\"ל למשתמש <kbd>WikiSysop</kbd> עם הטקסט <kbd>Content</kbd>.",
        "apihelp-expandtemplates-description": "הרחבת כל התבניות בקוד הוויקי.",
        "apihelp-expandtemplates-param-title": "כותרת הדף.",
        "apihelp-expandtemplates-param-text": "איזה קוד ויקי להמיר.",
+       "apihelp-expandtemplates-param-revid": "מזהה גרסה, עבור <nowiki>{{REVISIONID}}</nowiki> ומשתנים דומים.",
        "apihelp-expandtemplates-param-prop": "אילו חלקי מידע לקבל.\n\nיש לשים לכך שאם לא נבחרו ערכים, התוצאה תכיל את קוד הוויקי, אבל הפלט יהיה בתסדיר מיושן.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "קוד הוויקי המורחב.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "קטגוריות כלשהן שקיימות בקלט ואינן מיוצגות בפלט הוויקיטקסט.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "מאפייני דף המוגדרים במילות קסם מורחבות בקוד ויקי.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "האם הפלט הוא נדיף ואין להשתמש בו במקום אחר בעמוד.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "הזמן המרבי שאחריו המטמונים של התוצאה צריכים לפוג.",
        "apihelp-expandtemplates-paramvalue-prop-modules": "כל יחידות ה־ResourceLoader שפונקציות מפענח ביקשו לוסיף לפלט. יש לבקש את <kbd>jsconfigvars</kbd> או את <kbd>encodedjsconfigvars</kbd> יחד עם <kbd>modules</kbd>.",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה.",
        "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה בתור מחרוזת JSON.",
        "apihelp-expandtemplates-paramvalue-prop-parsetree": "עץ פענוח XML של הקלט.",
        "apihelp-expandtemplates-param-includecomments": "האם לכלול הערות HTML בפלט.",
        "apihelp-expandtemplates-param-generatexml": "יצירת עץ פענוח XML (מוחלף ב־$1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "להרחיב את קוד הוויקי <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-feedcontributions-description": "החזרת הזנת תרומות משתמש.",
        "apihelp-feedcontributions-param-feedformat": "תסדיר ההזנה.",
        "apihelp-feedcontributions-param-user": "לקבל תרומות של אילו משמשים.",
        "apihelp-filerevert-param-filename": "שם קובץ היעד, ללא התחילית File:.",
        "apihelp-filerevert-param-comment": "הערת העלאה.",
        "apihelp-filerevert-param-archivename": "שם הארכיון של הגרסה שאליה ישוחזר הקובץ.",
+       "apihelp-filerevert-example-revert": "לשחזר את <kbd>Wiki.png</kbd> לגרסה מ־<kbd>2011-03-05T15:27:40Z</kbd>.",
        "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
        "apihelp-help-param-modules": "עזרה של אילו יחידות להציג (ערכים של הפרמטרים <var>action</var> ו־<var>format</var>, או <kbd>main</kbd>). אפשר להגדיר תת־יחידות עם <kbd>+</kbd>.",
        "apihelp-help-param-submodules": "לכלול עזרה לתת־יחידות ליחידה שצוינה.",
        "apihelp-help-param-recursivesubmodules": "לכלול עזרה לתת־יחידות באופן רקורסיבי.",
        "apihelp-help-param-helpformat": "תסדיר פלט העזרה.",
+       "apihelp-help-param-wrap": "לעטוף את הפלט במבנה תשובת API תקני.",
        "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
        "apihelp-help-example-main": "עזרה ליחידה הראשית.",
        "apihelp-help-example-recursive": "כל העזרה בדף אחד.",
        "apihelp-import-param-namespace": "לייבא למרחב השם הזה. לא ניתן להשתמש בזה יחד עם <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "לייבא בתור תת־משנה של הדף הזה. לא ניתן להשתמש בזה יחד עם <var>$1namespace</var>.",
        "apihelp-import-example-import": "לייבא את [[meta:Help:ParserFunctions]] למרחב השם 100 עם היסטוריה מלאה.",
+       "apihelp-login-description": "להיכנס ולקבל עוגיות אימות.\n\nבמקרה של כניסה מוצלחת, העוגיות הדרושות תיכללנה בכותרות תשובות של HTTP. במקרה של כניסה לא מוצלחת, הניסיונות הבאים עשויים להיות חנוקים כדי להגביל תקיפות ניחוש ססמה אוטומטי.",
        "apihelp-login-param-name": "שם משתמש.",
        "apihelp-login-param-password": "ססמה.",
        "apihelp-login-param-domain": "שם מתחם (רשות).",
        "apihelp-logout-description": "יציאה וניקוי של נתוני הפעילות.",
        "apihelp-logout-example-logout": "הוצאת המשתמש הנוכחי.",
        "apihelp-managetags-description": "ביצוע פעולות ניהוליות הקשורות בשינוי תגיות.",
+       "apihelp-managetags-param-operation": "איזו פעולה לבצע:\n;create:יצירת תג שינוי חדש לשימוש ידני.\n;delete:הסרת תג שינוי ממסד הנתונים, כולל הסרת התג מכל הגרסאות, עיולי שינויים אחרונים ועיולי יומן שהוא משמש בהן.\n;activate:הפעלת תג שינוי, ואפשור למשתמש להחיל אותו ידנית.\n;deactivate:כיבוי תג שינוי, ומניעה ממשתמשים להחיל אותו ידנית.",
+       "apihelp-managetags-param-tag": "תג ליצירה, מחיקה, הפעלה או כיבוי. ליצירת תג, התג לא צריך להיות קיים. למחיקת תג, התג צריך להיות קיים. להפעלת תג, התג צריך להתקיים ולא להיות בשימוש של הרחבה. לכיבוי תג, התג צריך להיות קיים ומוגדר ידנית.",
+       "apihelp-managetags-param-reason": "סיבה אופציונלית ליצירה, מחיקה, הפעלה או כיבוי של תג.",
+       "apihelp-managetags-param-ignorewarnings": "האם להתעלם מכל האזהרות שמופיעות תוך כדי הפעולה.",
+       "apihelp-managetags-example-create": "יצירת תג בשם <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
+       "apihelp-managetags-example-delete": "מחיקת התג <kbd>vandlaism</kbd> עם הסיבה <kbd>Misspelt</kbd>",
+       "apihelp-managetags-example-activate": "הפעלת התג <kbd>spam</kbd> עם הסיבה <kbd>For use in edit patrolling</kbd>",
+       "apihelp-managetags-example-deactivate": "כיבוי התג <kbd>spam</kbd> עם הסיבה <kbd>No longer required</kbd>",
        "apihelp-move-description": "העברת עמוד.",
+       "apihelp-move-param-from": "שם הדף ששמו ישונה. לא יכול לשמש יחד עם <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "מזהה הדף של הדף שצריך לשנות את שמו. לא יכול לשמש עם <var>$1from</var>.",
        "apihelp-move-param-to": "לאיזו כותרת לשנות את שם הדף.",
        "apihelp-move-param-reason": "הסיבה לשינוי השם.",
        "apihelp-move-param-movetalk": "שינוי שם דף השיחה, אם הוא קיים.",
        "apihelp-opensearch-param-format": "תסדיר הפלט.",
        "apihelp-opensearch-param-warningsaserror": "אם אזהרות מוּעלות עם <kbd>format=json</kbd>, להחזיר שגיאת API במקום להתעלם מהן.",
        "apihelp-opensearch-example-te": "חיפוש דפים שמתחילים ב־<kbd>Te</kbd>.",
+       "apihelp-options-description": "שינוי העדפות של המשתמש הנוכחי.\n\nרק אפשרויות שמוגדרות בליבה או באחת מההרחבות המותקנות, או אפשרויות עם מפתחות עם התחילית \"<code dir=\"ltr\">userjs-</code>\" (שמיועדות לשימוש תסריטי משתמשים) יכולות להיות מוגדרות.",
        "apihelp-options-param-reset": "אתחול ההעדפות לבררות המחדל של האתר.",
+       "apihelp-options-param-resetkinds": "רשימת סוגי אפשרויות לאתחל כאשר מוגדרת האפשרות <var>$1reset</var>.",
        "apihelp-options-param-change": "רשימת שינויים, בתסדיר name=value (למשל skin=vector). הערך אינו יכול להכיל תווי מקל (|). אם לא ניתן ערך, אפילו לא סימן שווה, למשל optionname|otheroption|...‎, האפשרות תאופס לערך בררת המחדל שלה.",
+       "apihelp-options-param-optionname": "שם האפשרות שצריך להגדיר לערך שניתן ב־<var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "ערך האפשרות שצוין ב־<var>$1optionname</var>, יכול להכיל תווי מקל.",
        "apihelp-options-example-reset": "אתחול כל ההעדפות.",
+       "apihelp-options-example-change": "לשנות את ההעדפות <kbd>skin</kbd> ו־<kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "לאתחל את כל ההעדפות ואז להגדיר את <kbd>skin</kbd> ואת <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "קבלת מידע על יחידות של API.",
        "apihelp-paraminfo-param-modules": "רשימה של שמות יחידות (ערכים של הפרמטרים <var>action</var> ו־<var>format</var>, או <kbd>main</kbd>). אפשר להגדיר תת־יחידות עם <kbd>+</kbd>.",
        "apihelp-paraminfo-param-helpformat": "תסדיר מחרוזות העזרה.",
        "apihelp-paraminfo-param-formatmodules": "רשימת שמות תסדירים (ערכים של הפרמטר <var>format</var>). יש להשתמש ב־<var>$1modules</var> במקום זה.",
        "apihelp-paraminfo-example-1": "הצגת מידע עבור <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>‏, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>‏, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>‏, ו־<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-description": "מפענח את התוכן ומחזיר פלט מפענח.\n\nר' את יחידת ה־prop השיונות של <kbd>[[Special:ApiHelp/query|action=query]]</kbd> כדי לקבל מידע על הגרסה הנוכחית של הדף.\n\nיש מספר דרכים לציין טקסט לפענוח:\n# ציון דף או גרסה באמצעות <var>$1page</var>‏, <var>$1pageid</var>, או <var>$1oldid</var>.\n# ציון התוכן במפורש, באמצעות <var>$1text</var>‏, <var>$1title</var>, ו־<var>$1contentmodel</var>.\n# ציון רק של  התקציר לפענוח. ל־<var>$1prop</var> צריך לתת ערך ריק.",
+       "apihelp-parse-param-title": "שם הדף שהטקסט שייך אליו. אם זה מושמט, יש לציין את <var>$1contentmodel</var>, ו־[[API]] ישמש ככותרת.",
+       "apihelp-parse-param-text": "הטקסט לפענוח. יש להשתמש ב־<var>$1title</var> או ב־<var>$1contentmodel</var>.",
        "apihelp-parse-param-summary": "התקציר שצריך לפענח.",
+       "apihelp-parse-param-page": "פענוח תוכן הדף הזה. לא יכול לשמש יחד עם <var>$1text</var> ו־<var>$1title</var>.",
+       "apihelp-parse-param-pageid": "לפענח את התוכן של הדף הזה. דורס את <var>$1page</var>.",
+       "apihelp-parse-param-redirects": "אם <var>$1page</var> או <var>$1pageid</var> מוגדרים להפניה, לפתור אותה.",
+       "apihelp-parse-param-oldid": "לפענח את התוכן של הגרסה הזאת. דורס את <var>$1page</var> ואת <var>$1pageid</var>.",
        "apihelp-parse-param-prop": "אילו פריטי מידע לקבל:",
        "apihelp-parse-paramvalue-prop-text": "נותן טקסט מפוענח של קוד הוויקי.",
        "apihelp-parse-paramvalue-prop-langlinks": "נותן קישורי שפה בקוד הוויקי המפוענח.",
        "apihelp-parse-paramvalue-prop-sections": "מתן הפסקאות בקוד הוויקי המפוענח.",
        "apihelp-parse-paramvalue-prop-revid": "הוספת מזהה הגרסה של הדף המפוענח.",
        "apihelp-parse-paramvalue-prop-displaytitle": "הוספת הכותרת של קוד הוויקי המפוענח.",
+       "apihelp-parse-paramvalue-prop-headitems": "נותן פריטים לשים ב־<code>&lt;head&gt;</code> של הדף.",
+       "apihelp-parse-paramvalue-prop-headhtml": "נותן את ה־<code>&lt;head&gt;</code> המפוענח של הדף.",
        "apihelp-parse-paramvalue-prop-modules": "מצן יחידות ResourceLoader שמשמשות בדף. יש לבקש את <kbd>jsconfigvars</kbd> או את <kbd>encodedjsconfigvars</kbd> יחד עם <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה בתור מחרוזת JSON.",
+       "apihelp-parse-paramvalue-prop-indicators": "נותן את ה־HTML של מחווני מצב דף שמשמשים בדף.",
        "apihelp-parse-paramvalue-prop-iwlinks": "מתן קישורי בינוויקי בקוד הוויקי המפוענח.",
        "apihelp-parse-paramvalue-prop-wikitext": "מתן קוד הוויקי המקורי שפוענח.",
-       "apihelp-parse-param-disablepp": "לכבות את דו\"ח ה־PP מפלט המפענח.",
-       "apihelp-parse-param-disableeditsection": "לכבות את קישורי עריכת הפסקאות מפלט המפענח.",
+       "apihelp-parse-paramvalue-prop-properties": "נותן מאפיינים שונים שמוגדרים בקוד הוויקי המפוענח.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "נותן דו\"ח הגבלות בדרך מובנית. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "נותן את גרסת ה־HTML של דו\"ח ההגבלות. לא נותן שום נתונים כאשר מוגדר <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-parsetree": "עץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>)",
+       "apihelp-parse-param-pst": "לעשות התמרה לפני שמירה על הקלט לפני פענוחו. תקין רק בשימוש עם טקסט.",
+       "apihelp-parse-param-onlypst": "לעשות התמרה לפני שמירה (pre-save transform‏, PST) על הקלט, אבל לא לפענח אותו. מחזיר את אותו קוד הוויקי אחרי החלת PST. תקף רק בשימוש עם <var>$1text</var>.",
+       "apihelp-parse-param-effectivelanglinks": "כולל קישור שפה שמספקות הרחבות (לשימוש עם <kbd>$1prop=langlinks</kbd>).",
+       "apihelp-parse-param-section": "לאחזר את התוכן של הפסקה עם המספר הזה, או, אם זה <kbd>new</kbd>, ליצור פסקה חדשה.\n\n<kbd>new</kbd> יכובד רק בעת ציון <var>text</var>.",
+       "apihelp-parse-param-sectiontitle": "כותרת פסקה חדשה כאשר <var>section</var> הוא <kbd>new</kbd>.\n\nבניגוד לעריכת דף, זה לא מתגבה ל־<var>summary</var> כשזה מושמט אם ריק.",
+       "apihelp-parse-param-disablelimitreport": "להשמיט את דו\"ח הקדם־מעבד (\"NewPP limit report\") מפלט המפענח.",
+       "apihelp-parse-param-disablepp": "יש להשתמש ב־<var>$1disablelimitreport</var> במקום.",
+       "apihelp-parse-param-disableeditsection": "להשמיט את קישורי עריכת הפסקאות מפלט המפענח.",
+       "apihelp-parse-param-disabletidy": "לא להריץ ניקוי HTML (למשל tidy) על פלט המפענח.",
+       "apihelp-parse-param-generatexml": "יצירת עץ פענוח של XML (נדרש מודל תוכן <code>$1</code>; מוחלף ב־<kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "לפענח במצב תצוגה מקדימה.",
        "apihelp-parse-param-sectionpreview": "לפענח במצב תצוגה מקדימה של פסקה (מדליק גם את מצב תצוגה מקדימה).",
-       "apihelp-parse-param-disabletoc": "×\9c×\9b×\91×\95ת ×ª×\95×\9b×\9f עניינים בפלט.",
+       "apihelp-parse-param-disabletoc": "×\9c×\94ש×\9e×\99×\98 ×\90ת ×ª×\95×\9b×\9f ×\94עניינים בפלט.",
        "apihelp-parse-param-contentformat": "תסדיר הסדרת תוכן שישמש לטקסט הקלט. תקף רק עם $1text.",
+       "apihelp-parse-param-contentmodel": "מודל התוכן של טקסט הקלט. אם זה מושמט, יש לציין את $1title והערך ההתחלתי יהיה המודל של הכותרת שצוינה. תקין רק כאשר משמש עם $1text.",
        "apihelp-parse-example-page": "לפענח דף.",
        "apihelp-parse-example-text": "לפענח קוד ויקי.",
        "apihelp-parse-example-texttitle": "לפענח קוד, עם ציון כותרת דף.",
        "apihelp-protect-param-protections": "רשימת רמות הכנה, בתסדיר <kbd>action=level</kbd> (למשל <kbd>edit=sysop</kbd>).",
        "apihelp-protect-param-expiry": "חותמי־זמן של תפוגה. אם הוגדר רק חותם־זמן אחד, הוא ישמש לכל ההגנות. יש להשתמש ב־<kbd>infinite</kbd>‏, <kbd>indefinite</kbd>‏, <kbd>infinity</kbd>, או <kbd>never</kbd> להגנה שלא פגה לעולם.",
        "apihelp-protect-param-reason": "סיבה להגנה או הסרת הגנה.",
-       "apihelp-protect-param-cascade": "×\94פע×\9cת ×\94×\92× ×\94 ×\9e×\93×\95ר×\92ת (×\9b×\9c×\95×\9eר, ×\9c×\94×\92×\9f ×¢×\9c ×\93פ×\99×\9d ×©×\9b×\9c×\95×\9c×\99×\9d ×\91×\93×£ ×\94×\96×\94). ×\90×\99×\9f ×\9c×\96×\94 ×\94שפע×\94 ×\90×\9d ×\9b×\9c ×¨×\9e×\95ת ×\94×\94×\92× ×\94 ×©× ×\99תנ×\95 ×\90×\99× ×\9f ×ª×\95×\9e×\9b×\95ת בדירוג.",
+       "apihelp-protect-param-cascade": "×\94פע×\9cת ×\94×\92× ×\94 ×\9e×\93×\95ר×\92ת (×\9b×\9c×\95×\9eר, ×\9c×\94×\92×\9f ×¢×\9c ×\93פ×\99×\9d ×©×\9e×\95×\9b×\9c×\9c×\99×\9d ×\91×\93×£ ×\94×\96×\94 ×\95×¢×\9c ×ª×\9e×\95× ×\95ת ×©×\9eש×\9e×\95ת ×\91×\95). ×\90×\99×\9f ×\9c×\96×\94 ×\94שפע×\94 ×\90×\9d ×\90×£ ×\90×\97ת ×\9eר×\9e×\95ת ×\94×\94×\92× ×\94 ×©× ×\99תנ×\95 ×\90×\99× ×\94 ×ª×\95×\9e×\9bת בדירוג.",
        "apihelp-protect-param-watch": "אם זה מוגדר, הוספת הדף שהגנה נוספת אליו או מוסרת ממנו לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-protect-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-protect-example-protect": "הגנה על דף.",
+       "apihelp-protect-example-unprotect": "להסיר את ההגנה מהדף על־ידי הגדרת מגבלות על <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "הסרת הגנה מדף על־ידי הגדרה של אפס הגבלות.",
        "apihelp-purge-description": "ניקוי המטמון לכותרות שניתנו.\n\nדורש בקשת POST אם המשתמש לא נכנס לחשבון.",
        "apihelp-purge-param-forcelinkupdate": "עדכון טבלאות הקישורים.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "עדכון טבלת הקישורים ועדכון טבלאות הקישורים עבור כל דף שמשתמש בדף הזה בתור תבנית.",
        "apihelp-purge-example-simple": "ניקוי המטמון של הדפים <kbd>Main Page</kbd> ו־<kbd>API</kbd>.",
        "apihelp-purge-example-generator": "ניקוי 10 הדפים הראשונים במרחב הראשי.",
+       "apihelp-query-description": "אחזור נתונים ממדיה־ויקי ועליה.\n\nכל שינויי הנתונים יצטרכו תחילה להשתמש ב־query כדי לקבל אסימון למניעת שימוש לרעה מאתרים זדוניים.",
        "apihelp-query-param-prop": "אילו מאפיינים לקבל על הדפים בשאילתה.",
        "apihelp-query-param-list": "אילו רשימות לקבל.",
        "apihelp-query-param-meta": "אילו מטא־נתונים לקבל.",
+       "apihelp-query-param-indexpageids": "לכלול פסקת pageids נוספת עם רשימת כל מזהי הדף שהוחזרו.",
+       "apihelp-query-param-export": "יצוא הגרסאות הנוכחיות של כל הדפים הנתונים המחוללים.",
        "apihelp-query-param-exportnowrap": "להחזיר את ה־XML של היצוא בלי לעטוף אותו בתוצאת XML (אותו תסדיר כמו [[Special:Export]]). אפשר להשתמש בזה רק עם $1export.",
+       "apihelp-query-param-iwurl": "האם לקבל את ה־URL המלא אם הכותרת היא קישור בינוויקי.",
+       "apihelp-query-param-rawcontinue": "להחזיר נתוני <samp>query-continue</samp> גולמיים להמשך.",
+       "apihelp-query-example-revisions": "אחזור [[Special:ApiHelp/query+siteinfo|site info]] ו־[[Special:ApiHelp/query+revisions|revisions]] של <kbd>Main Page</kbd>.",
+       "apihelp-query-example-allpages": "אחזור גרסאת של דפים שמתחילים ב־<kbd>API/</kbd>.",
        "apihelp-query+allcategories-description": "למנות את כל הקטגוריות.",
        "apihelp-query+allcategories-param-from": "מאיזו קטגוריה להתחיל למנות.",
        "apihelp-query+allcategories-param-to": "באיזו קטגוריה להפסיק למנות.",
        "apihelp-query+allcategories-param-min": "להחזיר רק קטגוריות עם מספר כזה לפחות של חברים.",
        "apihelp-query+allcategories-param-max": "להחזיר רק קטגוריות עם מספר כזה לכל היותר של חברים.",
        "apihelp-query+allcategories-param-limit": "כמה קטגוריות להחזיר.",
-       "apihelp-query+allcategories-param-prop": "אילו מאפיינים לקבל:\n;size:הוספת מספר הדפים בקטגוריה.\n;hidden:מתייג קטגוריות מוסתרות עם _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "הוספת מספר הדפים בקטגוריה.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "מתייג קטגוריות מוסתרות עם <code>_&#95;HIDDENCAT_&#95;</code>.",
        "apihelp-query+allcategories-example-size": "רשימת קטגוריות עם מידע על מספר הדפים בכל אחת מהן.",
+       "apihelp-query+allcategories-example-generator": "אחזור מידע על דף הקטגוריה עצמו עבור קטגוריות שמתחילות ב־<kbd>List</kbd>.",
        "apihelp-query+alldeletedrevisions-description": "רשימת כל הגרסאות המחוקות על־ידי משתמש או במרחב.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "יכול לשמש רק <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "לא יכול לשמש עם <var>$3user</var>.",
        "apihelp-query+alldeletedrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
        "apihelp-query+alldeletedrevisions-param-namespace": "לרשום רק דפים במרחב השם הזה.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>לתשומת לבך:</strong> בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]], שימוש ב־<var>$1user</var> וב־<var>$1namespace</var> ביחד עלול להניב החזרה של פחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים יכולות להיות מוחזרות אפס תוצאות.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "בעת שימוש בתור מחולל, לחולל כותרת במקום מזהי גרסה.",
+       "apihelp-query+alldeletedrevisions-example-user": "לרשום את 50 התרומות המחוקות האחרונות של משתמש <kbd>Example<kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "רשימת 50 הגרסאות המחוקות הראשונות במרחב הראשי.",
        "apihelp-query+allfileusages-description": "לרשום את כל שימושי הקובץ, כולל בלתי־קיימים.",
-       "apihelp-query+allfileusages-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת קובץ להתחיל למנות.",
-       "apihelp-query+allfileusages-param-to": "ש×\9d ×\94ק×\95×\91×¥ ×©×\91×\95 ×ª×¡×ª×\99×\99×\9d ×\94×\9e× ×\99×\99×\94.",
+       "apihelp-query+allfileusages-param-from": "×\9e×\90×\99×\96×\94 ×©×\9d קובץ להתחיל למנות.",
+       "apihelp-query+allfileusages-param-to": "ש×\9d ×\94ק×\95×\91×¥ ×©×\94×\9e× ×\99×\99×\94 ×ª×¡×ª×\99×\99×\9d ×\91×\95.",
        "apihelp-query+allfileusages-param-prefix": "חיפוש כל שמות הקבצים שמתחילים עם הערך הזה.",
+       "apihelp-query+allfileusages-param-unique": "להציג רק שמות קבצים ייחודיים. לא יכול לשמש עם $1prop=ids.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+       "apihelp-query+allfileusages-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "הוספת מזהי הדף של הדפים המשתמשים (לא יכול לשמש עם $1unique).",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "הוספת שם הקובץ.",
        "apihelp-query+allfileusages-param-limit": "כמה פריטים להחזיר בסך הכול.",
        "apihelp-query+allfileusages-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+allfileusages-example-B": "רשימת שמות קבצים, כולל חסרים, עם מזהי הדפים שהם מופיעים בהם, החל מ־<kbd>B</kbd>.",
        "apihelp-query+allfileusages-example-unique": "רשימת שמות קבצים ייחודיים.",
        "apihelp-query+allfileusages-example-unique-generator": "קבלת כל שמות הקבצים, כולל חסרים.",
        "apihelp-query+allfileusages-example-generator": "קבלת דפים שמכילים את הקבצים.",
        "apihelp-query+allimages-description": "למנות את כל התמונות לפי הסדר.",
        "apihelp-query+allimages-param-sort": "לפי איזה מאפיין למיין.",
        "apihelp-query+allimages-param-dir": "באיזה כיוון לרשום.",
-       "apihelp-query+allimages-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת תמונה להתחיל למנות. יכול לשמש רק עם $1sort=name.",
+       "apihelp-query+allimages-param-from": "×\9e×\90×\99×\96×\94 ×©×\9d תמונה להתחיל למנות. יכול לשמש רק עם $1sort=name.",
        "apihelp-query+allimages-param-to": "כותרת תמונה שבה תסתיים המניי. יכול לשמש רק עם $1sort=name.",
-       "apihelp-query+allimages-param-start": "×\91איזה חותם־זמן להתחיל למנות. יכול לשמש רק עם $1sort=timestamp.",
+       "apihelp-query+allimages-param-start": "×\9eאיזה חותם־זמן להתחיל למנות. יכול לשמש רק עם $1sort=timestamp.",
        "apihelp-query+allimages-param-end": "באיזה חותם זמן להפסיק לרשום. אפשר להשתמש בזה רק עם $1sort=timestamp.",
+       "apihelp-query+allimages-param-prefix": "חיפוש כל שמות התמונות שמתחילים בערך הזה. יכול לשמש רק עם $1sort=name.",
        "apihelp-query+allimages-param-minsize": "להגביל לתמונות עם מספר כזה של בתים לפחות.",
        "apihelp-query+allimages-param-maxsize": "להגביל לתמונות עם מספר כזה לכל היותר של בתים.",
        "apihelp-query+allimages-param-sha1": "גיבוב SHA1 של תמונה. דריסת $1sha1base36.",
        "apihelp-query+allimages-param-sha1base36": "גיבוב SHA1 של התמונה בבסיס 36 (הבסיס בו נעשה שימוש במדיה־ויקי).",
        "apihelp-query+allimages-param-user": "להחזיר רק קבצים שהועלו על־ידי המשתמש הזה. יכול לשמש רק עם $1sort=timestamp. לא יכול לשמש יחד עם $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "איך לסנן קבצים שמעלים בוטים. יכול לשמש רק עם $1sort=timestamp. לא יכול לשמש יחד עם $1user.",
+       "apihelp-query+allimages-param-mime": "אילו סוגי MIME לחבפש, למשל <kbd>image/jpeg</kbd>.",
        "apihelp-query+allimages-param-limit": "כמה תמונות להחזיר בסך הכול.",
        "apihelp-query+allimages-example-B": "הצגת רשימה של קבצים שמתחילים באות <kbd>B</kbd>.",
+       "apihelp-query+allimages-example-recent": "הצגת רשימת קבצים שהועלו לאחרונה, דומה ל־[[Special:NewFiles]].",
+       "apihelp-query+allimages-example-mimetypes": "להציג רשימה של קבצות שסוג ה־MIME שלהם הוא <kbd>image/png</kbd> או <kbd>image/png</kbd>.",
        "apihelp-query+allimages-example-generator": "הצגת מידע על 4 קבצים המתחילים באות <kbd>T</kbd>.",
        "apihelp-query+alllinks-description": "למנות את כל הקישורים שמצביעים למרחב שם נתון.",
-       "apihelp-query+alllinks-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת ×\94ק×\99ש×\95ר ×\9c×\94ת×\97×\99×\9c ×\90ת ×\94×\9e× ×\99×\99×\94.",
-       "apihelp-query+alllinks-param-to": "×\9b×\95תרת ×\94ק×\99ש×\95ר ×©×\91×\95 ×ª×¡×ª×\99×\99×\9d ×\94×\9e× ×\99×\99×\94.",
+       "apihelp-query+alllinks-param-from": "×\9e×\90×\99×\96×\94 ×©×\9d ×§×\99ש×\95ר ×\9c×\94ת×\97×\99×\9c ×\9c×\9e× ×\95ת.",
+       "apihelp-query+alllinks-param-to": "×\9b×\95תרת ×\94ק×\99ש×\95ר ×©×\94×\9e× ×\99×\99×\94 ×ª×¡×ª×\99×\99×\9d ×\91×\95.",
        "apihelp-query+alllinks-param-prefix": "חיפוש כל הכותרות המקושרות שמתחילות בערך הזה.",
+       "apihelp-query+alllinks-param-unique": "להציג רק שמות מקושרים ייחודיים. לא יכול לשמש עם <kbd>$1prop=ids</kbd>.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+       "apihelp-query+alllinks-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "הוספת מזהי הדף של הדף המקשר (לא יכול לשמש עם <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "הוספת שם הקישור.",
        "apihelp-query+alllinks-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+alllinks-param-limit": "כמה פריטים להחזיר בסך הכול.",
        "apihelp-query+alllinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+alllinks-example-B": "רשימת כותרות מקושרות, כולל חסרות, עם מזהי הדפים שהן מופיעות בהם, החל מ־<kbd>B</kbd>.",
        "apihelp-query+alllinks-example-unique": "רשימת כותרות מקושרים ייחודיות.",
        "apihelp-query+alllinks-example-unique-generator": "קבלת כל הכותרות המקושרות, וסימון החסרות.",
        "apihelp-query+alllinks-example-generator": "קבלת דפים שמכילים את הקישורים.",
        "apihelp-query+allmessages-description": "החזרת הודעות מהאתר הזה.",
+       "apihelp-query+allmessages-param-messages": "אילו הודעות לפלוט. כתיבת <kbd>*</kbd> (בררת מחדל) תפלוט את כל ההודעות.",
        "apihelp-query+allmessages-param-prop": "אלו מאפיינים לקבל.",
+       "apihelp-query+allmessages-param-enableparser": "יש להגדיר כדי להפעיל את המפענח, יעשה קדם־עיבוד לקוד ויקי של ההודעה (יחליף מילות קסם, יטפל בתבניות, וכו').",
        "apihelp-query+allmessages-param-nocontent": "אם זה מוגדר, לא לכלול את תוכן ההודעות בפלט.",
+       "apihelp-query+allmessages-param-includelocal": "לכלול גם הודעות מקומיות, כלומר הודעות שאינן קיימות בתכנה, אבל כן קיימות בתור דף מדיה־ויקי.\nזה רושם את כל דפי MediaWiki: כך שזה ירשום גם דפים שאינם באמת הודעות, כגון [[MediaWiki:Common.js|Common.js]].",
        "apihelp-query+allmessages-param-args": "ארגומנטים שיוחלפו לתוך ההודעה.",
        "apihelp-query+allmessages-param-filter": "החזרה רק של הודעות עם שמות שמכילים את המחרוזת הזאת.",
        "apihelp-query+allmessages-param-customised": "להחזיר רק הודעות במצב ההתאמה הזה.",
        "apihelp-query+allmessages-param-lang": "החזרת הודעת בשפה הזאת.",
        "apihelp-query+allmessages-param-from": "החזרת הודעת החל מההודעה הזאת.",
        "apihelp-query+allmessages-param-to": "החזרת הודעות עד ההודעה הזאת.",
+       "apihelp-query+allmessages-param-title": "שם דף לשימוש בתור הֶקשר בעת ענוח הודעה (עבור האפשרות $1enableparser).",
        "apihelp-query+allmessages-param-prefix": "החזרת הודעת עם התחילית הזאת.",
+       "apihelp-query+allmessages-example-ipb": "להציג הודעות שמתחילות ב־<kbd dir=\"ltr\">ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "להציג את ההודעות <kbd>august</kbd> ו־<kbd>mainpage</kbd> בגרמנית.",
        "apihelp-query+allpages-description": "למנות את כל הדפים לפי הסדר במרחב שם נתון.",
-       "apihelp-query+allpages-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת ×\94×\93×£ ×\9c×\94ת×\97×\99×\9c ×\90ת ×\94×\9e× ×\99×\99×\94.",
-       "apihelp-query+allpages-param-to": "×\9b×\95תרת ×\94×\93×£ ×©×\91×\95 ×ª×¡×ª×\99×\99×\9d ×\94×\9e× ×\99×\99×\94.",
+       "apihelp-query+allpages-param-from": "×\9e×\90×\99×\96×\94 ×©×\9d ×\93×£ ×\9c×\94ת×\97×\99×\9c ×\9c×\9e× ×\95ת.",
+       "apihelp-query+allpages-param-to": "×\9b×\95תרת ×\94×\93×£ ×©×\94×\9e× ×\99×\99×\94 ×ª×¡×ª×\99×\99×\9d ×\91×\95.",
        "apihelp-query+allpages-param-prefix": "חיפוש כל שמות הדפים שמתחילים בערך הזה.",
        "apihelp-query+allpages-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+allpages-param-filterredir": "אילו דפים לרשום.",
        "apihelp-query+allpages-param-minsize": "להגביל לדפים עם מספר כזה לפחות של בתים.",
        "apihelp-query+allpages-param-maxsize": "להגביל לדפים שיש בהם לכל היותר מספר כזה של בתים.",
        "apihelp-query+allpages-param-prtype": "להגביל רק לדפים מוגנים.",
+       "apihelp-query+allpages-param-prlevel": "לסנו הגנות לפי רמת ההגנה (חייב לשמש עם $1prtype= parameter).",
+       "apihelp-query+allpages-param-prfiltercascade": "לסנן הגנות לפי דירוגיות (לא תקף כאשר $1prtype אינו מוגדר).",
        "apihelp-query+allpages-param-limit": "כמה דפים להחזיר בסך הכול.",
        "apihelp-query+allpages-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+allpages-param-filterlanglinks": "סינון על סמך קיום קישורים לשוניים בדף. יש לשים לב לכך שזה אולי לא יתייחס לקישורים לשוניים שנוספו על־ידי הרחבות.",
+       "apihelp-query+allpages-param-prexpiry": "לפי איזו תפוגת הגנה לסנן את הדף הזה:\n;indefinite:לקבל רק דפים מוגנית לצמיתות.\n;definite:לקבל רק דפים עם תפוגת הגנה מוגדרת.\n;all:לקבל דפים עם תפוגת הגנה כלשהי.",
        "apihelp-query+allpages-example-B": "להציג רשימה של דפים במתחילים באות <kbd>B</kbd>.",
        "apihelp-query+allpages-example-generator": "להציג מידע על 4 דפים שמתחילים באות <kbd>T</kbd>.",
        "apihelp-query+allpages-example-generator-revisions": "להציג את תוכן של 2 הדפים הראשונים שמתחילים ב־<kbd>Re</kbd> ושאינם דפי הפניה.",
        "apihelp-query+allredirects-param-from": "מאיזו כותרת הפניה להתחיל את מנייה.",
        "apihelp-query+allredirects-param-to": "כותרת ההפניה שהמנייה תיפסק בה.",
        "apihelp-query+allredirects-param-prefix": "חיפוש על דפי היעד שמתחילים בערך הזה.",
+       "apihelp-query+allredirects-param-unique": "להציג רק דפים ייחודיים. לא יכול לשמש עם $1prop=ids|fragment|interwiki.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+       "apihelp-query+allredirects-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "הוספת מזהה הדף של הדף המפנה (לא יכול לשמש עם <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "הוספת כותרת ההפניה.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "הוספת המובאה מההפניה, אם יש (לא יכול לשמש עם <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "הוספת תחילית הבינוויקי מההפניה, אם יש (לא יכול לשמש עם <var>$1unique</var>).",
        "apihelp-query+allredirects-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+allredirects-param-limit": "כמה פריטים להחזיר בסך הכול.",
        "apihelp-query+allredirects-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+allredirects-example-B": "רשימת דפי יעד, כולל חסרים, עם מזהי הדפים שהם מופיעים בהם, החל מ־<kbd>B</kbd>.",
        "apihelp-query+allredirects-example-unique": "רשימת דפי יעד ייחודיים.",
        "apihelp-query+allredirects-example-unique-generator": "קבלת על דפי היעד, תוך כדי סימון החסרים.",
        "apihelp-query+allredirects-example-generator": "קבלת דפים שמכילים את ההפניות.",
        "apihelp-query+alltransclusions-description": "רשימת כל ההכללות (דפים שמוטבעים באמצעות &#123;&#123;x&#125;&#125;), כולל כאלה שאינם קיימים.",
-       "apihelp-query+alltransclusions-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת ×\94×\94×\9b×\9c×\9c×\94 ×\9c×\94ת×\97×\99×\9c ×\90ת ×\94×\9e× ×\99×\99×\94.",
+       "apihelp-query+alltransclusions-param-from": "×\9e×\90×\99×\96×\95 ×\9b×\95תרת ×\94×\94×\9b×\9c×\9c×\94 ×\9c×\94ת×\97×\99×\9c ×\9c×\9e× ×\95ת.",
        "apihelp-query+alltransclusions-param-to": "כותרת ההכללה שהמנייה תיפסק בה.",
+       "apihelp-query+alltransclusions-param-prefix": "חיפוש כל הכותרות המוכללות שמתחילות הערך הזה.",
+       "apihelp-query+alltransclusions-param-unique": "להציג רק שמות מוכללים ייחודיים. לא יכול לשמש עם $1prop=ids.\nבעת שימוש בתור מחולל, נותן דפי יעד במקום דפי מקור.",
+       "apihelp-query+alltransclusions-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "הוספת מזהי הדף של הדפים המכלילים (לא יכול לשמש עם $1unique).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "הוספת כותרת ההכללה.",
        "apihelp-query+alltransclusions-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+alltransclusions-param-limit": "כמה פריטים להחזיר בסך הכול.",
        "apihelp-query+alltransclusions-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+alltransclusions-example-B": "רשימת כותרות מוכללות, כולל חסרות, עם מזהי הדפים שהן מופיעות בהם, החל מ־<kbd>B</kbd>.",
        "apihelp-query+alltransclusions-example-unique": "רשימת כותרת מוכללות ייחודיות.",
        "apihelp-query+alltransclusions-example-unique-generator": "קבלת כל כל הכותרות המוכללות, תוך כדי סימון החסרות.",
        "apihelp-query+alltransclusions-example-generator": "קבלת דפים שמכילים את ההכללות.",
        "apihelp-query+allusers-description": "למנות את כל המשתמשים הרשומים.",
        "apihelp-query+allusers-param-from": "מאיזה שם משתמש להתחיל למנות.",
        "apihelp-query+allusers-param-to": "באיזה שם משתמש להפסיק למנות.",
+       "apihelp-query+allusers-param-prefix": "חיפוש כל המשתמשים שמתחילים בערך הזה.",
        "apihelp-query+allusers-param-dir": "באיזה כיוון למיין.",
-       "apihelp-query+allusers-param-prop": "אילו פרטי מידע לכלול:\n;blockinfo:הוספת מידע עם החסימה הנוכחית של משתמש.\n;groups:הוספת קבוצות שמשתמש חבר בהן. זה משתמש ביותר משאבי דפדפן ויכול להחזיר פחות תוצאות מהמגבלה.\n;implicitgroups:לרשום את כל הקבוצות שהמשתמש חבר בהן אוטומטית.\n;rights:רשימת הההרשאות שיש למשתמש.\n;editcount:הוספת מניין העריכות של המשתמש .\n;registration:הוספת חותם־הזמן של זמן הרישום של המשתמש (יכול להיות ריק).",
+       "apihelp-query+allusers-param-group": "לכלול רק משתמשים בקבוצות הנתונות.",
+       "apihelp-query+allusers-param-excludegroup": "לא לכלול משתמשים בקבוצות הנתונות.",
+       "apihelp-query+allusers-param-rights": "לכלול רק משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "אילו פרטי מידע לכלול:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "הוספת מידע עם החסימה הנוכחית של משתמש.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "הוספת קבוצות שמשתמש חבר בהן. זה משתמש ביותר משאבי דפדפן ויכול להחזיר פחות תוצאות מהמגבלה.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "לרשום את כל הקבוצות שהמשתמש חבר בהן אוטומטית.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "רשימת הההרשאות שיש למשתמש.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש .",
+       "apihelp-query+allusers-paramvalue-prop-registration": "הוספת חותם־הזמן של זמן הרישום של המשתמש (יכול להיות ריק).",
+       "apihelp-query+allusers-param-limit": "כמה שמות משתמש בסך הכול לשנות.",
+       "apihelp-query+allusers-param-witheditsonly": "לרשום רק משתמשים שעשו עריכות.",
+       "apihelp-query+allusers-param-activeusers": "לרשום רק משתמשים שהיו פעילים {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.",
+       "apihelp-query+allusers-example-Y": "לרשום משתמשים שמתחילים ב־<kbd>Y</kbd>.",
        "apihelp-query+backlinks-description": "מציאת כל הדפים שמקשרים לדף הנתון.",
        "apihelp-query+backlinks-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם <var>$1pageid</var>.",
+       "apihelp-query+backlinks-param-pageid": "מזהה דף לחיפוש. לא ניתן להשתמש בזה יחד עם <var>$1title</var>.",
        "apihelp-query+backlinks-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+backlinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+backlinks-param-filterredir": "איך לסנן הפניות. אם זה מוגדר ל־<kbd>nonredirects</kbd> כש־<var>$1redirect</var> מופעל, זה חל רק על הרמה השנייה.",
+       "apihelp-query+backlinks-param-limit": "כמה דפים להחזיר בסך הכול. אם <var>$1redirect</var> מופעל, ההגבלה חלה על כל רמה בנפרד (כלומר יכולות להיות מוחזרות עד <span dir=\"ltr\">2 * <var>$1limit</var></span> תוצאות).",
+       "apihelp-query+backlinks-param-redirect": "אם הדף המקשר הוא הפניה, למצוא גם את כל הדפים שמקשרים לאותה ההפניה. ההגבלה המרבית מוקטנת בחצי.",
+       "apihelp-query+backlinks-example-simple": "הצגת קישורים ל־<kbd>Main Page</kbd>.",
+       "apihelp-query+backlinks-example-generator": "קבל מידע על דפים שמקשרים ל־<kbd>Main page<kbd>.",
+       "apihelp-query+blocks-description": "לרשום את כל המשתמשים וכתובות ה־IP שנחסמו.",
        "apihelp-query+blocks-param-start": "מאיזה חותם‏־זמן להתחיל למנות.",
        "apihelp-query+blocks-param-end": "באיזה חותם זמן להפסיק למנות.",
-       "apihelp-query+blocks-param-prop": "אילו מאפיינים לקבל:\n;id:הוספת מזהה החסימה.\n;user:הוספת שם המשתמש שנחסם.\n;userid:הוספת המזהה של המשמש שנחסם.\n;by:הוספת שם המשתמש שחסם.\n;byid:הוספת מזהה המשתמש שחסם.\n;timestamp:הוספת חותם־הזמן של החסימה.\n;expiry:הוספת חותם־הזמן של תפוגת החסימה.\n;reason:הוספת הסיבה שניתנה לחסימה.\n;range:הוספת טווח כתובות ה־IP שהחסימה משפיעה עליהן.\n;flags:מתייג את ההחרמה (autoblock‏, anononly, וכו'.).",
-       "apihelp-query+categories-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קטגוריה:\n;sortkey:הוספת מפתח מיון (מחרוזת הקסדצימלית) ותחילית מפתח מיון (החלק הקריא) עבור קטגוריה.\n;timestamp:הוספת חותם־הזמן של יצירת הקטגוריה.\n;hidden:תיוג קטגוריות שהוסתרו באמצעות _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+blocks-param-ids": "רשימת מזהי חסימות לרשום (לא חובה).",
+       "apihelp-query+blocks-param-users": "רשימת משתמשים לחיפוש (לא חובה).",
+       "apihelp-query+blocks-param-ip": "קבלת כל החסימות שחלות על טווח ה־IP או ה־CIDR הזה, כולל חסימות טווח.\nלא יכול לשמש יחד עם <var>$3users</var>. טווחי CIDR רחבים מ־IPv4/$1 או IPv6/$2 אינם מתקבלים.",
+       "apihelp-query+blocks-param-limit": "המספר המרבי של חסימות לרשום.",
+       "apihelp-query+blocks-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+blocks-paramvalue-prop-id": "הוספת מזהה החסימה.",
+       "apihelp-query+blocks-paramvalue-prop-user": "הוספת שם המשתמש שנחסם.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "הוספת המזהה של המשמש שנחסם.",
+       "apihelp-query+blocks-paramvalue-prop-by": "הוספת שם המשתמש שחסם.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "הוספת מזהה המשתמש שחסם.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "הוספת חותם־הזמן של החסימה.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "הוספת חותם־הזמן של תפוגת החסימה.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "הוספת הסיבה שניתנה לחסימה.",
+       "apihelp-query+blocks-paramvalue-prop-range": "הוספת טווח כתובות ה־IP שהחסימה משפיעה עליהן.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "מתייג את ההחרמה (autoblock‏, anononly, וכו'.).",
+       "apihelp-query+blocks-param-show": "להציג רק פריטים שמתאימים לאמות המידה האלו.\nלמשל, כדי לראות רק חסימות ללא לצמיתות על כתובות IP יש להגדיר <kbd>$1show=ip|!temp</kbd>.",
+       "apihelp-query+blocks-example-simple": "רשימת חסימות.",
+       "apihelp-query+blocks-example-users": "רשימת חסימות של המשתמשים <kbd>Alice</kbd> ו־<kbd>Bob</kbd>.",
+       "apihelp-query+categories-description": "לרשום את כל הקטגוריות שהדף שייך אליהן.",
+       "apihelp-query+categories-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קטגוריה:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "הוספת מפתח מיון (מחרוזת הקסדצימלית) ותחילית מפתח מיון (החלק הקריא) עבור קטגוריה.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "הוספת חותם־הזמן של יצירת הקטגוריה.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "תיוג קטגוריות שהוסתרו באמצעות <code>_&#95;HIDDENCAT_&#95;</code>.",
+       "apihelp-query+categories-param-show": "איזה סוג של קטגוריות להציג.",
        "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+       "apihelp-query+categories-param-categories": "לרשום רק את הקטגוריות האלו. שימושי לבדיקה עם דף מסוים נמצא בקטגוריה מסוימת.",
        "apihelp-query+categories-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+categories-example-simple": "קבלת רשימת קטגוריות שהם <kbd>Albert Einstein</kbd> שייך אליהן.",
+       "apihelp-query+categories-example-generator": "קבלת מידע על כל הקטגוריות שמשמשות בדף <kbd>Albert Einstein</kbd>.",
+       "apihelp-query+categoryinfo-description": "החזרת מידע על הקטגוריות הנתונות.",
+       "apihelp-query+categoryinfo-example-simple": "קבחצ מידע על <kbd>Category:Foo</kbd> ועל <kbd>Category:Bar</kbd>.",
        "apihelp-query+categorymembers-description": "רשימת כל הדפים בקטגוריה נתונה.",
        "apihelp-query+categorymembers-param-title": "איזו קטגוריה למנות (נדרש). חייב לכלול את התחילית <kbd>{{ns:category}}:</kbd>. לא יכול לשמש יחד עם <var>$1pageid</var>.",
        "apihelp-query+categorymembers-param-pageid": "מזהה הדף של הקטגוריה שצריך למנות. לא יכול לשמש יחד עם <var>$1title</var>.",
+       "apihelp-query+categorymembers-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "הוספת מזהה הדף.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "הוספת מפתח המיון שמשמש למיון בקטגוריה (מחרזות הקסדצימלית).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "הוספת מפתח המיון שמשמש למיון בקטגוריה (מחרוזת הקסדצימלית).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "הוספת הסוג שהדף מוין אליו (דף, תת־קטגוריה, או קובץ).",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "הוספת חותם־הזמן שבו הדף נכלל.",
        "apihelp-query+categorymembers-param-namespace": "לכלול רק דפים במרחבי השם האלה. יש לשים לב לכך ש־<kbd>$1type=subcat</kbd> או <kbd>$1type=file</kbd> יכולים לשמש במקום <kbd>$1namespace=14</kbd> או <kbd>6</kbd>.",
+       "apihelp-query+categorymembers-param-type": "איזה סוג של חברי קטגוריה לכלול. לא תקף כאשר מוגדר <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-limit": "מספר הדפים המרבי שיוחזר.",
        "apihelp-query+categorymembers-param-sort": "לפי איזה מאפיין למיין.",
        "apihelp-query+categorymembers-param-dir": "באיזה כיוון למיין.",
+       "apihelp-query+categorymembers-param-start": "מאיזה חותם־זמן להתחיל לרשום. יכול לשמש רק עם <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-end": "באיזה חותם־זמן לסיים לרשום. יכול לשמש רק עם <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "מפתח מיון להתחיל לרשום ממנו, כפי שמוחזר על־ידי <kbd>$1prop=sortkey</kbd. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "מפתח מיון לסיים לרשום ממנו, כפי שמוחזר על־ידי <kbd>$1prop=sortkey</kbd>. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "תחילית מפתח מיון להתחיל לרשום ממנה. יכול לשמש רק עם <kbd>$1sort=sortkey</kbd>.  דורס את <var>$1starthexsortkey</var>.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "תחילית מפתח מיון שהרשימה תסתיים <strong>לפניה</strong> (לא <strong>בה</strong>, אם הערך הזה מוגדר, הוא לא ייכלל!). יכול לשמש רק עם $1sort=sortkey. דורס את $1endhexsortkey.",
        "apihelp-query+categorymembers-param-startsortkey": "כדאי להשתמש ב־$1starthexsortkey במקום.",
        "apihelp-query+categorymembers-param-endsortkey": "כדאי להשתמש ב־$1endhexsortkey במקום.",
        "apihelp-query+categorymembers-example-simple": "קבלת עשרת העמודים הראשונים שתחת <kbd>קטגוריה:פיזיקה</kbd>.",
+       "apihelp-query+categorymembers-example-generator": "קבל מידע על הדף עבור 10 הדפים הראשונים ב־<kbd>Category:Physics</kbd>.",
+       "apihelp-query+contributors-description": "קבלת רשימה של תורמים שנכנסו לחשבון ומניין של תורמים אלמוניים לדף.",
+       "apihelp-query+contributors-param-group": "לכלול רק משתמשים בקבוצות הנתונות. לא כולל קבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+       "apihelp-query+contributors-param-excludegroup": "לא לכלול משתמשים בקבוצות הנתונות. לא כולל קבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+       "apihelp-query+contributors-param-rights": "לכלול רק משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
+       "apihelp-query+contributors-param-excluderights": "לא לכלול משתמשים עם ההרשאות הנתונות. לא כולל הרשאות שניתנו בקבוצות משתמעות או אוטומטיות כגון *, user או autoconfirmed.",
        "apihelp-query+contributors-param-limit": "כמה תורמים להחזיר.",
        "apihelp-query+contributors-example-simple": "הצגת תורמים לדף <kbd>עמוד ראשי</kbd>.",
-       "apihelp-query+deletedrevisions-param-start": "באיזה חותם־זמן להתחיל למנות. לא תקף בעיבור רשימת מזהי גרסה.",
+       "apihelp-query+deletedrevisions-description": "קבלת מידע על גרסה מחוקה.\n\nיכול לשמש במספר דרכים:\n# קבלת גרסאות מחוקות עבור ערכת דפים, על־ידי הגדרת שמות או מזהי דף. ממוין לפי שם וחותם־זמן.\n# קבלת מידע על ערכת גרסאות מחוקות באמצעות הגדרת המזהים שלהם עם revid־ים. ממוין לפי מזהה גרסה.",
+       "apihelp-query+deletedrevisions-param-start": "מאיזה חותם־זמן להתחיל למנות. לא תקף בעיבוד רשימת מזהי גרסה.",
        "apihelp-query+deletedrevisions-param-end": "באיזה חותם־זמן להפסיק למנות. לא תקף בעת עיבוד רשימת מזהי גרסה.",
        "apihelp-query+deletedrevisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
        "apihelp-query+deletedrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
        "apihelp-query+deletedrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
+       "apihelp-query+deletedrevisions-example-titles": "רשימת גרסאות מחוקות של הדפים <kbd>Main Page</kbd> ו־<kbd>Talk:Main Page</kbd>, עם תוכן.",
+       "apihelp-query+deletedrevisions-example-revids": "קבלת מידע לגרסה המחוקה <kbd>123456</kbd>.",
+       "apihelp-query+deletedrevs-description": "רשימת גרסאות מחוקות.\n\nפועל בשלושה אופנים:\n# רשימת גרסאות מחוקות לשמות שניתנו, ממוינות לפי חותם־זמן.\n# רשימת תרומות מחוקות של המשתמש שניתן, ממוינות לפי חותם־זמן (בלי לציין שמות).\n# רשימת כל הגרסאות המחוקות במרחב השם שניתן, ממוינות לפי שם וחותם־זמן (בלי לציין שמות, בלי להגדיר $1user).\n\nפרמטרים מסוימים חלים רק על חלק מהאופנים ולא תקפים באחרים.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|מצב|מצבים}}: $2",
        "apihelp-query+deletedrevs-param-start": "באיזה חותם־זמן להתחיל למנות.",
        "apihelp-query+deletedrevs-param-end": "באיזה חותם־זמן להפסיק למנות.",
        "apihelp-query+deletedrevs-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
        "apihelp-query+deletedrevs-param-namespace": "לרשום רק דפים במרחב השם הזה.",
        "apihelp-query+deletedrevs-param-limit": "המספר המרבי של הגרסאות שיירשם.",
+       "apihelp-query+deletedrevs-param-prop": "אילו מאפיינים לקבל:\n;revid:הוספת מזהה הגרסה של הגרסה המחוקה.\n;parentid:הוספת מזהה הגרסה של הגרסה הקודמת של הדף.\n;user:הוספת המשתמש שעשה את הגרסה.\n;userid:הוספת מזהה המשתמש שעשה את הגרסה.\n;comment:הוספת ההערה על הגרסה.\n;parsedcomment:הוספת ההערה המפוענחת על הגרסה.\n;minor:מתייג אם הגרסה משנית.\n;len:מוסיף את האורך (בבתים) של הגרסה.\n;sha1:הוספת ה־SHA-1 (בסיס 16) של הגרסה.\n;content:הוספת התוכן של הגרסה.\n;token:<span class=\"apihelp-deprecated\">מיושן.</span> נותן אסימון עריכה.\n;tags:תגים עבור הגרסה.",
+       "apihelp-query+deletedrevs-example-mode1": "רשימת כל הגרסאות המחוקות של הדפים <kbd>Main Page</kbd> ו־<kbd>Talk:Main Page</kbd>, עם תוכן (mode 1).",
+       "apihelp-query+deletedrevs-example-mode2": "רשימת 50 העריכות המחוקות האחרונות של <kbd>Bob</kbd>‏ (mode 2).",
+       "apihelp-query+deletedrevs-example-mode3-main": "רשימת 50 הגרסאות המחוקות הראשונות במרחב הראשי (mode 3).",
+       "apihelp-query+deletedrevs-example-mode3-talk": "רשימת 50 הדפים המחוקים הראשונים במרחב השם {{ns:talk}}‏ (mode 3).",
        "apihelp-query+disabled-description": "יחידת ה־query הזאת כובתה.",
+       "apihelp-query+duplicatefiles-description": "רשימת כל הקבצים שהם כפולים של קבצים נתונים לפי ערכי הגיבוב.",
        "apihelp-query+duplicatefiles-param-limit": "כמה קבצים כפולים להחזיר.",
        "apihelp-query+duplicatefiles-param-dir": "באיזה כיוון לרשום.",
        "apihelp-query+duplicatefiles-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
        "apihelp-query+duplicatefiles-example-simple": "חיפוש אחר כפילויות של [[:קובץ:Albert Einstein Head.jpg]].",
        "apihelp-query+duplicatefiles-example-generated": "חיפוש אחר כפילויות בין כל הקבצים.",
+       "apihelp-query+embeddedin-description": "חיפוש כל הדפים שמטמיעים (מכלילים) את הכותרת הנתונה.",
        "apihelp-query+embeddedin-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "מזהה דף לחיפוש. לא יכול לשמש יחד עם $1title.",
        "apihelp-query+embeddedin-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+embeddedin-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+embeddedin-param-filterredir": "איך לסנן עבור הפניות.",
        "apihelp-query+embeddedin-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+embeddedin-example-simple": "הצגת דפים שמכלילים את <kbd>Template:Stub</kbd>.",
+       "apihelp-query+embeddedin-example-generator": "קבלת מידע על דפים שמכלילים את <kbd>Template:Stub</kbd>.",
+       "apihelp-query+extlinks-description": "החזרת כל ה־URL־ים החיצוניים (לא בינוויקי) מהדפים הנתונים.",
        "apihelp-query+extlinks-param-limit": "כמה קישורים להחזיר.",
+       "apihelp-query+extlinks-param-protocol": "הפרוטוקול של ה־URL. אם זה ריק, ו־<var>$1query</var> מוגדר, הפרוטוקול הוא <kbd>http</kbd>. יש להשאיר את זה ואת <var>$1query</var> ריק כדי לרשום את כל הקישורים החיצוניים.",
+       "apihelp-query+extlinks-param-query": "מחרוזת חיפוש ללא פרוטוקול. שימושי לבדיקה האם דף מסוים מכיל url חיצוני מסוים.",
+       "apihelp-query+extlinks-param-expandurl": "הרחבת URL־ים בעלי פרוטוקול יחסי בפרוטוקול קנוני.",
+       "apihelp-query+extlinks-example-simple": "קבלת רשימת קישורים חיצוניים ב־<kbd>Main Page<kbd>.",
        "apihelp-query+exturlusage-description": "למנות דפים שמכילים URL נתון.",
+       "apihelp-query+exturlusage-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "הוספת מזהה הדף.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "הוספת ה־URL שמשמש בדף.",
+       "apihelp-query+exturlusage-param-protocol": "הפרוטוקול של ה־URL. אם זה ריק, ו־<var>$1query</var> מוגדר, הפרוטוקול הוא <kbd>http</kbd>. יש להשאיר את זה ואת <var>$1query</var> ריק כדי לרשום את כל הקישורים החיצוניים.",
+       "apihelp-query+exturlusage-param-query": "מחרוזת חיפוש ללא פרוטוקל. ר' [[Special:LinkSearch]]. יש להשאיר את זה ריק כדי לרשום את כל הקישורים החיצוניים.",
        "apihelp-query+exturlusage-param-namespace": "איזה מרחב שם למנות.",
+       "apihelp-query+exturlusage-param-limit": "כמה דפים להחזיר.",
+       "apihelp-query+exturlusage-param-expandurl": "הרחבת URL־ים בעלי פרוטוקול יחסי בפרוטוקול קנוני.",
+       "apihelp-query+exturlusage-example-simple": "הצגת דפים שמקשרים ל־<kbd>http://www.mediawiki.org</kbd>.",
        "apihelp-query+filearchive-description": "למנות את כל הקבצים המחוקים לפי הסדר.",
        "apihelp-query+filearchive-param-from": "מאיזו כותרת תמונה להתחיל למנות.",
        "apihelp-query+filearchive-param-to": "באיזו כותרת תמונה להפסיק למנות.",
+       "apihelp-query+filearchive-param-prefix": "חיפוש כל שמות התמונות שמתחילים בערך הזה.",
+       "apihelp-query+filearchive-param-limit": "כמה תמונות להחזיר בסך הכול.",
        "apihelp-query+filearchive-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+filearchive-param-sha1": "גיבוב SHA1 של תמונה. דורס את $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "גיבוב SHA1 של תמונה בבסיס 36 (משמש במדיה־ויקי).",
+       "apihelp-query+filearchive-param-prop": "איזה מידע על תמונה לקבל:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "הוספת גיבוב SHA-1 עבור התמונה.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "הוספת חותם־זמן לגרסה המועלית.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "הוספת המשתמש שהעלה על גרסת התמונה.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "הוספת הגודל של התמונה בבתים והגובה, הרוחב ומניין הדפים (אם מתאים).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "כינוי ל־size.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "הוספת תיאור לגרסת התמונה.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "פענוח התיאור של הגרסה.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "הוספת ה־MIME של התמונה.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "הוספת סוג המדיה של התמונה.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "רשימת מטא־נתוני Exif עבור גרסת הקובץ.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "הוספת עומק הביטים של הגרסה.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "הוספת שם הקובץ של גרסה מאורכבת עבור גרסאות שאינן האחרונה.",
+       "apihelp-query+filearchive-example-simple": "הצגת רשימת כל הקבצים המחוקים.",
+       "apihelp-query+filerepoinfo-description": "החזרת מידע מטא על מאגרי תמונות שמוגדרים בוויקי.",
+       "apihelp-query+filerepoinfo-param-prop": "אילו מאפייני מאגר לקבל (יכולים להיות יותר מזה באתרי ויקי אחדים):\n;apiurl:URL ל־API של המאגר – מועיל לקבלת מידע על התמונה מהמארח.\n;name:המפתח של המאגר – משמש למשל בערכים המוחזרים מ־<var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> ומ־[[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:שם קריא של אתר הוויקי של המאגר.\n;rooturl:URL שורש לנתיבי תמונות.\n;local:האם המאגר הוא מקומי או לא.",
+       "apihelp-query+filerepoinfo-example-simple": "קבלת מידע על מאגרי קבצים.",
+       "apihelp-query+fileusage-description": "מציאת כל הדפים שמשתמשים בקבצים הנתונים.",
+       "apihelp-query+fileusage-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "השם של כל דף.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
        "apihelp-query+fileusage-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+fileusage-param-limit": "כמה להחזיר.",
        "apihelp-query+fileusage-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+       "apihelp-query+fileusage-example-simple": "קבלת רשימת דפים שמשתמשים ב־[[:File:Example.jpg]].",
+       "apihelp-query+fileusage-example-generator": "קבלת מידע על דפים שמשתמשים ב־[[:File:Example.jpg]].",
        "apihelp-query+imageinfo-description": "החזרת מידע על קובץ והיסטורייה העלאה.",
        "apihelp-query+imageinfo-param-prop": "איזה מידע על הקובץ לקבל:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "הוספת חותם־זמן לגרסה שהועלתה.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "הוספת מזהה המשתמש שהעלה כל גרסה של קובץ.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "תגובה על הגרסה.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "פענוח ההערה על גרסה.",
-       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "×\94×\95ספת ×©כותרת הקנונית של הקובץ.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "×\94×\95ספת ×\94כותרת הקנונית של הקובץ.",
        "apihelp-query+imageinfo-paramvalue-prop-url": "מתן URL לקובץ ולדף התיאור.",
        "apihelp-query+imageinfo-paramvalue-prop-size": "הוספת הגודל של הקובץ בבתים והגובה, הרוחב ומניין הדפים (אם זה מתאים).",
-       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "×\9b×\99×\95× י ל־size.",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "×\9b×\99× ×\95י ל־size.",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "הוספת גיבוב SHA-1 עבור הקובץ.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "הוספת סוג ה־MIME של הקובץ.",
        "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "הוספת סוג ה־MIME של התמונה הממוזערת (נדרש url והפרמטר $1urlwidth).",
        "apihelp-query+imageinfo-param-limit": "כמה גרסאות של קובץ לכל קובץ.",
        "apihelp-query+imageinfo-param-start": "מאיז חותם־זמן להתחיל רשימה.",
        "apihelp-query+imageinfo-param-end": "באיזה חותם־זמן לסיים את הרשימה.",
+       "apihelp-query+imageinfo-param-urlwidth": "אם מוגדר $2prop=url, יוחזר URL לתמונה שגודלה הותאם לרוחב הזה.\nמסיבות של ביצועים, אם האפשרות הזאת משמשת, לא יוחזרו יותר מ־$1 תמונות.",
        "apihelp-query+imageinfo-param-urlheight": "דומה ל־$1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "גרסת המטא־נתונים לשימוש. אם מוגדר <kbd>latest</kbd>, להשתמש בגרסה החדשה ביותר. בררת המחדל היא <kbd>1</kbd> לצורך תאימות אחורה.",
        "apihelp-query+imageinfo-param-extmetadatalanguage": "באיזו שפה לאחזר את המטא־נתונים. זה משפיע על אילו תרגומים לאחזר, האם יש כמה, וגם איך דברים כמו מספרים וערכים שונים מעוצבים.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "אם תרגומים של המאפיין extmetadata זמינים, לאחזר את כולם.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "אם זה מוגדר ולא ריק, רק המפתחות האלה יוחזרו עבור $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "מחרוזת פרמטר ייחודית למטפל. למשל, PDF־ים יכולים להשתמש ב־<kbd>page15-100px</kbd>.‏ <var>$1urlwidth</var> צריך לשמש ולהיות עקבי עם <var>$1urlparam</var>.",
        "apihelp-query+imageinfo-param-localonly": "חיפוש אחר קבצים במאגר המקומי בלבד.",
-       "apihelp-query+imageinfo-example-simple": "קבלת פרטים על הגרסה הנוכחית של [[:קובץ:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageinfo-example-simple": "קבלת מידע על הגרסה הנוכחית של [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageinfo-example-dated": "אחזור מידע על גרסאות של [[:File:Test.jpg]] מ־2008 ואחרי‏־כן.",
+       "apihelp-query+images-description": "להחזיר את כל הקבצים שמכילים הדפים הנתונים.",
        "apihelp-query+images-param-limit": "כמה קבצים להחזיר.",
+       "apihelp-query+images-param-images": "לרשום רק את הקבצים האלה. שימוש לבדיקת האם לדף מסוים יש קובץ מסוים.",
        "apihelp-query+images-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+images-example-simple": "קבלת רשימת קבצים שמשמשים ב־[[Main Page]].",
+       "apihelp-query+images-example-generator": "קבלת מידע על כל הקבצים שמשמשים ב־[[Main Page]].",
+       "apihelp-query+imageusage-description": "מציאת כל הדפים שמתמשים בשם התמונה הנתונה.",
        "apihelp-query+imageusage-param-title": "איזו כותרת לחפש. לא ניתן להשתמש בזה יחד עם $1pageid.",
-       "apihelp-query+imageusage-param-namespace": "איזה מרחב שם לרשום.",
+       "apihelp-query+imageusage-param-pageid": "מזהה דף לחיפוש. לא יכול לשמש יחד עם $1title.",
+       "apihelp-query+imageusage-param-namespace": "איזה מרחב שם למנות.",
        "apihelp-query+imageusage-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+imageusage-param-filterredir": "איך לסנן הפניות. אם זה מוגדר ל־nonredirects כש־$1redirect מופעל, זה חל רק על הרמה השנייה.",
+       "apihelp-query+imageusage-param-limit": "כמה דפים להחזיר בסך הכול. אם <var>$1redirect</var> מופעל, ההגבלה חלה על כל רמה בנפרד (כלומר יכולות להיות מוחזרות עד <span dir=\"ltr\">2 * <var>$1limit</var></span> תוצאות).",
+       "apihelp-query+imageusage-param-redirect": "אם הדף המקשר הוא הפניה, למצוא גם את כל הדפים שמקשרים לאותה ההפניה. ההגבלה המרבית מוקטנת בחצי.",
+       "apihelp-query+imageusage-example-simple": "הצגת דפים שמשתמשים ב־[[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageusage-example-generator": "קבלת פרטים על דפים שמשתמשים ב־[[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+info-description": "קבלת מידע בסיסי על הדף.",
+       "apihelp-query+info-param-prop": "אילו מאפיינים נוספים לקבל:",
+       "apihelp-query+info-paramvalue-prop-protection": "לרשום את רמת ההגנה של כל דף.",
+       "apihelp-query+info-paramvalue-prop-talkid": "מזהה הדף של דף השיחה עבור כל דף שאינו דף שיחה.",
+       "apihelp-query+info-paramvalue-prop-watched": "לרשום את מצב המעקב של כל דף.",
        "apihelp-query+info-paramvalue-prop-watchers": "מספר העוקבים, אם קיבלת הרשאה.",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "חותם־זמן של הודעת רשימת מעקב של כל דף.",
+       "apihelp-query+info-paramvalue-prop-subjectid": "מזהה הדף של הדף העיקרי של כל דף שיחה.",
+       "apihelp-query+info-paramvalue-prop-url": "נותן URL מלא, URL לעריכה ו־URL קנוני לכל דף.",
        "apihelp-query+info-paramvalue-prop-readable": "האם המשתמש יכול להציג דף זה.",
+       "apihelp-query+info-paramvalue-prop-preload": "נותן את הטקסט שמוחזר על־ידי EditFormPreloadText.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "נותן את האופן שבה שם הדף באמת מוצג.",
+       "apihelp-query+info-param-testactions": "בדיקה האם המשתמש הנוכחי יכול לבצע פעולות מסוימות על הדף.",
+       "apihelp-query+info-param-token": "להשתמש ב־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] במקום.",
+       "apihelp-query+info-example-simple": "קבלת מידע על הדף <kbd>Main Page</kbd>",
+       "apihelp-query+info-example-protection": "קבלת מידע כללי ומידע על הגנה של הדף <kbd>Main Page</kbd>.",
+       "apihelp-query+iwbacklinks-description": "מציאות כל הדפים שמקשרים לקישור הבינוויקי הנתון.\n\nיכול לשמש למציאת כל הקישורים עם התחילית, או כל הקישורים לכותרת (עם תחילית נתונה). אי־שימוש בשום פרמטר אומר \"כל קישורי בינוויקי\".",
+       "apihelp-query+iwbacklinks-param-prefix": "תחילית לבינוויקי.",
        "apihelp-query+iwbacklinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1blprefix</var>.",
        "apihelp-query+iwbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+iwbacklinks-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "הוספת התחילית של הבינוויקי.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "הוספת הכותרת של הבינוויקי.",
        "apihelp-query+iwbacklinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+iwbacklinks-example-simple": "קבלת דפים שמקשרים ל־[[wikibooks:Test]].",
+       "apihelp-query+iwbacklinks-example-generator": "קבלת מידע על דפים שמקשרים ל־[[wikibooks:Test]].",
+       "apihelp-query+iwlinks-description": "החזרת כל קישורי הבינוויקי מהדפים הנתונים.",
+       "apihelp-query+iwlinks-param-url": "האם לקבל את ה־URL המלא (לא יכול לשמש עם $1prop).",
+       "apihelp-query+iwlinks-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קישור בין־לשוני:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "הוספת ה־URL המלא.",
+       "apihelp-query+iwlinks-param-limit": "כמה קישורי בינוויקי להחזיר.",
+       "apihelp-query+iwlinks-param-prefix": "להחזיר רק קישורי בינוויקי עם התחילית הזאת.",
        "apihelp-query+iwlinks-param-title": "איזה קישור בינוויקי לחפש. צריך להשתמש בזה יחד עם <var>$1prefix</var>.",
        "apihelp-query+iwlinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+iwlinks-example-simple": "קבלת קישורי בינוויקי מהדף <kbd>Main Page</kbd>.",
+       "apihelp-query+langbacklinks-description": "מציאת כל הדפים שמקשרים לקישור השפה הנתון.\n\nיכול לשמש למציאת כל הקישורים עם קוד שפה, או כל הקישורים לכותרת (עם שפה נתונה). אי־שימוש בשום פרמטר פירושו \"כל קישורי שפה\".\n\nנא לשים לב לכך שזה עשוי לא להתייחס לקישורי שפה שמוסיפות הרחבות.",
+       "apihelp-query+langbacklinks-param-lang": "שפה עבור קישור שפה.",
+       "apihelp-query+langbacklinks-param-title": "איזה קישור שפה לחפש. חייב לשמש עם $1lang.",
        "apihelp-query+langbacklinks-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+langbacklinks-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "הוספת קוד השפה של קישור השפה.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "הוספת הכותרת של קישור השפה.",
        "apihelp-query+langbacklinks-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+langbacklinks-example-simple": "קבלת דפים שמקשרים ל־[[:fr:Test]].",
+       "apihelp-query+langbacklinks-example-generator": "קבלת מידע על דפים שמקשרים ל־[[:fr:Test]].",
+       "apihelp-query+langlinks-description": "החזרת כל הקישורים הבין־לשוניים מהדפים הנתונים.",
+       "apihelp-query+langlinks-param-limit": "כמה קישורי שפה להחזיר.",
+       "apihelp-query+langlinks-param-url": "האם לקבל את ה־URL המלא (לא יכול לשמש עם <var>$1prop</var>).",
+       "apihelp-query+langlinks-param-prop": "אילו מאפיינים נוספים לקבל עבור כל קישור בין־לשוני:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "הוספת ה־URL המלא.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "הוספת שם השפה המתורגם (עם המאמץ הטוב ביותר). יש להשתמש ב־<var>$1inlanguagecode</var> כדי לשלוט בשפה.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "הוספת השם הילידי של השפה.",
+       "apihelp-query+langlinks-param-lang": "להחזיר רק קישורי שפה עם קוד השפה הזה.",
        "apihelp-query+langlinks-param-title": "קישור לחיפוש. חובה להשתמש עם <var>$1lang</var>.",
        "apihelp-query+langlinks-param-dir": "באיזה כיוון לרשום.",
        "apihelp-query+langlinks-param-inlanguagecode": "קוד שפה ששמות שפות מתורגמות.",
+       "apihelp-query+langlinks-example-simple": "קבלת קישורים בין־לשוניים מהדף <kbd>Main Page</kbd>.",
        "apihelp-query+links-description": "החזרת כל הקישורים מהדפים שצוינו.",
+       "apihelp-query+links-param-namespace": "להציג קישורים רק במרחבי השם האלה.",
        "apihelp-query+links-param-limit": "כמה קישורים להחזיר.",
+       "apihelp-query+links-param-titles": "לרשום רק קישורים לכותרות האלו. שימושי לבדיקה האם דף מסוים מקשר לכותרת מסוימת.",
        "apihelp-query+links-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+links-example-simple": "קבלת קישורים מהדף <kbd>Main Page</kbd>",
+       "apihelp-query+links-example-generator": "קבלת מידע על דפי הקישור בדף <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-namespaces": "קבלת קישורים מהדף <kbd>Main Page</kbd> במרחבי השם {{ns:user}} ו־{{ns:template}}.",
        "apihelp-query+linkshere-description": "מציאת כל הדפים שמקשרים לדפים הנתונים.",
+       "apihelp-query+linkshere-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "השם של כל דף.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
        "apihelp-query+linkshere-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+linkshere-param-limit": "כמה להחזיר.",
        "apihelp-query+linkshere-param-show": "הצגת פריטים שתואמים את הדרישות הללו בלבד:\n;redirect:הצגת הפניות בלבד.\n;!redirect:הצגת קישורים שאינם הפניות בלבד.",
+       "apihelp-query+linkshere-example-simple": "קבלת רשימת דפים שמקשרים ל־[[Main Page]].",
+       "apihelp-query+linkshere-example-generator": "קבל מידע על דפים שמקשרים ל־[[Main Page]].",
        "apihelp-query+logevents-description": "קבלת אירועים מהרישומים.",
-       "apihelp-query+logevents-param-start": "באיזה חותם־זמן להתחיל למנות.",
+       "apihelp-query+logevents-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "הוספת המזהה של אירוע היומן.",
+       "apihelp-query+logevents-paramvalue-prop-title": "הוספת שם הדף של אירוע היומן.",
+       "apihelp-query+logevents-paramvalue-prop-type": "הוספת הסוג של אירוע היומן.",
+       "apihelp-query+logevents-paramvalue-prop-user": "הוספת המשתמש האחראי על אירוע היומן.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "הוספת מזהה המשתמש האחראי על אירוע היומן.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "הוספת חותם־הזמן עבור האירוע.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "הוספת ההערה של האירוע.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת של האירוע.",
+       "apihelp-query+logevents-paramvalue-prop-details": "הוספת פרטים נוספים על האירוע.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "רשימת התגים של האירוע.",
+       "apihelp-query+logevents-param-type": "סינון עיולי יומן רק לסוג הזה.",
+       "apihelp-query+logevents-param-action": "סינון פעולות יומן רק לפעולה הזאת. דורס את <var>$1type</var>. ברשימת הערכים האפשריים, ערכים עם תו־כל כוכבית כגון <kbd>action/*</kbd> יכולים להיות מחרוזות שונות אחרי הקו הנטוי (/).",
+       "apihelp-query+logevents-param-start": "מאיזה חותם־זמן להתחיל למנות.",
        "apihelp-query+logevents-param-end": "באיזה חותם זמן להפסיק לרשום.",
-       "apihelp-query+pageswithprop-param-propname": "מאפיין דף שעבורו יימנו דפים.",
+       "apihelp-query+logevents-param-user": "לסנן את העיולים שעשה המשתמש הנתון.",
+       "apihelp-query+logevents-param-title": "סינון עיולים רק לכאלה שמתייחסים לדף.",
+       "apihelp-query+logevents-param-namespace": "סינון עיולים רק לכאלה במרחב השם הנתון.",
+       "apihelp-query+logevents-param-prefix": "סינון עיולים לכאלה שמתחילים עם התחילית הזאת.",
+       "apihelp-query+logevents-param-tag": "לרשום רק אירועים שמתויגם בתג הזה.",
+       "apihelp-query+logevents-param-limit": "כמה עיולי אירועים להחזיר בסך הכול.",
+       "apihelp-query+logevents-example-simple": "רשימת אירועי יומן אחרונים.",
+       "apihelp-query+pagepropnames-description": "רשימת כל שמות המאפיינים שמשמשים בוויקי.",
+       "apihelp-query+pagepropnames-param-limit": "המספר המרבי של השמות להחזיר.",
+       "apihelp-query+pagepropnames-example-simple": "לתת את 10 שמות המאפיינים הראשונים.",
+       "apihelp-query+pageprops-description": "קבלת מאפיינים שונים בתוכן הדף.",
+       "apihelp-query+pageprops-param-prop": "לרשום רק את המאפיינים האלה. שימושי לבדיקה האם דף מסוים משתמש במאפיין דף מסוים.",
+       "apihelp-query+pageprops-example-simple": "קבלת מאפיינים עבור הדפים <kbd>Main Page</kbd> ו־<kbd>MediaWiki</kbd>.",
+       "apihelp-query+pageswithprop-description": "לרשום את כל הדפים שמשתמשים במאפיין דף נתון.",
+       "apihelp-query+pageswithprop-param-propname": "מאפיין דף שעבורו למנות דפים.",
+       "apihelp-query+pageswithprop-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "הוספת מזהה הדף.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "הוספת הערך של מאפיין הדף.",
        "apihelp-query+pageswithprop-param-limit": "מספר הדפים המרבי שיוחזר.",
        "apihelp-query+pageswithprop-param-dir": "באיזה כיוון לסדר.",
        "apihelp-query+pageswithprop-example-simple": "הצגת עשרת הדפים הראשונים שעושים שימוש ב־<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
-       "apihelp-query+pageswithprop-example-generator": "קבלת פרטיהם של עשרת הדפים הראשונים המשתמשים ב־<code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "קבלת מידע נוסף על עשרת הדפים הראשונים המשתמשים ב־<code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+prefixsearch-description": "ביצוע חיפוש תחילית של כותרות דפים.",
        "apihelp-query+prefixsearch-param-search": "מחרוזת לחיפוש.",
        "apihelp-query+prefixsearch-param-namespace": "שמות מתחם לחיפוש.",
        "apihelp-query+prefixsearch-param-limit": "מספר התוצאות המרבי להחזרה.",
        "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
+       "apihelp-query+prefixsearch-example-simple": "חיפוש שםות דפים שמתחילים ב־<kbd>meaning</kbd>.",
+       "apihelp-query+protectedtitles-description": "לרשום את כל הכותרות שמוגנות מפני יצירה.",
+       "apihelp-query+protectedtitles-param-namespace": "לרשום רק כותרות במרחבי השם האלה.",
+       "apihelp-query+protectedtitles-param-level": "לרשום רק שמות עם רמת ההגנה הזאת.",
        "apihelp-query+protectedtitles-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+protectedtitles-param-start": "להתחיל לרשום בחותם־זמן ההגנה הזה.",
        "apihelp-query+protectedtitles-param-end": "באיזה חותם־זמן הגנה לסיים את הרשימה.",
+       "apihelp-query+protectedtitles-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "הוספת חותם־הזמן של הוספת ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "הוספת המשתמש שהוסיף את ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "הוספת מזהה המשתמש שהוסיף את ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "הוספת ההערה עבור ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת עבור ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "הוספת חותם־הזמן של הסרת ההגנה.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "הוספת רמת ההגנה.",
+       "apihelp-query+protectedtitles-example-simple": "רשימת כותרות מוגנות.",
+       "apihelp-query+protectedtitles-example-generator": "חיפוש קישורים לכותרות מוגנות במרחב הראשי.",
+       "apihelp-query+querypage-description": "קבלת רשימה שמסופקת על־ידי דף מיוחד מבוסס־QueryPage.",
+       "apihelp-query+querypage-param-page": "שם הדף המיוחד. לתשומת לבך, זה תלוי־רישיות.",
        "apihelp-query+querypage-param-limit": "מספר תוצאות להחזרה.",
-       "apihelp-query+recentchanges-description": "מניית השינויים האחרונים.",
-       "apihelp-query+recentchanges-param-start": "באיזה חותם־זמן להתחיל למנות.",
+       "apihelp-query+querypage-example-ancientpages": "מחזיר תוצאות מ־[[Special:Ancientpages]].",
+       "apihelp-query+random-description": "קבלת ערכת דפים אקראיים.\n\nהדפים רשומים בסדר קבוע, ורק נקודת ההתחלה אקראית. זה אומר שאם, למשל, <samp>Main Page</samp> הוא הדף האקראי הראשון הרשימה, <samp>List of fictional monkeys</samp> יהיה <em>תמיד</em> השני, <samp>List of people on stamps of Vanuatu</samp> שלישי, וכו'.",
+       "apihelp-query+random-param-namespace": "מחזיר דפים רק במרחבי השם האלה.",
+       "apihelp-query+random-param-limit": "להגביל את מספר הדפים האקראיים שיוחזרו.",
+       "apihelp-query+random-param-redirect": "נא להשתמש ב־<kbd>$1filterredir=redirects</kbd> במקום.",
+       "apihelp-query+random-param-filterredir": "איך לסנן הפניות.",
+       "apihelp-query+random-example-simple": "להחזיר שני דפים אקראיים מהמרחב הראשי.",
+       "apihelp-query+random-example-generator": "החזרת מידע על הדף על שני דפים אקראיים מהמרחב הראשי.",
+       "apihelp-query+recentchanges-description": "למנות שינויים אחרונים.",
+       "apihelp-query+recentchanges-param-start": "מאיזה חותם־זמן להתחיל למנות.",
        "apihelp-query+recentchanges-param-end": "באיזה חותם זמן להפסיק לרשום.",
+       "apihelp-query+recentchanges-param-namespace": "לסנן את השינויים רק למרחבי השם האלה.",
        "apihelp-query+recentchanges-param-user": "לרשום רק שינויים של המשתמש הזה.",
        "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user",
+       "apihelp-query+recentchanges-param-tag": "לרשום רק שינויים שמתויגים עם התג הזה.",
+       "apihelp-query+recentchanges-param-prop": "לכלול פריטי מידע נוספים:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "הוספת המשתמש האחראי על העריכה ותיוג אם זאת כתובת IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "הוספת המשתמש האחראי על העריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "הוספת ההערה על העריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת על העריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "הוספת דגלים לעריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "הוספת חותם־זמן של העריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "הוספת שם הדף של העריכה.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "הוספת מזהה הדף, מזהה שינויים אחרונים, והמזהה הגרסה החדשה והישנה.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "הוספת אורך הדף החדש והישן בבתים.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "מתייג שהדף הוא הפניה.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "מתייג עריכה בת־בדיקה בתור בדוקה או בלתי־בדוקה.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "הוספת מידע יומן (זהה יומן, סוג יומן וכו') לעיולי יומן.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "רשימת תגים עבור העיול.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "הוספת סיכום־ביקורת תוכן לעיולים שמשויכים לגרסה.",
+       "apihelp-query+recentchanges-param-token": "יש להשתמש ב־<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> במקום.",
+       "apihelp-query+recentchanges-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלו. למשל, כדי לראות רק עריכות משניות שעשו משתמשים שנכנסו לחשבון, יש להגדיר $1show=minor|!anon.",
        "apihelp-query+recentchanges-param-limit": "כמה שינויים להחזיר בסך הכול.",
        "apihelp-query+recentchanges-param-type": "אילו סוגים של שינויים להציג.",
        "apihelp-query+recentchanges-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
        "apihelp-query+recentchanges-example-simple": "הצגת השינויים האחרונים.",
+       "apihelp-query+recentchanges-example-generator": "קבלת מידע על הדף על שינויים אחרונים שלא נבדקו.",
+       "apihelp-query+redirects-description": "מחזיר את כל ההפניות לדפים הנתונים.",
+       "apihelp-query+redirects-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "מזהה הדף של כל הפניה.",
+       "apihelp-query+redirects-paramvalue-prop-title": "השם של כל הפניה.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "מובאה מכל הפניה, אם יש.",
        "apihelp-query+redirects-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+redirects-param-limit": "כמה הפניות להחזיר.",
        "apihelp-query+redirects-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;fragment:להציג רק הפניות עם מקטע.\n;!fragment:להציג רק הפניות ללא מקטע.",
+       "apihelp-query+redirects-example-simple": "קבלת רשימת הפניות ל־[[Main Page]]",
+       "apihelp-query+redirects-example-generator": "קבלת מידע על כל ההפניות ל־[[Main Page]].",
+       "apihelp-query+revisions-description": "קבלת מידע על גרסה.\n\nיכול לשמש במספר דרכים:\n# קבלת נתונים על ערכת דפים (גרסה אחרונה), באמצעות כותרות או מזהי דף.\n# קבלת גרסאות עבור דף נתון אחד, באמצעות שימוש בכותרות או במזהי דף עם start‏, end או limit.\n# קבלת נתונים על ערכת גרסאות באמצעות הגדרת המזהים שלהם עם revid־ים.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "יכול לשמש רק עם דף בודד (mode #2).",
        "apihelp-query+revisions-param-startid": "מאיזה מזהה גרסה להתחיל למנות.",
        "apihelp-query+revisions-param-endid": "באיזה מזהה גרסה להפסיק את מניית הגרסאות.",
        "apihelp-query+revisions-param-start": "מאיזה חותם־זמן של גרסה להתחיל למנות.",
+       "apihelp-query+revisions-param-end": "למנות עד חותם־הזמן הזה.",
+       "apihelp-query+revisions-param-user": "לכלול רק גרסאות מאת משתמש.",
+       "apihelp-query+revisions-param-excludeuser": "לא לכלול שינויים מאת משתמש.",
        "apihelp-query+revisions-param-tag": "לרשום רק גרסאות עם התג הזה.",
+       "apihelp-query+revisions-param-token": "אילו אסימונים לקבל עבור כל גרסה.",
+       "apihelp-query+revisions-example-content": "קבל נתונים על תוכן עבור הגרסאות האחרונות של הכותרות <kbd>API</kbd> ו־<kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-last5": "קבלת 5 הגרסאות האחרונות של <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5-after": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd> שנעשו אחרי 2006-05-01.",
+       "apihelp-query+revisions-example-first5-not-localhost": "קבלת 5 הגרבאות הראשונות של <kbd>Main Page</kbd> שלא נעשו על־ידי המשתמש האלמוני <kbd>127.0.0.1</kbd>.",
+       "apihelp-query+revisions-example-first5-user": "קבלת 5 הגרסאות הראשונות של <kbd>Main Page</kbd> שנעשו על־ידי המשתמש <kbd>MediaWiki default</kbd>.",
+       "apihelp-query+revisions+base-param-prop": "אילו מאפיינים לקבל עבור כל גרסה:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "מזהה הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "דגלי גרסה (משני).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "חותם־הזמן של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "המתמש שעשה את הגרסה",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "מזהה המשתמש של יוצר הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "אורך (בבתים) של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (בבסיס 16) של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "מזהה מודל התוכן של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "הערה מאת המשתמש על הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "הערה מפוענחת מאת המשתמש על הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "הטקסט של הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "התגים עבור הגרסה.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "עץ פענוח XML של תוכן הגרסה (דורש מודל תוכן <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "הגבלת מספר הגרסאות שיוחזרו.",
+       "apihelp-query+revisions+base-param-expandtemplates": "להרחיב תבניות בתוכן הגרסה (דורש $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "יצירת עץ פענוח XML עבור תוכן הגרסה (דורש את $1prop=content; מוחלף ב־<kbd>$1prop=parsetree</kbd>).",
+       "apihelp-query+revisions+base-param-parse": "פענוח תוכן הגרסה (דורש $1prop=content). מסיבות של ביצועים, אם האפשרות הזאת משמשת, $1limit נכפה לערך 1.",
+       "apihelp-query+revisions+base-param-section": "לאחזר רק את התוכן של הפִסקה עם המספר הזה.",
+       "apihelp-query+revisions+base-param-diffto": "מזהה הגרסה שאליו תושווה כל גרסה. יש להשתמש ב־<kbd>prev</kbd>‏, <kbd>next</kbd> ו־<kbd>cur</kbd> עבור הגרסה הקודמת, הבא והנוכחית, בהתאמה.",
+       "apihelp-query+revisions+base-param-difftotext": "הטקסט שאליו תושווה כל גרסה. מבצע השוואה רק של מספר מוגבל של גרסאות. דורס את <var>$1diffto</var>. אם מוגדר <var>$1section</var>, רק הפסקה הזאת תושווה אל מול הטקסט הזה.",
        "apihelp-query+revisions+base-param-contentformat": "תסדיר ההסדרה שמשמש את <var>$1difftotext</var> וצפוי לפלט של תוכן.",
        "apihelp-query+search-description": "ביצוע חיפוש בכל הטקסט.",
+       "apihelp-query+search-param-search": "חיפוש שמות דפים או תוכן שמתאים לערך הזה. אפשר להשתמש בחיפוש מחרוזת כדי לקרוא לאפשרויות חיפוש מתקדמות, בהתאם למה שממומש בשרת החיפוש של הוויקי.",
+       "apihelp-query+search-param-namespace": "חיפוש רק במרחבי השם האלה.",
        "apihelp-query+search-param-what": "איזה סוג חיפוש לבצע.",
        "apihelp-query+search-param-info": "אילו מטא־נתונים להחזיר.",
+       "apihelp-query+search-param-prop": "אילו מאפיינים להחזיר:",
+       "apihelp-query+search-paramvalue-prop-size": "הוספת גודל הדף בבתים.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "הוספת מניין המילים של הדף.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "הוספת חותם־הזמן של העריכה האחרונה של הדף.",
+       "apihelp-query+search-paramvalue-prop-snippet": "הוספת קטע קצר מפוענח מהדף.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "הוספת קטע קצר מפוענח משם הדף.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "הוספת קטע קצר מפוענח משם ההפניה.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "הוספת שם ההפניה התואמת.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "הוספת קטע קצר מפוענח של שם הפסקה התואמת.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "הוספת שם הפסקה התואמת.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "הוספת קטע קצר מפוענח של הקטגוריה התואמת.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "הוספת בוליאני שמציין אם החיפוש תאם לתוכן של קובץ.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">מיושן וחסר־השפעה.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">מיושן וחסר־השפעה.</span>",
        "apihelp-query+search-param-limit": "כמה דפים להחזיר בסך הכול.",
+       "apihelp-query+search-param-interwiki": "לכלול תוצאות בינוויקי בחיפוש, אם זמין.",
+       "apihelp-query+search-param-backend": "באיזה שרת חיפוש להשתמש אם לא בבררת המחדל.",
+       "apihelp-query+search-example-simple": "חיפוש <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-text": "חיפוש טקסטים עבור <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-generator": "קבלת מידע על הדף עבור שמוחזרים מחיפוש אחרי <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-description": "החזרת מידע כללי על האתר.",
+       "apihelp-query+siteinfo-param-prop": "איזה מיד לקבל:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "מידע מערכת כללי.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "רשימת מרחבי שם רשומים והשמות הקנוניים שלהם.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "רשימת כינויי מרחבי שם רשומים.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "רשימת כינויים דפים מיוחדים.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "רשימות מילות קסם וכינוייהן.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "החזרזת סטטיסטיקות אתר.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "החזרת מפת בינוויקי (אפשר שתהיה מסוננת, אפשר שתהיה מותאמת מקומית באמצעות <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "החזרת שרת מסד־נתונים עם שיהוי השכפול הגבוה ביותר.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "החזרת קבוצות משתמשים וההרשאות המשויכות.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "החזרת הספריות המותקנות בוויקי.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "החזרת ההרחבות המותקנות בוויקי.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים שאפשר להעלות.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "החזרת הזכויות (הרישיון) של הוויקי, אם זמין.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "החזרת מידע על ההגבלות (ההגנות) הזמינות.",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "החזרת השפות שמדיה־ויקי תומכת בהן (זה יכול להיות מותאם מקומים עם <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "החזרת רשימת כל העיצובים הזמינים (זה יכול להיות מותאם מקומית באמצעות <var>$1inlanguagecode</var>, אחרת זה יהיה בשפת התוכן).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "החזרת רשימת תגי הרחבת מפענח.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "החזרת hook־ים של הרחבות מפענח.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "החזרת כל ה־hook־ים המנויים (תוכן של <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "החזרת מזהי משתנים.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "החזרת רשימת הפרוטוקולים המותרים בקישורים חיצוניים.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "החזרת הערכים ההתחלתיים של העדפות משתמש.",
+       "apihelp-query+siteinfo-param-filteriw": "החזרה רק של עיולים מקומיים או רק של עיולים לא מקומיים ממפת הבינוויקי.",
+       "apihelp-query+siteinfo-param-showalldb": "רשימת כל שרתי מסד הנתונים, לא רק אלה שהכי מתעכבים.",
+       "apihelp-query+siteinfo-param-numberingroup": "רשימת מספרי משתמשים בקבוצות משתמשים.",
        "apihelp-query+siteinfo-param-inlanguagecode": "קוד שפה ששמות שפות מתורגמות (מאמץ טוב ביותר) ושמות עיצובים.",
        "apihelp-query+siteinfo-example-simple": "איזור מידע על האתר.",
+       "apihelp-query+siteinfo-example-interwiki": "אחזור תחיליות בינוויקי מקומיות.",
+       "apihelp-query+siteinfo-example-replag": "בדיקת שיהוי השכפול הנוכחי.",
+       "apihelp-query+stashimageinfo-description": "החזרת מידע על הקובץ עבור הקבצים המוסלקים.",
        "apihelp-query+stashimageinfo-param-filekey": "מפתח שמזהה העלאה קודמת שהונחה בצד באופן זמני.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "כינוי ל־$1filekey, לתאימות אחורה.",
+       "apihelp-query+stashimageinfo-example-simple": "החזרת מידע על קובץ מוסלק.",
+       "apihelp-query+stashimageinfo-example-params": "החזרת תמונות ממוזערות עבור שני קבצים מוסלקים.",
        "apihelp-query+tags-description": "רשימת תגי שינוי.",
+       "apihelp-query+tags-param-limit": "המספר המרבי של תגים לרשום.",
+       "apihelp-query+tags-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+tags-paramvalue-prop-name": "הוספת שם התג.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "הוספת הודעת המערכת עבור התג.",
+       "apihelp-query+tags-paramvalue-prop-description": "הוספת תיאור התג.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "הוספת מספר הגרסאות ועיולי היומן עם התג הזה.",
+       "apihelp-query+tags-paramvalue-prop-defined": "ציון האם התג מוגדר.",
+       "apihelp-query+tags-paramvalue-prop-source": "קבלת מקורות התג, שיכולים להיות <samp>extension</samp> עבור תגים שמגדירות הרחבות ו־<samp>manual</samp> עבור תגים שמשתמשים יכולים להחיל ידנית.",
+       "apihelp-query+tags-paramvalue-prop-active": "האם התג עדיין מוּחל.",
        "apihelp-query+tags-example-simple": "רשימת תגים זמינים.",
+       "apihelp-query+templates-description": "החזרת כל הדפים המוכללים בדפים הנתונים.",
+       "apihelp-query+templates-param-namespace": "הצגת תבניות רק במרחב השם הזה.",
        "apihelp-query+templates-param-limit": "כמה תבניות להחזיר.",
+       "apihelp-query+templates-param-templates": "לרשום רק את התבניות האלו. שימושי לבדיקה האם דף מסוים משתמש בתבנית מסוימת.",
        "apihelp-query+templates-param-dir": "באיזה כיוון לרשום.",
+       "apihelp-query+templates-example-simple": "קבלת התבניות המשמשות בדף <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-generator": "קבלת מידע על דפי התבנית שמשמשים ב־<kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-namespaces": "קבלת מידע במרחבי השם {{ns:user}} ו־{{ns:template}} שמוכללים בדף <kbd>Main Page</kbd>.",
+       "apihelp-query+tokens-description": "קבלת אסימונים לפעולות שמשנות נתונים.",
        "apihelp-query+tokens-param-type": "סוגי האסימונים לבקש.",
        "apihelp-query+tokens-example-simple": "אחזור אסימון csrf (בררת המחדל).",
        "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
+       "apihelp-query+transcludedin-description": "מציאת כל הדפים שמכלילים את הדפים הנתונים.",
+       "apihelp-query+transcludedin-param-prop": "אילו מאפיינים לקבל:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "מזהה הדף של כל דף.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "השם של כל דף.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "דגל אם הדף הוא הפניה.",
        "apihelp-query+transcludedin-param-namespace": "לכלול רק דפים במרחבי השם האלה.",
        "apihelp-query+transcludedin-param-limit": "כמה להחזיר.",
        "apihelp-query+transcludedin-param-show": "לחפש רק פריטים שמתאימים לאמות המידה הבאות:\n;redirect:להציג רק הפניות.\n;!redirect:לא להציג הפניות.",
+       "apihelp-query+transcludedin-example-simple": "קבלת רשימה של דפים שמכלילים את <kbd>Main Page</kbd>.",
+       "apihelp-query+transcludedin-example-generator": "קבלת מידע על הדפים שמכלילים את <kbd>Main Page</kbd>.",
        "apihelp-query+usercontribs-description": "קבלת כל העריכות של המשתמש.",
        "apihelp-query+usercontribs-param-limit": "המספר המרבי של התרומות להחזיר.",
        "apihelp-query+usercontribs-param-start": "באיזה חותם־הזמן להתחיל.",
        "apihelp-query+usercontribs-param-end": "באיזה חותם־הזמן לסיים",
        "apihelp-query+usercontribs-param-user": "עבור אילו משתמשים לאחזר תרומות.",
+       "apihelp-query+usercontribs-param-userprefix": "אחזור תרומות עבור כל המשתמשים שהשמות שלהם מתחילים בערך הזה. דורס את $1user.",
+       "apihelp-query+usercontribs-param-namespace": "לרשום רק תרומות במרחבי השם האלה.",
+       "apihelp-query+usercontribs-param-prop": "לכלול פריטי מידע נוספים:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "הוספת מזהה הדף ומזהה הגרסה.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "הוספת השם ומזהה מרחב השם של הדף.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "הוספת חותם־הזמן של העריכה.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "הוספת ההערה על העריכה.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "הוספת ההערה המפוענחת של העריכה.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "הוספת הגודל החדש של העריכה.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "הוספת ההפרש של העריכה אל מול ההורה שלה.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "הוספת הדגלים של העריכה.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "מתייג עריכות בדוקות.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "רשימת תגים עבור עריכות.",
+       "apihelp-query+usercontribs-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלה, למשל רק עריכות לא־משניות.\n\nאם מוגדר <kbd>$2show=patrolled</kbd> או <kbd>$2show=!patrolled</kbd>, גרסאות ישנות מ־<var dir=\"ltr\">[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>‏ ({{PLURAL:$1|שנייה אחת|$1 שניות}}) לא תוצגנה.",
        "apihelp-query+usercontribs-param-tag": "לרשום רק גרסאות עם התג הזה.",
        "apihelp-query+usercontribs-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
-       "apihelp-query+userinfo-param-prop": "אילו חלקי מידע לכלול:\n;blockinfo:מתייג אם המשתמש הנוכחי נחסם, על־ידי מי ומאיזו סיבה.\n;hasmsg:הוספת התג <samp>message</samp> אם למשתמש הנוכחי יש הודעות ממתינות.\n;groups:רשימת כל הקבוצות שהמשתמש שייך אליהן.\n;implicitgroups:רשימת כל הקבוצות שהמשתמש שייך אליהן באופן אוטומטי.\n;rights:רשימת כל ההרשאות שיש למשתמש הזה.\n;changeablegroups:רשימת הקבוצות שהמשתמש הנוכחי יכול להוסיף אליהן ולגרוע מהן.\n;options:רשימת כל ההעדפות שהמשתמש הנוכחי הגדיר.\n;preferencestoken:<span class=\"apihelp-deprecated\">מיושן.</span> קבלת אסימון לשינוי ההעדפות של המשתמש הנוכחי.\n;editcount:הוספת מניין העריכות של המשתמש הנוכחי.\n;ratelimits:רשימת כל מגבלות הקצב שחלות על המשתמש הנוכחי.\n;realname:הוספת השם האמתי של המשתמש.\n;email:הוספת כתובת הדוא\"ל ותאריך אימות כתובת הדוא\"ל.\n;acceptlang:מדפיס את כותרת <code>Accept-Language</code> ששלח הלקוח בתסדיר מובנה.\n;registrationdate:הוספת תאריך הרישום של המשתמש.\n;unreadcount:הוספת מניין הדפים שלא נקראו ברשימת המעקב של המשתמש (לכל היותר $1; מחזיר <samp>$2</samp> אם יש יותר).",
+       "apihelp-query+usercontribs-example-user": "הצגת התרומות של המשתמש <kbd>Example</kbd>.",
+       "apihelp-query+usercontribs-example-ipprefix": "הצגת תרומות מכל כתובות ה־IP שמתחילות ב־<kbd dir=\"ltr\">192.0.2.</kbd>.",
+       "apihelp-query+userinfo-description": "קבלת מידע על המשתמש הנוכחי.",
+       "apihelp-query+userinfo-param-prop": "אילו חלקי מידע לכלול:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "מתייג אם המשתמש הנוכחי נחסם, על־ידי מי ומאיזו סיבה.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "הוספת התג <samp>messages</samp> אם למשתמש הנוכחי יש הודעות ממתינות.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש שייך אליהן באופן אוטומטי.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש הזה.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "רשימת הקבוצות שהמשתמש הנוכחי יכול להוסיף אליהן ולגרוע מהן.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "רשימת כל ההעדפות שהמשתמש הנוכחי הגדיר.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">מיושן.</span> קבלת אסימון לשינוי ההעדפות של המשתמש הנוכחי.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש הנוכחי.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "רשימת כל מגבלות הקצב שחלות על המשתמש הנוכחי.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "הוספת השם האמתי של המשתמש.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "הוספת כתובת הדוא\"ל ותאריך אימות כתובת הדוא\"ל.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "מדפיס את כותרת <code>Accept-Language</code> ששלח הלקוח בתסדיר מובנה.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "הוספת תאריך הרישום של המשתמש.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "הוספת מניין הדפים שלא נקראו ברשימת המעקב של המשתמש (לכל היותר $1; מחזיר <samp>$2</samp> אם יש יותר).",
+       "apihelp-query+userinfo-example-simple": "קבלת מידע על המשתמש הנוכחי.",
+       "apihelp-query+userinfo-example-data": "קבלת מידע נוסף על המשתמש הנוכחי.",
+       "apihelp-query+users-description": "קבלת מידע על רשימת משתמשים.",
+       "apihelp-query+users-param-prop": "אילו חלקי מידע לקבל:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "מתייג אם המשתמש חסום, על־ידי מי, ומאיזו סיבה.",
+       "apihelp-query+users-paramvalue-prop-groups": "רשימת כל הקבוצות שהמשתמש שייך אליהן.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "רשימת כל הקבוצות שהמשתמש חבר בהן אוטומטית.",
+       "apihelp-query+users-paramvalue-prop-rights": "רשימת כל ההרשאות שיש למשתמש.",
+       "apihelp-query+users-paramvalue-prop-editcount": "הוספת מניין העריכות של המשתמש.",
+       "apihelp-query+users-paramvalue-prop-registration": "הוספת חותם־הזמן של רישום המשתמש.",
+       "apihelp-query+users-paramvalue-prop-emailable": "מתייג אם המשתמש יכול ורוצה לקבל דואר אלקטרוני דרך [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "מתייג את המגדר של המשתמש. מחזיר \"male\"‏, \"female\" או \"unknown\".",
+       "apihelp-query+users-param-users": "רשימת משתמשים שעליהם צריך לקבל מידע.",
+       "apihelp-query+users-param-token": "יש להשתמש ב־<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> במקום.",
+       "apihelp-query+users-example-simple": "החזרת מידע עבור המשתמש <kbd>Example</kbd>.",
+       "apihelp-query+watchlist-description": "קבלת שינויים אחרונים לדפים ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-param-allrev": "לכלול גרסאות מרובות של אותו הדף בתוך מסגרת הזמן הנתונה.",
        "apihelp-query+watchlist-param-start": "מאיזה חותם־זמן להתחיל למנות.",
        "apihelp-query+watchlist-param-end": "באיזה חותם זמן להפסיק לרשום.",
+       "apihelp-query+watchlist-param-namespace": "סינון שינויים רק למרחבי השם שניתנו.",
        "apihelp-query+watchlist-param-user": "לרשום רק שינויים של המשתמש הזה.",
        "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user",
        "apihelp-query+watchlist-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
+       "apihelp-query+watchlist-param-prop": "אילו מאפיינים נוספים לקבל:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "הוספת מזהי גסה ומזהי דף.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "הוספת שם הדף.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "הוספת דגלים לעריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "הוספת המשתמש שעשה את העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "הוספת מזהה המשתמש של מי שעשה את העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "הוספת ההערה של העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "הוספת ההערכה המפוענחת של העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "הוספת חותם־זמן של העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "תיוג עריכות שנבדקו.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "הוספת האורך החדש והישן של הדף.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "הוספת חותם־זמן של ההודעה האחרונה למשתמש על העריכה.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "הוספת מידע מהיומן איפה שמתאים.",
+       "apihelp-query+watchlist-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלו. למשל, כדי לראות רק עריכות משניות שעשו משתמשים שנכנסו לחשבון, יש להגדיר $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "אולי סוגי שינויים להציג:\n;edit:עריכות דף רגילות.\n;external:שינויים חיצוניים.\n;new:יצירות דף.\n;log:עיולי יומן.",
+       "apihelp-query+watchlist-param-owner": "משמש יחד עם $1token לגישה לרשימת מעקב של משתמש אחר.",
+       "apihelp-query+watchlist-param-token": "אסימון אבטחה (זמין ב־[[Special:Preferences#mw-prefsection-watchlist|העדפות]]) שמאפשר לגשת לרשימת מעקב של משתמש אחר.",
+       "apihelp-query+watchlist-example-simple": "לרשום את הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-example-props": "אחזור מידע נוסף על הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-example-allrev": "אחזור מידע על כל השינויים האחרונים לדפים ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-example-generator": "אחזור מידע על הדף עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-example-generator-rev": "אחזור מידע על הגרסה עבור דפים שהשתנו לאחרונה ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlist-example-wlowner": "לרשום את הגרסה האחרונה עבור דפים שהשתנו לאחרונה ברשימת המעקב של משתמש <kbd>Example</kbd>.",
+       "apihelp-query+watchlistraw-description": "קבלת כל הדפים ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlistraw-param-namespace": "לרשום רק דפים במרחב השם הנתון.",
        "apihelp-query+watchlistraw-param-limit": "כמה תוצאות סך הכול להחזיר בכל בקשה.",
-       "apihelp-query+watchlistraw-param-fromtitle": "מאיזו כותרת (עם תחילית מרחב שם) להתחיל את המנייה.",
+       "apihelp-query+watchlistraw-param-prop": "אילו מאפיינים נוספים לקבל:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "הוספת חותם־הזמן של ההודעה האחרונה למשתמש על העריכה.",
+       "apihelp-query+watchlistraw-param-show": "לרשום רק פריטים שעונים על אמות המידה האלו.",
+       "apihelp-query+watchlistraw-param-owner": "משמש יחד עם $1token לגישה לרשימת מעקב של משתמש אחר.",
+       "apihelp-query+watchlistraw-param-token": "אסימון אבטחה (זמין ב־[[Special:Preferences#mw-prefsection-watchlist|העדפות]]) שמאפשר לגשת לרשימת מעקב של משתמש אחר.",
+       "apihelp-query+watchlistraw-param-fromtitle": "מאיזו כותרת (עם תחילית מרחב שם) להתחיל למנות.",
        "apihelp-query+watchlistraw-param-totitle": "באיזו כותרת (עם תחילית מרחב שם) להפסיק למנות.",
+       "apihelp-query+watchlistraw-example-simple": "לרשום דפים ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-query+watchlistraw-example-generator": "אחזור מידע על הדפים עבור דפים ברשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-revisiondelete-description": "מחיקה ושחזור ממחיקה של גרסאות.",
+       "apihelp-revisiondelete-param-type": "סוג מחיקת הגרסה שמתבצע.",
+       "apihelp-revisiondelete-param-target": "שם הדף למחיקת גרסה, אם זה נחוץ לסוג.",
+       "apihelp-revisiondelete-param-ids": "מזהים של הגרסה שתימחק.",
+       "apihelp-revisiondelete-param-hide": "מה להסתיר עבור כל גרסה.",
+       "apihelp-revisiondelete-param-show": "הסתרה של מה לבטל עבור כל גרסה.",
+       "apihelp-revisiondelete-param-suppress": "האם להעלים נתונים ממפעילים ומאחרים.",
+       "apihelp-revisiondelete-param-reason": "סיבה למחיקה או לשחזור ממחיקה.",
+       "apihelp-revisiondelete-example-revision": "הסתרת התוכן של הגרסה <kbd>12345</kbd> בדף <kbd>Main Page</kbd>.",
+       "apihelp-revisiondelete-example-log": "הסתרת כל הנתוהים על עיול היומן <kbd>67890</kbd> עם הסיבה <kbd>BLP violation</kbd>.",
+       "apihelp-rollback-description": "ביטול העריכה האחרונה לדף.\n\nאם המשמש האחרון שערך את הדף עשה מספר עריכות זו אחר זו, הן תשוחזרנה.",
+       "apihelp-rollback-param-title": "שם הדף לשחזור. לא יכול לשמש יחד עם <var>$1pageid</var>.",
+       "apihelp-rollback-param-pageid": "מזהה הדף לשחזור. לא יכול לשמש יחד עם <var>$1title</var>.",
+       "apihelp-rollback-param-user": "שם המשתמשים שהעריכות שלו תשוחזרנה.",
+       "apihelp-rollback-param-summary": "תקציר עריכה מותאם. אם ריק, ישמש תקציר לפי בררת מחדל.",
+       "apihelp-rollback-param-markbot": "לסמן את העריכות ששוחזרו ואת השחזור בתור עריכות בוט.",
        "apihelp-rollback-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+       "apihelp-rollback-example-simple": "שחזור העריכות האחרונות לדף <kbd>Main Page</kbd> על־ידי המשתמש <kbd>Example</kbd>.",
+       "apihelp-rollback-example-summary": "שחזור העריכות האחרונות לדף <kbd>Main Page</kbd> מאת משתמש ה־IP‏ <kbd>192.0.2.5</kbd> עם התקציר <kbd>Reverting vandalism</kbd> וסימון של העריכות האלה ושל השחזור בתור עריכות בוט.",
+       "apihelp-rsd-description": "יצוא סכמת RSD‏ (Really Simple Discovery).",
+       "apihelp-rsd-example-simple": "יצוא סכמת ה־RSD.",
+       "apihelp-setnotificationtimestamp-description": "עדכון חותם־הזמן של ההודעה עבור דפים במעקב.\n\nזה משפיע על הדגשת הדפים שהשתנו ברשימת המעקב ובהיסטוריה, ושליחת דואר אלקטרוני כאשר ההעדפה \"{{int:tog-enotifwatchlistpages}}\" מופעלת.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "לעבוד על כל הדפים שבמעקב.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "חותם־הזמן להגדרת חותם־זמן של הודעה.",
+       "apihelp-setnotificationtimestamp-param-torevid": "לאיזו גרסה להגדיר את חותם הזמן (רק דף אחד).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "הגרסה שחותם־הזמן של ההודעה יוגדר בתור חדש ממנה (רק דף אחד).",
+       "apihelp-setnotificationtimestamp-example-all": "אתחול מצב ההודעה עבור כל רשימת המעקב.",
+       "apihelp-setnotificationtimestamp-example-page": "אתחול מצב ההודעה עבור <kbd>Main Page</kbd>.",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "הגדרת חותם־הזמן להודעה ל־<kbd>Main page</kbd> כך שכל העריכות מאז 1 בינואר 2012 מוגדרות בתור כאלה שלא נצפו.",
+       "apihelp-setnotificationtimestamp-example-allpages": "אתחול מצב ההודעה עבור דפים במרחב השם <kbd>{{ns:user}}</kbd>.",
+       "apihelp-tag-description": "הוספת או הסרה של תגים מגרסאות בודדות או עיולי יומן בודדים.",
+       "apihelp-tag-param-rcid": "מזהה שינוי אחרון אחד או יותר שתג יתווסף אליו או יוסר ממנו.",
+       "apihelp-tag-param-revid": "מזהה גרסה אחד או יותר שתג יתווסף אליה או יוסר ממנה.",
+       "apihelp-tag-param-logid": "מזהה עיול יומן אחד או יותר שתג יתווסף אליו או יוסר ממנו.",
+       "apihelp-tag-param-add": "התגים להוספה. אפשר להוסיף רק תגים קיימים.",
+       "apihelp-tag-param-remove": "תגים להסרה. רק תגים שהוגדרו ידנית או שאינם מוגדרים כלל יכולים להיות מוסרים.",
        "apihelp-tag-param-reason": "סיבה לשינוי.",
+       "apihelp-tag-example-rev": "הוספת התג <kbd>vandalism</kbd> לגרסה עם המזהה 123 בלי לציין סיבה",
+       "apihelp-tag-example-log": "הסרת התג <kbd>spam</kbd> מעיול עם המזהה 123 עם הסיבה <kbd>Wrongly applied</kbd>",
        "apihelp-tokens-description": "קבלת אסימונים לפעולות שמשנות נתונים.\n\nהיחידה הזאת הוכרזה בתור מיושנת לטובת [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "סוגי האסימונים לבקש.",
+       "apihelp-tokens-example-edit": "אחזור אסימון עריכה (בררת המחדל).",
+       "apihelp-tokens-example-emailmove": "אחזור אסימון דוא\"ל ואסימון העברה.",
+       "apihelp-unblock-description": "שחרור משתמש מחסימה.",
+       "apihelp-unblock-param-id": "מזהה החסימה לשחרור (מתקבל דרך <kbd>list=blocks</kbd>). לא יכול לשמש יחד עם <var>$1user</var>.",
+       "apihelp-unblock-param-user": "שם משתמש, כתובת IP או טווח IP לחסימה. לא יכול לשמש יחד עם <var>$1id</var>",
+       "apihelp-unblock-param-reason": "סיבה להסרת חסימה.",
+       "apihelp-unblock-example-id": "לשחרר את החסימה עם מזהה #<kbd>105</kbd>.",
+       "apihelp-unblock-example-user": "לשחרר את החסימה של המשתמש <kbd>Bob</kbd> עם הסיבה <kbd>Sorry Bob</kbd>.",
+       "apihelp-undelete-description": "שחזור גרסאות של דף מחוק.\n\nאפשר לאחזר רשימת גרסאות מחוקות (כולל חותמי־זמן) דרך [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], ואפשר לאחזר רשימת מזהי קבצים מחוקים דרך [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "שם הדף לשחזור ממחיקה.",
        "apihelp-undelete-param-reason": "סיבה לשחזור.",
+       "apihelp-undelete-param-timestamps": "חותמי־זמן של הגרסה לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
+       "apihelp-undelete-param-fileids": "מזהי גרסאות הקובץ לשחזור. אם גם <var>$1timestamps</var> וגם <var>$1fileids</var> ריקים, הכול ישוחזר.",
        "apihelp-undelete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
+       "apihelp-undelete-example-page": "שחזור ממחיקה של הדף <kbd>Main Page</kbd>.",
+       "apihelp-undelete-example-revisions": "שחזור שתי גרסאות של הדף <kbd>Main Page</kbd>.",
+       "apihelp-upload-description": "העלאת קובץ, או קבלת מצב ההעלאות הממתינות.\n\nיש מספר שיטות:\n* להעלות את הקובץ ישירות, באמצעות הפרמטר <var>$1file</var>.\n* להעלות את הקובץ בחלקים, באמצעות הפרמטרים <var>$1filesize</var>‏, <var>$1chunk</var> ו־<var>$1offset</var>.\n* לגרום לשרת מדיה־ויקי לאחזר את הקובץ מ־URL באמצעות הפרמטר <var>$1url</var>.\n* להשלים העלאה קודמת שנכשלה בשל אזהרות באמצעות הפרמטר <var>$1filekey</var>.\nלתשומך לבך, יש לעשות את HTTP POST בתור העלאת קובץ (כלומר באמצעות <code>multipart/form-data</code>) בעת שליחת ה־<var>$1file</var>.",
        "apihelp-upload-param-filename": "שם קובץ היעד.",
+       "apihelp-upload-param-comment": "הערת העלאה. משמש גם בתור טקסט הדף ההתחלתי עבור קבצים חדשים אם <var>$1text</var> אינו מצוין.",
+       "apihelp-upload-param-text": "טקסט הדף ההתחלתי לקבצים חדשים.",
+       "apihelp-upload-param-watch": "לעקוב אחרי הדף.",
        "apihelp-upload-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-upload-param-ignorewarnings": "להתעלם מכל האזהרות.",
+       "apihelp-upload-param-file": "תוכן הקובץ.",
+       "apihelp-upload-param-url": "URL לאחזור הקובץ.",
        "apihelp-upload-param-filekey": "מפתח שמזהה העלאה קודמת שהונחה בצד באופן זמני.",
+       "apihelp-upload-param-sessionkey": "אותו דבר כמו $1filekey, מושאר לצור תאימות אחורה.",
+       "apihelp-upload-param-stash": "אם זה מוגדר, השרת יסליק את הקובץ זמנית במקום להוסיף אותו למאגר.",
+       "apihelp-upload-param-filesize": "גודל הקובץ של כל ההעלאה.",
+       "apihelp-upload-param-offset": "היסט החתיכה בבתים.",
+       "apihelp-upload-param-chunk": "תוכן החתיכה.",
+       "apihelp-upload-param-async": "להפוך פעולות קבצים גדולות לאסינכרוניות כשאפשר.",
+       "apihelp-upload-param-asyncdownload": "להפוך אחזור URL לאסינכרוני.",
+       "apihelp-upload-param-leavemessage": "אם משמש asyncdownload, להשאיר הודעה על דף שיחת משתמש אם זה מסתיים.",
+       "apihelp-upload-param-statuskey": "לאחזר את מצב העלאת הקובץ עבור מפתח הקובץ הזה (העלאה באמצעות URL).",
+       "apihelp-upload-param-checkstatus": "לאחזר רק מצב העלאה עבור מפתח הקובץ שניתן.",
+       "apihelp-upload-example-url": "להעלות מ־URL.",
+       "apihelp-upload-example-filekey": "להשלים העלאה שנכשלה בשל אזהרות.",
+       "apihelp-userrights-description": "שינוי חברות בקבוצות של המשתמש.",
        "apihelp-userrights-param-user": "שם משתמש.",
+       "apihelp-userrights-param-userid": "מזהה משתמש.",
+       "apihelp-userrights-param-add": "הוספת המשתמש לקבוצות האלו.",
+       "apihelp-userrights-param-remove": "הסרת משתמש מהקבוצות האלו.",
        "apihelp-userrights-param-reason": "סיבה לשינוי.",
+       "apihelp-userrights-example-user": "הוספת המשתמש <kbd>FooBot</kbd> לקבוצה <kbd>bot</kbd> והסרתו מהקבוצות <kbd>sysop</kbd> ו־<kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "הוספת המשתמש עם המזהה <kbd>123</kbd> לקבוצה <kbd>bot</kbd> והסרתו מהקבוצות <kbd>sysop</kbd> ו־<kbd>bureaucrat</kbd>.",
+       "apihelp-watch-description": "להוסיף דפים לרשימת המעקב של המשתמש הנוכחי או הסרתם ממנה.",
+       "apihelp-watch-param-title": "הדף להוסיף לרשימת המעקב או להסיר ממנה. יש להשתמש במקום זאת ב־<var>$1titles</var>.",
+       "apihelp-watch-param-unwatch": "אם זה מוגדר, הדף יהיה לא במעקב במקום להיות במעקב.",
+       "apihelp-watch-example-watch": "לעקוב אחרי הדף <kbd>Main Page</kbd>.",
+       "apihelp-watch-example-unwatch": "להפסיק את המעקב אחרי הדף <kbd>Main Page</kbd>.",
+       "apihelp-watch-example-generator": "לעקוב אחרי הדפים הראשונים במרחב הראשי.",
        "apihelp-format-example-generic": "להחזיר את תוצאות השאילתה בתסדיר $1.",
        "apihelp-dbg-description": "לפלוט נתונים בתסדיר <code dir=\"ltr\">var_export()</code> של PHP.",
        "apihelp-dbgfm-description": "לפלוט את הנתונים בתסדיר <code dir=\"ltr\">var_export()</code> של PHP (עם הדפסה יפה ב־HTML).",
        "apihelp-json-description": "לפלוט נתונים בתסדיר JSON.",
+       "apihelp-json-param-callback": "אם זה צוין, עוטף את הפלט לתוך קריאת פונקציה נתונה. למען הבטיחות, כל הנתונים הייחודיים למשתמש יוגבלו.",
        "apihelp-json-param-utf8": "אם זה צוין, רוב התווים שאינם ASCII (אבל לא כולם) יקודדו בתור UTF-8 במקום להתחלף בסדרות חילוף הקסדצימליות. זאת בררת המחדל אם הערך של <var>formatversion</var> הוא לא <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "אם זה צוין, לקודד את כל מה שאינו ASCII בסדרות חילוף הקסדצימליות. זאת בררת המחדל כש־<var>formatversion</var> היא <kbd>1</kbd>.",
        "apihelp-json-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני ניסיוני. הפרטים יכולים להשתנות!\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
        "apihelp-txtfm-description": "לפלוט את הנתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP (עם הדפסה יפה ב־HTML).",
        "apihelp-xml-description": "לפלוט נתונים בתסדיר XML.",
        "apihelp-xml-param-xslt": "אם צוין, יש להוסיף את שם הדף כגיליון עיצוב XSL. על הערך להיות כותרת ב {{ns:mediawiki}} במרחב שם המשתמש, המסתיים ב-  <code>.xsl</code>.",
+       "apihelp-xml-param-includexmlnamespace": "אם זה צוין, מוסיף מרחב שם של XML.",
        "apihelp-xmlfm-description": "לפלוט נתונים בתסדיר XML (עם הדפסה יפה ב־HTML).",
        "apihelp-yaml-description": "לפלוט את הנתונים בתסדיר YAML.",
        "apihelp-yamlfm-description": "לפלוט נתונים בתסדיר YAML (עם הדפסה יפה ב־HTML).",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
        "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+       "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
        "api-orm-param-props": "באילו שדות לעשות שאילתה.",
        "api-orm-param-limit": "מספר מרבי של שורות להחזיר.",
        "api-pageset-param-titles": "רשימת כותרות.",
-       "api-pageset-param-pageids": "רש×\99×\9eת ×\9e×\96×\94×\99 ×\93×£ ×\9c×¢×\95×\91ד עליהם.",
+       "api-pageset-param-pageids": "רש×\99×\9eת ×\9e×\96×\94×\99 ×\93×£ ×\9c×¢×\91×\95ד עליהם.",
        "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
        "api-pageset-param-generator": "קבלת רשימת דפים לעבוד עליהם על־ידי הרצת יחידת ה־query שצוינה.\n\n<strong>לתשומת לבך:</strong> לשמות בפרמטר generator צריכה להיות התחילית \"g\", ר' דוגמאות.",
-       "api-pageset-param-redirects-generator": "פתרון אוטומטי של הפניות ב־<var>$1titles</var>, ב־<var>$1pageids</var>, וב־<var>$1revids</var>, ודפים שמחזיר <var>$1generator</var>.",
+       "api-pageset-param-redirects-generator": "פתר×\95×\9f ×\90×\95×\98×\95×\9e×\98×\99 ×©×\9c ×\94פנ×\99×\95ת ×\91Ö¾<var>$1titles</var>, ×\91Ö¾<var>$1pageids</var>, ×\95×\91Ö¾<var>$1revids</var>, ×\95×\91×\93פ×\99×\9d ×©×\9e×\97×\96×\99ר <var>$1generator</var>.",
        "api-pageset-param-redirects-nogenerator": "פתרון אוטומטי של הפניות ב־<var>$1titles</var>, ב־<var>$1pageids</var> וב־<var>$1pageids</var>.",
-       "api-pageset-param-converttitles": "המרת כותרות לסוגי כתב אחרים אם זה נחוץ. זה עובד רק אם שפת הכותרת של הוויקי תומכת בהמרת סוגי כתב. השפות שתמכות בהמרת סוגי כתב הן $1.",
+       "api-pageset-param-converttitles": "×\94×\9eרת ×\9b×\95תר×\95ת ×\9cס×\95×\92×\99 ×\9bת×\91 ×\90×\97ר×\99×\9d ×\90×\9d ×\96×\94 × ×\97×\95×¥. ×\96×\94 ×¢×\95×\91×\93 ×¨×§ ×\90×\9d ×©×¤×ª ×\94×\9b×\95תרת ×©×\9c ×\94×\95×\95×\99ק×\99 ×ª×\95×\9e×\9bת ×\91×\94×\9eרת ×¡×\95×\92×\99 ×\9bת×\91. ×\94שפ×\95ת ×©×ª×\95×\9e×\9b×\95ת ×\91×\94×\9eרת ×¡×\95×\92×\99 ×\9bת×\91 ×\94×\9f $1.",
        "api-help-title": "עזרה של MediaWiki API",
        "api-help-lead": "זהו דף תיעוד של API שנוצר באופן אוטומטי.\n\nתיעוד ודוגמאות: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "יחידה ראשית",
        "api-help-param-required": "פרמטר זה נדרש.",
        "api-help-datatypes-header": "סוגי נתונים",
        "api-help-datatypes": "חלק מסוגי הפרמטרים בבקשות API דורשים הסבר נוסף:\n;בוליאני (boolean)\n:פרמטרים בוליאניים עובדים כמו תיבות סימון של HTML: אם הפרמטר צוין, בלי קשר לערך שלו, הוא אמת (true). בשביל ערך שקר (false), יש להשמיט את הפרמטר לגמרי.\n;חותם־זמן (timestamp)\n:אפשר לכתוב חותמי־זמן במספר תסדירים. תאריך ושעה לפי ISO 8601 הוא הדבר המומלת. כל הזמנים מצוינים ב־ UTC, לא תהיה השפעה לשום אזור זמן שיצוין.\n:* תאריך ושעה לפי ISO 8601‏, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (לא חובה לכתוב פיסוק ו־<kbd>Z</kbd>)\n:* תאריך ושעה לפי ISO 8601 עם חלקי שנייה (שלא תהיה להם שום השפעה), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (לא חובה לכתוב קווים מפרידים, נקודתיים ו־<kbd>Z</kbd>)\n:* תסדיר MediaWiki‏, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* תסדיר מספרי כללי, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (לאזור זמן אופציונלי של <kbd>GMT</kbd>‏, <kbd dir=\"ltr\">+<var>##</var></kbd>, או <kbd dir=\"ltr\">-<var>##</var></kbd> אין השפעה)\n:* תסדיר EXIF‏, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 2822 (אפשר להשמיט את אזור הזמן), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 850 (אפשר להשמיט את אזור הזמן), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר C ctime‏, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* שניות מאז 1970-01-01T00:00:00Z בתור מספר שלך בין 1 ל־13 (לא כולל <kbd>0</kbd>)\n:* המחרוזת <kbd>now</kbd>",
+       "api-help-param-type-limit": "סוג: מספר שלם או <kbd>max</kbd>",
        "api-help-param-type-integer": "סוג: {{PLURAL:$1|1=מספר שלם|2=רשימת מספרים שלמים}}",
        "api-help-param-type-boolean": "סוג: בוליאני ([[Special:ApiHelp/main#main/datatypes|פרטים]])",
        "api-help-param-type-timestamp": "סוג: {{PLURAL:$1|חותם־זמן|רשימת חותמי־זמן}} ([[Special:ApiHelp/main#main/datatypes|תסדירים מורשים]])",
-       "api-help-param-list": "{{PLURAL:$1|1=ערך אחד|2=ערכים (מופרדים באמצעות \"<kbd>{{!}}</kbd>\")}}: $2",
+       "api-help-param-type-user": "סוג: {{PLURAL:$1|1=שם משתמש|2=רשימת שמות משתמשים}}",
+       "api-help-param-list": "{{PLURAL:$1|1=אחד מהערכים הבאים|2=ערכים (מופרדים באמצעות \"<kbd>{{!}}</kbd>\")}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=חייב להיות ריק|יכול להיות ריק או $2}}",
        "api-help-param-limit": "מספר הפרמטרים לא יכול להיות גדול מ־$1.",
        "api-help-param-limit2": "המספר המרבי המותר הוא $1 (עבור בוטים – $2).",
        "api-help-param-multi-max": "מספר הערכים המרבי הוא {{PLURAL:$1|$1}} (עבור בוטים – {{PLURAL:$2|$2}}).",
        "api-help-param-default": "ברירת מחדל: $1",
        "api-help-param-default-empty": "ברירת מחדל: <span class=\"apihelp-empty\">(ריק)</span>",
-       "api-help-param-token": "אסימון \"$1\" אוחזר מ־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token": "×\90ס×\99×\9e×\95×\9f \"$1\" ×©×\90×\95×\97×\96ר ×\9eÖ¾[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "לשם תאימות, גם האסימון שמשמש בממשק דפדפן מתקבל.",
        "api-help-param-disabled-in-miser-mode": "כבוי בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]].",
        "api-help-param-limited-in-miser-mode": "<strong>לתשומת לבך:</strong> בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]], שימוש בזה יכול להוביל לפחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
        "api-help-permissions-granted-to": "{{PLURAL:$1|הוענק ל|הוענקו ל}}: $2",
        "api-help-right-apihighlimits": "להשתמש במגבלות גבוהות יותר בשאילתות API (שאילתות אטיות: $1; שאילתות מהירות: $2). המגבלות לשאילתות אטיות חלות גם על פרמטרים מרובי־ערכים.",
        "api-credits-header": "קרדיטים",
-       "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://bugzilla.wikimedia.org."
+       "api-credits": "מפתחי ה־API:\n* רואן קטאו (מפתח מוביל 2007–2009)\n* ויקטור וסילייב\n* בריאן טונג מין\n* סאם ריד\n* יורי אסטרחן (יוצר, מפתח מוביל מספטמבר 2006 עד ספטמבר 2007)\n* בראד יורש (מפתח מוביל מאז 2013)\n\nאנא שלחו הערות, הצעות ושאלות לכתובת mediawiki-api@lists.wikimedia.org או כתבו דיווח באג באתר https://phabricator.wikimedia.org."
 }
diff --git a/includes/api/i18n/ht.json b/includes/api/i18n/ht.json
new file mode 100644 (file)
index 0000000..dee39e1
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Bfpage"
+               ]
+       },
+       "apihelp-query-param-rawcontinue": "Bay tounen done anvan tout koreksyon <samp>query-continue</samp> pou kontinyasyon"
+}
index e36d585..7e6ecc4 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Csega",
                        "Dorgan",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "ViDam"
                ]
        },
        "apihelp-main-param-action": "Milyen műveletet hajtson végre.",
@@ -18,7 +19,7 @@
        "apihelp-block-param-nocreate": "Új regisztráció megakadályozása",
        "apihelp-createaccount-param-name": "Felhasználónév.",
        "apihelp-delete-description": "Lap törlése.",
-       "apihelp-delete-example-simple": "Kezdőlap törlése.",
+       "apihelp-delete-example-simple": "<kbd>Kezdőlap</kbd> törlése.",
        "apihelp-edit-example-edit": "Lap szerkesztése",
        "apihelp-expandtemplates-param-title": "Lap címe.",
        "apihelp-userrights-param-userid": "Felhasználói azonosító."
index de9d65f..5201072 100644 (file)
@@ -23,6 +23,9 @@
        "apihelp-block-param-nocreate": "Impedir le creation de contos.",
        "apihelp-block-param-autoblock": "Blocar automaticamente le adresse IP usate le plus recentemente, e omne IPs successive desde le quales ille/-a tenta facer modificationes.",
        "apihelp-block-param-noemail": "Impedir que le usator invia e-mail per le wiki. (Require le derecto \"blockemail\").",
+       "apihelp-checktoken-param-type": "Typo de indicio a testar.",
+       "apihelp-checktoken-param-token": "Indicio a testar.",
+       "apihelp-createaccount-param-name": "Nomine de usator.",
        "apihelp-query+revisions-example-first5-not-localhost": "Obtener le prime 5 versiones del \"Pagina principal\" que non ha essite facite per le usator anonyme \"127.0.0.1\"",
        "api-credits": "Programmatores del API:\n* Roan Kattouw (programmator dirigente Sept. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (creator, programmator dirigente Sept. 2006–Sept. 2007)\n* Brad Jorsch (programmator dirigente 2013–presente)\n\nInvia tu commentos, suggestiones e questiones a mediawiki-api@lists.wikimedia.org\no insere un reportage de bug a https://phabricator.wikimedia.org/."
 }
index bd168cb..5c4c55e 100644 (file)
@@ -5,7 +5,9 @@
                        "Nivit",
                        "Toadino2",
                        "Gianfranco",
-                       "Alexmar983"
+                       "Alexmar983",
+                       "Ricordisamoa",
+                       "Valepert"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione (in inglese)]]\n* [[mw:API:FAQ|FAQ (in inglese)]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> Tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma l'API è ancora in fase d'attivo sviluppo, e potrebbe cambiare in qualsiasi momenento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite all'API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e sia al valore dell'intestazione sia al codice d'errore verrà impostato lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti (in inglese)]].",
@@ -13,6 +15,7 @@
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
+       "apihelp-main-param-servedby": "Includi nei risultati il nome dell'host che ha servito la richiesta.",
        "apihelp-main-param-curtimestamp": "Includere il timestamp corrente nel risultato.",
        "apihelp-block-description": "Blocca  un utente.",
        "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare.",
@@ -60,6 +63,7 @@
        "apihelp-disabled-description": "Questo modulo è stato disabilitato.",
        "apihelp-edit-description": "Crea e modifica pagine.",
        "apihelp-edit-param-title": "Titolo della pagina da modificare. Non può essere usato insieme con <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "ID di pagina della pagina da modificare. Non può essere usato insieme con <var>$1title</var>.",
        "apihelp-edit-param-sectiontitle": "Il titolo per una nuova sezione.",
        "apihelp-edit-param-text": "Contenuto della pagina.",
        "apihelp-edit-param-summary": "Oggetto della modifica. Anche titolo della sezione se $1sezione=new e $1sectiontitle non è impostato.",
@@ -71,6 +75,7 @@
        "apihelp-edit-param-nocreate": "Genera un errore se la pagina non esiste.",
        "apihelp-edit-param-watch": "Aggiungi la pagina agli Osservati Speciali dell'utente corrente.",
        "apihelp-edit-param-unwatch": "Rimuovi la pagina dagli Osservati Speciali dell'utente corrente.",
+       "apihelp-edit-example-edit": "Modifica una pagina.",
        "apihelp-emailuser-description": "Manda un'e-mail ad un utente.",
        "apihelp-emailuser-param-ccme": "Mandami una copia di questa mail.",
        "apihelp-expandtemplates-description": "Espandi tutti i template nel wikitesto.",
        "apihelp-expandtemplates-param-prop": "Quale informazione ottenere.\n\nNota che se non è selezionato alcun valore, il risultato conterrà il codice wiki, ma l'output sarà in un formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Il wikitext espanso.",
        "apihelp-expandtemplates-paramvalue-prop-volatile": "Se l'output sia volatile e non debba essere riutilizzato altrove all'interno della pagina.",
+       "apihelp-feedcontributions-param-year": "Dall'anno (e precedenti).",
+       "apihelp-feedcontributions-param-month": "Dal mese (e precedenti).",
+       "apihelp-feedcontributions-param-deletedonly": "Mostra solo i contribuiti cancellati.",
+       "apihelp-feedcontributions-param-toponly": "Mostra solo i contributi che sono le ultime versioni per la pagina.",
+       "apihelp-feedcontributions-param-newonly": "Visualizza solo le modifiche che sono creazioni di pagina.",
+       "apihelp-feedrecentchanges-param-hideminor": "Nascondi le modifiche minori.",
+       "apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
+       "apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
+       "apihelp-feedrecentchanges-param-hideliu": "Nascondi le modifiche apportate dagli utenti registrati.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Mostra solo le modifiche alle pagine collegate a quella specificata.",
+       "apihelp-login-param-name": "Nome utente.",
+       "apihelp-login-param-password": "Password.",
+       "apihelp-move-description": "Sposta una pagina.",
+       "apihelp-move-param-ignorewarnings": "Ignora i messaggi di avvertimento del sistema.",
+       "apihelp-options-example-reset": "Reimposta tutte le preferenze.",
+       "apihelp-query+blocks-example-simple": "Elenca i blocchi.",
        "apihelp-query+recentchanges-example-simple": "Elenco modifiche recenti.",
+       "apihelp-unblock-description": "Sblocca un utente",
+       "apihelp-undelete-param-title": "Titolo della pagina da ripristinare.",
        "apihelp-upload-example-url": "Carica da un URL.",
+       "api-help-main-header": "Modulo principale",
+       "api-help-license": "Licenza: [[$1|$2]]",
+       "api-help-license-unknown": "Licenza: <span class=\"apihelp-unknown\">sconosciuta</span>",
        "api-help-parameters": "{{PLURAL:$1|Parametro|Parametri}}:",
        "api-help-param-deprecated": "Deprecato.",
        "api-help-param-required": "Questo parametro è obbligatorio.",
+       "api-help-param-multi-max": "Il numero massimo di valori è {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} per i bot).",
        "api-help-param-default": "Predefinito: $1",
        "api-help-param-default-empty": "Predefinito: <span class=\"apihelp-empty\">(vuoto)</span>",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
index a286056..bb403c6 100644 (file)
@@ -85,6 +85,7 @@
        "apihelp-edit-param-appendtext": "このテキストをページの末尾に追加する。$1textを上書きします。\n\n新しい節を追加するにはこのパラメータではなく $1section=newを使用してください。",
        "apihelp-edit-param-undo": "この版を取り消します。$1text, $1prependtext および $1appendtext をオーバーライドします。",
        "apihelp-edit-param-undoafter": "$1undo からこの版までのすべての版を取り消します。設定しない場合、ひとつの版のみ取り消されます。",
+       "apihelp-edit-param-redirect": "自動的にリダイレクトを解決します。",
        "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
        "apihelp-edit-example-edit": "ページを編集",
        "apihelp-edit-example-prepend": "<kbd>_&#95;NOTOC_&#95;</kbd> をページの先頭に挿入する。",
        "apihelp-paraminfo-description": "API モジュールに関する情報を取得します。",
        "apihelp-paraminfo-param-modules": "モジュールの名前のリスト (<var>action</var> および <var>format</var> パラメーターの値, または <kbd>main</kbd>). <kbd>+</kbd> を使用して下位モジュールを指定できます。",
        "apihelp-paraminfo-example-1": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, and <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> に関する情報を表示する。",
+       "apihelp-parse-param-disablepp": "<var>$1disablelimitreport</var> を代わりに使用してください。",
        "apihelp-parse-param-preview": "プレビューモードでのパース",
        "apihelp-parse-example-page": "ページをパース",
        "apihelp-parse-example-text": "ウィキテキストをパース",
        "apihelp-query+alldeletedrevisions-param-user": "この利用者による版のみを一覧表示する。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "この利用者による版を一覧表示しない。",
        "apihelp-query+alldeletedrevisions-param-namespace": "この名前空間に含まれるページのみを一覧表示します。",
-       "apihelp-query+alldeletedrevisions-param-generatetitles": "ã\82¸ã\82§ã\83\8dã\83¬ã\83¼ã\82¿ã\83¼ã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81\99ã\82\8bå ´å\90\88ã\80\81ç\89\88IDã\81§ã\81¯ã\81ªã\81\8fã\82¿ã\82¤ã\83\88ã\83«を生成します。",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "ã\82¸ã\82§ã\83\8dã\83¬ã\83¼ã\82¿ã\83¼ã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81\99ã\82\8bå ´å\90\88ã\80\81ç\89\88IDã\81§ã\81¯ã\81ªã\81\8fã\83\9aã\83¼ã\82¸å\90\8dを生成します。",
        "apihelp-query+alldeletedrevisions-example-user": "利用者 <kbd>Example</kbd> による削除された直近の50版を一覧表示する。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "標準名前空間にある削除された最初の50版を一覧表示する。",
        "apihelp-query+allfileusages-param-from": "列挙を開始するファイルのタイトル。",
        "apihelp-query+allimages-example-generator": "<kbd>T</kbd> で始まる4つのファイルに関する情報を表示する。",
        "apihelp-query+alllinks-description": "与えられた名前空間へのすべてのリンクを一覧表示します。",
        "apihelp-query+alllinks-param-from": "列挙を開始するリンクのタイトル。",
-       "apihelp-query+alllinks-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
+       "apihelp-query+alllinks-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83³ã\82¯ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
        "apihelp-query+alllinks-param-prefix": "この値で始まるすべてのリンクされたページを検索する。",
        "apihelp-query+alllinks-example-B": "<kbd>B</kbd> で始まるリンクされたページ (存在しないページも含む)を、リンク元のページIDとともに表示する。",
        "apihelp-query+allmessages-param-args": "メッセージ中に展開される引数。",
        "apihelp-query+allpages-example-B": "<kbd>B</kbd> で始まるページの一覧を表示する。",
        "apihelp-query+allpages-example-generator": "<kbd>T</kbd> で始まる4つのページに関する情報を表示する。",
        "apihelp-query+allpages-example-generator-revisions": "<kbd>Re</kbd> で始まる最初の非リダイレクトの2ページの内容を表示する。",
-       "apihelp-query+allredirects-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
-       "apihelp-query+allredirects-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\82¿ã\82¤ã\83\88ã\83«。",
+       "apihelp-query+allredirects-param-from": "å\88\97æ\8c\99ã\82\92é\96\8bå§\8bã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
+       "apihelp-query+allredirects-param-to": "å\88\97æ\8c\99ã\82\92çµ\82äº\86ã\81\99ã\82\8bã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\83\9aã\83¼ã\82¸å\90\8d。",
        "apihelp-query+alltransclusions-param-prefix": "この値で始まるすべてのトランスクルードされているページを検索する。",
        "apihelp-query+allusers-description": "すべての登録利用者を一覧表示します。",
        "apihelp-query+allusers-param-from": "列挙を開始する利用者名。",
        "apihelp-query+pageswithprop-description": "与えられたページプロパティが使用されているすべてのページを一覧表示します。",
        "apihelp-query+pageswithprop-param-limit": "返すページの最大数。",
        "apihelp-query+pageswithprop-example-simple": "<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code> を使用している最初の10ページを一覧表示する。",
-       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using <code>_&#95;NOTOC_&#95;</code> を使用している最初の10ページのページ情報を取得する。",
+       "apihelp-query+pageswithprop-example-generator": "<code>_&#95;NOTOC_&#95;</code> を使用している最初の10ページについての追加情報を取得する。",
        "apihelp-query+prefixsearch-description": "ページ名の先頭一致検索を行います。",
        "apihelp-query+prefixsearch-param-search": "検索文字列。",
        "apihelp-query+prefixsearch-param-namespace": "検索する名前空間。",
        "api-help-parameters": "{{PLURAL:$1|パラメーター}}:",
        "api-help-param-deprecated": "廃止予定です。",
        "api-help-param-required": "このパラメーターは必須です。",
-       "api-help-param-list": "{{PLURAL:$1|1=値 (いずれか1つ)|2=値 (<kbd>{{!}}</kbd>で区切る)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=値 (次の値のいずれか1つ)|2=値 (<kbd>{{!}}</kbd>で区切る)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=空欄にしてください|空欄にするか、または $2}}",
        "api-help-param-integer-min": "{{PLURAL:$1|値}}は $2 以上にしてください。",
        "api-help-param-integer-max": "{{PLURAL:$1|値}}は $3 以下にしてください。",
index 3f841ac..ab018c9 100644 (file)
@@ -6,10 +6,12 @@
                        "아라",
                        "LiteHell",
                        "Ysjbserver",
-                       "Alex00728"
+                       "Alex00728",
+                       "Hwangjy9",
+                       "Kurousagi"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [https://www.mediawiki.org/wiki/API:Main_page 설명문서]\n* [https://www.mediawiki.org/wiki/API:FAQ FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 https://www.mediawiki.org/wiki/API:Errors_and_warnings 를 참고하십시오.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류 및 경고]]를 참조하십시오.",
        "apihelp-main-param-action": "수행할 동작",
        "apihelp-main-param-format": "출력값의 형식.",
        "apihelp-block-description": "사용자를 차단합니다.",
        "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
        "apihelp-block-example-ip-simple": "IP <kbd>192.0.2.5</kbd>에 대해 <kbd>First strike</kbd>라는 이유로 3일간 차단하기",
        "apihelp-block-example-user-complex": "사용자 <kbd>Vandal</kbd>을 <kbd>Vandalism</kbd>이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기",
+       "apihelp-createaccount-description": "새 사용자 계정을 만듭니다.",
        "apihelp-createaccount-param-name": "사용자 이름",
+       "apihelp-createaccount-param-email": "사용자 이메일 주소 (선택).",
+       "apihelp-createaccount-param-realname": "사용자 실명 (선택).",
        "apihelp-delete-description": "문서 삭제",
+       "apihelp-delete-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
        "apihelp-delete-example-simple": "<kbd>Main Page</kbd>를 삭제합니다.",
        "apihelp-disabled-description": "이 모듈은 해제되었습니다.",
        "apihelp-edit-description": "문서를 만들고 편집합니다.",
        "apihelp-edit-param-minor": "사소한 편집.",
        "apihelp-edit-param-notminor": "사소하지 않은 편집.",
        "apihelp-edit-param-bot": "이 편집을 봇으로 표시.",
+       "apihelp-edit-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
        "apihelp-edit-example-edit": "문서 편집",
+       "apihelp-emailuser-description": "사용자에게 이메일을 보냅니다.",
+       "apihelp-emailuser-param-target": "이메일을 받을 사용자.",
        "apihelp-expandtemplates-param-title": "문서 제목",
+       "apihelp-expandtemplates-param-text": "변환할 위키텍스트.",
+       "apihelp-feedrecentchanges-param-hideminor": "사소한 편집을 숨깁니다.",
+       "apihelp-feedrecentchanges-param-hidebots": "봇의 편집을 숨깁니다.",
+       "apihelp-feedrecentchanges-param-hideanons": "익명 사용자의 편집을 숨깁니다.",
+       "apihelp-feedrecentchanges-param-hideliu": "등록된 사용자의 편집을 숨깁니다.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "검토된 편집을 숨깁니다.",
        "apihelp-feedrecentchanges-param-tagfilter": "태그로 분류",
+       "apihelp-feedrecentchanges-example-simple": "최근 바뀜을 봅니다.",
+       "apihelp-feedrecentchanges-example-30days": "30일간의 최근 바뀜을 봅니다.",
+       "apihelp-filerevert-description": "파일을 이전 판으로 되돌립니다.",
        "apihelp-login-param-name": "계정 이름.",
        "apihelp-login-param-password": "비밀번호.",
        "apihelp-login-example-login": "로그인.",
@@ -60,6 +78,7 @@
        "apihelp-query+pageswithprop-param-limit": "나타낼 문서의 최대 수입니다.",
        "apihelp-query+pageswithprop-param-dir": "정렬 순서",
        "apihelp-query+prefixsearch-param-search": "문자열 검색",
+       "apihelp-unblock-description": "사용자를 차단 해제합니다.",
        "api-help-title": "미디어위키 API 도움말",
        "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "메인 모듈",
index e4b16b0..46ef968 100644 (file)
@@ -4,7 +4,7 @@
                        "Purodha"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> wee jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohe:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page/de|Dokemäntazjohn]]\n* [[mw:API:FAQ/de|Öff jefrohch]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mäileng_Leß]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Aanköndejonge zom <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Jemäldte Fähler un Wönsch]\n</div>\n<strong>Status:</strong> Alle op heh dä Sigg aanjzeischte Ußwahle sullte donn, ävver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> weed jrahd noch äntwekeld un et kann sesch alle Nahslangs jädd ändere. Holl Der de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Mäileng_Leß med Aanköndejonge], öm automattesch övver Neujeschkeite enfommehrt ze wähde.\n\n<strong>Kapodde Aanfrohre:</strong> Wam_mer kapodde Aanfroheaan et API <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> schek, kritt mer ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">HTTP</i>-Kopp ußjejovve met däm Täx „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki-API-Error</code>“ dren, dä mer als ene Schlößel bedraachte kann. Mih dohzoh fengk met op dä Sigg [[mw:API:Errors_and_warnings|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>: Fähler un Warnonge]].",
        "apihelp-main-param-action": "Wat för en Aufjahb.",
        "apihelp-main-param-format": "Et Fommaht för ußzejävve.",
        "apihelp-main-param-maxlag": "Der hühste zohjelohße Verzoch kann jenumme wähde, wann MehdijaWikki obb enem Dahtebangk  replicated cluster enschtallehrt weed. Öm kein Opdräschd aan de Dahtebangk ze scheke, di dat noch schlemmer maache dähte, kam_mer övver heh dä Parramehter et Projramm affwahde lohße, bes dat  the replication lag onger däm aanjejovve Wäät lit. Wann dä Verzoch övvermähßesch jruhs es kritt mer dä Fähler <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">maxlag</samp> jemälldt en ene Nohreesch esu wi <samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Mer wahde op dä ẞööver $Maschihn un di es $Verzoch Sekonde hengerher</samp>.<br />Op dä [[mw:Manual:Maxlag_parameter|Hanndbohchsigg zom \n<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Maxlag</code>-Parramehter]] kam_mer noch mih zerdoh lässe.<!-- https://translatewiki.net/wiki/Thread:Support/About_MediaWiki:Apihelp-main-param-maxlag/ksh -->",
@@ -47,6 +47,7 @@
        "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
        "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
        "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\"><var>$1mailpassword</var></code> jesaz es)",
+       "apihelp-createaccount-param-domain": "De Domäijn för de Zohjangsdaht vun ußerhallef beschtähtech ze krijje. Kam_mer fott_lohße.",
        "apihelp-createaccount-param-token": "Der Makkehrongsschlößel för ene Zohjang aanzelähje, dä mer bei de eezde Aanfrohch krääje hät.",
        "apihelp-createaccount-param-email": "Däm Metmaacher sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i>, kann och fott bliive.",
        "apihelp-createaccount-param-realname": "Dämm Metmaacher singe reeschtejje Nahme - kann fott blihve.",
        "apihelp-expandtemplates-param-title": "De Övverschreff vun dä Sigg.",
        "apihelp-expandtemplates-param-text": "Dä Wikkitäx zom ömwandelle.",
        "apihelp-expandtemplates-param-revid": "De Kännong vun dä Väsjohn, för \n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{REVISIONID}}</nowiki></code>“ un verwandte Wääte.",
+       "apihelp-expandtemplates-param-prop": "Wat för en Aanjahbe ze holle?\n\nOpjepaß: wann jaa kei Wääte ußjewähld sinn, kütt der Wikkitäx eruß, ävver de ßjahbe kumme en enem Fommaht, wat mer nit hann welle.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Alle Saachjroppe en dä Quällesigg, di em Wikkitäx vun de ußjejovve Sigg nit vorkumme.",
        "apihelp-expandtemplates-paramvalue-prop-properties": "De Sigge_Eijeschaffte, di vun de Zauberwööter em Wikkitäx faßjelaat wähde.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "De längste Zigg noh dä de zweschejescheijscherte jevonge Dahte nmmieh jöltesch sin sulle.",
        "apihelp-expandtemplates-param-includecomments": "Ov Aanmärkonge em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>-Fommaht med ußjejovve wähde sulle.",
        "apihelp-expandtemplates-param-generatexml": "Donn ene Boum vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Paaser opboue. Es dorsch „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=parsetree</code>“ ässäz.",
        "apihelp-expandtemplates-example-simple": "Donn dä Wikkitäx <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\"><nowiki>{{Project:Sandbox}}</nowiki></kbd> en Täx wandelle.",
-       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beidrähsch vun enem Metmaacher uß.",
+       "apihelp-feedcontributions-description": "Jidd ene Kannahl met de Beijdrähsch vun enem Metmaacher uß.",
        "apihelp-feedcontributions-param-feedformat": "Däm Kannahl sing Fommaht.",
        "apihelp-feedcontributions-param-user": "De Beijdrähsch för wat för en Metmaacher holle.",
        "apihelp-feedcontributions-param-namespace": "Wat för ene Appachtemang för de Beijdrähsch ußjeschloße wähde sull.",
        "apihelp-feedrecentchanges-param-days": "Wadd eruß küdd op di Dähsch enschrängke.",
        "apihelp-feedrecentchanges-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
        "apihelp-feedrecentchanges-param-from": "Zeijsch de Änderonge zigg dämm.",
-       "apihelp-feedrecentchanges-param-hideminor": "De kein Minni_Änderonge verschteijsche.",
+       "apihelp-feedrecentchanges-param-hideminor": "De kleine Minni_Ännderonge verschteijsche.",
        "apihelp-feedrecentchanges-param-hidebots": "Änderonge ußschlehße, di vun Bots jemaht wohde.",
        "apihelp-feedrecentchanges-param-hideanons": "Änderonge ußschlehße, di vun nahmelohse Metmaacher jemaht wohde.",
        "apihelp-feedrecentchanges-param-hideliu": "Änderonge ußschlehße, di vun aanjemälldete Metmaacher jemaht wohde.",
        "apihelp-opensearch-param-limit": "De hühßte Aanzahl vun Äjeebnesse för zeröck ze jävve",
        "apihelp-opensearch-param-namespace": "En wällschem Appachtemang söhke.",
        "apihelp-opensearch-param-suggest": "Don nix wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>“ op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">false</code>“ jesaz es.",
-       "apihelp-opensearch-param-redirects": "Wi met Ömleidonge ömjonn?\n;return:Jivv de Ömleidonge sällver uß.\n;resolve:Jiff de Sigg uß, woh de Ömleidong hen jeiht. Dat künnt winnijer wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</code>“ Sigge ußjävve.\nTradizonäll es dä Schtandatt „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>“ för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1format=json</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>“ för alle anndere.",
+       "apihelp-opensearch-param-redirects": "Wi met Ömleidonge ömjonn?\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>:Jivv de Ömleidonge sällver uß.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>:Jiff de Sigg uß, woh de Ömleidong hen jeiht. Dat künnt winnijer wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</code>“ Sigge ußjävve.\nTradizonäll es dä Schtandatt „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">return</code>“ för „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1format=json</code>“ un „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">resolve</code>“ för alle anndere.",
        "apihelp-opensearch-param-format": "Et Fommaht zom Ußjävve.",
        "apihelp-opensearch-param-warningsaserror": "Wann Warnonge opkumme met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">format=json</kbd>“, dann donn ene Fähler vum <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjävve anschtat se ze övverjonn.",
        "apihelp-opensearch-example-te": "Fengk Sigge, di met <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Te</kbd> aanfange.",
        "apihelp-options-param-reset": "Säz de Enschtällonge op dem Wikki singe Standatt.",
        "apihelp-options-param-optionname": "Dä Nahme vun ene Enschtällong, di op dä Wäät jesaz wähde sulle, dä „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionvalue</var>“ aanjitt.",
-       "apihelp-options-param-optionvalue": "Ene Wäät vun dä Enschtällong, di vun „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionname</var>“ aanjejovve weed. Kann Sänkrääschte Schresche („|“) äänthallde.",
-       "apihelp-options-example-reset": "Alle enschtälloonge retuur schtälle.",
+       "apihelp-options-param-optionvalue": "Dä Wäät vun dä Enschtällong, di vun „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionname</var>“ aanjejovve weed. Kann Sänkrääschte Schresche („|“) ännthallde.",
+       "apihelp-options-example-reset": "Alle Enschtälloonge retuhr schtälle.",
        "apihelp-options-example-change": "Donn de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hideminor</kbd>“ Enschtällonge ändere.",
        "apihelp-options-example-complex": "Donn alle Enschtällonge op der Schtandatt säze, dann säz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">nickname</kbd>“.",
        "apihelp-paraminfo-description": "Holl Aanjahbe övver dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Moduhle.",
        "apihelp-parse-paramvalue-prop-revid": "Deiht de Kännong vun de Väsjohn vun dä jepahßde Sigg derbei.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Deiht de Övverschreff vum jepahßde Wikkitäx derbei.",
        "apihelp-parse-paramvalue-prop-modules": "Jitt dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Delivery system in MediaWiki for the optimized run-time loading and managing of modules\">ResourceLoader</i> sing Moduhle uß, di en dä Sigg jebruch wähde. Äntwehder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">jsconfigvars</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">encodedjsconfigvars</kbd>“ moß mer met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">modules</kbd>“ zesamme aanforrdere.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Livvert de Varrejahble vun dä Ennschtällonge vum JavaSkrep, di äxtra för heh di Sigg enjeschtallt sin.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Jitt de Engewikkilengks em jepahßde Wikkitäx uß.",
        "apihelp-parse-paramvalue-prop-wikitext": "Jitt de der ojinahl Wikkitäx us, dä jepahß woode es.",
        "apihelp-parse-paramvalue-prop-properties": "Jitt devärse Eijeschafte uß, di em jepahßde Wikkitäx faßjelaat woode sen.",
        "apihelp-parse-param-section": "Holl blohß dann der Ennhalld vun däm Affschnett met dä Nommer, udder wann „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd>“ enjejovve es, maach ene neu Affschnett derbei.",
        "apihelp-parse-param-sectiontitle": "De Övverschreff för dä neuje Afschnet, wann <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">section</var> = <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</kbd> es.\n\nAnders wi beim Beärbeide vun dä Sigg weed dä Parramehter nit dorsch de <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">summary</var> ußjetuusch, wann hä fottjelohße udder läddesch es.",
-       "apihelp-parse-param-disableeditsection": "Donn e lenks för Affschnedde ze änndere en de Ußjahbe vum Paaser affschallde.",
-       "apihelp-parse-param-disabletoc": "Donn et Ennhaldsverzeijscheneß en de Ußjahbe vottlohze.",
+       "apihelp-parse-param-disablelimitreport": "Jiff keine Bereesch vum Vüürbereijde zom Paase (der „<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">NewPP limit report</i>“) mem Paaser singe Dahte zosamme uß.",
+       "apihelp-parse-param-disableeditsection": "Donn de Lenks för Affschnedde ze änndere en de Ußjahbe vum Paaser eruß lohße.",
+       "apihelp-parse-param-disabletoc": "Donn et Ennhaldsverzeijscheneß en de Ußjahbe vottlohße.",
        "apihelp-parse-example-page": "Donn en Sigg pahse.",
        "apihelp-parse-example-text": "Donn Wikkitäx pahse.",
        "apihelp-parse-example-texttitle": "Donn Wikkitäx pahse, un jiff derför en Övverschreff för en Sigg aan.",
        "apihelp-protect-param-title": "De Övverschreff vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
        "apihelp-protect-param-pageid": "De Kännong vun dä Sigg zom Schöze udder Freijävve. Kam_mer nit zesamme met\n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</code>“ bruche.",
        "apihelp-protect-param-reason": "Der Jrond för et Schöze udder Freijävve.",
+       "apihelp-protect-param-cascade": "Donn en Schotz-Kaskahd zohlohße, alsu ene Schoz för ennjeföhschte Schablohne un upjerohfe Bellder vun dä Sigg. Deiht nix, wann keine von dä aanjejovve Zoote Schoz en Kaskahd zohlöht.",
        "apihelp-protect-example-protect": "Donn en Sigg schöze.",
        "apihelp-purge-param-forcelinkupdate": "Bräng de Tabälle met de lengks obb ene neue Schtand.",
        "apihelp-purge-example-simple": "Donn fö de Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">API</kbd>“ de zweschejeschpeijscherte Väsjohn fottschmiiße.",
        "apihelp-query+allcategories-param-min": "Jiff blohß Saachjroppe us, di winneschsdens esu vill Metjlehder han.",
        "apihelp-query+allcategories-param-max": "Jiff blohß Saachjroppe us, di et mihts esu vill Metjlehder han.",
        "apihelp-query+allcategories-param-limit": "Wi vell Saachjroppe ußjävve?",
-       "apihelp-query+allcategories-param-prop": "Wat för en Eijeschaffte holle: \n;size:Deiht de Aanzahl Sigge en dä Saachjropp derbei.\n;hidden:Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
+       "apihelp-query+allcategories-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Deiht de Aanzahl Sigge en dä Saachjropp derbei.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
+       "apihelp-query+allcategories-example-generator": "Holl Ennfommazjuhne övver di Saaachjroppe_Sigg för Saachjroppe, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">List</kbd>“ bejenne.",
        "apihelp-query+alldeletedrevisions-description": "Donn alle fottjeschmeße Väsjohne vun enem Metmaacher udder en enem Appachemang opleßte.",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kam_mer blohß met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Kam_mer nit met <var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3user</var> bruche.",
        "apihelp-query+allfileusages-param-to": "De Övverschreff vun dä Dattei, woh de Leß medd ophühre sull.",
        "apihelp-query+allfileusages-param-prefix": "Söhk noh alle Övverschreffte, di met heh däm Täx aanfange.",
        "apihelp-query+allfileusages-param-unique": "Donn blohß ongerscheidlijje Övverschreffte vun Datteije aanzeije. Kammer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids<code>“ bruche.\nWann als ene Jenerahtor ennjesaz, brängk et Zihlsigge, un kein Kwällesigge.",
-       "apihelp-query+allfileusages-param-prop": "Wat för en Aanjahbe ennschlehße:\n;ids:Deiht de Kännonge vun dä Sigge derbei, di dat bruche. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.\n;title:Deiht dä Dattei ehr Övverschreff derbei.",
+       "apihelp-query+allfileusages-param-prop": "Wat för en Aanjahbe ennschlehße:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigge derbei, di dat bruche. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Deiht dä Dattei ehr Övverschreff derbei.",
        "apihelp-query+allfileusages-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
        "apihelp-query+allfileusages-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+allfileusages-example-B": "Donn Övverschreffte vun Datteije aanzeije, och vun Datteije, di (noch) nit doh sin, zesame met dä Kännonge vun dä Sigge, woh se vun sin, aanjevange vun <kbd>B</kbd>.",
        "apihelp-query+alllinks-param-to": "De Övverschreff vun dä Dattei, woh et Zälle ophühre sull.",
        "apihelp-query+alllinks-param-prefix": "Söhk noh alle verlengk Övverschreffte, di met heh däm Täx aanfange.",
        "apihelp-query+alllinks-param-unique": "Zeijsch blohß de ongerscheidlijje verlengk Sigge ier Övverschreffte. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids</code>“ bruche. Wam_mer et als ene  Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.",
-       "apihelp-query+alllinks-param-prop": "Wat för en Aanjahbe ennschlehße:\n;ids:Deiht de Kännonge vun dä Sigge met däm Lengk derbei. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.\n;title:Deiht däm lengk sing Övverschreff derbei.",
+       "apihelp-query+alllinks-param-prop": "Wat för en Aanjahbe ennschlehße:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigge met däm Lengk derbei. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Deiht däm lengk sing Övverschreff derbei.",
        "apihelp-query+alllinks-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+alllinks-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
        "apihelp-query+alllinks-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+allredirects-param-to": "De Övverschreff vun dä Sigg, woh et Zälle ophühre sull.",
        "apihelp-query+allredirects-param-prefix": "Söhk not Sigge, di esu aanfange.",
        "apihelp-query+allredirects-param-unique": "Zeijsch blohß de ongerscheidlijje Zihl_Sigg. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids|fragment|interwiki</code>“ bruche. Wam_mer et als ene  Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Deiht dä Ömleijdong ehr Övverschreff derbei.",
        "apihelp-query+allredirects-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+allredirects-param-limit": "Wi vill sulle överhoup aanjezeisch wääde?",
        "apihelp-query+allredirects-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+alltransclusions-param-to": "De Övverschreff vun dä ennjeföhschte Sigg, woh et Zälle ophühre sull.",
        "apihelp-query+alltransclusions-param-prefix": "Söhk noh alle dä ennjeföhschte Sigge ier Övverschreffte, di met heh däm Täx aanfange.",
        "apihelp-query+alltransclusions-param-unique": "Zeijsch blohß de ongerscheidlijje ennjeföhschte Sigge ier Övverschreffte. Kam_mer nit zesamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=ids</code>“ bruche. Wam_mer et als ene  Jenerahtor bruche deiht, kritt mer Zihlsiggge anschtatt vun Quällesigge.!FUZZY!!",
-       "apihelp-query+alltransclusions-param-prop": "Wat för en Aanjahbe ennschlehße:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">ids</code>:Deiht de Kännonge vun dä Sigg derbei, di dat bruch. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">title</code>:Deiht de Övverschreff vun dä jebruchte Sigg derbei.",
+       "apihelp-query+alltransclusions-param-prop": "Wat för en Aanjahbe ennschlehße:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "Deiht de Kännonge vun dä Sigg derbei, di dat bruch. Kam_mer nit zersamme met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1unique</code>“ bruche.",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "Deiht de Övverschreff vun dä jebruchte Sigg derbei.",
        "apihelp-query+alltransclusions-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+alltransclusions-param-limit": "Wi vill sulle överhoup aanjezeisch wähde?",
        "apihelp-query+alltransclusions-param-dir": "En wälsche Reijefollsch?",
        "apihelp-query+allusers-param-dir": "De Reijefollsch zum Zotehre.",
        "apihelp-query+allusers-param-group": "Donn blohß Metmaacher uß dä aanjejovve Jroppe enschlehße.",
        "apihelp-query+allusers-param-excludegroup": "Donn keine Metmaacher uß dä aanjejovve Jroppe enschlehße.",
+       "apihelp-query+allusers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+allusers-paramvalue-prop-rights": "De Rääschde vn däm Memaacher.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Donn de Aanzahl Änderonge derbei, di dä Metmaacher em Wikki jemaat hät.",
        "apihelp-query+allusers-param-limit": "Wi vill Nahme Metmaacher sulle mer krijje?",
        "apihelp-query+allusers-param-witheditsonly": "Blohß Metmahcher, di och ens jät verändert han.",
        "apihelp-query+allusers-param-activeusers": "Donn blohß Metmaacher opleßte, di  {{PLURAL:$1|der läzde Daach|en de läzde $1 Dääsch|keine läzde Daach}} aktihf wohre.",
        "apihelp-query+backlinks-param-pageid": "De Känong vun dä Sigg zom Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
        "apihelp-query+backlinks-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+backlinks-param-dir": "En wälsche Reijefollsch?",
+       "apihelp-query+backlinks-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+       "apihelp-query+backlinks-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
        "apihelp-query+backlinks-example-simple": "Zeijsch Lengks op de Sigg <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main page<kbd>.",
        "apihelp-query+backlinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</code>“ lengke donn.",
        "apihelp-query+blocks-description": "Donn alle jeschpächte Metmaacher un <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße opleßte.",
        "apihelp-query+blocks-param-users": "Leß vun dä Metmaacher för dernoh ze söhke. Kann fott blihve.",
        "apihelp-query+blocks-param-ip": "Holl alle Schpärre för heh di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß udder heh dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Classless Inter-Domain Routing\">CIDR</i>-Berätt, och Schpärre vun Berätte. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$3users</var>“ bruche. <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Classless Inter-Domain Routing\">CIDR</i>-Berätte vun mieh wi <code dir=\"ltr\">IPv4/$1</code> udder <code dir=\"ltr\">IPv6/$2</code> wähde nit aanjenumme.",
        "apihelp-query+blocks-param-limit": "De hühßde Aanzahl Spärre zom opleste.",
-       "apihelp-query+blocks-param-prop": "Wat för en Eijeschaffte holle:\n;id:Deiht dä Spärr iehr Kännonge derbei.\n;user:Deiht dä Nahme vom jeschpächte Metmaacher derbei.\n;userid:Deiht de Kännong vum jeschpächte Metmaacher derbei.\n;by:Deiht dä Nahme vun däm Metmaacher derbei, dä jeschpächt hät.\n;byid:Deiht de Kännong vun däm Metmaacher derbei, dä jeschpächt hät.\n;timestamp:Deihd et Dattum un de Uhrzigg derbei, wann jeschpächt wood.\n;expiry:Deihd et Dattum un de Uhrzigg derbei, wann di Schparr eröm es.\n;reason:Deiht der Jrond för di Schparr derbei.\n;range:Deiht dä Berätt vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße för di Schparr derbei.\n;flags:makkehrt di Spärr met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">autoblock</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">anononly</code>“, un esu.",
+       "apihelp-query+blocks-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+blocks-paramvalue-prop-id": "Deiht dä Spärr iehr Kännonge derbei.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Deiht dä Nahme vom jeschpächte Metmaacher derbei.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Deiht de Kännong vum jeschpächte Metmaacher derbei.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Deiht dä Nahme vun däm Metmaacher derbei, dä jeschpächt hät.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Deiht de Kännong vun däm Metmaacher derbei, dä jeschpächt hät.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann jeschpächt wood.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Deihd et Dattum un de Uhrzigg derbei, wann di Schparr eröm es.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Deiht der Jrond för di Schparr derbei.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Deiht dä Berätt vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße för di Schparr derbei.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "makkehrt di Spärr met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">autoblock</code>“, „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">anononly</code>“, un esu.",
        "apihelp-query+blocks-example-simple": "Schpärre opleßte.",
        "apihelp-query+blocks-example-users": "Donn de Schpärre vun dä Metmaacher <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Alice</kbd> un <lang=\"en\" xml:lang=\"en\" dir=\"ltr\" kbd>Bob</kbd> opleßte.",
        "apihelp-query+categories-description": "Donn alle Saachjroppe epleßte, woh di Sigge dren sin.",
-       "apihelp-query+categories-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle för jehde Saachjropp:\n;sortkey:Deiht dä Schlößel zom Zottehre vun dä Saachjropp derbei, en lange häxadezimahle Zahl, un der Schlößelvörsaz, woh ene Minsch jät med aanfange kann.\n;timestamp:Deihd en Dattom un en Zigg derbei, wann di Sachjrobb aanjelaat woode es.\n;hidden:Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
+       "apihelp-query+categories-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle för jehde Saachjropp:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "Deiht dä Schlößel zom Zottehre vun dä Saachjropp derbei, en lange häxadezimahle Zahl, un der Schlößelvörsaz, woh ene Minsch jät med aanfange kann.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Deihd en Dattom un en Zigg derbei, wann di Sachjrobb aanjelaat woode es.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Makehrt de veschtoche Sachjroppe met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">_&#95;HIDDENCAT_&#95;</code>“.",
        "apihelp-query+categories-param-show": "Wat för en Zoot Saachjroppe zeije.",
        "apihelp-query+categories-param-limit": "Wi vell Saachjroppe ußjävve?",
        "apihelp-query+categories-param-categories": "Donn blohß heh di Saachjroppe opleßte. Dadd es johd, öm eruß ze fenge ovv en beschtemmpte Sigg en en beschtemmpte Saachjropp dren es.",
        "apihelp-query+categorymembers-description": "Donn alle Sigge en ener aanjejove saachjrobb opleste.",
        "apihelp-query+categorymembers-param-title": "Wat för en Sachjropp opzälle. Moß aanjejovve sin. Moß der Vörsaz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">{{ns:category}}:</kbd>“ änthallde. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1pageid</var>“ bruche.",
        "apihelp-query+categorymembers-param-pageid": "De Kännong vun dä Sigg zom opzälle. Kam_mer nit zersamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
+       "apihelp-query+categorymembers-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Deiht de Kännong vun de Sigge derbei.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Deihd et Dattum un de Uhrzigg derbei, wann di Sigg opjenumme wohd.",
        "apihelp-query+categorymembers-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
        "apihelp-query+categorymembers-param-sort": "De Eijeschavv öm dernoh ze zottehre.",
        "apihelp-query+categorymembers-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Der Zoteerschlößel för de Leß opzehühre, wi mer en met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1prop=sortkey</kbd>“ kritt. Kann blohß met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</kbd>“ jebruch wähde.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Der Aanfang vun däm Zoteerschlößel för de Leß opzehühre. Opühre deiht se <strong>för</strong>, un nit <strong>met</strong> däm. Wann dä Wäät opdouch, weed hä nit med ußjejovve. Kann blohß met „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sort=sortkey</code>“ jebruch wähde un överjeihd „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey</code>“.",
        "apihelp-query+categorymembers-param-startsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1starthexsortkey</code>“ schtatt dämm.",
        "apihelp-query+categorymembers-param-endsortkey": "Söhk „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1endhexsortkey </code>“ schtatt dämm.",
        "apihelp-query+categorymembers-example-simple": "Holl de eezde zehn Sigge de dä <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Category:Physics</kbd>.",
        "apihelp-query+contributors-description": "Holl de Leß met de ennjelogg Schrihver un de Aanzahl nahmelohse Metschrihver aan ene Sigg.",
        "apihelp-query+contributors-param-limit": "Wi vill Metschrihver ze livvere?",
        "apihelp-query+contributors-example-simple": "Donn de Metschrihver aan dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">KMain PageBD</kbd>“ aanzeije.",
+       "apihelp-query+deletedrevisions-param-start": "Et Dattom un de Uhrzigg, von woh aan opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
+       "apihelp-query+deletedrevisions-param-end": "Et Dattom un de Uhrzigg, bes woh hen opzälle. Weed nit jebruch, wam_mer en Leß met Kännonge vun Väsjohne aam beärbeijde sin.",
        "apihelp-query+deletedrevisions-param-tag": "Donn blohß Väsjohne met heh dä Makkehrong opleßte.",
        "apihelp-query+deletedrevisions-param-user": "Donn blohß Väsjohne vun heh däm Metmaacher opleßte.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
        "apihelp-query+deletedrevs-param-excludeuser": "Donn kein Väsjohne vun heh däm Metmaacher opleßte.",
        "apihelp-query+deletedrevs-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
        "apihelp-query+deletedrevs-param-limit": "De hühßde Aanzahl Väsjohne för opzeleßte.",
+       "apihelp-query+deletedrevs-param-prop": "Wat för en Eijeschaffte holle:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">revid</code>:Deiht de Kännong vun dä fottjeschmeße Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">parentid</code>:Deiht de Kännong vun dä vörijje Väsjohn vun dä Sigg derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">user</code>:Deiht dä Metmaacher derbei, dä di Väsjohn jemaat hät.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">userid</code>:Deiht de Kännong vun däm Metmaacher derbei, dä di Väsjohn jemaat hät.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">comment</code>:Deiht de koote Zesammefaßong vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">parsedcomment</code>:Adds dä de jepaaste koote Zesammefaßong vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">minor</code>:Tags, wann di Väsjohn en kleine Minni-Änderong wohr.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">len</code>:Deiht de Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">sha1</code>:Deiht dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">content</code>:Deiht dä Täx_Ennhalt vun dä Väsjohn derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">token</code>:<span class=\"apihelp-deprecated\">Nit mih jewönsch.</span> Livvert de Makehrong vun dä Änderong.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">tags</code>:Makehronge vun dä Väsjohn.",
        "apihelp-query+disabled-description": "Dat Moduhl för Frohre ze schtälle wohd affjeschalldt.",
        "apihelp-query+duplicatefiles-description": "Donn alle Datteije opleßte, di desällve Prööfsomm han wi de aanjejovve Datteije.",
        "apihelp-query+duplicatefiles-param-limit": "Wi vell datteije ußjävve.",
        "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+embeddedin-param-filterredir": "Wi de Ömleijdonge ußzottehre?",
        "apihelp-query+embeddedin-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+       "apihelp-query+embeddedin-example-simple": "Zeisch de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+       "apihelp-query+embeddedin-example-generator": "Holl Aanjahbe övve de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+       "apihelp-query+extlinks-description": "Jitt alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URLs</i> vun Lengks noh ußerhallef vum Wikki, ävver kein Engewiki_Lenks, vundä aanjejovve Sigge uß.",
        "apihelp-query+extlinks-param-limit": "Wi vill Lengks ußjävve?",
+       "apihelp-query+extlinks-example-simple": "Holl en Leß met Lengks noh ußerhallef vum Wikki uß dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+       "apihelp-query+exturlusage-description": "Donn alle Sigge upzälle med däm aanjejovve<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> dren.",
+       "apihelp-query+exturlusage-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Donn dä Sigg ier Kännong derbei.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Donn de Övverschrevv un de Kännong för et Appachtemang derbei.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Donn dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> derbei, dä en dä Sigg jebruch weed.",
+       "apihelp-query+exturlusage-param-protocol": "Dat Schehma uß däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>. Wann et läddesch jelohße es un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1query</var>“ aanjejogge es, es dat Schehma „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">http</kbd>“. Lohß beeds dat un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">1query</var>“ läddesch, öm alle Lengks noh ußerhallef opzeleßte.",
+       "apihelp-query+exturlusage-param-namespace": "Dat appachtemang met dä Sigge zom opzälle.",
        "apihelp-query+exturlusage-param-limit": "Wi vill Sigge zem ußjävve?",
        "apihelp-query+filearchive-description": "Donn alle fottjeschmeße Datteije der Reih noh opzälle.",
        "apihelp-query+filearchive-param-from": "De Övverschreff vun däm Beld, woh de Leß medd aanfange sull.",
        "apihelp-query+filearchive-param-dir": "En wälsche Reijefollsch opleßte.",
        "apihelp-query+filearchive-param-sha1": "Däm Beld singe <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm. Övverjeiht „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1sha1base36</code>“.",
        "apihelp-query+filearchive-param-sha1base36": "Däm Beld singe <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1</i>-Pröhvsomm em 36-jer Zahlesüßtehm. Weed em Mehdiajwikki jebruch.",
+       "apihelp-query+filearchive-param-prop": "Wat för en Aanjahbe zom Beld holle:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Deiht dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"secure hash algorithm\">SHA-1 (base 16)</i> vun dä Väsjohn vn däm Beld derbei.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Adds timestamp for the uploaded version.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Väsjohn huhjelahde hät.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Deiht de Aanzahl <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i> vun dä Dattei derbei, un, wann bikannt, de Hühde, de Wiggde, un de Aanzahl Sigge.",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Et sällve, wi <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">size</code>.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Adds description för di Väsjohn vun däm Beld.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Parse the description för di Väsjohn vun däm Beld.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Adds MIME vun däm Beld.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Adds the media type vun däm Beld.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Exchangeable image file format\">EXIF</i>-Mettadahte för di Väsjohn vun däm Beld opleßte.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "deiht de bit depth för di Väsjohn derbei.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Deiht dä Nahme vun dä Dattei vun dä Aschihf_Väsjohn för alle Väsjohne, bes op de läzde, derbei.",
        "apihelp-query+filearchive-example-simple": "Zeijsch en leß met alle fottjeschmeße Datteije.",
        "apihelp-query+filerepoinfo-example-simple": "Holl ennfommazjuhne övver de Reppossetohreje met Datteije.",
        "apihelp-query+fileusage-description": "Fengk alle Sigge, di de aanjejovve Datteije bruche.",
+       "apihelp-query+fileusage-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "De Kännong för jehde Sigg.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "De Övverschreff för jehde Sigg.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Zeijsch aan, wann di Sigge en Ömleijdong es.",
        "apihelp-query+fileusage-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+fileusage-param-limit": "Wi vill holle?",
        "apihelp-query+fileusage-example-simple": "Holl Aanjahbe övver Sigge, di de Dattei „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[:File:Example.jpg]].</code>“ bruche.",
        "apihelp-query+imageinfo-param-prop": "Wat för en Schtöker aan Ennfommazjuhne holle:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Deihd en dattom un en Zigg aan de huhjelahde Väsjohn.",
        "apihelp-query+imageinfo-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä jehde Väsjohn vun dä Dattei huhjelahde hät.",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "Deiht de Kännong vun däm Metmaacher derbei, dä jehde Väsohn vun dä Dattei.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Deiht de Kännong vun jehdem Metmaacher derbei, dä en Väsohn vun dä Dattei huh jelaahde hät.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Aanmärkonge bei dä Väsjohn.",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Donn di Aanmärkonge bei dä Väsjohn paase.",
-       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Deiht de kannohnesche Överschreff vun dä Dattei derbei.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Deiht de kannohnesche, schtandattmähßejje, Överschreff vun dä Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-url": "Jitt dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för di Dattei un de Sigg met däh iere Äkliehrong uß.",
        "apihelp-query+imageinfo-paramvalue-prop-size": "Deiht de Jrühße vun dä Dattei en \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>, de Hühde, de Breide, un, woh et se jitt, de Aanzahl Sigge derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Et sällve, wi de Jrühße.",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Deiht de Mehdijje_Zoot vun dä Dattei derbei.",
        "apihelp-query+imageinfo-paramvalue-prop-metadata": "Deiht de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Exchangeable image file format\">EXIF</i>-Mettadahte för di Väsjohn vun dä Dattei oplesßte.",
        "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Deiht de Mettadahte för heh di Väsjohn vun dä Dattei oplesßte, di alld schtandattmähßesch en däm Datteifommaht änthallde sin.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "Deiht dä Nahme vun dä Dattei vun dä Aschihf_Väsjohn för alle Väsjohne, bes op de läzde, derbei.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "deiht de bit depth för di Väsjohn derbei.",
        "apihelp-query+imageinfo-param-limit": "Wi vill Väsjohne för jehde Dattei ußjävve.",
        "apihelp-query+imageinfo-param-start": "Et Dattom un de Zigg, vun woh aan opleßte.",
        "apihelp-query+imageinfo-param-end": "Et Dattom un de Zigg, vun woh aan opleßte.",
        "apihelp-query+imageusage-param-pageid": "De Känong vun dä Sigg zom noh Söhke. Kam_mer nit zesamme met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1title</var>“ bruche.",
        "apihelp-query+imageusage-param-namespace": "Dat Appachtemang zom opzälle.",
        "apihelp-query+imageusage-param-dir": "En wälsche Reijefollsch opleßte.",
+       "apihelp-query+imageusage-param-limit": "Wi vill Sigge ensjesamp ußjävve. Wann „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1redirect</var>“ ennjeschalld es, weed di Beschrängkong op jehden Nivoh äxtra aanjwandt, wat bedügg, dat bes op 2 * „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1limit</var> ußjejovve wähde künne.",
+       "apihelp-query+imageusage-param-redirect": "Wann de Sigg met dämm Lengk dren en Ömleijdong änthält, fengk derzoh och alle Sigge, di doh drop lengke. De Bovverjränz för de Aanzahl Sigge för opzeleßte weed hallbehrt.",
        "apihelp-query+imageusage-example-simple": "Zeijsch Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
        "apihelp-query+imageusage-example-generator": "Holl Enformazjuhne övver de Sigge, di di Dattei „<code lang=\"mul\" xml:lang=\"mul\" dir=\"ltr\">[[:File:Albert Einstein Head.jpg]]</code>“ bruche.",
        "apihelp-query+info-description": "Holl jrondlähje Ennfommazjuhne övver di Sigg.",
        "apihelp-query+info-paramvalue-prop-subjectid": "De Kännong för de övverje'odente Sigg för jehde Klaafsigg.",
        "apihelp-query+info-paramvalue-prop-url": "Jidd en kumplätte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för et Beärbeide, un en kannohnesche <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för jehde Sigg uß.",
        "apihelp-query+info-paramvalue-prop-readable": "Ov dä Metmaacher heh di Sigg lässe kann.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Zeijsch de Maier, wi en Övverschreff vun en Sigg verhaftesch aanjezeijsch weed.",
        "apihelp-query+iwbacklinks-param-prefix": "De Engerwikki_Vörsaz.",
        "apihelp-query+iwbacklinks-param-title": "Der Engerwikki_Lengk för noh ze söhke. Moß met „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1blprefix</var>“ zersamme jebruch wähde.",
        "apihelp-query+iwbacklinks-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
-       "apihelp-query+iwbacklinks-param-prop": "Wat för en Eijeschaffte holle:\n;iwprefix:Deiht dä Engerwikki_Vörsaz derbei.\n;iwtitle:Deiht de Engerwikki_Övverschreff derbei.",
+       "apihelp-query+iwbacklinks-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Deiht dä Engerwikki_Vörsaz derbei.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Deiht de Engerwikki_Övverschreff derbei.",
        "apihelp-query+iwbacklinks-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+iwbacklinks-example-simple": "Holl Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[wikibooks:Test]]</code>“ verlengke.",
        "apihelp-query+iwbacklinks-example-generator": "Holl Ennfommazjuhne övver Sigge, di op „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[wikibooks:Test]]</code>“ verlengke.",
        "apihelp-query+links-param-titles": "Donn blohß e Lengks of heh di Övverschreffte opleßte. Dadd es johd, öm eruß ze fenge ovv en en beschtemmpte Sigg op ene beschtemmpte Övverschreff verlengk es.",
        "apihelp-query+links-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+linkshere-description": "Fengk alle Sigge, di op de aanjejovve Sigge lengke.",
-       "apihelp-query+linkshere-param-prop": "Wat för en Eijeschaffte holle:\n;pageid:Page ID of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "Page ID of each page.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Title of each page.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Flag if the page is a redirect.",
        "apihelp-query+linkshere-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+linkshere-param-limit": "Wi vill holle?",
        "apihelp-query+linkshere-example-simple": "Holl en Leß vun Sigge, di op de Sigg „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Main Page]]</code>“ lengke donn.",
        "apihelp-query+pageprops-description": "Jitt devärse Eijeschafte uß, di em Ennhald vun dä Sigg faßjelaat wohde sen.",
        "apihelp-query+pageprops-example-simple": "Holl de Eijeschaffte för di Sigge „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">MediaWiki</kbd>“.",
        "apihelp-query+pageswithprop-description": "Donn alle Sigge met bechtemmpte Sigge_Eijeschaff opleßte.",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Deiht de Kännong vun de Sigge derbei.",
        "apihelp-query+pageswithprop-param-limit": "De jrüüßte Zahl Sigge för ußzejävve.",
        "apihelp-query+pageswithprop-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+pageswithprop-example-generator": "Holl zohsäzlejje Aanjahbe övver de eezde zehn Sigge, woh <code>_&#95;NOTOC_&#95;</code> dren vörkütt.",
        "apihelp-query+prefixsearch-description": "Söhk nohm Aanfang vun dä Övverschreffte vun de Sigge.",
        "apihelp-query+prefixsearch-param-search": "Noh wat söhke?",
        "apihelp-query+prefixsearch-param-namespace": "En wällschem Appachtemang söhke.",
        "apihelp-query+querypage-example-ancientpages": "Donn de Äjehbneße vun „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[Special:Ancientpages]]</code>“ ußjävve.",
        "apihelp-query+random-param-namespace": "Jiff blohß sigge en heh dä Appachtemangs uß.",
        "apihelp-query+random-param-limit": "Wi vill zohfälleje Sigge sulle ußjejovve wähde?",
-       "apihelp-query+random-param-redirect": "Donn en zohfälleje Ömleijdong anschtatt vun ene zohfälleje Sigg lahde.",
+       "apihelp-query+random-param-redirect": "Nemm <kbd>$1filterredir=redirects</kbd> schtatt dämm.",
        "apihelp-query+random-example-simple": "Donn zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+random-example-generator": "Donn Ennfommazjuhne övver zwai zohfälleje Sigge vum Houb_Appachtemang ußjävve.",
        "apihelp-query+recentchanges-description": "Donn de  neußte Änderonge opleßte.",
        "apihelp-query+recentchanges-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
        "apihelp-query+recentchanges-example-simple": "Zeijsch de {{LCFIRST:{{int:recentchanges}}}}",
        "apihelp-query+redirects-description": "Jiff alle Ömleijdonge noh dä aanjejovve Sigge uß.",
-       "apihelp-query+redirects-param-prop": "Wat för en Eijeschaffte holle:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">pageid</code>:De Sigge_Kännong för jehde Ömleijdong.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">title</code>:De Övverschreff för jehde Ömleijdong.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">fragment</code>:Der Fragmännd_Aandeijl för jehde Ömleijdong, wann eine doh es.",
+       "apihelp-query+redirects-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "De Sigge_Kännong för jehde Ömleijdong.",
+       "apihelp-query+redirects-paramvalue-prop-title": "De Övverschreff för jehde Ömleijdong.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Der Fragmännd_Aandeijl för jehde Ömleijdong, wann eine doh es.",
        "apihelp-query+redirects-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs metnämme.",
        "apihelp-query+redirects-param-limit": "Wi vell Ömeijdonge ußjävve?",
        "apihelp-query+redirects-param-show": "Zeijsch blohß de Ömleijdonge:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">fragment</code>:med enem Fragmännd_Aandeijl.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">!fragment</code>:der ohne ene Fragmännd_Aandeijl.",
        "apihelp-query+search-param-namespace": "Söhk blohß en heh dä Appachtemangs.",
        "apihelp-query+search-param-what": "Wat för en Aat ze Söhke?",
        "apihelp-query+search-param-info": "Wat för en Metta_Dahte ußzejävve.",
+       "apihelp-query+search-param-prop": "Wat för en Eijeschaffte holle:",
        "apihelp-query+search-param-limit": "Wi vill Sigge ensjesamp ußjävve?",
+       "apihelp-query+search-param-interwiki": "Donn de Engerwiki Lengks met ußjävve beim Söhke, wann_er doh sin.",
        "apihelp-query+search-example-simple": "Söhk noh „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“.",
        "apihelp-query+search-example-text": "Söhk en Täxte noh „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“.",
        "apihelp-query+search-example-generator": "Holl anjahbe övver di Sigge, di jefonge wähde beim söhke noh \n„<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">meaning</kbd>“",
        "apihelp-query+siteinfo-description": "Jiff alljemeine Ennfommazjuhne övver heh di ẞaid_uß.",
+       "apihelp-query+siteinfo-param-filteriw": "Donn blohß de Enndrähsch för heh et Wikki udder blohß de Enndrähsch för ußerhallef en di Leß.",
+       "apihelp-query+siteinfo-param-showalldb": "Donn alle ẞööver för de Dahtebangke opleßte, nit blohß di am mihßte hengerher sin.",
        "apihelp-query+siteinfo-param-numberingroup": "Donn de Aanzahl Metmaacher en de Jroppe vun Metmaacher opleßte.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Schprohche_Köözelle för de Namhme vun Schprohche en heh dä Schprohch — der bäßte Träffer zällt - un de Namhe vun de Bedehnbovverfläsche.",
        "apihelp-query+siteinfo-example-simple": "Holl Ennfommazjuhe övver heh di ẞait.",
-       "apihelp-query+tags-param-limit": "De hühßde Aanzahl  tags zom opleste.",
-       "apihelp-query+tags-param-prop": "Wat för en Eijschaffte holle:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">name</code>:Deiht dä Nahme vun dä Makkehrong derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">displayname</code>:Deiht der Täx vum Wikki för de Makkehrong derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">description</code>:Deiht dä Beschrievongstäx vun dä Makkehrong derbei.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hitcount</code>:Deiht de Aanzahl vun Väsjohne un Enndrähsch em Logbohch derbei, di di Makkehrong han.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">defined</code>:Jivv aan, ov di Makkehrong övverhoup doh es.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">source</code>:Hollt de Kwälle vun de Makkehrong, dat kann ömfaße: „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">extension</samp>“ för Makkehronge, di vun Zohsazprojramme faßjelaat wähde, un „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">manual</samp>“ för Makkehronge, di vun de Metmaacher vun Hand verjovve wohde.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">active</code>:Ov de Makkehrong emmer noch aktihv es.",
+       "apihelp-query+siteinfo-example-interwiki": "Holl en Leß met de Vörsäz för de Engerwiki_Lenks em eije Wikki.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Es et sällve wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</code>“ un kütt vun fröjere Väsjohne.",
+       "apihelp-query+tags-description": "Leß de Makehronge vun Änderonge.",
+       "apihelp-query+tags-param-limit": "De hühßde Zahl Makkehronge zom Opleste.",
+       "apihelp-query+tags-param-prop": "Wat för en Eijeschaffte holle:",
+       "apihelp-query+tags-paramvalue-prop-name": "Deiht dä Nahme vun dä Makkehrong derbei.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Deiht der Täx vum Wikki för de Makkehrong derbei.",
+       "apihelp-query+tags-paramvalue-prop-description": "Deiht dä Beschrievongstäx vun dä Makkehrong derbei.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "Deiht de Aanzahl vun Väsjohne un Enndrähsch em Logbohch derbei, di di Makkehrong han.",
+       "apihelp-query+tags-paramvalue-prop-defined": "Jivv aan, ov di Makkehrong övverhoup doh es.",
+       "apihelp-query+tags-paramvalue-prop-source": "Hollt de Kwälle vun de Makkehrong, dat kann ömfaße: „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">extension</samp>“ för Makkehronge, di vun Zohsazprojramme faßjelaat wähde, un „<samp lang=\"en\" xml:lang=\"en\" dir=\"ltr\">manual</samp>“ för Makkehronge, di vun de Metmaacher vun Hand verjovve wohde.",
+       "apihelp-query+tags-paramvalue-prop-active": "Ov de Makkehrong emmer noch aktihv es.",
        "apihelp-query+tags-example-simple": "Leß de verföhschbahre Makkehronge op.",
        "apihelp-query+templates-description": "Jidd alle Datteije uß, di en dä aanjejovve Sigge enjebonge sin.",
        "apihelp-query+templates-param-namespace": "Zeijsch blohß de Schablohne en heh däm Appachtemang.",
        "apihelp-query+templates-param-limit": "Wi vill Schablohne sulle ußjejovve wähde?",
+       "apihelp-query+templates-param-templates": "Donn blohß heh die Schablohne opleßte. Johd ze bruche zom Pröhve, ov en beschtemmpte Sigg en beschtemmpte Schlohn bruche deiht.",
        "apihelp-query+templates-param-dir": "En wälsche Reihjefollsch opleßte.",
+       "apihelp-query+templates-example-simple": "Holl di Schablohne, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ jebruch wähde.",
+       "apihelp-query+templates-example-generator": "Holl Ennfommazjuhneövver di Sigge met di Schablohne, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ jebruch wähde.",
+       "apihelp-query+templates-example-namespaces": "Holl Sigge uß de {{ns:user}} un {{ns:template}} Appachtemangs, di en di Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ enjeschloße wähde.",
        "apihelp-query+transcludedin-description": "Fengk alle Sigge, di di aanjejovve Sigge enneschlehße.",
        "apihelp-query+transcludedin-param-namespace": "Donn blohß Sigge en heh dä Appachtemangs ennschlehße.",
        "apihelp-query+transcludedin-param-limit": "Wi vill ußjävve.",
+       "apihelp-query+transcludedin-example-simple": "Holl en Leß met Sigge, di en dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ ennjeschloße wähde.",
+       "apihelp-query+transcludedin-example-generator": "Holl Ennfommazjuhne övver Sigge, di vun dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“ ohjerohfe wähde.",
        "apihelp-query+usercontribs-description": "Holl alle Änderonge vun enem Metmaacher.",
        "apihelp-query+usercontribs-param-limit": "De hühßte Aanzahl vun Meddeilonge för zeröck ze jävve",
+       "apihelp-query+usercontribs-param-start": "Dattom un Zigg vun woh aan ußjävve.",
+       "apihelp-query+usercontribs-param-end": "Dattom un Zigg bes woh hen ußjävve.",
        "apihelp-query+usercontribs-param-user": "De Metmaacher för di mer Beijdrähsch holle welle.",
+       "apihelp-query+usercontribs-param-userprefix": "Holl beijdrähsch för alle Metmaacher, dänne ier Nahme met heh däm Wääd aanfange. Övverschriehv „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1user</code>“.",
        "apihelp-query+usercontribs-param-namespace": "Donn blohß Beijdrähsch en heh dä Appachtemangs opleßte.",
+       "apihelp-query+usercontribs-param-prop": "Donn zohsäzlejje Aanjahbe ennschlehße:",
        "apihelp-query+usercontribs-param-tag": "Donn blohß Väsjohne met heh dä Makehrong opleßte.",
        "apihelp-query+usercontribs-param-toponly": "Bloß Änderonge aanzeije, woh de neußte Väsjohn beij eruß kohm.",
+       "apihelp-query+usercontribs-example-user": "Zeijsch dem Metmaacher „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>“ sing Beijdrähsch.",
+       "apihelp-query+usercontribs-example-ipprefix": "Zeijsch de Beijdrähsch vun alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße, di met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">192.0.2.</kbd>“ bejenne.",
        "apihelp-query+userinfo-description": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
+       "apihelp-query+userinfo-param-prop": "Wat för en Aanjahbe med enzschlehße:",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Deiht däm Metmaacher singe reeschtejje Nahme derbei.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Donn et Dattom vun dämm Metmaacher singe eetze Aanmäldong derbei.",
        "apihelp-query+userinfo-example-simple": "Holl Aanjahbe övver dä aktoälle Metmaacher.",
        "apihelp-query+userinfo-example-data": "Holl zohsäzlejje Aanjahbe övver dä aktoälle Metmaacher.",
        "apihelp-query+users-description": "Holl Aanjahbe övver en Leß vun Metmaacher.",
        "apihelp-query+users-param-users": "En Leß vun Metmaacher för Aanjahbe drövver ze holle.",
        "apihelp-query+users-example-simple": "Holl Aanjahbe för dä Metmaacher <kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Example</kbd>.",
+       "apihelp-query+watchlist-param-start": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
        "apihelp-query+watchlist-param-end": "Et Dattum un Uhrzigg, bes wann opzälle.",
+       "apihelp-query+watchlist-param-namespace": "Donn de Änderonge blohß us de aanjejovve Appachtemans nämme.",
        "apihelp-query+watchlist-param-user": "Donn blohß Änderonge vun heh däm Metmaacher opleßte.",
        "apihelp-query+watchlist-param-excludeuser": "Donn kein Änderonge vun heh däm Metmaacher opleßte.",
+       "apihelp-query+watchlist-param-limit": "Wi vell Äjehbneße ennsjesammp pro Oprohv ußjejovve wähde sulle.",
+       "apihelp-query+watchlist-param-prop": "Wat för en zohsäzlejje Eijeschaffte holle:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Donn de Kännong vun de Väsohne un de Sigge derbei,",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Mähd en Övverschhreff övver di Sigg.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Deiht dä Metmaacher derbei, dä di Änderong jemaat hät.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Deiht de kännong vn äm Metmaacher derbei, dä di Änderong jemaat hät.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Deihd et Dattom un de Uhrzigg vun dä Änderong derbei.",
+       "apihelp-query+watchlist-param-type": "Wat för en Änderonge aanzeije:\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">edit</code>:Jewöhnlejje Änderonge aan Sigge.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">external</code>:Änderonge vun Ußerhallef.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">new</code>:Neu aanjelahte Sigge.\n;<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">log</code>:Enndrähsch em Logbohch.",
        "apihelp-query+watchlistraw-description": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß holle.",
        "apihelp-query+watchlistraw-param-namespace": "Donn blohß Sigge en heh däm Appachtemang opleßte.",
        "apihelp-query+watchlistraw-example-simple": "Donn alle Sigge uß dem aktälle Metmaacher sing Oppaßleß opleßte.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Donn alle Sigge beärbeide, di en Oppaßleßte dren sin.",
        "apihelp-tag-description": "Donn Makkehronge vun einzel Väsjohne udder Enndraähsch em Logbohch fott nämme udder se verjävve.",
        "apihelp-tag-param-rcid": "Ein udder mih Kännonge uß de neuste Ännderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
-       "apihelp-tag-param-revid": "Ein Kännong udder mieh, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
-       "apihelp-tag-param-logid": "Ein Kännong udder mieh uß de neuste Änderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+       "apihelp-tag-param-revid": "Ein Kännong udder mih, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
+       "apihelp-tag-param-logid": "Ein Kännong udder mih uß de neuste Änderonge, woh di Makkehrong derbei jedonn udder fott jenumme wähde sull.",
        "apihelp-tag-param-add": "De Makkehrong zom Zohföhje. Bloß de vun Hand aanjelaat Makkehronge künne heh zohjeföhsch wähde.",
        "apihelp-tag-param-remove": "Makkehronge zom fott nämme. Blohß vun Hand jesaz un kumplätt onjesaz Makkehronge künne fott jenumme wähde.",
        "apihelp-tag-param-reason": "Dä Jrond för di Änderong.",
        "api-help-param-type-boolean": "Zoot: Boolsch ([[Special:ApiHelp/main#main/datatypes|Einjzelheijte]])",
        "api-help-param-type-timestamp": "Zoot: {{PLURAL:$1|1=en Dattomm un en Zigg|2=en Leß met Aanjahbe us Dattom un Zigg}} (de [[Special:ApiHelp/main#main/datatypes|zohjelohße Fommahte]])",
        "api-help-param-type-user": "Zoot: {{PLURAL:$1|1=ene Metmaacher_Nahme|2=en Leß met Metmaacher_Nahme}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Eijne Wäät|2=Wääte met <kbd>{{!}}</kbd> derzwesche}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Eijne Wäät|2=Wääte met <kbd>{{!}}</kbd> derzwesche}} vun dänne heh: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Moß läddesch sin|Kann läddesch sin, udder $2}}",
        "api-help-param-limit": "Nit mih wi $1 sin zohjelohße.",
        "api-help-param-limit2": "Nit mih wi $1 sin zohjelohße, ävver $2 för de Bots.",
diff --git a/includes/api/i18n/ky.json b/includes/api/i18n/ky.json
new file mode 100644 (file)
index 0000000..3761975
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Janatkg"
+               ]
+       },
+       "apihelp-block-description": "Колдонуучуну бөгөттөө",
+       "apihelp-block-param-reason": "Бөгөттөө себеби.",
+       "apihelp-block-example-ip-simple": " <kbd>192.0.2.5</kbd> IP дарегин үч күнгө <kbd>First strike</kbd> себеби менен бөгөттөө.",
+       "apihelp-checktoken-param-token": "Текшерүү белгиси.",
+       "apihelp-createaccount-param-name": "Колдонуучунун аты:",
+       "apihelp-createaccount-param-email": "Колдонуучунун email дареги (милдеттүү эмес)",
+       "apihelp-createaccount-param-realname": "Колдонуучунун чыныгы аты (милдеттүү эмес)",
+       "apihelp-delete-description": "Баракты өчүрүү",
+       "apihelp-delete-example-simple": "<kbd>Башбарагын</kbd> өчүрүү.",
+       "apihelp-edit-description": "Барактарды түзүү жана оңдоо.",
+       "apihelp-edit-param-text": "Барактын мазмуну.",
+       "apihelp-edit-param-minor": "Майда оңдоо."
+}
index 1c79b58..d9ea21a 100644 (file)
@@ -27,6 +27,7 @@
        "apihelp-edit-param-bot": "Dës Ännerung als Bot-Ännerung markéieren.",
        "apihelp-edit-param-watch": "D'Säit op dem aktuelle Benotzer seng Iwwerwaachungslëscht dobäisetzen.",
        "apihelp-edit-example-edit": "Eng Säit änneren",
+       "apihelp-emailuser-example-email": "Dem Benotzer <kbd>WikiSysop</kbd> eng E-Mail mam Text <kbd>Inhalt</kbd> schécken.",
        "apihelp-expandtemplates-param-title": "Titel vun der Säit.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "D'Maximalzäit no där den Tëschespäicher vum Resultat net méi valabel si soll.",
        "apihelp-feedcontributions-param-year": "Vum Joer (a virdrun).",
        "apihelp-move-description": "Eng Säit réckelen.",
        "apihelp-move-param-movetalk": "D'Diskussiounssäit ëmbenennen, wann et se gëtt.",
        "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+       "apihelp-options-description": "Astellunge fir den aktuelle Benotzer änneren.\n\nNëmmen Optiounen aus dem Haaptdeel (core) oder aus enger vun den installéierten Erweiderunge, oder Optioune mat Schlësselen déi viragestallt si mat <code>userjs-</code> (geduecht fir mat Benotzer-Scripte benotzt ze ginn), kënnen agestallt ginn.",
+       "apihelp-options-param-optionname": "Den Numm vun der Optioun deen op de Wäert vun <var>$1optionvalue</var> gesat gi muss",
        "apihelp-options-example-reset": "All Astellungen zrécksetzen",
+       "apihelp-parse-param-disablepp": "Benotzt an där Plaz <var>$1disablelimitreport</var>.",
        "apihelp-patrol-example-rcid": "Eng rezent Ännerung nokucken.",
        "apihelp-patrol-example-revid": "Eng Versioun nokucken.",
        "apihelp-protect-example-protect": "Eng Säit spären",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Kann nëmme mam <var>$3user</var> benotzt ginn.",
        "apihelp-query+alldeletedrevisions-param-user": "Nëmme Versioune vun dësem Benotzer opzielen.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Setzt den Titel vum Fichier derbäi.",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Setzt den Titel vum Link derbäi.",
        "apihelp-query+allusers-description": "All registréiert Benotzer opzielen.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lëscht vun alle Gruppen an deenen de Benotzer automatesch dran ass.",
        "apihelp-query+allusers-param-activeusers": "Nëmme Benotzer opzielen déi an de leschten $1 {{PLURAL:$1|Dag|Deeg}} aktiv waren.",
        "apihelp-query+blocks-description": "Lëscht vun de gespaarte Benotzer an IP-Adressen.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Setzt de Beräich vun den IP-Adressen derbäi déi vun der Spär betraff sinn.",
        "apihelp-query+blocks-example-simple": "Lëscht vun de Spären",
        "apihelp-query+categories-description": "All Kategorien opzielen zu deenen dës Säit gehéiert.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun dem Ament derbäi wou d'Kategorie derbäigesat gouf.",
        "apihelp-query+categories-example-generator": "Informatioun iwwer all Kategorien, déi an der Säit <kbd>Albert Einstein</kbd> benotzt ginn, kréien.",
        "apihelp-query+categorymembers-description": "All Säiten aus enger bestëmmter Kategorie opzielen.",
        "apihelp-query+categorymembers-example-simple": "Déi éischt 10 Säiten aus der <kbd>Category:Physics</kbd> kréien.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Versioune vun dësem Benotzer net opzielen.",
        "apihelp-query+deletedrevs-param-unique": "Nëmmen eng Versioun fir all Säit weisen.",
        "apihelp-query+embeddedin-param-filterredir": "Wéi Viruleedungen gefiltert gi sollen.",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias fir Gréisst.",
        "apihelp-query+filearchive-example-simple": "Eng Lëscht vun alle geläschte Fichiere weisen",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Titel vun all Säit.",
        "apihelp-query+imageinfo-paramvalue-prop-user": "Setzt fir all Versioun vum Fichier de Benotzer dobäi deen en eropgelueden huet.",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "Bemierkung iwwert d'Versioun.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias fir Gréisst.",
        "apihelp-query+images-example-simple": "Eng Lëscht vun de Fichiere kréien déi op der [[Main Page|Haaptsäit]] benotzt ginn",
        "apihelp-query+imageusage-example-simple": "Säite weisen déi [[:File:Albert Einstein Head.jpg]] benotzen",
        "apihelp-query+info-paramvalue-prop-readable": "Ob de Benotzer dës Säit liese kann.",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Setzt déi komplett URL derbäi.",
        "apihelp-query+langlinks-param-lang": "Nëmme Sproochlinke mat dësem Sproochcode zréckginn.",
        "apihelp-query+links-param-namespace": "Nëmme Linken an dësen Nummräim weisen.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Titel vun all Säit.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Markéiere wann d'Säit eng Viruleedung ass.",
+       "apihelp-query+pageswithprop-example-generator": "Zousätzlech Informatiounen iwwer déi 10 éischt Säite kréie mat <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+protectedtitles-param-namespace": "Nëmmen Titelen aus dësen Nummraim opzielen.",
        "apihelp-query+random-param-redirect": "Eng zoufälleg Viruleedung lueden aplaz vun enger zoufälleger Säit.",
        "apihelp-query+recentchanges-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
        "apihelp-query+recentchanges-example-simple": "Rezent Ännerunge weisen",
+       "apihelp-query+redirects-paramvalue-prop-title": "Titel vun all Viruleedung.",
        "apihelp-query+revisions-example-last5": "Déi lescht 5 Versioune vun der <kbd>Haaptsäit</kbd> kréien.",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "D'Nummer vun der Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Den Zäitstempel vun der Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "Bemierkung vum Benotzer fir dës Versioun.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Text vun der Versioun.",
        "apihelp-query+search-param-namespace": "Nëmmen an dësen Nummräim sichen.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Setzt d'Zuel vun de Wierder vun der Säit derbäi.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der leschter Ännerung vun der Säit derbäi.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Titel vun all Säit.",
        "apihelp-query+usercontribs-description": "All Ännerunge vun engem Benotzer kréien.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun derÄnnerung derbäi.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
+       "apihelp-query+userinfo-param-prop": "Informatioune fir dranzesetzen:",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Lëscht vun allen Astellungen déi den aktuelle Benotzer gemaach huet.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Setzt d'Gesamtzuel vun den Ännerunge vum aktuelle Benotzer derbäi.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Setzt dem Benotzer säi richtegen Numm derbäi.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Setzt de Registréierungsdatum vum Benotzer derbäi.",
+       "apihelp-query+users-paramvalue-prop-rights": "Weist all Rechter déi all Benotzer huet.",
        "apihelp-query+watchlist-param-user": "Nëmmen Ännerunge vun dësem Benotzer opzielen.",
        "apihelp-query+watchlist-param-excludeuser": "Ännerunge vun dësem Benotzer net opzielen.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Setzt den Titel vun der Säit derbäi.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Setzt de Benotzer derbäi deen d'Ännerung gemaach huet.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Setzt d'Bemierkung vun der Ännerung derbäi.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Setzt den Zäitstempel vun der Ännerung derbäi.",
        "apihelp-query+watchlistraw-param-show": "Nëmmen Elementer opzielen déi dëse Critèren entspriechen.",
        "apihelp-query+watchlistraw-example-simple": "Säite vum aktuelle Benotzer senger Iwwerwaachungslëscht opzielen",
        "apihelp-revisiondelete-description": "Versioune läschen a restauréieren.",
index b24e5f6..b163c22 100644 (file)
@@ -1,8 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Papuass"
+                       "Papuass",
+                       "Silraks"
                ]
        },
+       "apihelp-block-description": "Bloķēt lietotāju",
+       "apihelp-block-param-reason": "Bloķēšanas iemesls:",
+       "apihelp-delete-description": "Dzēst lapas",
+       "apihelp-emailuser-description": "Sūtīt e-pastu lietotājam",
        "apihelp-userrights-param-userid": "Lietotāja ID:"
 }
index 9bf3e4e..80b41ed 100644 (file)
        "apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
        "apihelp-imagerotate-example-simple": "Сврти ја <kbd>Податотека:Пример.png</kbd> за <kbd>90</kbd> степени.",
        "apihelp-imagerotate-example-generator": "Сврти ги сите слики во <kbd>Категорија:Некоја</kbd> за <kbd>180</kbd> степени.",
-       "apihelp-import-description": "Увези страница од друго вики или XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
+       "apihelp-import-description": "Увези страница од друго вики или од XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
        "apihelp-import-param-summary": "Увези опис.",
        "apihelp-import-param-xml": "Подигната XML-податотека.",
        "apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
        "apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
        "apihelp-import-param-fullhistory": "За меѓујазични увози:: увези ја целата историја, а не само тековната верзија.",
        "apihelp-import-param-templates": "За меѓујазични увози: увези ги и сите вклучени шаблони.",
-       "apihelp-import-param-namespace": "Увези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80. Ð¡Ðµ Ð½Ð°Ð¼ÐµÑ\82нÑ\83ва Ð²Ñ\80з Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 <kbd>$1rootpage</kbd>.",
-       "apihelp-import-param-rootpage": "Увези ÐºÐ°ÐºÐ¾ Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава. Ð¡Ðµ Ð·Ð°Ð½ÐµÐ¼Ð°Ñ\80Ñ\83ва Ð°ÐºÐ¾ Ðµ Ñ\83кажан Ð¿Ð°Ñ\80амеÑ\82аÑ\80оÑ\82 <kbd>$1namespace</kbd>.",
+       "apihelp-import-param-namespace": "Увези Ð²Ð¾ Ð¾Ð²Ð¾Ñ\98 Ð¸Ð¼ÐµÐ½Ñ\81ки Ð¿Ñ\80оÑ\81Ñ\82оÑ\80. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <kbd>$1rootpage</kbd>.",
+       "apihelp-import-param-rootpage": "Увези ÐºÐ°ÐºÐ¾ Ð¿Ð¾Ñ\82Ñ\81Ñ\82Ñ\80аниÑ\86а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава. Ð\9dе Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ\81о <kbd>$1namespace</kbd>.",
        "apihelp-import-example-import": "Увези [[meta:Help:ParserFunctions]] во именскиот простор 100 со целата историја.",
        "apihelp-login-description": "Најавете се и добијте колачиња за заверка.\n\nВо случај кога ќе се најавите успешно, потребните колачиња ќе се придодадат кон заглавијата на HTTP-одѕивот. Во случај да не успеете да се најавите, понатамошните обиди може да се ограничат за да се ограничат нападите со автоматизирано погодување на лозинката.",
        "apihelp-login-param-name": "Корисничко име.",
        "apihelp-opensearch-param-redirects": "Како да се работи со пренасочувања:\n;return: Дај го самото пренасочување.\n;resolve: Дај ја целната страница. Може да даде помалку од $1limit резултати.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
        "apihelp-opensearch-param-format": "Формат на изводот.",
        "apihelp-opensearch-example-te": "Најди страници што почнуваат со <kbd>Те</kbd>.",
-       "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката „userjs-“ (предвиден за употреба од кориснички скрипти).",
+       "apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката <code>userjs-</code> (предвиден за употреба од кориснички скрипти).",
        "apihelp-options-param-reset": "Ги враќа поставките по основно.",
        "apihelp-options-param-resetkinds": "Писок на типови можности за повраток кога е зададена можноста <var>$1reset</var>.",
        "apihelp-options-param-change": "Список на промени во форматот name=value (на пр. skin=vector). Вредностите не треба да содржат исправени црти. Ако не зададете вредност (дури ни знак за равенство), на пр., можност|другаможност|..., ќе биде зададена вредноста на можноста по основно.",
        "apihelp-parse-param-summary": "Опис за расчленување.",
        "apihelp-parse-param-preview": "Расчлени во прегледен режим.",
        "apihelp-parse-param-sectionpreview": "Расчлени во прегледен режим на поднасловот (го овозможува и прегледниот режим).",
-       "apihelp-parse-param-disabletoc": "Ð\98зземи Ð³Ð¾ Ð¿Ñ\80еглед Ð½Ð° Ñ\81одÑ\80жинаÑ\82а Ð²Ð¾ Ð¸Ð·Ð²Ð¾Ð´ÐµÐ¾Ñ\82.",
+       "apihelp-parse-param-disabletoc": "Изземи го преглед на содржината во изводот.",
        "apihelp-parse-param-contentformat": "Формат на серијализацијата на содржината во вносниот текст. Важи само кога се користи со $1text.",
        "apihelp-parse-example-page": "Расчлени страница.",
        "apihelp-parse-example-text": "Расчлени викитекст.",
        "apihelp-query+alllinks-param-to": "Наслов на врската на која ќе запре набројувањето.",
        "apihelp-query+alllinks-param-prefix": "Пребарај ги сите сврзани наслови што почнуваат со оваа вредност.",
        "apihelp-query+alllinks-param-unique": "Прикажувај само различни поврзани наслови. Не може да се користи со <kbd>$1prop=ids</kbd>.\nКога се користи како создавач, дава целни страници наместо изворни.",
-       "apihelp-query+alllinks-param-prop": "Кои информации да се вклучат:\n;ids:Ја додава назнаката на страницата на која е врската (не може да се користи со <var>$1unique</var>).\n;title:Го додава насловот на врската.",
+       "apihelp-query+alllinks-param-prop": "Кои информации да се вклучат:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Ја додава назнаката на страницата на која е врската (не може да се користи со <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Го додава насловот на врската.",
        "apihelp-query+alllinks-param-namespace": "Именскиот простор што се набројува.",
        "apihelp-query+alllinks-param-limit": "Колку вкупно ставки да се дадат.",
        "apihelp-query+alllinks-param-dir": "Насока на исписот.",
        "apihelp-watch-example-watch": "Набљудувај ја страницата <kbd>Главна страница</kbd>.",
        "apihelp-watch-example-unwatch": "Отстрани ја страницата <kbd>Главна страница</kbd> од набљудуваните.",
        "apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
-       "apihelp-format-example-generic": "ФоÑ\80маÑ\82иÑ\80аÑ\98 Ð³Ð¾ Ñ\80езÑ\83лÑ\82аÑ\82оÑ\82 Ð¾Ð´ Ð±Ð°Ñ\80аÑ\9aеÑ\82о Ð²Ð¾ $1-Ñ\84оÑ\80маÑ\82",
+       "apihelp-format-example-generic": "Ð\94аÑ\98 Ð³Ð¾ Ð¸Ñ\81Ñ\85одоÑ\82 Ð¾Ð´ Ð±Ð°Ñ\80аÑ\9aеÑ\82о Ð²Ð¾ $1-Ñ\84оÑ\80маÑ\82.",
        "apihelp-dbg-description": "Давај го изводот во PHP-форматот <code>var_export()</code> .",
        "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот <code>var_export()</code> (подобрен испис во HTML).",
-       "apihelp-dump-description": "Давај го изводот во PHP-форматот <code>var_dump()</code>.",
-       "apihelp-dumpfm-description": "Давај го изводот во PHP-форматот <code>var_dump()</code> (подобрен испис во HTML).",
        "apihelp-json-description": "Давај го изводот во JSON-формат.",
        "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
        "apihelp-json-param-utf8": "Ако е укажано, ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> не е <kbd>1</kbd>.",
        "apihelp-rawfm-description": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
        "apihelp-txt-description": "Давај го изводот во PHP-форматот <code>print_r()</code>.",
        "apihelp-txtfm-description": "Давај го изводот во PHP-форматот <code>print_r()</code> (подобрен испис во HTML).",
-       "apihelp-wddx-description": "Давај го изводот во WDDX-формат.",
-       "apihelp-wddxfm-description": "Давај го изводот во WDDX-формат (подобрен испис во HTML).",
        "apihelp-xml-description": "Давај го изводот во XML-формат.",
        "apihelp-xml-param-xslt": "Ако е укажано, ја додава именуваната страница како XSL-стилска страница. Вредноста мора да биде наслов во именскиот простор „{{ns:mediawiki}}“ што ќе завршува со <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
diff --git a/includes/api/i18n/mr.json b/includes/api/i18n/mr.json
new file mode 100644 (file)
index 0000000..30cf75b
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Rahuldeshmukh101"
+               ]
+       },
+       "apihelp-main-param-action": "कोणति कारवाई करायचि",
+       "apihelp-main-param-curtimestamp": "निकालात आताच्या वेळेचि नोन्द घ्या",
+       "apihelp-block-description": "सदस्यास ब्यान करा",
+       "apihelp-block-param-user": "सदस्याचे नाव, अंक पत्त्ता अथवा अंकपत्यांनचि मालिका प्रतिबांधित करा"
+}
index c4ade1a..11c0a32 100644 (file)
@@ -36,6 +36,7 @@
        "apihelp-emailuser-param-ccme": "Me mandar una còpia d'aqueste corrièr electronic.",
        "apihelp-expandtemplates-param-title": "Títol de la pagina.",
        "apihelp-expandtemplates-param-text": "Wikitèxte de convertir.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Lo wikitèxte desvolopat.",
        "apihelp-feedcontributions-param-feedformat": "Lo format del flux.",
        "apihelp-feedcontributions-param-year": "A partir de l’annada (e mai recent) :",
        "apihelp-feedcontributions-param-month": "A partir del mes (e mai recent) :",
        "apihelp-parse-example-page": "Analisar una pagina.",
        "apihelp-parse-example-text": "Analisar lo wikitèxte.",
        "apihelp-parse-example-summary": "Analisar un resumit.",
+       "apihelp-patrol-description": "Patrolhar una pagina o una revision.",
        "apihelp-protect-example-protect": "Protegir una pagina",
        "apihelp-query-param-list": "Quinas listas obténer.",
        "apihelp-query-param-meta": "Quinas metadonadas obténer.",
+       "apihelp-query+allcategories-description": "Enumerar totas las categorias.",
        "apihelp-query+alldeletedrevisions-param-from": "Aviar la lista a aqueste títol.",
        "apihelp-query+allimages-param-sort": "Proprietat per la quala cal triar.",
        "apihelp-query+blocks-example-simple": "Listar los blocatges",
-       "apihelp-query+blocks-example-users": "Listar los blocatges dels utilizaires <kbd>Alice</kbd> e <kbd>Bob</kbd>."
+       "apihelp-query+blocks-example-users": "Listar los blocatges dels utilizaires <kbd>Alice</kbd> e <kbd>Bob</kbd>.",
+       "apihelp-query+imageinfo-param-urlheight": "Similar a $1urlwidth.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Tèxte de la revision.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Balisas de la revision.",
+       "apihelp-tag-param-reason": "Motiu de la modificacion.",
+       "apihelp-unblock-description": "Desblocar un utilizaire.",
+       "apihelp-unblock-param-reason": "Motiu del desblocatge.",
+       "apihelp-unblock-example-id": "Levar lo blocatge d’ID #<kbd>105</kbd>.",
+       "apihelp-userrights-param-user": "Nom d'utilizaire.",
+       "apihelp-userrights-param-userid": "ID de l'utilizaire.",
+       "api-help-main-header": "Modul principal",
+       "api-help-source": "Font : $1",
+       "api-help-source-unknown": "Font : <span class=\"apihelp-unknown\">desconeguda</span>",
+       "api-help-license": "Licéncia : [[$1|$2]]",
+       "api-help-license-noname": "Licéncia : [[$1|Veire lo ligam]]",
+       "api-help-license-unknown": "Licéncia : <span class=\"apihelp-unknown\">desconeguda</span>",
+       "api-help-parameters": "{{PLURAL:$1|Paramètre|Paramètres}} :",
+       "api-help-param-deprecated": "Obsolet.",
+       "api-help-datatypes-header": "Tipe de donadas",
+       "api-help-param-default": "Per defaut : $1",
+       "api-credits-header": "Mercejaments"
 }
diff --git a/includes/api/i18n/olo.json b/includes/api/i18n/olo.json
new file mode 100644 (file)
index 0000000..99aef3f
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mashoi7"
+               ]
+       },
+       "apihelp-createaccount-param-name": "Käyttäitunnus.",
+       "apihelp-delete-description": "Ota sivu iäre.",
+       "apihelp-login-param-name": "Käyttäitunnus.",
+       "apihelp-login-param-password": "Peittosana.",
+       "apihelp-login-example-login": "Kirjuttai."
+}
index bf04b57..d2ebb3a 100644 (file)
@@ -9,7 +9,9 @@
                        "Macofe",
                        "Pio387",
                        "Peter Bowman",
-                       "Darellur"
+                       "Darellur",
+                       "The Polish",
+                       "Matma Rex"
                ]
        },
        "apihelp-main-param-action": "Wybierz akcję do wykonania.",
@@ -77,6 +79,7 @@
        "apihelp-expandtemplates-param-title": "Tytuł strony.",
        "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Rozszerzony wikitext.",
+       "apihelp-feedcontributions-param-feedformat": "Format danych wyjściowych.",
        "apihelp-feedcontributions-param-year": "Od roku (i wcześniej).",
        "apihelp-feedcontributions-param-month": "Od miesiąca (i wcześniej).",
        "apihelp-feedcontributions-param-deletedonly": "Pokazuj tylko usunięty wkład.",
        "apihelp-opensearch-param-format": "Format danych wyjściowych.",
        "apihelp-opensearch-example-te": "Znajdź strony zaczynające się od <kbd>Te</kbd>.",
        "apihelp-options-param-reset": "Resetuj preferencje do domyślnych.",
+       "apihelp-options-param-optionname": "Nazwa opcji, która powinna być ustawiona na wartość <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>, może zawierać znaki pionowej kreski.",
        "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
        "apihelp-paraminfo-description": "Zdobądź informacje o modułach API.",
        "apihelp-paraminfo-param-helpformat": "Format tekstów pomocnicznych.",
        "apihelp-parse-param-summary": "Powód do analizy.",
        "apihelp-parse-paramvalue-prop-wikitext": "Zwróć oryginalny wikitext, który został przeanalizowany.",
        "apihelp-parse-param-preview": "Analizuj w trybie podglądu.",
-       "apihelp-parse-param-disabletoc": "Wyłącz spis treści na wyjściu.",
+       "apihelp-parse-param-disabletoc": "Pomiń spis treści na wyjściu.",
        "apihelp-parse-example-page": "Przeanalizuj stronę.",
        "apihelp-parse-example-text": "Analizuj wikitext.",
        "apihelp-parse-example-summary": "Analizuj powód.",
        "apihelp-patrol-example-revid": "Sprawdź edycje.",
        "apihelp-protect-description": "Zmień poziom zabezpieczenia strony.",
        "apihelp-protect-param-reason": "Powód zabezpieczania/odbezpieczania.",
-       "apihelp-protect-param-cascade": "Włacz ochronę kaskadową (chronione są wszystkie strony zawarte w tej stronie). Ignorowane jeśli wszystkie poziomy ochrony nie wspierają kaskadowania.",
+       "apihelp-protect-param-cascade": "Włącz ochronę kaskadową (chronione są wszystkie osadzone szablony i obrazki na tej stronie). Ignorowane, jeśli żaden z danych poziomów ochrony nie wspiera kaskadowania.",
        "apihelp-protect-example-protect": "Zabezpiecz stronę",
        "apihelp-protect-example-unprotect": "Odbezpiecz stronę ustawiając ograniczenia na <kbd>wszystkie</kbd>.",
        "apihelp-protect-example-unprotect2": "Odbezpiecz stronę ustawiając brak ograniczeń.",
        "apihelp-query+embeddedin-param-filterredir": "Jaki filtrować przekierowania.",
        "apihelp-query+extlinks-param-limit": "Ilość linków do zwrócenia.",
        "apihelp-query+exturlusage-param-limit": "Ilość stron do zwrócenia.",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "apihelp-query+filerepoinfo-example-simple": "Uzyskaj informacje na temat repozytoriów plików.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Nazwa każdej strony.",
        "apihelp-query+fileusage-param-limit": "Ilość do zwrócenia.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Łączna ilość stron do zwrócenia.",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
        "apihelp-query+links-param-limit": "Ilość linków do zwrócenia.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Nazwa każdej strony.",
        "apihelp-query+linkshere-param-limit": "Ilość do zwrócenia.",
        "apihelp-query+logevents-description": "Pobierz eventy z logu.",
        "apihelp-query+logevents-example-simple": "Lista ostatnich zarejestrowanych zdarzeń.",
+       "apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
        "apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
        "apihelp-query+prefixsearch-param-limit": "Maksymalna liczba zwracanych wyników.",
        "apihelp-query+recentchanges-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+recentchanges-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Nazwa każdego przekierowania.",
        "apihelp-query+redirects-param-limit": "Ile przekierowań zwrócić.",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "Identyfikator wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-flags": "Znaczniki wersji (drobne).",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Znacznik czasu wersji.",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Tekst wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Znaczniki wersji.",
        "apihelp-query+revisions+base-param-limit": "Ograniczenie na liczbę wersji, które będą zwrócone.",
        "apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
        "apihelp-query+search-example-simple": "Szukaj <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista zarejestrowanych przestrzeni nazw i ich nazwy kanoniczne.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista zarejestrowanych aliasów przestrzeni nazw.",
        "apihelp-query+siteinfo-example-simple": "Pobierz informacje o stronie.",
        "apihelp-query+tags-description": "Lista zmian tagów.",
        "apihelp-query+tags-param-limit": "Maksymalna liczba tagów do wyświetlenia.",
        "apihelp-query+templates-param-limit": "Ile szablonów zwrócić?",
        "apihelp-query+transcludedin-param-limit": "Ile zwrócić.",
        "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Dodaje tytuł strony.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Dodaje użytkownika, który wykonał edycję.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Dodaje komentarz do edycji.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Dodaje znacznik czasu edycji.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Dodaje starą i nową długość strony.",
        "apihelp-tag-param-reason": "Powód zmiany.",
        "apihelp-unblock-param-reason": "Powód odblokowania.",
        "apihelp-undelete-param-reason": "Powód przywracania.",
        "api-help-param-type-boolean": "Typ: wartość logiczna ([[Special:ApiHelp/main#main/datatypes|szczegóły]])",
        "api-help-param-type-timestamp": "Typ: {{PLURAL:$1|1=znacznik czasu|2=lista znaczników czasu}} ([[Special:ApiHelp/main#main/datatypes|dozwolone formaty]])",
        "api-help-param-type-user": "Typ: {{PLURAL:$1|1=nazwa użytkownika|2=lista nazw uzytkowników}}",
-       "api-help-param-list": "{{PLURAL:$1|1=Jedna wartość|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna z następujących wartość|2=Wartości (oddziel za pomocą <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-limit": "Nie więcej niż $1 dozwolone.",
        "api-help-param-limit2": "Nie więcej niż $1 ($2 dla botów) dozwolone.",
-       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość|2=Wartości}} musza być mniejsze niż $2.",
-       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być nie większa niż $3.",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Wartość musi być nie mniejsza|2=Wartości muszą być nie mniejsze}} niż $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Wartość musi być nie większa|2=Wartości muszą być nie większe}} niż $3.",
        "api-help-param-integer-minmax": "{{PLURAL:$1|1=Wartość musi|2=Wartości muszą}} być pomiędzy $2 a $3.",
        "api-help-param-multi-separate": "Oddziel wartości za pomocą <kbd>|</kbd>.",
        "api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
index 49df26b..9d24281 100644 (file)
@@ -9,10 +9,19 @@
        "apihelp-block-param-reason": "د بنديز سبب.",
        "apihelp-createaccount-param-name": "کارن-نوم.",
        "apihelp-delete-description": "يو مخ ړنگول.",
+       "apihelp-edit-description": "مخونه جوړول او سمول.",
        "apihelp-edit-param-text": "مخ مېنځپانگه.",
+       "apihelp-edit-param-minor": "وړوکی سمون.",
        "apihelp-edit-example-edit": "يو مخ سمول.",
        "apihelp-emailuser-description": "کارن ته برېښليک لېږل.",
        "apihelp-expandtemplates-param-title": "د مخ سرليک.",
+       "apihelp-feedrecentchanges-param-hideminor": "وړوکي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidebots": "د روباټونو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hideanons": "د ورکنومو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hideliu": "د ثبت شويو کارنانو لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "څارل شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-hidemyself": "د اوسني کارن لخوا ترسره شوي بدلونونه پټول.",
+       "apihelp-feedrecentchanges-param-tagfilter": "د نښلن له مخې چاڼول.",
        "apihelp-login-param-name": "کارن نوم.",
        "apihelp-login-param-password": "پټنوم.",
        "apihelp-login-param-domain": "شپول (اختياري).",
        "apihelp-move-description": "يو مخ لېږدول.",
        "apihelp-query+search-example-simple": "د <kbd>مانا</kbd> پلټل.",
        "apihelp-query+search-example-text": "د <kbd>مانا</kbd> لپاره متنونه پلټل.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "د يو مخ سرليک ورگډوي.",
        "apihelp-tag-param-reason": "د بدلون سبب.",
+       "apihelp-unblock-param-reason": "د بنديز ليرې کولو سبب.",
        "apihelp-upload-param-watch": "مخ کتل.",
        "apihelp-upload-param-file": "د دوتنې مېنځپانگه.",
        "apihelp-userrights-param-user": "کارن نوم.",
        "apihelp-userrights-param-userid": "کارن پېژند.",
+       "apihelp-userrights-param-reason": "د بدلون سبب.",
        "api-help-source": "سرچينه: $1",
        "api-help-source-unknown": "سرچينه: <span class=\"apihelp-unknown\">ناجوت</span>",
        "api-help-license": "منښتليک: [[$1|$2]]",
index 82e05ff..9c1c623 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Fasouzafreitas",
-                       "Dianakc"
+                       "Dianakc",
+                       "Cainamarques"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
        "apihelp-parse-paramvalue-prop-sections": "Fornece as seções no wikitexto analisado.",
        "apihelp-parse-paramvalue-prop-headitems": "Fornece itens para colocar no <code>&lt;head&gt;</code> da página.",
        "apihelp-parse-paramvalue-prop-headhtml": "Fornece <code>&lt;head&gt;</code> analisado da página.",
-       "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos ResourceLoader usados na página.",
+       "apihelp-parse-paramvalue-prop-modules": "Fornece os módulos do ResourceLoader usados na página. Ou <kbd>jsconfigvars</kbd> ou <kbd>encodedjsconfigvars</kbd> deve ser solicitado conjuntamente com <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Fornece as variáveis de configuração JavaScript específicas da página como uma string JSON.",
        "apihelp-parse-paramvalue-prop-indicators": "Fornece o HTML de indicadores de ''status'' de página utilizados na página.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Fornece links interwiki no wikitexto analisado.",
        "apihelp-parse-paramvalue-prop-wikitext": "Fornece o wikitexto original que foi analisado.",
        "apihelp-parse-paramvalue-prop-properties": "Fornece várias propriedades definidas no wikitexto analisado.",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório limite de uma forma estruturada. Não informa dado, quando<var>$1disablepp</var> se definido.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório limite de uma forma estruturada. Não informa dado, quando<var>$1disablelimitreport</var> se definido.",
        "apihelp-parse-example-page": "Analisa uma página.",
        "apihelp-parse-example-text": "Analisa wikitexto.",
        "apihelp-parse-example-texttitle": "Analisa wikitexto, especificando o título da página.",
        "apihelp-query+imageusage-param-namespace": "O espaço nominal a se enumerar.",
        "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página.",
        "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto retornado por EditFormPreloadText.",
-       "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece a forma como o título da página é exibido atualmente.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece o modo como o título da página é exibido.",
        "apihelp-query+info-param-testactions": "Testa se o usuário atual pode executar determinadas ações na página.",
        "apihelp-query+info-example-simple": "Obtém informações sobre a página <kbd>Página principal</kbd>.",
        "apihelp-query+iwbacklinks-description": "Encontra todas as páginas que apontam para o determinado link interwiki.\n\nPode ser usado para encontrar todos os links com um prefixo, ou todos os links para um título (com um determinado prefixo). Usar nenhum parâmetro é efetivamente \"todos os links interwiki\".",
index 4325c14..9df9dc2 100644 (file)
@@ -18,8 +18,8 @@
        "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
        "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
        "apihelp-delete-description": "Eliminar uma página.",
-       "apihelp-delete-param-watch": "Adicionar esta página à lista de vigiadas.",
-       "apihelp-delete-param-unwatch": "Remover esta página da lista de vigiadas.",
+       "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador atual.",
+       "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador atual.",
        "apihelp-delete-example-simple": "Eliminar <kbd>Página Principal</kbd>.",
        "apihelp-disabled-description": "O módulo foi desativado.",
        "apihelp-edit-description": "Criar e editar páginas.",
@@ -41,7 +41,7 @@
        "apihelp-feedrecentchanges-param-hideminor": "Ocultar edições menores.",
        "apihelp-feedrecentchanges-param-hidebots": "Ocultar alterações feitas por robôs.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Ocultar alterações patrulhadas.",
-       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas por mim.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ocultar alterações feitas pelo utilizador atual.",
        "apihelp-feedrecentchanges-param-target": "Mostrar apenas mudanças em páginas afluentes a esta.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
        "apihelp-help-example-main": "Ajuda para o módulo principal",
@@ -96,6 +96,7 @@
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parâmetro é obrigatório.",
        "api-help-datatypes-header": "Tipo de dados",
+       "api-help-param-list": "{{PLURAL:$1|1=Um dos seguintes valores|2=Valores (separar com <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-multi-separate": "Separe os valores com <kbd>|</kbd>.",
        "api-help-param-default": "Padrão: $1",
        "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
index 70d54a6..f39f5d0 100644 (file)
@@ -10,7 +10,8 @@
                        "Anomie",
                        "Nemo bis",
                        "Amire80",
-                       "Siebrand"
+                       "Siebrand",
+                       "Purodha"
                ]
        },
        "apihelp-main-description": "{{doc-apihelp-description|main}}",
@@ -55,7 +56,7 @@
        "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
        "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
        "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
-       "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
+       "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}\n{{Identical|Username}}",
        "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
        "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
        "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
        "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
        "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
        "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
-       "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
+       "apihelp-login-example-login": "{{doc-apihelp-example|login}}\n{{Identical|Log in}}",
        "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
        "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
        "apihelp-managetags-description": "{{doc-apihelp-description|managetags}}",
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
        "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
        "apihelp-parse-param-sectiontitle": "{{doc-apihelp-param|parse|sectiontitle}}",
+       "apihelp-parse-param-disablelimitreport": "{{doc-apihelp-param|parse|disablelimitreport}}",
        "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
        "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+       "apihelp-parse-param-disabletidy": "{{doc-apihelp-param|parse|disabletidy}}",
        "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
        "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
        "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
        "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
        "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
        "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
-       "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
+       "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop|paramvalues=1}}",
+       "apihelp-query+allcategories-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+allcategories|prop|size}}",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "{{doc-apihelp-paramvalue|query+allcategories|prop|hidden}}",
        "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
        "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
        "apihelp-query+alldeletedrevisions-description": "{{doc-apihelp-description|query+alldeletedrevisions}}",
        "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
        "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
        "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
-       "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop}}",
+       "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop|paramvalues=1}}",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "{{doc-apihelp-param|query+allfileusages|prop|ids}}",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "{{doc-apihelp-param|query+allfileusages|prop|title}}",
        "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
        "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
        "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
        "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
        "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
        "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
-       "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop}}",
+       "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop|paramvalues=1}}",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+alllinks|prop|ids}}",
+       "apihelp-query+alllinks-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+alllinks|prop|title}}",
        "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
        "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
        "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
        "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
        "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
        "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
-       "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop}}",
+       "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop|paramvalues=1}}",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "{{doc-apihelp-param|query+allredirects|prop|ids}}",
+       "apihelp-query+allredirects-paramvalue-prop-title": "{{doc-apihelp-param|query+allredirects|prop|title}}",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "{{doc-apihelp-param|query+allredirects|prop|fragment}}",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "{{doc-apihelp-param|query+allredirects|prop|interwiki}}",
        "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
        "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
        "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
        "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
        "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
        "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
-       "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop}}",
+       "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop|paramvalues=1}}",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+alltransclusions|prop|ids}}",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+alltransclusions|prop|title}}",
        "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
        "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
        "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
        "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
        "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
        "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
-       "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop}}",
+       "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop|paramvalues=1}}",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+allusers|prop|blockinfo}}",
+       "apihelp-query+allusers-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+allusers|prop|groups}}",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+allusers|prop|implicitgroups}}",
+       "apihelp-query+allusers-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+allusers|prop|rights}}",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+allusers|prop|editcount}}",
+       "apihelp-query+allusers-paramvalue-prop-registration": "{{doc-apihelp-paramvalue|query+allusers|prop|registration}}",
        "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
        "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
        "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
        "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
        "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
        "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
-       "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+       "apihelp-query+backlinks-param-redirect": "\"Is halved\" means that the limits are half of the usual ones.\n----\n{{doc-apihelp-param|query+backlinks|redirect}}",
        "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
        "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
        "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
        "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
        "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
        "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
-       "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop}}",
+       "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop|paramvalues=1}}",
+       "apihelp-query+blocks-paramvalue-prop-id": "{{doc-apihelp-paramvalue|query+blocks|prop|id}}",
+       "apihelp-query+blocks-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+blocks|prop|user}}",
+       "apihelp-query+blocks-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+blocks|prop|userid}}",
+       "apihelp-query+blocks-paramvalue-prop-by": "{{doc-apihelp-paramvalue|query+blocks|prop|by}}",
+       "apihelp-query+blocks-paramvalue-prop-byid": "{{doc-apihelp-paramvalue|query+blocks|prop|byid}}",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+blocks|prop|timestamp}}",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "{{doc-apihelp-paramvalue|query+blocks|prop|expiry}}",
+       "apihelp-query+blocks-paramvalue-prop-reason": "{{doc-apihelp-paramvalue|query+blocks|prop|reason}}",
+       "apihelp-query+blocks-paramvalue-prop-range": "{{doc-apihelp-paramvalue|query+blocks|prop|range}}",
+       "apihelp-query+blocks-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+blocks|prop|flags}}",
        "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
        "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
        "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
        "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
-       "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
+       "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop|paramvalues=1}}",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "{{doc-apihelp-paramvalue|query+categories|prop|sortkey}}",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+categories|prop|timestamp}}",
+       "apihelp-query+categories-paramvalue-prop-hidden": "{{doc-apihelp-paramvalue|query+categories|prop|hidden}}",
        "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
        "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
        "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
        "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
        "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
        "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
-       "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop}}",
+       "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop|paramvalues=1}}",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "{{doc-apihelp-param|query+categorymembers|prop|ids}}",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "{{doc-apihelp-param|query+categorymembers|prop|title}}",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "{{doc-apihelp-param|query+categorymembers|prop|sortkey}}",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "{{doc-apihelp-param|query+categorymembers|prop|sortkeyprefix}}",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "{{doc-apihelp-param|query+categorymembers|prop|type}}",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "{{doc-apihelp-param|query+categorymembers|prop|timestamp}}",
        "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
        "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
        "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
        "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
        "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
        "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
-       "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
+       "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop|paramvalues=1}}",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+exturlusage|prop|ids}}",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+exturlusage|prop|title}}",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+exturlusage|prop|url}}",
        "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
        "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
        "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
        "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
        "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
        "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
-       "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
+       "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop|paramvalues=1}}",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+filearchive|prop|sha1}}",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+filearchive|prop|timestamp}}",
+       "apihelp-query+filearchive-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+filearchive|prop|user}}",
+       "apihelp-query+filearchive-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+filearchive|prop|size}}",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+filearchive|prop|dimensions}}",
+       "apihelp-query+filearchive-paramvalue-prop-description": "{{doc-apihelp-paramvalue|query+filearchive|prop|description}}",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "{{doc-apihelp-paramvalue|query+filearchive|prop|parseddescription}}",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "{{doc-apihelp-paramvalue|query+filearchive|prop|mime}}",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "{{doc-apihelp-paramvalue|query+filearchive|prop|mediatype}}",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "{{doc-apihelp-paramvalue|query+filearchive|prop|metadata}}",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "{{doc-apihelp-paramvalue|query+filearchive|prop|bitdepth}}",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "{{doc-apihelp-paramvalue|query+filearchive|prop|archivename}}",
        "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
        "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
        "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
        "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
        "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
-       "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
+       "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop|paramvalues=1}}",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+fileusage|prop|pageid}}",
+       "apihelp-query+fileusage-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+fileusage|prop|title}}",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+fileusage|prop|redirect}}",
        "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
        "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
        "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
        "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop|paramvalues=1}}",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+imageinfo|prop|timestamp}}",
        "apihelp-query+imageinfo-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+imageinfo|prop|user}}",
-       "apihelp-query+imageinfo-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Imageinfo returns information about file revisions (normally the last revision since <code>iilimit</code> defaults to 1). <code>userid</code> includes the ID of the user who made the (re)upload which created that revision. So there will be one user ID per imageinfo item; if you set the limit high enough, you will get all revisions of all files as separate imageinfo items.\n\n{{doc-apihelp-paramvalue|query+imageinfo|prop|userid}}",
        "apihelp-query+imageinfo-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|comment}}",
        "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+imageinfo|prop|parsedcomment}}",
-       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "A canonocal title is aa title formatted in the same way you would see it on the top of the page (localized namespace name, first letters capitalized, spaces instead of underscores). \n{{doc-apihelp-paramvalue|query+imageinfo|prop|canonicaltitle}}",
        "apihelp-query+imageinfo-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+imageinfo|prop|url}}",
        "apihelp-query+imageinfo-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+imageinfo|prop|size}}",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "{{doc-apihelp-paramvalue|query+imageinfo|prop|dimensions}}",
        "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
        "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
        "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
-       "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop}}",
+       "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop|paramvalues=1}}",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "{{doc-apihelp-paramvalue|query+iwbacklinks|prop|iwprefix}}",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "{{doc-apihelp-paramvalue|query+iwbacklinks|prop|iwtitle}}",
        "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
        "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
        "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
        "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
        "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
-       "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
+       "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop|paramvalues=1}}",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+iwlinks|prop|url}}",
        "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
        "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
        "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
        "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
        "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
        "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
-       "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop}}",
+       "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop|paramvalues=1}}",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "{{doc-apihelp-param|query+langbacklinks|prop|lllang}}",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "{{doc-apihelp-param|query+langbacklinks|prop|lltitle}}",
        "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
        "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
        "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
        "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
        "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
        "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
-       "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop}}",
+       "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop|paramvalues=1}}",
+       "apihelp-query+langlinks-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+langlinks|prop|url}}",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "{{doc-apihelp-paramvalue|query+langlinks|prop|langname}}",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "{{doc-apihelp-paramvalue|query+langlinks|prop|autonym}}",
        "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
        "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
        "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
        "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
        "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
        "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
-       "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
+       "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop|paramvalues=1}}",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+linkshere|prop|pageid}}",
+       "apihelp-query+linkshere-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+linkshere|prop|title}}",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+linkshere|prop|redirect}}",
        "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
        "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
        "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
        "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
        "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
        "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
-       "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
+       "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop|paramvalues=1}}",
+       "apihelp-query+logevents-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+logevents|prop|ids}}",
+       "apihelp-query+logevents-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+logevents|prop|title}}",
+       "apihelp-query+logevents-paramvalue-prop-type": "{{doc-apihelp-paramvalue|query+logevents|prop|type}}",
+       "apihelp-query+logevents-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+logevents|prop|user}}",
+       "apihelp-query+logevents-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+logevents|prop|userid}}",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+logevents|prop|timestamp}}",
+       "apihelp-query+logevents-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+logevents|prop|comment}}",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+logevents|prop|parsedcomment}}",
+       "apihelp-query+logevents-paramvalue-prop-details": "{{doc-apihelp-paramvalue|query+logevents|prop|details}}",
+       "apihelp-query+logevents-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+logevents|prop|tags}}",
        "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
        "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
        "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
        "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
        "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
        "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
-       "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
+       "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop|paramvalues=1}}",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "{{doc-apihelp-param|query+pageswithprop|prop|ids}}",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "{{doc-apihelp-param|query+pageswithprop|prop|title}}",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "{{doc-apihelp-param|query+pageswithprop|prop|value}}",
        "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
        "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
        "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
        "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
        "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
        "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
-       "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
+       "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop|paramvalues=1}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|timestamp}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|user}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|userid}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|comment}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|parsedcomment}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|expiry}}",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "{{doc-apihelp-paramvalue|query+protectedtitles|prop|level}}",
        "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
        "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
        "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
        "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
        "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
        "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+       "apihelp-query+random-param-filterredir": "{{apihelp-param|query+random|filterredir}}",
        "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
        "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
        "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
        "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
        "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
        "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
-       "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop}}",
+       "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop|paramvalues=1}}",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "{{doc-apihelp-paramvalue|query+recentchanges|prop|user}}",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "{{doc-apihelp-paramvalue|query+recentchanges|prop|userid}}",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+recentchanges|prop|comment}}",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+recentchanges|prop|parsedcomment}}",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+recentchanges|prop|flags}}",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+recentchanges|prop|timestamp}}",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+recentchanges|prop|title}}",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+recentchanges|prop|ids}}",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "{{doc-apihelp-paramvalue|query+recentchanges|prop|sizes}}",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+recentchanges|prop|redirect}}",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "{{doc-apihelp-paramvalue|query+recentchanges|prop|patrolled}}",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "{{doc-apihelp-paramvalue|query+recentchanges|prop|loginfo}}",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+recentchanges|prop|tags}}",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "{{doc-apihelp-paramvalue|query+recentchanges|prop|sha1}}",
        "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
        "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
        "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
        "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
        "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
        "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
-       "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
+       "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop|paramvalues=1}}",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+redirects|prop|pageid}}",
+       "apihelp-query+redirects-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+redirects|prop|title}}",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "{{doc-apihelp-paramvalue|query+redirects|prop|fragment}}",
        "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
        "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
        "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
        "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
        "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
        "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
-       "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop}}",
+       "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop|paramvalues=1}}",
+       "apihelp-query+search-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+search|prop|size}}",
+       "apihelp-query+search-paramvalue-prop-wordcount": "{{doc-apihelp-paramvalue|query+search|prop|wordcount}}",
+       "apihelp-query+search-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+search|prop|timestamp}}",
+       "apihelp-query+search-paramvalue-prop-snippet": "{{doc-apihelp-paramvalue|query+search|prop|snippet}}",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "{{doc-apihelp-paramvalue|query+search|prop|titlesnippet}}",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "{{doc-apihelp-paramvalue|query+search|prop|redirectsnippet}}",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "{{doc-apihelp-paramvalue|query+search|prop|redirecttitle}}",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "{{doc-apihelp-paramvalue|query+search|prop|sectionsnippet}}",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "{{doc-apihelp-paramvalue|query+search|prop|sectiontitle}}",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "{{doc-apihelp-paramvalue|query+search|prop|categorysnippet}}",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "{{doc-apihelp-paramvalue|query+search|prop|isfilematch}}",
+       "apihelp-query+search-paramvalue-prop-score": "{{doc-apihelp-paramvalue|query+search|prop|score}}",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "{{doc-apihelp-paramvalue|query+search|prop|hasrelated}}",
        "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
        "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
        "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
        "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
        "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
-       "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
+       "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop|paramvalues=1}}",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "{{doc-apihelp-paramvalue|query+siteinfo|prop|general}}",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "{{doc-apihelp-paramvalue|query+siteinfo|prop|namespaces}}",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "{{doc-apihelp-paramvalue|query+siteinfo|prop|namespacealiases}}",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "{{doc-apihelp-paramvalue|query+siteinfo|prop|specialpagealiases}}",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "{{doc-apihelp-paramvalue|query+siteinfo|prop|magicwords}}",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "{{doc-apihelp-paramvalue|query+siteinfo|prop|statistics}}",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "{{doc-apihelp-paramvalue|query+siteinfo|prop|interwikimap}}",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "{{doc-apihelp-paramvalue|query+siteinfo|prop|dbrepllag}}",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "{{doc-apihelp-paramvalue|query+siteinfo|prop|usergroups}}",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "{{doc-apihelp-paramvalue|query+siteinfo|prop|libraries}}",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|extensions}}",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|fileextensions}}",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "{{doc-apihelp-paramvalue|query+siteinfo|prop|rightsinfo}}",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|restrictions}}",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "{{doc-apihelp-paramvalue|query+siteinfo|prop|languages}}",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "{{doc-apihelp-paramvalue|query+siteinfo|prop|skins}}",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "{{doc-apihelp-paramvalue|query+siteinfo|prop|extensiontags}}",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "{{doc-apihelp-paramvalue|query+siteinfo|prop|functionhooks}}",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "{{doc-apihelp-paramvalue|query+siteinfo|prop|showhooks}}",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "{{doc-apihelp-paramvalue|query+siteinfo|prop|variables}}",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "{{doc-apihelp-paramvalue|query+siteinfo|prop|protocols}}",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "{{doc-apihelp-paramvalue|query+siteinfo|prop|defaultoptions}}",
        "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
        "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
        "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
        "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
        "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
        "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
-       "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
+       "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop|paramvalues=1}}",
+       "apihelp-query+tags-paramvalue-prop-name": "{{doc-apihelp-paramvalue|query+tags|prop|name}}",
+       "apihelp-query+tags-paramvalue-prop-displayname": "{{doc-apihelp-paramvalue|query+tags|prop|displayname}}",
+       "apihelp-query+tags-paramvalue-prop-description": "{{doc-apihelp-paramvalue|query+tags|prop|description}}",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "{{doc-apihelp-paramvalue|query+tags|prop|hitcount}}",
+       "apihelp-query+tags-paramvalue-prop-defined": "{{doc-apihelp-paramvalue|query+tags|prop|defined}}",
+       "apihelp-query+tags-paramvalue-prop-source": "{{doc-apihelp-paramvalue|query+tags|prop|source}}",
+       "apihelp-query+tags-paramvalue-prop-active": "{{doc-apihelp-paramvalue|query+tags|prop|active}}",
        "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
        "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
        "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
        "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
        "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
        "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
-       "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
+       "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop|paramvalues=1}}",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "{{doc-apihelp-paramvalue|query+transcludedin|prop|pageid}}",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+transcludedin|prop|title}}",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "{{doc-apihelp-paramvalue|query+transcludedin|prop|redirect}}",
        "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
        "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
        "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
        "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
        "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
        "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
-       "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop}}",
+       "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop|paramvalues=1}}",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "{{doc-apihelp-paramvalue|query+usercontribs|prop|ids}}",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "{{doc-apihelp-paramvalue|query+usercontribs|prop|title}}",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "{{doc-apihelp-paramvalue|query+usercontribs|prop|timestamp}}",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "{{doc-apihelp-paramvalue|query+usercontribs|prop|comment}}",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "{{doc-apihelp-paramvalue|query+usercontribs|prop|parsedcomment}}",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "{{doc-apihelp-paramvalue|query+usercontribs|prop|size}}",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "{{doc-apihelp-paramvalue|query+usercontribs|prop|sizediff}}",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "{{doc-apihelp-paramvalue|query+usercontribs|prop|flags}}",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "{{doc-apihelp-paramvalue|query+usercontribs|prop|patrolled}}",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "{{doc-apihelp-paramvalue|query+usercontribs|prop|tags}}",
        "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
        "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
        "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
        "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
        "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
        "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
-       "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n* $2 - Return value when there are more unread pages.|paramstart=3}}",
+       "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|paramvalues=1}}",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+userinfo|prop|blockinfo}}",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "{{doc-apihelp-paramvalue|query+userinfo|prop|hasmsg}}",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+userinfo|prop|groups}}",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|implicitgroups}}",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+userinfo|prop|rights}}",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "{{doc-apihelp-paramvalue|query+userinfo|prop|changeablegroups}}",
+       "apihelp-query+userinfo-paramvalue-prop-options": "{{doc-apihelp-paramvalue|query+userinfo|prop|options}}",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "{{doc-apihelp-paramvalue|query+userinfo|prop|preferencestoken}}",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+userinfo|prop|editcount}}",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "{{doc-apihelp-paramvalue|query+userinfo|prop|ratelimits}}",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "{{doc-apihelp-paramvalue|query+userinfo|prop|realname}}",
+       "apihelp-query+userinfo-paramvalue-prop-email": "{{doc-apihelp-paramvalue|query+userinfo|prop|email}}",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "{{doc-apihelp-paramvalue|query+userinfo|prop|acceptlang}}",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "{{doc-apihelp-paramvalue|query+userinfo|prop|registrationdate}}",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "{{doc-apihelp-paramvalue|query+userinfo|prop|unreadcount|params=* $1 - Maximum value for the \"unreadcount\" property.\n* $2 - Return value when there are more unread pages.|paramstart=3}}",
        "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
        "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
        "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
-       "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
+       "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop|paramvalues=1}}",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "{{doc-apihelp-paramvalue|query+users|prop|blockinfo}}",
+       "apihelp-query+users-paramvalue-prop-groups": "{{doc-apihelp-paramvalue|query+users|prop|groups}}",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "{{doc-apihelp-paramvalue|query+users|prop|implicitgroups}}",
+       "apihelp-query+users-paramvalue-prop-rights": "{{doc-apihelp-paramvalue|query+users|prop|rights}}",
+       "apihelp-query+users-paramvalue-prop-editcount": "{{doc-apihelp-paramvalue|query+users|prop|editcount}}",
+       "apihelp-query+users-paramvalue-prop-registration": "{{doc-apihelp-paramvalue|query+users|prop|registration}}",
+       "apihelp-query+users-paramvalue-prop-emailable": "{{doc-apihelp-paramvalue|query+users|prop|emailable}}",
+       "apihelp-query+users-paramvalue-prop-gender": "{{doc-apihelp-paramvalue|query+users|prop|gender}}",
        "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
        "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
        "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
        "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
        "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
        "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
-       "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop}}",
+       "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop|paramvalues=1}}",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "{{doc-apihelp-paramvalue|query+watchlistraw|prop|changed}}",
        "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
        "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
        "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
index c4c7045..56b3f5b 100644 (file)
@@ -7,14 +7,16 @@
                        "Kaganer",
                        "Mariya",
                        "Дмитрий",
-                       "WindEwriX"
+                       "WindEwriX",
+                       "Ochilov",
+                       "Nzeemin"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
-       "apihelp-main-param-smaxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
-       "apihelp-main-param-maxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº <code>max-age</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-smaxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð½Ð°Ñ\87ение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
+       "apihelp-main-param-maxage": "УÑ\81Ñ\82анавливаеÑ\82 Ð·Ð½Ð°Ñ\87ение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Любое заданное здесь значение будет включено в ответ. Может быть использовано для различения запросов.",
        "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
@@ -26,6 +28,7 @@
        "apihelp-block-param-anononly": "Блокировать только анонимных пользователей (т. е. запретить анонимные правки для этого IP-адреса).",
        "apihelp-block-param-nocreate": "Запретить создание учётных записей.",
        "apihelp-block-param-watchuser": "Следить за страницей пользователя или IP-участника и страницей обсуждения.",
+       "apihelp-checktoken-param-type": "Тип маркера проходит тестирование.",
        "apihelp-checktoken-param-token": "токен для проверки",
        "apihelp-checktoken-param-maxtokenage": "Максимально допустимый возраст токена (в секундах).",
        "apihelp-checktoken-example-simple": "Проверить годность <kbd>csrf</kbd>-токена.",
        "apihelp-edit-param-notminor": "Значительное изменение (обычная, не «малая», правка).",
        "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
        "apihelp-edit-param-createonly": "Не редактировать страницу, если она уже существует.",
+       "apihelp-edit-param-nocreate": "Выбрасывать ошибку, если страницы не существует.",
        "apihelp-edit-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
        "apihelp-edit-param-unwatch": "Удалить страницу из списка наблюдения текущего пользователя.",
+       "apihelp-edit-param-redirect": "Автоматически разрешать редиректы.",
+       "apihelp-edit-param-contentformat": "Формат сериализации содержимого, используемый для ввода текста.",
        "apihelp-edit-example-edit": "Редактировать страницу",
        "apihelp-emailuser-description": "Письмо участнику",
        "apihelp-emailuser-param-target": "Адресат электронного письма",
        "apihelp-emailuser-example-email": "Отправить письмо пользователю <kbd>WikiSysop</kbd> с текстом <kbd>контентом</kbd>.",
        "apihelp-expandtemplates-description": "Разворачивает все шаблоны в wikitext.",
        "apihelp-expandtemplates-param-title": "Заголовок страницы.",
+       "apihelp-expandtemplates-param-text": "Викитекст для конвертирования",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Расширенный викитекст",
        "apihelp-expandtemplates-paramvalue-prop-parsetree": "Дерево разбора XML входных данных.",
        "apihelp-feedcontributions-param-year": "От года (и ранее).",
        "apihelp-feedcontributions-param-month": "От месяца (и ранее).",
+       "apihelp-feedcontributions-param-newonly": "Показывать только правки, являющиеся созданием страниц.",
+       "apihelp-feedcontributions-param-showsizediff": "Показать размер различия между версиями.",
+       "apihelp-feedrecentchanges-param-limit": "Максимальное число возвращаемых результатов.",
+       "apihelp-feedrecentchanges-param-from": "Показать изменения с тех пор.",
        "apihelp-feedrecentchanges-param-hideminor": "Скрыть малые правки.",
        "apihelp-feedrecentchanges-param-hidebots": "Скрыть правки ботов.",
+       "apihelp-feedrecentchanges-param-hideanons": "Скрыть изменения, внесённые анонимными участниками.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Скрыть отпатруллированные правки.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Скрыть изменения, сделанные текущим участником.",
        "apihelp-feedrecentchanges-param-tagfilter": "Фильтр по тегам.",
        "apihelp-feedrecentchanges-example-simple": "Список последних изменений.",
        "apihelp-feedrecentchanges-example-30days": "Показать последние изменения в течение 30 дней.",
        "apihelp-filerevert-param-comment": "Загрузить комментарий.",
        "apihelp-help-example-main": "Помощь по главному модулю.",
        "apihelp-help-example-recursive": "Вся справка в одном разделе.",
+       "apihelp-imagerotate-description": "Поворот одного или нескольких изображений.",
+       "apihelp-imagerotate-param-rotation": "На сколько градусов по часовой стрелке повернуть изображение.",
+       "apihelp-imagerotate-example-simple": "Повернуть <kbd>File:Example.png</kbd> на <kbd>90</kbd> градусов.",
+       "apihelp-imagerotate-example-generator": "Повернуть все изображения в <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусов.",
        "apihelp-import-param-summary": "Импорт итога",
        "apihelp-import-param-xml": "Загруженный XML-файл.",
        "apihelp-login-param-name": "Имя участника.",
        "apihelp-login-example-login": "Войти",
        "apihelp-logout-description": "Выйти и очистить данные сессии.",
        "apihelp-move-description": "Переместить страницу.",
+       "apihelp-move-param-reason": "Причина переименования.",
+       "apihelp-move-param-movetalk": "Переименовать страницу обсуждения, если она есть.",
+       "apihelp-move-param-movesubpages": "Переименовать подстраницы, если это применимо.",
+       "apihelp-move-param-noredirect": "Не создавать перенаправление.",
        "apihelp-move-param-ignorewarnings": "Игнорировать предупреждения",
        "apihelp-opensearch-param-search": "Строка поиска.",
+       "apihelp-opensearch-param-limit": "Максимальное число возвращаемых результатов.",
+       "apihelp-opensearch-param-namespace": "Пространства имён для поиска.",
+       "apihelp-options-example-reset": "Сбросить все настройки.",
+       "apihelp-paraminfo-param-helpformat": "Формат строк справки.",
        "apihelp-parse-example-page": "анализ страницы",
        "apihelp-parse-example-text": "Анализ wikitext.",
        "apihelp-protect-example-protect": "Защитить страницу.",
        "apihelp-purge-param-forcelinkupdate": "Обновление связей таблиц.",
        "apihelp-query-param-list": "Какие списки использовать",
        "apihelp-query-param-meta": "Какие метаданные использовать",
+       "apihelp-query+allcategories-description": "Перечислить все категории.",
+       "apihelp-query+allcategories-param-limit": "Сколько категорий вернуть.",
+       "apihelp-query+allcategories-param-prop": "Какие свойства получить:",
        "apihelp-query+alllinks-example-unique-generator": "Получить все названия-ссылки, выделяя пропущенные.",
        "apihelp-query+blocks-example-simple": "Список блоков.",
        "apihelp-query+categories-param-limit": "Сколько категорий на возврат.",
        "apihelp-none-description": "Нечего выводить",
        "apihelp-php-description": "Выходные данные в сериализованном формате PHP.",
        "apihelp-phpfm-description": "Выходные данные в сериализованном формате PHP (pretty-print in HTML).",
-       "apihelp-wddx-description": "Выходные данные в формате WDDX.",
        "apihelp-xml-description": "Выходные данные в формате XML.",
        "apihelp-yaml-description": "Выходные данные в формате yaml.",
        "api-format-title": "Результат MediaWiki API",
diff --git a/includes/api/i18n/shn.json b/includes/api/i18n/shn.json
new file mode 100644 (file)
index 0000000..a5804f6
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Saosukham"
+               ]
+       },
+       "apihelp-feedrecentchanges-param-hidecategorization": "သိူင်ႇပၢႆး ၽူႈၶဝ်ႈၸုမ်းလႅၵ်ႈလၢႆႈ"
+}
diff --git a/includes/api/i18n/sq.json b/includes/api/i18n/sq.json
new file mode 100644 (file)
index 0000000..34d55af
--- /dev/null
@@ -0,0 +1,12 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Ammartivari"
+               ]
+       },
+       "apihelp-block-param-reason": "Arsyeja për bllokim.",
+       "apihelp-move-param-reason": "Arsyeja për riemërtim.",
+       "apihelp-tag-param-reason": "Arsyeja për ndërrimin.",
+       "apihelp-unblock-description": "Zhblloko një përdorues.",
+       "apihelp-userrights-description": "Ndërro anëtarësinë e grupit e një përdoruesit."
+}
index 7784491..83f4d80 100644 (file)
        "apihelp-block-param-watchuser": "Bevaka användarens eller IP-adressens användarsida och diskussionssida",
        "apihelp-block-example-ip-simple": "Blockera IP-adressen <kbd>192.0.2.5</kbd> i tre dagar med motivationen <kbd>First strike</kbd>",
        "apihelp-block-example-user-complex": "Blockera användare <kbd>Vandal</kbd> på obegränsad tid med motivationen <kbd>Vandalism</kbd>, och förhindra kontoskapande och e-post.",
+       "apihelp-checktoken-param-type": "Typ av token som testas.",
+       "apihelp-checktoken-param-token": "Token att testa.",
+       "apihelp-checktoken-param-maxtokenage": "Högsta tillåtna åldern för token, i sekunder.",
+       "apihelp-checktoken-example-simple": "Testa giltigheten av en <kbd>csrf</kbd>-token.",
        "apihelp-clearhasmsg-description": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren.",
        "apihelp-clearhasmsg-example-1": "Rensa <code>hasmsg</code>-flaggan för den aktuella användaren",
        "apihelp-compare-description": "Hämta skillnaden mellan två sidor.\n\nEtt versionsnummer, en sidtitel, eller ett sid-Id för både \"from\" och \"to\" måste skickas.",
@@ -81,6 +85,7 @@
        "apihelp-edit-param-sectiontitle": "Rubriken för ett nytt avsnitt.",
        "apihelp-edit-param-text": "Sidans innehåll.",
        "apihelp-edit-param-summary": "Redigeringssammanfattning. Även avsnittets rubrik när $1section=new och $1sectiontitle inte anges.",
+       "apihelp-edit-param-tags": "Ändra taggar till att gälla för revideringen.",
        "apihelp-edit-param-minor": "Mindre redigering.",
        "apihelp-edit-param-notminor": "Icke-mindre redigering.",
        "apihelp-edit-param-bot": "Markera denna redigering som robotredigering.",
        "apihelp-expandtemplates-param-title": "Sidans rubrik.",
        "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
        "apihelp-expandtemplates-param-revid": "Revision ID, för <nowiki>{{REVISIONID}}</nowiki> och liknande variabler.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Den expanderade wikitexten.",
        "apihelp-expandtemplates-param-includecomments": "Om HTML-kommentarer skall inkluderas i utdata.",
        "apihelp-expandtemplates-param-generatexml": "Generera ett XML tolknings träd (ersatt av $1prop=parsetree).",
        "apihelp-expandtemplates-example-simple": "Expandera wikitexten <kbd><nowiki>{{Projekt:Sandbox}}</nowiki></kbd>.",
        "apihelp-help-example-main": "Hjälp för huvudmodul",
        "apihelp-help-example-recursive": "All hjälp på en sida",
        "apihelp-help-example-help": "Hjälp för själva hjälpmodulen",
+       "apihelp-help-example-query": "Hjälp för två frågeundermoduler.",
        "apihelp-imagerotate-description": "Rotera en eller flera bilder.",
        "apihelp-imagerotate-param-rotation": "Grader att rotera bild medurs.",
        "apihelp-imagerotate-example-simple": "Rotera <kbd>File:Example.png</kbd> med <kbd>90</kbd> grader",
        "apihelp-parse-param-summary": "Sammanfattning att tolka.",
        "apihelp-parse-param-page": "Tolka innehållet av denna sida. Kan inte användas tillsammans med <var>$1text</var> och <var>$1title</var>.",
        "apihelp-parse-param-pageid": "Tolka innehållet på denna sida. Åsidosätter <var>$1sidan</var>.",
+       "apihelp-parse-param-prop": "Vilka bitar av information att få:",
        "apihelp-parse-paramvalue-prop-categorieshtml": "Ger HTML-version av kategorierna.",
        "apihelp-parse-param-preview": "Tolka i preview-läget.",
        "apihelp-parse-example-page": "Tolka en sida.",
        "apihelp-query+backlinks-param-dir": "Riktningen att lista mot.",
        "apihelp-query+backlinks-example-simple": "Visa länkar till <kbd>huvudsidan<kbd>.",
        "apihelp-query+blocks-description": "Lista alla blockerade användare och IP-adresser.",
+       "apihelp-query+blocks-param-prop": "Vilka egenskaper att hämta.",
+       "apihelp-query+blocks-paramvalue-prop-id": "Lägger till ID på blocket.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Lägger till användarnamn för den blockerade användaren.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Lägger till användar-ID för den blockerade användaren.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Lägger till en tidsstämpel för när blockeringen gavs.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Lägger till en tidsstämpel för när blockeringen går ut.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Lägger till de skäl som angetts för blockeringen.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Lägger till intervallet av IP-adresser som berörs av blockeringen.",
        "apihelp-query+blocks-example-simple": "Lista blockeringar.",
        "apihelp-query+blocks-example-users": "Lista blockeringar av användarna <kbd>Alice</kbd> och <kbd>Bob</kbd>.",
        "apihelp-query+categories-description": "Lista alla kategorier sidorna tillhör.",
        "apihelp-query+categoryinfo-description": "Returnerar information om angivna kategorier.",
        "apihelp-query+categoryinfo-example-simple": "Hämta information om <kbd>Category:Foo</kbd> och <kbd>Category:Bar</kbd>.",
        "apihelp-query+categorymembers-description": "Lista alla sidor i en angiven kategori.",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Lägger till sid-ID.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Lägger till titeln och namnrymds-ID för sidan.",
        "apihelp-query+categorymembers-param-dir": "I vilken riktning att sortera.",
        "apihelp-query+categorymembers-param-startsortkey": "Använd $1starthexsortkey istället.",
        "apihelp-query+categorymembers-param-endsortkey": "Använd $1endhexsortkey istället.",
        "apihelp-query+embeddedin-param-dir": "Riktningen att lista mot.",
        "apihelp-query+embeddedin-param-limit": "Hur många sidor att returnera totalt.",
        "apihelp-query+filearchive-param-dir": "Riktningen att lista mot.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Lägger till tidsstämpel för den uppladdade versionen.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Lägger till användaren som laddade upp bildversionen.",
        "apihelp-query+filearchive-example-simple": "Visa en lista över alla borttagna filer.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Titel för varje sida.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Flagga om sidan är en omdirigering.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "Lägg till det användar-ID som laddade upp varje filversion.",
        "apihelp-query+images-param-dir": "Riktningen att lista mot.",
        "apihelp-query+imageusage-param-dir": "Riktningen att lista mot.",
        "api-help-parameters": "{{PLURAL:$1|Parameter|Parametrar}}:",
        "api-help-param-deprecated": "Föråldrad.",
        "api-help-param-required": "Denna parameter är obligatorisk.",
-       "api-help-param-list": "{{PLURAL:$1|1=ett värde|2=värden (separade med \"{{!}}\")}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Ett värde|2=Värden (separerade med <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Måste vara tom|Kan vara tom, eller $2}}",
        "api-help-param-limit": "Inte mer än $1 tillåts.",
        "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts."
index 528f0b6..194e10f 100644 (file)
                "authors": [
                        "Ата",
                        "A1",
-                       "Ahonc"
+                       "Ahonc",
+                       "Base",
+                       "Dars",
+                       "Umherirrender"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документація]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:API:Errors_and_warnings|API: Errors and warnings]].",
        "apihelp-main-param-action": "Яку дію виконати.",
        "apihelp-main-param-format": "Формат виводу.",
+       "apihelp-main-param-maxlag": "Максимальна затримка може використовуватися, коли MediaWiki інстальовано на реплікований кластер бази даних. Щоб зберегти дії, які спричиняють більшу затримку реплікації, цей параметр може змусити клієнт почекати, поки затримка реплікації не буде меншою за вказане значення. У випадку непомірної затримки, видається код помилки <samp>maxlag</samp> з повідомленням на зразок <samp>Очікування на $host: $lag секунд(и) затримки</samp>.<br />Див. [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] для детальнішої інформації.",
+       "apihelp-main-param-smaxage": "Встановити <code>s-maxage</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
+       "apihelp-main-param-maxage": "Встановити <code>max-age</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
+       "apihelp-main-param-assert": "Перевірити, що користувач увійшов у систему, якщо задано <kbd>user</kbd>, або має права бота, якщо задано <kbd>bot</kbd>.",
+       "apihelp-main-param-requestid": "Будь-яке значення, вказане тут, буде включене у відповідь. Може використовуватися, щоб відрізняти запити.",
+       "apihelp-main-param-servedby": "Включити в результати ім'я хоста, який обробив запит.",
+       "apihelp-main-param-curtimestamp": "Включити в результат поточну мітку часу.",
+       "apihelp-main-param-origin": "При доступі до API з використанням крос-доменного AJAX-запиту (CORS), задайте параметру значення вихідного домена. Він має бути включений у будь-який попередній запит і таким чином мусить бути частиною запиту URI (не тіла POST). Він повинен точно співпадати з одним з виходів у заголовку <code>Origin</code>, тобто бути заданим чимось на зразок <kbd>https://uk.wikipedia.org</kbd> або <kbd>https://meta.wikimedia.org</kbd>. Якщо цей параметр не співпадає з заголовком <code>Origin</code>, повернеться помилка 403. Якщо цей параметр співпадає з заголовком <code>Origin</code> і вихід знаходиться у білому списку, буде встановлено заголовок <code>Access-Control-Allow-Origin</code>.",
+       "apihelp-main-param-uselang": "Мова, що використовується для перекладу повідомлень. Список кодів можна знайти на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> з <kbd>siprop=languages</kbd> або вказати <kbd>user</kbd> на використання поточного налаштування мови користувача, або вказати <kbd>content</kbd> на використання мови вмісту цієї вікі.",
        "apihelp-block-description": "Заблокувати користувача.",
        "apihelp-block-param-user": "Ім'я користувача, IP-адреса або діапазон IP-адрес для блокування.",
+       "apihelp-block-param-expiry": "Закінчення часу. Може бути відносним (напр., <kbd>5 місяців</kbd> або <kbd>2 тижні</kbd>) чи абсолютним (напр., <kbd>2014-09-18T12:34:56Z</kbd>). Якщо вказано <kbd>infinite</kbd>, <kbd>indefinite</kbd> або <kbd>never</kbd>, блокування не закінчиться ніколи.",
        "apihelp-block-param-reason": "Причина блокування.",
+       "apihelp-block-param-anononly": "Блокувати тільки анонімних користувачів (тобто відключити можливість анонімних редагувань з цієї IP-адреси).",
        "apihelp-block-param-nocreate": "Заборонити створення облікових записів.",
+       "apihelp-block-param-autoblock": "Автоматично блокувати IP-адреси, які цей користувач використовував останніми, та будь-які наступні адреси, з яких він спробує зайти в систему.",
+       "apihelp-block-param-noemail": "Заборонити користувачеві надсилати електронні листи через вікі. (Вимагає права <code>blockemail</code>).",
+       "apihelp-block-param-hidename": "Приховати ім'я користувача з журналу блокувань. (Вимагає права <code>hideuser</code>).",
+       "apihelp-block-param-allowusertalk": "Дозволити користувачу редагувати власну сторінку обговорення (залежить від <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-reblock": "Якщо користувач уже заблокований, переписати наявне блокування.",
+       "apihelp-block-param-watchuser": "Спостерігати за сторінкою користувача чи IP-адреси і сторінкою обговорення.",
+       "apihelp-block-example-ip-simple": "Блокувати IP-адресу <kbd>192.0.2.5</kbd> на три дні з причиною <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Блокувати користувача<kbd>Vandal</kbd> на невизначений термін з причиною <kbd>Vandalism</kbd> і заборонити створення нових облікових записів та надсилання електронної пошти.",
+       "apihelp-checktoken-description": "Перевірити коректність токена з <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Тип токена, який тестується.",
+       "apihelp-checktoken-param-token": "Токен для тесту.",
+       "apihelp-checktoken-param-maxtokenage": "Максимально допустимий вік токена (у секундах).",
+       "apihelp-checktoken-example-simple": "Перевірити дійсність токена <kbd>csrf</kbd>.",
+       "apihelp-clearhasmsg-description": "Очищає прапорець <code>hasmsg</code> для поточного користувача.",
+       "apihelp-clearhasmsg-example-1": "Очистити прапорець <code>hasmsg</code> для поточного користувача.",
+       "apihelp-compare-description": "Отримати порівняння двох сторінок.\n\nПовинні бути номер версії, назва сторінки або ID сторінки для «від» і «до».",
+       "apihelp-compare-param-fromtitle": "Перший заголовок для порівняння.",
+       "apihelp-compare-param-fromid": "Перший ID сторінки для порівняння.",
+       "apihelp-compare-param-fromrev": "Перша версія для порівняння.",
+       "apihelp-compare-param-totitle": "Другий заголовок для порівняння.",
+       "apihelp-compare-param-toid": "Другий ID сторінки для порівняння.",
+       "apihelp-compare-param-torev": "Друга версія для порівняння.",
+       "apihelp-compare-example-1": "Створити порівняння версій 1 і 2.",
+       "apihelp-createaccount-description": "Створити новий обліковий запис користувача.",
        "apihelp-createaccount-param-name": "Ім'я користувача.",
        "apihelp-createaccount-param-password": "Пароль (ігнорується, якщо встановлено <var>$1mailpassword</var>).",
        "apihelp-createaccount-param-domain": "Домен для зовнішньої аутентифікації (опціонально).",
+       "apihelp-createaccount-param-token": "Токен створення облікового запису отримано у першому запиті.",
+       "apihelp-createaccount-param-email": "Адреса електронної пошти користувача (необов'язково).",
+       "apihelp-createaccount-param-realname": "Справжнє ім'я користувача (необов'язково).",
+       "apihelp-createaccount-param-mailpassword": "Якщо встановлено будь-яке значення, користувачеві буде надіслано випадковий пароль.",
+       "apihelp-createaccount-param-reason": "Необов'язкова причина для створення облікового запису, яка буде записана в журнал.",
+       "apihelp-createaccount-param-language": "Код мови для встановлення за замовчуванням для користувача (необов'язково, за замовчуванням — мова вмісту).",
+       "apihelp-createaccount-example-pass": "Створити користувача <kbd>testuser</kbd> з паролем <kbd>test123</kbd>.",
+       "apihelp-createaccount-example-mail": "Створити користувача <kbd>testmailuser</kbd> і надіслати на електронну пошту випадково-згенерований пароль.",
+       "apihelp-delete-description": "Вилучити сторінку.",
+       "apihelp-delete-param-title": "Назва сторінки для вилучення. Не можна використати разом з <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "ID-сторінки на вилучення. Не можна використати разом з <var>$1title</var>.",
+       "apihelp-delete-param-reason": "Причина вилучення. Якщо не вказана, буде використано автоматично-згенеровану.",
+       "apihelp-delete-param-watch": "Додати сторінку у список спостереження поточного користувача.",
+       "apihelp-delete-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+       "apihelp-delete-param-unwatch": "Вилучити сторінку зі списку спостереження поточного користувача.",
+       "apihelp-delete-param-oldimage": "Назва старого зображення на вилучення, як вказано у [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Вилучити <kbd>Main Page</kbd>.",
+       "apihelp-delete-example-reason": "Вилучити <kbd>Main Page</kbd> з причиною <kbd>Preparing for move</kbd>.",
+       "apihelp-disabled-description": "Цей модуль було вимкнено.",
+       "apihelp-edit-description": "Створювати і редагувати сторінки.",
+       "apihelp-edit-param-title": "Назва сторінки для редагування. Не можна використати разом з <var>$1pageid</var>.",
+       "apihelp-edit-param-pageid": "ID-сторінки для редагування. Не можна використати разом з <var>$1title</var>.",
+       "apihelp-edit-param-section": "Номер розділу. <kbd>0</kbd> для вступного розділу, <kbd>new</kbd> для нового розділу.",
+       "apihelp-edit-param-sectiontitle": "Назва нового розділу.",
+       "apihelp-edit-param-text": "Вміст сторінки.",
+       "apihelp-edit-param-summary": "Опис редагування. Також заголовок розділу, коли $1section=new і коли $1sectiontitle не вказано.",
+       "apihelp-edit-param-tags": "Змінити теги для версії.",
+       "apihelp-edit-param-minor": "Незначне редагування.",
+       "apihelp-edit-param-notminor": "Не «незначне» редагування.",
+       "apihelp-edit-param-bot": "Помітити редагування як зроблене ботом.",
+       "apihelp-edit-param-basetimestamp": "Мітка часу для основної версії, використовується для виявлення конфлікту редагувань. Може бути отримана через [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Мітка часу, з якого почався процес редагування, використовується для виявлення конфліктів редагувань. Відповідне значення можна отримати з допомогою <var>[[Special:ApiHelp/main|curtimestamp]]</var> на початку процесу редагування (напр., коли завантажується вміст сторінки для редагування).",
+       "apihelp-edit-param-recreate": "Відкинути будь-які помилки щодо цієї сторінки, вилучені нещодавно.",
+       "apihelp-edit-param-createonly": "Не редагувати сторінку, якщо вона вже існує.",
+       "apihelp-edit-param-nocreate": "Видати помилку, якщо сторінка не існує.",
+       "apihelp-edit-param-watch": "Додати сторінку у список спостереження поточного користувача.",
+       "apihelp-edit-param-unwatch": "Вилучити сторінку зі списку спостереження поточного користувача.",
+       "apihelp-edit-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+       "apihelp-edit-param-md5": "MD5-хеш у параметрі $1text або параметрах $1prependtext і $1appendtext разом. Якщо вказано, редагування буде зроблене, лише якщо хеш правильний.",
+       "apihelp-edit-param-prependtext": "Додати цей текст на початок сторінки. Замінює $1text.",
+       "apihelp-edit-param-appendtext": "Додати цей текст у кінець сторінки. Замінює $1text.\n\nЩоб додати новий розділ, замість цього параметра використайте $1section=new.",
+       "apihelp-edit-param-undo": "Скасувати цю версію. Замінює $1text, $1prependtext та $1appendtext.",
+       "apihelp-edit-param-undoafter": "Скасувати усі версії від $1undo до цієї. Якщо не вказано, просто скасувати одну версію.",
+       "apihelp-edit-param-redirect": "Автоматично виправляти перенаправлення.",
+       "apihelp-edit-param-contentformat": "Формат серіалізації вмісту, використовуваний для введеного тексту.",
+       "apihelp-edit-param-contentmodel": "Модель вмісту нового вмісту.",
+       "apihelp-edit-param-token": "Токен завжди має надсилатися як останній параметр або хоча б після параметра $1text.",
        "apihelp-edit-example-edit": "Редагувати сторінку",
        "apihelp-edit-example-prepend": "Додати зміст на початок сторінки",
        "apihelp-edit-example-undo": "Скасувати версії з 13579 по 13585 з автоматичним описом змін",
        "apihelp-emailuser-param-subject": "Заголовок теми.",
        "apihelp-emailuser-param-text": "Тіло листа.",
        "apihelp-emailuser-param-ccme": "Надіслати копію цього повідомлення мені.",
-       "apihelp-emailuser-example-email": "Відправити листа користувачу \"WikiSysop\" з текстом \"Вміст\"",
+       "apihelp-emailuser-example-email": "Відправити листа користувачу <kbd>WikiSysop</kbd> з текстом <kbd>Вміст</kbd>.",
        "apihelp-expandtemplates-description": "Розгортає усі шаблони у вікітекст.",
        "apihelp-expandtemplates-param-title": "Заголовок сторінки.",
        "apihelp-expandtemplates-param-text": "Вікітекст для перетворення.",
+       "apihelp-expandtemplates-param-revid": "ID версії, для <nowiki>{{REVISIONID}}</nowiki> і подібних змінних.",
+       "apihelp-expandtemplates-param-prop": "Яку інформацію отримувати.\n\nЗважте, що якщо не вибрано значень, результат міститиме вікітекст, але буде в застарілому форматі.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "Розгорнений вікітекст.",
+       "apihelp-expandtemplates-paramvalue-prop-categories": "Будь-які категорії, наявні у джерелі, але не виведені у вікітексті результату.",
+       "apihelp-expandtemplates-paramvalue-prop-properties": "Властивості сторінки, визначені розгорненими магічними словами у вікітексті.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "Чи результат тривкий і не повинен повторно використовуватись десь іще на сторінці.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "Максимальний час, після якого кеш результату стане недійсним.",
+       "apihelp-expandtemplates-paramvalue-prop-modules": "Будь-які модулі ResourceLoader, які парсерні функції запитують на додання у результат. Або <kbd>jsconfigvars</kbd>, або <kbd>encodedjsconfigvars</kbd> має бути запитано разом з <kbd>modules</kbd>.",
+       "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Дає конфігурації JavaScript змінні, притаманні для сторінки.",
+       "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "Дає конфігурації JavaScript змінні, притаманні для сторінки, як рядок JSON.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "Дерево парсу XML вхідних даних.",
+       "apihelp-expandtemplates-param-includecomments": "Чи включати HTML-коментарі у результат.",
+       "apihelp-expandtemplates-param-generatexml": "Дерево парсу XML вхідних даних (замінене на $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Розгорнути вікітекст <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
+       "apihelp-feedcontributions-description": "Повертає стрічку внеску користувача.",
+       "apihelp-feedcontributions-param-feedformat": "Формат стрічки.",
+       "apihelp-feedcontributions-param-user": "Для яких користувачів отримати внесок.",
+       "apihelp-feedcontributions-param-namespace": "За яким простором назв фільтрувати внески.",
+       "apihelp-feedcontributions-param-year": "Від року (і раніше).",
+       "apihelp-feedcontributions-param-month": "До місяця (і раніше).",
+       "apihelp-feedcontributions-param-tagfilter": "Відфільтрувати внесок, у якого є ці теґи.",
+       "apihelp-feedcontributions-param-deletedonly": "Показати лише вилучений внесок.",
+       "apihelp-feedcontributions-param-toponly": "Показати лише редагування, які є останніми версіями.",
+       "apihelp-feedcontributions-param-newonly": "Показати лише редагування, які є створеннями сторінок.",
+       "apihelp-feedcontributions-param-showsizediff": "Показати різницю розміру між версіями.",
+       "apihelp-feedcontributions-example-simple": "Вивести внесок для користувача <kbd>Example</kbd>.",
+       "apihelp-feedrecentchanges-description": "Видає стрічку нових редагувань.",
+       "apihelp-feedrecentchanges-param-feedformat": "Формат стрічки.",
+       "apihelp-feedrecentchanges-param-namespace": "Простір назв, до якого обмежити результати.",
+       "apihelp-feedrecentchanges-param-invert": "Усі простори назв, крім вибраного.",
+       "apihelp-feedrecentchanges-param-associated": "Включно з пов'язаним (обговорення чи головним) простором назв.",
+       "apihelp-feedrecentchanges-param-days": "Дні, до яких обмежити результати.",
+       "apihelp-feedrecentchanges-param-limit": "Максимальна кількість результатів для виведення.",
+       "apihelp-feedrecentchanges-param-from": "Показати зміни відтоді.",
+       "apihelp-feedrecentchanges-param-hideminor": "Приховати незначні редагування.",
+       "apihelp-feedrecentchanges-param-hidebots": "Приховати редагування ботів.",
+       "apihelp-feedrecentchanges-param-hideanons": "Приховати редагування анонімних користувачів.",
+       "apihelp-feedrecentchanges-param-hideliu": "Приховати редагування зареєстрованих користувачів.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Приховати відпатрульовані редагування.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Приховати редагування поточного користувача.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Фільтрувати за теґом.",
+       "apihelp-feedrecentchanges-param-target": "Показати лише зміни на сторінках, на які посилається ця сторінка.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Показати натомість лише зміни на сторінках, які посилаються на цю сторінку.",
+       "apihelp-feedrecentchanges-example-simple": "Показати нещодавні зміни.",
+       "apihelp-feedrecentchanges-example-30days": "Показати нещодавні зміни за 30 днів.",
+       "apihelp-feedwatchlist-description": "Видає стрічку списку спостереження.",
+       "apihelp-feedwatchlist-param-feedformat": "Формат стрічки.",
+       "apihelp-feedwatchlist-param-hours": "Список сторінок, змінених за цю кількість годин від зараз.",
+       "apihelp-feedwatchlist-param-linktosections": "За можливості, посилатися безпосередньо на змінені розділи.",
+       "apihelp-feedwatchlist-example-default": "Показати стрічку списку спостереження.",
+       "apihelp-feedwatchlist-example-all6hrs": "Показати всі зміни до спостережуваних сторінок за останні 6 годин.",
+       "apihelp-filerevert-description": "Повернути файл до старої версії.",
+       "apihelp-filerevert-param-filename": "Цільова назва файлу, без префіксу File:.",
+       "apihelp-filerevert-param-comment": "Завантажити коментар.",
+       "apihelp-filerevert-param-archivename": "Архівна назва версії, до якої повернути.",
+       "apihelp-filerevert-example-revert": "Повернути <kbd>Wiki.png</kbd> до версії <kbd>2011-03-05T15:27:40Z</kbd>.",
+       "apihelp-help-description": "Відображати довідку для зазначених модулів.",
+       "apihelp-help-param-modules": "Модулі, для яких відображати довідку (значення параметрів <var>action</var> і <var>format</var> або <kbd>main</kbd>). Можна вказати підмодулі через <kbd>+</kbd>.",
+       "apihelp-help-param-submodules": "Включити довідку для підмодулів вказаного модуля.",
+       "apihelp-help-param-recursivesubmodules": "Включити довідку для підмодулів рекурсивно.",
+       "apihelp-help-param-helpformat": "Формат результату довідки.",
+       "apihelp-help-param-wrap": "Помістити результат у стандартну структуру API-відповіді.",
+       "apihelp-help-param-toc": "Включити зміст у HTML-результат.",
+       "apihelp-help-example-main": "Довідка для головного модуля.",
+       "apihelp-help-example-recursive": "Уся довідка на одній сторінці.",
+       "apihelp-help-example-help": "Довідка для самого модуля довідки.",
+       "apihelp-help-example-query": "Довідка для двох підмодулів запитів.",
+       "apihelp-imagerotate-description": "Поворот одного або декількох зображень.",
+       "apihelp-imagerotate-param-rotation": "Градуси для повороту зображення за годинниковою стрілкою.",
+       "apihelp-imagerotate-example-simple": "Повернути <kbd>File:Example.png</kbd> на <kbd>90</kbd> градусів.",
+       "apihelp-imagerotate-example-generator": "Повернути усі зображення у <kbd>Category:Flip</kbd> на <kbd>180</kbd> градусів.",
+       "apihelp-import-description": "Імпортувати сторінку з іншої вікі або з XML-файлу.\n\nЗважте, що HTTP POST має бути виконано як завантаження файлу (тобто з використанням даних різних частин/форм) під час надсилання файлу для параметра <var>xml</var>.",
+       "apihelp-import-param-summary": "Імпортувати підсумок.",
+       "apihelp-import-param-xml": "Завантажено XML-файл.",
+       "apihelp-import-param-interwikisource": "Для інтервікі-імпорту: вікі, з якої імпортувати.",
+       "apihelp-import-param-interwikipage": "Для інтервікі-імпорту: сторінки для імпорту.",
+       "apihelp-import-param-fullhistory": "Для інтервікі-імпорту: імпортувати повну історію, не лише поточну версію.",
+       "apihelp-import-param-templates": "Для інтервікі-імпорту: імпортувати також усі включені шаблони.",
+       "apihelp-import-param-namespace": "Імпортувати у цей простір назв. Не можна використати разом з <var>$1rootpage</var>.",
+       "apihelp-import-param-rootpage": "Імпортувати як підсторінку цієї сторінки. Не можна використати разом з <var>$1namespace</var>.",
+       "apihelp-import-example-import": "Імпортувати [[meta:Help:ParserFunctions]] у простір назв 100 з повною історією.",
+       "apihelp-login-description": "Увійти в систему й отримати куки автентифікації.\n\nУ випадку успішного входження в систему, потрібні куки буде включено в заголовки HTTP-відповіді. У разі невдалого входу, подальші спроби будуть обмежені до ліміту автоматичних спроб підбирання пароля.",
+       "apihelp-login-param-name": "Ім'я користувача.",
+       "apihelp-login-param-password": "Пароль.",
+       "apihelp-login-param-domain": "Домен (необов'язково).",
+       "apihelp-login-param-token": "Токен входу в систему, отриманий у першому запиті.",
+       "apihelp-login-example-gettoken": "Отримати токен входу в систему.",
+       "apihelp-login-example-login": "Увійти в систему.",
+       "apihelp-logout-description": "Вийти й очистити дані сесії.",
+       "apihelp-logout-example-logout": "Вийти з поточного облікового запису.",
+       "apihelp-managetags-description": "Виконати керівні завдання щодо зміни теґів.",
+       "apihelp-managetags-param-operation": "Яку операцію виконати:\n;create:Створити нову мітку редагування для використання вручну.\n;delete:Вилучити мітку редагування з бази даних, включно з вилученням її з усіх версій, записів нових редагувань та записів журналів, де вона використана.\n;activate:Активувати мітку редагування, дозволивши користувачам застосовувати її вручну.\n;deactivate:Деактивувати мітку редагування, заборонивши користувачам застосовувати її вручну.",
+       "apihelp-managetags-param-tag": "Мітка для створення, вилучення, активування чи деактивування. Для створення мітки, вона повинна не існувати. Для вилучення мітки, вона повинна існувати. Для активування мітки, вона повинна існувати і не використовуватися жодним розширенням. Для деактивування мітки, вона має бути жива і визначена вручну.",
+       "apihelp-managetags-param-reason": "Необов'язкова причина створення, вилучення, активування чи деактивування мітки.",
+       "apihelp-managetags-param-ignorewarnings": "Чи ігнорувати усі попередження, що з'являються під час операції.",
+       "apihelp-managetags-example-create": "Створити мітку з назвою <kbd>spam</kbd> з причиною <kbd>For use in edit patrolling</kbd>",
+       "apihelp-managetags-example-delete": "Вилучити мітку <kbd>vandlaism</kbd> з причиною <kbd>Misspelt</kbd>",
+       "apihelp-managetags-example-activate": "Активувати мітку з назвою <kbd>spam</kbd> з причиною <kbd>For use in edit patrolling</kbd>",
+       "apihelp-managetags-example-deactivate": "Деактивувати мітку з назвою <kbd>spam</kbd> з причиною <kbd>No longer required</kbd>",
+       "apihelp-move-description": "Перейменувати сторінку.",
+       "apihelp-move-param-from": "Назва сторінки для перейменування. Не можна використати разом з <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "ID сторінки для перейменування. Не можна використати разом з <var>$1from</var>.",
+       "apihelp-move-param-to": "Назва сторінки, на яку перейменувати.",
+       "apihelp-move-param-reason": "Причина перейменування.",
+       "apihelp-move-param-movetalk": "Перейменувати сторінку обговорення, якщо вона існує.",
+       "apihelp-move-param-movesubpages": "Перейменувати підсторінки, якщо можливо.",
+       "apihelp-move-param-noredirect": "Не створювати перенаправлення.",
+       "apihelp-move-param-watch": "Додати сторінку й перенаправлення у список спостереження поточного користувача.",
+       "apihelp-move-param-unwatch": "Вилучити сторінку й перенаправлення зі списку спостереження поточного користувача.",
+       "apihelp-move-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
        "apihelp-move-param-ignorewarnings": "Ігнорувати всі попередження",
-       "api-help-datatypes-header": "Типи даних"
+       "apihelp-move-example-move": "Перейменувати <kbd>Badtitle</kbd> на <kbd>Goodtitle</kbd> без збереження перенаправлення.",
+       "apihelp-opensearch-description": "Шукати у вікі з використанням протоколу OpenSearch.",
+       "apihelp-opensearch-param-search": "Рядок пошуку.",
+       "apihelp-opensearch-param-limit": "Максимальна кількість результатів для виведення.",
+       "apihelp-opensearch-param-namespace": "Простори назв, у яких шукати.",
+       "apihelp-opensearch-param-suggest": "Нічого не робити, якщо <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> хибний.",
+       "apihelp-opensearch-param-redirects": "Як обробляти перенаправлення:\n;return:Видати саме перенаправлення.\n;resolve:Видати цільову сторінку. Може видати менше, ніж $1limit результат{{PLURAL:$1limit||и|ів}}.\nЗ історичних причин, за замовчуванням стоїть «return» для $1format=json і «resolve» — для інших форматів.",
+       "apihelp-opensearch-param-format": "Формат виводу.",
+       "apihelp-opensearch-param-warningsaserror": "Якщо при <kbd>format=json</kbd> з'являються попередження, видати помилку API замість того, щоб їх ігнорувати.",
+       "apihelp-opensearch-example-te": "Знайти сторінки, що починаються з <kbd>Te</kbd>.",
+       "apihelp-options-description": "Змінити налаштування поточного користувача.\n\nМожна встановити лише опції, які зареєстровані у ядрі або в одному з інстальованих розширень, або опції з префіксом ключів <code>userjs-</code> (призначені для використання користувацькими скриптами).",
+       "apihelp-options-param-reset": "Встановлює налаштування сайту за замовчуванням.",
+       "apihelp-options-param-resetkinds": "Список типів опцій для перевстановлення, коли вказана опція <var>$1reset</var>.",
+       "apihelp-options-param-change": "Список змін, відформатованих як назва=значення (напр., skin=vector). Значення не може містити вертикальних рисок. Якщо значення не вказане (навіть немає знака рівності) , напр., optionname|otheroption|…, опцію буде перевстановлено до її значення за замовчуванням.",
+       "apihelp-options-param-optionname": "Назва опції, якій має бути присвоєне значення <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Значення опції, вказане в <var>$1optionname</var>, може містити вертикальні риски.",
+       "apihelp-options-example-reset": "Скинути всі налаштування.",
+       "apihelp-options-example-change": "Змінити налаштування <kbd>skin</kbd> та <kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "Скинути всі налаштування, потім встановити <kbd>skin</kbd> та <kbd>nickname</kbd>.",
+       "apihelp-paraminfo-description": "Отримати інформацію про модулі API.",
+       "apihelp-paraminfo-param-modules": "Список назв модулів (значення параметрів <var>action</var> і <var>format</var> або <kbd>main</kbd>). Можна вказати підмодулі через <kbd>+</kbd>.",
+       "apihelp-paraminfo-param-helpformat": "Формат рядків довідки.",
+       "apihelp-paraminfo-param-querymodules": "Список назв модулів запитів (значення параметра <var>prop</var>, <var>meta</var> або <var>list</var>). Використати <kbd>$1modules=query+foo</kbd> замість <kbd>$1querymodules=foo</kbd>.",
+       "apihelp-paraminfo-param-mainmodule": "Отримати інформацію також про основний модуль (топ-рівень). Використати натомість <kbd>$1modules=main</kbd>.",
+       "apihelp-paraminfo-param-pagesetmodule": "Отримати також інформацію про модуль pageset (з вказанням titles= і рідних).",
+       "apihelp-paraminfo-param-formatmodules": "Список назв модулів форматування (значення параметра <var>format</var>). Використати натомість <var>$1modules</var>.",
+       "apihelp-paraminfo-example-1": "Показати інформацію для <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> та <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
+       "apihelp-parse-description": "Аналізує вміст і видає парсер виходу.\n\nДив. різні prop-модулі <kbd>[[Special:ApiHelp/query|action=query]]</kbd>, щоб отримати інформацію з поточної версії сторінки.\n\nЄ декілька способів вказати текст для аналізу:\n# Вказати сторінку або версію, використавши <var>$1page</var>, <var>$1pageid</var> або <var>$1oldid</var>.\n# Вказати безпосередньо, використавши <var>$1text</var>, <var>$1title</var> і <var>$1contentmodel</var>.\n# Вказати лише підсумок аналізу. <var>$1prop</var> повинен мати порожнє значення.",
+       "apihelp-parse-param-title": "Назва сторінки, якій належить текст. Якщо пропущена, має бути вказано <var>$1contentmodel</var>, а як назву буде вжито [[API]].",
+       "apihelp-parse-param-text": "Текст для аналізу. Використати <var>$1title</var> або <var>$1contentmodel</var> для контролю моделі вмісту.",
+       "apihelp-parse-param-summary": "Підсумок для аналізу.",
+       "apihelp-parse-param-page": "Аналізувати вміст цієї сторінки. Не можна використати разом з <var>$1text</var> і <var>$1title</var>.",
+       "apihelp-parse-param-pageid": "Аналізувати вміст цієї сторінки. Перевизначає <var>$1page</var>.",
+       "apihelp-parse-param-redirects": "Якщо <var>$1page</var> або <var>$1pageid</var> вказані як перенаправлення, виправити це.",
+       "apihelp-parse-param-oldid": "Аналізувати вміст цієї версії. Перевизначає <var>$1page</var> та <var>$1pageid</var>.",
+       "apihelp-parse-param-prop": "Яку інформацію отримати?",
+       "apihelp-parse-paramvalue-prop-text": "Дає текст-аналіз вікітексту.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Дає мовні посилання в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-categories": "Дає категорії в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Дає HTML-версію категорій.",
+       "apihelp-parse-paramvalue-prop-links": "Дає зовнішні посилання в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-templates": "Дає шаблони в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-images": "Дає зображення в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Дає зовнішні посилання в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-sections": "Дає розділи в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-revid": "Додає ідентифікатор версії аналізованої сторінки.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "Додає заголовок аналізованого вікітексту.",
+       "apihelp-parse-paramvalue-prop-headitems": "Дає елементи для вставки в <code>&lt;head&gt;</code> сторінки.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Дає проаналізований <code>&lt;head&gt;</code> сторінки.",
+       "apihelp-parse-paramvalue-prop-modules": "Дає модулі ResourceLoader, використані на сторінці. Чи <kbd>jsconfigvars</kbd>, чи <kbd>encodedjsconfigvars</kbd> має бути запитано разом з <kbd>modules</kbd>.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Дає змінні конфігурації JavaScript, притаманні для сторінки.",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Дає змінні конфігурації JavaScript, притаманні для сторінки, як рядок JSON.",
+       "apihelp-parse-paramvalue-prop-indicators": "Дає HTML індикаторів стану сторінки, використаних на сторінці.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "Дає інтервікі-посилання в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-wikitext": "Дає вихідний вікітекст, який було аналізовано.",
+       "apihelp-parse-paramvalue-prop-properties": "Дає різні властивості, визначені в аналізованому вікітексті.",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "Дає звіт по обмеженнях у структурованому вигляді. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "Дає HTML-версію звіту по обмеженнях. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
+       "apihelp-parse-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>)",
+       "apihelp-parse-param-pst": "Зробіть трансформацію вхідних даних перед збереженням і аналізом. Дійсне лише при використанні з текстом.",
+       "apihelp-parse-param-onlypst": "Зробіть трансформацію вхідних даних перед збереженням (PST), але не аналізуйте. Видає той самий вікітекст, після застосування PST. Дійсне лише у разі використання з <var>$1text</var>.",
+       "apihelp-parse-param-effectivelanglinks": "Включає мовні посилання, додані розширеннями (для використання з <kbd>$1prop=langlinks</kbd>).",
+       "apihelp-parse-param-section": "Видає вміст лише розділу з цим номером або при <kbd>new</kbd> створенні нового розділу.\n\n<kbd>new</kbd> розділ відзначається лише при вказанні тексту <var>text</var>.",
+       "apihelp-parse-param-sectiontitle": "Заголовок нового розділу, коли <var>section</var> має значення <kbd>new</kbd>.\n\nНа відміну від редагування сторінки, це не повертається до <var>summary</var>, якщо пропустити чи лишити порожнім.",
+       "apihelp-parse-param-disablelimitreport": "Пропустити звіт препроцесора («NewPP limit report») на виході аналізу.",
+       "apihelp-parse-param-disableeditsection": "Пропустити посилання на редагування розділів на виході аналізу.",
+       "apihelp-parse-param-generatexml": "Генерувати синтаксичне дерево XML (передбачає модель вмісту <code>$1</code>; замінено на <kbd>$2prop=parsetree</kbd>).",
+       "apihelp-parse-param-preview": "Аналізувати у режимі попереднього перегляду.",
+       "apihelp-parse-param-sectionpreview": "Аналізувати у режимі попереднього перегляду розділу (також вмикає попередній перегляд).",
+       "apihelp-parse-param-disabletoc": "Пропустити зміст на виході.",
+       "apihelp-parse-param-contentformat": "Формат серіалізації вмісту, використаний у вхідному тексті. Дійсний лише при використанні разом з $1text.",
+       "apihelp-parse-param-contentmodel": "Модель вмісту вхідного тексту. Якщо пропущено, має бути вказано $1title, і за замовчуванням буде модель вказаного заголовка. Дійсне лише при використанні з $1text.",
+       "apihelp-parse-example-page": "Аналізувати сторінку.",
+       "apihelp-parse-example-text": "Аналізувати вікітекст.",
+       "apihelp-parse-example-texttitle": "Аналізувати вікітекст, вказуючи назву сторінки.",
+       "apihelp-parse-example-summary": "Аналізувати опис.",
+       "apihelp-patrol-description": "Відпатрулювати сторінку чи версію.",
+       "apihelp-patrol-param-rcid": "ID нещодавніх змін для патрулювання.",
+       "apihelp-patrol-param-revid": "Ідентифікатор версії для патрулювання.",
+       "apihelp-patrol-example-rcid": "Відпатрулювати останню зміну.",
+       "apihelp-patrol-example-revid": "Відпатрулювати версію.",
+       "apihelp-protect-description": "Змінити рівень захисту сторінки.",
+       "apihelp-protect-param-title": "Заголовок сторінки для (зняття) захисту. Не може використовуватися разом із $1pageid.",
+       "apihelp-protect-param-pageid": "ID сторінки для (зняття) захисту. Не може використовуватися разом з $1title.",
+       "apihelp-protect-param-protections": "Список рівнів захисту у форматі <kbd>action=level</kbd> (напр., <kbd>edit=sysop</kbd>).\n\n<strong>Примітка:</strong> Обмеження на дії, яких нема в списку, буде знято.",
+       "apihelp-protect-param-expiry": "Часові мітки закінчення. Якщо встановлена лише одна мітка, її буде використано для усіх захистів. Для безстрокового захисту використовуйте <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> або <kbd>never</kbd>.",
+       "apihelp-protect-param-reason": "Причина для (зняття) захисту.",
+       "apihelp-protect-param-cascade": "Увімкнути каскадний захист (тобто захистити включені шаблоні і зображення, використані на цій сторінці). Ігнорується, якщо жоден з вказаних рівнів захисту не підтримує каскадність.",
+       "apihelp-protect-param-watch": "Якщо вказано, додати сторінку, де додається/знімається захист, до списку спостереження поточного користувача.",
+       "apihelp-protect-param-watchlist": "Беззастережно додати або вилучити сторінку зі списку спостереження поточного користувача, використати налаштування або не змінювати спостереження.",
+       "apihelp-protect-example-protect": "Захистити сторінку.",
+       "apihelp-protect-example-unprotect": "Зняти захист зі сторінки, встановивши обмеження для <kbd>all</kbd>.",
+       "apihelp-protect-example-unprotect2": "Зняти захист з сторінки, встановивши відсутність обмежень.",
+       "apihelp-purge-description": "Очистити кеш для вказаних заголовків.\n\nВимагає запиту POST, якщо користувач не ввійшов у систему.",
+       "apihelp-purge-param-forcelinkupdate": "Оновити таблиці посилань.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Оновити таблицю посилань, і оновити таблиці посилань для кожної сторінки, що використовує цю сторінку як шаблон.",
+       "apihelp-purge-example-simple": "Очистити кеш <kbd>Main Page</kbd> і сторінки <kbd>API</kbd>.",
+       "apihelp-purge-example-generator": "Очистити кеш перших десяти сторінок у головному просторі назв.",
+       "apihelp-query-description": "Вибірка даних з і про MediaWiki.\n\nУсі зміни даних у першу чергу мають використовувати запит на отримання токена, щоб запобігти зловживанням зі шкідливих сайтів.",
+       "apihelp-query-param-prop": "Властивості, які потрібно отримати для запитуваних сторінок.",
+       "apihelp-query-param-list": "Які списки отримати.",
+       "apihelp-query-param-meta": "Які метадані отримати.",
+       "apihelp-query-param-indexpageids": "Включити додатковий розділ pageids зі списком усіх виданих ідентифікаторів сторінки.",
+       "apihelp-query-param-export": "Експортувати поточні версії усіх заданих або створюваних сторінок.",
+       "apihelp-query-param-exportnowrap": "Видати експорт XML без огортання його в XML-результат (той же формат, що й [[Special:Export]]). Може використовуватися лише з $1export.",
+       "apihelp-query-param-iwurl": "Чи отримувати повний URL, якщо назва є інтервікі-посиланням.",
+       "apihelp-query-param-rawcontinue": "Видати сирі дані <samp>query-continue</samp> для продовження.",
+       "apihelp-query-example-revisions": "Вибірка [[Special:ApiHelp/query+siteinfo|інформації про сайт]] та [[Special:ApiHelp/query+revisions|версій]] <kbd>Main Page</kbd>.",
+       "apihelp-query-example-allpages": "Вибрати версії сторінок, які починаються з <kbd>API/</kbd>.",
+       "apihelp-query+allcategories-description": "Перерахувати всі категорії.",
+       "apihelp-query+allcategories-param-from": "Категорія, з якої почати перелічувати.",
+       "apihelp-query+allcategories-param-to": "Категорія, на якій закінчити перелічувати.",
+       "apihelp-query+allcategories-param-prefix": "Шукати усі назви категорій, які починаються з цього значення.",
+       "apihelp-query+allcategories-param-dir": "Напрямок сортування.",
+       "apihelp-query+allcategories-param-min": "Видати лише категорії, які мають щонайменше стільки елементів.",
+       "apihelp-query+allcategories-param-max": "Видати лише категорії, які мають максимум стільки елементів.",
+       "apihelp-query+allcategories-param-limit": "Скільки категорій видати.",
+       "apihelp-query+allcategories-param-prop": "Які властивості отримати:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "Додає номер сторінок у категорії.",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "Теґує категорії, приховані з <code>_&#95;HIDDENCAT_&#95;</code>.",
+       "apihelp-query+allcategories-example-size": "Перерахувати категорії з інформацією про кількість сторінок у кожній.",
+       "apihelp-query+allcategories-example-generator": "Отримати інформацію про саму сторінку категорії для категорій, що починаються з <kbd>List</kbd>.",
+       "apihelp-query+alldeletedrevisions-description": "Перерахувати усі вилучені версії за користувачем або у просторі назв.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Може використовуватися лише з <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "Не може використовуватися з <var>$3user</var>.",
+       "apihelp-query+alldeletedrevisions-param-start": "Часова мітка початку переліку.",
+       "apihelp-query+alldeletedrevisions-param-end": "Часова мітка закінчення переліку.",
+       "apihelp-query+alldeletedrevisions-param-from": "Почати перелік з цієї назви.",
+       "apihelp-query+alldeletedrevisions-param-to": "Закінчити перелік цією назвою.",
+       "apihelp-query+alldeletedrevisions-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+       "apihelp-query+alldeletedrevisions-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+       "apihelp-query+alldeletedrevisions-param-user": "Перерахувати лише версії цього користувача.",
+       "apihelp-query+alldeletedrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Примітка:</strong> через [[mw:Manual:$wgMiserMode|«скупий режим»]], використання <var>$1user</var> і <var>$1namespace</var> одночасно можуть вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+       "apihelp-query+alldeletedrevisions-param-generatetitles": "Коли використовується як генератор, генерувати заголовки замість ідентифікаторів версій.",
+       "apihelp-query+alldeletedrevisions-example-user": "Перерахувати останні 50 вилучених редагувань користувача <kbd>Example<kbd>.",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "Перерахувати останні 50 вилучених версій у головному просторі назв.",
+       "apihelp-query+allfileusages-description": "Перерахувати усі використання файлів, включно з тими, що не існують.",
+       "apihelp-query+allfileusages-param-from": "Назва файлу, з якої почати перераховувати.",
+       "apihelp-query+allfileusages-param-to": "Назва файлу, якою закінчувати перераховувати.",
+       "apihelp-query+allfileusages-param-prefix": "Шукати усі назви файлів, які починаються з цього значення.",
+       "apihelp-query+allfileusages-param-unique": "Показувати лише окремі назви файлів. Не може використовуватися разом з $1prop=ids.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+       "apihelp-query+allfileusages-param-prop": "Які відомості включати:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "Додає ідентифікатори із використаних сторінок (не буде використовуватися, при єдиній $1).",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Додає назву файлу.",
+       "apihelp-query+allfileusages-param-limit": "Скільки всього елементів виводити.",
+       "apihelp-query+allfileusages-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+allfileusages-example-B": "Перерахувати назви файлів, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+       "apihelp-query+allfileusages-example-unique": "Перерахувати унікальні назви файлів.",
+       "apihelp-query+allfileusages-example-unique-generator": "Отримує всі назви файлів, позначаючи відсутні.",
+       "apihelp-query+allfileusages-example-generator": "Отримує сторінки, на яких є файли.",
+       "apihelp-query+allimages-description": "Перерахувати усі зображення послідовно.",
+       "apihelp-query+allimages-param-sort": "Властивість, за якою сортувати.",
+       "apihelp-query+allimages-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+allimages-param-from": "Назва зображення, з якої почати перерахунок. Можна використати лише з $1sort=name.",
+       "apihelp-query+allimages-param-to": "Назва зображення, якою закінчити перерахунок. Можна використати лише з $1sort=name.",
+       "apihelp-query+allimages-param-start": "Часова мітка, з якої почати перерахунок. Можна використати лише з $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "Часова мітка, якою закінчити перерахунок. Можна використати лише з $1sort=timestamp.",
+       "apihelp-query+allimages-param-prefix": "Шукати усі назви зображень, що починаються цим значенням. Можна використати лише разом з $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Обмежити до зображень, які мають щонайменше стільки байтів.",
+       "apihelp-query+allimages-param-maxsize": "Обмежити до зображень, які мають максимум стільки байтів.",
+       "apihelp-query+allimages-param-sha1": "SHA1-хеш зображення. Перевизначає $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "SHA1-хеш зображення у base 36 (використано в MediaWiki).",
+       "apihelp-query+allimages-param-user": "Видати лише файли, завантажені цим користувачем. Можна використати лише з $1sort=timestamp. Не можна використати разом з $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "Як фільтрувати файли, завантажені ботами. Можна використати лише з $1sort=timestamp. Не можна використати разом з $1user.",
+       "apihelp-query+allimages-param-mime": "Які MIME-типи шукати, напр., <kbd>image/jpeg</kbd>.",
+       "apihelp-query+allimages-param-limit": "Скільки всього зображень видати.",
+       "apihelp-query+allimages-example-B": "Показати список файлів, які починаються на літеру <kbd>B</kbd>.",
+       "apihelp-query+allimages-example-recent": "Показати список нещодавно завантажених файлів, подібно до [[Special:NewFiles]].",
+       "apihelp-query+allimages-example-mimetypes": "Показати список файлів з MIME-типом <kbd>image/png</kbd> або <kbd>image/gif</kbd>",
+       "apihelp-query+allimages-example-generator": "Показати інформацію про 4 файли, що починаються на літеру <kbd>T</kbd>.",
+       "apihelp-query+alllinks-description": "Перераховувати всі посилання, які вказують на заданий простір назв.",
+       "apihelp-query+alllinks-param-from": "Назва посилання, з якої почати перераховувати.",
+       "apihelp-query+alllinks-param-to": "Назва посилання, якою закінчити перераховувати.",
+       "apihelp-query+alllinks-param-prefix": "Шукати усі пов'язані назви, які починаються з цього значення.",
+       "apihelp-query+alllinks-param-unique": "Показувати лише окремі пов'язані назви. Не може використовуватися з <kbd>$1prop=ids</kbd>.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+       "apihelp-query+alllinks-param-prop": "Які відомості включати:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "Додає ідентифікатори сторінок, що має посилання (не можна використати разом з <var>$1unique</var>).",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Додає назву посилання.",
+       "apihelp-query+alllinks-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+alllinks-param-limit": "Скільки всього елементів виводити.",
+       "apihelp-query+alllinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+alllinks-example-B": "Перерахувати пов'язані назви, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+       "apihelp-query+alllinks-example-unique": "Перерахувати унікальні назви з посиланнями.",
+       "apihelp-query+alllinks-example-unique-generator": "Отримує всі назви з посиланнями, позначаючи відсутні.",
+       "apihelp-query+alllinks-example-generator": "Отримує сторінки, на яких є посилання.",
+       "apihelp-query+allmessages-description": "Видати повідомлення від цього сайту.",
+       "apihelp-query+allmessages-param-messages": "Які повідомлення виводити. <kbd>*</kbd> (за замовчуванням) означає усі повідомлення.",
+       "apihelp-query+allmessages-param-prop": "Які властивості отримати.",
+       "apihelp-query+allmessages-param-enableparser": "Встановити увімкнення парсеру, це попередньо обробить вікітекст повідомлення (підставити магічні слова, розкрити шаблони тощо).",
+       "apihelp-query+allmessages-param-nocontent": "Якщо вказано, не включати повідомлення вміст повідомлення у результат.",
+       "apihelp-query+allmessages-param-includelocal": "Також включити локальні повідомлення, тобто повідомлення, що не існують у програмному забезпеченні, але існують як сторінка MediaWiki:.\nЦе видає список усіх сторінок MediaWiki:, так що у ньому будуть сторінки, які насправді не є повідомленнями, як-то [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Аргументи будуть підставлятися в повідомлення.",
+       "apihelp-query+allmessages-param-filter": "Видати лише повідомлення з назвами, що місять цей рядок.",
+       "apihelp-query+allmessages-param-customised": "Видати лише повідомлення у цьому стані налаштувань.",
+       "apihelp-query+allmessages-param-lang": "Видає повідомлення цією мовою.",
+       "apihelp-query+allmessages-param-from": "Видає повідомлення, починаючи з цього повідомлення.",
+       "apihelp-query+allmessages-param-to": "Видає повідомлення, закінчуючи цим повідомленням.",
+       "apihelp-query+allmessages-param-title": "Назва сторінки для використання як контекст при аналізі повідомлення (для опції $1enableparser).",
+       "apihelp-query+allmessages-param-prefix": "Видати повідомлення з цим префіксом.",
+       "apihelp-query+allmessages-example-ipb": "Показати повідомлення, які починаються на <kbd>ipb-</kbd>.",
+       "apihelp-query+allmessages-example-de": "Показати повідомлення <kbd>august</kbd> і <kbd>mainpage</kbd> німецькою.",
+       "apihelp-query+allpages-description": "Перераховувати всі сторінки послідовно в заданому просторі назв.",
+       "apihelp-query+allpages-param-from": "Заголовок сторінки, з якого почати перелічувати.",
+       "apihelp-query+allpages-param-to": "Заголовок сторінки, яким закінчувати перелічувати.",
+       "apihelp-query+allpages-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+       "apihelp-query+allpages-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+allpages-param-filterredir": "Які сторінки перерахувати.",
+       "apihelp-query+allpages-param-minsize": "Обмежити до сторінок, які мають щонайменше стільки байтів.",
+       "apihelp-query+allpages-param-maxsize": "Обмежити до сторінок, які мають максимум стільки байтів.",
+       "apihelp-query+allpages-param-prtype": "Обмежити до захищених сторінок.",
+       "apihelp-query+allpages-param-prlevel": "Фільтрувати захисти залежно від рівня (мусить використовуватися з $1prtype= parameter).",
+       "apihelp-query+allpages-param-prfiltercascade": "Фільтрувати захисти залежно від каскадності (ігнорується, коли $1prtype не вказано).",
+       "apihelp-query+allpages-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+allpages-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+allpages-param-filterlanglinks": "Фільтрувати залежно від наявності у сторінки мовних посилань. Зауважте, що це може не врахувати мовні посилання, додані розширеннями.",
+       "apihelp-query+allpages-param-prexpiry": "За якою тривалістю захисту фільтрувати сторінку:\n;indefinite:Отримати лише сторінки з нескінченним захистом.\n;definite:Отримати лише сторінки з визначеним терміном захисту.\n;all:Отримати сторінки з будь-яким терміном захисту.",
+       "apihelp-query+allpages-example-B": "Показати список сторінок, які починаються на літеру <kbd>B</kbd>.",
+       "apihelp-query+allpages-example-generator": "Показати інформацію про 4 сторінки, що починаються на літеру <kbd>T</kbd>.",
+       "apihelp-query+allpages-example-generator-revisions": "Показати вміст перших двох сторінок, що не є перенаправленнями і починаються на <kbd>Re</kbd>.",
+       "apihelp-query+allredirects-description": "Перерахувати усі перенаправлення на простір назв.",
+       "apihelp-query+allredirects-param-from": "Назва перенаправлення, з якої почати перераховувати.",
+       "apihelp-query+allredirects-param-to": "Назва перенаправлення, якою закінчувати перераховувати.",
+       "apihelp-query+allredirects-param-prefix": "Шукати усі цільові сторінки, які починаються з цього значення.",
+       "apihelp-query+allredirects-param-unique": "Показувати лише окремі цільові сторінки. Не може використовуватися разом з $1prop=ids|fragment|interwiki.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+       "apihelp-query+allredirects-param-prop": "Які відомості включити:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Додає ID сторінки-перенаправлення (не можна використати разом з <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Додає заголовок перенаправлення.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Додає фрагмент з перенаправлення, якщо він є (не можна використати разом з <var>$1unique</var>).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Додає інтервікі-префікс з перенаправлення, якщо він є (не можна використати разом з <var>$1unique</var>).",
+       "apihelp-query+allredirects-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+allredirects-param-limit": "Скільки всього елементів виводити.",
+       "apihelp-query+allredirects-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+allredirects-example-B": "Перерахувати цільові сторінки, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+       "apihelp-query+allredirects-example-unique": "Перерахувати унікальні цільові сторінки.",
+       "apihelp-query+allredirects-example-unique-generator": "Отримує всі цільові сторінки, позначаючи відсутні.",
+       "apihelp-query+allredirects-example-generator": "Отримує сторінки, які містять перенаправлення.",
+       "apihelp-query+alltransclusions-description": "Список усіх включень (сторінки, вставлені з використанням &#123;&#123;x&#125;&#125;), включно з неіснуючими.",
+       "apihelp-query+alltransclusions-param-from": "Назва включення, з якої почати перераховувати.",
+       "apihelp-query+alltransclusions-param-to": "Назва включення, якою закінчити перераховувати.",
+       "apihelp-query+alltransclusions-param-prefix": "Шукати усі включені назви, які починаються з цього значення.",
+       "apihelp-query+alltransclusions-param-unique": "Показувати лише окремі включені назви. Не може використовуватися разом з $1prop=ids.\nКоли використовується як генератор, видає цільові сторінки замість вихідних сторінок.",
+       "apihelp-query+alltransclusions-param-prop": "Які відомості включати:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "Додає ідентифікатор сторінки включення (не можна використати разом з $1unique).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "Додає назву включення.",
+       "apihelp-query+alltransclusions-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+alltransclusions-param-limit": "Скільки всього елементів виводити.",
+       "apihelp-query+alltransclusions-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+alltransclusions-example-B": "Перерахувати включені назви, включно з відсутніми, з ідентифікаторами сторінок, на яких вони використані, починаючи з <kbd>B</kbd>.",
+       "apihelp-query+alltransclusions-example-unique": "Перерахувати унікальні включені назв.",
+       "apihelp-query+alltransclusions-example-unique-generator": "Отримує всі включені назви, позначаючи відсутні.",
+       "apihelp-query+alltransclusions-example-generator": "Отримує сторінки, на яких є включення.",
+       "apihelp-query+allusers-description": "Перерахувати усіх зареєстрованих користувачів.",
+       "apihelp-query+allusers-param-from": "Ім'я користувача, з якого почати перелічувати.",
+       "apihelp-query+allusers-param-to": "Ім'я користувача, на якому закінчити перелічувати.",
+       "apihelp-query+allusers-param-prefix": "Шукати усіх користувачів, які починаються з цього значення.",
+       "apihelp-query+allusers-param-dir": "Напрямок сортування.",
+       "apihelp-query+allusers-param-group": "Включати лише користувачів з даних груп.",
+       "apihelp-query+allusers-param-excludegroup": "Виключити користувачів у даних групах.",
+       "apihelp-query+allusers-param-rights": "Включати лише користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+       "apihelp-query+allusers-param-prop": "Які саме відомості включати:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Додає інформацію про поточне блокування користувача.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "Перераховує групи, до яких користувач належить. Це використовує більше ресурсів сервера і може видати менше результатів, ніж ліміт.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Перераховує усіх групи, до яких користувач належить автоматично.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "Перераховує права, які користувач має.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "Додає кількість редагувань користувача.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "Додає часову мітку, коли користувач зареєструвався, якщо доступно (може бути пустою).",
+       "apihelp-query+allusers-param-limit": "Скільки всього виводити імен користувачів.",
+       "apihelp-query+allusers-param-witheditsonly": "Перерахувати лише користувачів, що зробили редагування.",
+       "apihelp-query+allusers-param-activeusers": "Перерахувати лише користувачів, що були активні $1 {{PLURAL:$1|останній день|останні дні|останніх днів}}.",
+       "apihelp-query+allusers-example-Y": "Перерахувати користувачів, починаючи з <kbd>Y</kbd>.",
+       "apihelp-query+backlinks-description": "Знайти усі сторінки, що посилаються на подану сторінку.",
+       "apihelp-query+backlinks-param-title": "Назва для пошуку. Не можна використати разом з <var>$1pageid</var>.",
+       "apihelp-query+backlinks-param-pageid": "ID сторінки для пошуку. Не можна використати разом з <var>$1title</var>.",
+       "apihelp-query+backlinks-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+backlinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+backlinks-param-filterredir": "Як відфільтрувати перенаправлення. Якщо встановлено <kbd>nonredirects</kbd> при увімкненому <var>$1redirect</var>, це застосовується лише до другого рівня.",
+       "apihelp-query+backlinks-param-limit": "Скільки всього виводити сторінок. Якщо увімкнено <var>$1redirect</var>, ліміт застосовується до кожного рівня окремо (це означає, що може бути видано до 2 * <var>$1limit</var> результатів).",
+       "apihelp-query+backlinks-param-redirect": "Якщо сторінка, яка посилається, є перенаправленням, знайти всі сторінки, які посилаються на це перенаправлення, теж. Максимальний ліміт зменшується наполовину.",
+       "apihelp-query+backlinks-example-simple": "Показати посилання на <kbd>Main page<kbd>.",
+       "apihelp-query+backlinks-example-generator": "Отримати інформацію про сторінки, що посилаються на <kbd>Main page<kbd>.",
+       "apihelp-query+blocks-description": "Перерахувати усіх заблокованих користувачів і IP-адреси.",
+       "apihelp-query+blocks-param-start": "Часова мітка, з якої почати перелік.",
+       "apihelp-query+blocks-param-end": "Часова мітка закінчення переліку.",
+       "apihelp-query+blocks-param-ids": "Вивести список заблокованих ID (необов'язково).",
+       "apihelp-query+blocks-param-users": "Список користувачів для пошуку (необов'язково).",
+       "apihelp-query+blocks-param-ip": "Отримати всі блокування, що стосуються цієї IP-адреси або CIDR-діапазону, включно з блокуваннями діапазонів. Не може бути використано разом з <var>$3users</var>. CIDR-діапазони, ширші, ніж IPv4/$1 чи IPv6/$2, не приймаються.",
+       "apihelp-query+blocks-param-limit": "Максимальна кількість блокувань у списку.",
+       "apihelp-query+blocks-param-prop": "Які властивості отримати:",
+       "apihelp-query+blocks-paramvalue-prop-id": "Додає ID блокування.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Додає ім'я заблокованого користувача.",
+       "apihelp-query+blocks-paramvalue-prop-userid": "Додає ID заблокованого користувача.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Додає ім'я користувача, який заблокував.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Додає ID користувача, який заблокував.",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "Додає часову мітку здійснення блокування.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Додає часову мітку закінчення терміну блокування.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Додає причину, вказану при блокуванні.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Додає діапазон IP-адрес, на які поширюється блокування.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "Мітки бану (автоблокування, лише анонім тощо).",
+       "apihelp-query+blocks-param-show": "Показувати лише елементи, які відповідають цим критеріям.\nНаприклад, щоб побачити лише незалежні блокування IP-адрес, встановіть <kbd>$1show=ip|!temp</kbd>.",
+       "apihelp-query+blocks-example-simple": "Вивести список блокувань.",
+       "apihelp-query+blocks-example-users": "Вивести список блокувань користувачів <kbd>Alice</kbd> та <kbd>Bob</kbd>.",
+       "apihelp-query+categories-description": "Перерахувати категорії, до яких сторінки належать.",
+       "apihelp-query+categories-param-prop": "Які додаткові властивості отримати для кожної категорії:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "Додає ключ сортування (шістнадцятковий рядок) і префікс ключа сортування (людиночитна частина) для категорії.",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "Додає мітку часу, коли категорію було додано.",
+       "apihelp-query+categories-paramvalue-prop-hidden": "Тегує приховані категорії з допомогою <code>_&#95;HIDDENCAT_&#95;</code>.",
+       "apihelp-query+categories-param-show": "Який тип категорій показувати.",
+       "apihelp-query+categories-param-limit": "Скільки категорій видати.",
+       "apihelp-query+categories-param-categories": "Перерахувати лише ці категорії. Корисно для перевірки, чи певна сторінка є в певній категорії.",
+       "apihelp-query+categories-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+categories-example-simple": "Отримати список категорій, до яких належить сторінка <kbd>Albert Einstein</kbd>.",
+       "apihelp-query+categories-example-generator": "Отримати інформацію про усі категорії, використані на сторінці <kbd>Albert Einstein</kbd>.",
+       "apihelp-query+categoryinfo-description": "Видає інформацію про подані категорії.",
+       "apihelp-query+categoryinfo-example-simple": "Отримати інформацію про <kbd>Category:Foo</kbd> і <kbd>Category:Bar</kbd>.",
+       "apihelp-query+categorymembers-description": "Перерахувати усі сторінки у поданій категорії.",
+       "apihelp-query+categorymembers-param-title": "Яку категорію вивести (обов'язково). Мусить включати префікс <kbd>{{ns:category}}:</kbd>. Не можна використати разом з <var>$1pageid</var>.",
+       "apihelp-query+categorymembers-param-pageid": "ID сторінки категорії для виведення. Не можна використати разом з <var>$1title</var>.",
+       "apihelp-query+categorymembers-param-prop": "Які відомості включати:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "Додає ID сторінки.",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "Додає назву й ID простору назв сторінки.",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Додає ключ сортування, використаний для сортування у категорії (шістнадцятковий рядок).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Додає ключ сортування, використаний для сортування у категорії (людиночитна частина).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "Додає тип, за яким категоризується сторінка (сторінка, підкатегорія або файл).",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Додає мітку часу, коли сторінка була включена.",
+       "apihelp-query+categorymembers-param-namespace": "Включати лише сторінки у цих просторах назв. Зверніть увагу, що <kbd>$1type=subcat</kbd> чи <kbd>$1type=file</kbd> можна використовувати замість <kbd>$1namespace=14</kbd> чи <kbd>6</kbd>.",
+       "apihelp-query+categorymembers-param-type": "Який тип елементів категорії включати. Ігнорується, коли вказано <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-limit": "Максимальна кількість сторінок для виведення.",
+       "apihelp-query+categorymembers-param-sort": "Властивість, за якою сортувати.",
+       "apihelp-query+categorymembers-param-dir": "У якому напрямку сортувати.",
+       "apihelp-query+categorymembers-param-start": "Часова мітка, з якої почати список. Можна використати лише разом з <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-end": "Часова мітка, якою закінчити список. Можна використати лише разом з <kbd>$1sort=timestamp</kbd>.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Ключ сортування, з якого почати список, як видає <kbd>$1prop=sortkey</kbd>. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Ключ сортування, з якого почати список, як видає <kbd>$1prop=sortkey</kbd>. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Префікс ключа сортування, з якого почати список. Можна використати лише разом з <kbd>$1sort=sortkey</kbd>. Перевизначає <var>$1starthexsortkey</var>.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Префікс ключа сортування, <strong>перед</strong> яким закінчити список (не <strong>на</strong>; якщо це значення зустрінеться, його не буде включено!). Можна використати лише разом з $1sort=sortkey. Перевизначає $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Використати натомість $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkey": "Використати натомість $1endhexsortkey.",
+       "apihelp-query+categorymembers-example-simple": "Отримати перші 10 сторінок у <kbd>Category:Physics</kbd>.",
+       "apihelp-query+categorymembers-example-generator": "Отримати інформацію про перші 10 сторінок у <kbd>Category:Physics</kbd>.",
+       "apihelp-query+contributors-description": "Отримати список залогінених дописувачів і кількість анонімних дописувачів до сторінки.",
+       "apihelp-query+contributors-param-group": "Включати лише користувачів з даних груп. Не включає безумовні або автоматичні групи на зразок *, користувач або автопідтверджені.",
+       "apihelp-query+contributors-param-excludegroup": "Виключати користувачів з даних груп. Не включає безумовні або автоматичні групи на зразок *, користувач або автопідтверджені.",
+       "apihelp-query+contributors-param-rights": "Включати лише користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+       "apihelp-query+contributors-param-excluderights": "Виключати користувачів з даними правами. Не включає права, надані безумовними або автоматичними групами на зразок *, користувач або автопідтверджені.",
+       "apihelp-query+contributors-param-limit": "Скільки дописувачів виводити.",
+       "apihelp-query+contributors-example-simple": "Показати дописувачів до сторінки <kbd>Main Page</kbd>.",
+       "apihelp-query+deletedrevisions-description": "Отримати інформацію про вилучену версію.\n\nМожна використати кількома способами:\n# Отримати вилучені версії набору сторінок, вказавши заголовки або ідентифікатори сторінок. Сортується за назвою і часовою міткою.\n# Отримати дані про набір вилучених версій, вказавши їх ID з ідентифікаторами версій. Сортується за ID версії.",
+       "apihelp-query+deletedrevisions-param-start": "Мітка часу, з якої почати перелік. Ігнорується, якщо обробляється список ідентифікаторів версій.",
+       "apihelp-query+deletedrevisions-param-end": "Мітка часу, якою закінчити перелік. Ігнорується, якщо обробляється список ідентифікаторів версій.",
+       "apihelp-query+deletedrevisions-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+       "apihelp-query+deletedrevisions-param-user": "Перерахувати лише версії цього користувача.",
+       "apihelp-query+deletedrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
+       "apihelp-query+deletedrevisions-example-titles": "Перерахувати вилучені версії сторінок <kbd>Main Page</kbd> і <kbd>Talk:Main Page</kbd>, з вмістом.",
+       "apihelp-query+deletedrevisions-example-revids": "Вивести інформацію вилученої версії <kbd>123456</kbd>.",
+       "apihelp-query+deletedrevs-description": "Перелічити вилучені версії.\n\nПрацює у трьох режимах:\n# Перелічити вилучені версії поданих назв, відсортованих за часовою міткою.\n# Перелічити вилучений внесок поданого користувача, відсортований за часовою міткою (без вказання заголовків).\n# Перелічити усі вилучені версії у поданому просторі назв, відсортовані за назвою та часовою міткою (без вказання заголовків, $1user не вказаний).\n\nОкремі параметри можуть застосовуватися в одному режимі й ігноруватися в іншому.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Режим|Режими}}: $2",
+       "apihelp-query+deletedrevs-param-start": "Часова мітка початку переліку.",
+       "apihelp-query+deletedrevs-param-end": "Часова мітка закінчення переліку.",
+       "apihelp-query+deletedrevs-param-from": "Почати перелік з цієї назви.",
+       "apihelp-query+deletedrevs-param-to": "Закінчити перелік цією назвою.",
+       "apihelp-query+deletedrevs-param-prefix": "Шукати усі назви сторінок, які починаються з цього значення.",
+       "apihelp-query+deletedrevs-param-unique": "Вивести лише одну версію кожної сторінки.",
+       "apihelp-query+deletedrevs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+       "apihelp-query+deletedrevs-param-user": "Перерахувати лише версії цього користувача.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Не перераховувати версії цього користувача.",
+       "apihelp-query+deletedrevs-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
+       "apihelp-query+deletedrevs-param-limit": "Максимальна кількість версій для переліку.",
+       "apihelp-query+deletedrevs-param-prop": "Які властивості отримати:\n;revid:Додає ID вилученої версії.\n;parentid:Додає ID попередньої версії сторінки.\n;user:Додає користувача, який створив версію.\n;userid:Додає ID користувача, який створив версію.\n;comment:Додає коментар до версії.\n;parsedcomment:Додає проаналізований коментар до версії.\n;minor:Позначає, якщо версія створена незначним редагуванням.\n;len:Додає довжину (байти) версії.\n;sha1:Додає SHA-1 (base 16) версії.\n;content:Додає вміст версії.\n;token:<span class=\"apihelp-deprecated\">Застаріло.</span> Дає токен редагування.\n;tags:Теґи версії.",
+       "apihelp-query+deletedrevs-example-mode1": "Перерахувати останні вилучені версії сторінок <kbd>Main Page</kbd> і <kbd>Talk:Main Page</kbd>, з вмістом (режим 1).",
+       "apihelp-query+deletedrevs-example-mode2": "Перерахувати останні 50 вилучених редагувань <kbd>Bob</kbd> (режим 2).",
+       "apihelp-query+deletedrevs-example-mode3-main": "Перерахувати перші 50 вилучених версій у головному просторі назв (режим 3).",
+       "apihelp-query+deletedrevs-example-mode3-talk": "Перерахувати перші 50 вилучених сторінок у просторі назв {{ns:talk}} (режим 3).",
+       "apihelp-query+disabled-description": "Цей модуль запитів було вимкнено.",
+       "apihelp-query+duplicatefiles-description": "Перерахувати усі файли, які є дублікатами поданих файлів з огляду на значення хешу.",
+       "apihelp-query+duplicatefiles-param-limit": "Скільки файлів-дублікатів виводити.",
+       "apihelp-query+duplicatefiles-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+duplicatefiles-param-localonly": "Шукати лише файли у локальному репозиторії.",
+       "apihelp-query+duplicatefiles-example-simple": "Шукати дублікати [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+duplicatefiles-example-generated": "Шукати дублікати усіх файлів.",
+       "apihelp-query+embeddedin-description": "Знайти всі сторінки, які вбудовують (включають) подану назву.",
+       "apihelp-query+embeddedin-param-title": "Назва для пошуку. Не можна використати разом з $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "ID сторінки для пошуку. Не можна використати разом з $1title.",
+       "apihelp-query+embeddedin-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+embeddedin-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+embeddedin-param-filterredir": "Як фільтрувати перенаправлення.",
+       "apihelp-query+embeddedin-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+embeddedin-example-simple": "Показати сторінки, які включають <kbd>Template:Stub</kbd>.",
+       "apihelp-query+embeddedin-example-generator": "Отримати інформацію про сторінки, які включають <kbd>Template:Stub</kbd>.",
+       "apihelp-query+extlinks-description": "Видати усі зовнішні URL (не інтервікі) з поданих сторінок.",
+       "apihelp-query+extlinks-param-limit": "Скільки посилань виводити.",
+       "apihelp-query+extlinks-param-protocol": "Протокол URL. Якщо пусто і вказано <var>$1query</var>, протокол <kbd>http</kbd>. Залиште пустими і це, і <var>$1query</var>, щоб перелічити усі зовнішні посилання.",
+       "apihelp-query+extlinks-param-query": "Шукати рядок без протоколу. Корисно для перевірки, чи містить певна сторінка певне зовнішнє посилання.",
+       "apihelp-query+extlinks-param-expandurl": "Розгорнути протокол-залежні URL за канонічним протоколом.",
+       "apihelp-query+extlinks-example-simple": "Отримати список зовнішніх посилань на <kbd>Main Page<kbd>.",
+       "apihelp-query+exturlusage-description": "Перерахувати сторінки, які містять поданий URL.",
+       "apihelp-query+exturlusage-param-prop": "Які відомості включати:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Додає ID сторінки.",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "Додає заголовок і ID простору назв сторінки.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Додає URL, використаний на сторінці.",
+       "apihelp-query+exturlusage-param-protocol": "Протокол URL. Якщо пусто і вказано <var>$1query</var>, протокол <kbd>http</kbd>. Залиште пустими і це, і <var>$1query</var>, щоб перелічити усі зовнішні посилання.",
+       "apihelp-query+exturlusage-param-query": "Шукати рядок без протоколу. Див. [[Special:LinkSearch]]. Залиште пустим, щоб вивести усі зовнішні посилання.",
+       "apihelp-query+exturlusage-param-namespace": "Простори назв для переліку.",
+       "apihelp-query+exturlusage-param-limit": "Скільки сторінок виводити.",
+       "apihelp-query+exturlusage-param-expandurl": "Розгорнути протокол-залежні URL за канонічним протоколом.",
+       "apihelp-query+exturlusage-example-simple": "Показати сторінки, які посилаються на <kbd>http://www.mediawiki.org</kbd>.",
+       "apihelp-query+filearchive-description": "Перерахувати всі вилучені файли послідовно.",
+       "apihelp-query+filearchive-param-from": "Назва зображення, з якої почати перелічувати.",
+       "apihelp-query+filearchive-param-to": "Назва зображення, якою закінчити перелічувати.",
+       "apihelp-query+filearchive-param-prefix": "Шукати усі назви зображень, які починаються з цього значення.",
+       "apihelp-query+filearchive-param-limit": "Скільки всього зображень виводити.",
+       "apihelp-query+filearchive-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+filearchive-param-sha1": "SHA1-хеш зображення. Перевизначає $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "SHA1-хеш зображення у base 36 (використано в MediaWiki).",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "Додає хеш SHA-1 до зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "Додає часову мітку завантаженої версії.",
+       "apihelp-query+filearchive-paramvalue-prop-user": "Додає користувача, який завантажив версію зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-size": "Додає розмір зображення у байтах, а також висоту, ширину і кількість сторінок (якщо є).",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "Аліас розміру.",
+       "apihelp-query+filearchive-paramvalue-prop-description": "Додає опис версії зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "Аналіз опису зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "Додає MIME-тип зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "Додає медіатип зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "Вилає Exif-метадані версії зображення.",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "Додає бітну глибину версії.",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "Додає до імені версію архіву для неостаточного варіанту файлу.",
+       "apihelp-query+filearchive-example-simple": "Показати список усіх вилучених файлів.",
+       "apihelp-query+filerepoinfo-description": "Видати мета-інформацію про репозиторії зображень, налаштовані на вікі.",
+       "apihelp-query+filerepoinfo-param-prop": "Які властивості репозиторію отримати (на деяких вікі може бути більше):\n;apiurl:URL до репозиторію API — корисне для отримання інформації про зображення з хосту.\n;name:Ключ репозиторію — використано в e.g. <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> і значення [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Людиночита назва репозиторію вікі.\n;rooturl:Корінний URL для шляху зображення.\n;local:Чи репозиторій локальний, чи ні.",
+       "apihelp-query+filerepoinfo-example-simple": "Отримати інформацію про репозиторії файлів.",
+       "apihelp-query+fileusage-description": "Знайти всі сторінки, що використовують дані файли.",
+       "apihelp-query+fileusage-param-prop": "Які властивості отримати:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "ID кожної сторінки.",
+       "apihelp-query+fileusage-paramvalue-prop-title": "Назва кожної сторінки.",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Помітка, якщо сторінка є перенаправленням.",
+       "apihelp-query+fileusage-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+fileusage-param-limit": "Скільки результатів виводити.",
+       "apihelp-query+fileusage-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+       "apihelp-query+fileusage-example-simple": "Отримати список сторінок, які використовують [[:File:Example.jpg]].",
+       "apihelp-query+fileusage-example-generator": "Отримати інформацію про сторінки, які використовують [[:File:Example.jpg]].",
+       "apihelp-query+imageinfo-description": "Видає інформацію про файл й історію завантаження.",
+       "apihelp-query+imageinfo-param-prop": "Яку інформацію отримати:",
+       "apihelp-query+imageinfo-paramvalue-prop-timestamp": "Додає мітку часу для завантаженої версії.",
+       "apihelp-query+imageinfo-paramvalue-prop-user": "Додає користувача, який завантажив кожну версію файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-userid": "Додати ідентифікатор користувача, який завантажив кожну версію файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-comment": "Коментар до версії.",
+       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "Аналізований коментар версії.",
+       "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Додає канонічну назву файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "Дає посилання на файл і сторінку опису.",
+       "apihelp-query+imageinfo-paramvalue-prop-size": "Додає розмір файлу в байтах, а також висоту, ширину і кількість сторінок (якщо це можливо).",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Псевдонім для розміру.",
+       "apihelp-query+imageinfo-paramvalue-prop-sha1": "Додає SHA-1 хеш файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-mime": "Додає MIME-тип файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Додає MIME-мініатюри зображення (передбачає url і параметр $1urlwidth).",
+       "apihelp-query+imageinfo-paramvalue-prop-mediatype": "Додає медіатип файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-metadata": "Перелічує Exif-метадані версії файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-commonmetadata": "Перелічує метадані формату версії файлу.",
+       "apihelp-query+imageinfo-paramvalue-prop-extmetadata": "Перелічує форматовані метадані, поєднані з кількох джерел. Результати у форматі HTML.",
+       "apihelp-query+imageinfo-paramvalue-prop-archivename": "Додає назву файлу архівної версії для неостанніх версій.",
+       "apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Додає бітну глибину версії.",
+       "apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Використовується на Special:Upload page для отримання інформації про наявний файл. Не призначено для використання поза ядром MediaWiki.",
+       "apihelp-query+imageinfo-param-limit": "Скільки виводити версій кожного файлу.",
+       "apihelp-query+imageinfo-param-start": "Часова мітка, з якої почати список.",
+       "apihelp-query+imageinfo-param-end": "Часова мітка, на якій закінчити список.",
+       "apihelp-query+imageinfo-param-urlwidth": "Якщо вказано $2prop=url, буде видано URL на масштабоване до цього розміру зображення.\nДля підвищення продуктивності, якщо використовується ця опція, не буде видано більше, ніж $1 {{PLURAL:$1|масштабоване зображення|масштабовані зображення|масштабованих зображень}}.",
+       "apihelp-query+imageinfo-param-urlheight": "Аналогічно до $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Версія метаданих, яку використати. Якщо вказано <kbd>latest</kbd>, використати останню версію. За замовчуванням — <kbd>1</kbd> для зворотної сумісності.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "Якою мовою вибирати метадані. Це стосується і того, який переклад вибирати, якщо є різні, і як форматувати різні числа та значення.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "Якщо переклади властивості extmetadata доступні, вибрати їх усі.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "Якщо вказано і не порожньо, буде видано лише ці ключі для $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "Рядок окремого параметра. Наприклад, PDF-ки можуть використовувати <kbd>page15-100px</kbd>. <var>$1urlwidth</var> повинно використовуватись і бути сумісним з <var>$1urlparam</var>.",
+       "apihelp-query+imageinfo-param-localonly": "Шукати лише файли у локальному репозиторії.",
+       "apihelp-query+imageinfo-example-simple": "Вибрати інформацію про поточну версію [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageinfo-example-dated": "Вибрати інформацію про версії [[:File:Test.jpg]] від 2008 і раніше.",
+       "apihelp-query+images-description": "Видає усі файли, які містяться на вказаних сторінках.",
+       "apihelp-query+images-param-limit": "Скільки файлів виводити.",
+       "apihelp-query+images-param-images": "Перерахувати лише ці файли. Корисно для перевірки, чи певна сторінка має певний файл.",
+       "apihelp-query+images-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+images-example-simple": "Отримати список файлів, використаних на [[Main Page]].",
+       "apihelp-query+images-example-generator": "Отримати інформацію про всі файли, використані на [[Main Page]].",
+       "apihelp-query+imageusage-description": "Знайти всі сторінки, що використовують дану назву зображення.",
+       "apihelp-query+imageusage-param-title": "Назва для пошуку. Не можна використати разом з $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "ID сторінки для пошуку. Не можна використати разом з $1title.",
+       "apihelp-query+imageusage-param-namespace": "Простір назв для переліку.",
+       "apihelp-query+imageusage-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+imageusage-param-filterredir": "Як відфільтрувати перенаправлення. Якщо встановлено для неперенаправлень при увімкненому $1redirect, це застосовується лише до другого рівня.",
+       "apihelp-query+imageusage-param-limit": "Скільки всього виводити сторінок. Якщо увімкнено <var>$1redirect</var>, ліміт застосовується до кожного рівня окремо (це означає, що може бути видано до 2 * <var>$1limit</var> результатів).",
+       "apihelp-query+imageusage-param-redirect": "Якщо сторінка, яка посилається, є перенаправленням, знайти всі сторінки, які посилаються на це перенаправлення, теж. Максимальний ліміт зменшується наполовину.",
+       "apihelp-query+imageusage-example-simple": "Показати сторінки, які використовують [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+imageusage-example-generator": "Отримати інформацію про сторінки, які використовують [[:File:Albert Einstein Head.jpg]].",
+       "apihelp-query+info-description": "Отримати основні відомості про сторінку.",
+       "apihelp-query+info-param-prop": "Які додаткові властивості отримати:",
+       "apihelp-query+info-paramvalue-prop-protection": "Вивести рівень захисту кожної сторінки.",
+       "apihelp-query+info-paramvalue-prop-talkid": "Ідентифікатор сторінки обговорення для кожної сторінки, що не є обговоренням.",
+       "apihelp-query+info-paramvalue-prop-watched": "Вивести статус спостереженості кожної сторінки.",
+       "apihelp-query+info-paramvalue-prop-watchers": "Кількість спостерігачів, якщо це дозволено.",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Часова мітка сповіщення списку спостереження кожної сторінки.",
+       "apihelp-query+info-paramvalue-prop-subjectid": "Ідентифікатор батьківської сторінки для кожної сторінки обговорення.",
+       "apihelp-query+info-paramvalue-prop-url": "Дає повний URL, URL редагування та канонічний URL для кожної сторінки.",
+       "apihelp-query+info-paramvalue-prop-readable": "Чи користувач може редагувати цю сторінку.",
+       "apihelp-query+info-paramvalue-prop-preload": "Дає текст, виданий EditFormPreloadText.",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "Дає спосіб, у який відображається назва сторінки.",
+       "apihelp-query+info-param-testactions": "Перевірити, чи поточний користувач може виконувати певні дії на сторінці.",
+       "apihelp-query+info-param-token": "Використати натомість [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+info-example-simple": "Отримати інформацію про сторінку <kbd>Main Page</kbd>.",
+       "apihelp-query+info-example-protection": "Отримати загальну інформацію і дані про захист сторінки <kbd>Main Page</kbd>.",
+       "apihelp-query+iwbacklinks-description": "Знайти всі сторінки, які посилаються на дане інтервікі-посилання.\n\nМоже використовуватися, щоб знайти всі посилання з префіксом або всі посилання на назву (з даним префіксом). Без використання жодного параметра це, по суті, «всі інтервікі-посилання».",
+       "apihelp-query+iwbacklinks-param-prefix": "Префікс для інтервікі.",
+       "apihelp-query+iwbacklinks-param-title": "Інтервікі-посилання для пошуку. Повинно використовуватися з <var>$1blprefix</var>.",
+       "apihelp-query+iwbacklinks-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+iwbacklinks-param-prop": "Які властивості отримати:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Додає префікс інтервікі.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Додає назву інтервікі.",
+       "apihelp-query+iwbacklinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+iwbacklinks-example-simple": "Отримати сторінки, що посилаються на [[wikibooks:Test]].",
+       "apihelp-query+iwbacklinks-example-generator": "Отримати інформацію про сторінки, що посилаються на [[wikibooks:Test]].",
+       "apihelp-query+iwlinks-description": "Видає усі інтервікі-посилання із вказаних сторінок.",
+       "apihelp-query+iwlinks-param-url": "Чи отримувати повну URL-адресу (не може використовуватися з $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Які додаткові властивості отримати для кожного міжмовного посилання:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Додає повну URL-адресу.",
+       "apihelp-query+iwlinks-param-limit": "Скільки інтервікі-посилання виводити.",
+       "apihelp-query+iwlinks-param-prefix": "Видавати інтервікі-посилання лише з цим префіксом.",
+       "apihelp-query+iwlinks-param-title": "Інтервікі-посилання для пошуку. Повинно використовуватися з <var>$1prefix</var>.",
+       "apihelp-query+iwlinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+iwlinks-example-simple": "Отримати інтервікі-посилання зі сторінки <kbd>Main Page</kbd>.",
+       "apihelp-query+langbacklinks-description": "Знайти всі сторінки, які посилаються на дане мовне посилання.\n\nМоже бути використано для пошуку всіх посилань з кодом мови або всіх посилань на назву (з урахуванням мови). \nБез жодного параметра це «усі мовні посилання».\n\nЗверніть увагу, що це може не розглядати мовні посилання, додані розширеннями.",
+       "apihelp-query+langbacklinks-param-lang": "Мова мовного посилання.",
+       "apihelp-query+langbacklinks-param-title": "Мовне посилання для пошуку. Мусить бути використане з $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+langbacklinks-param-prop": "Які властивості для отримання:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Додає код мови мовного посилання.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Додає назву мовного посилання.",
+       "apihelp-query+langbacklinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+langbacklinks-example-simple": "Отримати сторінки, що посилаються на [[:fr:Test]].",
+       "apihelp-query+langbacklinks-example-generator": "Отримати інформацію про сторінки, що посилаються на [[:fr:Test]].",
+       "apihelp-query+langlinks-description": "Видає усі міжмовні посилання із вказаних сторінок.",
+       "apihelp-query+langlinks-param-limit": "Скільки мовних посилань виводити.",
+       "apihelp-query+langlinks-param-url": "Чи отримувати повну URL-адресу (не може використовуватися з <var>$1prop</var>).",
+       "apihelp-query+langlinks-param-prop": "Які додаткові властивості для отримання кожного із міжмовного посилання:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Додає повну URL-адресу.",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "Додає локалізовану назву мови (найкращий варіант). Використайте <var>$1inlanguagecode</var> для контролю мови.",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "Додає самоназву мови.",
+       "apihelp-query+langlinks-param-lang": "Видавати лише мовні посилання з кодом мови.",
+       "apihelp-query+langlinks-param-title": "Посилання для пошуку. Повинно використовуватися з <var>$1lang</var>.",
+       "apihelp-query+langlinks-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Код мови для локалізованих назв мов.",
+       "apihelp-query+langlinks-example-simple": "Отримати міжмовні посилання зі сторінки <kbd>Main Page</kbd>.",
+       "apihelp-query+links-description": "Видає усі посилання із вказаних сторінок.",
+       "apihelp-query+links-param-namespace": "Показати посилання лише у цих просторах назв.",
+       "apihelp-query+links-param-limit": "Скільки посилань виводити.",
+       "apihelp-query+links-param-titles": "Перерахувати лише посилання на ці назви. Корисно для перевірки, чи певна сторінка посилається на певну назву.",
+       "apihelp-query+links-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+links-example-simple": "Отримати посилання зі сторінки <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-generator": "Отримати інформацію про сторінки посилань на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+links-example-namespaces": "Отримати посилання зі сторінки <kbd>Main Page</kbd> у просторах назв {{ns:user}} і {{ns:template}}.",
+       "apihelp-query+linkshere-description": "Знайти усі сторінки, що посилаються на подані сторінки.",
+       "apihelp-query+linkshere-param-prop": "Які властивості отримати:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "ID кожної сторінки.",
+       "apihelp-query+linkshere-paramvalue-prop-title": "Назва кожної сторінки.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Відзначити, якщо сторінка є перенаправленням.",
+       "apihelp-query+linkshere-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+linkshere-param-limit": "Скільки результатів виводити.",
+       "apihelp-query+linkshere-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+       "apihelp-query+linkshere-example-simple": "Отримати список сторінок, що посилаються на [[Main Page]].",
+       "apihelp-query+linkshere-example-generator": "Отримати інформацію про сторінки, що посилаються на [[Main Page]].",
+       "apihelp-query+logevents-description": "Отримати події з журналів.",
+       "apihelp-query+logevents-param-prop": "Які властивості отримати:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "Додає ID події в журналі.",
+       "apihelp-query+logevents-paramvalue-prop-title": "Додає назву сторінки події в журналі.",
+       "apihelp-query+logevents-paramvalue-prop-type": "Додає тип події в журналі.",
+       "apihelp-query+logevents-paramvalue-prop-user": "Додає користувача, відповідального за подію в журналі.",
+       "apihelp-query+logevents-paramvalue-prop-userid": "Додає ID користувача, відповідального за подію в журналі.",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "Додає часову мітку події.",
+       "apihelp-query+logevents-paramvalue-prop-comment": "Додає коментар події.",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "Додає проаналізований коментар події.",
+       "apihelp-query+logevents-paramvalue-prop-details": "Виводить додаткові деталі щодо події.",
+       "apihelp-query+logevents-paramvalue-prop-tags": "Виводить мітки події.",
+       "apihelp-query+logevents-param-type": "Відфільтрувати записи журналу лише цього типу.",
+       "apihelp-query+logevents-param-action": "Відфільтрувати дії журналу до лише цієї дії. Перезаписує <var>$1type</var>. Джокери на зразок <kbd>action/*</kbd> дозволяють вказати будь-який рядок замість астеріска.",
+       "apihelp-query+logevents-param-start": "Часова мітка початку переліку.",
+       "apihelp-query+logevents-param-end": "Часова мітка завершення переліку.",
+       "apihelp-query+logevents-param-user": "Відфільтрувати серед записів зроблені поданим користувачем.",
+       "apihelp-query+logevents-param-title": "Відфільтрувати серед записів пов'язані зі сторінкою.",
+       "apihelp-query+logevents-param-namespace": "Відфільтрувати до записів у поданому просторі назв.",
+       "apihelp-query+logevents-param-prefix": "Відфільтрувати до записів, що починаються з цього префікса.",
+       "apihelp-query+logevents-param-tag": "Перерахувати лише записи подій, помічені цим теґом.",
+       "apihelp-query+logevents-param-limit": "Скільки всього виводити записів подій.",
+       "apihelp-query+logevents-example-simple": "Перелічити останні подій в журналі.",
+       "apihelp-query+pagepropnames-description": "Перелічити усі назви властивостей сторінки, що використовуються у вікі.",
+       "apihelp-query+pagepropnames-param-limit": "Максимальна кількість назв для виведення.",
+       "apihelp-query+pagepropnames-example-simple": "Отримати перші 10 назв властивостей.",
+       "apihelp-query+pageprops-description": "Дає різні властивості, визначені у вмісті сторінки.",
+       "apihelp-query+pageprops-param-prop": "Перерахувати лише ці властивості. Корисно для перевірки, чи певна сторінка використовує певну властивість сторінки.",
+       "apihelp-query+pageprops-example-simple": "Отримати властивості для сторінок <kbd>Main Page</kbd> і <kbd>MediaWiki</kbd>.",
+       "apihelp-query+pageswithprop-description": "Перелічити усі сторінки, що використовують подану властивість сторінки.",
+       "apihelp-query+pageswithprop-param-propname": "Властивість сторі́нки, для якої перелічити сторінки́.",
+       "apihelp-query+pageswithprop-param-prop": "Які відомості включати:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Додає ID сторінки.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Додає заголовок і ID простору назв сторінки.",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "Додає значення властивості сторінки.",
+       "apihelp-query+pageswithprop-param-limit": "Максимальна кількість сторінок для виведення.",
+       "apihelp-query+pageswithprop-param-dir": "У якому напрямку сортувати.",
+       "apihelp-query+pageswithprop-example-simple": "Перелічити перші 10, що використовують <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
+       "apihelp-query+pageswithprop-example-generator": "Отримати додаткову інформацію про перші 10 сторінок, що використовують <code>_&#95;NOTOC_&#95;</code>.",
+       "apihelp-query+prefixsearch-description": "Виконати пошук назв сторінок по префіксу.",
+       "apihelp-query+prefixsearch-param-search": "Рядок пошуку.",
+       "apihelp-query+prefixsearch-param-namespace": "Простори назв, у яких шукати.",
+       "apihelp-query+prefixsearch-param-limit": "Максимальна кількість результатів для виведення.",
+       "apihelp-query+prefixsearch-param-offset": "Кількість результатів, які пропустити.",
+       "apihelp-query+prefixsearch-example-simple": "Шукати назви сторінок, які починаються з <kbd>meaning</kbd>.",
+       "apihelp-query+protectedtitles-description": "Вивести список усіх назв, захищених від створення.",
+       "apihelp-query+protectedtitles-param-namespace": "Перерахувати назви лише в цих просторах назв.",
+       "apihelp-query+protectedtitles-param-level": "Перерахувати лише назви з цими рівням захисту.",
+       "apihelp-query+protectedtitles-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+protectedtitles-param-start": "Почати список з цієї часової мітки захисту.",
+       "apihelp-query+protectedtitles-param-end": "Закінчити список цією часовою міткою захисту.",
+       "apihelp-query+protectedtitles-param-prop": "Які властивості отримати:",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Додає часову мітку встановлення захисту.",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "Додає користувача, який встановив захист.",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "Додає ID користувача, який встановив захист.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Додає коментар захисту.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Додає проаналізований коментар захисту.",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "Додає часову мітку закінчення захисту.",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "Додає рівень захисту.",
+       "apihelp-query+protectedtitles-example-simple": "Вивести список захищених назв.",
+       "apihelp-query+protectedtitles-example-generator": "Знайти посилання на захищені назви в основному просторі назв.",
+       "apihelp-query+querypage-description": "Отримати список, кий дає спеціальна сторінка на базі QueryPage.",
+       "apihelp-query+querypage-param-page": "Назва спеціальної сторінки. Зважте, що чутлива до регістру.",
+       "apihelp-query+querypage-param-limit": "Кількість результатів, які виводити.",
+       "apihelp-query+querypage-example-ancientpages": "Видати результати з [[Special:Ancientpages]].",
+       "apihelp-query+random-description": "Отримати набір випадкових сторінок.\n\nСторінки перелічені у певній послідовності, лише початкова точка рандомна. Це означає, що якщо, наприклад, <samp>Main Page</samp> є першою випадковою сторінкою у списку, <samp>List of fictional monkeys</samp> <em>завжди</em> буде другою, <samp>List of people on stamps of Vanuatu</samp> — третьою, і т. д.\n\nЯкщо кількість сторінок у просторі назв менша, ніж <var>$1limit</var>, буде показано менше сторінок. Та сама сторінка не виводиться двічі.",
+       "apihelp-query+random-param-namespace": "Вивести сторінки лише у цих просторах назв.",
+       "apihelp-query+random-param-limit": "Обмежити кількість випадкових сторінок, які буде видано.",
+       "apihelp-query+random-param-redirect": "Завантажити випадкове перенаправлення замість випадкової сторінки.",
+       "apihelp-query+random-example-simple": "Отримати дві випадкові сторінки з основного простору назв.",
+       "apihelp-query+random-example-generator": "Видати інформацію про дві випадкові сторінки з основного простору назв.",
+       "apihelp-query+recentchanges-description": "Перерахувати нещодавні зміни.",
+       "apihelp-query+recentchanges-param-start": "Часова мітка початку переліку.",
+       "apihelp-query+recentchanges-param-end": "Часова мітка завершення переліку.",
+       "apihelp-query+recentchanges-param-namespace": "Відфільтрувати до змін лише у цих просторах назв.",
+       "apihelp-query+recentchanges-param-user": "Перерахувати лише зміни, зроблені цим користувачем.",
+       "apihelp-query+recentchanges-param-excludeuser": "Не перераховувати зміни, зроблені цим користувачем.",
+       "apihelp-query+recentchanges-param-tag": "Перерахувати лише зміни, помічені цим теґом.",
+       "apihelp-query+recentchanges-param-prop": "Включити додаткові відомості:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Додає користувача, відповідального за редагування і мітки, якщо він IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "Додає ID користувача, відповідального за редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Додає коментар редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "Додає прапорці редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "Додає назву сторінки, де було редагування.",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "Додає ID сторінки, ID нещодавніх змін, а також ID нової і старої версій.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Додає нову і стару довжину сторінки в байтах.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "Помічає редагування, якщо сторінка є перенаправленням.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Помічає редагування як відпатрульвані чи невідпатрульовані.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Додає інформацію журналу (ID журналу, тип журналу тощо) до записів журналу.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Виводить мітки запису.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Додає контрольну суму вмісту для записів, пов'язаних з версією.",
+       "apihelp-query+recentchanges-param-token": "Використати натомість <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-query+recentchanges-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "Скільки всього змін виводити.",
+       "apihelp-query+recentchanges-param-type": "Які типи змін показувати.",
+       "apihelp-query+recentchanges-param-toponly": "Виводити лише зміни, які є останньою версією.",
+       "apihelp-query+recentchanges-example-simple": "Вивести нещодавні зміни.",
+       "apihelp-query+recentchanges-example-generator": "Отримати інформацію про сторінки з недавніми невідпатрульованими змінами.",
+       "apihelp-query+redirects-description": "Видає усі перенаправлення на дані сторінки.",
+       "apihelp-query+redirects-param-prop": "Які властивості отримати:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "Ідентифікатор сторінки кожного перенаправлення.",
+       "apihelp-query+redirects-paramvalue-prop-title": "Назва кожного перенаправлення.",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "Фрагмент кожного перенаправлення, якщо є.",
+       "apihelp-query+redirects-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+redirects-param-limit": "Скільки перенаправлень виводити.",
+       "apihelp-query+redirects-param-show": "Показати лише елементи, які відповідають цим критеріям:\n;fragment:Показати лише перенаправлення з фрагментом.\n;!fragment:Показати лише перенаправлення без фрагмента.",
+       "apihelp-query+redirects-example-simple": "Отримати список перенаправлень на [[Main Page]].",
+       "apihelp-query+redirects-example-generator": "Отримати інформацію про всі перенаправлення на [[Main Page]].",
+       "apihelp-query+revisions-description": "Отримати інформацію про версію.\n\nМоже бути використано кількома способами:\n# Отримати дані про набір сторінок (останні версії), вказавши назви або ідентифікатори сторінок.\n# Отримати версії для однієї вказаної сторінки, використавши назви або ідентифікатори і початок, кінець чи ліміт.\n# Отримати дані про набір версій, встановивши їх ID й ідентифікатори версій.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "Може використовуватися тільки з однією сторінкою (режим #2).",
+       "apihelp-query+revisions-param-startid": "З якого ID версії почати перелік.",
+       "apihelp-query+revisions-param-endid": "Зупинити перелік версій на цьому ID версії.",
+       "apihelp-query+revisions-param-start": "З якої часової мітки версії почати перелік.",
+       "apihelp-query+revisions-param-end": "Перелічувати до цієї часової мітки.",
+       "apihelp-query+revisions-param-user": "Включати лише версій, зроблені цим користувачем.",
+       "apihelp-query+revisions-param-excludeuser": "Виключити версії, зроблені цим користувачем.",
+       "apihelp-query+revisions-param-tag": "Перелічити лише версії, позначені цією міткою.",
+       "apihelp-query+revisions-param-token": "Які токени отримати для кожної версії.",
+       "apihelp-query+revisions-example-content": "Отримати дані з вмістом останньої версії для заголовків <kbd>API</kbd> та <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-last5": "Отримати 5 останніх версії <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5": "Отримати 5 перших версій <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5-after": "Отримати 5 перших версій <kbd>Main Page</kbd>, зроблених після 2006-05-01.",
+       "apihelp-query+revisions-example-first5-not-localhost": "Отримати 5 перших версій <kbd>Main Page</kbd>, що не були зроблені анонімним користувачем <kbd>127.0.0.1</kbd>.",
+       "apihelp-query+revisions-example-first5-user": "Отримати 5 перших версій <kbd>Main Page</kbd>, що були зроблені користувачем <kbd>MediaWiki default</kbd>.",
+       "apihelp-query+revisions+base-param-prop": "Які властивості отримати для кожної версії:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "ID версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "Позначки версії (незначні).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Часова мітка версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "Користувач, який створив версію.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "ID користувача, який створив версію.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Довжина версії (в байтах).",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID моделі вмісту версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Коментар користувача до версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Проаналізований коментар користувача до версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Текст версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Мітки версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>).",
+       "apihelp-query+revisions+base-param-limit": "Обмежити кількість версій, які буде видано.",
+       "apihelp-query+revisions+base-param-expandtemplates": "Розгорнути шаблони у вмісті версії (передбачає $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Генерувати синтаксичне дерево XML для вмісту версії (передбачає $1prop=content; замінено на <kbd>$1prop=parsetree</kbd>).",
+       "apihelp-query+revisions+base-param-parse": "Аналізувати вміст версії (передбачає $1prop=content). З причин продуктивності, якщо використовується ця опція, $1limit встановлюється як 1.",
+       "apihelp-query+revisions+base-param-section": "Витягнути вміст лише розділу з цим номером.",
+       "apihelp-query+revisions+base-param-diffto": "ID версії, з якою порівняти кожну версію. Використайте <kbd>prev</kbd>, <kbd>next</kbd> і <kbd>cur</kbd> для попередньої, наступної та поточної версій відповідно.",
+       "apihelp-query+revisions+base-param-difftotext": "Текст, з яким порівняти кожну версію. Порівнює лише обмежену кількість версій. Перевизначає <var>$1diffto</var>. Якщо вказано <var>$1section</var>, лише ця версія буде порівняна з цим текстом.",
+       "apihelp-query+revisions+base-param-contentformat": "Формат серіалізації, використаний для <var>$1difftotext</var> й очікуваний для контенту-результату.",
+       "apihelp-query+search-description": "Виконати повнотекстовий пошук.",
+       "apihelp-query+search-param-search": "Шукати назви сторінок або вміст, що співпадає з цим значенням. Ви можете використати рядок пошуку для виклику спеціальних функцій пошуку, залежно від внутрішніх установок пошуку у вікі.",
+       "apihelp-query+search-param-namespace": "Шукати лише в межах цих просторів назв.",
+       "apihelp-query+search-param-what": "Який тип пошуку виконати.",
+       "apihelp-query+search-param-info": "Які метадані отримати.",
+       "apihelp-query+search-param-prop": "Які властивості для виведення:",
+       "apihelp-query+search-paramvalue-prop-size": "Додає розмір сторінки в байтах.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Додає кількість слів на сторінці.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Додає часову мітку останнього редагування сторінки.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Додає проаналізований уривок сторінки.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Додає проаналізований уривок заголовка сторінки.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "Додає проаналізований уривок перенаправлення.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Додає заголовок відповідного перенаправлення.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "Додає проаналізований уривок заголовка відповідного розділу.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "Додає заголовок відповідного розділу.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "Додає проаналізований уривок відповідної категорії.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Додає перемикач, який показує, є пошук знайшов вміст файлу.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>",
+       "apihelp-query+search-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+search-param-interwiki": "Включати інтервікі в результатах пошуку, якщо доступно.",
+       "apihelp-query+search-param-backend": "Який бекенд пошуку використовувати, якщо не за замовчуванням.",
+       "apihelp-query+search-example-simple": "Шукати <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-text": "Шукати в текстах <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-generator": "Отримати інформацію про сторінки, на яких знайдено <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-description": "Видати загальну інформацію про сайт.",
+       "apihelp-query+siteinfo-param-prop": "Яку інформацію отримати:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Загальна системна інформація.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Список зареєстрованих просторів назв та їхні канонічні назви.",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Список зареєстрованого простору прізвиськ.",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "Список аліасів спеціальної сторінки.",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Список магічних слів та їх аліасів.",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "Видає статистику сайту.",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Видає карту інтервікі (за бажанням, фільтровану, за бажанням локалізовану з використанням <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Видає сервер бази даних з найбільшою затримкою відповіді.",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Видає групи користувачів і пов'язані дозволи.",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "Видає бібліотеки, встановлені у вікі.",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "Видає розширення, встановлені у вікі.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Видає список розширень файлів, які дозволено завантажувати.",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Видає інформацію щодо прав (ліцензії) вікі, якщо наявна.",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Видає інформацію про наявні типи обмежень (захисту).",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "Видає список мов, які підтримує MediaWiki (за бажанням локалізовані через <var>$1inlanguagecode</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "Видає список усіх доступних тем оформлення (опціонально локалізовані з використанням <var>$1inlanguagecode</var>, в іншому разі — мовою вмісту).",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Видає список теґів розширення парсеру.",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Видає список гуків парсерних функцій.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Видає список усіх підписаних гуків (вміст <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Видає список змінних ID.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Видає список протоколів, дозволених у зовнішніх посиланнях.",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Видає значення налаштувань користувача за замовчуванням.",
+       "apihelp-query+siteinfo-param-filteriw": "Видати лише локальні або лише нелокальні елементи карти інтервікі.",
+       "apihelp-query+siteinfo-param-showalldb": "Перелічити усі сервери баз даних, а не лише той, який робить найбільшу затримку.",
+       "apihelp-query+siteinfo-param-numberingroup": "Перераховує кількість користувачів у групах користувачів.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Код мови для локалізованих назв мов (найкращий варіант) і назв тем оформлення.",
+       "apihelp-query+siteinfo-example-simple": "Вибрати інформацію про сайт.",
+       "apihelp-query+siteinfo-example-interwiki": "Отримати список локальних інтервікі-префіксів.",
+       "apihelp-query+siteinfo-example-replag": "Перевірити поточне відставання реплікації.",
+       "apihelp-query+stashimageinfo-description": "Видає інформацію про приховані файли.",
+       "apihelp-query+stashimageinfo-param-filekey": "Ключ, який ідентифікує попереднє завантаження, що було тимчасово приховане.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Аліас для $1filekey, для зворотної сумісності.",
+       "apihelp-query+stashimageinfo-example-simple": "Видає інформацію про прихований файл.",
+       "apihelp-query+stashimageinfo-example-params": "Видає мініатюри для двох прихованих файлів.",
+       "apihelp-query+tags-description": "Перелічити мітки змін.",
+       "apihelp-query+tags-param-limit": "Максимальна кількість міток у списку.",
+       "apihelp-query+tags-param-prop": "Які властивості отримати:",
+       "apihelp-query+tags-paramvalue-prop-name": "Додає назву мітки.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Додає системне повідомлення для мітки.",
+       "apihelp-query+tags-paramvalue-prop-description": "Додає опис мітки.",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "Додає кількість версій та записів журналу, які мають цю мітку.",
+       "apihelp-query+tags-paramvalue-prop-defined": "Показує, чи мітка визначена.",
+       "apihelp-query+tags-paramvalue-prop-source": "Отримує джерела мітки, що може включати <samp>extension</samp> для визначених розширеннями міток і <samp>manual</samp> для міток, які користувачі можуть застосовувати вручну.",
+       "apihelp-query+tags-paramvalue-prop-active": "І все ж позначка досі задіяна.",
+       "apihelp-query+tags-example-simple": "Перелічити доступні мітки.",
+       "apihelp-query+templates-description": "Видає усі сторінки, які включені на вказаних сторінках.",
+       "apihelp-query+templates-param-namespace": "Показати шаблони лише у цьому просторі назв.",
+       "apihelp-query+templates-param-limit": "Скільки шаблонів виводити.",
+       "apihelp-query+templates-param-templates": "Перерахувати лише ці шаблони. Корисно для перевірки, чи певна сторінка використовує певний шаблон.",
+       "apihelp-query+templates-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+templates-example-simple": "Отримати шаблони, використані на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-generator": "Отримати інформацію про сторінки шаблонів, використаних на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-namespaces": "Отримати сторінки у просторах назв {{ns:user}} і {{ns:template}}, які включені на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+tokens-description": "Отримує токени для дій, що змінюють дані.",
+       "apihelp-query+tokens-param-type": "Типи токена для запиту.",
+       "apihelp-query+tokens-example-simple": "Отримати csrf-токен (за замовчуванням).",
+       "apihelp-query+tokens-example-types": "Отримати токен спостереження і токен патрулювання.",
+       "apihelp-query+transcludedin-description": "Знайти усі сторінки, що включають подані сторінки.",
+       "apihelp-query+transcludedin-param-prop": "Які властивості отримати:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID кожної сторінки.",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Назва кожної сторінки.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Помітка, якщо сторінка є перенаправленням.",
+       "apihelp-query+transcludedin-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+transcludedin-param-limit": "Скільки результатів виводити.",
+       "apihelp-query+transcludedin-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+       "apihelp-query+transcludedin-example-simple": "Отримати список сторінок, що включають <kbd>Main Page</kbd>.",
+       "apihelp-query+transcludedin-example-generator": "Отримати інформацію про сторінки, які включають <kbd>Main Page</kbd>.",
+       "apihelp-query+usercontribs-description": "Отримати всі редагування користувача.",
+       "apihelp-query+usercontribs-param-limit": "Максимальна кількість елементів внеску для виведення.",
+       "apihelp-query+usercontribs-param-start": "З якої часової мітки виводити.",
+       "apihelp-query+usercontribs-param-end": "До якої часової мітки виводити.",
+       "apihelp-query+usercontribs-param-user": "Користувачі, для яких отримати внесок.",
+       "apihelp-query+usercontribs-param-userprefix": "Отримати внесок усіх користувачів, чиї імена починаються цим значенням. Перевизначає $1user.",
+       "apihelp-query+usercontribs-param-namespace": "Перерахувати записи внеску лише в цих просторах назв.",
+       "apihelp-query+usercontribs-param-prop": "Включити додаткові відомомсті:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "Додає ID сторінки й ID версії.",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "Додає назву й ID простору назв сторінки.",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "Додає коментар редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "Додає новий розмір редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "Додає зміну розміру порівняно з попереднім редагуванням.",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "Додає прапорці редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Відзначає патрульовані редагування.",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "Перелічує мітки редагування.",
+       "apihelp-query+usercontribs-param-show": "Показати лише елементи, що відповідають цим критеріям, наприклад, лише не незначні редагування: <kbd>$2show=!minor</kbd>.\n\nЯкщо вказано <kbd>$2show=patrolled</kbd> або <kbd>$2show=!patrolled</kbd>, версії, старіші ніж <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунда|секунди|секунд}}) не будуть показуватися.",
+       "apihelp-query+usercontribs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+       "apihelp-query+usercontribs-param-toponly": "Виводити лише зміни, які є останньою версією.",
+       "apihelp-query+usercontribs-example-user": "Показати внесок користувача <kbd>Example</kbd>.",
+       "apihelp-query+usercontribs-example-ipprefix": "Показати внесок з усіх IP-адрес з префіксом <kbd>192.0.2.</kbd>.",
+       "apihelp-query+userinfo-description": "Отримати інформацію про поточного користувача.",
+       "apihelp-query+userinfo-param-prop": "Які саме відомості включати:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "Позначає, чи поточний користувач заблокований, ким, з якої причини.",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "Додає мітку <samp>messages</samp>, якщо у користувача є непроглянуті повідомлення.",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Перелічує усі групи, до яких належить поточний користувач.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Перелічує усі групи, до яких поточний користувач належить автоматично.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Перелічує усі права, які має поточний користувач.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Перелічує групи, у які користувач може додавати і з яких вилучати.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Перелічує усі налаштування, які поточний користувач встановив.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Застаріле.</span> Отримати знак для зміни налаштувань поточного користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Додає кількість редагувань поточного користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Перелічує усі ліміти оцінок, застосовні до поточного користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "Додає справжнє ім'я користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Додає електронну пошту користувача та дату її підтвердження.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Дублює шапку <code>Accept-Language</code>, надіслану клієнтом у структурованому форматі.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "ДОдає дату реєстрації користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Додає кількість непрочитаних сторінок у списку спостереження користувача (максимально $1; видає «<samp>$2</samp>», якщо більше).",
+       "apihelp-query+userinfo-example-simple": "Отримати інформацію про поточного користувача.",
+       "apihelp-query+userinfo-example-data": "Отримати додаткову інформацію про поточного користувача.",
+       "apihelp-query+users-description": "Отримати інформацію про список користувачів.",
+       "apihelp-query+users-param-prop": "Яку інформацію включити:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "Мітки про те чи є користувач заблокованим, ким, і з якою причиною.",
+       "apihelp-query+users-paramvalue-prop-groups": "Перелічує всі групи, до яких належить кожен з користувачів.",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "Перелічує всі групи, членом яких користувач є автоматично.",
+       "apihelp-query+users-paramvalue-prop-rights": "Перелічує всі права, які має кожен з користувачів.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Додає лічильник редагувань користувача.",
+       "apihelp-query+users-paramvalue-prop-registration": "Додає часову мітку реєстрації користувача.",
+       "apihelp-query+users-paramvalue-prop-emailable": "Помічає чи хоче користувач отримувати електронну пошту через [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "Помічає стать користувача. Повертає \"male\", \"female\", або \"unknown\".",
+       "apihelp-query+users-param-users": "Список користувачів, для яких отримати інформацію.",
+       "apihelp-query+users-param-token": "Використати натомість <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-query+users-example-simple": "Вивести інформацію для користувача <kbd>Example</kbd>.",
+       "apihelp-query+watchlist-description": "Отримати нещодавні зміни сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-param-allrev": "Включити декілька версій тієї з сторінки у поданому часовому діапазоні.",
+       "apihelp-query+watchlist-param-start": "Часова мітка, з якої почати перелік.",
+       "apihelp-query+watchlist-param-end": "Часова мітка завершення переліку.",
+       "apihelp-query+watchlist-param-namespace": "Відфільтрувати до змін лише у поданих просторах назв.",
+       "apihelp-query+watchlist-param-user": "Перерахувати лише зміни, зроблені цим користувачем.",
+       "apihelp-query+watchlist-param-excludeuser": "Не перераховувати зміни, зроблені цим користувачем.",
+       "apihelp-query+watchlist-param-limit": "Скільки всього видати результатів за один запит.",
+       "apihelp-query+watchlist-param-prop": "Які додаткові властивості отримати:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Додає ID версій та ID сторінок.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Додає заголовок сторінки.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Додає прапорці редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Додає користувача, який зробив редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Додає ідентифікатор користувача, який зробив редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Додає коментар редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Позначає відпатрульовані редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Додає стару і нову довжину сторінки.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Додає інформацію журналу, де це доречно.",
+       "apihelp-query+watchlist-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Які типи змін показувати:\n;edit:Звичайні редагування сторінки.\n;external:Зовнішні зміни.\n;new:Створення сторінок.\n;log:Записи журналу.",
+       "apihelp-query+watchlist-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+       "apihelp-query+watchlist-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+       "apihelp-query+watchlist-example-simple": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-props": "Вибрати додаткову інформацію про верхню версію нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-allrev": "Вибрати інформацію про усі нещодавні зміни на сторінках у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-generator": "Видати інформацію про сторінку для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-generator-rev": "Вибрати інформацію про версію для усіх нещодавніх змін на сторінках у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-wlowner": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження користувача <kbd>Example</kbd>.",
+       "apihelp-query+watchlistraw-description": "Отримати усі сторінки у списку спостереження поточного користувача.",
+       "apihelp-query+watchlistraw-param-namespace": "Перерахувати сторінки лише в поданих просторах назв.",
+       "apihelp-query+watchlistraw-param-limit": "Скільки всього видати результатів за один запит.",
+       "apihelp-query+watchlistraw-param-prop": "Які додаткові властивості отримати:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+       "apihelp-query+watchlistraw-param-show": "Перелічити лише елементи, які відповідають цим критеріям.",
+       "apihelp-query+watchlistraw-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+       "apihelp-query+watchlistraw-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+       "apihelp-query+watchlistraw-param-fromtitle": "Назва (з префіксом простору назв), з якої почати перерахування.",
+       "apihelp-query+watchlistraw-param-totitle": "Назва (з префіксом простору назв), якою закінчити перерахування.",
+       "apihelp-query+watchlistraw-example-simple": "Перелічити сторінки у списку спостереження поточного користувача.",
+       "apihelp-query+watchlistraw-example-generator": "Вибрати інформацію про сторінку для сторінок у списку спостереження поточного користувача.",
+       "apihelp-revisiondelete-description": "Вилучити або відновити версії.",
+       "apihelp-revisiondelete-param-type": "Тип здійснюваного вилучення версії.",
+       "apihelp-revisiondelete-param-target": "Назва сторінки, версію якої вилучити, якщо вимагається для цього типу.",
+       "apihelp-revisiondelete-param-ids": "Ідентифікатори версій, які слід вилучити.",
+       "apihelp-revisiondelete-param-hide": "Що приховати у кожній з версій.",
+       "apihelp-revisiondelete-param-show": "Що показати у кожній з версії.",
+       "apihelp-revisiondelete-param-suppress": "Чи приховати дані від адміністраторів так само як від усіх інших.",
+       "apihelp-revisiondelete-param-reason": "Причина вилучення або відновлення.",
+       "apihelp-revisiondelete-example-revision": "Приховати вміст версії <kbd>12345</kbd> сторінки <kbd>Main Page</kbd>.",
+       "apihelp-revisiondelete-example-log": "Приховати всі дані у записі журналу <kbd>67890</kbd> з причиною <kbd>BLP violation</kbd>.",
+       "apihelp-rollback-description": "Скасувати останнє редагування цієї сторінки.\n\nЯкщо користувач, який редагував сторінку, зробив декілька редагувань підряд, їх усі буде відкочено.",
+       "apihelp-rollback-param-title": "Назва сторінки, у якій здійснити відкіт. Не може використовуватись разом з <var>$1pageid</var>.",
+       "apihelp-rollback-param-pageid": "Ідентифікатор сторінки у якій здійснити відкіт. Не може використовуватись разом з <var>$1title</var>.",
+       "apihelp-rollback-param-user": "Ім'я користувача чиї редагування слід відкотити.",
+       "apihelp-rollback-param-summary": "Нестандартний опис редагування. Якщо порожній, буде використано опис редагування за замовчуванням.",
+       "apihelp-rollback-param-markbot": "Позначити відкинуті редагування та відкіт як редагування бота.",
+       "apihelp-rollback-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-rollback-example-simple": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені користувачем <kbd>Example</kbd>.",
+       "apihelp-rollback-example-summary": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені IP-користувачем <kbd>192.0.2.5</kbd> з причиною <kbd>Reverting vandalism</kbd>, та позначити ці редагування та відкіт як редагування бота.",
+       "apihelp-rsd-description": "Експортувати як схему RSD (Really Simple Discovery).",
+       "apihelp-rsd-example-simple": "Експортувати RSD-схему.",
+       "apihelp-setnotificationtimestamp-description": "Оновити часову мітку сповіщень для сторінок, що спостерігаються.\n\nЦе зачепить підсвічування змінених сторінок у списку спостереження та історії, а також надсилання електронного листа якщо опція налаштувань «{{int:tog-enotifwatchlistpages}}» увімкнена.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "Опрацювати всі сторінки, що спостерігаються.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Часова мітка, яку вказати у якості часової мітки сповіщень.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Версія до якої вказати часову мітку сповіщень (лише одна сторінка).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Версія, до новішої від якої вказати часову мітку сповіщень (лише одна сторінка).",
+       "apihelp-setnotificationtimestamp-example-all": "Стерти статус сповіщень для всього списку спостереження.",
+       "apihelp-setnotificationtimestamp-example-page": "Стерти статус сповіщень для <kbd>Main page</kbd>.",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Встановити часову мітку сповіщень для <kbd>Main page</kbd> так, що всі редагування після 1 січня 2012 будуть виглядати як не переглянуті.",
+       "apihelp-setnotificationtimestamp-example-allpages": "Стерти статус сповіщень для сторінок у просторі назв <kbd>{{ns:user}}</kbd>.",
+       "apihelp-tag-description": "Додати або вилучити зміни міток з окремих версій або записів журналу.",
+       "apihelp-tag-param-rcid": "Один або більше ідентифікаторів останніх змін, до яких додати або вилучити мітки.",
+       "apihelp-tag-param-revid": "Один або більше ідентифікатор з якого додати або вилучити мітку.",
+       "apihelp-tag-param-logid": "Один або більше ідентифікатор запису журналу з якого вилучити або додати мітку.",
+       "apihelp-tag-param-add": "Мітки, які слід додати. Лише визначені вручну мітки може бути додано.",
+       "apihelp-tag-param-remove": "Мітки, які слід вилучити. Лише мітки, які було визначено вручну, або взагалі не визначено, можуть бути вилучені.",
+       "apihelp-tag-param-reason": "Причина зміни.",
+       "apihelp-tag-example-rev": "Додати мітку <kbd>vandalism</kbd> до версії з ідентифікатором 123 без вказання причини",
+       "apihelp-tag-example-log": "Вилучити мітку <kbd>spam</kbd> з запису журналу з ідентифікатором 123 з причиною <kbd>Wrongly applied</kbd>",
+       "apihelp-tokens-description": "Отримати жетони для дій пов'язаних зі зміною даних.\n\nЦей модуль застарів на користь [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Які типи жетонів запитати.",
+       "apihelp-tokens-example-edit": "Отримати жетон редагування (за замовчуванням).",
+       "apihelp-tokens-example-emailmove": "Отримати жетон електронної пошти та жетон перейменування.",
+       "apihelp-unblock-description": "Розблокувати користувача.",
+       "apihelp-unblock-param-id": "Ідентифікатор блоку чи розблокування (отриманий через <kbd>list=blocks</kbd>). Не може бути використано разом з <var>$1user</var>.",
+       "apihelp-unblock-param-user": "Ім'я користувача, IP-адреса чи IP-діапазон до розблокування. Не може бути використано разом з <var>$1id</var>.",
+       "apihelp-unblock-param-reason": "Причина розблокування.",
+       "apihelp-unblock-example-id": "Зняти блокування з ідентифікатором #<kbd>105</kbd>.",
+       "apihelp-unblock-example-user": "Розблокувати користувача <kbd>Bob</kbd> з причиною <kbd>Sorry Bob</kbd>.",
+       "apihelp-undelete-description": "Відновити версії вилученої сторінки.\n\nСписок вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "Назва сторінки, яку слід відновити.",
+       "apihelp-undelete-param-reason": "Причина відновлення.",
+       "apihelp-undelete-param-timestamps": "Часові мітки версій, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+       "apihelp-undelete-param-fileids": "Ідентифікатори версій файлів, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+       "apihelp-undelete-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-undelete-example-page": "Відновити сторінку <kbd>Main Page</kbd>.",
+       "apihelp-undelete-example-revisions": "Відновити дві версії сторінки <kbd>Main Page</kbd>.",
+       "apihelp-upload-description": "Завантажити файл, або отримати статус завантажень у процесі.\n\nДоступні декілька методів:\n* Завантажити вміст файлу напряму, використовуючи параметр <var>$1file</var>.\n* Завантажити файл шматками, використовуючи параметри <var>$1filesize</var>, <var>$1chunk</var>, та <var>$1offset</var>.\n* Змусити сервер Медіавікі отримати файл за URL, використовуючи параметр <var>$1url</var>.\n* Завершити раніше розпочате завантаження, яке не вдалось через попередження, використовуючи параметр <var>$1filekey</var>.\nЗауважте, що HTTP POST повинен бути здійснений як завантаження файлу (наприклад, використовуючи <code>multipart/form-data</code>)",
+       "apihelp-upload-param-filename": "Цільова назва файлу.",
+       "apihelp-upload-param-comment": "Коментар завантаження. Також використовується як початковий текст сторінок для нових файлів, якщо <var>$1text</var> не вказано.",
+       "apihelp-upload-param-text": "Початковий текст сторінок для нових файлів.",
+       "apihelp-upload-param-watch": "Спостерігати за сторінкою.",
+       "apihelp-upload-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-upload-param-ignorewarnings": "Ігнорувати всі попередження.",
+       "apihelp-upload-param-file": "Вміст файлу.",
+       "apihelp-upload-param-url": "URL з якого отримати файл.",
+       "apihelp-upload-param-filekey": "Ключ, що ідентифікує попереднє завантаження яке було відкладено тимчасово",
+       "apihelp-upload-param-sessionkey": "Те ж саме, що $1filekey, підтримується для зворотної сумісності.",
+       "apihelp-upload-param-stash": "Якщо вказано, сервер тимчасово відкладе файл замість додати його до репозиторію.",
+       "apihelp-upload-param-filesize": "Розмір файлу цілого завантаження.",
+       "apihelp-upload-param-offset": "Зміщення шматка в байтах.",
+       "apihelp-upload-param-chunk": "Шматок вмісту.",
+       "apihelp-upload-param-async": "Зробити операції з потенційно великими файлами асинхронними коли можливо.",
+       "apihelp-upload-param-asyncdownload": "Зробити отримання за URL асинхронним.",
+       "apihelp-upload-param-leavemessage": "Якщо використовується asyncdownload, залишити повідомлення на сторінці обговорення користувача при закінченні.",
+       "apihelp-upload-param-statuskey": "Отримати статус завантаження для цього ключа файлу (завантаження за URL)",
+       "apihelp-upload-param-checkstatus": "Отримувати статус завантаження лише для даного ключа файлу.",
+       "apihelp-upload-example-url": "Завантаження з URL.",
+       "apihelp-upload-example-filekey": "Завершити завантаження, що не вдалось через попередження.",
+       "apihelp-userrights-description": "Змінити членство користувача у групах.",
+       "apihelp-userrights-param-user": "Ім'я користувача.",
+       "apihelp-userrights-param-userid": "Ідентифікатор користувача.",
+       "apihelp-userrights-param-add": "Додати користувача до цих груп.",
+       "apihelp-userrights-param-remove": "Вилучити користувача із цих груп.",
+       "apihelp-userrights-param-reason": "Причина зміни.",
+       "apihelp-userrights-example-user": "Додати користувача <kbd>FooBot</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "Додати користувача з ідентифікатором <kbd>123</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+       "apihelp-watch-description": "Додати або вилучити сторінки з списку спостереження поточного користувача.",
+       "apihelp-watch-param-title": "Сторінки до додання/вилучення. Використовуйте <var>$1titles</var> натомість.",
+       "apihelp-watch-param-unwatch": "Якщо вказано, сторінку буде вилучено зі списку спостереження замість додання до нього.",
+       "apihelp-watch-example-watch": "Спостерігати за сторінкою <kbd>Головна сторінка</kbd>.",
+       "apihelp-watch-example-unwatch": "Вилучити сторінку <kbd>Головна сторінка</kbd> зі списку спостереження.",
+       "apihelp-watch-example-generator": "Додати перші декілька сторінок основного простору назв до списку спостереження.",
+       "apihelp-format-example-generic": "Повернути результат запиту у форматі $1.",
+       "apihelp-dbg-description": "Вивести дані у форматі PHP <code>var_export()</code>.",
+       "apihelp-dbgfm-description": "Вивести дані у форматі PHP <code>var_export()</code> (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-json-description": "Вивести дані у форматі JSON.",
+       "apihelp-json-param-callback": "Якщо вказано, огортає вивід викликом даної функції. З міркувань безпеки, усі специфічні до користувача дані буде утримано.",
+       "apihelp-json-param-utf8": "Якщо вказано, кодує більшість (але не всі) не-ASCII символів як UTF-8, замість заміни їх шістнадцятковими екрануючими послідовностями. За замовчуванням коли <var>formatversion</var> не є <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "Якщо вказано, кодує всі не-ASCII використовуючи шістнадцяткові екрануючі послідовності. За замовчуванням коли <var>formatversion</var> є <kbd>1</kbd>.",
+       "apihelp-json-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-jsonfm-description": "Вивести дані у форматі JSON (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-none-description": "Нічого не виводити.",
+       "apihelp-php-description": "Виводити дані у форматі серіалізованого PHP.",
+       "apihelp-php-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-phpfm-description": "Виводити дані у форматі серіалізованого PHP (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-rawfm-description": "Виводити дані у форматі JSON разом з елементами налагодження (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-txt-description": "Виводити дані у форматі PHP <code>print_r()</code>.",
+       "apihelp-txtfm-description": "Виводити дані у форматі PHP <code>print_r()</code> (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-xml-description": "Виводити дані у форматі XML.",
+       "apihelp-xml-param-xslt": "Якщо вказано, додає названу сторінку як таблицю стилів XSL. Це значення повинне бути назвою у просторі назв {{ns:mediawiki}}, що закінчується на <code>.xsl</code>.",
+       "apihelp-xml-param-includexmlnamespace": "Якщо вказано, додає простір назв XML.",
+       "apihelp-xmlfm-description": "Вивести дані у форматі XML (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-yaml-description": "Вивести дані у форматі YAML.",
+       "apihelp-yamlfm-description": "Вивести дані у форматі YAML (вивід відформатованого коду за допомогою HTML).",
+       "api-format-title": "Результат запиту до API MediaWiki",
+       "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметру <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-orm-param-props": "Поля до запиту.",
+       "api-orm-param-limit": "Яке максимальне число рядків повернути.",
+       "api-pageset-param-titles": "Список назв над якими працювати.",
+       "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
+       "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
+       "api-pageset-param-generator": "Отримати список сторінок над якими працювати шляхом виконання вказаного модуля запиту.\n\n<strong>Примітка:</strong> Назви параметрів генератора повинні мати префікс «g», див. приклади.",
+       "api-pageset-param-redirects-generator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, і <var>$1revids</var>, та у сторінках, повернених <var>$1generator</var>.",
+       "api-pageset-param-redirects-nogenerator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, та <var>$1revids</var>.",
+       "api-pageset-param-converttitles": "Конвертувати назви в інші варіанти за необхідності. Працює лише для вікі, мова вмісту яких підтримує конвертування варіантів. Мовами, що підтримують конвертування варіантів є $1.",
+       "api-help-title": "Довідка API Медіавікі",
+       "api-help-lead": "Це автоматично генерована сторінка документації API Медіавікі.\n\nДокументація та приклади: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Головний модуль",
+       "api-help-flag-deprecated": "Цей модуль є застарілим.",
+       "api-help-flag-internal": "<strong>Цей модуль є внутрішнім або нестабільним.</strong> Його робота може бути змінена без сповіщення.",
+       "api-help-flag-readrights": "Цей модуль вимагає прав на читання.",
+       "api-help-flag-writerights": "Цей модуль вимагає прав на запис.",
+       "api-help-flag-mustbeposted": "Цей модуль приймає лише POST-запити.",
+       "api-help-flag-generator": "Цей модуль може бути використаний як генератор.",
+       "api-help-source": "Джерело: $1",
+       "api-help-source-unknown": "Джерело: <span class=\"apihelp-unknown\">невідоме</span>",
+       "api-help-license": "Ліцензія: [[$1|$2]]",
+       "api-help-license-noname": "Ліцензія: [[$1|див. посилання]]",
+       "api-help-license-unknown": "Ліцензія: <span class=\"apihelp-unknown\">невідома</span>",
+       "api-help-parameters": "{{PLURAL:$1|Параметр|Параметри}}:",
+       "api-help-param-deprecated": "Застарілий.",
+       "api-help-param-required": "Цей параметр є обов'язковим.",
+       "api-help-datatypes-header": "Типи даних",
+       "api-help-datatypes": "Деякі типи параметрів у запитах API потребують ширшого пояснення:\n;boolean\n:Логічні параметри працюють як галочки HTML: якщо параметр вказано, не залежно від значення, він вважається істинним. Щоб значення було хибним, пропустіть параметр зовсім.\n;timestamp\n:Часові мітки можуть бути вказані у кількох форматах. Рекомендується час і дата в ISO 8601. Усі значення часу в UTC, будь-які часові пояси ігноруються.\n:* Дата і час ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (пунктуація і <kbd>Z</kbd> необов'язокві)\n:* Дата і час ISO 8601 з (ігнорованими) частками секунди, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (дефіси, двокрапки та <kbd>Z</kbd> необов'язкові)\n:* Формат MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Загальний числовий формат, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (необов'язковий часовий пояс <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> або <kbd>-<var>##</var></kbd> ігнорується)\n:* Формат EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 2822 (часовий пояс може бути опущений), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 850 (часовий пояс може бути опущений), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Секунди від 1970-01-01T00:00:00Z у вигляді цілого числа від 1 до 13 цифр (без <kbd>0</kbd>)\n:* Рядок <kbd>now</kbd>",
+       "api-help-param-type-limit": "Тип: ціле число або <kbd>max</kbd>",
+       "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=ціле число|2=список цілих чисел}}",
+       "api-help-param-type-boolean": "Тип: логічний ([[Special:ApiHelp/main#main/datatypes|деталі]])",
+       "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=часова мітка|2=список часових міток}} ([[Special:ApiHelp/main#main/datatypes|дозволені формати]])",
+       "api-help-param-type-user": "Тип: {{PLURAL:$1|1=ім'я користувача|2=список імен користувачів}}",
+       "api-help-param-list": "{{PLURAL:$1|1=Одне значення|2=Значення (розділені через <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Повинно бути пустим|Може бути пустим або $2}}",
+       "api-help-param-limit": "Дозволено не більше $1.",
+       "api-help-param-limit2": "Дозволено не більше $1 ($2 для ботів).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не менше $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не більше $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} між $2 і $3.",
+       "api-help-param-upload": "Повинно бути надіслано у формі надсилання файлу використовуючи multipart/form-data.",
+       "api-help-param-multi-separate": "Розділіть значення з допомогою <kbd>|</kbd>.",
+       "api-help-param-multi-max": "Максимальна кількість значень — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботів).",
+       "api-help-param-default": "За замовчуванням: $1",
+       "api-help-param-default-empty": "За замовчуванням: <span class=\"apihelp-empty\">(пусто)</span>",
+       "api-help-param-token": "Токен «$1» отримано з [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "Для сумісності, приймається також токен, використаний у користувацькому веб-інтерфейсі.",
+       "api-help-param-disabled-in-miser-mode": "Вимкнено через [[mw:Manual:$wgMiserMode|скупий режим]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Примітка:</strong> через [[mw:Manual:$wgMiserMode|«скупий режим»]], використання цього може вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+       "api-help-param-direction": "У якому напрямку перелічувати:\n;newer:Спочатку найстарші. Примітка: $1start має бути перед $1end.\n;older:Спочатку найновіші (за замовчуванням). Примітка: $1start має бути перед $1end.",
+       "api-help-param-continue": "Коли доступно більше результатів, використовуйте це, щоб продовжити.",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(без опису)</span>",
+       "api-help-examples": "{{PLURAL:$1|Приклад|Приклади}}:",
+       "api-help-permissions": "{{PLURAL:$1|Дозвіл|Дозволи}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Надано|Надані}}: $2",
+       "api-help-right-apihighlimits": "Використовувати вищі ліміти у запитах API (повільні запити: $1; швидкі запити: $2). Ліміти для повільних запитів також застосовуються до багатозначних параметрів.",
+       "api-credits-header": "Автор(и)",
+       "api-credits": "Розробники API:\n* Roan Kattouw (головний розробник вер. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (творець, головний розробник вер. 2006 – вер. 2007)\n* Brad Jorsch (головний розробник 2013 – тепер)\n\nБудь ласка, надсилайте свої коментарі, пропозиції та запитання на mediawiki-api@lists.wikimedia.org\nабо зафайліть звіт про баґ на https://phabricator.wikimedia.org/."
 }
index 8c9f8c8..53bc4e8 100644 (file)
@@ -14,6 +14,9 @@
        "apihelp-block-param-reason": "Lý do cấm.",
        "apihelp-block-param-nocreate": "Cấm tạo tài khoản.",
        "apihelp-block-param-reblock": "Nếu người dùng này đã bị khóa, ghi đè lên người này.",
+       "apihelp-checktoken-param-type": "Kiểu dấu hiệu được kiểm thử.",
+       "apihelp-checktoken-param-token": "Dấu hiệu để kiểm thử.",
+       "apihelp-checktoken-example-simple": "Kiểm thử dấu hiệu <kbd>csrf</kbd> có hợp lệ hay không.",
        "apihelp-clearhasmsg-description": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại.",
        "apihelp-clearhasmsg-example-1": "Xóa cờ <code>hasmsg</code> cho người dùng hiện tại",
        "apihelp-compare-param-fromtitle": "So sánh tiêu đề đầu tiên.",
        "apihelp-delete-description": "Xóa trang.",
        "apihelp-delete-param-title": "Xóa tiêu đề của trang. Không thể sử dụng cùng với <var>$1pageid</var>.",
        "apihelp-delete-param-pageid": "Xóa ID của trang. Không thể sử dụng cùng với <var>$1title</var>.",
-       "apihelp-delete-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
-       "apihelp-delete-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
-       "apihelp-delete-example-simple": "Xóa Trang Chính",
-       "apihelp-delete-example-reason": "Xóa Trang Chính với lý do “Chuẩn bị di chuyển”",
+       "apihelp-delete-param-watch": "Thêm trang vào danh sách theo dõi của người dùng hiện tại.",
+       "apihelp-delete-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của người dùng hiện tại.",
+       "apihelp-delete-example-simple": "Xóa <kbd>Trang Chính</kbd>.",
+       "apihelp-delete-example-reason": "Xóa <kbd>Trang Chính</kbd> với lý do <kbd>Chuẩn bị di chuyển</kbd>.",
        "apihelp-disabled-description": "Mô đun này đã bị vô hiệu hóa.",
        "apihelp-edit-description": "Tạo và sửa trang.",
-       "apihelp-edit-param-section": "Số phần trang. 0 là phần đầu; “new” là phần mới.",
+       "apihelp-edit-param-section": "Số phần trang. <kbd>0</kbd> là phần đầu; <kbd>new</kbd> là phần mới.",
        "apihelp-edit-param-sectiontitle": "Tên của phần mới.",
        "apihelp-edit-param-text": "Nội dung trang.",
        "apihelp-edit-param-summary": "Tóm lược sửa đổi. Cũng là tên phần khi $1section=new và $1sectiontitle không được đặt.",
@@ -53,8 +56,8 @@
        "apihelp-edit-param-bot": "Đánh dấu sửa đổi này là do bot thực hiện.",
        "apihelp-edit-param-createonly": "Không sửa đổi trang nếu nó đã tồn tại.",
        "apihelp-edit-param-nocreate": "Gây lỗi nếu trang không tồn tại.",
-       "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của bạn.",
-       "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của bạn.",
+       "apihelp-edit-param-watch": "Thêm trang vào danh sách theo dõi của người dùng hiện tại.",
+       "apihelp-edit-param-unwatch": "Bỏ trang này khỏi danh sách theo dõi của người dùng hiện tại.",
        "apihelp-edit-param-undo": "Hoàn tác sửa đổi này. Ghi đè $1text, $1prependtext và $ 1appendtext.",
        "apihelp-edit-param-undoafter": "Hoàn tác tất cả các sửa đổi từ $1undo cho tới sửa đổi này. Nếu không được thiết lập, chỉ cần lùi lại một sửa đổi.",
        "apihelp-edit-example-edit": "Sửa đổi trang",
        "apihelp-emailuser-param-subject": "Tiêu đề bức thư.",
        "apihelp-emailuser-param-text": "Nội dung bức thư.",
        "apihelp-emailuser-param-ccme": "Gửi bản sao của thư này cho tôi.",
-       "apihelp-emailuser-example-email": "Gửi thư điện tử cho thành viên “BQVWiki” với văn bản “Nội dung”",
+       "apihelp-emailuser-example-email": "Gửi thư điện tử cho thành viên <kbd>BQVWiki</kbd> với văn bản <kbd>Nội dung</kbd>.",
        "apihelp-expandtemplates-description": "Bung tất cả bản mẫu trong văn bản wiki.",
        "apihelp-expandtemplates-param-title": "Tên trang.",
        "apihelp-expandtemplates-param-text": "Văn bản wiki để bung.",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "Cây phân tích XML của đầu vào.",
+       "apihelp-feedcontributions-description": "Trả về nguồn cấp đóng góp người dùng.",
+       "apihelp-feedcontributions-param-feedformat": "Định dạng nguồn cấp.",
+       "apihelp-feedcontributions-param-year": "Từ năm (trở về trước).",
+       "apihelp-feedcontributions-param-month": "Từ tháng (trở về trước).",
+       "apihelp-feedcontributions-param-deletedonly": "Chỉ hiện các đóng góp đã xóa.",
+       "apihelp-feedcontributions-param-toponly": "Chỉ hiện các phiên bản mới nhất.",
+       "apihelp-feedcontributions-param-newonly": "Chỉ hiện các sửa đổi tạo trang.",
+       "apihelp-feedcontributions-example-simple": "Trả về các đóng góp của người dùng <kbd>Ví dụ</kbd>.",
+       "apihelp-feedrecentchanges-description": "Trả về nguồn cấp thay đổi gần đây.",
+       "apihelp-feedrecentchanges-param-feedformat": "Định dạng nguồn cấp.",
+       "apihelp-feedrecentchanges-param-hideminor": "Ẩn thay đổi nhỏ.",
+       "apihelp-feedrecentchanges-param-hidebots": "Ẩn thay đổi do bot thực hiện.",
+       "apihelp-feedrecentchanges-param-hideanons": "Ẩn thay đổi do người dùng vô danh thực hiện.",
+       "apihelp-feedrecentchanges-param-hideliu": "Ẩn thay đổi do người dùng đăng nhập thực hiện.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Ẩn thay đổi đã tuần tra.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Ẩn thay đổi do người dùng hiện tại thực hiện.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Lọc theo thẻ.",
+       "apihelp-feedrecentchanges-example-simple": "Xem thay đổi gần đây.",
+       "apihelp-feedwatchlist-description": "Trả về nguồn cấp danh sách theo dõi.",
+       "apihelp-feedwatchlist-param-feedformat": "Định dạng nguồn cấp.",
+       "apihelp-feedwatchlist-example-default": "Xem nguồn cấp danh sách theo dõi.",
        "apihelp-filerevert-param-comment": "Tải lên bình luận.",
        "apihelp-filerevert-param-archivename": "Tên lưu trữ của bản sửa đổi để trở lại .",
        "apihelp-filerevert-example-revert": "Hoàn nguyên <kbd>Wiki.png</kbd> veef phiên bản 2011-03-05T15 : 27:40Z",
        "apihelp-help-example-query": "Trợ giúp cho hai module con truy vấn",
        "apihelp-imagerotate-description": "Xoay một hoặc nhiều hình ảnh.",
        "apihelp-imagerotate-param-rotation": "Độ xoay hình ảnh theo chiều kim đồng hồ.",
-       "apihelp-imagerotate-example-simple": "Xoay [[:Tập tin:Ví dụ.jpg]] 90 độ",
-       "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong [[:Thể loại:Búng]] 180 độ",
+       "apihelp-imagerotate-example-simple": "Xoay <kbd>Tập tin:Ví dụ.jpg</kbd> <kbd>90</kbd> độ.",
+       "apihelp-imagerotate-example-generator": "Xoay tất cả các hình ảnh trong <kbd>Thể loại:Búng</kbd> <kbd>180</kbd> độ.",
        "apihelp-login-param-name": "Tên người dùng.",
        "apihelp-login-param-password": "Mật khẩu.",
        "apihelp-login-param-domain": "Tên miền (tùy chọn).",
        "apihelp-login-example-login": "Đăng nhập",
        "apihelp-logout-example-logout": "Đăng xuất người dùng hiện tại",
        "apihelp-move-description": "Di chuyển trang.",
-       "apihelp-move-param-reason": "Lý do di chuyển.",
+       "apihelp-move-param-reason": "Lý do đổi tên.",
        "apihelp-move-param-noredirect": "Không tạo trang đổi hướng.",
        "apihelp-move-param-ignorewarnings": "Bỏ qua tất cả các cảnh báo.",
        "apihelp-opensearch-description": "Tìm kiếm trong wiki qua giao thức OpenSearch.",
        "apihelp-opensearch-param-limit": "Đa số kết quả để cho ra.",
        "apihelp-opensearch-param-namespace": "Không gian tên để tìm kiếm.",
        "apihelp-opensearch-param-format": "Định dạng kết quả được cho ra.",
-       "apihelp-opensearch-example-te": "Tìm trang bắt đầu với “Te”",
+       "apihelp-opensearch-example-te": "Tìm trang bắt đầu với <kbd>Te</kbd>.",
        "apihelp-options-example-reset": "Mặc định lại các tùy chọn",
        "apihelp-paraminfo-param-helpformat": "Định dạng chuỗi trợ giúp.",
        "apihelp-parse-param-summary": "Lời tóm lược để phân tích.",
-       "apihelp-parse-param-section": "Chỉ truy xuất nội dung của số bộ phận này.",
-       "apihelp-parse-param-disablepp": "Vô hiệu hóa phân tích cú pháp đầu ra của Báo cáo PP .",
+       "apihelp-parse-param-section": "Chỉ truy xuất nội dung của số phần này; nếu có <kbd>new</kbd> thì tạo phần mới.\n\nPhần <kbd>new</kbd> chỉ được chấp nhận khi định rõ <var>text</var>.",
+       "apihelp-parse-param-disablelimitreport": "Bỏ qua thông báo bộ tiền xử lý (“NewPP limit report”) khi cho ra kết quả bộ xử lý.",
        "apihelp-parse-example-page": "Phân tích trang.",
        "apihelp-parse-example-text": "Phân tích văn bản wiki.",
        "apihelp-parse-example-texttitle": "Phân tích văn bản wiki theo tên trang.",
        "apihelp-parse-example-summary": "Phân tích lời tóm lược.",
        "apihelp-protect-example-protect": "Khóa trang.",
-       "apihelp-protect-example-unprotect": "Mở khóa trang bằng cách đặt hạn chế thành “all”",
+       "apihelp-protect-example-unprotect": "Mở khóa trang bằng cách đặt hạn chế thành <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "Mở khóa trang bằng cách không đặt hạn chế nào",
        "apihelp-purge-param-forcelinkupdate": "Cập nhật các bảng liên kết.",
        "apihelp-purge-example-generator": "Làm mới 10 trang đầu tiên trong không gian tên chính",
        "apihelp-query-param-meta": "Siêu dữ liệu để lấy.",
        "apihelp-query+allcategories-param-dir": "Hướng xếp loại.",
        "apihelp-rollback-description": "Hoàn tác chỉnh sửa cuối cùng của trang này.\n\nNếu người dùng cuối cùng đã cỉnh sửa trang này nhiều lần, tất cả chúng sẽ được hoàn tác lại như ban đầu.",
-       "apihelp-format-example-generic": "Định dạng kết quả truy vấn dưới dạng $1",
-       "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng var_export() của PHP.",
-       "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng var_export() của PHP (định dạng bằng HTML).",
+       "apihelp-format-example-generic": "Cho ra kết quả truy vấn dưới dạng $1.",
+       "apihelp-dbg-description": "Cho ra dữ liệu dưới dạng <code>var_export()</code> của PHP.",
+       "apihelp-dbgfm-description": "Cho ra dữ liệu dưới dạng <code>var_export()</code> của PHP (định dạng bằng HTML).",
        "apihelp-json-description": "Cho ra dữ liệu dưới dạng JSON.",
        "apihelp-jsonfm-description": "Cho ra dữ liệu dưới dạng JSON (định dạng bằng HTML).",
        "apihelp-none-description": "Không cho ra gì.",
        "apihelp-rawfm-description": "Cho ra dữ liệu với các phần tử gỡ lỗi dưới dạng JSON (định dạng bằng HTML).",
-       "apihelp-txt-description": "Cho ra dữ liệu dưới dạng print_r() của PHP.",
-       "apihelp-txtfm-description": "Cho ra dữ liệu dưới dạng print_r() của PHP (định dạng bằng HTML).",
+       "apihelp-txt-description": "Cho ra dữ liệu dưới dạng <code>print_r()</code> của PHP.",
+       "apihelp-txtfm-description": "Cho ra dữ liệu dưới dạng <code>print_r()</code> của PHP (định dạng bằng HTML).",
        "apihelp-xml-description": "Cho ra dữ liệu dưới dạng XML.",
        "apihelp-xmlfm-description": "Cho ra dữ liệu dưới dạng XML (định dạng bằng HTML).",
        "apihelp-yaml-description": "Cho ra dữ liệu dưới dạng YAML.",
        "api-help-parameters": "{{PLURAL:$1|Tham số|Các tham số}}:",
        "api-help-param-deprecated": "Bị phản đối.",
        "api-help-param-required": "Tham số này là bắt buộc.",
-       "api-help-param-list": "{{PLURAL:$1|1=Một giá trị|2=Các giá trị (phân tách bằng “{{!}}”)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Một giá trị|2=Các giá trị (phân tách bằng <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Cần phải để trống|Cần phải để trống hoặc là $2}}",
        "api-help-param-limit": "Không cho phép hơn $1.",
        "api-help-param-limit2": "Không cho phép hơn $1 ($2 đối với các bot).",
-       "api-help-param-multi-separate": "Phân tách các giá trị bằng “|”.",
+       "api-help-param-multi-separate": "Phân tách các giá trị bằng <kbd>|</kbd>.",
        "api-help-param-default": "Mặc định: $1",
        "api-help-param-default-empty": "Mặc định: <span class=\"apihelp-empty\">(trống)</span>",
        "api-help-examples": "{{PLURAL:$1|Ví dụ|Các ví dụ}}:",
diff --git a/includes/api/i18n/wuu.json b/includes/api/i18n/wuu.json
new file mode 100644 (file)
index 0000000..7df8a48
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "反共复国"
+               ]
+       },
+       "apihelp-main-param-action": "要执行个操作。"
+}
index e619a59..dd3fb8f 100644 (file)
@@ -13,7 +13,9 @@
                        "Simon xianyu",
                        "Kuailong",
                        "Zhxy 519",
-                       "御坂美琴"
+                       "御坂美琴",
+                       "RyRubyy",
+                       "Umherirrender"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。",
@@ -31,7 +33,7 @@
        "apihelp-block-description": "封禁一位用户。",
        "apihelp-block-param-user": "您要封禁的用户、IP地址或IP地址段。",
        "apihelp-block-param-expiry": "到期时间。可以是相对时间(例如<kbd>5 months</kbd>或<kbd>2 weeks</kbd>)或绝对时间(例如<kbd>2014-09-18T12:34:56Z</kbd>)。如果设置为<kbd>infinite</kbd>、<kbd>indefinite</kbd>或<kbd>never</kbd>,封禁将无限期。",
-       "apihelp-block-param-reason": "封禁的原因",
+       "apihelp-block-param-reason": "封禁的原因",
        "apihelp-block-param-anononly": "只封禁匿名用户(也就是说禁止此 IP 地址的匿名编辑)。",
        "apihelp-block-param-nocreate": "防止创建帐户。",
        "apihelp-block-param-autoblock": "自动封禁最近使用的IP地址,以及以后他们尝试登陆使用的IP地址。",
        "apihelp-checktoken-example-simple": "测试<kbd>csrf</kbd>令牌的有效性。",
        "apihelp-clearhasmsg-description": "清除当前用户的<code>hasmsg</code>标记。",
        "apihelp-clearhasmsg-example-1": "清除当前用户的<code>hasmsg</code>标记。",
-       "apihelp-compare-description": "è\8e·å¾\972个页面之间的差别。\n\n用于“from”和“to”的修订版本号、页面标题或页面 ID 必须获得通过。",
+       "apihelp-compare-description": "è\8e·å\8f\962个页面之间的差别。\n\n用于“from”和“to”的修订版本号、页面标题或页面 ID 必须获得通过。",
        "apihelp-compare-param-fromtitle": "要比较的第一个标题。",
        "apihelp-compare-param-fromid": "要比较的第一个页面 ID。",
        "apihelp-compare-param-fromrev": "要比较的第一个修订版本。",
        "apihelp-compare-param-totitle": "要比较的第二个标题。",
        "apihelp-compare-param-toid": "要比较的第二个页面 ID。",
        "apihelp-compare-param-torev": "要比较的第二个修订版本。",
-       "apihelp-compare-example-1": "在版本1和2中创建差异",
+       "apihelp-compare-example-1": "在版本1和2中创建差异",
        "apihelp-createaccount-description": "创建一个新用户账户。",
-       "apihelp-createaccount-param-name": "用户名",
+       "apihelp-createaccount-param-name": "用户名",
        "apihelp-createaccount-param-password": "密码(如果设置<var>$1mailpassword</var>则忽略)。",
        "apihelp-createaccount-param-domain": "外部身份验证域 (可选)。",
        "apihelp-createaccount-param-token": "在第一个请求中获得的帐户创建标记。",
        "apihelp-expandtemplates-param-prop": "要获取的那条信息。\n\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "扩充的wiki文本。",
        "apihelp-expandtemplates-paramvalue-prop-properties": "由wiki文本中扩充的魔术字定义的页面属性。",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "无论输出是否常常变动,均不应被在页面中其他任何位置重用。",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "结果缓存应无效化后的最长时间。",
        "apihelp-expandtemplates-paramvalue-prop-modules": "任何解析器函数请求添加至输出的ResourceLoader模块。无论<kbd>jsconfigvars</kbd>还是<kbd>encodedjsconfigvars</kbd>都必须与<kbd>modules</kbd>共同被请求。",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "针对页面提供JavaScript配置变量。",
        "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "针对页面提供JavaScript配置变量为一个JSON字符串。",
        "apihelp-feedrecentchanges-param-tagfilter": "按标签过滤。",
        "apihelp-feedrecentchanges-param-target": "仅仅显示从该页面链出的那些页面的变更。",
        "apihelp-feedrecentchanges-param-showlinkedto": "仅仅显示链入到该页面的那些页面的变更。",
-       "apihelp-feedrecentchanges-example-simple": "显示最近更改",
-       "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改",
+       "apihelp-feedrecentchanges-example-simple": "显示最近更改",
+       "apihelp-feedrecentchanges-example-30days": "显示最近30天的更改",
        "apihelp-feedwatchlist-description": "返回监视列表纲要。",
        "apihelp-feedwatchlist-param-feedformat": "纲要的格式。",
        "apihelp-feedwatchlist-param-hours": "列出从现在起数小时内修改的页面。",
        "apihelp-feedwatchlist-param-linktosections": "如果可能的话,直接链接到已变更的小节。",
-       "apihelp-feedwatchlist-example-default": "显示监视列表订阅",
+       "apihelp-feedwatchlist-example-default": "显示监视列表订阅",
        "apihelp-feedwatchlist-example-all6hrs": "显示过去6小时内受监视页面的所有更改。",
        "apihelp-filerevert-description": "回退一个文件至某一旧版本。",
        "apihelp-filerevert-param-filename": "目标文件名,不包含前缀“File:”。",
        "apihelp-help-param-helpformat": "帮助的输出格式。",
        "apihelp-help-param-wrap": "在一个标准API响应结构中包裹输出。",
        "apihelp-help-param-toc": "在HTML输出中包括目录。",
-       "apihelp-help-example-main": "主模块帮助",
-       "apihelp-help-example-recursive": "一个页面中的所有帮助",
-       "apihelp-help-example-help": "帮助模块本身的帮助",
-       "apihelp-help-example-query": "两个查询子模块的帮助",
+       "apihelp-help-example-main": "主模块帮助",
+       "apihelp-help-example-recursive": "一个页面中的所有帮助",
+       "apihelp-help-example-help": "帮助模块本身的帮助",
+       "apihelp-help-example-query": "两个查询子模块的帮助",
        "apihelp-imagerotate-description": "旋转一幅或多幅图像。",
        "apihelp-imagerotate-param-rotation": "顺时针旋转图像的度数。",
        "apihelp-imagerotate-example-simple": "<kbd>90</kbd>度旋转<kbd>File:Example.png</kbd>。",
        "apihelp-login-param-password": "密码。",
        "apihelp-login-param-domain": "域名(可选)。",
        "apihelp-login-param-token": "在首个请求中获得的登录令牌。",
-       "apihelp-login-example-gettoken": "检索登录令牌",
-       "apihelp-login-example-login": "登录",
+       "apihelp-login-example-gettoken": "检索登录令牌",
+       "apihelp-login-example-login": "登录",
        "apihelp-logout-description": "退出并清除会话数据。",
-       "apihelp-logout-example-logout": "退出当前用户",
+       "apihelp-logout-example-logout": "退出当前用户",
        "apihelp-managetags-description": "执行有关更改标签的管理任务。",
        "apihelp-managetags-param-operation": "要执行哪个操作:\n;create:创建一个新的更改标签供手动使用。\n;delete:从数据库中移除一个更改标签,包括移除已使用在所有修订版本、最近更改记录和日志记录上的该标签。\n;activate:激活一个更改标签,允许用户手动应用它。\n;deactivate:停用一个更改标签,阻止用户手动应用它。",
        "apihelp-managetags-param-tag": "要创建、删除、激活或取消激活的标签。要创建标签,标签必须不存在。要删除标签,标签必须存在。要激活标签,标签必须存在,且不被任何扩展使用。要取消激活标签,标签必须当前处于激活状态,且被手动定义。",
        "apihelp-opensearch-param-format": "输出格式。",
        "apihelp-opensearch-param-warningsaserror": "如果警告通过<kbd>format=json</kbd>提升,返回一个API错误而不是忽略它们。",
        "apihelp-opensearch-example-te": "查找以<kbd>Te</kbd>开头的页面。",
-       "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有\"userjs-\"键值前缀(旨在被用户脚本使用)的选项可被设置。",
+       "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有<code>userjs-</code>键值前缀(旨在被用户脚本使用)的选项可被设置。",
        "apihelp-options-param-reset": "重置偏好设置到网站默认设置。",
        "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
        "apihelp-options-param-change": "更改列表,以name=value格式化(例如skin=vector)。值不能包含管道字符。如果没提供值(甚至没有等号),例如optionname|otheroption|...,选项将重置为默认值。",
        "apihelp-options-param-optionname": "应设置为由<var>$1optionvalue</var>提供值的选项名称。",
-       "apihelp-options-param-optionvalue": "使用<var>$1选项名</var>指定的选项值中,可以包含管道字符",
-       "apihelp-options-example-reset": "重置所有用户设置",
+       "apihelp-options-param-optionvalue": "用于由<var>$1optionname</var>指定的选项的值,可以包含管道字符。",
+       "apihelp-options-example-reset": "重置所有用户设置",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
-       "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>皮肤</kbd>和<kbd>昵称</kbd>。",
-       "apihelp-paraminfo-description": "è\8e·å\8f\96å\85³äº\8e API 模块的信息。",
+       "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>skin</kbd>和<kbd>nickname</kbd>。",
+       "apihelp-paraminfo-description": "è\8e·å¾\97å\85³äº\8eAPI模块的信息。",
        "apihelp-paraminfo-param-modules": "模块名称(<var>action</var>和<var>format</var>参数值,或<kbd>main</kbd>)的列表。可通过<kbd>+</kbd>指定子模块。",
        "apihelp-paraminfo-param-helpformat": "帮助字符串的格式。",
        "apihelp-paraminfo-param-querymodules": "查询模块名称(<var>prop</var>、<var>meta</var>或<var>list</var>参数值)的列表。使用<kbd>$1modules=query+foo</kbd>而不是<kbd>$1querymodules=foo</kbd>。",
-       "apihelp-paraminfo-param-mainmodule": "è\8e·å¾\97有关主要(最高级)模块的信息。也可使用<kbd>$1modules=main</kbd>。",
-       "apihelp-paraminfo-param-pagesetmodule": "è\8e·å¾\97有关页面设置模块(提供titles=和朋友)的信息。",
+       "apihelp-paraminfo-param-mainmodule": "è\8e·å\8f\96有关主要(最高级)模块的信息。也可使用<kbd>$1modules=main</kbd>。",
+       "apihelp-paraminfo-param-pagesetmodule": "è\8e·å\8f\96有关页面设置模块(提供titles=和朋友)的信息。",
        "apihelp-paraminfo-param-formatmodules": "格式模块名称(<var>format</var>参数的值)的列表。也可使用<var>$1modules</var>。",
        "apihelp-paraminfo-example-1": "显示<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>和<kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>的信息。",
        "apihelp-parse-description": "解析内容并返回解析器输出。\n\n参见<kbd>[[Special:ApiHelp/query|action=query]]</kbd>的各种prop-module以从页面的当前版本获得信息。\n\n这里有几种方法可以指定解析的文本:\n# 指定一个页面或修订,使用<var>$1page</var>、<var>$1pageid</var>或<var>$1oldid</var>。\n# 明确指定内容,使用<var>$1text</var>、<var>$1title</var>和<var>$1contentmodel</var>。\n# 只指定一段摘要解析。<var>$1prop</var>应提供一个空值。",
        "apihelp-parse-paramvalue-prop-headitems": "提供项目以插入至页面的<code>&lt;head&gt;</code>。",
        "apihelp-parse-paramvalue-prop-headhtml": "提供页面的被解析<code>&lt;head&gt;</code>。",
        "apihelp-parse-paramvalue-prop-modules": "提供在页面中使用的ResourceLoader模块。无论<kbd>jsconfigvars</kbd>还是<kbd>encodedjsconfigvars</kbd>都必须与<kbd>modules</kbd>共同被请求。",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "针对页面提供JavaScript配置变量。",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "针对页面提供JavaScript配置变量为一个JSON字符串。",
+       "apihelp-parse-paramvalue-prop-indicators": "提供页面上使用的页面状态指示器的HTML。",
        "apihelp-parse-paramvalue-prop-iwlinks": "在被解析的wiki文本中提供跨wiki链接。",
        "apihelp-parse-paramvalue-prop-wikitext": "提供被解析的原始wiki文本。",
-       "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablepp</var>被设定则不提供数据。",
+       "apihelp-parse-paramvalue-prop-properties": "提供多种定义在被解析的wiki文本中的属性。",
+       "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablelimitreport</var>被设定则不提供数据。",
+       "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablelimitreport</var>被设置时不会提供数据。",
        "apihelp-parse-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)",
        "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
        "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
        "apihelp-parse-param-section": "只检索此段数的内容,或只当<kbd>new</kbd>生成新的段落时检索。\n\n<kbd>new</kbd>段落只当指定<var>text</var>时受尊重。",
        "apihelp-parse-param-sectiontitle": "当<var>section</var>为<kbd>new</kbd>时新段落标题。\n\n不像页面编辑,当省略或为空时将不会备选为<var>summary</var>。",
-       "apihelp-parse-param-disablepp": "从解析器输出中禁用PP报告。",
-       "apihelp-parse-param-disableeditsection": "从解析器输出中禁用编辑段落链接。",
+       "apihelp-parse-param-disablelimitreport": "从解析器输出中省略限制报告(“NewPP limit report”)。",
+       "apihelp-parse-param-disablepp": "请改用<var>$1disablelimitreport</var>。",
+       "apihelp-parse-param-disableeditsection": "从解析器输出中省略编辑段落链接。",
+       "apihelp-parse-param-disabletidy": "不要在解析器输出中运行HTML清理(例如tidy)。",
        "apihelp-parse-param-generatexml": "生成XML解析树(需要内容模型<code>$1</code>;被<kbd>$2prop=parsetree</kbd>所取代)。",
        "apihelp-parse-param-preview": "在预览模式下解析。",
        "apihelp-parse-param-sectionpreview": "在小节预览模式下解析 (同时要启用预览模式)。",
-       "apihelp-parse-param-disabletoc": "å\9c¨è¾\93å\87ºä¸­ç¦\81ç\94¨目录。",
+       "apihelp-parse-param-disabletoc": "å\9c¨è¾\93å\87ºä¸­ç\9c\81ç\95¥目录。",
        "apihelp-parse-param-contentformat": "用于输入文本的内容序列化格式。只当与$1text一起使用时有效。",
        "apihelp-parse-example-page": "解析一个页面。",
        "apihelp-parse-example-text": "解析wiki文本。",
        "apihelp-protect-param-protections": "保护等级列表,格式:<kbd>action=level</kbd>(例如<kbd>edit=sysop</kbd>)。\n\n<strong>注意:</strong>未列出的操作将移除限制。",
        "apihelp-protect-param-expiry": "到期时间戳。如果只有一个时间戳被设置,它将被用于所有保护。使用<kbd>infinite</kbd>、<kbd>indefinite</kbd>、<kbd>infinity</kbd>或<kbd>never</kbd>用于永不过期的保护。",
        "apihelp-protect-param-reason": "(解除)保护的原因。",
-       "apihelp-protect-param-cascade": "启用级联保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持级联,就将其忽略。",
+       "apihelp-protect-param-cascade": "启用连锁保护(也就是保护包含于此页面的页面)。如果所有提供的保护等级不支持连锁,就将其忽略。",
        "apihelp-protect-param-watch": "如果设置,就加入已开始(解除)保护的页面至当前用户的监视列表。",
        "apihelp-protect-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-protect-example-protect": "保护一个页面。",
        "apihelp-query-param-prop": "要为已查询页面获取的属性。",
        "apihelp-query-param-list": "要获取的列表。",
        "apihelp-query-param-meta": "要获取的元数据。",
+       "apihelp-query-param-indexpageids": "包含一个额外的pageid段落,列举所有返回的页面ID。",
+       "apihelp-query-param-export": "导出所有指定或生成页面的当前修订。",
        "apihelp-query-param-exportnowrap": "返回导出XML,不需要将其包裹在一个XML结果中(与[[Special:Export]]格式相同)。只能与$1export一起使用。",
+       "apihelp-query-param-iwurl": "如果标题是一个跨wiki链接的话,是否获取完整URL。",
        "apihelp-query-param-rawcontinue": "为继续返回原始<samp>query-continue</samp>数据。",
        "apihelp-query-example-revisions": "获取<kbd>Main Page</kbd>的[[Special:ApiHelp/query+siteinfo|网站信息]]和[[Special:ApiHelp/query+revisions|修订版本]]。",
-       "apihelp-query-example-allpages": "获取以<kbd>API/</kbd>开头的页面的修订版本",
-       "apihelp-query+allcategories-description": "枚举所有类别。",
+       "apihelp-query-example-allpages": "获取以<kbd>API/</kbd>开头的页面的修订版本",
+       "apihelp-query+allcategories-description": "列举所有分类。",
        "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
        "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
-       "apihelp-query+allcategories-param-prefix": "æ\90\9c索此å\80¼å¼\80头ç\9a\84æ\89\80æ\9c\89分类标题。",
+       "apihelp-query+allcategories-param-prefix": "æ\90\9cç´¢æ\89\80æ\9c\89以此å\80¼å¼\80头ç\9a\84分类标题。",
        "apihelp-query+allcategories-param-dir": "排序方向。",
        "apihelp-query+allcategories-param-min": "只返回至少带这么多成员的分类。",
        "apihelp-query+allcategories-param-max": "只返回最多带这么多成员的分类。",
        "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
-       "apihelp-query+allcategories-param-prop": "要获取的属性:\n;size:在分类中添加页面数。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
+       "apihelp-query+allcategories-param-prop": "要获取的属性:",
+       "apihelp-query+allcategories-paramvalue-prop-size": "在分类中添加页面数。",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "标记由<code>_&#95;HIDDENCAT_&#95;</code>隐藏的分类。",
        "apihelp-query+allcategories-example-size": "列出分类及其含有多少页面的信息。",
+       "apihelp-query+allcategories-example-generator": "为以<kbd>List</kbd>的分类检索有关分类页面本身的信息。",
        "apihelp-query+alldeletedrevisions-description": "列举由一位用户或在一个名字空间中所有已删除的修订。",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与<var>$3user</var>一起使用。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与<var>$3user</var>一起使用。",
        "apihelp-query+alldeletedrevisions-param-end": "枚举的结束时间戳。",
        "apihelp-query+alldeletedrevisions-param-from": "从此标题开始列出。",
        "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
-       "apihelp-query+alldeletedrevisions-param-prefix": "æ\90\9cç´¢æ \87é¢\98以此å\80¼å¼\80头ç\9a\84æ\89\80æ\9c\89页é\9d¢。",
+       "apihelp-query+alldeletedrevisions-param-prefix": "æ\90\9cç´¢æ\89\80æ\9c\89以此å\80¼å¼\80头ç\9a\84页é\9d¢æ \87é¢\98。",
        "apihelp-query+alldeletedrevisions-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-example-user": "列出由<kbd>Example<kbd>作出的最近50次已删除贡献。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "列出前50次已删除的主名字空间修订。",
        "apihelp-query+allfileusages-description": "列出所有文件用途,包括不存在的。",
-       "apihelp-query+allfileusages-param-from": "文件的标题开始枚举于.",
+       "apihelp-query+allfileusages-param-from": "要列举的起始文件标题。",
        "apihelp-query+allfileusages-param-to": "要列举的最终文件标题。",
-       "apihelp-query+allfileusages-param-prefix": "æ\90\9c索此å\80¼å¼\80头ç\9a\84æ\89\80æ\9c\89文件标题。",
+       "apihelp-query+allfileusages-param-prefix": "æ\90\9cç´¢æ\89\80æ\9c\89以此å\80¼å¼\80头ç\9a\84文件标题。",
        "apihelp-query+allfileusages-param-unique": "只显示明显的文件标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
-       "apihelp-query+allfileusages-param-prop": "要包含的信息束:\n;ids:添加使用中的页面的页面ID(不能与$1unique一起使用)。\n;title:添加文件的标题。",
+       "apihelp-query+allfileusages-param-prop": "要包含的信息束:",
+       "apihelp-query+allfileusages-paramvalue-prop-ids": "添加使用中的页面的页面ID(不能与$1unique一起使用)。",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "添加文件的标题。",
        "apihelp-query+allfileusages-param-limit": "要返回的总计项目。",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allfileusages-example-B": "列举文件标题,包含丢失的文件、它们来自的页面ID,以<kbd>B</kbd>开头。",
        "apihelp-query+allimages-param-to": "要列举的最终图片标题。只能与$1sort=name一起使用。",
        "apihelp-query+allimages-param-start": "要列举的起始时间戳。只能与$1sort=timestamp一起使用。",
        "apihelp-query+allimages-param-end": "要列举的最终时间戳。只能与$1sort=timestamp一起使用。",
+       "apihelp-query+allimages-param-prefix": "搜索所有以此值开头的图像标题。只能与$1sort=name一起使用。",
        "apihelp-query+allimages-param-minsize": "限于至少这么多字节的图像。",
        "apihelp-query+allimages-param-maxsize": "限于顶多这么多字节的图像。",
        "apihelp-query+allimages-param-sha1": "图像的 SHA1 哈希。覆盖$1sha1base36。",
        "apihelp-query+allimages-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
+       "apihelp-query+allimages-param-user": "只返回此用户上传的文件。只能与$1sort=timestamp一起使用。不能与$1filterbots一起使用。",
+       "apihelp-query+allimages-param-filterbots": "如何过滤由机器人上传的文件。只能与$1sort=timestamp一起使用。不能与$1user一起使用。",
        "apihelp-query+allimages-param-mime": "要搜索的MIME类型,例如<kbd>image/jpeg</kbd>。",
        "apihelp-query+allimages-param-limit": "共计要返回多少图像。",
        "apihelp-query+allimages-example-B": "显示以字母<kbd>B</kbd>开始的文件列表。",
        "apihelp-query+allimages-example-recent": "显示一个最近上传文件的列表,类似[[Special:NewFiles]]。",
        "apihelp-query+allimages-example-mimetypes": "显示带MIME类型<kbd>image/png</kbd>或<kbd>image/gif</kbd>的文件列表",
        "apihelp-query+allimages-example-generator": "显示有关4个以<kbd>T</kbd>开头的文件的信息。",
+       "apihelp-query+alllinks-description": "列举所有指向至指定名字空间的链接。",
        "apihelp-query+alllinks-param-from": "要列举的起始标题链接。",
        "apihelp-query+alllinks-param-to": "要列举的最终标题链接。",
+       "apihelp-query+alllinks-param-prefix": "搜索所有以此值开头的已链接标题。",
+       "apihelp-query+alllinks-param-unique": "只显示明显的链接标题。不能与<kbd>$1prop=ids</kbd>一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+       "apihelp-query+alllinks-param-prop": "要包含的信息束:",
+       "apihelp-query+alllinks-paramvalue-prop-ids": "添加链接中的页面的页面ID(不能与<var>$1unique</var>一起使用)。",
+       "apihelp-query+alllinks-paramvalue-prop-title": "添加链接的标题。",
        "apihelp-query+alllinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+alllinks-param-limit": "总共要返回多少个项目。",
        "apihelp-query+alllinks-param-dir": "列出方向。",
-       "apihelp-query+alllinks-example-unique": "列出唯一的链接标题",
-       "apihelp-query+alllinks-example-unique-generator": "获得所有已链接的标题,标记缺少的。",
-       "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面",
+       "apihelp-query+alllinks-example-B": "列出链接的标题,包括丢失的,带它们来自的页面ID,以<kbd>B</kbd>开头。",
+       "apihelp-query+alllinks-example-unique": "列出唯一的链接标题。",
+       "apihelp-query+alllinks-example-unique-generator": "获取所有已链接的标题,标记缺少的。",
+       "apihelp-query+alllinks-example-generator": "获取包含这些链接的页面。",
        "apihelp-query+allmessages-description": "返回来自该网站的消息。",
        "apihelp-query+allmessages-param-messages": "要输出的消息。<kbd>*</kbd>(默认)表示所有消息。",
        "apihelp-query+allmessages-param-prop": "要获取的属性。",
        "apihelp-query+allmessages-param-prefix": "返回带有该前缀的消息。",
        "apihelp-query+allmessages-example-ipb": "显示以<kbd>ipb-</kbd>开始的消息。",
        "apihelp-query+allmessages-example-de": "显示德语版的<kbd>august</kbd>和<kbd>mainpage</kbd>消息。",
+       "apihelp-query+allpages-description": "循序列举在指定名字空间中的所有页面。",
        "apihelp-query+allpages-param-from": "枚举的起始页面标题。",
        "apihelp-query+allpages-param-to": "枚举的结束页面标题。",
+       "apihelp-query+allpages-param-prefix": "搜索所有以此值开头的页面标题。",
        "apihelp-query+allpages-param-namespace": "要列举的名字空间。",
        "apihelp-query+allpages-param-filterredir": "要列出哪些页面。",
        "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
        "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
        "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+       "apihelp-query+allpages-param-prfiltercascade": "过滤基于cascadingness的保护(当$1prtype未设置时忽略)。",
        "apihelp-query+allpages-param-limit": "返回的总计页面数。",
        "apihelp-query+allpages-param-dir": "罗列所采用的方向。",
+       "apihelp-query+allpages-param-filterlanglinks": "过滤基于页面是否有语言链接。注意这可能不考虑由扩展添加的语言链接。",
+       "apihelp-query+allpages-param-prexpiry": "要在页面上过滤的保护期限:\n;indefinite:只获取带无限期保护的页面。\n;definite:只获取带指定保护期限的页面。\n;all:获取任意保护期限的页面。",
        "apihelp-query+allpages-example-B": "显示以字母<kbd>B</kbd>开头的页面的列表。",
        "apihelp-query+allpages-example-generator": "显示有关4个以字母<kbd>T</kbd>开头的页面的信息。",
        "apihelp-query+allpages-example-generator-revisions": "显示前2个以<kbd>Re</kbd>开头的非重定向页面的内容。",
        "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
        "apihelp-query+allredirects-param-from": "要列举的起始重定向标题。",
        "apihelp-query+allredirects-param-to": "要列举的最终重定向标题。",
+       "apihelp-query+allredirects-param-prefix": "搜索所有以此值开头的目标页面。",
+       "apihelp-query+allredirects-param-unique": "只显示明显的目标页面。不能与$1prop=ids|fragment|interwiki一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+       "apihelp-query+allredirects-param-prop": "要包含的信息束:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "添加重定向页面的页面ID(不能与<var>$1unique</var>一起使用)。",
+       "apihelp-query+allredirects-paramvalue-prop-title": "添加重定向的标题。",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "添加来自重定向的碎片,如果有(不能与<var>$1unique</var>一起使用)。",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "添加来自重定向的跨wiki前缀,如果有(不能与<var>$1unique</var>一起使用)。",
        "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
        "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
        "apihelp-query+allredirects-param-dir": "罗列所采用的方向。",
-       "apihelp-query+allredirects-example-unique": "列出孤立目标页面",
-       "apihelp-query+allredirects-example-unique-generator": "è\8e·å¾\97æ\89\80æ\9c\89ç\9b®æ \87页é\9d¢ï¼\8cæ \87记丢失ç\9a\84",
-       "apihelp-query+allredirects-example-generator": "è\8e·å¾\97å\8c\85å\90«é\87\8då®\9aå\90\91ç\9a\84页é\9d¢",
+       "apihelp-query+allredirects-example-unique": "列出孤立目标页面",
+       "apihelp-query+allredirects-example-unique-generator": "è\8e·å\8f\96æ\89\80æ\9c\89ç\9b®æ \87页é\9d¢ï¼\8cæ \87记丢失ç\9a\84ã\80\82",
+       "apihelp-query+allredirects-example-generator": "è\8e·å\8f\96å\8c\85å\90«é\87\8då®\9aå\90\91ç\9a\84页é\9d¢ã\80\82",
        "apihelp-query+alltransclusions-description": "列出所有嵌入页面(使用&#123;&#123;x&#125;&#125;嵌入的页面),包括不存在的。",
+       "apihelp-query+alltransclusions-param-from": "要列举的起始嵌入标题。",
+       "apihelp-query+alltransclusions-param-to": "要列举的最终嵌入标题。",
+       "apihelp-query+alltransclusions-param-prefix": "搜索所有以此值开头的嵌入的标题。",
+       "apihelp-query+alltransclusions-param-unique": "只显示明显的被嵌入标题。不能与$1prop=ids一起使用。\n当作为生成器使用时,产生目标页面而不是来源页面。",
+       "apihelp-query+alltransclusions-param-prop": "要包含的信息束:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "添加嵌入中的页面的页面ID(不能与$1unique一起使用)。",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "添加嵌入的标题。",
        "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
        "apihelp-query+alltransclusions-param-limit": "要返回的总计项目。",
        "apihelp-query+alltransclusions-param-dir": "罗列所采用的方向。",
+       "apihelp-query+alltransclusions-example-B": "列出嵌入的标题,包括丢失的,带有来自的页面ID,从<kbd>B</kbd>开始。",
        "apihelp-query+alltransclusions-example-unique": "列出孤立嵌入标题",
        "apihelp-query+alltransclusions-example-unique-generator": "获取所有嵌入的标题,并标记缺失的。",
        "apihelp-query+alltransclusions-example-generator": "获得包含嵌入内容的页面。",
        "apihelp-query+allusers-description": "列举所有注册用户。",
        "apihelp-query+allusers-param-from": "枚举的起始用户名。",
        "apihelp-query+allusers-param-to": "枚举的结束用户名。",
-       "apihelp-query+allusers-param-prefix": "搜索以此值开始的所有用户。",
+       "apihelp-query+allusers-param-prefix": "搜索所有以此值开头的用户。",
        "apihelp-query+allusers-param-dir": "排序方向。",
        "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
        "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
        "apihelp-query+allusers-param-rights": "仅列出有所选权限的用户。不包括隐性的或自动加入的用户组别(如*、用户或自动确认用户)所授予的权限。",
+       "apihelp-query+allusers-param-prop": "要包含的信息束:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "添加有关用户当前封禁的信息。",
+       "apihelp-query+allusers-paramvalue-prop-groups": "列举用户所在的组。这使用更多服务器资源,并可能返回少于限制的结果。",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "列出用户自动属于的所有组。",
+       "apihelp-query+allusers-paramvalue-prop-rights": "用户拥有的权限列表。",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "添加用户的编辑计数。",
+       "apihelp-query+allusers-paramvalue-prop-registration": "如果可能,添加用户注册时的时间戳(可能为空白)。",
        "apihelp-query+allusers-param-limit": "返回的总计用户数。",
        "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
-       "apihelp-query+allusers-param-activeusers": "只列出最近$1内活跃的用户。",
+       "apihelp-query+allusers-param-activeusers": "只列出最近$1{{PLURAL:$1|天}}内活跃的用户。",
        "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>开头的用户。",
        "apihelp-query+backlinks-description": "查找所有链接至指定页面的页面。",
        "apihelp-query+backlinks-param-title": "要搜索的标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与<var>$1title</var>一起使用。",
        "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+backlinks-param-dir": "罗列所采用的方向。",
+       "apihelp-query+backlinks-param-filterredir": "如何过滤重定向。当<var>$1redirect</var>被启用时如果设置为<kbd>nonredirects</kbd>,这只会应用到第二级。",
        "apihelp-query+backlinks-param-limit": "返回总计页面数。如果<var>$1redirect</var>被启用,则限定分别适用于每一等级(这意味着将返回多达2 * <var>$1limit</var>个结果)。",
+       "apihelp-query+backlinks-param-redirect": "如果链入页面是一个重定向,则寻找所有链接至此重定向的页面。最大限制减半。",
        "apihelp-query+backlinks-example-simple": "显示至<kbd>Main page<kbd>的链接。",
        "apihelp-query+backlinks-example-generator": "获取关于链接至<kbd>Main page<kbd>的页面的信息。",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
        "apihelp-query+blocks-param-end": "枚举的结束时间戳。",
        "apihelp-query+blocks-param-ids": "要列出的封禁ID列表(可选)。",
        "apihelp-query+blocks-param-users": "要搜索的用户列表(可选)。",
-       "apihelp-query+blocks-param-prop": "要获取的属性:\n;id:添加封禁ID。\n;user:添加被封禁用户的用户名。\n;userid:添加被封禁用户的用户ID。\n;by:添加执行封禁的用户的用户名。\n;byid:添加执行封禁的用户的用户ID。\n;timestamp:添加封禁生效时的时间戳。\n;expiry:添加封禁截止时的时间戳。\n;reason:添加封禁原因。\n;range:添加受封禁影响的IP地址段。\n;flags:标记编辑禁止(自动封禁、仅限匿名用户等)。",
-       "apihelp-query+blocks-example-simple": "封禁列表",
+       "apihelp-query+blocks-param-limit": "封禁列表的最大数量。",
+       "apihelp-query+blocks-param-prop": "要获取的属性:",
+       "apihelp-query+blocks-paramvalue-prop-id": "添加封禁ID。",
+       "apihelp-query+blocks-paramvalue-prop-user": "添加被封禁用户的用户名。",
+       "apihelp-query+blocks-paramvalue-prop-userid": "添加被封禁用户的用户ID。",
+       "apihelp-query+blocks-paramvalue-prop-by": "添加执行封禁的用户的用户名。",
+       "apihelp-query+blocks-paramvalue-prop-byid": "添加执行封禁的用户的用户ID。",
+       "apihelp-query+blocks-paramvalue-prop-timestamp": "添加封禁生效时的时间戳。",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "添加封禁截止时的时间戳。",
+       "apihelp-query+blocks-paramvalue-prop-reason": "添加封禁原因。",
+       "apihelp-query+blocks-paramvalue-prop-range": "添加受封禁影响的IP地址段。",
+       "apihelp-query+blocks-paramvalue-prop-flags": "标记编辑禁止(自动封禁、仅限匿名用户等)。",
+       "apihelp-query+blocks-example-simple": "封禁列表。",
        "apihelp-query+blocks-example-users": "列出用户<kbd>Alice</kbd>和<kbd>Bob</kbd>的封禁。",
        "apihelp-query+categories-description": "页面属于的所有分类列表。",
-       "apihelp-query+categories-param-prop": "要为每个分类获取的额外属性:\n;sortkey:为每个分类添加关键词(十六进制字符串)和关键词前缀(人类可读部分)。\n;timestamp:添加分类添加时的时间戳。\n;hidden:标记由_&#95;HIDDENCAT_&#95;隐藏的分类。",
+       "apihelp-query+categories-param-prop": "要为每个分类获取的额外属性:",
+       "apihelp-query+categories-paramvalue-prop-sortkey": "为每个分类添加关键词(十六进制字符串)和关键词前缀(人类可读部分)。",
+       "apihelp-query+categories-paramvalue-prop-timestamp": "添加分类添加时的时间戳。",
+       "apihelp-query+categories-paramvalue-prop-hidden": "标记由<code>_&#95;HIDDENCAT_&#95;</code>隐藏的分类。",
        "apihelp-query+categories-param-show": "显示何种分类。",
        "apihelp-query+categories-param-limit": "返回多少分类。",
        "apihelp-query+categories-param-dir": "罗列所采用的方向。",
        "apihelp-query+categorymembers-description": "在指定的分类中列出所有页面。",
        "apihelp-query+categorymembers-param-title": "要列举的分类(必需)。必须包括<kbd>{{ns:category}}:</kbd>前缀。不能与<var>$1pageid</var>一起使用。",
        "apihelp-query+categorymembers-param-pageid": "要枚举的分类的页面 ID。不能与<var>$1title</var>一起使用。",
+       "apihelp-query+categorymembers-param-prop": "要包含的信息束:",
+       "apihelp-query+categorymembers-paramvalue-prop-ids": "添加页面ID。",
+       "apihelp-query+categorymembers-paramvalue-prop-title": "添加页面标题和名字空间ID。",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkey": "Adds the sortkey used for sorting in the category (hexadecimal string).",
+       "apihelp-query+categorymembers-paramvalue-prop-sortkeyprefix": "Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "Adds the type that the page has been categorised as (page, subcat or file).",
+       "apihelp-query+categorymembers-paramvalue-prop-timestamp": "Adds the timestamp of when the page was included.",
        "apihelp-query+categorymembers-param-namespace": "仅包含这些名字空间的页面。注意<kbd>$1type=subcat</kbd>或<kbd>$1type=file</kbd>可能被使用,而不是<kbd>$1namespace=14</kbd>或<kbd>6</kbd>。",
        "apihelp-query+categorymembers-param-type": "包含的分类成员类型。当<kbd>$1sort=timestamp</kbd>被设置时会忽略。",
        "apihelp-query+categorymembers-param-limit": "返回页面的最大数量。",
        "apihelp-query+categorymembers-param-end": "列举的结尾时间戳。只能与<kbd>$1sort=timestamp</kbd>一起使用。",
        "apihelp-query+categorymembers-param-starthexsortkey": "开始列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
        "apihelp-query+categorymembers-param-endhexsortkey": "结束列举的关键词,由<kbd>$1prop=sortkey</kbd>返回。不能与<kbd>$1sort=sortkey</kbd>一起使用。",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "要开始列举的排序关键词前缀。只能与<kbd>$1sort=sortkey</kbd>一起使用。覆盖<var>$1starthexsortkey</var>。",
        "apihelp-query+categorymembers-param-startsortkey": "请改用$1starthexsortkey。",
        "apihelp-query+categorymembers-param-endsortkey": "请改用$1endhexsortkey。",
-       "apihelp-query+categorymembers-example-simple": "è\8e·å¾\97<kbd>Category:Physics</kbd>中的前10个页面。",
-       "apihelp-query+categorymembers-example-generator": "è\8e·å¾\97有关<kbd>Category:Physics</kbd>中的前10个页面的页面信息。",
+       "apihelp-query+categorymembers-example-simple": "è\8e·å\8f\96<kbd>Category:Physics</kbd>中的前10个页面。",
+       "apihelp-query+categorymembers-example-generator": "è\8e·å\8f\96有关<kbd>Category:Physics</kbd>中的前10个页面的页面信息。",
        "apihelp-query+contributors-description": "获取对一个页面的登录贡献者列表和匿名贡献数。",
        "apihelp-query+contributors-param-limit": "返回的贡献数。",
        "apihelp-query+contributors-example-simple": "显示<kbd>Main Page</kbd>的贡献。",
        "apihelp-query+deletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+deletedrevisions-example-titles": "列出页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的已删除修订,包含内容。",
        "apihelp-query+deletedrevisions-example-revids": "列出已删除修订<kbd>123456</kbd>的信息。",
-       "apihelp-query+deletedrevs-description": "列出被删除修订。\n\n操作于三种模式中:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+       "apihelp-query+deletedrevs-description": "列出被删除修订。\n\n操作于三种模式中:\n# 为指定标题列举已删除修订,按时间戳排列。\n# 为指定用户列举已删除贡献,按时间戳排列(未指定标题)。\n# 在指定名字空间中列举所有已删除修订,按标题和时间戳排列(无指定标题,未设置$1user)。\n\n任一参数只应用于一些模式,并忽略其他参数。",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+       "apihelp-query+deletedrevs-param-start": "枚举的起始时间戳。",
+       "apihelp-query+deletedrevs-param-end": "枚举的结束时间戳。",
        "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
        "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
+       "apihelp-query+deletedrevs-param-prefix": "搜索所有以此值开头的页面标题。",
        "apihelp-query+deletedrevs-param-unique": "每个页面只列出一个修订。",
        "apihelp-query+deletedrevs-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+deletedrevs-param-user": "只列出此用户做出的修订。",
        "apihelp-query+deletedrevs-param-prop": "要获取的属性:\n;revid:添加被删除修订的修订ID。\n;parentid:添加上一修订的修订ID至页面。\n;user:添加做出修订的用户。\n;userid:添加做出修订的用户ID。\n;comment:添加修订摘要。\n;parsedcomment:添加解析过的修订摘要。\n;minor:如果修订是小编辑则加标签。\n;len:添加修订长度(字节)。\n;sha1:添加修订的SHA-1(base 16)。\n;content:添加修订内容。\n;token:<span class=\"apihelp-deprecated\">已弃用。</span>提供编辑令牌。\n;tags:修订标签。",
        "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对页面<kbd>Main Page</kbd>和<kbd>Talk:Main Page</kbd>的贡献,带内容(模式1)。",
        "apihelp-query+deletedrevs-example-mode2": "列出由<kbd>Bob</kbd>作出的最近50次已删除贡献(模式2)。",
-       "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
-       "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3)",
+       "apihelp-query+deletedrevs-example-mode3-main": "列出前50次主名字空间已删除贡献(模式3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "列出前50次{{ns:talk}}名字空间已删除页面(模式3)",
        "apihelp-query+disabled-description": "此查询模块已被禁用。",
        "apihelp-query+duplicatefiles-param-limit": "返回多少重复文件。",
        "apihelp-query+duplicatefiles-param-dir": "罗列所采用的方向。",
        "apihelp-query+duplicatefiles-param-localonly": "只看本地存储库的文件。",
-       "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件",
-       "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件",
+       "apihelp-query+duplicatefiles-example-simple": "查找与[[:File:Albert Einstein Head.jpg]]重复的文件。",
+       "apihelp-query+duplicatefiles-example-generated": "查找所有文件的重复文件。",
+       "apihelp-query+embeddedin-description": "查找所有嵌入指定标题的页面。",
        "apihelp-query+embeddedin-param-title": "要搜索的标题。不能与$1pageid一起使用。",
        "apihelp-query+embeddedin-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+embeddedin-param-namespace": "列举的名字空间。",
        "apihelp-query+embeddedin-param-filterredir": "如何过滤重定向。",
        "apihelp-query+embeddedin-param-limit": "返回的总计页面数。",
        "apihelp-query+embeddedin-example-simple": "显示嵌入<kbd>Template:Stub</kbd>的页面。",
-       "apihelp-query+embeddedin-example-generator": "è\8e·å¾\97有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
+       "apihelp-query+embeddedin-example-generator": "è\8e·å\8f\96有关显示嵌入<kbd>Template:Stub</kbd>的页面的信息。",
        "apihelp-query+extlinks-description": "从指定页面返回所有外部URL(非跨wiki链接)。",
        "apihelp-query+extlinks-param-limit": "返回多少链接。",
        "apihelp-query+extlinks-param-protocol": "URL协议。如果为空并且<var>$1query</var>被设置,协议为<kbd>http</kbd>。将此和<var>$1query</var>都留空以列举所有外部链接。",
        "apihelp-query+extlinks-param-query": "不使用协议搜索字符串。对于检查某一页面是否包含某一外部URL很有用。",
        "apihelp-query+extlinks-param-expandurl": "扩展协议相对URL与规范协议。",
        "apihelp-query+extlinks-example-simple": "获取<kbd>Main Page<kbd>的外部链接列表。",
+       "apihelp-query+exturlusage-description": "列举包含一个指定URL的页面。",
+       "apihelp-query+exturlusage-param-prop": "要包含的信息束:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "添加页面ID。",
+       "apihelp-query+exturlusage-paramvalue-prop-title": "添加页面的标题和名字空间ID。",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "添加页面中使用的URL。",
        "apihelp-query+exturlusage-param-protocol": "URL协议。如果为空并且<var>$1query</var>被设置,协议为<kbd>http</kbd>。将此和<var>$1query</var>都留空以列举所有外部链接。",
        "apihelp-query+exturlusage-param-query": "不包括协议的搜索字符串。参见[[Special:LinkSearch]]。留空以列出所有外部链接。",
        "apihelp-query+exturlusage-param-namespace": "要列举的页面名字空间。",
        "apihelp-query+exturlusage-param-limit": "返回多少页面。",
+       "apihelp-query+exturlusage-param-expandurl": "用标准协议展开协议相关URL。",
        "apihelp-query+exturlusage-example-simple": "显示链接至<kbd>http://www.mediawiki.org</kbd>的页面。",
        "apihelp-query+filearchive-description": "循序列举所有被删除的文件。",
        "apihelp-query+filearchive-param-from": "枚举的起始图片标题。",
        "apihelp-query+filearchive-param-dir": "罗列所采用的方向。",
        "apihelp-query+filearchive-param-sha1": "图片的SHA1哈希值。覆盖$1sha1base36。",
        "apihelp-query+filearchive-param-sha1base36": "基于base 36的图片的SHA1哈希值(用于MediaWiki)。",
-       "apihelp-query+filearchive-example-simple": "显示已删除文件列表",
+       "apihelp-query+filearchive-param-prop": "要获取的图片信息:",
+       "apihelp-query+filearchive-paramvalue-prop-sha1": "为文件加入SHA-1哈希值。",
+       "apihelp-query+filearchive-paramvalue-prop-timestamp": "为已上传版本添加时间戳。",
+       "apihelp-query+filearchive-paramvalue-prop-user": "添加上传了图片版本的用户。",
+       "apihelp-query+filearchive-paramvalue-prop-size": "添加图片大小(字节)及其高度、宽度和页面计数(如果可以)。",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "用于大小的别名。",
+       "apihelp-query+filearchive-paramvalue-prop-description": "添加图片版本的说明。",
+       "apihelp-query+filearchive-paramvalue-prop-parseddescription": "解析版本的描述。",
+       "apihelp-query+filearchive-paramvalue-prop-mime": "添加图片的MIME。",
+       "apihelp-query+filearchive-paramvalue-prop-mediatype": "添加图片的媒体类型。",
+       "apihelp-query+filearchive-paramvalue-prop-metadata": "为图片版本列出Exif元数据。",
+       "apihelp-query+filearchive-paramvalue-prop-bitdepth": "添加版本的字节深度。",
+       "apihelp-query+filearchive-paramvalue-prop-archivename": "添加用于非最新版本的存档版本的文件名。",
+       "apihelp-query+filearchive-example-simple": "显示已删除文件列表。",
        "apihelp-query+filerepoinfo-description": "返回有关wiki配置的图片存储库的元信息。",
        "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
        "apihelp-query+fileusage-description": "查找所有使用指定文件的页面。",
-       "apihelp-query+fileusage-param-prop": "要获取的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:标记作为重定向的页面。",
+       "apihelp-query+fileusage-param-prop": "要获取的属性:",
+       "apihelp-query+fileusage-paramvalue-prop-pageid": "每个页面的页面ID。",
+       "apihelp-query+fileusage-paramvalue-prop-title": "每个页面的标题。",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "标记作为重定向的页面。",
        "apihelp-query+fileusage-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+fileusage-param-limit": "返回多少。",
-       "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表",
-       "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息",
+       "apihelp-query+fileusage-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
+       "apihelp-query+fileusage-example-simple": "获取使用[[:File:Example.jpg]]的页面列表。",
+       "apihelp-query+fileusage-example-generator": "获取有关使用[[:File:Example.jpg]]的页面的信息。",
        "apihelp-query+imageinfo-description": "返回文件信息和上传历史。",
        "apihelp-query+imageinfo-param-prop": "要获取的文件信息:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "添加时间戳至上传的版本。",
        "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
        "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
        "apihelp-query+imageusage-param-dir": "罗列所采用的方向。",
-       "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
-       "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
+       "apihelp-query+imageusage-example-simple": "显示使用[[:File:Albert Einstein Head.jpg]]的页面",
+       "apihelp-query+imageusage-example-generator": "获取有关使用[[:File:Albert Einstein Head.jpg]]的页面的信息",
        "apihelp-query+info-description": "获取基本页面信息。",
        "apihelp-query+info-param-prop": "要获取的额外属性:",
        "apihelp-query+info-paramvalue-prop-protection": "列出每个页面的保护等级。",
        "apihelp-query+info-paramvalue-prop-talkid": "每个非讨论页面的讨论页的页面ID。",
        "apihelp-query+info-paramvalue-prop-watched": "列出每个页面的被监视状态。",
        "apihelp-query+info-paramvalue-prop-watchers": "监视人员数,如果允许。",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "每个页面的监视列表通知时间戳。",
        "apihelp-query+info-paramvalue-prop-subjectid": "每个讨论页的母页面的页面ID。",
+       "apihelp-query+info-paramvalue-prop-url": "为每个页面提供一个完整URL、一个编辑URL和规范URL。",
        "apihelp-query+info-paramvalue-prop-readable": "用户是否可以阅读此页面。",
        "apihelp-query+info-paramvalue-prop-preload": "提供由EditFormPreloadText返回的文本。",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "在页面标题实际显示的地方提供方式。",
        "apihelp-query+info-param-testactions": "测试当前用户是否可以在页面上执行某种操作。",
        "apihelp-query+info-param-token": "请改用[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "获取有关页面<kbd>Main Page</kbd>的信息。",
        "apihelp-query+info-example-protection": "获取<kbd>Main Page</kbd>相关的常规和保护信息。",
+       "apihelp-query+iwbacklinks-description": "查找所有链接至指定跨wiki链接的页面。\n\n可被用于查找带某一前缀的所有链接,或所有至某一标题的链接(带指定前缀)。两参数都不使用就意味着“所有跨wiki链接”。",
        "apihelp-query+iwbacklinks-param-prefix": "跨维基前缀。",
        "apihelp-query+iwbacklinks-param-title": "要搜索的跨wiki链接。必须与<var>$1blprefix</var>一起使用。",
        "apihelp-query+iwbacklinks-param-limit": "返回的总计页面数。",
-       "apihelp-query+iwbacklinks-param-prop": "要获取的属性:\n;iwprefix:加入跨wiki前缀。\n;iwtitle:加入跨wiki标题。",
+       "apihelp-query+iwbacklinks-param-prop": "要获取的属性:",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "加入跨wiki前缀。",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "加入跨wiki标题。",
        "apihelp-query+iwbacklinks-param-dir": "罗列所采用的方向。",
-       "apihelp-query+iwbacklinks-example-simple": "è\8e·å¾\97链接至[[wikibooks:Test]]的页面。",
-       "apihelp-query+iwbacklinks-example-generator": "è\8e·å¾\97有关链接至[[wikibooks:Test]]的页面的信息。",
+       "apihelp-query+iwbacklinks-example-simple": "è\8e·å\8f\96链接至[[wikibooks:Test]]的页面。",
+       "apihelp-query+iwbacklinks-example-generator": "è\8e·å\8f\96有关链接至[[wikibooks:Test]]的页面的信息。",
        "apihelp-query+iwlinks-description": "从指定页面返回所有跨wiki链接。",
        "apihelp-query+iwlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+       "apihelp-query+iwlinks-param-prop": "要为每个跨语言链接获取的额外属性:",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整URL。",
        "apihelp-query+iwlinks-param-limit": "返回多少跨wiki链接。",
        "apihelp-query+iwlinks-param-prefix": "只返回此前缀的跨wiki链接。",
        "apihelp-query+iwlinks-param-title": "用于搜索的跨wiki链接。必须与<var>$1prefix</var>一起使用。",
        "apihelp-query+langbacklinks-param-lang": "用于语言链接的语言。",
        "apihelp-query+langbacklinks-param-title": "要搜索的语言链接。必须与$1lang一起使用。",
        "apihelp-query+langbacklinks-param-limit": "返回的总计页面数。",
-       "apihelp-query+langbacklinks-param-prop": "要获得的属性:\n;lllang:添加语言链接的语言代码。\n;lltitle:添加语言链接的标题。",
+       "apihelp-query+langbacklinks-param-prop": "要获得的属性:",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "添加语言链接的语言代码。",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "添加语言链接的标题。",
        "apihelp-query+langbacklinks-param-dir": "罗列所采用的方向。",
-       "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
-       "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
+       "apihelp-query+langbacklinks-example-simple": "获取链接至[[:fr:Test]]的页面",
+       "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
        "apihelp-query+langlinks-description": "从指定页面返回所有跨语言链接。",
        "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
        "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与<var>$1prop</var>一起使用)。",
+       "apihelp-query+langlinks-param-prop": "要为每个跨语言链接获取的额外属性:",
+       "apihelp-query+langlinks-paramvalue-prop-url": "添加完整URL。",
+       "apihelp-query+langlinks-paramvalue-prop-langname": "添加本地化语言名(尽可能)。使用<var>$1inlanguagecode</var>以控制语言。",
+       "apihelp-query+langlinks-paramvalue-prop-autonym": "添加本地语言名。",
        "apihelp-query+langlinks-param-lang": "只返回带此语言代码的语言链接。",
        "apihelp-query+langlinks-param-title": "要搜索的链接。必须与<var>$1lang</var>一起使用。",
        "apihelp-query+langlinks-param-dir": "罗列所采用的方向。",
        "apihelp-query+links-param-namespace": "只显示这些名字空间的链接。",
        "apihelp-query+links-param-limit": "返回多少链接。",
        "apihelp-query+links-param-dir": "罗列所采用的方向。",
-       "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获取链接",
+       "apihelp-query+links-example-simple": "从页面<kbd>Main Page</kbd>获取链接",
        "apihelp-query+links-example-generator": "获取有关在页面<kbd>Main Page</kbd>中连接的页面的信息。",
        "apihelp-query+links-example-namespaces": "获取在{{ns:user}}和{{ns:template}}名字空间中来自页面<kbd>Main Page</kbd>的链接。",
        "apihelp-query+linkshere-description": "查找所有链接至指定页面的页面。",
-       "apihelp-query+linkshere-param-prop": "要获得的属性:\n;pageid:每个页面的页面ID。\n;title:每个页面的标题。\n;redirect:如果页面是一个重定向就标记。",
+       "apihelp-query+linkshere-param-prop": "要获取的属性:",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "每个页面的页面ID。",
+       "apihelp-query+linkshere-paramvalue-prop-title": "每个页面的标题。",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "如果页面是一个重定向就标记。",
        "apihelp-query+linkshere-param-namespace": "只包括这些名字空间的页面。",
        "apihelp-query+linkshere-param-limit": "返回多少。",
        "apihelp-query+linkshere-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
        "apihelp-query+linkshere-example-simple": "获取链接至[[Main Page]]的页面列表。",
        "apihelp-query+linkshere-example-generator": "获取有关链接至[[Main Page]]的页面的信息。",
        "apihelp-query+logevents-description": "从日志获取事件。",
+       "apihelp-query+logevents-param-prop": "要获取的属性:",
+       "apihelp-query+logevents-paramvalue-prop-ids": "添加日志活动的ID。",
+       "apihelp-query+logevents-paramvalue-prop-title": "为日志事件添加页面标题。",
+       "apihelp-query+logevents-paramvalue-prop-type": "添加日志活动的类型。",
+       "apihelp-query+logevents-paramvalue-prop-user": "为日志事件添加用户责任。",
+       "apihelp-query+logevents-paramvalue-prop-userid": "为日志事件添加对此负责的用户ID。",
+       "apihelp-query+logevents-paramvalue-prop-timestamp": "为日志活动添加时间戳。",
+       "apihelp-query+logevents-paramvalue-prop-comment": "添加日志活动的摘要。",
+       "apihelp-query+logevents-paramvalue-prop-parsedcomment": "添加被解析的日志活动的摘要。",
+       "apihelp-query+logevents-paramvalue-prop-details": "列举有关日志事件的额外详细信息。",
+       "apihelp-query+logevents-paramvalue-prop-tags": "列举用于日志活动的标签。",
+       "apihelp-query+logevents-param-type": "过滤日志记录至仅限此类型。",
+       "apihelp-query+logevents-param-action": "过滤日志操作为仅限此操作。覆盖<var>$1type</var>。在可用值列表中,带星号通配符的值例如<kbd>action/*</kbd>可在斜线(/)后拥有不同字符串。",
        "apihelp-query+logevents-param-start": "枚举的起始时间戳。",
        "apihelp-query+logevents-param-end": "枚举的结束时间戳。",
+       "apihelp-query+logevents-param-user": "过滤记录为这些由指定用户做出的。",
+       "apihelp-query+logevents-param-title": "过滤记录至这些与页面相关的。",
+       "apihelp-query+logevents-param-namespace": "过滤事件为在这些指定的名字空间中。",
        "apihelp-query+logevents-param-prefix": "过滤以此前缀开头的记录。",
-       "apihelp-query+logevents-example-simple": "列出最近日志活动",
+       "apihelp-query+logevents-param-tag": "只列举带此标签的事件日志记录。",
+       "apihelp-query+logevents-param-limit": "返回的事件日志记录总数。",
+       "apihelp-query+logevents-example-simple": "列出最近日志事件。",
        "apihelp-query+pagepropnames-description": "列出wiki中所有使用中的页面属性名称。",
        "apihelp-query+pagepropnames-param-limit": "返回名称的最大数量。",
        "apihelp-query+pagepropnames-example-simple": "获取前10个属性名称。",
+       "apihelp-query+pageprops-description": "获取页面内容中定义的各种属性。",
+       "apihelp-query+pageprops-param-prop": "只列出这些组。在检查某一页面是否使用某一个页面属性时有用。",
        "apihelp-query+pageprops-example-simple": "获取用于页面<kbd>Main Page</kbd>和<kbd>MediaWiki</kbd>的属性。",
        "apihelp-query+pageswithprop-description": "列出所有使用指定页面属性的页面。",
+       "apihelp-query+pageswithprop-param-propname": "要用于列举页面的页面属性。",
+       "apihelp-query+pageswithprop-param-prop": "要包含的信息束:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "添加页面ID。",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "添加页面的标题和名字空间ID。",
+       "apihelp-query+pageswithprop-paramvalue-prop-value": "添加页面属性值。",
        "apihelp-query+pageswithprop-param-limit": "返回页面的最大数量。",
        "apihelp-query+pageswithprop-param-dir": "排序的方向。",
        "apihelp-query+pageswithprop-example-simple": "列出前10个使用<code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>的页面。",
-       "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的信息。",
+       "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用<code>_&#95;NOTOC_&#95;</code>的页面的额外信息。",
        "apihelp-query+prefixsearch-param-search": "搜索字符串。",
        "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
        "apihelp-query+prefixsearch-param-limit": "要返回的结果最大数。",
        "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
        "apihelp-query+prefixsearch-example-simple": "搜索以<kbd>meaning</kbd>开头的页面标题。",
+       "apihelp-query+protectedtitles-description": "列出所有被限制创建的标题。",
        "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
+       "apihelp-query+protectedtitles-param-level": "只列出带这些保护级别的标题。",
        "apihelp-query+protectedtitles-param-limit": "返回的总计页面数。",
-       "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
+       "apihelp-query+protectedtitles-param-prop": "要获取的属性:",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "添加保护被添加时的时间戳。",
+       "apihelp-query+protectedtitles-paramvalue-prop-user": "添加对页面添加保护的用户。",
+       "apihelp-query+protectedtitles-paramvalue-prop-userid": "添加对页面添加保护的用户ID。",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "为保护添加摘要。",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "为保护添加解析的摘要。",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加保护将被提升时的时间戳。",
+       "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
+       "apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
        "apihelp-query+protectedtitles-example-generator": "找到主命名空间中已保护的标题的链接。",
        "apihelp-query+querypage-param-limit": "返回的结果数。",
        "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
-       "apihelp-query+random-description": "获取一组随机页面。\n\n页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。\n\n如果名字空间中的页面数低于<var>$1limit</var>,将只会返回少量的页面。同一页面不会返回两次。",
+       "apihelp-query+random-description": "获取一组随机页面。\n\n页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。",
        "apihelp-query+random-param-namespace": "只返回这些名字空间的页面。",
        "apihelp-query+random-param-limit": "限制返回多少随机页面。",
-       "apihelp-query+random-param-redirect": "加载一个随机重定向而不是一个随机页面。",
+       "apihelp-query+random-param-redirect": "请改用<kbd>$1filterredir=redirects</kbd>。",
+       "apihelp-query+random-param-filterredir": "如何过滤重定向。",
        "apihelp-query+random-example-simple": "从主名字空间返回两个随机页面。",
-       "apihelp-query+random-example-generator": "返回有关来自主名字空间的两个随机页面的页面信息",
+       "apihelp-query+random-example-generator": "返回有关来自主名字空间的两个随机页面的页面信息",
        "apihelp-query+recentchanges-description": "枚举最近更改。",
        "apihelp-query+recentchanges-param-start": "枚举的起始时间戳。",
        "apihelp-query+recentchanges-param-end": "枚举的结束时间戳。",
+       "apihelp-query+recentchanges-param-namespace": "过滤更改为仅限这些名字空间。",
        "apihelp-query+recentchanges-param-user": "只列出此用户的更改。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
+       "apihelp-query+recentchanges-param-prop": "包含的额外信息束:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Adds the user responsible for the edit and tags if they are an IP.",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "Adds the user ID responsible for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-comment": "Adds the comment for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "Adds the parsed comment for the edit.",
+       "apihelp-query+recentchanges-paramvalue-prop-flags": "为编辑添加标记。",
+       "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加编辑的时间戳。",
+       "apihelp-query+recentchanges-paramvalue-prop-title": "添加编辑的页面标题。",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "添加页面ID、最近更改ID和新旧修订的ID。",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Adds the new and old page length in bytes.",
+       "apihelp-query+recentchanges-paramvalue-prop-redirect": "Tags edit if page is a redirect.",
+       "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Tags patrollable edits as being patrolled or unpatrolled.",
+       "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Adds log information (log ID, log type, etc) to log entries.",
+       "apihelp-query+recentchanges-paramvalue-prop-tags": "Lists tags for the entry.",
+       "apihelp-query+recentchanges-paramvalue-prop-sha1": "Adds the content checksum for entries associated with a revision.",
        "apihelp-query+recentchanges-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-query+recentchanges-param-limit": "返回总计更新数。",
        "apihelp-query+recentchanges-param-type": "显示的更改类型。",
-       "apihelp-query+recentchanges-example-simple": "最近更改列表",
+       "apihelp-query+recentchanges-example-simple": "最近更改列表。",
+       "apihelp-query+recentchanges-example-generator": "获取有关最近未巡查更改的页面信息。",
        "apihelp-query+redirects-description": "返回至指定页面的所有重定向。",
+       "apihelp-query+redirects-param-prop": "要获取的属性:",
+       "apihelp-query+redirects-paramvalue-prop-pageid": "每个重定向的页面ID。",
+       "apihelp-query+redirects-paramvalue-prop-title": "每个重定向的标题。",
+       "apihelp-query+redirects-paramvalue-prop-fragment": "每个重定向的碎片,如果有。",
        "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
        "apihelp-query+redirects-param-limit": "返回多少重定向。",
        "apihelp-query+redirects-example-simple": "获取至[[Main Page]]的重定向列表。",
        "apihelp-query+redirects-example-generator": "获取所有重定向至[[Main Page]]的信息。",
        "apihelp-query+revisions-paraminfo-singlepageonly": "可能只能与单一页面使用(模式#2)。",
+       "apihelp-query+revisions-param-end": "列举直至此时间戳。",
        "apihelp-query+revisions-example-content": "获取带内容的数据,用于标题<kbd>API</kbd>和<kbd>Main Page</kbd>的最近修订。",
        "apihelp-query+revisions-example-last5": "获取<kbd>Main Page</kbd>的最近5次修订。",
        "apihelp-query+revisions-example-first5": "获取<kbd>Main Page</kbd>的前5次修订。",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "修订的时间戳。",
        "apihelp-query+revisions+base-paramvalue-prop-user": "做出修订的用户。",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "修订创建者的用户ID。",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "修订的长度(字节)。",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "修订的SHA-1(base 16)。",
        "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "修订的内容模型ID。",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "由用户对修订做出的摘要。",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "由用户对修订做出的被解析的摘要。",
        "apihelp-query+revisions+base-paramvalue-prop-content": "修订文本。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "修订标签。",
        "apihelp-query+revisions+base-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)。",
        "apihelp-query+search-param-namespace": "只在这些名字空间搜索。",
        "apihelp-query+search-param-what": "要执行的搜索类型。",
        "apihelp-query+search-param-info": "要返回的元数据。",
-       "apihelp-query+search-param-prop": "要返回的属性:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;categorysnippet:Adds a parsed snippet of the matching category.\n;isfilematch:Adds a boolean indicating if the search matched file content.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-prop": "要返回的属性:",
+       "apihelp-query+search-paramvalue-prop-size": "Adds the size of the page in bytes.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Adds the word count of the page.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Adds the timestamp of when the page was last edited.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Adds a parsed snippet of the page.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Adds a parsed snippet of the page title.",
+       "apihelp-query+search-paramvalue-prop-redirectsnippet": "Adds a parsed snippet of the redirect title.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Adds the title of the matching redirect.",
+       "apihelp-query+search-paramvalue-prop-sectionsnippet": "Adds a parsed snippet of the matching section title.",
+       "apihelp-query+search-paramvalue-prop-sectiontitle": "Adds the title of the matching section.",
+       "apihelp-query+search-paramvalue-prop-categorysnippet": "Adds a parsed snippet of the matching category.",
+       "apihelp-query+search-paramvalue-prop-isfilematch": "Adds a boolean indicating if the search matched file content.",
+       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
        "apihelp-query+search-param-limit": "返回的总计页面数。",
        "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
        "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
        "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
        "apihelp-query+search-example-generator": "获得有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
        "apihelp-query+siteinfo-description": "返回有关网站的一般信息。",
-       "apihelp-query+siteinfo-param-prop": "要获取的信息:\n;general:全部系统信息。\n;namespaces:注册的名字空间及其规范名称列表。\n;namespacealiases:注册的名字空间别名列表。\n;specialpagealiases:特殊页面别名列表。\n;magicwords:魔术字及其别名列表。\n;statistics:返回网站统计。\n;interwikimap:返回跨wiki映射(可选过滤,可选择使用<var>$1inlanguagecode</var>本地化)。\n;dbrepllag:返回数据库服务器与最高反应延迟。\n;usergroups:返回用户组及其相关权限。\n;libraries:返回wiki上安装的库。\n;extensions:返回wiki上安装的扩展。\n;fileextensions:返回允许上传的文件扩展名列表。\n;rightsinfo:如果可用,返回wiki的版权信息。\n;restrictions:返回可用的编辑限制(保护)类型信息。\n;languages:返回MediaWiki支持的语言列表(可选择使用<var>$1inlanguagecode</var>本地化)。\n;skins:返回所有启用的皮肤列表(可选择使用<var>$1inlanguagecode</var>本地化,否则是内容语言)。\n;extensiontags:返回解析器扩展标签列表。\n;functionhooks:返回解析器函数钩列表。\n;showhooks:返回所有订阅的钩列表(<var>[[mw:Manual:$wgHooks|$wgHooks]]</var>的内容)。\n;variables:返回变量ID列表。\n;protocols:返回外部链接中允许的协议列表。\n;defaultoptions:返回用户设置的默认值。",
+       "apihelp-query+siteinfo-param-prop": "要获取的信息:",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "全部系统信息。",
+       "apihelp-query+siteinfo-paramvalue-prop-namespaces": "注册的名字空间及其规范名称列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "注册的名字空间别名列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特殊页面别名列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-magicwords": "魔术字及其别名列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "返回网站统计。",
+       "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "返回跨wiki映射(可选过滤,可选择使用<var>$1inlanguagecode</var>本地化)。",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "返回数据库服务器与最高反应延迟。",
+       "apihelp-query+siteinfo-paramvalue-prop-usergroups": "返回用户组及其相关权限。",
+       "apihelp-query+siteinfo-paramvalue-prop-libraries": "返回wiki上安装的库。",
+       "apihelp-query+siteinfo-paramvalue-prop-extensions": "返回wiki上安装的扩展。",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "返回允许上传的文件扩展名列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "如果可用,返回wiki的版权信息。",
+       "apihelp-query+siteinfo-paramvalue-prop-restrictions": "返回可用的编辑限制(保护)类型信息。",
+       "apihelp-query+siteinfo-paramvalue-prop-languages": "返回MediaWiki支持的语言列表(可选择使用<var>$1inlanguagecode</var>本地化)。",
+       "apihelp-query+siteinfo-paramvalue-prop-skins": "返回所有启用的皮肤列表(可选择使用<var>$1inlanguagecode</var>本地化,否则是内容语言)。",
+       "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "返回解析器扩展标签列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "返回解析器函数钩列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "返回所有订阅的钩列表(<var>[[mw:Manual:$wgHooks|$wgHooks]]</var>的内容)。",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "返回变量ID列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "返回外部链接中允许的协议列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "返回用户设置的默认值。",
+       "apihelp-query+siteinfo-param-filteriw": "只返回跨wiki地图中的本地或非本地记录。",
        "apihelp-query+siteinfo-param-showalldb": "列出所有数据库服务器,不只是最落后的那个。",
        "apihelp-query+siteinfo-param-numberingroup": "列出用户组中的用户数。",
        "apihelp-query+siteinfo-param-inlanguagecode": "用于本地化语言名称(尽可能)和皮肤名称的语言代码。",
-       "apihelp-query+siteinfo-example-simple": "获取网站信息",
-       "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
+       "apihelp-query+siteinfo-example-simple": "取得网站信息。",
+       "apihelp-query+siteinfo-example-interwiki": "取得本地跨wiki前缀列表。",
        "apihelp-query+siteinfo-example-replag": "检查当前的响应延迟。",
        "apihelp-query+stashimageinfo-description": "返回用于藏匿文件的文件信息。",
+       "apihelp-query+stashimageinfo-param-sessionkey": "$1filekey的别名,用于向后兼容。",
        "apihelp-query+stashimageinfo-example-simple": "返回藏匿文件的信息。",
        "apihelp-query+tags-description": "列出更改标签。",
        "apihelp-query+tags-param-limit": "列出标签的最大数量。",
-       "apihelp-query+tags-param-prop": "要获取哪个属性:\n;name:添加标签名称。\n;displayname:为标签添加系统消息。\n;description:为标签添加描述。\n;hitcount:已添加此标签的修订版本与日志数量。\n;defined:标识标签是否已定义。\n;source:获得标签来源,它可能包括用于扩展定义的标签的<samp>extension</samp>,以及用于可被用户手动应用的标签的<samp>manual</samp>。\n;active:标签是否仍可被应用。",
-       "apihelp-query+tags-example-simple": "可用标签列表",
+       "apihelp-query+tags-param-prop": "要获取哪个属性:",
+       "apihelp-query+tags-paramvalue-prop-name": "添加标签名称。",
+       "apihelp-query+tags-paramvalue-prop-displayname": "为标签添加系统消息。",
+       "apihelp-query+tags-paramvalue-prop-description": "为标签添加描述。",
+       "apihelp-query+tags-paramvalue-prop-hitcount": "已添加此标签的修订版本与日志数量。",
+       "apihelp-query+tags-paramvalue-prop-defined": "标识标签是否已定义。",
+       "apihelp-query+tags-paramvalue-prop-source": "获得标签来源,它可能包括用于扩展定义的标签的<samp>extension</samp>,以及用于可被用户手动应用的标签的<samp>manual</samp>。",
+       "apihelp-query+tags-paramvalue-prop-active": "标签是否仍可被应用。",
+       "apihelp-query+tags-example-simple": "可用标签列表。",
        "apihelp-query+templates-description": "返回指定页面上所有被嵌入的页面。",
        "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
        "apihelp-query+templates-param-limit": "返回的模板数量。",
        "apihelp-query+tokens-param-type": "要请求的令牌类型。",
        "apihelp-query+tokens-example-simple": "检索一个csrf令牌(默认)。",
        "apihelp-query+tokens-example-types": "检索一个监视令牌和一个巡查令牌。",
+       "apihelp-query+transcludedin-param-prop": "要获取的属性:",
+       "apihelp-query+transcludedin-paramvalue-prop-pageid": "每个页面的页面ID。",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "每个页面的标题。",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "标记作为重定向的页面。",
        "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
        "apihelp-query+transcludedin-param-limit": "返回多少。",
+       "apihelp-query+transcludedin-param-show": "只显示符合以下标准的项:\n;redirect:只显示重定向。\n;!redirect:只显示非重定向。",
        "apihelp-query+transcludedin-example-simple": "获取嵌入<kbd>Main Page</kbd>的页面列表。",
        "apihelp-query+transcludedin-example-generator": "获取有关嵌入<kbd>Main Page</kbd>的页面的信息。",
        "apihelp-query+usercontribs-description": "获取一位用户的所有编辑。",
        "apihelp-query+usercontribs-param-limit": "返回贡献的最大数量。",
        "apihelp-query+usercontribs-param-start": "返回的起始时间戳。",
        "apihelp-query+usercontribs-param-end": "返回的最终时间戳。",
+       "apihelp-query+usercontribs-param-user": "要检索贡献的用户。",
        "apihelp-query+usercontribs-param-namespace": "只列出这些名字空间的贡献。",
+       "apihelp-query+usercontribs-param-prop": "包含额外的信息束:",
+       "apihelp-query+usercontribs-paramvalue-prop-ids": "添加页面ID和修订ID。",
+       "apihelp-query+usercontribs-paramvalue-prop-title": "添加页面标题及其名字空间ID。",
+       "apihelp-query+usercontribs-paramvalue-prop-timestamp": "添加编辑的时间戳。",
+       "apihelp-query+usercontribs-paramvalue-prop-comment": "添加编辑摘要。",
+       "apihelp-query+usercontribs-paramvalue-prop-parsedcomment": "添加被解析的编辑摘要。",
+       "apihelp-query+usercontribs-paramvalue-prop-size": "添加编辑的新大小。",
+       "apihelp-query+usercontribs-paramvalue-prop-sizediff": "添加与父编辑相比该编辑的大小变化。",
+       "apihelp-query+usercontribs-paramvalue-prop-flags": "添加编辑标记。",
+       "apihelp-query+usercontribs-paramvalue-prop-patrolled": "标记已巡查编辑。",
+       "apihelp-query+usercontribs-paramvalue-prop-tags": "列举用于编辑的标签。",
+       "apihelp-query+usercontribs-param-show": "只显示符合这些标准的项目,例如只显示不是小编辑的编辑:<kbd>$2show=!minor</kbd>。\n\n如果<kbd>$2show=patrolled</kbd>或<kbd>$2show=!patrolled</kbd>被设定,早于<var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>($1秒)的修订不会被显示。",
        "apihelp-query+usercontribs-example-user": "显示用户<kbd>Example</kbd>的贡献。",
        "apihelp-query+usercontribs-example-ipprefix": "显示来自<kbd>192.0.2.</kbd>前缀所有 IP 地址的贡献。",
        "apihelp-query+userinfo-description": "获取有关当前用户的信息。",
-       "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息",
-       "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息",
+       "apihelp-query+userinfo-param-prop": "要包含的信息束:",
+       "apihelp-query+userinfo-paramvalue-prop-blockinfo": "如果当前用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "如果当前用户有等待中的消息的话,添加标签<samp>messages</samp>。",
+       "apihelp-query+userinfo-paramvalue-prop-groups": "Lists all the groups the current user belongs to.",
+       "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "Lists all the groups the current user is automatically a member of.",
+       "apihelp-query+userinfo-paramvalue-prop-rights": "Lists all the rights the current user has.",
+       "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Lists the groups the current user can add to and remove from.",
+       "apihelp-query+userinfo-paramvalue-prop-options": "Lists all preferences the current user has set.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Deprecated.</span> Get a token to change current user's preferences.",
+       "apihelp-query+userinfo-paramvalue-prop-editcount": "Adds the current user's edit count.",
+       "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Lists all rate limits applying to the current user.",
+       "apihelp-query+userinfo-paramvalue-prop-realname": "添加用户的真实姓名。",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Adds the user's email address and email authentication date.",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "Echoes the <code>Accept-Language</code> header sent by the client in a structured format.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "添加用户的注册时间。",
+       "apihelp-query+userinfo-paramvalue-prop-unreadcount": "Adds the count of unread pages on the user's watchlist (maximum $1; returns <samp>$2</samp> if more).",
+       "apihelp-query+userinfo-example-simple": "获取有关当前用户的信息。",
+       "apihelp-query+userinfo-example-data": "获取有关当前用户的额外信息。",
        "apihelp-query+users-description": "获取有关列出用户的信息。",
+       "apihelp-query+users-param-prop": "要包含的信息束:",
+       "apihelp-query+users-paramvalue-prop-blockinfo": "如果用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
+       "apihelp-query+users-paramvalue-prop-groups": "列举每位用户属于的所有组。",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "Lists all the groups a user is automatically a member of.",
+       "apihelp-query+users-paramvalue-prop-rights": "Lists all the rights each user has.",
+       "apihelp-query+users-paramvalue-prop-editcount": "Adds the user's edit count.",
+       "apihelp-query+users-paramvalue-prop-registration": "Adds the user's registration timestamp.",
+       "apihelp-query+users-paramvalue-prop-emailable": "Tags if the user can and wants to receive email through [[Special:Emailuser]].",
+       "apihelp-query+users-paramvalue-prop-gender": "Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
        "apihelp-query+users-param-token": "请改用<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-query+users-example-simple": "返回用户<kbd>Example</kbd>的信息。",
+       "apihelp-query+watchlist-description": "在当前用户的监视列表中获取对页面的最近更改。",
        "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
        "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
        "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
+       "apihelp-query+watchlist-param-prop": "要获取的额外属性:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "添加修订ID和页面ID。",
+       "apihelp-query+watchlist-paramvalue-prop-title": "添加页面标题。",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "为编辑添加标记。",
+       "apihelp-query+watchlist-paramvalue-prop-user": "添加做出编辑的用户。",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "添加做出编辑的用户的ID。",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "添加编辑摘要。",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "添加解析过的编辑摘要。",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "添加编辑时间戳。",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "将编辑标记为已巡查。",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "添加页面的旧有长度和新长度。",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "添加最近被通知有关编辑的用户的时间戳。",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "在适当位置添加日志信息。",
+       "apihelp-query+watchlist-param-type": "要显示的更改类型:\n;edit:定期页面编辑。\n;external:外部更改。\n;new:页面创建。\n;log:日志记录。",
        "apihelp-query+watchlist-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
+       "apihelp-query+watchlist-example-simple": "在当前用户的监视列表中列出用于最近更改页面的最新修订。",
+       "apihelp-query+watchlist-example-props": "在当前用户的监视列表中检索有关用于最近更改页面的最新修订的额外信息。",
+       "apihelp-query+watchlist-example-allrev": "在当前用户的监视列表中检索有关所有最近对页面的更改的信息。",
        "apihelp-query+watchlist-example-generator": "在当前用户的监视列表中检索用于最近更改页面的页面信息。",
+       "apihelp-query+watchlist-example-generator-rev": "在当前用户的监视列表中检索用于对页面最近更改的修订信息。",
+       "apihelp-query+watchlist-example-wlowner": "在用户<kbd>Example</kbd>的监视列表中列出用于最近更改页面的最新修订。",
        "apihelp-query+watchlistraw-description": "获得当前用户的监视列表上的所有页面。",
        "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
        "apihelp-query+watchlistraw-param-limit": "根据结果返回的结果总数。",
+       "apihelp-query+watchlistraw-param-prop": "要获取的额外属性:",
+       "apihelp-query+watchlistraw-paramvalue-prop-changed": "添加最近被通知有关编辑的用户的时间戳。",
        "apihelp-query+watchlistraw-param-token": "允许访问其他用户监视列表的安全密钥(可通过用户的[[Special:Preferences#mw-prefsection-watchlist|参数设置]]找到)。",
        "apihelp-query+watchlistraw-param-fromtitle": "要列举的起始标题(带名字空间前缀)。",
        "apihelp-query+watchlistraw-param-totitle": "要列举的最终标题(带名字空间前缀)。",
        "apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
        "apihelp-revisiondelete-description": "删除和恢复修订版本。",
+       "apihelp-revisiondelete-param-ids": "用于将被删除的修订的标识符。",
        "apihelp-revisiondelete-param-hide": "每次修订要隐藏的东西。",
        "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
        "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
        "apihelp-revisiondelete-example-revision": "隐藏<kbd>首页</kbd>的修订版本<kbd>12345</kbd>的内容。",
        "apihelp-revisiondelete-example-log": "隐藏日志记录<kbd>67890</kbd>上的所有数据,原因<kbd>BLP violation</kbd>。",
+       "apihelp-rollback-description": "撤销对页面的最近编辑。\n\n如果最近编辑页面的用户在一行中进行多次编辑,所有编辑将被回退。",
        "apihelp-rollback-param-title": "要回退的页面标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-rollback-param-pageid": "要回退的页面的页面 ID。不能与<var>$1title</var>一起使用。",
        "apihelp-rollback-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-rollback-example-simple": "回退由用户<kbd>Example</kbd>对<kbd>Main Page</kbd>做出的最近编辑。",
        "apihelp-rollback-example-summary": "回退由IP用户<kbd>192.0.2.5</kbd>对页面<kbd>Main Page</kbd>做出的最近编辑,带编辑摘要<kbd>Reverting vandalism</kbd>,并将这些编辑和回退标记为机器人编辑。",
-       "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
-       "apihelp-rsd-example-simple": "导出RSD架构",
-       "apihelp-setnotificationtimestamp-description": "更新用于监视页面的通知时间戳。\n\n这会影响监视列表和历史中已更改页面的高亮度,并且如果“当我的监视列表中的页面被更改时发送电子邮件通知我”的设置被启用的话,也会影响电子邮件的发送。",
+       "apihelp-rsd-description": "导出一个RSD(Really Simple Discovery)架构",
+       "apihelp-rsd-example-simple": "导出RSD架构",
+       "apihelp-setnotificationtimestamp-description": "更新用于监视页面的通知时间戳。\n\n这会影响监视列表和历史中已更改页面的高亮度,并且如果“{{int:tog-enotifwatchlistpages}}”设置被启用的话,也会影响电子邮件的发送。",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "工作于所有已监视页面。",
        "apihelp-setnotificationtimestamp-param-timestamp": "要设置通知时间戳的时间戳。",
        "apihelp-setnotificationtimestamp-param-torevid": "要设置通知时间戳的修订(只限一个页面)。",
        "apihelp-tag-param-add": "要添加的标签。只有手动定义的标签可以添加。",
        "apihelp-tag-param-remove": "要移除的标签。只有手动定义或完全不明确的标签可以被移除。",
        "apihelp-tag-param-reason": "更改原因。",
-       "apihelp-tag-example-rev": "从修订ID 123添加<kbd>vandalism</kbd>标签,而不指定原因",
+       "apihelp-tag-example-rev": "将<kbd>vandalism</kbd>标签添加至修订ID 123,而不指定原因",
        "apihelp-tag-example-log": "从日志记录ID 123移除<kbd>spam</kbd>标签,原因为<kbd>Wrongly applied</kbd>",
        "apihelp-tokens-description": "获取可修改数据的操作的令牌。\n\n此模块被弃用以有利于[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-tokens-param-type": "要请求的令牌类型。",
        "apihelp-unblock-param-reason": "解封的原因。",
        "apihelp-unblock-example-id": "解封封禁ID #<kbd>105</kbd>。",
        "apihelp-unblock-example-user": "解封用户<kbd>Bob</kbd>,原因<kbd>Sorry Bob</kbd>。",
+       "apihelp-undelete-description": "恢复一个被删除页面的修订。\n\n被删除修订的列表(包括时间戳)可通过[[Special:ApiHelp/query+deletedrevs|list=deletedrevs]]检索到,并且被删除的文件ID列表可通过[[Special:ApiHelp/query+filearchive|list=filearchive]]检索到。",
        "apihelp-undelete-param-title": "要恢复的页面标题。",
        "apihelp-undelete-param-reason": "恢复的原因。",
+       "apihelp-undelete-param-timestamps": "要回复的修订的时间戳。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "恢复<kbd>Main Page</kbd>的两个修订。",
+       "apihelp-upload-description": "上传一个文件,或获取正在等待中的上传的状态。\n\n可以使用的几种方法:\n* 直接上传文件内容,使用<var>$1file</var>参数。\n* 成批上传文件,使用<var>$1filesize</var>、<var>$1chunk</var>和<var>$1offset</var>参数。\n* 有MediaWiki服务器从URL检索一个文件,使用<var>$1url</var>参数。\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
        "apihelp-upload-param-filename": "目标文件名。",
        "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
        "apihelp-upload-param-watch": "监视页面。",
        "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
+       "apihelp-upload-param-url": "要检索文件来源的URL。",
        "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
        "apihelp-upload-param-filesize": "全部上传的文件大小。",
        "apihelp-upload-param-offset": "块的偏移量(字节)。",
        "apihelp-upload-param-chunk": "大块内容。",
-       "apihelp-upload-example-url": "从URL上传",
+       "apihelp-upload-param-leavemessage": "如果asyncdownload被使用,当完成时,在用户讨论页留下一条消息。",
+       "apihelp-upload-example-url": "从URL上传。",
        "apihelp-upload-example-filekey": "完成一次由于警告而失败的上传。",
        "apihelp-userrights-description": "更改一位用户的组成员。",
        "apihelp-userrights-param-user": "用户名。",
        "apihelp-userrights-param-reason": "更改原因。",
        "apihelp-userrights-example-user": "将用户<kbd>FooBot</kbd>添加至<kbd>bot</kbd>用户组,并从<kbd>sysop</kbd>和<kbd>bureaucrat</kbd>组移除。",
        "apihelp-userrights-example-userid": "将ID为<kbd>123</kbd>的用户加入至<kbd>机器人</kbd>组,并将其从<kbd>管理员</kbd>和<kbd>行政员</kbd>组移除。",
+       "apihelp-watch-description": "从当前用户的监视列表中添加或移除页面。",
        "apihelp-watch-param-title": "要(取消)监视的页面。也可使用<var>$1titles</var>。",
+       "apihelp-watch-param-unwatch": "如果设置页面将被取消监视而不是被监视。",
        "apihelp-watch-example-watch": "监视页面<kbd>Main Page</kbd>。",
        "apihelp-watch-example-unwatch": "取消监视页面<kbd>Main Page</kbd>。",
        "apihelp-watch-example-generator": "监视主名字空间中的最少几个页面。",
        "apihelp-txtfm-description": "输出数据为PHP的<code>print_r()</code>格式(HTML优质打印效果)。",
        "apihelp-xml-description": "输出数据为XML格式。",
        "apihelp-xml-param-xslt": "如果指定,加入已命名的页面作为一个XSL样式表。值必须是在{{ns:mediawiki}}名字空间以<code>.xsl</code>为结尾的标题。",
+       "apihelp-xml-param-includexmlnamespace": "如果指定,添加一个XML名字空间。",
        "apihelp-xmlfm-description": "输出数据为XML格式(HTML优质打印效果)。",
        "apihelp-yaml-description": "输出数据为YAML格式。",
        "apihelp-yamlfm-description": "输出数据为YAML格式(HTML优质打印效果)。",
        "api-format-title": "MediaWiki API 结果",
        "api-format-prettyprint-header": "这是$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML表示,设置<kbd>format=$2</kbd>。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API 帮助]]以获取更多信息。",
+       "api-format-prettyprint-header-only-html": "这是用来调试的HTML表现,不适合实际使用。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
        "api-orm-param-props": "要查询的字段。",
        "api-orm-param-limit": "返回的总行数。",
        "api-pageset-param-titles": "要工作的标题列表。",
        "api-help-param-type-boolean": "类型:布尔值([[Special:ApiHelp/main#main/datatypes|详细信息]])",
        "api-help-param-type-timestamp": "类型:{{PLURAL:$1|1=时间戳|2=时间戳列表}}([[Special:ApiHelp/main#main/datatypes|允许格式]])",
        "api-help-param-type-user": "类型:{{PLURAL:$1|1=用户名|2=用户名列表}}",
-       "api-help-param-list": "{{PLURAL:$1|1=ä¸\80个å\80¼|2=值(以<kbd>{{!}}</kbd>分隔)}}:$2",
+       "api-help-param-list": "{{PLURAL:$1|1=以ä¸\8bå\80¼ä¸­ç\9a\84ä¸\80个|2=值(以<kbd>{{!}}</kbd>分隔)}}:$2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=必须为空|可以为空,或$2}}",
        "api-help-param-limit": "不允许超过$1。",
        "api-help-param-limit2": "不允许超过$1个(对于机器人则是$2个)。",
        "api-help-param-integer-min": "{{PLURAL:$1|值}}必须不少于$2。",
        "api-help-param-integer-max": "{{PLURAL:$1|值}}必须不大于$3。",
        "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
+       "api-help-param-upload": "必须被公布为使用multipart/form-data的一次文件上传。",
        "api-help-param-multi-separate": "通过“<kbd>|</kbd>”隔开各值。",
        "api-help-param-multi-max": "值的最高数字是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
        "api-help-param-default": "默认:$1",
index 8531e23..b1e6d95 100644 (file)
@@ -43,7 +43,7 @@
        "apihelp-createaccount-param-name": "使用者名稱。",
        "apihelp-createaccount-param-password": "密碼 (若有設定 <var>$1mailpassword</var> 則可略過)。",
        "apihelp-createaccount-param-domain": "外部認証使用的網域 (選填)。",
-       "apihelp-createaccount-param-token": "å·²å\8f\96å¾\97帳è\99\9f建ç«\8bå¯\86é\91°æ\96¼ç¬¬ä¸\80次è«\8bæ±\82。",
+       "apihelp-createaccount-param-token": "å\9c¨ç¬¬ä¸\80次è«\8bæ±\82æ\99\82å·²å\8f\96å¾\97ç\9a\84帳è\99\9f建ç«\8bé\87\91é\91°。",
        "apihelp-createaccount-param-email": "使用者的電子郵件地址 (選填) 。",
        "apihelp-createaccount-param-realname": "使用者的真實姓名 (選填)。",
        "apihelp-createaccount-param-mailpassword": "若設為其他值,將會以電子郵件寄送隨機密碼給使用者。",
        "apihelp-query+stashimageinfo-example-simple": "回傳儲藏檔案的檔案資訊。",
        "apihelp-query+templates-description": "回傳指定頁面中所有引用的頁面。",
        "apihelp-query+templates-param-limit": "要回傳的模板數量。",
-       "apihelp-query+tokens-param-type": "è¦\81è«\8bæ±\82ç\9a\84å¯\86é\91°é¡\9eå\9e\8bã\80\82",
+       "apihelp-query+tokens-param-type": "請求的密鑰類型。",
        "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
        "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
        "apihelp-query+transcludedin-param-limit": "回傳的數量。",
        "apihelp-format-example-generic": "格式化查詢結果為 $1 格式",
        "apihelp-dbg-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料。",
        "apihelp-dbgfm-description": "使用 PHP 的 <code>var_export()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
-       "apihelp-dump-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料。",
-       "apihelp-dumpfm-description": "使用 PHP 的 <code>var_dump()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-json-description": "使用 JSON 格式輸出資料。",
        "apihelp-jsonfm-description": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-none-description": "不輸出。",
        "apihelp-rawfm-description": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-txt-description": "使用 PHP 的 <code>print_r()</code> 格式輸出資料。",
        "apihelp-txtfm-description": "使用 PHP 的 <code>print_r()</code> 格式輸出資料 (使用 HTML 格式顯示)。",
-       "apihelp-wddx-description": "使用 WDDX 格式輸出資料。",
-       "apihelp-wddxfm-description": "使用 WDDX 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-xml-description": "使用 XML 格式輸出資料。",
        "apihelp-xmlfm-description": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-yaml-description": "使用 YAML 格式輸出資料。",
index 10b4fb0..1296c13 100644 (file)
@@ -157,7 +157,7 @@ class BacklinkCache {
         * @param string $table
         * @param int|bool $startId
         * @param int|bool $endId
-        * @param int|INF $max
+        * @param int $max
         * @return TitleArrayFromResult
         */
        public function getLinks( $table, $startId = false, $endId = false, $max = INF ) {
@@ -169,7 +169,7 @@ class BacklinkCache {
         * @param string $table
         * @param int|bool $startId
         * @param int|bool $endId
-        * @param int|INF $max
+        * @param int $max
         * @param string $select 'all' or 'ids'
         * @return ResultWrapper
         */
@@ -319,7 +319,7 @@ class BacklinkCache {
        /**
         * Get the approximate number of backlinks
         * @param string $table
-        * @param int|INF $max Only count up to this many backlinks
+        * @param int $max Only count up to this many backlinks
         * @return int
         */
        public function getNumLinks( $table, $max = INF ) {
index 6a597ca..fff9bab 100644 (file)
@@ -79,7 +79,7 @@ class LCStoreStaticArray implements LCStore {
                        // [A]rray
                        return array( 'a', array_map( function ( $v ) {
                                return LCStoreStaticArray::encode( $v );
-                       }, $data ) );
+                       }, $value ) );
                }
 
                throw new RuntimeException( 'Cannot encode ' . var_export( $value, true ) );
index 77e4d49..698b304 100644 (file)
@@ -78,7 +78,7 @@ class LinkBatch {
                        $this->data[$ns] = array();
                }
 
-               $this->data[$ns][str_replace( ' ', '_', $dbkey )] = 1;
+               $this->data[$ns][strtr( $dbkey, ' ', '_' )] = 1;
        }
 
        /**
index e8cc5e5..56c9256 100644 (file)
 class LinkCache {
        // Increment $mClassVer whenever old serialized versions of this class
        // becomes incompatible with the new version.
-       private $mClassVer = 4;
+       private $mClassVer = 5;
 
-       private $mGoodLinks = array();
-       private $mGoodLinkFields = array();
-       private $mBadLinks = array();
+       /**
+        * @var MapCacheLRU
+        */
+       private $mGoodLinks;
+       /**
+        * @var MapCacheLRU
+        */
+       private $mBadLinks;
        private $mForUpdate = false;
 
+       /**
+        * How many Titles to store. There are two caches, so the amount actually
+        * stored in memory can be up to twice this.
+        */
+       const MAX_SIZE = 10000;
+
        /**
         * @var LinkCache
         */
        protected static $instance;
 
+       public function __construct() {
+               $this->mGoodLinks = new MapCacheLRU( self::MAX_SIZE );
+               $this->mBadLinks = new MapCacheLRU( self::MAX_SIZE );
+       }
+
        /**
         * Get an instance of this class.
         *
@@ -90,8 +106,9 @@ class LinkCache {
         * @return int
         */
        public function getGoodLinkID( $title ) {
-               if ( array_key_exists( $title, $this->mGoodLinks ) ) {
-                       return $this->mGoodLinks[$title];
+               if ( $this->mGoodLinks->has( $title ) ) {
+                       $info = $this->mGoodLinks->get( $title );
+                       return $info['id'];
                } else {
                        return 0;
                }
@@ -106,8 +123,9 @@ class LinkCache {
         */
        public function getGoodLinkFieldObj( $title, $field ) {
                $dbkey = $title->getPrefixedDBkey();
-               if ( array_key_exists( $dbkey, $this->mGoodLinkFields ) ) {
-                       return $this->mGoodLinkFields[$dbkey][$field];
+               if ( $this->mGoodLinks->has( $dbkey ) ) {
+                       $info = $this->mGoodLinks->get( $dbkey );
+                       return $info[$field];
                } else {
                        return null;
                }
@@ -118,7 +136,8 @@ class LinkCache {
         * @return bool
         */
        public function isBadLink( $title ) {
-               return array_key_exists( $title, $this->mBadLinks );
+               // We need to use get here since has will not call ping.
+               return $this->mBadLinks->get( $title ) !== null;
        }
 
        /**
@@ -135,13 +154,13 @@ class LinkCache {
                $revision = 0, $model = null
        ) {
                $dbkey = $title->getPrefixedDBkey();
-               $this->mGoodLinks[$dbkey] = (int)$id;
-               $this->mGoodLinkFields[$dbkey] = array(
+               $this->mGoodLinks->set( $dbkey, array(
+                       'id' => (int)$id,
                        'length' => (int)$len,
                        'redirect' => (int)$redir,
                        'revision' => (int)$revision,
                        'model' => $model ? (string)$model : null,
-               );
+               ) );
        }
 
        /**
@@ -153,13 +172,13 @@ class LinkCache {
         */
        public function addGoodLinkObjFromRow( $title, $row ) {
                $dbkey = $title->getPrefixedDBkey();
-               $this->mGoodLinks[$dbkey] = intval( $row->page_id );
-               $this->mGoodLinkFields[$dbkey] = array(
+               $this->mGoodLinks->set( $dbkey, array(
+                       'id' => intval( $row->page_id ),
                        'length' => intval( $row->page_len ),
                        'redirect' => intval( $row->page_is_redirect ),
                        'revision' => intval( $row->page_latest ),
                        'model' => !empty( $row->page_content_model ) ? strval( $row->page_content_model ) : null,
-               );
+               ) );
        }
 
        /**
@@ -168,12 +187,12 @@ class LinkCache {
        public function addBadLinkObj( $title ) {
                $dbkey = $title->getPrefixedDBkey();
                if ( !$this->isBadLink( $dbkey ) ) {
-                       $this->mBadLinks[$dbkey] = 1;
+                       $this->mBadLinks->set( $dbkey, 1 );
                }
        }
 
        public function clearBadLink( $title ) {
-               unset( $this->mBadLinks[$title] );
+               $this->mBadLinks->clear( array( $title ) );
        }
 
        /**
@@ -181,17 +200,33 @@ class LinkCache {
         */
        public function clearLink( $title ) {
                $dbkey = $title->getPrefixedDBkey();
-               unset( $this->mBadLinks[$dbkey] );
-               unset( $this->mGoodLinks[$dbkey] );
-               unset( $this->mGoodLinkFields[$dbkey] );
+               $this->mBadLinks->clear( array( $dbkey ) );
+               $this->mGoodLinks->clear( array( $dbkey ) );
        }
 
+
+       /**
+        * @deprecated since 1.26
+        * @return array
+        */
        public function getGoodLinks() {
-               return $this->mGoodLinks;
+               wfDeprecated( __METHOD__, '1.26' );
+               $links = array();
+               foreach ( $this->mGoodLinks->getAllKeys() as $key ) {
+                       $info = $this->mGoodLinks->get( $key );
+                       $links[$key] = $info['id'];
+               }
+
+               return $links;
        }
 
+       /**
+        * @deprecated since 1.26
+        * @return array
+        */
        public function getBadLinks() {
-               return array_keys( $this->mBadLinks );
+               wfDeprecated( __METHOD__, '1.26' );
+               return $this->mBadLinks->getAllKeys();
        }
 
        /**
@@ -262,8 +297,7 @@ class LinkCache {
         * Clears cache
         */
        public function clear() {
-               $this->mGoodLinks = array();
-               $this->mGoodLinkFields = array();
-               $this->mBadLinks = array();
+               $this->mGoodLinks->clear();
+               $this->mBadLinks->clear();
        }
 }
index 585fcd3..f22c860 100644 (file)
  * MediaWiki message cache structure version.
  * Bump this whenever the message cache format has changed.
  */
-define( 'MSG_CACHE_VERSION', 1 );
-
-/**
- * Memcached timeout when loading a key.
- * See MessageCache::load()
- */
-define( 'MSG_LOAD_TIMEOUT', 60 );
-
-/**
- * Memcached timeout when locking a key for a writing operation.
- * See MessageCache::lock()
- */
-define( 'MSG_LOCK_TIMEOUT', 30 );
-/**
- * Number of times we will try to acquire a lock from Memcached.
- * This comes in addition to MSG_LOCK_TIMEOUT.
- */
-define( 'MSG_WAIT_TIMEOUT', 30 );
+define( 'MSG_CACHE_VERSION', 2 );
 
 /**
  * Message cache
@@ -52,12 +35,18 @@ define( 'MSG_WAIT_TIMEOUT', 30 );
 class MessageCache {
        const FOR_UPDATE = 1; // force message reload
 
+       /** How long to wait for memcached locks */
+       const WAIT_SEC = 15;
+       /** How long memcached locks last */
+       const LOCK_TTL = 30;
+
        /**
         * Process local cache of loaded messages that are defined in
         * MediaWiki namespace. First array level is a language code,
         * second level is message key and the values are either message
         * content prefixed with space, or !NONEXISTENT for negative
         * caching.
+        * @var array $mCache
         */
        protected $mCache;
 
@@ -130,12 +119,32 @@ class MessageCache {
                self::$instance = null;
        }
 
+       /**
+        * Normalize message key input
+        *
+        * @param string $key Input message key to be normalized
+        * @return string Normalized message key
+        */
+       public static function normalizeKey( $key ) {
+               global $wgContLang;
+               $lckey = strtr( $key, ' ', '_' );
+               if ( ord( $lckey ) < 128 ) {
+                       $lckey[0] = strtolower( $lckey[0] );
+               } else {
+                       $lckey = $wgContLang->lcfirst( $lckey );
+               }
+
+               return $lckey;
+       }
+
        /**
         * @param BagOStuff $memCached A cache instance. If none, fall back to CACHE_NONE.
         * @param bool $useDB
         * @param int $expiry Lifetime for cache. @see $mExpiry.
         */
        function __construct( $memCached, $useDB, $expiry ) {
+               global $wgUseLocalMessageCache;
+
                if ( !$memCached ) {
                        $memCached = wfGetCache( CACHE_NONE );
                }
@@ -144,6 +153,12 @@ class MessageCache {
                $this->mDisable = !$useDB;
                $this->mExpiry = $expiry;
 
+               if ( $wgUseLocalMessageCache ) {
+                       $this->localCache = ObjectCache::newAccelerator( CACHE_NONE );
+               } else {
+                       $this->localCache = wfGetCache( CACHE_NONE );
+               }
+
                $this->wanCache = ObjectCache::getMainWANInstance();
        }
 
@@ -162,70 +177,26 @@ class MessageCache {
        }
 
        /**
-        * Try to load the cache from a local file.
+        * Try to load the cache from APC.
         *
-        * @param string $hash The hash of contents, to check validity.
         * @param string $code Optional language code, see documenation of load().
-        * @return array The cache array
+        * @return array|bool The cache array, or false if not in cache.
         */
-       function getLocalCache( $hash, $code ) {
-               global $wgCacheDirectory;
-
-               $filename = "$wgCacheDirectory/messages-" . wfWikiID() . "-$code";
-
-               # Check file existence
-               MediaWiki\suppressWarnings();
-               $file = fopen( $filename, 'r' );
-               MediaWiki\restoreWarnings();
-               if ( !$file ) {
-                       return false; // No cache file
-               }
+       protected function getLocalCache( $code ) {
+               $cacheKey = wfMemcKey( __CLASS__, $code );
 
-               // Check to see if the file has the hash specified
-               $localHash = fread( $file, 32 );
-               if ( $hash === $localHash ) {
-                       // All good, get the rest of it
-                       $serialized = '';
-                       while ( !feof( $file ) ) {
-                               $serialized .= fread( $file, 100000 );
-                       }
-                       fclose( $file );
-
-                       return unserialize( $serialized );
-               } else {
-                       fclose( $file );
-
-                       return false; // Wrong hash
-               }
+               return $this->localCache->get( $cacheKey );
        }
 
        /**
-        * Save the cache to a local file.
-        * @param string $serialized
-        * @param string $hash
+        * Save the cache to APC.
+        *
         * @param string $code
+        * @param array $cache The cache array
         */
-       function saveToLocal( $serialized, $hash, $code ) {
-               global $wgCacheDirectory;
-
-               $filename = "$wgCacheDirectory/messages-" . wfWikiID() . "-$code";
-               wfMkdirParents( $wgCacheDirectory, null, __METHOD__ ); // might fail
-
-               MediaWiki\suppressWarnings();
-               $file = fopen( $filename, 'w' );
-               MediaWiki\restoreWarnings();
-
-               if ( !$file ) {
-                       wfDebug( "Unable to open local cache file for writing\n" );
-
-                       return;
-               }
-
-               fwrite( $file, $hash . $serialized );
-               fclose( $file );
-               MediaWiki\suppressWarnings();
-               chmod( $filename, 0666 );
-               MediaWiki\restoreWarnings();
+       protected function saveToLocalCache( $code, $cache ) {
+               $cacheKey = wfMemcKey( __CLASS__, $code );
+               $this->localCache->set( $cacheKey, $cache );
        }
 
        /**
@@ -250,8 +221,6 @@ class MessageCache {
         * @return bool
         */
        function load( $code = false, $mode = null ) {
-               global $wgUseLocalMessageCache;
-
                if ( !is_string( $code ) ) {
                        # This isn't really nice, so at least make a note about it and try to
                        # fall back
@@ -278,30 +247,29 @@ class MessageCache {
                # Loading code starts
                $success = false; # Keep track of success
                $staleCache = false; # a cache array with expired data, or false if none has been loaded
-               $hashExpired = false; # whether the cluster-local validation hash is stale
                $where = array(); # Debug info, delayed to avoid spamming debug log too much
 
-               # Local cache
-               # Hash of the contents is stored in memcache, to detect if local cache goes
-               # out of date (e.g. due to replace() on some other server)
-               if ( $wgUseLocalMessageCache ) {
-                       list( $hash, $hashExpired ) = $this->getValidationHash( $code );
-                       if ( $hash ) {
-                               $cache = $this->getLocalCache( $hash, $code );
-                               if ( !$cache ) {
-                                       $where[] = 'local cache is empty or has the wrong hash';
-                               } elseif ( $this->isCacheExpired( $cache ) ) {
-                                       $where[] = 'local cache is expired';
-                                       $staleCache = $cache;
-                               } elseif ( $hashExpired ) {
-                                       $where[] = 'local cache validation key is expired';
-                                       $staleCache = $cache;
-                               } else {
-                                       $where[] = 'got from local cache';
-                                       $success = true;
-                                       $this->mCache[$code] = $cache;
-                               }
-                       }
+               # Hash of the contents is stored in memcache, to detect if data-center cache
+               # or local cache goes out of date (e.g. due to replace() on some other server)
+               list( $hash, $hashVolatile ) = $this->getValidationHash( $code );
+
+               # Try the local cache and check against the cluster hash key...
+               $cache = $this->getLocalCache( $code );
+               if ( !$cache ) {
+                       $where[] = 'local cache is empty';
+               } elseif ( !isset( $cache['HASH'] ) || $cache['HASH'] !== $hash ) {
+                       $where[] = 'local cache has the wrong hash';
+                       $staleCache = $cache;
+               } elseif ( $this->isCacheExpired( $cache ) ) {
+                       $where[] = 'local cache is expired';
+                       $staleCache = $cache;
+               } elseif ( $hashVolatile ) {
+                       $where[] = 'local cache validation key is expired/volatile';
+                       $staleCache = $cache;
+               } else {
+                       $where[] = 'got from local cache';
+                       $success = true;
+                       $this->mCache[$code] = $cache;
                }
 
                if ( !$success ) {
@@ -309,8 +277,8 @@ class MessageCache {
                        # Try the global cache. If it is empty, try to acquire a lock. If
                        # the lock can't be acquired, wait for the other thread to finish
                        # and then try the global cache a second time.
-                       for ( $failedAttempts = 0; $failedAttempts < 2; $failedAttempts++ ) {
-                               if ( $hashExpired && $staleCache ) {
+                       for ( $failedAttempts = 0; $failedAttempts <= 1; $failedAttempts++ ) {
+                               if ( $hashVolatile && $staleCache ) {
                                        # Do not bother fetching the whole cache blob to avoid I/O.
                                        # Instead, just try to get the non-blocking $statusKey lock
                                        # below, and use the local stale value if it was not acquired.
@@ -322,6 +290,12 @@ class MessageCache {
                                        } elseif ( $this->isCacheExpired( $cache ) ) {
                                                $where[] = 'global cache is expired';
                                                $staleCache = $cache;
+                                       } elseif ( $hashVolatile ) {
+                                               # DB results are slave lag prone until the holdoff TTL passes.
+                                               # By then, updates should be reflected in loadFromDBWithLock().
+                                               # One thread renerates the cache while others use old values.
+                                               $where[] = 'global cache is expired/volatile';
+                                               $staleCache = $cache;
                                        } else {
                                                $where[] = 'got from global cache';
                                                $this->mCache[$code] = $cache;
@@ -337,8 +311,9 @@ class MessageCache {
 
                                # We need to call loadFromDB. Limit the concurrency to one process.
                                # This prevents the site from going down when the cache expires.
-                               if ( $this->loadFromDBWithLock( $code, $where ) ) {
-                                       # Load from DB complete, no need to retry
+                               # Note that the DB slam protection lock here is non-blocking.
+                               $loadStatus = $this->loadFromDBWithLock( $code, $where, $mode );
+                               if ( $loadStatus === true ) {
                                        $success = true;
                                        break;
                                } elseif ( $staleCache ) {
@@ -348,23 +323,19 @@ class MessageCache {
                                        $success = true;
                                        break;
                                } elseif ( $failedAttempts > 0 ) {
-                                       # Already retried once, still failed, so don't do another lock/unlock cycle
+                                       # Already blocked once, so avoid another lock/unlock cycle.
                                        # This case will typically be hit if memcached is down, or if
-                                       # loadFromDB() takes longer than MSG_WAIT_TIMEOUT
+                                       # loadFromDB() takes longer than LOCK_WAIT.
                                        $where[] = "could not acquire status key.";
                                        break;
+                               } elseif ( $loadStatus === 'cantacquire' ) {
+                                       # Wait for the other thread to finish, then retry. Normally,
+                                       # the memcached get() will then yeild the other thread's result.
+                                       $where[] = 'waited for other thread to complete';
+                                       $this->getReentrantScopedLock( $cacheKey );
                                } else {
-                                       $statusKey = wfMemcKey( 'messages', $code, 'status' );
-                                       $status = $this->mMemc->get( $statusKey );
-                                       if ( $status === 'error' ) {
-                                               # Disable cache
-                                               break;
-                                       } else {
-                                               # Wait for the other thread to finish, then retry
-                                               $where[] = 'waited for other thread to complete';
-                                               $this->lock( $cacheKey );
-                                               $this->unlock( $cacheKey );
-                                       }
+                                       # Disable cache; $loadStatus is 'disabled'
+                                       break;
                                }
                        }
                }
@@ -389,49 +360,39 @@ class MessageCache {
        /**
         * @param string $code
         * @param array $where List of wfDebug() comments
-        * @return bool Lock acquired and loadFromDB() called
+        * @param integer $mode Use MessageCache::FOR_UPDATE to use DB_MASTER
+        * @return bool|string True on success or one of ("cantacquire", "disabled")
         */
-       protected function loadFromDBWithLock( $code, array &$where ) {
+       protected function loadFromDBWithLock( $code, array &$where, $mode = null ) {
                global $wgUseLocalMessageCache;
 
-               $memCache = $this->mMemc;
-
+               # If cache updates on all levels fail, give up on message overrides.
+               # This is to avoid easy site outages; see $saveSuccess comments below.
                $statusKey = wfMemcKey( 'messages', $code, 'status' );
-               if ( !$memCache->add( $statusKey, 'loading', MSG_LOAD_TIMEOUT ) ) {
-                       return false; // could not acquire lock
+               $status = $this->mMemc->get( $statusKey );
+               if ( $status === 'error' ) {
+                       $where[] = "could not load; method is still globally disabled";
+                       return 'disabled';
                }
 
-               # Unlock the status key if there is an exception
-               $statusUnlocker = new ScopedCallback( function () use ( $memCache, $statusKey ) {
-                       $memCache->delete( $statusKey );
-               } );
-
                # Now let's regenerate
                $where[] = 'loading from database';
 
+               # Lock the cache to prevent conflicting writes.
+               # This lock is non-blocking so stale cache can quickly be used.
+               # Note that load() will call a blocking getReentrantScopedLock()
+               # after this if it really need to wait for any current thread.
                $cacheKey = wfMemcKey( 'messages', $code );
-               # Lock the cache to prevent conflicting writes
-               # If this lock fails, it doesn't really matter, it just means the
-               # write is potentially non-atomic, e.g. the results of a replace()
-               # may be discarded.
-               if ( $this->lock( $cacheKey ) ) {
-                       $that = $this;
-                       $mainUnlocker = new ScopedCallback( function () use ( $that, $cacheKey ) {
-                               $that->unlock( $cacheKey );
-                       } );
-               } else {
-                       $mainUnlocker = null;
+               $scopedLock = $this->getReentrantScopedLock( $cacheKey, 0 );
+               if ( !$scopedLock ) {
                        $where[] = 'could not acquire main lock';
+                       return 'cantacquire';
                }
 
-               $cache = $this->loadFromDB( $code );
+               $cache = $this->loadFromDB( $code, $mode );
                $this->mCache[$code] = $cache;
                $saveSuccess = $this->saveToCaches( $cache, 'all', $code );
 
-               # Unlock
-               ScopedCallback::consume( $mainUnlocker );
-               ScopedCallback::consume( $statusUnlocker );
-
                if ( !$saveSuccess ) {
                        # Cache save has failed.
                        # There are two main scenarios where this could be a problem:
@@ -449,7 +410,7 @@ class MessageCache {
                        # overhead on every request, and thus saves the wiki from
                        # complete downtime under moderate traffic conditions.
                        if ( !$wgUseLocalMessageCache ) {
-                               $memCache->set( $statusKey, 'error', 60 * 5 );
+                               $this->mMemc->set( $statusKey, 'error', 60 * 5 );
                                $where[] = 'could not save cache, disabled globally for 5 minutes';
                        } else {
                                $where[] = "could not save global cache";
@@ -464,13 +425,15 @@ class MessageCache {
         * $wgMaxMsgCacheEntrySize are assigned a special value, and are loaded
         * on-demand from the database later.
         *
-        * @param string $code Language code.
-        * @return array Loaded messages for storing in caches.
+        * @param string $code Language code
+        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
+        * @return array Loaded messages for storing in caches
         */
-       function loadFromDB( $code ) {
+       function loadFromDB( $code, $mode = null ) {
                global $wgMaxMsgCacheEntrySize, $wgLanguageCode, $wgAdaptiveMessageCache;
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = wfGetDB( ( $mode == self::FOR_UPDATE ) ? DB_MASTER : DB_SLAVE );
+
                $cache = array();
 
                # Common conditions
@@ -541,6 +504,8 @@ class MessageCache {
                }
 
                $cache['VERSION'] = MSG_CACHE_VERSION;
+               ksort( $cache );
+               $cache['HASH'] = md5( serialize( $cache ) );
                $cache['EXPIRY'] = wfTimestamp( TS_MW, time() + $this->mExpiry );
 
                return $cache;
@@ -549,7 +514,7 @@ class MessageCache {
        /**
         * Updates cache as necessary when message page is changed
         *
-        * @param string $title Name of the page changed.
+        * @param string|bool $title Name of the page changed (false if deleted)
         * @param mixed $text New contents of the page.
         */
        public function replace( $title, $text ) {
@@ -561,32 +526,44 @@ class MessageCache {
 
                list( $msg, $code ) = $this->figureMessage( $title );
                if ( strpos( $title, '/' ) !== false && $code === $wgLanguageCode ) {
-                       # Content language overrides do not use the /<code> suffix
+                       // Content language overrides do not use the /<code> suffix
                        return;
                }
 
+               // Note that if the cache is volatile, load() may trigger a DB fetch.
+               // In that case we reenter/reuse the existing cache key lock to avoid
+               // a self-deadlock. This is safe as no reads happen *directly* in this
+               // method between getReentrantScopedLock() and load() below. There is
+               // no risk of data "changing under our feet" for replace().
                $cacheKey = wfMemcKey( 'messages', $code );
-               $this->lock( $cacheKey );
+               $scopedLock = $this->getReentrantScopedLock( $cacheKey );
                $this->load( $code, self::FOR_UPDATE );
 
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
-
                if ( $text === false ) {
-                       # Article was deleted
+                       // Article was deleted
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->mMemc->delete( $titleKey );
+                       $this->wanCache->delete( $titleKey );
                } elseif ( strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
-                       # Check for size
+                       // Check for size
                        $this->mCache[$code][$title] = '!TOO BIG';
-                       $this->mMemc->set( $titleKey, ' ' . $text, $this->mExpiry );
+                       $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
                } else {
                        $this->mCache[$code][$title] = ' ' . $text;
-                       $this->mMemc->delete( $titleKey );
+                       $this->wanCache->delete( $titleKey );
+               }
+
+               // Mark this cache as definitely "latest" (non-volatile) so
+               // load() calls do try to refresh the cache with slave data
+               $this->mCache[$code]['LATEST'] = time();
+
+               // Update caches if the lock was acquired
+               if ( $scopedLock ) {
+                       $this->saveToCaches( $this->mCache[$code], 'all', $code );
                }
 
-               # Update caches
-               $this->saveToCaches( $this->mCache[$code], 'all', $code );
-               $this->unlock( $cacheKey );
+               ScopedCallback::consume( $scopedLock );
+               // Relay the purge to APC and other DCs
                $this->wanCache->touchCheckKey( wfMemcKey( 'messages', $code ) );
 
                // Also delete cached sidebar... just in case it is affected
@@ -638,9 +615,7 @@ class MessageCache {
         * @param string|bool $code Language code (default: false)
         * @return bool
         */
-       protected function saveToCaches( $cache, $dest, $code = false ) {
-               global $wgUseLocalMessageCache;
-
+       protected function saveToCaches( array $cache, $dest, $code = false ) {
                if ( $dest === 'all' ) {
                        $cacheKey = wfMemcKey( 'messages', $code );
                        $success = $this->mMemc->set( $cacheKey, $cache );
@@ -648,84 +623,71 @@ class MessageCache {
                        $success = true;
                }
 
-               # Save to local cache
-               if ( $wgUseLocalMessageCache ) {
-                       $serialized = serialize( $cache );
-                       $hash = md5( $serialized );
-                       $this->setValidationHash( $code, $hash );
-                       $this->saveToLocal( $serialized, $hash, $code );
-               }
+               $this->setValidationHash( $code, $cache );
+               $this->saveToLocalCache( $code, $cache );
 
                return $success;
        }
 
        /**
-        * Get the md5 used to validate the local disk cache
+        * Get the md5 used to validate the local APC cache
         *
         * @param string $code
-        * @return array (hash or false, bool expiry status)
+        * @return array (hash or false, bool expiry/volatility status)
         */
        protected function getValidationHash( $code ) {
                $curTTL = null;
                $value = $this->wanCache->get(
-                       wfMemcKey( 'messages', $code, 'hash' ),
+                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
                        $curTTL,
                        array( wfMemcKey( 'messages', $code ) )
                );
-               $expired = ( $curTTL === null || $curTTL < 0 );
 
-               return array( $value, $expired );
+               if ( !$value ) {
+                       // No hash found at all; cache must regenerate to be safe
+                       $hash = false;
+                       $expired = true;
+               } else {
+                       $hash = $value['hash'];
+                       if ( ( time() - $value['latest'] ) < WANObjectCache::HOLDOFF_TTL ) {
+                               // Cache was recently updated via replace() and should be up-to-date
+                               $expired = false;
+                       } else {
+                               // See if the "check" key was bumped after the hash was generated
+                               $expired = ( $curTTL < 0 );
+                       }
+               }
+
+               return array( $hash, $expired );
        }
 
        /**
         * Set the md5 used to validate the local disk cache
         *
+        * If $cache has a 'LATEST' UNIX timestamp key, then the hash will not
+        * be treated as "volatile" by getValidationHash() for the next few seconds
+        *
         * @param string $code
-        * @param string $hash
+        * @param array $cache Cached messages with a version
         */
-       protected function setValidationHash( $code, $hash ) {
+       protected function setValidationHash( $code, array $cache ) {
                $this->wanCache->set(
-                       wfMemcKey( 'messages', $code, 'hash' ),
-                       $hash,
+                       wfMemcKey( 'messages', $code, 'hash', 'v1' ),
+                       array(
+                               'hash' => $cache['HASH'],
+                               'latest' => isset( $cache['LATEST'] ) ? $cache['LATEST'] : 0
+                       ),
                        WANObjectCache::TTL_NONE
                );
        }
 
        /**
-        * Represents a write lock on the messages key.
-        *
-        * Will retry MessageCache::MSG_WAIT_TIMEOUT times, each operations having
-        * a timeout of MessageCache::MSG_LOCK_TIMEOUT.
-        *
-        * @param string $key
-        * @return bool Success
+        * @param string $key A language message cache key that stores blobs
+        * @param integer $timeout Wait timeout in seconds
+        * @return null|ScopedCallback
         */
-       function lock( $key ) {
-               $lockKey = $key . ':lock';
-               $acquired = false;
-               $testDone = false;
-               for ( $i = 0; $i < MSG_WAIT_TIMEOUT && !$acquired; $i++ ) {
-                       $acquired = $this->mMemc->add( $lockKey, 1, MSG_LOCK_TIMEOUT );
-                       if ( $acquired ) {
-                               break;
-                       }
-
-                       # Fail fast if memcached is totally down
-                       if ( !$testDone ) {
-                               $testDone = true;
-                               if ( !$this->mMemc->set( wfMemcKey( 'test' ), 'test', 1 ) ) {
-                                       break;
-                               }
-                       }
-                       sleep( 1 );
-               }
-
-               return $acquired;
-       }
-
-       function unlock( $key ) {
-               $lockKey = $key . ':lock';
-               $this->mMemc->delete( $lockKey );
+       protected function getReentrantScopedLock( $key, $timeout = self::WAIT_SEC ) {
+               return $this->mMemc->getScopedLock( $key, $timeout, self::LOCK_TTL, __METHOD__ );
        }
 
        /**
@@ -784,12 +746,7 @@ class MessageCache {
                }
 
                // Normalise title-case input (with some inlining)
-               $lckey = strtr( $key, ' ', '_' );
-               if ( ord( $lckey ) < 128 ) {
-                       $lckey[0] = strtolower( $lckey[0] );
-               } else {
-                       $lckey = $wgContLang->lcfirst( $lckey );
-               }
+               $lckey = MessageCache::normalizeKey( $key );
 
                Hooks::run( 'MessageCache::get', array( &$lckey ) );
 
@@ -974,7 +931,7 @@ class MessageCache {
 
                # Try the individual message cache
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
-               $entry = $this->mMemc->get( $titleKey );
+               $entry = $this->wanCache->get( $titleKey );
                if ( $entry ) {
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
                                $this->mCache[$code][$title] = $entry;
@@ -988,14 +945,12 @@ class MessageCache {
                                return false;
                        } else {
                                # Corrupt/obsolete entry, delete it
-                               $this->mMemc->delete( $titleKey );
+                               $this->wanCache->delete( $titleKey );
                        }
                }
 
                # Try loading it from the database
-               $revision = Revision::newFromTitle(
-                       Title::makeTitle( NS_MEDIAWIKI, $title ), false, Revision::READ_LATEST
-               );
+               $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
                if ( $revision ) {
                        $content = $revision->getContent();
                        if ( !$content ) {
@@ -1016,13 +971,13 @@ class MessageCache {
                                        wfDebugLog(
                                                'MessageCache',
                                                __METHOD__ . ": message content doesn't provide wikitext "
-                                                       . "(content model: " . $content->getContentHandler() . ")"
+                                                       . "(content model: " . $content->getModel() . ")"
                                        );
 
                                        $message = false; // negative caching
                                } else {
                                        $this->mCache[$code][$title] = ' ' . $message;
-                                       $this->mMemc->set( $titleKey, ' ' . $message, $this->mExpiry );
+                                       $this->wanCache->set( $titleKey, ' ' . $message, $this->mExpiry );
                                }
                        }
                } else {
@@ -1031,7 +986,7 @@ class MessageCache {
 
                if ( $message === false ) { // negative caching
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->mMemc->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
+                       $this->wanCache->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
                }
 
                return $message;
index 2a3aac2..51bf385 100644 (file)
@@ -123,11 +123,11 @@ class UserCache {
                $lb = new LinkBatch();
                foreach ( $usersToCheck as $userId => $name ) {
                        if ( $this->queryNeeded( $userId, 'userpage', $options ) ) {
-                               $lb->add( NS_USER, $row->user_name );
+                               $lb->add( NS_USER, $name );
                                $this->typesCached[$userId]['userpage'] = 1;
                        }
                        if ( $this->queryNeeded( $userId, 'usertalk', $options ) ) {
-                               $lb->add( NS_USER_TALK, $row->user_name );
+                               $lb->add( NS_USER_TALK, $name );
                                $this->typesCached[$userId]['usertalk'] = 1;
                        }
                }
index 9635c17..e5916bd 100644 (file)
@@ -544,12 +544,12 @@ class EnhancedChangesList extends ChangesList {
                        ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
 
                # Flag and Timestamp
-               $data['recentChangesFlags'] = $this->recentChangesFlags( array(
+               $data['recentChangesFlags'] = array(
                        'newpage' => $type == RC_NEW,
                        'minor' => $rcObj->mAttribs['rc_minor'],
                        'unpatrolled' => $rcObj->unpatrolled,
                        'bot' => $rcObj->mAttribs['rc_bot'],
-               ) );
+               );
                // timestamp is not really a link here, but is called timestampLink
                // for consistency with EnhancedChangesListModifyLineData
                $data['timestampLink'] = $rcObj->timestamp;
index 77bf5df..54ca2ab 100644 (file)
@@ -382,6 +382,13 @@ class RecentChange {
                        /** @var $formatter RCFeedFormatter */
                        $formatter = is_object( $feed['formatter'] ) ? $feed['formatter'] : new $feed['formatter']();
                        $line = $formatter->getLine( $feed, $this, $actionComment );
+                       if ( !$line ) {
+                               // T109544
+                               // If a feed formatter returns null, this will otherwise cause an
+                               // error in at least RedisPubSubFeedEngine.
+                               // Not sure where/how this should best be handled.
+                               continue;
+                       }
 
                        $engine->send( $feed, $line );
                }
index 95f4816..12f738f 100644 (file)
@@ -153,8 +153,10 @@ class ChangeTags {
         *
         * @since 1.25
         */
-       public static function updateTags( $tagsToAdd, $tagsToRemove, &$rc_id = null,
-               &$rev_id = null, &$log_id = null, $params = null ) {
+       public static function updateTags(
+               $tagsToAdd, $tagsToRemove,
+               &$rc_id = null, &$rev_id = null, &$log_id = null, $params = null
+       ) {
 
                $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
                $tagsToRemove = array_filter( (array)$tagsToRemove );
@@ -169,18 +171,28 @@ class ChangeTags {
                // Might as well look for rcids and so on.
                if ( !$rc_id ) {
                        // Info might be out of date, somewhat fractionally, on slave.
+                       // LogEntry/LogPage and WikiPage match rev/log/rc timestamps,
+                       // so use that relation to avoid full table scans.
                        if ( $log_id ) {
                                $rc_id = $dbw->selectField(
-                                       'recentchanges',
+                                       array( 'logging', 'recentchanges' ),
                                        'rc_id',
-                                       array( 'rc_logid' => $log_id ),
+                                       array(
+                                               'log_id' => $log_id,
+                                               'rc_timestamp = log_timestamp',
+                                               'rc_logid = log_id'
+                                       ),
                                        __METHOD__
                                );
                        } elseif ( $rev_id ) {
                                $rc_id = $dbw->selectField(
-                                       'recentchanges',
+                                       array( 'revision', 'recentchanges' ),
                                        'rc_id',
-                                       array( 'rc_this_oldid' => $rev_id ),
+                                       array(
+                                               'rev_id' => $rev_id,
+                                               'rc_timestamp = rev_timestamp',
+                                               'rc_this_oldid = rev_id'
+                                       ),
                                        __METHOD__
                                );
                        }
@@ -611,17 +623,16 @@ class ChangeTags {
         * Build a text box to select a change tag
         *
         * @param string $selected Tag to select by default
-        * @param bool $fullForm
-        *        - if false, then it returns an array of (label, form).
-        *        - if true, it returns an entire form around the selector.
-        * @param Title $title Title object to send the form to.
-        *        Used when, and only when $fullForm is true.
+        * @param bool $fullForm Affects return value, see below
+        * @param Title $title Title object to send the form to. Used only if $fullForm is true.
+        * @param bool $ooui Use an OOUI TextInputWidget as selector instead of a non-OOUI input field
+        *        You need to call OutputPage::enableOOUI() yourself.
         * @return string|array
-        *        - if $fullForm is false: Array with
-        *        - if $fullForm is true: String, html fragment
+        *        - if $fullForm is false: an array of (label, selector).
+        *        - if $fullForm is true: HTML of entire form built around the selector.
         */
        public static function buildTagFilterSelector( $selected = '',
-               $fullForm = false, Title $title = null
+               $fullForm = false, Title $title = null, $ooui = false
        ) {
                global $wgUseTagFilter;
 
@@ -634,14 +645,24 @@ class ChangeTags {
                                'label',
                                array( 'for' => 'tagfilter' ),
                                wfMessage( 'tag-filter' )->parse()
-                       ),
-                       Xml::input(
+                       )
+               );
+
+               if ( $ooui ) {
+                       $data[] = new OOUI\TextInputWidget( array(
+                               'id' => 'tagfilter',
+                               'name' => 'tagfilter',
+                               'value' => $selected,
+                               'classes' => 'mw-tagfilter-input',
+                       ) );
+               } else {
+                       $data[] = Xml::input(
                                'tagfilter',
                                20,
                                $selected,
                                array( 'class' => 'mw-tagfilter-input mw-ui-input mw-ui-input-inline', 'id' => 'tagfilter' )
-                       )
-               );
+                       );
+               }
 
                if ( !$fullForm ) {
                        return $data;
index fe80695..4526ee3 100644 (file)
@@ -42,7 +42,8 @@ class ChangeTagsLogList extends ChangeTagsList {
                        $queryInfo['fields'],
                        $queryInfo['conds'],
                        $queryInfo['join_conds'],
-                       $queryInfo['options']
+                       $queryInfo['options'],
+                       ''
                );
                return $db->select(
                        $queryInfo['tables'],
index 842d327..ec401bc 100644 (file)
@@ -52,7 +52,8 @@ class ChangeTagsRevisionList extends ChangeTagsList {
                        $queryInfo['fields'],
                        $queryInfo['conds'],
                        $queryInfo['join_conds'],
-                       $queryInfo['options']
+                       $queryInfo['options'],
+                       ''
                );
                return $db->select(
                        $queryInfo['tables'],
index dc95727..ec0573e 100644 (file)
  * @author Aaron Schulz
  */
 
+use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+
 /**
  * Helper class to manage Redis connections.
  *
@@ -35,7 +39,7 @@
  * @ingroup Redis
  * @since 1.21
  */
-class RedisConnectionPool {
+class RedisConnectionPool implements LoggerAwareInterface {
        /**
         * @name Pool settings.
         * Settings there are shared for any connection made in this pool.
@@ -68,6 +72,11 @@ class RedisConnectionPool {
        /** integer; seconds to cache servers as "down". */
        const SERVER_DOWN_TTL = 30;
 
+       /**
+        * @var LoggerInterface
+        */
+       protected $logger;
+
        /**
         * @param array $options
         * @throws MWException
@@ -77,6 +86,11 @@ class RedisConnectionPool {
                        throw new MWException( __CLASS__ . ' requires a Redis client library. ' .
                                'See https://www.mediawiki.org/wiki/Redis#Setup' );
                }
+               if ( isset( $options['logger'] ) ) {
+                       $this->setLogger( $options['logger'] );
+               } else {
+                       $this->setLogger( LoggerFactory::getInstance( 'redis' ) );
+               }
                $this->connectTimeout = $options['connectTimeout'];
                $this->readTimeout = $options['readTimeout'];
                $this->persistent = $options['persistent'];
@@ -92,6 +106,14 @@ class RedisConnectionPool {
                }
        }
 
+       /**
+        * @param LoggerInterface $logger
+        * @return null
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
        /**
         * @param array $options
         * @return array
@@ -136,7 +158,9 @@ class RedisConnectionPool {
                // Initialize the object at the hash as needed...
                if ( !isset( self::$instances[$id] ) ) {
                        self::$instances[$id] = new self( $options );
-                       wfDebug( "Creating a new " . __CLASS__ . " instance with id $id.\n" );
+                       LoggerFactory::getInstance( 'redis' )->debug(
+                               "Creating a new " . __CLASS__ . " instance with id $id."
+                       );
                }
 
                return self::$instances[$id];
@@ -161,8 +185,11 @@ class RedisConnectionPool {
                                unset( $this->downServers[$server] );
                        } else {
                                // Server is dead
-                               wfDebug( "server $server is marked down for another " .
-                                       ( $this->downServers[$server] - $now ) . " seconds, can't get connection\n" );
+                               $this->logger->debug(
+                                       'Server "{redis_server}" is marked down for another ' .
+                                       ( $this->downServers[$server] - $now ) . 'seconds',
+                                       array( 'redis_server' => $server )
+                               );
 
                                return false;
                        }
@@ -175,7 +202,9 @@ class RedisConnectionPool {
                                        $connection['free'] = false;
                                        --$this->idlePoolSize;
 
-                                       return new RedisConnRef( $this, $server, $connection['conn'] );
+                                       return new RedisConnRef(
+                                               $this, $server, $connection['conn'], $this->logger
+                                       );
                                }
                        }
                }
@@ -189,7 +218,7 @@ class RedisConnectionPool {
                } else {
                        // TCP connection
                        $hostPort = IP::splitHostAndPort( $server );
-                       if ( !$hostPort ) {
+                       if ( !$server || !$hostPort ) {
                                throw new MWException( __CLASS__ . ": invalid configured server \"$server\"" );
                        }
                        list( $host, $port ) = $hostPort;
@@ -206,7 +235,10 @@ class RedisConnectionPool {
                                $result = $conn->connect( $host, $port, $this->connectTimeout );
                        }
                        if ( !$result ) {
-                               wfDebugLog( 'redis', "Could not connect to server $server" );
+                               $this->logger->error(
+                                       'Could not connect to server "{redis_server}"',
+                                       array( 'redis_server' => $server )
+                               );
                                // Mark server down for some time to avoid further timeouts
                                $this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
 
@@ -214,12 +246,21 @@ class RedisConnectionPool {
                        }
                        if ( $this->password !== null ) {
                                if ( !$conn->auth( $this->password ) ) {
-                                       wfDebugLog( 'redis', "Authentication error connecting to $server" );
+                                       $this->logger->error(
+                                               'Authentication error connecting to "{redis_server}"',
+                                               array( 'redis_server' => $server )
+                                       );
                                }
                        }
                } catch ( RedisException $e ) {
                        $this->downServers[$server] = time() + self::SERVER_DOWN_TTL;
-                       wfDebugLog( 'redis', "Redis exception connecting to $server: " . $e->getMessage() );
+                       $this->logger->error(
+                               'Redis exception connecting to "{redis_server}"',
+                               array(
+                                       'redis_server' => $server,
+                                       'exception' => $e,
+                               )
+                       );
 
                        return false;
                }
@@ -229,7 +270,7 @@ class RedisConnectionPool {
                        $conn->setOption( Redis::OPT_SERIALIZER, $this->serializer );
                        $this->connections[$server][] = array( 'conn' => $conn, 'free' => false );
 
-                       return new RedisConnRef( $this, $server, $conn );
+                       return new RedisConnRef( $this, $server, $conn, $this->logger );
                } else {
                        return false;
                }
@@ -290,7 +331,7 @@ class RedisConnectionPool {
         * @deprecated since 1.23
         */
        public function handleException( $server, RedisConnRef $cref, RedisException $e ) {
-               return $this->handleError( $cref, $e );
+               $this->handleError( $cref, $e );
        }
 
        /**
@@ -304,7 +345,13 @@ class RedisConnectionPool {
         */
        public function handleError( RedisConnRef $cref, RedisException $e ) {
                $server = $cref->getServer();
-               wfDebugLog( 'redis', "Redis exception on server $server: " . $e->getMessage() . "\n" );
+               $this->logger->error(
+                       'Redis exception on server "{redis_server}"',
+                       array(
+                               'redis_server' => $server,
+                               'exception' => $e,
+                       )
+               );
                foreach ( $this->connections[$server] as $key => $connection ) {
                        if ( $cref->isConnIdentical( $connection['conn'] ) ) {
                                $this->idlePoolSize -= $connection['free'] ? 1 : 0;
@@ -333,7 +380,10 @@ class RedisConnectionPool {
        public function reauthenticateConnection( $server, Redis $conn ) {
                if ( $this->password !== null ) {
                        if ( !$conn->auth( $this->password ) ) {
-                               wfDebugLog( 'redis', "Authentication error connecting to $server" );
+                               $this->logger->error(
+                                       'Authentication error connecting to "{redis_server}"',
+                                       array( 'redis_server' => $server )
+                               );
 
                                return false;
                        }
@@ -381,15 +431,22 @@ class RedisConnRef {
        protected $server; // string
        protected $lastError; // string
 
+       /**
+        * @var LoggerInterface
+        */
+       protected $logger;
+
        /**
         * @param RedisConnectionPool $pool
         * @param string $server
         * @param Redis $conn
+        * @param LoggerInterface $logger
         */
-       public function __construct( RedisConnectionPool $pool, $server, Redis $conn ) {
+       public function __construct( RedisConnectionPool $pool, $server, Redis $conn, LoggerInterface $logger ) {
                $this->pool = $pool;
                $this->server = $server;
                $this->conn = $conn;
+               $this->logger = $logger;
        }
 
        /**
@@ -428,7 +485,10 @@ class RedisConnRef {
                                $this->pool->reauthenticateConnection( $this->server, $conn );
                                $conn->clearLastError();
                                $res = call_user_func_array( array( $conn, $name ), $arguments );
-                               wfDebugLog( 'redis', "Used automatic re-authentication for method '$name'." );
+                               $this->logger->info(
+                                       "Used automatic re-authentication for method '$name'.",
+                                       array( 'redis_server' => $this->server )
+                               );
                        }
                } catch ( RedisException $e ) {
                        $this->pool->resetTimeout( $conn ); // restore
@@ -465,17 +525,29 @@ class RedisConnRef {
                        $this->pool->reauthenticateConnection( $server, $conn );
                        $conn->clearLastError();
                        $res = $conn->eval( $script, $params, $numKeys );
-                       wfDebugLog( 'redis', "Used automatic re-authentication for Lua script $sha1." );
+                       $this->logger->info(
+                               "Used automatic re-authentication for Lua script '$sha1'.",
+                               array( 'redis_server' => $server )
+                       );
                }
                // If the script is not in cache, use eval() to retry and cache it
                if ( preg_match( '/^NOSCRIPT/', $conn->getLastError() ) ) {
                        $conn->clearLastError();
                        $res = $conn->eval( $script, $params, $numKeys );
-                       wfDebugLog( 'redis', "Used eval() for Lua script $sha1." );
+                       $this->logger->info(
+                               "Used eval() for Lua script '$sha1'.",
+                               array( 'redis_server' => $server )
+                       );
                }
 
                if ( $conn->getLastError() ) { // script bug?
-                       wfDebugLog( 'redis', "Lua script error on server $server: " . $conn->getLastError() );
+                       $this->logger->error(
+                               'Lua script error on server "{redis_server}": {lua_error}',
+                               array(
+                                       'redis_server' => $server,
+                                       'lua_error' => $conn->getLastError()
+                               )
+                       );
                }
 
                $this->lastError = $conn->getLastError() ?: $this->lastError;
diff --git a/includes/compat/IPSetCompat.php b/includes/compat/IPSetCompat.php
new file mode 100644 (file)
index 0000000..79c6000
--- /dev/null
@@ -0,0 +1,28 @@
+<?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
+ */
+
+/**
+ * Backward-compatibility alias for IPSet, which was moved out
+ * into an external library and namespaced.
+ *
+ * @deprecated since 1.26 use IPSet\IPSet directly
+ */
+class IPSet extends IPSet\IPSet {
+}
diff --git a/includes/compat/normal/.gitignore b/includes/compat/normal/.gitignore
deleted file mode 100644 (file)
index 5af0afa..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/CompositionExclusions.txt
-/DerivedNormalizationProps.txt
-/NormalizationCorrections.txt
-/NormalizationTest.txt
-/UnicodeData.txt
-/testdata
index 8290603..b4f5196 100644 (file)
  */
 class CssContent extends TextContent {
 
+       /**
+        * @var bool|Title|null
+        */
+       private $redirectTarget = false;
+
        /**
         * @param string $text CSS code.
         * @param string $modelId the content content model
@@ -74,4 +79,43 @@ class CssContent extends TextContent {
                return $html;
        }
 
+       /**
+        * @param Title $target
+        * @return CssContent
+        */
+       public function updateRedirect( Title $target ) {
+               if ( !$this->isRedirect() ) {
+                       return $this;
+               }
+
+               return $this->getContentHandler()->makeRedirectContent( $target );
+       }
+
+       /**
+        * @return Title|null
+        */
+       public function getRedirectTarget() {
+               if ( $this->redirectTarget !== false ) {
+                       return $this->redirectTarget;
+               }
+               $this->redirectTarget = null;
+               $text = $this->getNativeData();
+               if ( strpos( $text, '/* #REDIRECT */' ) === 0 ) {
+                       // Extract the title from the url
+                       preg_match( '/title=(.*?)&action=raw/', $text, $matches );
+                       if ( isset( $matches[1] ) ) {
+                               $title = Title::newFromText( $matches[1] );
+                               if ( $title ) {
+                                       // Have a title, check that the current content equals what
+                                       // the redirect content should be
+                                       if ( $this->equals( $this->getContentHandler()->makeRedirectContent( $title ) ) ) {
+                                               $this->redirectTarget = $title;
+                                       }
+                               }
+                       }
+               }
+
+               return $this->redirectTarget;
+       }
+
 }
index b2a8676..ae5f742 100644 (file)
@@ -39,4 +39,23 @@ class CssContentHandler extends CodeContentHandler {
        protected function getContentClass() {
                return 'CssContent';
        }
+
+       public function supportsRedirects() {
+               return true;
+       }
+
+       /**
+        * Create a redirect that is also valid CSS
+        *
+        * @param Title $destination
+        * @param string $text ignored
+        * @return CssContent
+        */
+       public function makeRedirectContent( Title $destination, $text = '' ) {
+               // The parameters are passed as a string so the / is not url-encoded by wfArrayToCgi
+               $url = $destination->getFullURL( 'action=raw&ctype=text/css', false, PROTO_RELATIVE );
+               $class = $this->getContentClass();
+               return new $class( '/* #REDIRECT */@import ' . CSSMin::buildUrlValue( $url ) . ';' );
+       }
+
 }
index c0194c2..6d23656 100644 (file)
  */
 class JavaScriptContent extends TextContent {
 
+       /**
+        * @var bool|Title|null
+        */
+       private $redirectTarget = false;
+
        /**
         * @param string $text JavaScript code.
         * @param string $modelId the content model name
@@ -73,4 +78,46 @@ class JavaScriptContent extends TextContent {
                return $html;
        }
 
+       /**
+        * If this page is a redirect, return the content
+        * if it should redirect to $target instead
+        *
+        * @param Title $target
+        * @return JavaScriptContent
+        */
+       public function updateRedirect( Title $target ) {
+               if ( !$this->isRedirect() ) {
+                       return $this;
+               }
+
+               return $this->getContentHandler()->makeRedirectContent( $target );
+       }
+
+       /**
+        * @return Title|null
+        */
+       public function getRedirectTarget() {
+               if ( $this->redirectTarget !== false ) {
+                       return $this->redirectTarget;
+               }
+               $this->redirectTarget = null;
+               $text = $this->getNativeData();
+               if ( strpos( $text, '/* #REDIRECT */' ) === 0 ) {
+                       // Extract the title from the url
+                       preg_match( '/title=(.*?)\\\\u0026action=raw/', $text, $matches );
+                       if ( isset( $matches[1] ) ) {
+                               $title = Title::newFromText( $matches[1] );
+                               if ( $title ) {
+                                       // Have a title, check that the current content equals what
+                                       // the redirect content should be
+                                       if ( $this->equals( $this->getContentHandler()->makeRedirectContent( $title ) ) ) {
+                                               $this->redirectTarget = $title;
+                                       }
+                               }
+                       }
+               }
+
+               return $this->redirectTarget;
+       }
+
 }
index d221897..65e3a6f 100644 (file)
@@ -41,4 +41,22 @@ class JavaScriptContentHandler extends CodeContentHandler {
        protected function getContentClass() {
                return 'JavaScriptContent';
        }
+
+       public function supportsRedirects() {
+               return true;
+       }
+
+       /**
+        * Create a redirect that is also valid JavaScript
+        *
+        * @param Title $destination
+        * @param string $text ignored
+        * @return JavaScriptContent
+        */
+       public function makeRedirectContent( Title $destination, $text = '' ) {
+               // The parameters are passed as a string so the / is not url-encoded by wfArrayToCgi
+               $url = $destination->getFullURL( 'action=raw&ctype=text/javascript', false, PROTO_RELATIVE );
+               $class = $this->getContentClass();
+               return new $class( '/* #REDIRECT */' . Xml::encodeJsCall( 'mw.loader.load', array( $url ) ) );
+       }
 }
index d526d84..caf5afa 100644 (file)
@@ -168,6 +168,7 @@ abstract class ContextSource implements IContextSource {
         * Parameters are the same as wfMessage()
         *
         * @since 1.18
+        * @param mixed ...
         * @return Message
         */
        public function msg( /* $args */ ) {
index aaa1fa7..09c3939 100644 (file)
@@ -26,7 +26,7 @@
  *     a different Title instance set on it.
  * @since 1.19
  */
-class DerivativeContext extends ContextSource {
+class DerivativeContext extends ContextSource implements MutableContext {
        /**
         * @var WebRequest
         */
index 2ca79cd..58bf5d9 100644 (file)
@@ -134,6 +134,7 @@ interface IContextSource {
        /**
         * Get a Message object with context set.  See wfMessage for parameters.
         *
+        * @param mixed ...
         * @return Message
         */
        public function msg();
diff --git a/includes/context/MutableContext.php b/includes/context/MutableContext.php
new file mode 100644 (file)
index 0000000..6358f11
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Request-dependant objects containers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.26
+ *
+ * @file
+ */
+
+interface MutableContext {
+       /**
+        * Set the Config object
+        *
+        * @param Config $c
+        */
+       public function setConfig( Config $c );
+
+       /**
+        * Set the WebRequest object
+        *
+        * @param WebRequest $r
+        */
+       public function setRequest( WebRequest $r );
+
+       /**
+        * Set the Title object
+        *
+        * @param Title $t
+        */
+       public function setTitle( Title $t );
+
+       /**
+        * Set the WikiPage object
+        *
+        * @param WikiPage $p
+        */
+       public function setWikiPage( WikiPage $p );
+
+       /**
+        * Set the OutputPage object
+        *
+        * @param OutputPage $o
+        */
+       public function setOutput( OutputPage $o );
+
+       /**
+        * Set the User object
+        *
+        * @param User $u
+        */
+       public function setUser( User $u );
+
+       /**
+        * Set the Language object
+        *
+        * @param Language|string $l Language instance or language code
+        */
+       public function setLanguage( $l );
+
+       /**
+        * Set the Skin object
+        *
+        * @param Skin $s
+        */
+       public function setSkin( Skin $s );
+
+}
index e676ec9..93adde1 100644 (file)
@@ -25,7 +25,7 @@
 /**
  * Group all the pieces relevant to the context of a request into one instance
  */
-class RequestContext implements IContextSource {
+class RequestContext implements IContextSource, MutableContext {
        /**
         * @var WebRequest
         */
@@ -62,7 +62,7 @@ class RequestContext implements IContextSource {
        private $skin;
 
        /**
-        * @var StatsdDataFactory
+        * @var \Liuggio\StatsdClient\Factory\StatsdDataFactory
         */
        private $stats;
 
@@ -427,6 +427,7 @@ class RequestContext implements IContextSource {
         * Get a Message object with context set
         * Parameters are the same as wfMessage()
         *
+        * @param mixed ...
         * @return Message
         */
        public function msg() {
@@ -494,15 +495,17 @@ class RequestContext implements IContextSource {
        /**
         * Import an client IP address, HTTP headers, user ID, and session ID
         *
-        * This sets the current session and sets $wgUser and $wgRequest.
+        * This sets the current session, $wgUser, and $wgRequest from $params.
         * Once the return value falls out of scope, the old context is restored.
-        * This method should only be called in contexts (CLI or HTTP job runners)
-        * where there is no session ID or end user receiving the response. This
+        * This method should only be called in contexts where there is no session
+        * ID or end user receiving the response (CLI or HTTP job runners). This
         * is partly enforced, and is done so to avoid leaking cookies if certain
         * error conditions arise.
         *
-        * This will setup the session from the given ID. This is useful when
-        * background scripts inherit context when acting on behalf of a user.
+        * This is useful when background scripts inherit context when acting on
+        * behalf of a user. In general the 'sessionId' parameter should be set
+        * to an empty string unless session importing is *truly* needed. This
+        * feature is somewhat deprecated.
         *
         * @note suhosin.session.encrypt may interfere with this method.
         *
diff --git a/includes/dao/DBAccessObjectUtils.php b/includes/dao/DBAccessObjectUtils.php
new file mode 100644 (file)
index 0000000..ad7804c
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * This file contains database access object related constants.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 Database
+ */
+
+/**
+ * Helper class for DAO classes
+ *
+ * @since 1.26
+ */
+class DBAccessObjectUtils {
+       /**
+        * @param integer $bitfield
+        * @param integer $flags IDBAccessObject::READ_* constant
+        * @return bool Bitfield has flag $flag set
+        */
+       public static function hasFlags( $bitfield, $flags ) {
+               return ( $bitfield & $flags ) == $flags;
+       }
+
+       /**
+        * Get an appropriate DB index and options for a query
+        *
+        * @param integer $bitfield
+        * @return array (DB_MASTER/DB_SLAVE, SELECT options array)
+        */
+       public static function getDBOptions( $bitfield ) {
+               $index = self::hasFlags( $bitfield, IDBAccessObject::READ_LATEST )
+                       ? DB_MASTER
+                       : DB_SLAVE;
+
+               $options = array();
+               if ( self::hasFlags( $bitfield, IDBAccessObject::READ_EXCLUSIVE ) ) {
+                       $options[] = 'FOR UPDATE';
+               } elseif ( self::hasFlags( $bitfield, IDBAccessObject::READ_LOCKING ) ) {
+                       $options[] = 'LOCK IN SHARE MODE';
+               }
+
+               return array( $index, $options );
+       }
+}
index 7045494..b4f3f79 100644 (file)
@@ -3,6 +3,7 @@
  * Helper class to handle automatically marking connections as reusable (via RAII pattern)
  * as well handling deferring the actual network connection until the handle is used
  *
+ * @note: proxy methods are defined explicity to avoid interface errors
  * @ingroup Database
  * @since 1.22
  */
@@ -29,7 +30,7 @@ class DBConnRef implements IDatabase {
                }
        }
 
-       public function __call( $name, $arguments ) {
+       function __call( $name, array $arguments ) {
                if ( $this->conn === null ) {
                        list( $db, $groups, $wiki ) = $this->params;
                        $this->conn = $this->lb->getConnection( $db, $groups, $wiki );
@@ -38,7 +39,484 @@ class DBConnRef implements IDatabase {
                return call_user_func_array( array( $this->conn, $name ), $arguments );
        }
 
-       public function __destruct() {
+       public function getServerInfo() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function bufferResults( $buffer = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function trxLevel() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function trxTimestamp() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function tablePrefix( $prefix = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function dbSchema( $schema = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getLBInfo( $name = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function setLBInfo( $name, $value = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function implicitGroupby() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function implicitOrderby() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lastQuery() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function doneWrites() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lastDoneWrites() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function writesOrCallbacksPending() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function pendingWriteQueryDuration() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function isOpen() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function setFlag( $flag ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function clearFlag( $flag ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getFlag( $flag ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getProperty( $name ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getWikiID() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getType() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function open( $server, $user, $password, $dbName ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function fetchObject( $res ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function fetchRow( $res ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function numRows( $res ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function numFields( $res ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function fieldName( $res, $n ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function insertId() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function dataSeek( $res, $row ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lastErrno() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lastError() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function fieldInfo( $table, $field ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function affectedRows() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getSoftwareLink() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getServerVersion() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function close() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function reportConnectionError( $error = 'Unknown error' ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function query( $sql, $fname = __METHOD__, $tempIgnore = false ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function freeResult( $res ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectField(
+               $table, $var, $cond = '', $fname = __METHOD__, $options = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectFieldValues(
+               $table, $var, $cond = '', $fname = __METHOD__, $options = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function select(
+               $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectSQLText(
+               $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectRow(
+               $table, $vars, $conds, $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function estimateRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function fieldExists( $table, $field, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function indexExists( $table, $index, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function tableExists( $table, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function indexUnique( $table, $index ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function insert( $table, $a, $fname = __METHOD__, $options = array() ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function update( $table, $values, $conds, $fname = __METHOD__, $options = array() ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function makeList( $a, $mode = LIST_COMMA ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function makeWhereFrom2d( $data, $baseKey, $subKey ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function bitNot( $field ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function bitAnd( $fieldLeft, $fieldRight ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function bitOr( $fieldLeft, $fieldRight ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function buildConcat( $stringList ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function buildGroupConcatField(
+               $delim, $table, $field, $conds = '', $join_conds = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function selectDB( $db ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getDBname() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getServer() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function addQuotes( $s ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function buildLike() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function anyChar() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function anyString() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function nextSequenceValue( $seqName ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function replace( $table, $uniqueIndexes, $rows, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function upsert(
+               $table, array $rows, array $uniqueIndexes, array $set, $fname = __METHOD__
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function deleteJoin(
+               $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = __METHOD__
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function delete( $table, $conds, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function insertSelect(
+               $destTable, $srcTable, $varMap, $conds,
+               $fname = __METHOD__, $insertOptions = array(), $selectOptions = array()
+       ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function unionSupportsOrderAndLimit() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function unionQueries( $sqls, $all ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function conditional( $cond, $trueVal, $falseVal ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function strreplace( $orig, $old, $new ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getServerUptime() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function wasDeadlock() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function wasLockTimeout() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function wasErrorReissuable() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function wasReadOnlyError() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function masterPosWait( DBMasterPos $pos, $timeout ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getSlavePos() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getMasterPos() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function onTransactionIdle( $callback ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function onTransactionPreCommitOrIdle( $callback ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function startAtomic( $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function endAtomic( $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function begin( $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function commit( $fname = __METHOD__, $flush = '' ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function rollback( $fname = __METHOD__, $flush = '' ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function listTables( $prefix = null, $fname = __METHOD__ ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function timestamp( $ts = 0 ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function timestampOrNull( $ts = null ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function resultObject( $result ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function ping() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getLag() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function maxListLen() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function encodeBlob( $b ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function decodeBlob( $b ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function setSessionOptions( array $options ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function setSchemaVars( $vars ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lockIsFree( $lockName, $method ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lock( $lockName, $method, $timeout = 5 ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function unlock( $lockName, $method ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function namedLocksEnqueue() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function getInfinity() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function encodeExpiry( $expiry ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function decodeExpiry( $expiry, $format = TS_MW ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function setBigSelects( $value = true ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       /**
+        * Clean up the connection when out of scope
+        */
+       function __destruct() {
                if ( $this->conn !== null ) {
                        $this->lb->reuseConnection( $this->conn );
                }
index e74fe80..4d1b1c0 100644 (file)
  * @ingroup Database
  */
 
-/**
- * Interface for classes that implement or wrap DatabaseBase
- * @ingroup Database
- */
-interface IDatabase {
-}
-
 /**
  * Database abstraction object
  * @ingroup Database
@@ -237,7 +230,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param null|bool $ignoreErrors
         * @return bool The previous value of the flag.
         */
-       public function ignoreErrors( $ignoreErrors = null ) {
+       protected function ignoreErrors( $ignoreErrors = null ) {
                return wfSetBit( $this->mFlags, DBO_IGNORE, $ignoreErrors );
        }
 
@@ -612,125 +605,6 @@ abstract class DatabaseBase implements IDatabase {
                return $this->getSqlFilePath( 'update-keys.sql' );
        }
 
-       /**
-        * Get the type of the DBMS, as it appears in $wgDBtype.
-        *
-        * @return string
-        */
-       abstract function getType();
-
-       /**
-        * Open a connection to the database. Usually aborts on failure
-        *
-        * @param string $server Database server host
-        * @param string $user Database user name
-        * @param string $password Database user password
-        * @param string $dbName Database name
-        * @return bool
-        * @throws DBConnectionError
-        */
-       abstract function open( $server, $user, $password, $dbName );
-
-       /**
-        * Fetch the next row from the given result object, in object form.
-        * Fields can be retrieved with $row->fieldname, with fields acting like
-        * member variables.
-        * If no more rows are available, false is returned.
-        *
-        * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
-        * @return stdClass|bool
-        * @throws DBUnexpectedError Thrown if the database returns an error
-        */
-       abstract function fetchObject( $res );
-
-       /**
-        * Fetch the next row from the given result object, in associative array
-        * form. Fields are retrieved with $row['fieldname'].
-        * If no more rows are available, false is returned.
-        *
-        * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
-        * @return array|bool
-        * @throws DBUnexpectedError Thrown if the database returns an error
-        */
-       abstract function fetchRow( $res );
-
-       /**
-        * Get the number of rows in a result object
-        *
-        * @param mixed $res A SQL result
-        * @return int
-        */
-       abstract function numRows( $res );
-
-       /**
-        * Get the number of fields in a result object
-        * @see http://www.php.net/mysql_num_fields
-        *
-        * @param mixed $res A SQL result
-        * @return int
-        */
-       abstract function numFields( $res );
-
-       /**
-        * Get a field name in a result object
-        * @see http://www.php.net/mysql_field_name
-        *
-        * @param mixed $res A SQL result
-        * @param int $n
-        * @return string
-        */
-       abstract function fieldName( $res, $n );
-
-       /**
-        * Get the inserted value of an auto-increment row
-        *
-        * The value inserted should be fetched from nextSequenceValue()
-        *
-        * Example:
-        * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
-        * $dbw->insert( 'page', array( 'page_id' => $id ) );
-        * $id = $dbw->insertId();
-        *
-        * @return int
-        */
-       abstract function insertId();
-
-       /**
-        * Change the position of the cursor in a result object
-        * @see http://www.php.net/mysql_data_seek
-        *
-        * @param mixed $res A SQL result
-        * @param int $row
-        */
-       abstract function dataSeek( $res, $row );
-
-       /**
-        * Get the last error number
-        * @see http://www.php.net/mysql_errno
-        *
-        * @return int
-        */
-       abstract function lastErrno();
-
-       /**
-        * Get a description of the last error
-        * @see http://www.php.net/mysql_error
-        *
-        * @return string
-        */
-       abstract function lastError();
-
-       /**
-        * mysql_fetch_field() wrapper
-        * Returns false if the field doesn't exist
-        *
-        * @param string $table Table name
-        * @param string $field Field name
-        *
-        * @return Field
-        */
-       abstract function fieldInfo( $table, $field );
-
        /**
         * Get information about an index into an object
         * @param string $table Table name
@@ -740,14 +614,6 @@ abstract class DatabaseBase implements IDatabase {
         */
        abstract function indexInfo( $table, $index, $fname = __METHOD__ );
 
-       /**
-        * Get the number of rows affected by the last write query
-        * @see http://www.php.net/mysql_affected_rows
-        *
-        * @return int
-        */
-       abstract function affectedRows();
-
        /**
         * Wrapper for addslashes()
         *
@@ -756,24 +622,6 @@ abstract class DatabaseBase implements IDatabase {
         */
        abstract function strencode( $s );
 
-       /**
-        * Returns a wikitext link to the DB's website, e.g.,
-        *   return "[http://www.mysql.com/ MySQL]";
-        * Should at least contain plain text, if for some reason
-        * your database has no website.
-        *
-        * @return string Wikitext of a link to the server software's web site
-        */
-       abstract function getSoftwareLink();
-
-       /**
-        * A string describing the current software version, like from
-        * mysql_get_server_info().
-        *
-        * @return string Version information from the database server.
-        */
-       abstract function getServerVersion();
-
        /**
         * Constructor.
         *
@@ -1067,7 +915,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $sql
         * @return bool
         */
-       public function isWriteQuery( $sql ) {
+       protected function isWriteQuery( $sql ) {
                return !preg_match( '/^(?:SELECT|BEGIN|ROLLBACK|COMMIT|SET|SHOW|EXPLAIN|\(SELECT)\b/i', $sql );
        }
 
@@ -1080,7 +928,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $sql
         * @return bool
         */
-       public function isTransactableQuery( $sql ) {
+       protected function isTransactableQuery( $sql ) {
                $verb = substr( $sql, 0, strcspn( $sql, " \t\r\n" ) );
                return !in_array( $verb, array( 'BEGIN', 'COMMIT', 'ROLLBACK', 'SHOW', 'SET' ) );
        }
@@ -1458,6 +1306,7 @@ abstract class DatabaseBase implements IDatabase {
         * @param string|array $options The query options. See DatabaseBase::select() for details.
         *
         * @return bool|array The values from the field, or false on failure
+        * @throws DBUnexpectedError
         * @since 1.25
         */
        public function selectFieldValues(
@@ -1918,7 +1767,7 @@ abstract class DatabaseBase implements IDatabase {
        ) {
                $rows = 0;
                $sql = $this->selectSQLText( $table, '1', $conds, $fname, $options );
-               $res = $this->query( "SELECT COUNT(*) AS rowcount FROM ($sql) tmp_count" );
+               $res = $this->query( "SELECT COUNT(*) AS rowcount FROM ($sql) tmp_count", $fname );
 
                if ( $res ) {
                        $row = $this->fetchRow( $res );
@@ -2052,9 +1901,6 @@ abstract class DatabaseBase implements IDatabase {
         *     This causes a multi-row INSERT on DBMSs that support it. The keys in
         *     each subarray must be identical to each other, and in the same order.
         *
-        * Usually throws a DBQueryError on failure. If errors are explicitly ignored,
-        * returns success.
-        *
         * $options is an array of options, with boolean options encoded as values
         * with numeric keys, in the same style as $options in
         * DatabaseBase::select(). Supported options are:
@@ -2070,6 +1916,9 @@ abstract class DatabaseBase implements IDatabase {
         * @param string $fname Calling function name (use __METHOD__) for logs/profiling
         * @param array $options Array of options
         *
+        * @throws DBQueryError Usually throws a DBQueryError on failure. If errors are explicitly ignored,
+        * returns success.
+        *
         * @return bool
         */
        public function insert( $table, $a, $fname = __METHOD__, $options = array() ) {
@@ -2879,6 +2728,7 @@ abstract class DatabaseBase implements IDatabase {
                        $rows = array( $rows );
                }
 
+               // @FXIME: this is not atomic, but a trx would break affectedRows()
                foreach ( $rows as $row ) {
                        # Delete rows which collide
                        if ( $uniqueIndexes ) {
@@ -3339,6 +3189,17 @@ abstract class DatabaseBase implements IDatabase {
                return false;
        }
 
+       /**
+        * Determines if the given query error was a connection drop
+        * STUB
+        *
+        * @param integer|string $errno
+        * @return bool
+        */
+       public function wasConnectionError( $errno ) {
+               return false;
+       }
+
        /**
         * Perform a deadlock-prone transaction.
         *
@@ -3355,7 +3216,8 @@ abstract class DatabaseBase implements IDatabase {
         * iteration, or false on error, for example if the retry limit was
         * reached.
         *
-        * @return bool
+        * @return mixed
+        * @throws DBQueryError
         */
        public function deadlockLoop() {
                $args = func_get_args();
@@ -3369,6 +3231,7 @@ abstract class DatabaseBase implements IDatabase {
 
                $this->begin( __METHOD__ );
 
+               $retVal = null;
                $e = null;
                do {
                        try {
index 86950a8..928de61 100644 (file)
@@ -329,12 +329,19 @@ class DBQueryError extends DBExpectedError {
         * @param string $fname
         */
        function __construct( DatabaseBase $db, $error, $errno, $sql, $fname ) {
-               $message = "A database error has occurred. Did you forget to run " .
-                       "maintenance/update.php after upgrading?  See: " .
-                       "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
-                       "Query: $sql\n" .
-                       "Function: $fname\n" .
-                       "Error: $errno $error\n";
+               if ( $db->wasConnectionError( $errno ) ) {
+                       $message = "A connection error occured. \n" .
+                               "Query: $sql\n" .
+                               "Function: $fname\n" .
+                               "Error: $errno $error\n";
+               } else {
+                       $message = "A database error has occurred. Did you forget to run " .
+                               "maintenance/update.php after upgrading?  See: " .
+                               "https://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" .
+                               "Query: $sql\n" .
+                               "Function: $fname\n" .
+                               "Error: $errno $error\n";
+               }
                parent::__construct( $db, $message );
 
                $this->error = $error;
index e326909..be34242 100644 (file)
@@ -940,7 +940,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                                $value = $this->mDefaultBigSelects;
                        }
                } elseif ( $this->mDefaultBigSelects === null ) {
-                       $this->mDefaultBigSelects = (bool)$this->selectField( false, '@@sql_big_selects' );
+                       $this->mDefaultBigSelects = (bool)$this->selectField( false, '@@sql_big_selects', '', __METHOD__ );
                }
                $encValue = $value ? '1' : '0';
                $this->query( "SET sql_big_selects=$encValue", __METHOD__ );
@@ -1055,6 +1055,10 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
                        ( $this->lastErrno() == 1290 && strpos( $this->lastError(), '--read-only' ) !== false );
        }
 
+       function wasConnectionError( $errno ) {
+               return $errno == 2013 || $errno == 2006;
+       }
+
        /**
         * Get the underlying binding handle, mConn
         *
index 9ad76ab..56a5b2c 100644 (file)
@@ -217,7 +217,7 @@ class PostgresTransactionState {
  * @since 1.19
  */
 class SavepointPostgres {
-       /** @var DatabaseBase Establish a savepoint within a transaction */
+       /** @var DatabasePostgres Establish a savepoint within a transaction */
        protected $dbw;
        protected $id;
        protected $didbegin;
index 2bad711..656547b 100644 (file)
@@ -284,7 +284,7 @@ class DatabaseSqlite extends DatabaseBase {
         * @return bool
         */
        function isWriteQuery( $sql ) {
-               return parent::isWriteQuery( $sql ) && !preg_match( '/^ATTACH\b/i', $sql );
+               return parent::isWriteQuery( $sql ) && !preg_match( '/^(ATTACH|PRAGMA)\b/i', $sql );
        }
 
        /**
@@ -964,7 +964,36 @@ class DatabaseSqlite extends DatabaseBase {
                        }
                }
 
-               return $this->query( $sql, $fname );
+               $res = $this->query( $sql, $fname );
+
+               // Take over indexes
+               $indexList = $this->query( 'PRAGMA INDEX_LIST(' . $this->addQuotes( $oldName ) . ')' );
+               foreach ( $indexList as $index ) {
+                       if ( strpos( $index->name, 'sqlite_autoindex' ) === 0 ) {
+                               continue;
+                       }
+
+                       if ( $index->unique ) {
+                               $sql = 'CREATE UNIQUE INDEX';
+                       } else {
+                               $sql = 'CREATE INDEX';
+                       }
+                       // Try to come up with a new index name, given indexes have database scope in SQLite
+                       $indexName = $newName . '_' . $index->name;
+                       $sql .= ' ' . $indexName . ' ON ' . $newName;
+
+                       $indexInfo = $this->query( 'PRAGMA INDEX_INFO(' . $this->addQuotes( $index->name ) . ')' );
+                       $fields = array();
+                       foreach ( $indexInfo as $indexInfoRow ) {
+                               $fields[ $indexInfoRow->seqno ] = $indexInfoRow->name;
+                       }
+
+                       $sql .= '(' . implode( ',', $fields ) . ')';
+
+                       $this->query( $sql );
+               }
+
+               return $res;
        }
 
        /**
diff --git a/includes/db/IDatabase.php b/includes/db/IDatabase.php
new file mode 100644 (file)
index 0000000..49d0514
--- /dev/null
@@ -0,0 +1,1513 @@
+<?php
+
+/**
+ * @defgroup Database Database
+ *
+ * This file deals with database interface functions
+ * and query specifics/optimisations.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 Database
+ */
+
+/**
+ * Basic database interface for live and lazy-loaded DB handles
+ *
+ * @todo: loosen up DB classes from MWException
+ * @note: DatabaseBase and DBConnRef should be updated to reflect any changes
+ * @ingroup Database
+ */
+interface IDatabase {
+       /**
+        * A string describing the current software version, and possibly
+        * other details in a user-friendly way. Will be listed on Special:Version, etc.
+        * Use getServerVersion() to get machine-friendly information.
+        *
+        * @return string Version information from the database server
+        */
+       public function getServerInfo();
+
+       /**
+        * Turns buffering of SQL result sets on (true) or off (false). Default is
+        * "on".
+        *
+        * Unbuffered queries are very troublesome in MySQL:
+        *
+        *   - If another query is executed while the first query is being read
+        *     out, the first query is killed. This means you can't call normal
+        *     MediaWiki functions while you are reading an unbuffered query result
+        *     from a normal wfGetDB() connection.
+        *
+        *   - Unbuffered queries cause the MySQL server to use large amounts of
+        *     memory and to hold broad locks which block other queries.
+        *
+        * If you want to limit client-side memory, it's almost always better to
+        * split up queries into batches using a LIMIT clause than to switch off
+        * buffering.
+        *
+        * @param null|bool $buffer
+        * @return null|bool The previous value of the flag
+        */
+       public function bufferResults( $buffer = null );
+
+       /**
+        * Gets the current transaction level.
+        *
+        * Historically, transactions were allowed to be "nested". This is no
+        * longer supported, so this function really only returns a boolean.
+        *
+        * @return int The previous value
+        */
+       public function trxLevel();
+
+       /**
+        * Get the UNIX timestamp of the time that the transaction was established
+        *
+        * This can be used to reason about the staleness of SELECT data
+        * in REPEATABLE-READ transaction isolation level.
+        *
+        * @return float|null Returns null if there is not active transaction
+        * @since 1.25
+        */
+       public function trxTimestamp();
+
+       /**
+        * Get/set the table prefix.
+        * @param string $prefix The table prefix to set, or omitted to leave it unchanged.
+        * @return string The previous table prefix.
+        */
+       public function tablePrefix( $prefix = null );
+
+       /**
+        * Get/set the db schema.
+        * @param string $schema The database schema to set, or omitted to leave it unchanged.
+        * @return string The previous db schema.
+        */
+       public function dbSchema( $schema = null );
+
+       /**
+        * Get properties passed down from the server info array of the load
+        * balancer.
+        *
+        * @param string $name The entry of the info array to get, or null to get the
+        *   whole array
+        *
+        * @return array|mixed|null
+        */
+       public function getLBInfo( $name = null );
+
+       /**
+        * Set the LB info array, or a member of it. If called with one parameter,
+        * the LB info array is set to that parameter. If it is called with two
+        * parameters, the member with the given name is set to the given value.
+        *
+        * @param string $name
+        * @param array $value
+        */
+       public function setLBInfo( $name, $value = null );
+
+       /**
+        * Returns true if this database does an implicit sort when doing GROUP BY
+        *
+        * @return bool
+        */
+       public function implicitGroupby();
+
+       /**
+        * Returns true if this database does an implicit order by when the column has an index
+        * For example: SELECT page_title FROM page LIMIT 1
+        *
+        * @return bool
+        */
+       public function implicitOrderby();
+
+       /**
+        * Return the last query that went through DatabaseBase::query()
+        * @return string
+        */
+       public function lastQuery();
+
+       /**
+        * Returns true if the connection may have been used for write queries.
+        * Should return true if unsure.
+        *
+        * @return bool
+        */
+       public function doneWrites();
+
+       /**
+        * Returns the last time the connection may have been used for write queries.
+        * Should return a timestamp if unsure.
+        *
+        * @return int|float UNIX timestamp or false
+        * @since 1.24
+        */
+       public function lastDoneWrites();
+
+       /**
+        * Returns true if there is a transaction open with possible write
+        * queries or transaction pre-commit/idle callbacks waiting on it to finish.
+        *
+        * @return bool
+        */
+       public function writesOrCallbacksPending();
+
+       /**
+        * Get the time spend running write queries for this
+        *
+        * High times could be due to scanning, updates, locking, and such
+        *
+        * @return float|bool Returns false if not transaction is active
+        * @since 1.26
+        */
+       public function pendingWriteQueryDuration();
+
+       /**
+        * Is a connection to the database open?
+        * @return bool
+        */
+       public function isOpen();
+
+       /**
+        * Set a flag for this connection
+        *
+        * @param int $flag DBO_* constants from Defines.php:
+        *   - DBO_DEBUG: output some debug info (same as debug())
+        *   - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
+        *   - DBO_TRX: automatically start transactions
+        *   - DBO_DEFAULT: automatically sets DBO_TRX if not in command line mode
+        *       and removes it in command line mode
+        *   - DBO_PERSISTENT: use persistant database connection
+        */
+       public function setFlag( $flag );
+
+       /**
+        * Clear a flag for this connection
+        *
+        * @param int $flag DBO_* constants from Defines.php:
+        *   - DBO_DEBUG: output some debug info (same as debug())
+        *   - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
+        *   - DBO_TRX: automatically start transactions
+        *   - DBO_DEFAULT: automatically sets DBO_TRX if not in command line mode
+        *       and removes it in command line mode
+        *   - DBO_PERSISTENT: use persistant database connection
+        */
+       public function clearFlag( $flag );
+
+       /**
+        * Returns a boolean whether the flag $flag is set for this connection
+        *
+        * @param int $flag DBO_* constants from Defines.php:
+        *   - DBO_DEBUG: output some debug info (same as debug())
+        *   - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
+        *   - DBO_TRX: automatically start transactions
+        *   - DBO_PERSISTENT: use persistant database connection
+        * @return bool
+        */
+       public function getFlag( $flag );
+
+       /**
+        * General read-only accessor
+        *
+        * @param string $name
+        * @return string
+        */
+       public function getProperty( $name );
+
+       /**
+        * @return string
+        */
+       public function getWikiID();
+
+       /**
+        * Get the type of the DBMS, as it appears in $wgDBtype.
+        *
+        * @return string
+        */
+       public function getType();
+
+       /**
+        * Open a connection to the database. Usually aborts on failure
+        *
+        * @param string $server Database server host
+        * @param string $user Database user name
+        * @param string $password Database user password
+        * @param string $dbName Database name
+        * @return bool
+        * @throws DBConnectionError
+        */
+       public function open( $server, $user, $password, $dbName );
+
+       /**
+        * Fetch the next row from the given result object, in object form.
+        * Fields can be retrieved with $row->fieldname, with fields acting like
+        * member variables.
+        * If no more rows are available, false is returned.
+        *
+        * @param ResultWrapper|stdClass $res Object as returned from DatabaseBase::query(), etc.
+        * @return stdClass|bool
+        * @throws DBUnexpectedError Thrown if the database returns an error
+        */
+       public function fetchObject( $res );
+
+       /**
+        * Fetch the next row from the given result object, in associative array
+        * form. Fields are retrieved with $row['fieldname'].
+        * If no more rows are available, false is returned.
+        *
+        * @param ResultWrapper $res Result object as returned from DatabaseBase::query(), etc.
+        * @return array|bool
+        * @throws DBUnexpectedError Thrown if the database returns an error
+        */
+       public function fetchRow( $res );
+
+       /**
+        * Get the number of rows in a result object
+        *
+        * @param mixed $res A SQL result
+        * @return int
+        */
+       public function numRows( $res );
+
+       /**
+        * Get the number of fields in a result object
+        * @see http://www.php.net/mysql_num_fields
+        *
+        * @param mixed $res A SQL result
+        * @return int
+        */
+       public function numFields( $res );
+
+       /**
+        * Get a field name in a result object
+        * @see http://www.php.net/mysql_field_name
+        *
+        * @param mixed $res A SQL result
+        * @param int $n
+        * @return string
+        */
+       public function fieldName( $res, $n );
+
+       /**
+        * Get the inserted value of an auto-increment row
+        *
+        * The value inserted should be fetched from nextSequenceValue()
+        *
+        * Example:
+        * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
+        * $dbw->insert( 'page', array( 'page_id' => $id ) );
+        * $id = $dbw->insertId();
+        *
+        * @return int
+        */
+       public function insertId();
+
+       /**
+        * Change the position of the cursor in a result object
+        * @see http://www.php.net/mysql_data_seek
+        *
+        * @param mixed $res A SQL result
+        * @param int $row
+        */
+       public function dataSeek( $res, $row );
+
+       /**
+        * Get the last error number
+        * @see http://www.php.net/mysql_errno
+        *
+        * @return int
+        */
+       public function lastErrno();
+
+       /**
+        * Get a description of the last error
+        * @see http://www.php.net/mysql_error
+        *
+        * @return string
+        */
+       public function lastError();
+
+       /**
+        * mysql_fetch_field() wrapper
+        * Returns false if the field doesn't exist
+        *
+        * @param string $table Table name
+        * @param string $field Field name
+        *
+        * @return Field
+        */
+       public function fieldInfo( $table, $field );
+
+       /**
+        * Get the number of rows affected by the last write query
+        * @see http://www.php.net/mysql_affected_rows
+        *
+        * @return int
+        */
+       public function affectedRows();
+
+       /**
+        * Returns a wikitext link to the DB's website, e.g.,
+        *   return "[http://www.mysql.com/ MySQL]";
+        * Should at least contain plain text, if for some reason
+        * your database has no website.
+        *
+        * @return string Wikitext of a link to the server software's web site
+        */
+       public function getSoftwareLink();
+
+       /**
+        * A string describing the current software version, like from
+        * mysql_get_server_info().
+        *
+        * @return string Version information from the database server.
+        */
+       public function getServerVersion();
+
+       /**
+        * Closes a database connection.
+        * if it is open : commits any open transactions
+        *
+        * @throws MWException
+        * @return bool Operation success. true if already closed.
+        */
+       public function close();
+
+       /**
+        * @param string $error Fallback error message, used if none is given by DB
+        * @throws DBConnectionError
+        */
+       public function reportConnectionError( $error = 'Unknown error' );
+
+       /**
+        * Run an SQL query and return the result. Normally throws a DBQueryError
+        * on failure. If errors are ignored, returns false instead.
+        *
+        * In new code, the query wrappers select(), insert(), update(), delete(),
+        * etc. should be used where possible, since they give much better DBMS
+        * independence and automatically quote or validate user input in a variety
+        * of contexts. This function is generally only useful for queries which are
+        * explicitly DBMS-dependent and are unsupported by the query wrappers, such
+        * as CREATE TABLE.
+        *
+        * However, the query wrappers themselves should call this function.
+        *
+        * @param string $sql SQL query
+        * @param string $fname Name of the calling function, for profiling/SHOW PROCESSLIST
+        *     comment (you can use __METHOD__ or add some extra info)
+        * @param bool $tempIgnore Whether to avoid throwing an exception on errors...
+        *     maybe best to catch the exception instead?
+        * @throws MWException
+        * @return bool|ResultWrapper True for a successful write query, ResultWrapper object
+        *     for a successful read query, or false on failure if $tempIgnore set
+        */
+       public function query( $sql, $fname = __METHOD__, $tempIgnore = false );
+
+       /**
+        * Report a query error. Log the error, and if neither the object ignore
+        * flag nor the $tempIgnore flag is set, throw a DBQueryError.
+        *
+        * @param string $error
+        * @param int $errno
+        * @param string $sql
+        * @param string $fname
+        * @param bool $tempIgnore
+        * @throws DBQueryError
+        */
+       public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false );
+
+       /**
+        * Free a result object returned by query() or select(). It's usually not
+        * necessary to call this, just use unset() or let the variable holding
+        * the result object go out of scope.
+        *
+        * @param mixed $res A SQL result
+        */
+       public function freeResult( $res );
+
+       /**
+        * A SELECT wrapper which returns a single field from a single result row.
+        *
+        * Usually throws a DBQueryError on failure. If errors are explicitly
+        * ignored, returns false on failure.
+        *
+        * If no result rows are returned from the query, false is returned.
+        *
+        * @param string|array $table Table name. See DatabaseBase::select() for details.
+        * @param string $var The field name to select. This must be a valid SQL
+        *   fragment: do not use unvalidated user input.
+        * @param string|array $cond The condition array. See DatabaseBase::select() for details.
+        * @param string $fname The function name of the caller.
+        * @param string|array $options The query options. See DatabaseBase::select() for details.
+        *
+        * @return bool|mixed The value from the field, or false on failure.
+        */
+       public function selectField(
+               $table, $var, $cond = '', $fname = __METHOD__, $options = array()
+       );
+
+       /**
+        * A SELECT wrapper which returns a list of single field values from result rows.
+        *
+        * Usually throws a DBQueryError on failure. If errors are explicitly
+        * ignored, returns false on failure.
+        *
+        * If no result rows are returned from the query, false is returned.
+        *
+        * @param string|array $table Table name. See DatabaseBase::select() for details.
+        * @param string $var The field name to select. This must be a valid SQL
+        *   fragment: do not use unvalidated user input.
+        * @param string|array $cond The condition array. See DatabaseBase::select() for details.
+        * @param string $fname The function name of the caller.
+        * @param string|array $options The query options. See DatabaseBase::select() for details.
+        *
+        * @return bool|array The values from the field, or false on failure
+        * @since 1.25
+        */
+       public function selectFieldValues(
+               $table, $var, $cond = '', $fname = __METHOD__, $options = array()
+       );
+
+       /**
+        * Execute a SELECT query constructed using the various parameters provided.
+        * See below for full details of the parameters.
+        *
+        * @param string|array $table Table name
+        * @param string|array $vars Field names
+        * @param string|array $conds Conditions
+        * @param string $fname Caller function name
+        * @param array $options Query options
+        * @param array $join_conds Join conditions
+        *
+        *
+        * @param string|array $table
+        *
+        * May be either an array of table names, or a single string holding a table
+        * name. If an array is given, table aliases can be specified, for example:
+        *
+        *    array( 'a' => 'user' )
+        *
+        * This includes the user table in the query, with the alias "a" available
+        * for use in field names (e.g. a.user_name).
+        *
+        * All of the table names given here are automatically run through
+        * DatabaseBase::tableName(), which causes the table prefix (if any) to be
+        * added, and various other table name mappings to be performed.
+        *
+        *
+        * @param string|array $vars
+        *
+        * May be either a field name or an array of field names. The field names
+        * can be complete fragments of SQL, for direct inclusion into the SELECT
+        * query. If an array is given, field aliases can be specified, for example:
+        *
+        *   array( 'maxrev' => 'MAX(rev_id)' )
+        *
+        * This includes an expression with the alias "maxrev" in the query.
+        *
+        * If an expression is given, care must be taken to ensure that it is
+        * DBMS-independent.
+        *
+        *
+        * @param string|array $conds
+        *
+        * May be either a string containing a single condition, or an array of
+        * conditions. If an array is given, the conditions constructed from each
+        * element are combined with AND.
+        *
+        * Array elements may take one of two forms:
+        *
+        *   - Elements with a numeric key are interpreted as raw SQL fragments.
+        *   - Elements with a string key are interpreted as equality conditions,
+        *     where the key is the field name.
+        *     - If the value of such an array element is a scalar (such as a
+        *       string), it will be treated as data and thus quoted appropriately.
+        *       If it is null, an IS NULL clause will be added.
+        *     - If the value is an array, an IN (...) clause will be constructed
+        *       from its non-null elements, and an IS NULL clause will be added
+        *       if null is present, such that the field may match any of the
+        *       elements in the array. The non-null elements will be quoted.
+        *
+        * Note that expressions are often DBMS-dependent in their syntax.
+        * DBMS-independent wrappers are provided for constructing several types of
+        * expression commonly used in condition queries. See:
+        *    - DatabaseBase::buildLike()
+        *    - DatabaseBase::conditional()
+        *
+        *
+        * @param string|array $options
+        *
+        * Optional: Array of query options. Boolean options are specified by
+        * including them in the array as a string value with a numeric key, for
+        * example:
+        *
+        *    array( 'FOR UPDATE' )
+        *
+        * The supported options are:
+        *
+        *   - OFFSET: Skip this many rows at the start of the result set. OFFSET
+        *     with LIMIT can theoretically be used for paging through a result set,
+        *     but this is discouraged in MediaWiki for performance reasons.
+        *
+        *   - LIMIT: Integer: return at most this many rows. The rows are sorted
+        *     and then the first rows are taken until the limit is reached. LIMIT
+        *     is applied to a result set after OFFSET.
+        *
+        *   - FOR UPDATE: Boolean: lock the returned rows so that they can't be
+        *     changed until the next COMMIT.
+        *
+        *   - DISTINCT: Boolean: return only unique result rows.
+        *
+        *   - GROUP BY: May be either an SQL fragment string naming a field or
+        *     expression to group by, or an array of such SQL fragments.
+        *
+        *   - HAVING: May be either an string containing a HAVING clause or an array of
+        *     conditions building the HAVING clause. If an array is given, the conditions
+        *     constructed from each element are combined with AND.
+        *
+        *   - ORDER BY: May be either an SQL fragment giving a field name or
+        *     expression to order by, or an array of such SQL fragments.
+        *
+        *   - USE INDEX: This may be either a string giving the index name to use
+        *     for the query, or an array. If it is an associative array, each key
+        *     gives the table name (or alias), each value gives the index name to
+        *     use for that table. All strings are SQL fragments and so should be
+        *     validated by the caller.
+        *
+        *   - EXPLAIN: In MySQL, this causes an EXPLAIN SELECT query to be run,
+        *     instead of SELECT.
+        *
+        * And also the following boolean MySQL extensions, see the MySQL manual
+        * for documentation:
+        *
+        *    - LOCK IN SHARE MODE
+        *    - STRAIGHT_JOIN
+        *    - HIGH_PRIORITY
+        *    - SQL_BIG_RESULT
+        *    - SQL_BUFFER_RESULT
+        *    - SQL_SMALL_RESULT
+        *    - SQL_CALC_FOUND_ROWS
+        *    - SQL_CACHE
+        *    - SQL_NO_CACHE
+        *
+        *
+        * @param string|array $join_conds
+        *
+        * Optional associative array of table-specific join conditions. In the
+        * most common case, this is unnecessary, since the join condition can be
+        * in $conds. However, it is useful for doing a LEFT JOIN.
+        *
+        * The key of the array contains the table name or alias. The value is an
+        * array with two elements, numbered 0 and 1. The first gives the type of
+        * join, the second is an SQL fragment giving the join condition for that
+        * table. For example:
+        *
+        *    array( 'page' => array( 'LEFT JOIN', 'page_latest=rev_id' ) )
+        *
+        * @return ResultWrapper|bool If the query returned no rows, a ResultWrapper
+        *   with no rows in it will be returned. If there was a query error, a
+        *   DBQueryError exception will be thrown, except if the "ignore errors"
+        *   option was set, in which case false will be returned.
+        */
+       public function select(
+               $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       );
+
+       /**
+        * The equivalent of DatabaseBase::select() except that the constructed SQL
+        * is returned, instead of being immediately executed. This can be useful for
+        * doing UNION queries, where the SQL text of each query is needed. In general,
+        * however, callers outside of Database classes should just use select().
+        *
+        * @param string|array $table Table name
+        * @param string|array $vars Field names
+        * @param string|array $conds Conditions
+        * @param string $fname Caller function name
+        * @param string|array $options Query options
+        * @param string|array $join_conds Join conditions
+        *
+        * @return string SQL query string.
+        * @see DatabaseBase::select()
+        */
+       public function selectSQLText(
+               $table, $vars, $conds = '', $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       );
+
+       /**
+        * Single row SELECT wrapper. Equivalent to DatabaseBase::select(), except
+        * that a single row object is returned. If the query returns no rows,
+        * false is returned.
+        *
+        * @param string|array $table Table name
+        * @param string|array $vars Field names
+        * @param array $conds Conditions
+        * @param string $fname Caller function name
+        * @param string|array $options Query options
+        * @param array|string $join_conds Join conditions
+        *
+        * @return stdClass|bool
+        */
+       public function selectRow( $table, $vars, $conds, $fname = __METHOD__,
+               $options = array(), $join_conds = array()
+       );
+
+       /**
+        * Estimate the number of rows in dataset
+        *
+        * MySQL allows you to estimate the number of rows that would be returned
+        * by a SELECT query, using EXPLAIN SELECT. The estimate is provided using
+        * index cardinality statistics, and is notoriously inaccurate, especially
+        * when large numbers of rows have recently been added or deleted.
+        *
+        * For DBMSs that don't support fast result size estimation, this function
+        * will actually perform the SELECT COUNT(*).
+        *
+        * Takes the same arguments as DatabaseBase::select().
+        *
+        * @param string $table Table name
+        * @param string $vars Unused
+        * @param array|string $conds Filters on the table
+        * @param string $fname Function name for profiling
+        * @param array $options Options for select
+        * @return int Row count
+        */
+       public function estimateRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+       );
+
+       /**
+        * Get the number of rows in dataset
+        *
+        * This is useful when trying to do COUNT(*) but with a LIMIT for performance.
+        *
+        * Takes the same arguments as DatabaseBase::select().
+        *
+        * @param string $table Table name
+        * @param string $vars Unused
+        * @param array|string $conds Filters on the table
+        * @param string $fname Function name for profiling
+        * @param array $options Options for select
+        * @return int Row count
+        * @since 1.24
+        */
+       public function selectRowCount(
+               $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+       );
+
+       /**
+        * Determines whether a field exists in a table
+        *
+        * @param string $table Table name
+        * @param string $field Filed to check on that table
+        * @param string $fname Calling function name (optional)
+        * @return bool Whether $table has filed $field
+        */
+       public function fieldExists( $table, $field, $fname = __METHOD__ );
+
+       /**
+        * Determines whether an index exists
+        * Usually throws a DBQueryError on failure
+        * If errors are explicitly ignored, returns NULL on failure
+        *
+        * @param string $table
+        * @param string $index
+        * @param string $fname
+        * @return bool|null
+        */
+       public function indexExists( $table, $index, $fname = __METHOD__ );
+
+       /**
+        * Query whether a given table exists
+        *
+        * @param string $table
+        * @param string $fname
+        * @return bool
+        */
+       public function tableExists( $table, $fname = __METHOD__ );
+
+       /**
+        * Determines if a given index is unique
+        *
+        * @param string $table
+        * @param string $index
+        *
+        * @return bool
+        */
+       public function indexUnique( $table, $index );
+
+       /**
+        * INSERT wrapper, inserts an array into a table.
+        *
+        * $a may be either:
+        *
+        *   - A single associative array. The array keys are the field names, and
+        *     the values are the values to insert. The values are treated as data
+        *     and will be quoted appropriately. If NULL is inserted, this will be
+        *     converted to a database NULL.
+        *   - An array with numeric keys, holding a list of associative arrays.
+        *     This causes a multi-row INSERT on DBMSs that support it. The keys in
+        *     each subarray must be identical to each other, and in the same order.
+        *
+        * Usually throws a DBQueryError on failure. If errors are explicitly ignored,
+        * returns success.
+        *
+        * $options is an array of options, with boolean options encoded as values
+        * with numeric keys, in the same style as $options in
+        * DatabaseBase::select(). Supported options are:
+        *
+        *   - IGNORE: Boolean: if present, duplicate key errors are ignored, and
+        *     any rows which cause duplicate key errors are not inserted. It's
+        *     possible to determine how many rows were successfully inserted using
+        *     DatabaseBase::affectedRows().
+        *
+        * @param string $table Table name. This will be passed through
+        *   DatabaseBase::tableName().
+        * @param array $a Array of rows to insert
+        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
+        * @param array $options Array of options
+        *
+        * @return bool
+        */
+       public function insert( $table, $a, $fname = __METHOD__, $options = array() );
+
+       /**
+        * UPDATE wrapper. Takes a condition array and a SET array.
+        *
+        * @param string $table Name of the table to UPDATE. This will be passed through
+        *   DatabaseBase::tableName().
+        * @param array $values An array of values to SET. For each array element,
+        *   the key gives the field name, and the value gives the data to set
+        *   that field to. The data will be quoted by DatabaseBase::addQuotes().
+        * @param array $conds An array of conditions (WHERE). See
+        *   DatabaseBase::select() for the details of the format of condition
+        *   arrays. Use '*' to update all rows.
+        * @param string $fname The function name of the caller (from __METHOD__),
+        *   for logging and profiling.
+        * @param array $options An array of UPDATE options, can be:
+        *   - IGNORE: Ignore unique key conflicts
+        *   - LOW_PRIORITY: MySQL-specific, see MySQL manual.
+        * @return bool
+        */
+       public function update( $table, $values, $conds, $fname = __METHOD__, $options = array() );
+
+       /**
+        * Makes an encoded list of strings from an array
+        *
+        * @param array $a Containing the data
+        * @param int $mode Constant
+        *    - LIST_COMMA: Comma separated, no field names
+        *    - LIST_AND:   ANDed WHERE clause (without the WHERE). See the
+        *      documentation for $conds in DatabaseBase::select().
+        *    - LIST_OR:    ORed WHERE clause (without the WHERE)
+        *    - LIST_SET:   Comma separated with field names, like a SET clause
+        *    - LIST_NAMES: Comma separated field names
+        * @throws MWException|DBUnexpectedError
+        * @return string
+        */
+       public function makeList( $a, $mode = LIST_COMMA );
+
+       /**
+        * Build a partial where clause from a 2-d array such as used for LinkBatch.
+        * The keys on each level may be either integers or strings.
+        *
+        * @param array $data Organized as 2-d
+        *    array(baseKeyVal => array(subKeyVal => [ignored], ...), ...)
+        * @param string $baseKey Field name to match the base-level keys to (eg 'pl_namespace')
+        * @param string $subKey Field name to match the sub-level keys to (eg 'pl_title')
+        * @return string|bool SQL fragment, or false if no items in array
+        */
+       public function makeWhereFrom2d( $data, $baseKey, $subKey );
+
+       /**
+        * @param string $field
+        * @return string
+        */
+       public function bitNot( $field );
+
+       /**
+        * @param string $fieldLeft
+        * @param string $fieldRight
+        * @return string
+        */
+       public function bitAnd( $fieldLeft, $fieldRight );
+
+       /**
+        * @param string $fieldLeft
+        * @param string $fieldRight
+        * @return string
+        */
+       public function bitOr( $fieldLeft, $fieldRight );
+
+       /**
+        * Build a concatenation list to feed into a SQL query
+        * @param array $stringList List of raw SQL expressions; caller is
+        *   responsible for any quoting
+        * @return string
+        */
+       public function buildConcat( $stringList );
+
+       /**
+        * Build a GROUP_CONCAT or equivalent statement for a query.
+        *
+        * This is useful for combining a field for several rows into a single string.
+        * NULL values will not appear in the output, duplicated values will appear,
+        * and the resulting delimiter-separated values have no defined sort order.
+        * Code using the results may need to use the PHP unique() or sort() methods.
+        *
+        * @param string $delim Glue to bind the results together
+        * @param string|array $table Table name
+        * @param string $field Field name
+        * @param string|array $conds Conditions
+        * @param string|array $join_conds Join conditions
+        * @return string SQL text
+        * @since 1.23
+        */
+       public function buildGroupConcatField(
+               $delim, $table, $field, $conds = '', $join_conds = array()
+       );
+
+       /**
+        * Change the current database
+        *
+        * @param string $db
+        * @return bool Success or failure
+        */
+       public function selectDB( $db );
+
+       /**
+        * Get the current DB name
+        * @return string
+        */
+       public function getDBname();
+
+       /**
+        * Get the server hostname or IP address
+        * @return string
+        */
+       public function getServer();
+
+       /**
+        * Adds quotes and backslashes.
+        *
+        * @param string|Blob $s
+        * @return string
+        */
+       public function addQuotes( $s );
+
+       /**
+        * LIKE statement wrapper, receives a variable-length argument list with
+        * parts of pattern to match containing either string literals that will be
+        * escaped or tokens returned by anyChar() or anyString(). Alternatively,
+        * the function could be provided with an array of aforementioned
+        * parameters.
+        *
+        * Example: $dbr->buildLike( 'My_page_title/', $dbr->anyString() ) returns
+        * a LIKE clause that searches for subpages of 'My page title'.
+        * Alternatively:
+        *   $pattern = array( 'My_page_title/', $dbr->anyString() );
+        *   $query .= $dbr->buildLike( $pattern );
+        *
+        * @since 1.16
+        * @return string Fully built LIKE statement
+        */
+       public function buildLike();
+
+       /**
+        * Returns a token for buildLike() that denotes a '_' to be used in a LIKE query
+        *
+        * @return LikeMatch
+        */
+       public function anyChar();
+
+       /**
+        * Returns a token for buildLike() that denotes a '%' to be used in a LIKE query
+        *
+        * @return LikeMatch
+        */
+       public function anyString();
+
+       /**
+        * Returns an appropriately quoted sequence value for inserting a new row.
+        * MySQL has autoincrement fields, so this is just NULL. But the PostgreSQL
+        * subclass will return an integer, and save the value for insertId()
+        *
+        * Any implementation of this function should *not* involve reusing
+        * sequence numbers created for rolled-back transactions.
+        * See http://bugs.mysql.com/bug.php?id=30767 for details.
+        * @param string $seqName
+        * @return null|int
+        */
+       public function nextSequenceValue( $seqName );
+
+       /**
+        * REPLACE query wrapper.
+        *
+        * REPLACE is a very handy MySQL extension, which functions like an INSERT
+        * except that when there is a duplicate key error, the old row is deleted
+        * and the new row is inserted in its place.
+        *
+        * We simulate this with standard SQL with a DELETE followed by INSERT. To
+        * perform the delete, we need to know what the unique indexes are so that
+        * we know how to find the conflicting rows.
+        *
+        * It may be more efficient to leave off unique indexes which are unlikely
+        * to collide. However if you do this, you run the risk of encountering
+        * errors which wouldn't have occurred in MySQL.
+        *
+        * @param string $table The table to replace the row(s) in.
+        * @param array $uniqueIndexes Is an array of indexes. Each element may be either
+        *    a field name or an array of field names
+        * @param array $rows Can be either a single row to insert, or multiple rows,
+        *    in the same format as for DatabaseBase::insert()
+        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
+        */
+       public function replace( $table, $uniqueIndexes, $rows, $fname = __METHOD__ );
+
+       /**
+        * INSERT ON DUPLICATE KEY UPDATE wrapper, upserts an array into a table.
+        *
+        * This updates any conflicting rows (according to the unique indexes) using
+        * the provided SET clause and inserts any remaining (non-conflicted) rows.
+        *
+        * $rows may be either:
+        *   - A single associative array. The array keys are the field names, and
+        *     the values are the values to insert. The values are treated as data
+        *     and will be quoted appropriately. If NULL is inserted, this will be
+        *     converted to a database NULL.
+        *   - An array with numeric keys, holding a list of associative arrays.
+        *     This causes a multi-row INSERT on DBMSs that support it. The keys in
+        *     each subarray must be identical to each other, and in the same order.
+        *
+        * It may be more efficient to leave off unique indexes which are unlikely
+        * to collide. However if you do this, you run the risk of encountering
+        * errors which wouldn't have occurred in MySQL.
+        *
+        * Usually throws a DBQueryError on failure. If errors are explicitly ignored,
+        * returns success.
+        *
+        * @since 1.22
+        *
+        * @param string $table Table name. This will be passed through DatabaseBase::tableName().
+        * @param array $rows A single row or list of rows to insert
+        * @param array $uniqueIndexes List of single field names or field name tuples
+        * @param array $set An array of values to SET. For each array element, the
+        *   key gives the field name, and the value gives the data to set that
+        *   field to. The data will be quoted by DatabaseBase::addQuotes().
+        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
+        * @throws Exception
+        * @return bool
+        */
+       public function upsert(
+               $table, array $rows, array $uniqueIndexes, array $set, $fname = __METHOD__
+       );
+
+       /**
+        * DELETE where the condition is a join.
+        *
+        * MySQL overrides this to use a multi-table DELETE syntax, in other databases
+        * we use sub-selects
+        *
+        * For safety, an empty $conds will not delete everything. If you want to
+        * delete all rows where the join condition matches, set $conds='*'.
+        *
+        * DO NOT put the join condition in $conds.
+        *
+        * @param string $delTable The table to delete from.
+        * @param string $joinTable The other table.
+        * @param string $delVar The variable to join on, in the first table.
+        * @param string $joinVar The variable to join on, in the second table.
+        * @param array $conds Condition array of field names mapped to variables,
+        *   ANDed together in the WHERE clause
+        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
+        * @throws DBUnexpectedError
+        */
+       public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
+               $fname = __METHOD__
+       );
+
+       /**
+        * DELETE query wrapper.
+        *
+        * @param array $table Table name
+        * @param string|array $conds Array of conditions. See $conds in DatabaseBase::select()
+        *   for the format. Use $conds == "*" to delete all rows
+        * @param string $fname Name of the calling function
+        * @throws DBUnexpectedError
+        * @return bool|ResultWrapper
+        */
+       public function delete( $table, $conds, $fname = __METHOD__ );
+
+       /**
+        * INSERT SELECT wrapper. Takes data from a SELECT query and inserts it
+        * into another table.
+        *
+        * @param string $destTable The table name to insert into
+        * @param string|array $srcTable May be either a table name, or an array of table names
+        *    to include in a join.
+        *
+        * @param array $varMap Must be an associative array of the form
+        *    array( 'dest1' => 'source1', ...). Source items may be literals
+        *    rather than field names, but strings should be quoted with
+        *    DatabaseBase::addQuotes()
+        *
+        * @param array $conds Condition array. See $conds in DatabaseBase::select() for
+        *    the details of the format of condition arrays. May be "*" to copy the
+        *    whole table.
+        *
+        * @param string $fname The function name of the caller, from __METHOD__
+        *
+        * @param array $insertOptions Options for the INSERT part of the query, see
+        *    DatabaseBase::insert() for details.
+        * @param array $selectOptions Options for the SELECT part of the query, see
+        *    DatabaseBase::select() for details.
+        *
+        * @return ResultWrapper
+        */
+       public function insertSelect( $destTable, $srcTable, $varMap, $conds,
+               $fname = __METHOD__,
+               $insertOptions = array(), $selectOptions = array()
+       );
+
+       /**
+        * Returns true if current database backend supports ORDER BY or LIMIT for separate subqueries
+        * within the UNION construct.
+        * @return bool
+        */
+       public function unionSupportsOrderAndLimit();
+
+       /**
+        * Construct a UNION query
+        * This is used for providing overload point for other DB abstractions
+        * not compatible with the MySQL syntax.
+        * @param array $sqls SQL statements to combine
+        * @param bool $all Use UNION ALL
+        * @return string SQL fragment
+        */
+       public function unionQueries( $sqls, $all );
+
+       /**
+        * Returns an SQL expression for a simple conditional. This doesn't need
+        * to be overridden unless CASE isn't supported in your DBMS.
+        *
+        * @param string|array $cond SQL expression which will result in a boolean value
+        * @param string $trueVal SQL expression to return if true
+        * @param string $falseVal SQL expression to return if false
+        * @return string SQL fragment
+        */
+       public function conditional( $cond, $trueVal, $falseVal );
+
+       /**
+        * Returns a comand for str_replace function in SQL query.
+        * Uses REPLACE() in MySQL
+        *
+        * @param string $orig Column to modify
+        * @param string $old Column to seek
+        * @param string $new Column to replace with
+        *
+        * @return string
+        */
+       public function strreplace( $orig, $old, $new );
+
+       /**
+        * Determines how long the server has been up
+        * STUB
+        *
+        * @return int
+        */
+       public function getServerUptime();
+
+       /**
+        * Determines if the last failure was due to a deadlock
+        * STUB
+        *
+        * @return bool
+        */
+       public function wasDeadlock();
+
+       /**
+        * Determines if the last failure was due to a lock timeout
+        * STUB
+        *
+        * @return bool
+        */
+       public function wasLockTimeout();
+
+       /**
+        * Determines if the last query error was something that should be dealt
+        * with by pinging the connection and reissuing the query.
+        * STUB
+        *
+        * @return bool
+        */
+       public function wasErrorReissuable();
+
+       /**
+        * Determines if the last failure was due to the database being read-only.
+        * STUB
+        *
+        * @return bool
+        */
+       public function wasReadOnlyError();
+
+       /**
+        * Wait for the slave to catch up to a given master position.
+        *
+        * @param DBMasterPos $pos
+        * @param int $timeout The maximum number of seconds to wait for
+        *   synchronisation
+        * @return int Zero if the slave was past that position already,
+        *   greater than zero if we waited for some period of time, less than
+        *   zero if we timed out.
+        */
+       public function masterPosWait( DBMasterPos $pos, $timeout );
+
+       /**
+        * Get the replication position of this slave
+        *
+        * @return DBMasterPos|bool False if this is not a slave.
+        */
+       public function getSlavePos();
+
+       /**
+        * Get the position of this master
+        *
+        * @return DBMasterPos|bool False if this is not a master
+        */
+       public function getMasterPos();
+
+       /**
+        * Run an anonymous function as soon as there is no transaction pending.
+        * If there is a transaction and it is rolled back, then the callback is cancelled.
+        * Queries in the function will run in AUTO-COMMIT mode unless there are begin() calls.
+        * Callbacks must commit any transactions that they begin.
+        *
+        * This is useful for updates to different systems or when separate transactions are needed.
+        * For example, one might want to enqueue jobs into a system outside the database, but only
+        * after the database is updated so that the jobs will see the data when they actually run.
+        * It can also be used for updates that easily cause deadlocks if locks are held too long.
+        *
+        * @param callable $callback
+        * @since 1.20
+        */
+       public function onTransactionIdle( $callback );
+
+       /**
+        * Run an anonymous function before the current transaction commits or now if there is none.
+        * If there is a transaction and it is rolled back, then the callback is cancelled.
+        * Callbacks must not start nor commit any transactions.
+        *
+        * This is useful for updates that easily cause deadlocks if locks are held too long
+        * but where atomicity is strongly desired for these updates and some related updates.
+        *
+        * @param callable $callback
+        * @since 1.22
+        */
+       public function onTransactionPreCommitOrIdle( $callback );
+
+       /**
+        * Begin an atomic section of statements
+        *
+        * If a transaction has been started already, just keep track of the given
+        * section name to make sure the transaction is not committed pre-maturely.
+        * This function can be used in layers (with sub-sections), so use a stack
+        * to keep track of the different atomic sections. If there is no transaction,
+        * start one implicitly.
+        *
+        * The goal of this function is to create an atomic section of SQL queries
+        * without having to start a new transaction if it already exists.
+        *
+        * Atomic sections are more strict than transactions. With transactions,
+        * attempting to begin a new transaction when one is already running results
+        * in MediaWiki issuing a brief warning and doing an implicit commit. All
+        * atomic levels *must* be explicitly closed using DatabaseBase::endAtomic(),
+        * and any database transactions cannot be began or committed until all atomic
+        * levels are closed. There is no such thing as implicitly opening or closing
+        * an atomic section.
+        *
+        * @since 1.23
+        * @param string $fname
+        * @throws DBError
+        */
+       public function startAtomic( $fname = __METHOD__ );
+
+       /**
+        * Ends an atomic section of SQL statements
+        *
+        * Ends the next section of atomic SQL statements and commits the transaction
+        * if necessary.
+        *
+        * @since 1.23
+        * @see DatabaseBase::startAtomic
+        * @param string $fname
+        * @throws DBError
+        */
+       public function endAtomic( $fname = __METHOD__ );
+
+       /**
+        * Begin a transaction. If a transaction is already in progress,
+        * that transaction will be committed before the new transaction is started.
+        *
+        * Note that when the DBO_TRX flag is set (which is usually the case for web
+        * requests, but not for maintenance scripts), any previous database query
+        * will have started a transaction automatically.
+        *
+        * Nesting of transactions is not supported. Attempts to nest transactions
+        * will cause a warning, unless the current transaction was started
+        * automatically because of the DBO_TRX flag.
+        *
+        * @param string $fname
+        * @throws DBError
+        */
+       public function begin( $fname = __METHOD__ );
+
+       /**
+        * Commits a transaction previously started using begin().
+        * If no transaction is in progress, a warning is issued.
+        *
+        * Nesting of transactions is not supported.
+        *
+        * @param string $fname
+        * @param string $flush Flush flag, set to 'flush' to disable warnings about
+        *   explicitly committing implicit transactions, or calling commit when no
+        *   transaction is in progress. This will silently break any ongoing
+        *   explicit transaction. Only set the flush flag if you are sure that it
+        *   is safe to ignore these warnings in your context.
+        * @throws DBUnexpectedError
+        */
+       public function commit( $fname = __METHOD__, $flush = '' );
+
+       /**
+        * Rollback a transaction previously started using begin().
+        * If no transaction is in progress, a warning is issued.
+        *
+        * No-op on non-transactional databases.
+        *
+        * @param string $fname
+        * @param string $flush Flush flag, set to 'flush' to disable warnings about
+        *   calling rollback when no transaction is in progress. This will silently
+        *   break any ongoing explicit transaction. Only set the flush flag if you
+        *   are sure that it is safe to ignore these warnings in your context.
+        * @throws DBUnexpectedError
+        * @since 1.23 Added $flush parameter
+        */
+       public function rollback( $fname = __METHOD__, $flush = '' );
+
+       /**
+        * List all tables on the database
+        *
+        * @param string $prefix Only show tables with this prefix, e.g. mw_
+        * @param string $fname Calling function name
+        * @throws MWException
+        * @return array
+        */
+       public function listTables( $prefix = null, $fname = __METHOD__ );
+
+       /**
+        * Convert a timestamp in one of the formats accepted by wfTimestamp()
+        * to the format used for inserting into timestamp fields in this DBMS.
+        *
+        * The result is unquoted, and needs to be passed through addQuotes()
+        * before it can be included in raw SQL.
+        *
+        * @param string|int $ts
+        *
+        * @return string
+        */
+       public function timestamp( $ts = 0 );
+
+       /**
+        * Convert a timestamp in one of the formats accepted by wfTimestamp()
+        * to the format used for inserting into timestamp fields in this DBMS. If
+        * NULL is input, it is passed through, allowing NULL values to be inserted
+        * into timestamp fields.
+        *
+        * The result is unquoted, and needs to be passed through addQuotes()
+        * before it can be included in raw SQL.
+        *
+        * @param string|int $ts
+        *
+        * @return string
+        */
+       public function timestampOrNull( $ts = null );
+
+       /**
+        * Take the result from a query, and wrap it in a ResultWrapper if
+        * necessary. Boolean values are passed through as is, to indicate success
+        * of write queries or failure.
+        *
+        * Once upon a time, DatabaseBase::query() returned a bare MySQL result
+        * resource, and it was necessary to call this function to convert it to
+        * a wrapper. Nowadays, raw database objects are never exposed to external
+        * callers, so this is unnecessary in external code. For compatibility with
+        * old code, ResultWrapper objects are passed through unaltered.
+        *
+        * @param bool|ResultWrapper|resource $result
+        * @return bool|ResultWrapper
+        */
+       public function resultObject( $result );
+
+       /**
+        * Ping the server and try to reconnect if it there is no connection
+        *
+        * @return bool Success or failure
+        */
+       public function ping();
+
+       /**
+        * Get slave lag. Currently supported only by MySQL.
+        *
+        * Note that this function will generate a fatal error on many
+        * installations. Most callers should use LoadBalancer::safeGetLag()
+        * instead.
+        *
+        * @return int Database replication lag in seconds
+        */
+       public function getLag();
+
+       /**
+        * Return the maximum number of items allowed in a list, or 0 for unlimited.
+        *
+        * @return int
+        */
+       public function maxListLen();
+
+       /**
+        * Some DBMSs have a special format for inserting into blob fields, they
+        * don't allow simple quoted strings to be inserted. To insert into such
+        * a field, pass the data through this function before passing it to
+        * DatabaseBase::insert().
+        *
+        * @param string $b
+        * @return string
+        */
+       public function encodeBlob( $b );
+
+       /**
+        * Some DBMSs return a special placeholder object representing blob fields
+        * in result objects. Pass the object through this function to return the
+        * original string.
+        *
+        * @param string|Blob $b
+        * @return string
+        */
+       public function decodeBlob( $b );
+
+       /**
+        * Override database's default behavior. $options include:
+        *     'connTimeout' : Set the connection timeout value in seconds.
+        *                     May be useful for very long batch queries such as
+        *                     full-wiki dumps, where a single query reads out over
+        *                     hours or days.
+        *
+        * @param array $options
+        * @return void
+        */
+       public function setSessionOptions( array $options );
+
+       /**
+        * Set variables to be used in sourceFile/sourceStream, in preference to the
+        * ones in $GLOBALS. If an array is set here, $GLOBALS will not be used at
+        * all. If it's set to false, $GLOBALS will be used.
+        *
+        * @param bool|array $vars Mapping variable name to value.
+        */
+       public function setSchemaVars( $vars );
+
+       /**
+        * Check to see if a named lock is available (non-blocking)
+        *
+        * @param string $lockName Name of lock to poll
+        * @param string $method Name of method calling us
+        * @return bool
+        * @since 1.20
+        */
+       public function lockIsFree( $lockName, $method );
+
+       /**
+        * Acquire a named lock
+        *
+        * Named locks are not related to transactions
+        *
+        * @param string $lockName Name of lock to aquire
+        * @param string $method Name of method calling us
+        * @param int $timeout
+        * @return bool
+        */
+       public function lock( $lockName, $method, $timeout = 5 );
+
+       /**
+        * Release a lock
+        *
+        * Named locks are not related to transactions
+        *
+        * @param string $lockName Name of lock to release
+        * @param string $method Name of method calling us
+        *
+        * @return int Returns 1 if the lock was released, 0 if the lock was not established
+        * by this thread (in which case the lock is not released), and NULL if the named
+        * lock did not exist
+        */
+       public function unlock( $lockName, $method );
+
+       /**
+        * Check to see if a named lock used by lock() use blocking queues
+        *
+        * @return bool
+        * @since 1.26
+        */
+       public function namedLocksEnqueue();
+
+       /**
+        * Find out when 'infinity' is. Most DBMSes support this. This is a special
+        * keyword for timestamps in PostgreSQL, and works with CHAR(14) as well
+        * because "i" sorts after all numbers.
+        *
+        * @return string
+        */
+       public function getInfinity();
+
+       /**
+        * Encode an expiry time into the DBMS dependent format
+        *
+        * @param string $expiry Timestamp for expiry, or the 'infinity' string
+        * @return string
+        */
+       public function encodeExpiry( $expiry );
+
+       /**
+        * Decode an expiry time into a DBMS independent format
+        *
+        * @param string $expiry DB timestamp field value for expiry
+        * @param int $format TS_* constant, defaults to TS_MW
+        * @return string
+        */
+       public function decodeExpiry( $expiry, $format = TS_MW );
+
+       /**
+        * Allow or deny "big selects" for this session only. This is done by setting
+        * the sql_big_selects session variable.
+        *
+        * This is a MySQL-specific feature.
+        *
+        * @param bool|string $value True for allow, false for deny, or "default" to
+        *   restore the initial value
+        */
+       public function setBigSelects( $value = true );
+}
index 0742df2..cf522b2 100644 (file)
@@ -208,7 +208,7 @@ abstract class LBFactory {
         */
        public function hasMasterChanges() {
                $ret = false;
-               $this->forEachLB( function ( $lb ) use ( &$ret ) {
+               $this->forEachLB( function ( LoadBalancer $lb ) use ( &$ret ) {
                        $ret = $ret || $lb->hasMasterChanges();
                } );
                return $ret;
index aa305ab..92fbccd 100644 (file)
@@ -232,7 +232,7 @@ class LBFactoryMulti extends LBFactory {
        public function getMainLB( $wiki = false ) {
                $section = $this->getSectionForWiki( $wiki );
                if ( !isset( $this->mainLBs[$section] ) ) {
-                       $lb = $this->newMainLB( $wiki, $section );
+                       $lb = $this->newMainLB( $wiki );
                        $lb->parentInfo( array( 'id' => "main-$section" ) );
                        $this->chronProt->initLB( $lb );
                        $this->mainLBs[$section] = $lb;
index 7dc2da0..4975ea1 100644 (file)
@@ -64,108 +64,3 @@ class LoadMonitorNull implements LoadMonitor {
                return array_fill_keys( $serverIndexes, 0 );
        }
 }
-
-/**
- * Basic MySQL load monitor with no external dependencies
- * Uses memcached to cache the replication lag for a short time
- *
- * @ingroup Database
- */
-class LoadMonitorMySQL implements LoadMonitor {
-       /** @var LoadBalancer */
-       public $parent;
-       /** @var BagOStuff */
-       protected $srvCache;
-       /** @var BagOStuff */
-       protected $mainCache;
-
-       public function __construct( $parent ) {
-               global $wgMemc;
-
-               $this->parent = $parent;
-
-               $this->srvCache = ObjectCache::newAccelerator( array(), 'hash' );
-               $this->mainCache = $wgMemc ?: wfGetMainCache();
-       }
-
-       public function scaleLoads( &$loads, $group = false, $wiki = false ) {
-       }
-
-       public function getLagTimes( $serverIndexes, $wiki ) {
-               if ( count( $serverIndexes ) == 1 && reset( $serverIndexes ) == 0 ) {
-                       # Single server only, just return zero without caching
-                       return array( 0 => 0 );
-               }
-
-               $key = $this->getLagTimeCacheKey();
-               # Randomize TTLs to reduce stampedes (4.0 - 5.0 sec)
-               $ttl = mt_rand( 4e6, 5e6 ) / 1e6;
-               # Keep keys around longer as fallbacks
-               $staleTTL = 60;
-
-               # (a) Check the local APC cache
-               $value = $this->srvCache->get( $key );
-               if ( $value && $value['timestamp'] > ( microtime( true ) - $ttl ) ) {
-                       wfDebugLog( 'replication',  __FUNCTION__ . ": got lag times ($key) from local cache" );
-                       return $value['lagTimes']; // cache hit
-               }
-               $staleValue = $value ?: false;
-
-               # (b) Check the shared cache and backfill APC
-               $value = $this->mainCache->get( $key );
-               if ( $value && $value['timestamp'] > ( microtime( true ) - $ttl ) ) {
-                       $this->srvCache->set( $key, $value, $staleTTL );
-                       wfDebugLog( 'replication',  __FUNCTION__ . ": got lag times ($key) from main cache" );
-
-                       return $value['lagTimes']; // cache hit
-               }
-               $staleValue = $value ?: $staleValue;
-
-               # (c) Cache key missing or expired; regenerate and backfill
-               if ( $this->mainCache->lock( $key, 0, 10 ) ) {
-                       # Let this process alone update the cache value
-                       $cache = $this->mainCache;
-                       $unlocker = new ScopedCallback( function () use ( $cache, $key ) {
-                               $cache->unlock( $key );
-                       } );
-               } elseif ( $staleValue ) {
-                       # Could not acquire lock but an old cache exists, so use it
-                       return $value['lagTimes'];
-               }
-
-               $lagTimes = array();
-               foreach ( $serverIndexes as $i ) {
-                       if ( $i == 0 ) { # Master
-                               $lagTimes[$i] = 0;
-                       } elseif ( false !== ( $conn = $this->parent->getAnyOpenConnection( $i ) ) ) {
-                               $lagTimes[$i] = $conn->getLag();
-                       } elseif ( false !== ( $conn = $this->parent->openConnection( $i, $wiki ) ) ) {
-                               $lagTimes[$i] = $conn->getLag();
-                               # Close the connection to avoid sleeper connections piling up.
-                               # Note that the caller will pick one of these DBs and reconnect,
-                               # which is slightly inefficient, but this only matters for the lag
-                               # time cache miss cache, which is far less common that cache hits.
-                               $this->parent->closeConnection( $conn );
-                       }
-               }
-
-               # Add a timestamp key so we know when it was cached
-               $value = array( 'lagTimes' => $lagTimes, 'timestamp' => microtime( true ) );
-               $this->mainCache->set( $key, $value, $staleTTL );
-               $this->srvCache->set( $key, $value, $staleTTL );
-               wfDebugLog( 'replication',  __FUNCTION__ . ": re-calculated lag times ($key)" );
-
-               return $value['lagTimes'];
-       }
-
-       public function clearCaches() {
-               $key = $this->getLagTimeCacheKey();
-               $this->srvCache->delete( $key );
-               $this->mainCache->delete( $key );
-       }
-
-       private function getLagTimeCacheKey() {
-               # Lag is per-server, not per-DB, so key on the master DB name
-               return wfForeignMemcKey( $this->parent->getServerName( 0 ), '', 'lag_times' );
-       }
-}
diff --git a/includes/db/LoadMonitorMySQL.php b/includes/db/LoadMonitorMySQL.php
new file mode 100644 (file)
index 0000000..3008419
--- /dev/null
@@ -0,0 +1,124 @@
+<?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 Database
+ */
+
+/**
+ * Basic MySQL load monitor with no external dependencies
+ * Uses memcached to cache the replication lag for a short time
+ *
+ * @ingroup Database
+ */
+class LoadMonitorMySQL implements LoadMonitor {
+       /** @var LoadBalancer */
+       public $parent;
+       /** @var BagOStuff */
+       protected $srvCache;
+       /** @var BagOStuff */
+       protected $mainCache;
+
+       public function __construct( $parent ) {
+               $this->parent = $parent;
+
+               $this->srvCache = ObjectCache::newAccelerator( 'hash' );
+               $this->mainCache = wfGetMainCache();
+       }
+
+       public function scaleLoads( &$loads, $group = false, $wiki = false ) {
+       }
+
+       public function getLagTimes( $serverIndexes, $wiki ) {
+               if ( count( $serverIndexes ) == 1 && reset( $serverIndexes ) == 0 ) {
+                       # Single server only, just return zero without caching
+                       return array( 0 => 0 );
+               }
+
+               $key = $this->getLagTimeCacheKey();
+               # Randomize TTLs to reduce stampedes (4.0 - 5.0 sec)
+               $ttl = mt_rand( 4e6, 5e6 ) / 1e6;
+               # Keep keys around longer as fallbacks
+               $staleTTL = 60;
+
+               # (a) Check the local APC cache
+               $value = $this->srvCache->get( $key );
+               if ( $value && $value['timestamp'] > ( microtime( true ) - $ttl ) ) {
+                       wfDebugLog( 'replication',  __FUNCTION__ . ": got lag times ($key) from local cache" );
+                       return $value['lagTimes']; // cache hit
+               }
+               $staleValue = $value ?: false;
+
+               # (b) Check the shared cache and backfill APC
+               $value = $this->mainCache->get( $key );
+               if ( $value && $value['timestamp'] > ( microtime( true ) - $ttl ) ) {
+                       $this->srvCache->set( $key, $value, $staleTTL );
+                       wfDebugLog( 'replication',  __FUNCTION__ . ": got lag times ($key) from main cache" );
+
+                       return $value['lagTimes']; // cache hit
+               }
+               $staleValue = $value ?: $staleValue;
+
+               # (c) Cache key missing or expired; regenerate and backfill
+               if ( $this->mainCache->lock( $key, 0, 10 ) ) {
+                       # Let this process alone update the cache value
+                       $cache = $this->mainCache;
+                       /** @noinspection PhpUnusedLocalVariableInspection */
+                       $unlocker = new ScopedCallback( function () use ( $cache, $key ) {
+                               $cache->unlock( $key );
+                       } );
+               } elseif ( $staleValue ) {
+                       # Could not acquire lock but an old cache exists, so use it
+                       return $staleValue['lagTimes'];
+               }
+
+               $lagTimes = array();
+               foreach ( $serverIndexes as $i ) {
+                       if ( $i == 0 ) { # Master
+                               $lagTimes[$i] = 0;
+                       } elseif ( false !== ( $conn = $this->parent->getAnyOpenConnection( $i ) ) ) {
+                               $lagTimes[$i] = $conn->getLag();
+                       } elseif ( false !== ( $conn = $this->parent->openConnection( $i, $wiki ) ) ) {
+                               $lagTimes[$i] = $conn->getLag();
+                               # Close the connection to avoid sleeper connections piling up.
+                               # Note that the caller will pick one of these DBs and reconnect,
+                               # which is slightly inefficient, but this only matters for the lag
+                               # time cache miss cache, which is far less common that cache hits.
+                               $this->parent->closeConnection( $conn );
+                       }
+               }
+
+               # Add a timestamp key so we know when it was cached
+               $value = array( 'lagTimes' => $lagTimes, 'timestamp' => microtime( true ) );
+               $this->mainCache->set( $key, $value, $staleTTL );
+               $this->srvCache->set( $key, $value, $staleTTL );
+               wfDebugLog( 'replication',  __FUNCTION__ . ": re-calculated lag times ($key)" );
+
+               return $value['lagTimes'];
+       }
+
+       public function clearCaches() {
+               $key = $this->getLagTimeCacheKey();
+               $this->srvCache->delete( $key );
+               $this->mainCache->delete( $key );
+       }
+
+       private function getLagTimeCacheKey() {
+               # Lag is per-server, not per-DB, so key on the master DB name
+               return wfGlobalCacheKey( 'lag-times', $this->parent->getServerName( 0 ) );
+       }
+}
index 6bd6411..0f4c648 100644 (file)
@@ -21,7 +21,9 @@
 namespace MediaWiki\Logger;
 
 use DateTimeZone;
+use Exception;
 use MWDebug;
+use MWExceptionHandler;
 use Psr\Log\AbstractLogger;
 use Psr\Log\LogLevel;
 use UDPTransport;
@@ -39,7 +41,7 @@ use UDPTransport;
  * See documentation in DefaultSettings.php for detailed explanations of each
  * variable.
  *
- * @see \MediaWiki\Logger\LoggerFactory
+ * @see \\MediaWiki\\Logger\\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -52,10 +54,10 @@ class LegacyLogger extends AbstractLogger {
        protected $channel;
 
        /**
-        * Convert Psr\Log\LogLevel constants into int for sane comparisons
+        * Convert Psr\\Log\\LogLevel constants into int for sane comparisons
         * These are the same values that Monlog uses
         *
-        * @var array
+        * @var array $levelMapping
         */
        protected static $levelMapping = array(
                LogLevel::DEBUG => 100,
@@ -99,7 +101,7 @@ class LegacyLogger extends AbstractLogger {
         *
         * @param string $channel
         * @param string $message
-        * @param string|int $level Psr\Log\LogEvent constant or Monlog level int
+        * @param string|int $level Psr\\Log\\LogEvent constant or Monlog level int
         * @param array $context
         * @return bool True if message should be sent to disk/network, false
         * otherwise
@@ -167,7 +169,7 @@ class LegacyLogger extends AbstractLogger {
         * @return string
         */
        public static function format( $channel, $message, $context ) {
-               global $wgDebugLogGroups;
+               global $wgDebugLogGroups, $wgLogExceptionBacktrace;
 
                if ( $channel === 'wfDebug' ) {
                        $text = self::formatAsWfDebug( $channel, $message, $context );
@@ -215,6 +217,25 @@ class LegacyLogger extends AbstractLogger {
                        $text = self::formatAsWfDebugLog( $channel, $message, $context );
                }
 
+               // Append stacktrace of exception if available
+               if ( $wgLogExceptionBacktrace && isset( $context['exception'] ) ) {
+                       $e = $context['exception'];
+                       $backtrace = false;
+
+                       if ( $e instanceof Exception ) {
+                               $backtrace = MWExceptionHandler::getRedactedTrace( $e );
+
+                       } elseif ( is_array( $e ) && isset( $e['trace'] ) ) {
+                               // Exception has already been unpacked as structured data
+                               $backtrace = $e['trace'];
+                       }
+
+                       if ( $backtrace ) {
+                               $text .= MWExceptionHandler::prettyPrintTrace( $backtrace ) .
+                                       "\n";
+                       }
+               }
+
                return self::interpolate( $text, $context );
        }
 
@@ -301,7 +322,7 @@ class LegacyLogger extends AbstractLogger {
                if ( strpos( $message, '{' ) !== false ) {
                        $replace = array();
                        foreach ( $context as $key => $val ) {
-                               $replace['{' . $key . '}'] = $val;
+                               $replace['{' . $key . '}'] = self::flatten( $val );
                        }
                        $message = strtr( $message, $replace );
                }
@@ -309,6 +330,66 @@ class LegacyLogger extends AbstractLogger {
        }
 
 
+       /**
+        * Convert a logging context element to a string suitable for
+        * interpolation.
+        *
+        * @param mixed $item
+        * @return string
+        */
+       protected static function flatten( $item ) {
+               if ( null === $item ) {
+                       return '[Null]';
+               }
+
+               if ( is_bool( $item ) ) {
+                       return $item ? 'true' : 'false';
+               }
+
+               if ( is_float( $item ) ) {
+                       if ( is_infinite( $item ) ) {
+                               return ( $item > 0 ? '' : '-' ) . 'INF';
+                       }
+                       if ( is_nan( $item ) ) {
+                               return 'NaN';
+                       }
+                       return $item;
+               }
+
+               if ( is_scalar( $item ) ) {
+                       return (string) $item;
+               }
+
+               if ( is_array( $item ) ) {
+                       return '[Array(' . count( $item ) . ')]';
+               }
+
+               if ( $item instanceof \DateTime ) {
+                       return $item->format( 'c' );
+               }
+
+               if ( $item instanceof Exception ) {
+                       return '[Exception ' . get_class( $item ) . '( ' .
+                               $item->getFile() . ':' . $item->getLine() . ') ' .
+                               $item->getMessage() . ']';
+               }
+
+               if ( is_object( $item ) ) {
+                       if ( method_exists( $item, '__toString' ) ) {
+                               return (string) $item;
+                       }
+
+                       return '[Object ' . get_class( $item ) . ']';
+               }
+
+               if ( is_resource( $item ) ) {
+                       return '[Resource ' . get_resource_type( $item ) . ']';
+               }
+
+               return '[Unknown ' . gettype( $item ) . ']';
+       }
+
+
        /**
         * Select the appropriate log output destination for the given log event.
         *
index 1bf39e4..6a7f1d0 100644 (file)
@@ -30,7 +30,7 @@ namespace MediaWiki\Logger;
  * );
  * @endcode
  *
- * @see \MediaWiki\Logger\LoggerFactory
+ * @see \\MediaWiki\\Logger\\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -47,7 +47,7 @@ class LegacySpi implements Spi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return \Psr\Log\LoggerInterface Logger instance
+        * @return \\Psr\\Log\\LoggerInterface Logger instance
         */
        public function getLogger( $channel ) {
                if ( !isset( $this->singletons[$channel] ) ) {
index f6699ec..0b6965f 100644 (file)
@@ -25,7 +25,7 @@ use ObjectFactory;
 /**
  * PSR-3 logger instance factory.
  *
- * Creation of \Psr\Log\LoggerInterface instances is managed via the
+ * Creation of \\Psr\\Log\\LoggerInterface instances is managed via the
  * LoggerFactory::getInstance() static method which in turn delegates to the
  * currently registered service provider.
  *
@@ -38,7 +38,7 @@ use ObjectFactory;
  * $wgMWLoggerDefaultSpi is expected to be an array usable by
  * ObjectFactory::getObjectFromSpec() to create a class.
  *
- * @see \MediaWiki\Logger\Spi
+ * @see \\MediaWiki\\Logger\\Spi
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -53,10 +53,10 @@ class LoggerFactory {
 
 
        /**
-        * Register a service provider to create new \Psr\Log\LoggerInterface
+        * Register a service provider to create new \\Psr\\Log\\LoggerInterface
         * instances.
         *
-        * @param \MediaWiki\Logger\Spi $provider Provider to register
+        * @param \\MediaWiki\\Logger\\Spi $provider Provider to register
         */
        public static function registerProvider( Spi $provider ) {
                self::$spi = $provider;
@@ -71,7 +71,7 @@ class LoggerFactory {
         * Spi registration. $wgMWLoggerDefaultSpi is expected to be an
         * array usable by ObjectFactory::getObjectFromSpec() to create a class.
         *
-        * @return \MediaWiki\Logger\Spi
+        * @return \\MediaWiki\\Logger\\Spi
         * @see registerProvider()
         * @see ObjectFactory::getObjectFromSpec()
         */
@@ -91,7 +91,7 @@ class LoggerFactory {
         * Get a named logger instance from the currently configured logger factory.
         *
         * @param string $channel Logger channel (name)
-        * @return \Psr\Log\LoggerInterface
+        * @return \\Psr\\Log\\LoggerInterface
         */
        public static function getInstance( $channel ) {
                if ( !interface_exists( '\Psr\Log\LoggerInterface' ) ) {
index a07fdc4..7b54861 100644 (file)
@@ -30,7 +30,7 @@ use ObjectFactory;
  * Configured using an array of configuration data with the keys 'loggers',
  * 'processors', 'handlers' and 'formatters'.
  *
- * The ['loggers']['@default'] configuration will be used to create loggers
+ * The ['loggers']['\@default'] configuration will be used to create loggers
  * for any channel that isn't explicitly named in the 'loggers' configuration
  * section.
  *
@@ -129,7 +129,25 @@ class MonologSpi implements Spi {
         * @param array $config Configuration data.
         */
        public function __construct( array $config ) {
-               $this->config = $config;
+               $this->config = array();
+               $this->mergeConfig( $config );
+       }
+
+
+       /**
+        * Merge additional configuration data into the configuration.
+        *
+        * @since 1.26
+        * @param array $config Configuration data.
+        */
+       public function mergeConfig( array $config ) {
+               foreach ( $config as $key => $value ) {
+                       if ( isset( $this->config[$key] ) ) {
+                               $this->config[$key] = array_merge( $this->config[$key], $value );
+                       } else {
+                               $this->config[$key] = $value;
+                       }
+               }
                $this->reset();
        }
 
@@ -158,7 +176,7 @@ class MonologSpi implements Spi {
         * name will return the cached instance.
         *
         * @param string $channel Logging channel
-        * @return \Psr\Log\LoggerInterface Logger instance
+        * @return \\Psr\\Log\\LoggerInterface Logger instance
         */
        public function getLogger( $channel ) {
                if ( !isset( $this->singletons['loggers'][$channel] ) ) {
@@ -180,7 +198,7 @@ class MonologSpi implements Spi {
         * Create a logger.
         * @param string $channel Logger channel
         * @param array $spec Configuration
-        * @return \Monolog\Logger
+        * @return \\Monolog\\Logger
         */
        protected function createLogger( $channel, $spec ) {
                $obj = new Logger( $channel );
@@ -218,7 +236,7 @@ class MonologSpi implements Spi {
        /**
         * Create or return cached handler.
         * @param string $name Processor name
-        * @return \Monolog\Handler\HandlerInterface
+        * @return \\Monolog\\Handler\\HandlerInterface
         */
        public function getHandler( $name ) {
                if ( !isset( $this->singletons['handlers'][$name] ) ) {
@@ -238,7 +256,7 @@ class MonologSpi implements Spi {
        /**
         * Create or return cached formatter.
         * @param string $name Formatter name
-        * @return \Monolog\Formatter\FormatterInterface
+        * @return \\Monolog\\Formatter\\FormatterInterface
         */
        public function getFormatter( $name ) {
                if ( !isset( $this->singletons['formatters'][$name] ) ) {
index a82d2c4..c9c7482 100644 (file)
@@ -23,7 +23,7 @@ namespace MediaWiki\Logger;
 use Psr\Log\NullLogger;
 
 /**
- * LoggerFactory service provider that creates \Psr\Log\NullLogger
+ * LoggerFactory service provider that creates \\Psr\\Log\\NullLogger
  * instances. A NullLogger silently discards all log events sent to it.
  *
  * Usage:
@@ -33,7 +33,7 @@ use Psr\Log\NullLogger;
  * );
  * @endcode
  *
- * @see \MediaWiki\Logger\LoggerFactory
+ * @see \\MediaWiki\\Logger\\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -41,7 +41,7 @@ use Psr\Log\NullLogger;
 class NullSpi implements Spi {
 
        /**
-        * @var \Psr\Log\NullLogger $singleton
+        * @var \\Psr\\Log\\NullLogger $singleton
         */
        protected $singleton;
 
@@ -55,7 +55,7 @@ class NullSpi implements Spi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return \Psr\Log\NullLogger Logger instance
+        * @return \\Psr\\Log\\NullLogger Logger instance
         */
        public function getLogger( $channel ) {
                return $this->singleton;
index 044789f..51818a3 100644 (file)
 namespace MediaWiki\Logger;
 
 /**
- * Service provider interface for \Psr\Log\LoggerInterface implementation
+ * Service provider interface for \\Psr\\Log\\LoggerInterface implementation
  * libraries.
  *
  * MediaWiki can be configured to use a class implementing this interface to
- * create new \Psr\Log\LoggerInterface instances via either the
+ * create new \\Psr\\Log\\LoggerInterface instances via either the
  * $wgMWLoggerDefaultSpi global variable or code that constructs an instance
  * and registers it via the LoggerFactory::registerProvider() static method.
  *
- * @see \MediaWiki\Logger\LoggerFactory
+ * @see \\MediaWiki\\Logger\\LoggerFactory
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
@@ -40,7 +40,7 @@ interface Spi {
         * Get a logger instance.
         *
         * @param string $channel Logging channel
-        * @return \Psr\Log\LoggerInterface Logger instance
+        * @return \\Psr\\Log\\LoggerInterface Logger instance
         */
        public function getLogger( $channel );
 
index 9ec15cb..42e7cab 100644 (file)
@@ -26,12 +26,12 @@ use Monolog\Formatter\NormalizerFormatter;
 /**
  * Log message formatter that mimics the legacy log message formatting of
  * `wfDebug`, `wfDebugLog`, `wfLogDBError` and `wfErrorLog` global functions by
- * delegating the formatting to \MediaWiki\Logger\LegacyLogger.
+ * delegating the formatting to \\MediaWiki\\Logger\\LegacyLogger.
  *
  * @since 1.25
  * @author Bryan Davis <bd808@wikimedia.org>
  * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
- * @see \MediaWiki\Logger\LegacyLogger
+ * @see \\MediaWiki\\Logger\\LegacyLogger
  */
 class LegacyFormatter extends NormalizerFormatter {
 
diff --git a/includes/debug/logger/monolog/LineFormatter.php b/includes/debug/logger/monolog/LineFormatter.php
new file mode 100644 (file)
index 0000000..2ba7a53
--- /dev/null
@@ -0,0 +1,177 @@
+<?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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use Exception;
+use Monolog\Formatter\LineFormatter as MonologLineFormatter;
+use MWExceptionHandler;
+
+/**
+ * Formats incoming records into a one-line string.
+ *
+ * An 'exeception' in the log record's context will be treated specially.
+ * It will be output for an '%exception%' placeholder in the format and
+ * excluded from '%context%' output if the '%exception%' placeholder is
+ * present.
+ *
+ * Exceptions that are logged with this formatter will optional have their
+ * stack traces appended. If that is done, MWExceptionHandler::redactedTrace()
+ * will be used to redact the trace information.
+ *
+ * @since 1.26
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2015 Bryan Davis and Wikimedia Foundation.
+ */
+class LineFormatter extends MonologLineFormatter {
+
+       /**
+        * @param string $format The format of the message
+        * @param string $dateFormat The format of the timestamp: one supported by DateTime::format
+        * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries
+        * @param bool $ignoreEmptyContextAndExtra
+        * @param bool $includeStacktraces
+        */
+       public function __construct(
+               $format = null, $dateFormat = null, $allowInlineLineBreaks = false,
+               $ignoreEmptyContextAndExtra = false, $includeStacktraces = false
+       ) {
+               parent::__construct(
+                       $format, $dateFormat, $allowInlineLineBreaks,
+                       $ignoreEmptyContextAndExtra
+               );
+               $this->includeStacktraces( $includeStacktraces );
+       }
+
+
+       /**
+        * {@inheritdoc}
+        */
+       public function format( array $record ) {
+               // Drop the 'private' flag from the context
+               unset( $record['context']['private'] );
+
+               // Handle exceptions specially: pretty format and remove from context
+               // Will be output for a '%exception%' placeholder in format
+               $prettyException = '';
+               if ( isset( $record['context']['exception'] ) &&
+                       strpos( $this->format, '%exception%' ) !== false
+               ) {
+                       $e = $record['context']['exception'];
+                       unset( $record['context']['exception'] );
+
+                       if ( $e instanceof Exception ) {
+                               $prettyException = $this->normalizeException( $e );
+                       } elseif ( is_array( $e ) ) {
+                               $prettyException = $this->normalizeExceptionArray( $e );
+                       } else {
+                               $prettyException = $this->stringify( $e );
+                       }
+               }
+
+               $output = parent::format( $record );
+
+               if ( strpos( $output, '%exception%' ) !== false ) {
+                       $output = str_replace( '%exception%', $prettyException, $output );
+               }
+               return $output;
+       }
+
+
+       /**
+        * Convert an Exception to a string.
+        *
+        * @param Exception $e
+        * @return string
+        */
+       protected function normalizeException( Exception $e ) {
+               return $this->normalizeExceptionArray( $this->exceptionAsArray( $e ) );
+       }
+
+
+       /**
+        * Convert an exception to an array of structured data.
+        *
+        * @param Exception $e
+        * @return array
+        */
+       protected function exceptionAsArray( Exception $e ) {
+               $out = array(
+                       'class' => get_class( $e ),
+                       'message' => $e->getMessage(),
+                       'code' => $e->getCode(),
+                       'file' => $e->getFile(),
+                       'line' => $e->getLine(),
+                       'trace' => MWExceptionHandler::redactTrace( $e->getTrace() ),
+               );
+
+               $prev = $e->getPrevious();
+               if ( $prev ) {
+                       $out['previous'] = $this->exceptionAsArray( $prev );
+               }
+
+               return $out;
+       }
+
+
+       /**
+        * Convert an array of Exception data to a string.
+        *
+        * @param array $e
+        * @return string
+        */
+       protected function normalizeExceptionArray( array $e ) {
+               $defaults = array(
+                       'class' => 'Unknown',
+                       'file' => 'unknown',
+                       'line' => null,
+                       'message' => 'unknown',
+                       'trace' => array(),
+               );
+               $e = array_merge( $defaults, $e );
+
+               $str = "\n[Exception {$e['class']}] (" .
+                       "{$e['file']}:{$e['line']}) {$e['message']}";
+
+               if ( $this->includeStacktraces && $e['trace'] ) {
+                       $str .= "\n" .
+                               MWExceptionHandler::prettyPrintTrace( $e['trace'], '  ' );
+               }
+
+               if ( isset( $e['previous'] ) ) {
+                       $prev = $e['previous'];
+                       while ( $prev ) {
+                               $prev = array_merge( $defaults, $prev );
+                               $str .= "\nCaused by: [Exception {$prev['class']}] (" .
+                                       "{$prev['file']}:{$prev['line']}) {$prev['message']}";
+
+                               if ( $this->includeStacktraces && $prev['trace'] ) {
+                                       $str .= "\n" .
+                                               MWExceptionHandler::prettyPrintTrace(
+                                                       $prev['trace'], '  '
+                                               );
+                               }
+
+                               $prev = isset( $prev['previous'] ) ? $prev['previous'] : null;
+                       }
+               }
+               return $str;
+       }
+}
index 1681dc0..d4a240f 100644 (file)
  * @file
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Handler class for MWExceptions
  * @ingroup Exception
  */
 class MWExceptionHandler {
 
+       /**
+        * @var string $reservedMemory
+        */
        protected static $reservedMemory;
+       /**
+        * @var array $fatalErrorTypes
+        */
        protected static $fatalErrorTypes = array(
                E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR,
                /* HHVM's FATAL_ERROR level */ 16777217,
        );
+       /**
+        * @var bool $handledFatalCallback
+        */
+       protected static $handledFatalCallback = false;
 
        /**
         * Install handlers with PHP.
         */
        public static function installHandler() {
-               set_exception_handler( array( 'MWExceptionHandler', 'handleException' ) );
-               set_error_handler( array( 'MWExceptionHandler', 'handleError' ) );
+               set_exception_handler( 'MWExceptionHandler::handleException' );
+               set_error_handler( 'MWExceptionHandler::handleError' );
 
                // Reserve 16k of memory so we can report OOM fatals
                self::$reservedMemory = str_repeat( ' ', 16384 );
-               register_shutdown_function(
-                       array( 'MWExceptionHandler', 'handleFatalError' )
-               );
+               register_shutdown_function( 'MWExceptionHandler::handleFatalError' );
        }
 
        /**
@@ -86,7 +96,7 @@ class MWExceptionHandler {
                        $message = "Exception encountered, of type \"" . get_class( $e ) . "\"";
 
                        if ( $wgShowExceptionDetails ) {
-                               $message .= "\n" . MWExceptionHandler::getLogMessage( $e ) . "\nBacktrace:\n" .
+                               $message .= "\n" . self::getLogMessage( $e ) . "\nBacktrace:\n" .
                                        self::getRedactedTraceAsString( $e ) . "\n";
                        }
 
@@ -127,10 +137,11 @@ class MWExceptionHandler {
        public static function rollbackMasterChangesAndLog( Exception $e ) {
                $factory = wfGetLBFactory();
                if ( $factory->hasMasterChanges() ) {
-                       wfDebugLog( 'Bug56269',
+                       $logger = LoggerFactory::getInstance( 'Bug56269' );
+                       $logger->warning(
                                'Exception thrown with an uncommited database transaction: ' .
-                                       MWExceptionHandler::getLogMessage( $e ) . "\n" .
-                                       $e->getTraceAsString()
+                               self::getLogMessage( $e ),
+                               self::getLogContext( $e )
                        );
                        $factory->rollbackMasterChanges();
                }
@@ -173,24 +184,36 @@ class MWExceptionHandler {
        }
 
        /**
+        * Handler for set_error_handler() callback notifications.
+        *
+        * Receive a callback from the interpreter for a raised error, create an
+        * ErrorException, and log the exception to the 'error' logging
+        * channel(s). If the raised error is a fatal error type (only under HHVM)
+        * delegate to handleFatalError() instead.
+        *
         * @since 1.25
+        *
         * @param int $level Error level raised
         * @param string $message
         * @param string $file
         * @param int $line
+        *
+        * @see logError()
         */
-       public static function handleError( $level, $message, $file = null, $line = null ) {
-               // Map error constant to error name (reverse-engineer PHP error reporting)
-               $channel = 'error';
+       public static function handleError(
+               $level, $message, $file = null, $line = null
+       ) {
+               if ( in_array( $level, self::$fatalErrorTypes ) ) {
+                       return call_user_func_array(
+                               'MWExceptionHandler::handleFatalError', func_get_args()
+                       );
+               }
+
+               // Map error constant to error name (reverse-engineer PHP error
+               // reporting)
                switch ( $level ) {
-                       case E_ERROR:
-                       case E_CORE_ERROR:
-                       case E_COMPILE_ERROR:
-                       case E_USER_ERROR:
                        case E_RECOVERABLE_ERROR:
-                       case E_PARSE:
                                $levelName = 'Error';
-                               $channel = 'fatal';
                                break;
                        case E_WARNING:
                        case E_CORE_WARNING:
@@ -209,17 +232,13 @@ class MWExceptionHandler {
                        case E_USER_DEPRECATED:
                                $levelName = 'Deprecated';
                                break;
-                       case /* HHVM's FATAL_ERROR */ 16777217:
-                               $levelName = 'Fatal';
-                               $channel = 'fatal';
-                               break;
                        default:
                                $levelName = 'Unknown error';
                                break;
                }
 
                $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
-               self::logError( $e, $channel );
+               self::logError( $e, 'error' );
 
                // This handler is for logging only. Return false will instruct PHP
                // to continue regular handling.
@@ -228,42 +247,101 @@ class MWExceptionHandler {
 
 
        /**
-        * Look for a fatal error as the cause of the request termination and log
-        * as an exception.
+        * Dual purpose callback used as both a set_error_handler() callback and
+        * a registered shutdown function. Receive a callback from the interpreter
+        * for a raised error or system shutdown, check for a fatal error, and log
+        * to the 'fatal' logging channel.
         *
         * Special handling is included for missing class errors as they may
         * indicate that the user needs to install 3rd-party libraries via
         * Composer or other means.
         *
         * @since 1.25
+        *
+        * @param int $level Error level raised
+        * @param string $message Error message
+        * @param string $file File that error was raised in
+        * @param int $line Line number error was raised at
+        * @param array $context Active symbol table point of error
+        * @param array $trace Backtrace at point of error (undocumented HHVM
+        *     feature)
+        * @return bool Always returns false
         */
-       public static function handleFatalError() {
+       public static function handleFatalError(
+               $level = null, $message = null, $file = null, $line = null,
+               $context = null, $trace = null
+       ) {
+               // Free reserved memory so that we have space to process OOM
+               // errors
                self::$reservedMemory = null;
-               $lastError = error_get_last();
 
-               if ( $lastError &&
-                       isset( $lastError['type'] ) &&
-                       in_array( $lastError['type'], self::$fatalErrorTypes )
-               ) {
-                       $msg = "Fatal Error: {$lastError['message']}";
-                       // HHVM: Class undefined: foo
-                       // PHP5: Class 'foo' not found
-                       if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/",
-                               $lastError['message']
-                       ) ) {
-                               // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
-                               $msg = <<<TXT
+               if ( $level === null ) {
+                       // Called as a shutdown handler, get data from error_get_last()
+                       if ( static::$handledFatalCallback ) {
+                               // Already called once (probably as an error handler callback
+                               // under HHVM) so don't log again.
+                               return false;
+                       }
+
+                       $lastError = error_get_last();
+                       if ( $lastError !== null ) {
+                               $level = $lastError['type'];
+                               $message = $lastError['message'];
+                               $file = $lastError['file'];
+                               $line = $lastError['line'];
+                       } else {
+                               $level = 0;
+                               $message = '';
+                       }
+               }
+
+               if ( !in_array( $level, self::$fatalErrorTypes ) ) {
+                       // Only interested in fatal errors, others should have been
+                       // handled by MWExceptionHandler::handleError
+                       return false;
+               }
+
+               $msg = "[{exception_id}] PHP Fatal Error: {$message}";
+
+               // Look at message to see if this is a class not found failure
+               // HHVM: Class undefined: foo
+               // PHP5: Class 'foo' not found
+               if ( preg_match( "/Class (undefined: \w+|'\w+' not found)/", $msg ) ) {
+                       // @codingStandardsIgnoreStart Generic.Files.LineLength.TooLong
+                       $msg = <<<TXT
 {$msg}
 
 MediaWiki or an installed extension requires this class but it is not embedded directly in MediaWiki's git repository and must be installed separately by the end user.
 
 Please see <a href="https://www.mediawiki.org/wiki/Download_from_Git#Fetch_external_libraries">mediawiki.org</a> for help on installing the required components.
 TXT;
-                               // @codingStandardsIgnoreEnd
-                       }
-                       $e = new ErrorException( $msg, 0, $lastError['type'] );
-                       self::logError( $e, 'fatal' );
+                       // @codingStandardsIgnoreEnd
                }
+
+               // We can't just create an exception and log it as it is likely that
+               // the interpreter has unwound the stack already. If that is true the
+               // stacktrace we would get would be functionally empty. If however we
+               // have been called as an error handler callback *and* HHVM is in use
+               // we will have been provided with a useful stacktrace that we can
+               // log.
+               $trace = $trace ?: debug_backtrace();
+               $logger = LoggerFactory::getInstance( 'fatal' );
+               $logger->error( $msg, array(
+                       'exception' => array(
+                               'class' => 'ErrorException',
+                               'message' => "PHP Fatal Error: {$message}",
+                               'code' => $level,
+                               'file' => $file,
+                               'line' => $line,
+                               'trace' => static::redactTrace( $trace ),
+                       ),
+                       'exception_id' => wfRandomString( 8 ),
+               ) );
+
+               // Remember call so we don't double process via HHVM's fatal
+               // notifications and the shutdown hook behavior
+               static::$handledFatalCallback = true;
+               return false;
        }
 
        /**
@@ -274,18 +352,32 @@ TXT;
         *
         * @param Exception $e
         * @return string
+        * @see prettyPrintTrace()
         */
        public static function getRedactedTraceAsString( Exception $e ) {
+               return self::prettyPrintTrace( self::getRedactedTrace( $e ) );
+       }
+
+       /**
+        * Generate a string representation of a stacktrace.
+        *
+        * @param array $trace
+        * @param string $pad Constant padding to add to each line of trace
+        * @return string
+        * @since 1.26
+        */
+       public static function prettyPrintTrace( array $trace, $pad = '' ) {
                $text = '';
 
-               foreach ( self::getRedactedTrace( $e ) as $level => $frame ) {
+               foreach ( $trace as $level => $frame ) {
                        if ( isset( $frame['file'] ) && isset( $frame['line'] ) ) {
-                               $text .= "#{$level} {$frame['file']}({$frame['line']}): ";
+                               $text .= "{$pad}#{$level} {$frame['file']}({$frame['line']}): ";
                        } else {
-                               // 'file' and 'line' are unset for calls via call_user_func (bug 55634)
-                               // This matches behaviour of Exception::getTraceAsString to instead
-                               // display "[internal function]".
-                               $text .= "#{$level} [internal function]: ";
+                               // 'file' and 'line' are unset for calls via call_user_func
+                               // (bug 55634) This matches behaviour of
+                               // Exception::getTraceAsString to instead display "[internal
+                               // function]".
+                               $text .= "{$pad}#{$level} [internal function]: ";
                        }
 
                        if ( isset( $frame['class'] ) ) {
@@ -302,7 +394,7 @@ TXT;
                }
 
                $level = $level + 1;
-               $text .= "#{$level} {main}";
+               $text .= "{$pad}#{$level} {main}";
 
                return $text;
        }
@@ -319,6 +411,20 @@ TXT;
         * @return array
         */
        public static function getRedactedTrace( Exception $e ) {
+               return static::redactTrace( $e->getTrace() );
+       }
+
+       /**
+        * Redact a stacktrace generated by Exception::getTrace(),
+        * debug_backtrace() or similar means. Replaces each element in each
+        * frame's argument array with the name of its class (if the element is an
+        * object) or its type (if the element is a PHP primitive).
+        *
+        * @since 1.26
+        * @param array $trace Stacktrace
+        * @return array Stacktrace with arugment values converted to data types
+        */
+       public static function redactTrace( array $trace ) {
                return array_map( function ( $frame ) {
                        if ( isset( $frame['args'] ) ) {
                                $frame['args'] = array_map( function ( $arg ) {
@@ -326,7 +432,7 @@ TXT;
                                }, $frame['args'] );
                        }
                        return $frame;
-               }, $e->getTrace() );
+               }, $trace );
        }
 
        /**
@@ -379,6 +485,65 @@ TXT;
                return "[$id] $url   $type from line $line of $file: $message";
        }
 
+       /**
+        * Get a PSR-3 log event context from an Exception.
+        *
+        * Creates a structured array containing information about the provided
+        * exception that can be used to augment a log message sent to a PSR-3
+        * logger.
+        *
+        * @param Exception $e
+        * @return array
+        */
+       public static function getLogContext( Exception $e ) {
+               return array(
+                       'exception' => $e,
+                       'exception_id' => static::getLogId( $e ),
+               );
+       }
+
+       /**
+        * Get a structured representation of an Exception.
+        *
+        * Returns an array of structured data (class, message, code, file,
+        * backtrace) derived from the given exception. The backtrace information
+        * will be redacted as per getRedactedTraceAsArray().
+        *
+        * @param Exception $e
+        * @return array
+        * @since 1.26
+        */
+       public static function getStructuredExceptionData( Exception $e ) {
+               global $wgLogExceptionBacktrace;
+               $data = array(
+                       'id' => self::getLogId( $e ),
+                       'type' => get_class( $e ),
+                       'file' => $e->getFile(),
+                       'line' => $e->getLine(),
+                       'message' => $e->getMessage(),
+                       'code' => $e->getCode(),
+                       'url' => self::getURL() ?: null,
+               );
+
+               if ( $e instanceof ErrorException &&
+                       ( error_reporting() & $e->getSeverity() ) === 0
+               ) {
+                       // Flag surpressed errors
+                       $data['suppressed'] = true;
+               }
+
+               if ( $wgLogExceptionBacktrace ) {
+                       $data['backtrace'] = self::getRedactedTrace( $e );
+               }
+
+               $previous = $e->getPrevious();
+               if ( $previous !== null ) {
+                       $data['previous'] = self::getStructuredExceptionData( $previous );
+               }
+
+               return $data;
+       }
+
        /**
         * Serialize an Exception object to JSON.
         *
@@ -433,33 +598,8 @@ TXT;
         * @return string|false JSON string if successful; false upon failure
         */
        public static function jsonSerializeException( Exception $e, $pretty = false, $escaping = 0 ) {
-               global $wgLogExceptionBacktrace;
-
-               $exceptionData = array(
-                       'id' => self::getLogId( $e ),
-                       'type' => get_class( $e ),
-                       'file' => $e->getFile(),
-                       'line' => $e->getLine(),
-                       'message' => $e->getMessage(),
-               );
-
-               if ( $e instanceof ErrorException && ( error_reporting() & $e->getSeverity() ) === 0 ) {
-                       // Flag surpressed errors
-                       $exceptionData['suppressed'] = true;
-               }
-
-               // Because MediaWiki is first and foremost a web application, we set a
-               // 'url' key unconditionally, but set it to null if the exception does
-               // not occur in the context of a web request, as a way of making that
-               // fact visible and explicit.
-               $exceptionData['url'] = self::getURL() ?: null;
-
-               if ( $wgLogExceptionBacktrace ) {
-                       // Argument values may not be serializable, so redact them.
-                       $exceptionData['backtrace'] = self::getRedactedTrace( $e );
-               }
-
-               return FormatJson::encode( $exceptionData, $pretty, $escaping );
+               $data = self::getStructuredExceptionData( $e );
+               return FormatJson::encode( $data, $pretty, $escaping );
        }
 
        /**
@@ -472,19 +612,17 @@ TXT;
         * @param Exception $e
         */
        public static function logException( Exception $e ) {
-               global $wgLogExceptionBacktrace;
-
                if ( !( $e instanceof MWException ) || $e->isLoggable() ) {
-                       $log = self::getLogMessage( $e );
-                       if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( 'exception', $log . "\n" . $e->getTraceAsString() );
-                       } else {
-                               wfDebugLog( 'exception', $log );
-                       }
+                       $logger = LoggerFactory::getInstance( 'exception' );
+                       $logger->error(
+                               self::getLogMessage( $e ),
+                               self::getLogContext( $e )
+                       );
 
                        $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
                        if ( $json !== false ) {
-                               wfDebugLog( 'exception-json', $json, 'private' );
+                               $logger = LoggerFactory::getInstance( 'exception-json' );
+                               $logger->error( $json, array( 'private' => true ) );
                        }
 
                        Hooks::run( 'LogException', array( $e, false ) );
@@ -499,24 +637,23 @@ TXT;
         * @param string $channel
        */
        protected static function logError( ErrorException $e, $channel ) {
-               global $wgLogExceptionBacktrace;
-
                // The set_error_handler callback is independent from error_reporting.
-               // Filter out unwanted errors manually (e.g. when MediaWiki\suppressWarnings is active).
+               // Filter out unwanted errors manually (e.g. when
+               // MediaWiki\suppressWarnings is active).
                $suppressed = ( error_reporting() & $e->getSeverity() ) === 0;
                if ( !$suppressed ) {
-                       $log = self::getLogMessage( $e );
-                       if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( $channel, $log . "\n" . $e->getTraceAsString() );
-                       } else {
-                               wfDebugLog( $channel, $log );
-                       }
+                       $logger = LoggerFactory::getInstance( $channel );
+                       $logger->error(
+                               self::getLogMessage( $e ),
+                               self::getLogContext( $e )
+                       );
                }
 
                // Include all errors in the json log (surpressed errors will be flagged)
                $json = self::jsonSerializeException( $e, false, FormatJson::ALL_OK );
                if ( $json !== false ) {
-                       wfDebugLog( "$channel-json", $json, 'private' );
+                       $logger = LoggerFactory::getInstance( "{$channel}-json" );
+                       $logger->error( $json, array( 'private' => true ) );
                }
 
                Hooks::run( 'LogException', array( $e, $suppressed ) );
index b87e26d..ce0360f 100644 (file)
@@ -380,12 +380,15 @@ abstract class FileBackend {
                                $op['headers']['Content-Disposition'] = $op['disposition'];
                        }
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doOperationsInternal( $ops, $opts );
        }
 
        /**
         * @see FileBackend::doOperations()
+        * @param array $ops
+        * @param array $opts
         */
        abstract protected function doOperationsInternal( array $ops, array $opts );
 
@@ -612,12 +615,14 @@ abstract class FileBackend {
                                $op['headers']['Content-Disposition'] = $op['disposition'];
                        }
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doQuickOperationsInternal( $ops );
        }
 
        /**
         * @see FileBackend::doQuickOperations()
+        * @param array $ops
         * @since 1.20
         */
        abstract protected function doQuickOperationsInternal( array $ops );
@@ -756,12 +761,14 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doPrepare( $params );
        }
 
        /**
         * @see FileBackend::prepare()
+        * @param array $params
         */
        abstract protected function doPrepare( array $params );
 
@@ -785,12 +792,14 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doSecure( $params );
        }
 
        /**
         * @see FileBackend::secure()
+        * @param array $params
         */
        abstract protected function doSecure( array $params );
 
@@ -816,12 +825,14 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doPublish( $params );
        }
 
        /**
         * @see FileBackend::publish()
+        * @param array $params
         */
        abstract protected function doPublish( array $params );
 
@@ -840,12 +851,14 @@ abstract class FileBackend {
                if ( empty( $params['bypassReadOnly'] ) && $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scope = $this->getScopedPHPBehaviorForOps(); // try to ignore client aborts
                return $this->doClean( $params );
        }
 
        /**
         * @see FileBackend::clean()
+        * @param array $params
         */
        abstract protected function doClean( array $params );
 
index 7d2d831..e4b07b8 100644 (file)
@@ -1364,19 +1364,38 @@ abstract class FileBackendStore extends FileBackend {
        abstract protected function directoriesAreVirtual();
 
        /**
-        * Check if a container name is valid.
+        * Check if a short container name is valid
+        *
+        * This checks for length and illegal characters.
+        * This may disallow certain characters that can appear
+        * in the prefix used to make the full container name.
+        *
+        * @param string $container
+        * @return bool
+        */
+       final protected static function isValidShortContainerName( $container ) {
+               // Suffixes like '.xxx' (hex shard chars) or '.seg' (file segments)
+               // might be used by subclasses. Reserve the dot character for sanity.
+               // The only way dots end up in containers (e.g. resolveStoragePath)
+               // is due to the wikiId container prefix or the above suffixes.
+               return self::isValidContainerName( $container ) && !preg_match( '/[.]/', $container );
+       }
+
+       /**
+        * Check if a full container name is valid
+        *
         * This checks for length and illegal characters.
+        * Limiting the characters makes migrations to other stores easier.
         *
         * @param string $container
         * @return bool
         */
        final protected static function isValidContainerName( $container ) {
-               // This accounts for Swift and S3 restrictions while leaving room
-               // for things like '.xxx' (hex shard chars) or '.seg' (segments).
-               // This disallows directory separators or traversal characters.
+               // This accounts for NTFS, Swift, and Ceph restrictions
+               // and disallows directory separators or traversal characters.
                // Note that matching strings URL encode to the same string;
-               // in Swift, the length restriction is *after* URL encoding.
-               return preg_match( '/^[a-z0-9][a-z0-9-_]{0,199}$/i', $container );
+               // in Swift/Ceph, the length restriction is *after* URL encoding.
+               return (bool)preg_match( '/^[a-z0-9][a-z0-9-_.]{0,199}$/i', $container );
        }
 
        /**
@@ -1393,17 +1412,17 @@ abstract class FileBackendStore extends FileBackend {
         * @return array (container, path, container suffix) or (null, null, null) if invalid
         */
        final protected function resolveStoragePath( $storagePath ) {
-               list( $backend, $container, $relPath ) = self::splitStoragePath( $storagePath );
+               list( $backend, $shortCont, $relPath ) = self::splitStoragePath( $storagePath );
                if ( $backend === $this->name ) { // must be for this backend
                        $relPath = self::normalizeContainerPath( $relPath );
-                       if ( $relPath !== null ) {
+                       if ( $relPath !== null && self::isValidShortContainerName( $shortCont ) ) {
                                // Get shard for the normalized path if this container is sharded
-                               $cShard = $this->getContainerShard( $container, $relPath );
+                               $cShard = $this->getContainerShard( $shortCont, $relPath );
                                // Validate and sanitize the relative path (backend-specific)
-                               $relPath = $this->resolveContainerPath( $container, $relPath );
+                               $relPath = $this->resolveContainerPath( $shortCont, $relPath );
                                if ( $relPath !== null ) {
                                        // Prepend any wiki ID prefix to the container name
-                                       $container = $this->fullContainerName( $container );
+                                       $container = $this->fullContainerName( $shortCont );
                                        if ( self::isValidContainerName( $container ) ) {
                                                // Validate and sanitize the container name (backend-specific)
                                                $container = $this->resolveContainerName( "{$container}{$cShard}" );
index 9bae2ae..408194f 100644 (file)
@@ -138,13 +138,12 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( PHP_SAPI === 'cli' ) {
                                $this->srvCache = wfGetMainCache(); // preferrably memcached
                        } else {
-                               try { // look for APC, XCache, WinCache, ect...
-                                       $this->srvCache = ObjectCache::newAccelerator( array() );
-                               } catch ( Exception $e ) {
-                               }
+                               // look for APC, XCache, WinCache, ect...
+                               $this->srvCache = ObjectCache::newAccelerator( CACHE_NONE );
                        }
+               } else {
+                       $this->srvCache = new EmptyBagOStuff();
                }
-               $this->srvCache = $this->srvCache ?: new EmptyBagOStuff();
        }
 
        public function getFeatures() {
@@ -173,30 +172,40 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * Sanitize and filter the custom headers from a $params array.
-        * We only allow certain Content- and X-Content- headers.
+        * Only allows certain "standard" Content- and X-Content- headers.
         *
         * @param array $params
         * @return array Sanitized value of 'headers' field in $params
         */
        protected function sanitizeHdrs( array $params ) {
+               return isset( $params['headers'] )
+                       ? $this->getCustomHeaders( $params['headers'] )
+                       : array();
+
+       }
+
+       /**
+        * @param array $rawHeaders
+        * @return array Custom non-metadata HTTP headers
+        */
+       protected function getCustomHeaders( array $rawHeaders ) {
                $headers = array();
 
                // Normalize casing, and strip out illegal headers
-               if ( isset( $params['headers'] ) ) {
-                       foreach ( $params['headers'] as $name => $value ) {
-                               $name = strtolower( $name );
-                               if ( preg_match( '/^content-(type|length)$/', $name ) ) {
-                                       continue; // blacklisted
-                               } elseif ( preg_match( '/^(x-)?content-/', $name ) ) {
-                                       $headers[$name] = $value; // allowed
-                               } elseif ( preg_match( '/^content-(disposition)/', $name ) ) {
-                                       $headers[$name] = $value; // allowed
-                               }
+               foreach ( $rawHeaders as $name => $value ) {
+                       $name = strtolower( $name );
+                       if ( preg_match( '/^content-(type|length)$/', $name ) ) {
+                               continue; // blacklisted
+                       } elseif ( preg_match( '/^(x-)?content-/', $name ) ) {
+                               $headers[$name] = $value; // allowed
+                       } elseif ( preg_match( '/^content-(disposition)/', $name ) ) {
+                               $headers[$name] = $value; // allowed
                        }
                }
                // By default, Swift has annoyingly low maximum header value limits
                if ( isset( $headers['content-disposition'] ) ) {
                        $disposition = '';
+                       // @note: assume FileBackend::makeContentDisposition() already used
                        foreach ( explode( ';', $headers['content-disposition'] ) as $part ) {
                                $part = trim( $part );
                                $new = ( $disposition === '' ) ? $part : "{$disposition};{$part}";
@@ -212,6 +221,35 @@ class SwiftFileBackend extends FileBackendStore {
                return $headers;
        }
 
+       /**
+        * @param array $rawHeaders
+        * @return array Custom metadata headers
+        */
+       protected function getMetadataHeaders( array $rawHeaders ) {
+               $headers = array();
+               foreach ( $rawHeaders as $name => $value ) {
+                       $name = strtolower( $name );
+                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
+                               $headers[$name] = $value;
+                       }
+               }
+
+               return $headers;
+       }
+
+       /**
+        * @param array $rawHeaders
+        * @return array Custom metadata headers with prefix removed
+        */
+       protected function getMetadata( array $rawHeaders ) {
+               $metadata = array();
+               foreach ( $this->getMetadataHeaders( $rawHeaders ) as $name => $value ) {
+                       $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+               }
+
+               return $metadata;
+       }
+
        protected function doCreateInternal( array $params ) {
                $status = Status::newGood();
 
@@ -666,17 +704,24 @@ class SwiftFileBackend extends FileBackendStore {
                        return $objHdrs; // nothing to do
                }
 
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $ps = Profiler::instance()->scopedProfileIn( __METHOD__ . "-{$this->name}" );
-               trigger_error( "$path was not stored with SHA-1 metadata.", E_USER_WARNING );
+               wfDebugLog( 'SwiftBackend', __METHOD__ . ": $path was not stored with SHA-1 metadata." );
+
+               $objHdrs['x-object-meta-sha1base36'] = false;
 
                $auth = $this->getAuthentication();
                if ( !$auth ) {
-                       $objHdrs['x-object-meta-sha1base36'] = false;
-
                        return $objHdrs; // failed
                }
 
+               // Find prior custom HTTP headers
+               $postHeaders = $this->getCustomHeaders( $objHdrs );
+               // Find prior metadata headers
+               $postHeaders += $this->getMetadataHeaders( $objHdrs );
+
                $status = Status::newGood();
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
                        $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1 ) );
@@ -684,20 +729,24 @@ class SwiftFileBackend extends FileBackendStore {
                                $hash = $tmpFile->getSha1Base36();
                                if ( $hash !== false ) {
                                        $objHdrs['x-object-meta-sha1base36'] = $hash;
+                                       // Merge new SHA1 header into the old ones
+                                       $postHeaders['x-object-meta-sha1base36'] = $hash;
                                        list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $path );
-                                       list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $this->http->run( array(
+                                       list( $rcode ) = $this->http->run( array(
                                                'method' => 'POST',
                                                'url' => $this->storageUrl( $auth, $srcCont, $srcRel ),
-                                               'headers' => $this->authTokenHeaders( $auth ) + $objHdrs
+                                               'headers' => $this->authTokenHeaders( $auth ) + $postHeaders
                                        ) );
                                        if ( $rcode >= 200 && $rcode <= 299 ) {
+                                               $this->deleteFileCache( $path );
+
                                                return $objHdrs; // success
                                        }
                                }
                        }
                }
-               trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
-               $objHdrs['x-object-meta-sha1base36'] = false;
+
+               wfDebugLog( 'SwiftBackend', __METHOD__ . ": unable to set SHA-1 metadata for $path" );
 
                return $objHdrs; // failed
        }
@@ -1546,22 +1595,16 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function getStatFromHeaders( array $rhdrs ) {
                // Fetch all of the custom metadata headers
-               $metadata = array();
-               foreach ( $rhdrs as $name => $value ) {
-                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
-                               $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
-                       }
-               }
+               $metadata = $this->getMetadata( $rhdrs );
                // Fetch all of the custom raw HTTP headers
                $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
+
                return array(
                        // Convert various random Swift dates to TS_MW
                        'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
                        // Empty objects actually return no content-length header in Ceph
                        'size'  => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
-                       'sha1'  => isset( $rhdrs['x-object-meta-sha1base36'] )
-                               ? $rhdrs['x-object-meta-sha1base36']
-                               : null,
+                       'sha1'  => isset( $metadata['sha1base36'] ) ? $metadata['sha1base36'] : null,
                        // Note: manifiest ETags are not an MD5 of the file
                        'md5'   => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
                        'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
index 39a5563..b81cf3e 100644 (file)
@@ -96,7 +96,7 @@ abstract class DBLockManager extends QuorumLockManager {
                                // Tracks peers that couldn't be queried recently to avoid lengthy
                                // connection timeouts. This is useless if each bucket has one peer.
                                try {
-                                       $this->statusCache = ObjectCache::newAccelerator( array() );
+                                       $this->statusCache = ObjectCache::newAccelerator();
                                } catch ( Exception $e ) {
                                        trigger_error( __CLASS__ .
                                                " using multiple DB peers without apc, xcache, or wincache." );
diff --git a/includes/filerepo/FileBackendDBRepoWrapper.php b/includes/filerepo/FileBackendDBRepoWrapper.php
new file mode 100644 (file)
index 0000000..c83e5b1
--- /dev/null
@@ -0,0 +1,356 @@
+<?php
+/**
+ * Proxy backend that manages file layout rewriting for FileRepo.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ * @ingroup FileBackend
+ * @author Aaron Schulz
+ */
+
+/**
+ * @brief Proxy backend that manages file layout rewriting for FileRepo.
+ *
+ * LocalRepo may be configured to store files under their title names or by SHA-1.
+ * This acts as a shim in the later case, providing backwards compatability for
+ * most callers. All "public"/"deleted" zone files actually go in an "original"
+ * container and are never changed.
+ *
+ * This requires something like thumb_handler.php and img_auth.php for client viewing of files.
+ *
+ * @ingroup FileRepo
+ * @ingroup FileBackend
+ * @since 1.25
+ */
+class FileBackendDBRepoWrapper extends FileBackend {
+       /** @var FileBackend */
+       protected $backend;
+       /** @var string */
+       protected $repoName;
+       /** @var Closure */
+       protected $dbHandleFunc;
+       /** @var ProcessCacheLRU */
+       protected $resolvedPathCache;
+       /** @var DBConnRef[] */
+       protected $dbs;
+
+       public function __construct( array $config ) {
+               $config['name'] = $config['backend']->getName();
+               $config['wikiId'] = $config['backend']->getWikiId();
+               parent::__construct( $config );
+               $this->backend = $config['backend'];
+               $this->repoName = $config['repoName'];
+               $this->dbHandleFunc = $config['dbHandleFactory'];
+               $this->resolvedPathCache = new ProcessCacheLRU( 100 );
+       }
+
+       /**
+        * Get the underlying FileBackend that is being wrapped
+        *
+        * @return FileBackend
+        */
+       public function getInternalBackend() {
+               return $this->backend;
+       }
+
+       /**
+        * Translate a legacy "title" path to it's "sha1" counterpart
+        *
+        * E.g. mwstore://local-backend/local-public/a/ab/<name>.jpg
+        * => mwstore://local-backend/local-original/x/y/z/<sha1>.jpg
+        *
+        * @param string $path
+        * @param bool $latest
+        * @return string
+        */
+       public function getBackendPath( $path, $latest = true ) {
+               $paths = $this->getBackendPaths( array( $path ), $latest );
+               return current( $paths );
+       }
+
+       /**
+        * Translate legacy "title" paths to their "sha1" counterparts
+        *
+        * E.g. mwstore://local-backend/local-public/a/ab/<name>.jpg
+        * => mwstore://local-backend/local-original/x/y/z/<sha1>.jpg
+        *
+        * @param array $paths
+        * @param bool $latest
+        * @return array Translated paths in same order
+        */
+       public function getBackendPaths( array $paths, $latest = true ) {
+               $db = $this->getDB( $latest ? DB_MASTER : DB_SLAVE );
+
+               // @TODO: batching
+               $resolved = array();
+               foreach ( $paths as $i => $path ) {
+                       if ( !$latest && $this->resolvedPathCache->has( $path, 'target', 10 ) ) {
+                               $resolved[$i] = $this->resolvedPathCache->get( $path, 'target' );
+                               continue;
+                       }
+
+                       list( , $container ) = FileBackend::splitStoragePath( $path );
+
+                       if ( $container === "{$this->repoName}-public" ) {
+                               $name = basename( $path );
+                               if ( strpos( $path, '!' ) !== false ) {
+                                       $sha1 = $db->selectField( 'oldimage', 'oi_sha1',
+                                               array( 'oi_archive_name' => $name ),
+                                               __METHOD__
+                                       );
+                               } else {
+                                       $sha1 = $db->selectField( 'image', 'img_sha1',
+                                               array( 'img_name' => $name ),
+                                               __METHOD__
+                                       );
+                               }
+                               if ( !strlen( $sha1 ) ) {
+                                       $resolved[$i] = $path; // give up
+                                       continue;
+                               }
+                               $resolved[$i] = $this->getPathForSHA1( $sha1 );
+                               $this->resolvedPathCache->set( $path, 'target', $resolved[$i] );
+                       } elseif ( $container === "{$this->repoName}-deleted" ) {
+                               $name = basename( $path ); // <hash>.<ext>
+                               $sha1 = substr( $name, 0, strpos( $name, '.' ) ); // ignore extension
+                               $resolved[$i] = $this->getPathForSHA1( $sha1 );
+                               $this->resolvedPathCache->set( $path, 'target', $resolved[$i] );
+                       } else {
+                               $resolved[$i] = $path;
+                       }
+               }
+
+               $res = array();
+               foreach ( $paths as $i => $path ) {
+                       $res[$i] = $resolved[$i];
+               }
+
+               return $res;
+       }
+
+       protected function doOperationsInternal( array $ops, array $opts ) {
+               return $this->backend->doOperationsInternal( $this->mungeOpPaths( $ops ), $opts );
+       }
+
+       protected function doQuickOperationsInternal( array $ops ) {
+               return $this->backend->doQuickOperationsInternal( $this->mungeOpPaths( $ops ) );
+       }
+
+       protected function doPrepare( array $params ) {
+               return $this->backend->doPrepare( $params );
+       }
+
+       protected function doSecure( array $params ) {
+               return $this->backend->doSecure( $params );
+       }
+
+       protected function doPublish( array $params ) {
+               return $this->backend->doPublish( $params );
+       }
+
+       protected function doClean( array $params ) {
+               return $this->backend->doClean( $params );
+       }
+
+       public function concatenate( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function fileExists( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileTimestamp( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileSize( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileStat( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileXAttributes( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileSha1Base36( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileProps( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function streamFile( array $params ) {
+               // The stream methods use the file extension to determine the
+               // Content-Type (as MediaWiki should already validate it on upload).
+               // The translated SHA1 path has no extension, so this needs to use
+               // the untranslated path extension.
+               $type = StreamFile::contentTypeFromPath( $params['src'] );
+               if ( $type && $type != 'unknown/unknown' ) {
+                       $params['headers'][] = "Content-type: $type";
+               }
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getFileContentsMulti( array $params ) {
+               return $this->translateArrayResults( __FUNCTION__, $params );
+       }
+
+       public function getLocalReferenceMulti( array $params ) {
+               return $this->translateArrayResults( __FUNCTION__, $params );
+       }
+
+       public function getLocalCopyMulti( array $params ) {
+               return $this->translateArrayResults( __FUNCTION__, $params );
+       }
+
+       public function getFileHttpUrl( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function directoryExists( array $params ) {
+               return $this->backend->directoryExists( $params );
+       }
+
+       public function getDirectoryList( array $params ) {
+               return $this->backend->getDirectoryList( $params );
+       }
+
+       public function getFileList( array $params ) {
+               return $this->backend->getFileList( $params );
+       }
+
+       public function getFeatures() {
+               return $this->backend->getFeatures();
+       }
+
+       public function clearCache( array $paths = null ) {
+               $this->backend->clearCache( null ); // clear all
+       }
+
+       public function preloadCache( array $paths ) {
+               $paths = $this->getBackendPaths( $paths );
+               $this->backend->preloadCache( $paths );
+       }
+
+       public function preloadFileStat( array $params ) {
+               return $this->translateSrcParams( __FUNCTION__, $params );
+       }
+
+       public function getScopedLocksForOps( array $ops, Status $status ) {
+               return $this->backend->getScopedLocksForOps( $ops, $status );
+       }
+
+       /**
+        * Get the ultimate original storage path for a file
+        *
+        * Use this when putting a new file into the system
+        *
+        * @param string $sha1 File SHA-1 base36
+        * @return string
+        */
+       public function getPathForSHA1( $sha1 ) {
+               if ( strlen( $sha1 ) < 3 ) {
+                       throw new InvalidArgumentException( "Invalid file SHA-1." );
+               }
+               return $this->backend->getContainerStoragePath( "{$this->repoName}-original" ) .
+                       "/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+       }
+
+       /**
+        * Get a connection to the repo file registry DB
+        *
+        * @param integer $index
+        * @return DBConnRef
+        */
+       protected function getDB( $index ) {
+               if ( !isset( $this->dbs[$index] ) ) {
+                       $func = $this->dbHandleFunc;
+                       $this->dbs[$index] = $func( $index );
+               }
+               return $this->dbs[$index];
+       }
+
+       /**
+        * Translates paths found in the "src" or "srcs" keys of a params array
+        *
+        * @param string $function
+        * @param array $params
+        */
+       protected function translateSrcParams( $function, array $params ) {
+               $latest = !empty( $params['latest'] );
+
+               if ( isset( $params['src'] ) ) {
+                       $params['src'] = $this->getBackendPath( $params['src'], $latest );
+               }
+
+               if ( isset( $params['srcs'] ) ) {
+                       $params['srcs'] = $this->getBackendPaths( $params['srcs'], $latest );
+               }
+
+               return $this->backend->$function( $params );
+       }
+
+       /**
+        * Translates paths when the backend function returns results keyed by paths
+        *
+        * @param string $function
+        * @param array $params
+        * @return array
+        */
+       protected function translateArrayResults( $function, array $params ) {
+               $origPaths = $params['srcs'];
+               $params['srcs'] = $this->getBackendPaths( $params['srcs'], !empty( $params['latest'] ) );
+               $pathMap = array_combine( $params['srcs'], $origPaths );
+
+               $results = $this->backend->$function( $params );
+
+               $contents = array();
+               foreach ( $results as $path => $result ) {
+                       $contents[$pathMap[$path]] = $result;
+               }
+
+               return $contents;
+       }
+
+       /**
+        * Translate legacy "title" source paths to their "sha1" counterparts
+        *
+        * This leaves destination paths alone since we don't want those to mutate
+        *
+        * @param array $ops
+        * @return array
+        */
+       protected function mungeOpPaths( array $ops ) {
+               // Ops that use 'src' and do not mutate core file data there
+               static $srcRefOps = array( 'store', 'copy', 'describe' );
+               foreach ( $ops as &$op ) {
+                       if ( isset( $op['src'] ) && in_array( $op['op'], $srcRefOps ) ) {
+                               $op['src'] = $this->getBackendPath( $op['src'], true );
+                       }
+                       if ( isset( $op['srcs'] ) ) {
+                               $op['srcs'] = $this->getBackendPaths( $op['srcs'], true );
+                       }
+               }
+               return $ops;
+       }
+}
index e66fdaf..7370c5c 100644 (file)
@@ -49,6 +49,9 @@ class FileRepo {
        /** @var int */
        public $descriptionCacheExpiry;
 
+       /** @var bool */
+       protected $hasSha1Storage = false;
+
        /** @var FileBackend */
        protected $backend;
 
@@ -431,16 +434,18 @@ class FileRepo {
                # Now try an old version of the file
                if ( $time !== false ) {
                        $img = $this->newFile( $title, $time );
-                       $img->load( $flags );
-                       if ( $img && $img->exists() ) {
-                               if ( !$img->isDeleted( File::DELETED_FILE ) ) {
-                                       return $img; // always OK
-                               } elseif ( !empty( $options['private'] ) &&
-                                       $img->userCan( File::DELETED_FILE,
-                                               $options['private'] instanceof User ? $options['private'] : null
-                                       )
-                               ) {
-                                       return $img;
+                       if ( $img ) {
+                               $img->load( $flags );
+                               if ( $img->exists() ) {
+                                       if ( !$img->isDeleted( File::DELETED_FILE ) ) {
+                                               return $img; // always OK
+                                       } elseif ( !empty( $options['private'] ) &&
+                                               $img->userCan( File::DELETED_FILE,
+                                                       $options['private'] instanceof User ? $options['private'] : null
+                                               )
+                                       ) {
+                                               return $img;
+                                       }
                                }
                        }
                }
@@ -452,10 +457,10 @@ class FileRepo {
                $redir = $this->checkRedirect( $title );
                if ( $redir && $title->getNamespace() == NS_FILE ) {
                        $img = $this->newFile( $redir );
-                       $img->load( $flags );
                        if ( !$img ) {
                                return false;
                        }
+                       $img->load( $flags );
                        if ( $img->exists() ) {
                                $img->redirectedFrom( $title->getDBkey() );
 
@@ -1883,6 +1888,14 @@ class FileRepo {
 
                return $ret;
        }
+
+       /**
+        * Returns whether or not storage is SHA-1 based
+        * @return boolean
+        */
+       public function hasSha1Storage() {
+               return $this->hasSha1Storage;
+       }
 }
 
 /**
index ec84762..4ffbf4a 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup FileRepo
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * A foreign repository with a remote MediaWiki with an API thingy
  *
@@ -521,7 +523,8 @@ class ForeignAPIRepo extends FileRepo {
                if ( $status->isOK() ) {
                        return $req->getContent();
                } else {
-                       wfDebug( "ForeignAPIRepo: ERROR on GET: " . $status->getWikiText() );
+                       $logger = LoggerFactory::getInstance( 'http' );
+                       $logger->warning( $status->getWikiText(), array( 'caller' => 'ForeignAPIRepo::httpGet' ) );
                        return false;
                }
        }
index 6e9e6ad..dfdb375 100644 (file)
@@ -76,17 +76,8 @@ class ForeignDBRepo extends LocalRepo {
         */
        function getMasterDB() {
                if ( !isset( $this->dbConn ) ) {
-                       $this->dbConn = DatabaseBase::factory( $this->dbType,
-                               array(
-                                       'host' => $this->dbServer,
-                                       'user' => $this->dbUser,
-                                       'password' => $this->dbPassword,
-                                       'dbname' => $this->dbName,
-                                       'flags' => $this->dbFlags,
-                                       'tablePrefix' => $this->tablePrefix,
-                                       'foreign' => true,
-                               )
-                       );
+                       $func = $this->getDBFactory();
+                       $this->dbConn = $func( DB_MASTER );
                }
 
                return $this->dbConn;
@@ -99,6 +90,25 @@ class ForeignDBRepo extends LocalRepo {
                return $this->getMasterDB();
        }
 
+       /**
+        * @return Closure
+        */
+       protected function getDBFactory() {
+               return function( $index ) {
+                       return DatabaseBase::factory( $this->dbType,
+                               array(
+                                       'host' => $this->dbServer,
+                                       'user' => $this->dbUser,
+                                       'password' => $this->dbPassword,
+                                       'dbname' => $this->dbName,
+                                       'flags' => $this->dbFlags,
+                                       'tablePrefix' => $this->tablePrefix,
+                                       'foreign' => true,
+                               )
+                       );
+               };
+       }
+
        /**
         * @return bool
         */
index 8153ffb..f49b716 100644 (file)
@@ -66,6 +66,16 @@ class ForeignDBViaLBRepo extends LocalRepo {
                return wfGetDB( DB_SLAVE, array(), $this->wiki );
        }
 
+       /**
+        * @return Closure
+        */
+       protected function getDBFactory() {
+               $wiki = $this->wiki;
+               return function( $index ) use ( $wiki ) {
+                       return wfGetDB( $index, array(), $wiki );
+               };
+       }
+
        function hasSharedCache() {
                return $this->hasSharedCache;
        }
index ef402ea..6a2c064 100644 (file)
@@ -29,6 +29,9 @@
  * @ingroup FileRepo
  */
 class LocalRepo extends FileRepo {
+       /** @var bool */
+       protected $hasSha1Storage = false;
+
        /** @var array */
        protected $fileFactory = array( 'LocalFile', 'newFromTitle' );
 
@@ -47,6 +50,20 @@ class LocalRepo extends FileRepo {
        /** @var array */
        protected $oldFileFactoryKey = array( 'OldLocalFile', 'newFromKey' );
 
+       function __construct( array $info = null ) {
+               parent::__construct( $info );
+
+               $this->hasSha1Storage = isset( $info['storageLayout'] ) && $info['storageLayout'] === 'sha1';
+
+               if ( $this->hasSha1Storage() ) {
+                       $this->backend = new FileBackendDBRepoWrapper( array(
+                               'backend'         => $this->backend,
+                               'repoName'        => $this->name,
+                               'dbHandleFactory' => $this->getDBFactory()
+                       ) );
+               }
+       }
+
        /**
         * @throws MWException
         * @param stdClass $row
@@ -82,6 +99,11 @@ class LocalRepo extends FileRepo {
         * @return FileRepoStatus
         */
        function cleanupDeletedBatch( array $storageKeys ) {
+               if ( $this->hasSha1Storage() ) {
+                       wfDebug( __METHOD__ . ": skipped because storage uses sha1 paths\n" );
+                       return Status::newGood();
+               }
+
                $backend = $this->backend; // convenience
                $root = $this->getZonePath( 'deleted' );
                $dbw = $this->getMasterDB();
@@ -285,7 +307,7 @@ class LocalRepo extends FileRepo {
                                $file = $that->newFileFromRow( $row );
                                // There must have been a search for this DB key, but this has to handle the
                                // cases were title capitalization is different on the client and repo wikis.
-                               $dbKeysLook = array( str_replace( ' ', '_', $file->getName() ) );
+                               $dbKeysLook = array( strtr( $file->getName(), ' ', '_' ) );
                                if ( !empty( $info['initialCapital'] ) ) {
                                        // Search keys for "hi.png" and "Hi.png" should use the "Hi.png file"
                                        $dbKeysLook[] = $wgContLang->lcfirst( $file->getName() );
@@ -469,6 +491,16 @@ class LocalRepo extends FileRepo {
                return wfGetDB( DB_MASTER );
        }
 
+       /**
+        * Get a callback to get a DB handle given an index (DB_SLAVE/DB_MASTER)
+        * @return Closure
+        */
+       protected function getDBFactory() {
+               return function( $index ) {
+                       return wfGetDB( $index );
+               };
+       }
+
        /**
         * Get a key on the primary cache for this repository.
         * Returns false if the repository's cache is not accessible at this site.
@@ -514,4 +546,56 @@ class LocalRepo extends FileRepo {
                        'favicon' => wfExpandUrl( $wgFavicon ),
                ) );
        }
+
+       public function store( $srcPath, $dstZone, $dstRel, $flags = 0 ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function storeBatch( array $triplets, $flags = 0 ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function cleanupBatch( array $files, $flags = 0 ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function publish(
+               $srcPath,
+               $dstRel,
+               $archiveRel,
+               $flags = 0,
+               array $options = array()
+       ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function publishBatch( array $ntuples, $flags = 0 ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function delete( $srcRel, $archiveRel ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       public function deleteBatch( array $sourceDestPairs ) {
+               return $this->skipWriteOperationIfSha1( __FUNCTION__, func_get_args() );
+       }
+
+       /**
+        * Skips the write operation if storage is sha1-based, executes it normally otherwise
+        *
+        * @param string $function
+        * @param array $args
+        * @return FileRepoStatus
+        */
+       protected function skipWriteOperationIfSha1( $function, array $args ) {
+               $this->assertWritableRepo(); // fail out if read-only
+
+               if ( $this->hasSha1Storage() ) {
+                       wfDebug( __METHOD__ . ": skipped because storage uses sha1 paths\n" );
+                       return Status::newGood();
+               } else {
+                       return call_user_func_array( 'parent::' . $function, $args );
+               }
+       }
 }
index 76ed27b..f40d216 100644 (file)
@@ -213,14 +213,15 @@ abstract class File implements IDBAccessObject {
        }
 
        /**
-        * Normalize a file extension to the common form, and ensure it's clean.
-        * Extensions with non-alphanumeric characters will be discarded.
+        * Normalize a file extension to the common form, making it lowercase and checking some synonyms,
+        * and ensure it's clean. Extensions with non-alphanumeric characters will be discarded.
+        * Keep in sync with mw.Title.normalizeExtension() in JS.
         *
-        * @param string $ext (without the .)
-        * @return string
+        * @param string $extension File extension (without the leading dot)
+        * @return string File extension in canonical form
         */
-       static function normalizeExtension( $ext ) {
-               $lower = strtolower( $ext );
+       static function normalizeExtension( $extension ) {
+               $lower = strtolower( $extension );
                $squish = array(
                        'htm' => 'html',
                        'jpeg' => 'jpg',
@@ -421,7 +422,13 @@ abstract class File implements IDBAccessObject {
        public function getLocalRefPath() {
                $this->assertRepoDefined();
                if ( !isset( $this->fsFile ) ) {
+                       $starttime = microtime( true );
                        $this->fsFile = $this->repo->getLocalReference( $this->getPath() );
+
+                       $statTiming = microtime( true ) - $starttime;
+                       RequestContext::getMain()->getStats()->timing(
+                               'media.thumbnail.generate.fetchoriginal', 1000 * $statTiming );
+
                        if ( !$this->fsFile ) {
                                $this->fsFile = false; // null => false; cache negative hits
                        }
@@ -1092,7 +1099,9 @@ abstract class File implements IDBAccessObject {
         * @return bool|MediaTransformOutput
         */
        public function generateAndSaveThumb( $tmpFile, $transformParams, $flags ) {
-               global $wgUseSquid, $wgIgnoreImageErrors;
+               global $wgIgnoreImageErrors;
+
+               $stats = RequestContext::getMain()->getStats();
 
                $handler = $this->getHandler();
 
@@ -1109,10 +1118,15 @@ abstract class File implements IDBAccessObject {
                        $this->generateBucketsIfNeeded( $normalisedParams, $flags );
                }
 
+               $starttime = microtime( true );
+
                // Actually render the thumbnail...
                $thumb = $handler->doTransform( $this, $tmpThumbPath, $thumbUrl, $transformParams );
                $tmpFile->bind( $thumb ); // keep alive with $thumb
 
+               $statTiming = microtime( true ) - $starttime;
+               $stats->timing( 'media.thumbnail.generate.transform', 1000 * $statTiming );
+
                if ( !$thumb ) { // bad params?
                        $thumb = false;
                } elseif ( $thumb->isError() ) { // transform error
@@ -1123,6 +1137,9 @@ abstract class File implements IDBAccessObject {
                        }
                } elseif ( $this->repo && $thumb->hasFile() && !$thumb->fileIsSource() ) {
                        // Copy the thumbnail from the file system into storage...
+
+                       $starttime = microtime( true );
+
                        $disposition = $this->getThumbDisposition( $thumbName );
                        $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath, $disposition );
                        if ( $status->isOK() ) {
@@ -1130,19 +1147,14 @@ abstract class File implements IDBAccessObject {
                        } else {
                                $thumb = $this->transformErrorOutput( $thumbPath, $thumbUrl, $transformParams, $flags );
                        }
+
+                       $statTiming = microtime( true ) - $starttime;
+                       $stats->timing( 'media.thumbnail.generate.store', 1000 * $statTiming );
+
                        // Give extensions a chance to do something with this thumbnail...
                        Hooks::run( 'FileTransformed', array( $this, $thumb, $tmpThumbPath, $thumbPath ) );
                }
 
-               // Purge. Useful in the event of Core -> Squid connection failure or squid
-               // purge collisions from elsewhere during failure. Don't keep triggering for
-               // "thumbs" which have the main image URL though (bug 13776)
-               if ( $wgUseSquid ) {
-                       if ( !$thumb || $thumb->isError() || $thumb->getUrl() != $this->getURL() ) {
-                               SquidUpdate::purge( array( $thumbUrl ) );
-                       }
-               }
-
                return $thumb;
        }
 
@@ -1167,13 +1179,13 @@ abstract class File implements IDBAccessObject {
                        return false;
                }
 
+               $starttime = microtime( true );
+
                $params['physicalWidth'] = $bucket;
                $params['width'] = $bucket;
 
                $params = $this->getHandler()->sanitizeParamsForBucketing( $params );
 
-               $bucketName = $this->getBucketThumbName( $bucket );
-
                $tmpFile = $this->makeTransformTmpFile( $bucketPath );
 
                if ( !$tmpFile ) {
@@ -1182,6 +1194,8 @@ abstract class File implements IDBAccessObject {
 
                $thumb = $this->generateAndSaveThumb( $tmpFile, $params, $flags );
 
+               $buckettime = microtime( true ) - $starttime;
+
                if ( !$thumb || $thumb->isError() ) {
                        return false;
                }
@@ -1191,6 +1205,9 @@ abstract class File implements IDBAccessObject {
                // this object exists
                $tmpFile->bind( $this );
 
+               RequestContext::getMain()->getStats()->timing(
+                       'media.thumbnail.generate.bucket', 1000 * $buckettime );
+
                return true;
        }
 
index 6abe00c..d2c37e6 100644 (file)
@@ -502,9 +502,17 @@ class LocalFile extends File {
                        $decoded['mime'] = $decoded['major_mime'] . '/' . $decoded['minor_mime'];
                }
 
-               # Trim zero padding from char/binary field
+               // Trim zero padding from char/binary field
                $decoded['sha1'] = rtrim( $decoded['sha1'], "\0" );
 
+               // Normalize some fields to integer type, per their database definition.
+               // Use unary + so that overflows will be upgraded to double instead of
+               // being trucated as with intval(). This is important to allow >2GB
+               // files on 32-bit systems.
+               foreach ( array( 'size', 'width', 'height', 'bits' ) as $field ) {
+                       $decoded[$field] = +$decoded[$field];
+               }
+
                return $decoded;
        }
 
@@ -1459,7 +1467,7 @@ class LocalFile extends File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
-        * @param string $srcPath Local filesystem path to the source image
+        * @param string $srcPath Local filesystem path or virtual URL to the source image
         * @param int $flags A bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
         * @param array $options Optional additional parameters
@@ -1477,7 +1485,7 @@ class LocalFile extends File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
-        * @param string $srcPath Local filesystem path to the source image
+        * @param string $srcPath Local filesystem path or virtual URL to the source image
         * @param string $dstRel Target relative path
         * @param int $flags A bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move rather than copy
@@ -1486,7 +1494,8 @@ class LocalFile extends File {
         *     archive name, or an empty string if it was a new file.
         */
        function publishTo( $srcPath, $dstRel, $flags = 0, array $options = array() ) {
-               if ( $this->getRepo()->getReadOnlyReason() !== false ) {
+               $repo = $this->getRepo();
+               if ( $repo->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
 
@@ -1494,13 +1503,29 @@ class LocalFile extends File {
 
                $archiveName = wfTimestamp( TS_MW ) . '!' . $this->getName();
                $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
-               $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
-               $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags, $options );
 
-               if ( $status->value == 'new' ) {
-                       $status->value = '';
+               if ( $repo->hasSha1Storage() ) {
+                       $sha1 = $repo->isVirtualUrl( $srcPath )
+                               ? $repo->getFileSha1( $srcPath )
+                               : File::sha1Base36( $srcPath );
+                       $dst = $repo->getBackend()->getPathForSHA1( $sha1 );
+                       $status = $repo->quickImport( $srcPath, $dst );
+                       if ( $flags & File::DELETE_SOURCE ) {
+                               unlink( $srcPath );
+                       }
+
+                       if ( $this->exists() ) {
+                               $status->value = $archiveName;
+                       }
                } else {
-                       $status->value = $archiveName;
+                       $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
+                       $status = $repo->publish( $srcPath, $dstRel, $archiveRel, $flags, $options );
+
+                       if ( $status->value == 'new' ) {
+                               $status->value = '';
+                       } else {
+                               $status->value = $archiveName;
+                       }
                }
 
                $this->unlock(); // done
@@ -1941,14 +1966,14 @@ class LocalFileDeleteBatch {
                $this->status = $file->repo->newGood();
        }
 
-       function addCurrent() {
+       public function addCurrent() {
                $this->srcRels['.'] = $this->file->getRel();
        }
 
        /**
         * @param string $oldName
         */
-       function addOld( $oldName ) {
+       public function addOld( $oldName ) {
                $this->srcRels[$oldName] = $this->file->getArchiveRel( $oldName );
                $this->archiveUrls[] = $this->file->getArchiveUrl( $oldName );
        }
@@ -1957,7 +1982,7 @@ class LocalFileDeleteBatch {
         * Add the old versions of the image to the batch
         * @return array List of archive names from old versions
         */
-       function addOlds() {
+       public function addOlds() {
                $archiveNames = array();
 
                $dbw = $this->file->repo->getMasterDB();
@@ -1978,7 +2003,7 @@ class LocalFileDeleteBatch {
        /**
         * @return array
         */
-       function getOldRels() {
+       protected function getOldRels() {
                if ( !isset( $this->srcRels['.'] ) ) {
                        $oldRels =& $this->srcRels;
                        $deleteCurrent = false;
@@ -2050,7 +2075,7 @@ class LocalFileDeleteBatch {
                return $hashes;
        }
 
-       function doDBInserts() {
+       protected function doDBInserts() {
                $dbw = $this->file->repo->getMasterDB();
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp() );
                $encUserId = $dbw->addQuotes( $this->user->getId() );
@@ -2165,8 +2190,8 @@ class LocalFileDeleteBatch {
         * Run the transaction
         * @return FileRepoStatus
         */
-       function execute() {
-
+       public function execute() {
+               $repo = $this->file->getRepo();
                $this->file->lock();
 
                // Prepare deletion batch
@@ -2180,7 +2205,7 @@ class LocalFileDeleteBatch {
                        if ( isset( $hashes[$name] ) ) {
                                $hash = $hashes[$name];
                                $key = $hash . $dotExt;
-                               $dstRel = $this->file->repo->getDeletedHashPath( $key ) . $key;
+                               $dstRel = $repo->getDeletedHashPath( $key ) . $key;
                                $this->deletionBatch[$name] = array( $srcRel, $dstRel );
                        }
                }
@@ -2193,20 +2218,22 @@ class LocalFileDeleteBatch {
                // them in a separate transaction, then run the file ops, then update the fa_name fields.
                $this->doDBInserts();
 
-               // Removes non-existent file from the batch, so we don't get errors.
-               // This also handles files in the 'deleted' zone deleted via revision deletion.
-               $checkStatus = $this->removeNonexistentFiles( $this->deletionBatch );
-               if ( !$checkStatus->isGood() ) {
-                       $this->status->merge( $checkStatus );
-                       return $this->status;
-               }
-               $this->deletionBatch = $checkStatus->value;
+               if ( !$repo->hasSha1Storage() ) {
+                       // Removes non-existent file from the batch, so we don't get errors.
+                       // This also handles files in the 'deleted' zone deleted via revision deletion.
+                       $checkStatus = $this->removeNonexistentFiles( $this->deletionBatch );
+                       if ( !$checkStatus->isGood() ) {
+                               $this->status->merge( $checkStatus );
+                               return $this->status;
+                       }
+                       $this->deletionBatch = $checkStatus->value;
 
-               // Execute the file deletion batch
-               $status = $this->file->repo->deleteBatch( $this->deletionBatch );
+                       // Execute the file deletion batch
+                       $status = $this->file->repo->deleteBatch( $this->deletionBatch );
 
-               if ( !$status->isGood() ) {
-                       $this->status->merge( $status );
+                       if ( !$status->isGood() ) {
+                               $this->status->merge( $status );
+                       }
                }
 
                if ( !$this->status->isOK() ) {
@@ -2232,7 +2259,7 @@ class LocalFileDeleteBatch {
         * @param array $batch
         * @return Status
         */
-       function removeNonexistentFiles( $batch ) {
+       protected function removeNonexistentFiles( $batch ) {
                $files = $newBatch = array();
 
                foreach ( $batch as $batchItem ) {
@@ -2293,7 +2320,7 @@ class LocalFileRestoreBatch {
         * Add a file by ID
         * @param int $fa_id
         */
-       function addId( $fa_id ) {
+       public function addId( $fa_id ) {
                $this->ids[] = $fa_id;
        }
 
@@ -2301,14 +2328,14 @@ class LocalFileRestoreBatch {
         * Add a whole lot of files by ID
         * @param int[] $ids
         */
-       function addIds( $ids ) {
+       public function addIds( $ids ) {
                $this->ids = array_merge( $this->ids, $ids );
        }
 
        /**
         * Add all revisions of the file
         */
-       function addAll() {
+       public function addAll() {
                $this->all = true;
        }
 
@@ -2320,12 +2347,13 @@ class LocalFileRestoreBatch {
         * So we save the batch and let the caller call cleanup()
         * @return FileRepoStatus
         */
-       function execute() {
+       public function execute() {
                global $wgLang;
 
+               $repo = $this->file->getRepo();
                if ( !$this->all && !$this->ids ) {
                        // Do nothing
-                       return $this->file->repo->newGood();
+                       return $repo->newGood();
                }
 
                $lockOwnsTrx = $this->file->lock();
@@ -2382,9 +2410,9 @@ class LocalFileRestoreBatch {
                                continue;
                        }
 
-                       $deletedRel = $this->file->repo->getDeletedHashPath( $row->fa_storage_key ) .
+                       $deletedRel = $repo->getDeletedHashPath( $row->fa_storage_key ) .
                                $row->fa_storage_key;
-                       $deletedUrl = $this->file->repo->getVirtualUrl() . '/deleted/' . $deletedRel;
+                       $deletedUrl = $repo->getVirtualUrl() . '/deleted/' . $deletedRel;
 
                        if ( isset( $row->fa_sha1 ) ) {
                                $sha1 = $row->fa_sha1;
@@ -2498,27 +2526,29 @@ class LocalFileRestoreBatch {
                        $status->error( 'undelete-missing-filearchive', $id );
                }
 
-               // Remove missing files from batch, so we don't get errors when undeleting them
-               $checkStatus = $this->removeNonexistentFiles( $storeBatch );
-               if ( !$checkStatus->isGood() ) {
-                       $status->merge( $checkStatus );
-                       return $status;
-               }
-               $storeBatch = $checkStatus->value;
+               if ( !$repo->hasSha1Storage() ) {
+                       // Remove missing files from batch, so we don't get errors when undeleting them
+                       $checkStatus = $this->removeNonexistentFiles( $storeBatch );
+                       if ( !$checkStatus->isGood() ) {
+                               $status->merge( $checkStatus );
+                               return $status;
+                       }
+                       $storeBatch = $checkStatus->value;
 
-               // Run the store batch
-               // Use the OVERWRITE_SAME flag to smooth over a common error
-               $storeStatus = $this->file->repo->storeBatch( $storeBatch, FileRepo::OVERWRITE_SAME );
-               $status->merge( $storeStatus );
+                       // Run the store batch
+                       // Use the OVERWRITE_SAME flag to smooth over a common error
+                       $storeStatus = $this->file->repo->storeBatch( $storeBatch, FileRepo::OVERWRITE_SAME );
+                       $status->merge( $storeStatus );
 
-               if ( !$status->isGood() ) {
-                       // Even if some files could be copied, fail entirely as that is the
-                       // easiest thing to do without data loss
-                       $this->cleanupFailedBatch( $storeStatus, $storeBatch );
-                       $status->ok = false;
-                       $this->file->unlock();
+                       if ( !$status->isGood() ) {
+                               // Even if some files could be copied, fail entirely as that is the
+                               // easiest thing to do without data loss
+                               $this->cleanupFailedBatch( $storeStatus, $storeBatch );
+                               $status->ok = false;
+                               $this->file->unlock();
 
-                       return $status;
+                               return $status;
+                       }
                }
 
                // Run the DB updates
@@ -2542,7 +2572,7 @@ class LocalFileRestoreBatch {
                }
 
                // If store batch is empty (all files are missing), deletion is to be considered successful
-               if ( $status->successCount > 0 || !$storeBatch ) {
+               if ( $status->successCount > 0 || !$storeBatch || $repo->hasSha1Storage() ) {
                        if ( !$exists ) {
                                wfDebug( __METHOD__ . " restored {$status->successCount} items, creating a new current\n" );
 
@@ -2565,7 +2595,7 @@ class LocalFileRestoreBatch {
         * @param array $triplets
         * @return Status
         */
-       function removeNonexistentFiles( $triplets ) {
+       protected function removeNonexistentFiles( $triplets ) {
                $files = $filteredTriplets = array();
                foreach ( $triplets as $file ) {
                        $files[$file[0]] = $file[0];
@@ -2591,7 +2621,7 @@ class LocalFileRestoreBatch {
         * @param array $batch
         * @return array
         */
-       function removeNonexistentFromCleanup( $batch ) {
+       protected function removeNonexistentFromCleanup( $batch ) {
                $files = $newBatch = array();
                $repo = $this->file->repo;
 
@@ -2616,7 +2646,7 @@ class LocalFileRestoreBatch {
         * This should be called from outside the transaction in which execute() was called.
         * @return FileRepoStatus
         */
-       function cleanup() {
+       public function cleanup() {
                if ( !$this->cleanupBatch ) {
                        return $this->file->repo->newGood();
                }
@@ -2635,7 +2665,7 @@ class LocalFileRestoreBatch {
         * @param Status $storeStatus
         * @param array $storeBatch
         */
-       function cleanupFailedBatch( $storeStatus, $storeBatch ) {
+       protected function cleanupFailedBatch( $storeStatus, $storeBatch ) {
                $cleanupBatch = array();
 
                foreach ( $storeStatus->success as $i => $success ) {
@@ -2693,7 +2723,7 @@ class LocalFileMoveBatch {
        /**
         * Add the current image to the batch
         */
-       function addCurrent() {
+       public function addCurrent() {
                $this->cur = array( $this->oldRel, $this->newRel );
        }
 
@@ -2701,7 +2731,7 @@ class LocalFileMoveBatch {
         * Add the old versions of the image to the batch
         * @return array List of archive names from old versions
         */
-       function addOlds() {
+       public function addOlds() {
                $archiveBase = 'archive';
                $this->olds = array();
                $this->oldCount = 0;
@@ -2751,7 +2781,7 @@ class LocalFileMoveBatch {
         * Perform the move.
         * @return FileRepoStatus
         */
-       function execute() {
+       public function execute() {
                $repo = $this->file->repo;
                $status = $repo->newGood();
 
@@ -2782,22 +2812,26 @@ class LocalFileMoveBatch {
                wfDebugLog( 'imagemove', "Renamed {$this->file->getName()} in database: " .
                        "{$statusDb->successCount} successes, {$statusDb->failCount} failures" );
 
-               // Copy the files into their new location.
-               // If a prior process fataled copying or cleaning up files we tolerate any
-               // of the existing files if they are identical to the ones being stored.
-               $statusMove = $repo->storeBatch( $triplets, FileRepo::OVERWRITE_SAME );
-               wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: " .
-                       "{$statusMove->successCount} successes, {$statusMove->failCount} failures" );
-               if ( !$statusMove->isGood() ) {
-                       // Delete any files copied over (while the destination is still locked)
-                       $this->cleanupTarget( $triplets );
-                       $destFile->unlock();
-                       $this->file->unlockAndRollback(); // unlocks the destination
-                       wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() );
-                       $statusMove->ok = false;
-
-                       return $statusMove;
+               if ( !$repo->hasSha1Storage() ) {
+                       // Copy the files into their new location.
+                       // If a prior process fataled copying or cleaning up files we tolerate any
+                       // of the existing files if they are identical to the ones being stored.
+                       $statusMove = $repo->storeBatch( $triplets, FileRepo::OVERWRITE_SAME );
+                       wfDebugLog( 'imagemove', "Moved files for {$this->file->getName()}: " .
+                               "{$statusMove->successCount} successes, {$statusMove->failCount} failures" );
+                       if ( !$statusMove->isGood() ) {
+                               // Delete any files copied over (while the destination is still locked)
+                               $this->cleanupTarget( $triplets );
+                               $destFile->unlock();
+                               $this->file->unlockAndRollback(); // unlocks the destination
+                               wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() );
+                               $statusMove->ok = false;
+
+                               return $statusMove;
+                       }
+                       $status->merge( $statusMove );
                }
+
                $destFile->unlock();
                $this->file->unlock(); // done
 
@@ -2805,7 +2839,6 @@ class LocalFileMoveBatch {
                $this->cleanupSource( $triplets );
 
                $status->merge( $statusDb );
-               $status->merge( $statusMove );
 
                return $status;
        }
@@ -2816,7 +2849,7 @@ class LocalFileMoveBatch {
         *
         * @return FileRepoStatus
         */
-       function doDBUpdates() {
+       protected function doDBUpdates() {
                $repo = $this->file->repo;
                $status = $repo->newGood();
                $dbw = $this->db;
@@ -2868,7 +2901,7 @@ class LocalFileMoveBatch {
         * Generate triplets for FileRepo::storeBatch().
         * @return array
         */
-       function getMoveTriplets() {
+       protected function getMoveTriplets() {
                $moves = array_merge( array( $this->cur ), $this->olds );
                $triplets = array(); // The format is: (srcUrl, destZone, destUrl)
 
@@ -2890,7 +2923,7 @@ class LocalFileMoveBatch {
         * @param array $triplets
         * @return Status
         */
-       function removeNonexistentFiles( $triplets ) {
+       protected function removeNonexistentFiles( $triplets ) {
                $files = array();
 
                foreach ( $triplets as $file ) {
@@ -2920,7 +2953,7 @@ class LocalFileMoveBatch {
         * files. Called if something went wrong half way.
         * @param array $triplets
         */
-       function cleanupTarget( $triplets ) {
+       protected function cleanupTarget( $triplets ) {
                // Create dest pairs from the triplets
                $pairs = array();
                foreach ( $triplets as $triplet ) {
@@ -2936,7 +2969,7 @@ class LocalFileMoveBatch {
         * Called at the end of the move process if everything else went ok.
         * @param array $triplets
         */
-       function cleanupSource( $triplets ) {
+       protected function cleanupSource( $triplets ) {
                // Create source file names from the triplets
                $files = array();
                foreach ( $triplets as $triplet ) {
index 52a49dd..821c85f 100644 (file)
@@ -21,8 +21,8 @@
  */
 
 class PackedImageGallery extends TraditionalImageGallery {
-       function __construct( $mode = 'traditional' ) {
-               parent::__construct( $mode );
+       function __construct( $mode = 'traditional', IContextSource $context = null ) {
+               parent::__construct( $mode, $context );
                // Does not support per row option.
                $this->mPerRow = 0;
        }
index afd7cf6..56a23ad 100644 (file)
@@ -21,8 +21,20 @@ class HTMLButtonField extends HTMLFormField {
        }
 
        public function getInputHTML( $value ) {
+               $flags = '';
+               $prefix = 'mw-htmlform-';
+               if ( $this->mParent instanceof VFormHTMLForm ||
+                       $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' )
+               ) {
+                       $prefix = 'mw-ui-';
+                       // add mw-ui-button separately, so the descriptor doesn't need to set it
+                       $flags .= ' ' . $prefix.'button';
+               }
+               foreach ( $this->mFlags as $flag ) {
+                       $flags .= ' ' . $prefix . $flag;
+               }
                $attr = array(
-                       'class' => 'mw-htmlform-submit ' . $this->mClass,
+                       'class' => 'mw-htmlform-submit ' . $this->mClass . $flags,
                        'id' => $this->mID,
                ) + $this->getAttributes( array( 'disabled', 'tabindex' ) );
 
@@ -32,7 +44,7 @@ class HTMLButtonField extends HTMLFormField {
        /**
         * Get the OOUI widget for this field.
         * @param string $value
-        * @return OOUI\ButtonInputWidget
+        * @return OOUI\\ButtonInputWidget
         */
        public function getInputOOUI( $value ) {
                return new OOUI\ButtonInputWidget( array(
index 55312ff..9666c4e 100644 (file)
@@ -45,7 +45,7 @@ class HTMLCheckField extends HTMLFormField {
         * Get the OOUI version of this field.
         * @since 1.26
         * @param string $value
-        * @return OOUI\CheckboxInputWidget The checkbox widget.
+        * @return OOUI\\CheckboxInputWidget The checkbox widget.
         */
        public function getInputOOUI( $value ) {
                if ( !empty( $this->mParams['invert'] ) ) {
index 702651e..08fa0a9 100644 (file)
  *    'size'                -- the length of text fields
  *    'filter-callback      -- a function name to give you the chance to
  *                             massage the inputted value before it's processed.
- *                             @see HTMLForm::filter()
+ *                             @see HTMLFormField::filter()
  *    'validation-callback' -- a function name to give you the chance
  *                             to impose extra validation on the field input.
- *                             @see HTMLForm::validate()
+ *                             @see HTMLFormField::validate()
  *    'name'                -- By default, the 'name' attribute of the input field
  *                             is "wp{$fieldname}".  If you want a different name
  *                             (eg one without the "wp" prefix), specify it here and
@@ -153,6 +153,8 @@ class HTMLForm extends ContextSource {
                'email' => 'HTMLTextField',
                'password' => 'HTMLTextField',
                'url' => 'HTMLTextField',
+               'title' => 'HTMLTitleTextField',
+               'user' => 'HTMLUserTextField',
        );
 
        public $mFieldData;
@@ -165,7 +167,7 @@ class HTMLForm extends ContextSource {
        protected $mFieldTree;
        protected $mShowReset = false;
        protected $mShowSubmit = true;
-       protected $mSubmitFlag = 'constructive';
+       protected $mSubmitFlags = array( 'constructive', 'primary' );
 
        protected $mSubmitCallback;
        protected $mValidationErrorMessage;
@@ -708,6 +710,21 @@ class HTMLForm extends ContextSource {
                return $this;
        }
 
+       /**
+        * Get header text.
+        *
+        * @param string|null $section The section to get the header text for
+        * @since 1.26
+        * @return string
+        */
+       function getHeaderText( $section = null ) {
+               if ( is_null( $section ) ) {
+                       return $this->mHeader;
+               } else {
+                       return isset( $this->mSectionHeaders[$section] ) ? $this->mSectionHeaders[$section] : '';
+               }
+       }
+
        /**
         * Add footer text, inside the form.
         *
@@ -748,6 +765,21 @@ class HTMLForm extends ContextSource {
                return $this;
        }
 
+       /**
+        * Get footer text.
+        *
+        * @param string|null $section The section to get the footer text for
+        * @since 1.26
+        * @return string
+        */
+       function getFooterText( $section = null ) {
+               if ( is_null( $section ) ) {
+                       return $this->mFooter;
+               } else {
+                       return isset( $this->mSectionFooters[$section] ) ? $this->mSectionFooters[$section] : '';
+               }
+       }
+
        /**
         * Add text to the end of the display.
         *
@@ -866,14 +898,15 @@ class HTMLForm extends ContextSource {
                # For good measure (it is the default)
                $this->getOutput()->preventClickjacking();
                $this->getOutput()->addModules( 'mediawiki.htmlform' );
+               $this->getOutput()->addModuleStyles( 'mediawiki.htmlform.styles' );
 
                $html = ''
                        . $this->getErrors( $submitResult )
-                       . $this->mHeader
+                       . $this->getHeaderText()
                        . $this->getBody()
                        . $this->getHiddenFields()
                        . $this->getButtons()
-                       . $this->mFooter;
+                       . $this->getFooterText();
 
                $html = $this->wrapForm( $html );
 
@@ -893,7 +926,6 @@ class HTMLForm extends ContextSource {
                $attribs = array(
                        'action' => $this->getAction(),
                        'method' => $this->getMethod(),
-                       'class' => array( 'visualClear' ),
                        'enctype' => $encType,
                );
                if ( !empty( $this->mId ) ) {
@@ -912,10 +944,11 @@ class HTMLForm extends ContextSource {
        function wrapForm( $html ) {
                # Include a <fieldset> wrapper for style, if requested.
                if ( $this->mWrapperLegend !== false ) {
-                       $html = Xml::fieldset( $this->mWrapperLegend, $html );
+                       $legend = is_string( $this->mWrapperLegend ) ? $this->mWrapperLegend : false;
+                       $html = Xml::fieldset( $legend, $html );
                }
 
-               return Html::rawElement( 'form', $this->getFormAttributes(), $html );
+               return Html::rawElement( 'form', $this->getFormAttributes() + array( 'class' => 'visualClear' ), $html );
        }
 
        /**
@@ -972,7 +1005,10 @@ class HTMLForm extends ContextSource {
                        $attribs['class'] = array( 'mw-htmlform-submit' );
 
                        if ( $useMediaWikiUIEverywhere ) {
-                               array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-' . $this->mSubmitFlag );
+                               foreach ( $this->mSubmitFlags as $flag ) {
+                                       array_push( $attribs['class'], 'mw-ui-' . $flag );
+                               }
+                               array_push( $attribs['class'], 'mw-ui-button' );
                        }
 
                        $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
@@ -1099,7 +1135,7 @@ class HTMLForm extends ContextSource {
         * @since 1.24
         */
        public function setSubmitDestructive() {
-               $this->mSubmitFlag = 'destructive';
+               $this->mSubmitFlags = array( 'destructive', 'primary' );
        }
 
        /**
@@ -1107,7 +1143,7 @@ class HTMLForm extends ContextSource {
         * @since 1.25
         */
        public function setSubmitProgressive() {
-               $this->mSubmitFlag = 'progressive';
+               $this->mSubmitFlags = array( 'progressive', 'primary' );
        }
 
        /**
@@ -1219,9 +1255,10 @@ class HTMLForm extends ContextSource {
         * Prompt the whole form to be wrapped in a "<fieldset>", with
         * this text as its "<legend>" element.
         *
-        * @param string|bool $legend HTML to go inside the "<legend>" element, or
-        * false for no <legend>
-        *     Will be escaped
+        * @param string|bool $legend If false, no wrapper or legend will be displayed.
+        *     If true, a wrapper will be displayed, but no legend.
+        *     If a string, a wrapper will be displayed with that string as a legend.
+        *     The string will be escaped before being output (this doesn't support HTML).
         *
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
@@ -1295,11 +1332,14 @@ class HTMLForm extends ContextSource {
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
        public function setMethod( $method = 'post' ) {
-               $this->mMethod = $method;
+               $this->mMethod = strtolower( $method );
 
                return $this;
        }
 
+       /**
+        * @return string Always lowercase
+        */
        public function getMethod() {
                return $this->mMethod;
        }
@@ -1323,7 +1363,7 @@ class HTMLForm extends ContextSource {
                &$hasUserVisibleFields = false ) {
                $displayFormat = $this->getDisplayFormat();
 
-               $html = '';
+               $html = array();
                $subsectionHtml = '';
                $hasLabel = false;
 
@@ -1335,7 +1375,7 @@ class HTMLForm extends ContextSource {
                                $v = empty( $value->mParams['nodata'] )
                                        ? $this->mFieldData[$key]
                                        : $value->getDefault();
-                               $html .= $value->$getFieldHtmlMethod( $v );
+                               $html[] = $value->$getFieldHtmlMethod( $v );
 
                                $labelValue = trim( $value->getLabel() );
                                if ( $labelValue != '&#160;' && $labelValue !== '' ) {
@@ -1362,12 +1402,9 @@ class HTMLForm extends ContextSource {
 
                                        $legend = $this->getLegend( $key );
 
-                                       if ( isset( $this->mSectionHeaders[$key] ) ) {
-                                               $section = $this->mSectionHeaders[$key] . $section;
-                                       }
-                                       if ( isset( $this->mSectionFooters[$key] ) ) {
-                                               $section .= $this->mSectionFooters[$key];
-                                       }
+                                       $section = $this->getHeaderText( $key ) .
+                                               $section .
+                                               $this->getFooterText( $key );
 
                                        $attributes = array();
                                        if ( $fieldsetIDPrefix ) {
@@ -1381,47 +1418,56 @@ class HTMLForm extends ContextSource {
                        }
                }
 
-               if ( $displayFormat !== 'raw' ) {
-                       $classes = array();
+               $html = $this->formatSection( $html, $sectionName, $hasLabel );
 
-                       if ( !$hasLabel ) { // Avoid strange spacing when no labels exist
-                               $classes[] = 'mw-htmlform-nolabel';
+               if ( $subsectionHtml ) {
+                       if ( $this->mSubSectionBeforeFields ) {
+                               return $subsectionHtml . "\n" . $html;
+                       } else {
+                               return $html . "\n" . $subsectionHtml;
                        }
+               } else {
+                       return $html;
+               }
+       }
 
-                       $attribs = array(
-                               'class' => implode( ' ', $classes ),
-                       );
+       /**
+        * Put a form section together from the individual fields' HTML, merging it and wrapping.
+        * @param array $fieldsHtml
+        * @param string $sectionName
+        * @param bool $anyFieldHasLabel
+        * @return string HTML
+        */
+       protected function formatSection( array $fieldsHtml, $sectionName, $anyFieldHasLabel ) {
+               $displayFormat = $this->getDisplayFormat();
+               $html = implode( '', $fieldsHtml );
 
-                       if ( $sectionName ) {
-                               $attribs['id'] = Sanitizer::escapeId( $sectionName );
-                       }
+               if ( $displayFormat === 'raw' ) {
+                       return $html;
+               }
 
-                       if ( $displayFormat === 'table' ) {
-                               $html = Html::rawElement( 'table',
-                                               $attribs,
-                                               Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
-                       } elseif ( $displayFormat === 'inline' ) {
-                               $html = Html::rawElement( 'span', $attribs, "\n$html\n" );
-                       } elseif ( $displayFormat === 'ooui' ) {
-                               $config = array(
-                                       'classes' => $classes,
-                               );
-                               if ( $sectionName ) {
-                                       $config['id'] = Sanitizer::escapeId( $sectionName );
-                               }
-                               $fieldset = new OOUI\FieldsetLayout( $config );
-                               // Ewww. We should pass this as $config['items'], but there might be string snippets.
-                               $fieldset->group->appendContent( new OOUI\HtmlSnippet( $html ) );
-                               $html = $fieldset->toString();
-                       } else {
-                               $html = Html::rawElement( 'div', $attribs, "\n$html\n" );
-                       }
+               $classes = array();
+
+               if ( !$anyFieldHasLabel ) { // Avoid strange spacing when no labels exist
+                       $classes[] = 'mw-htmlform-nolabel';
+               }
+
+               $attribs = array(
+                       'class' => implode( ' ', $classes ),
+               );
+
+               if ( $sectionName ) {
+                       $attribs['id'] = Sanitizer::escapeId( $sectionName );
                }
 
-               if ( $this->mSubSectionBeforeFields ) {
-                       return $subsectionHtml . "\n" . $html;
+               if ( $displayFormat === 'table' ) {
+                       return Html::rawElement( 'table',
+                                       $attribs,
+                                       Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n";
+               } elseif ( $displayFormat === 'inline' ) {
+                       return Html::rawElement( 'span', $attribs, "\n$html\n" );
                } else {
-                       return $html . "\n" . $subsectionHtml;
+                       return Html::rawElement( 'div', $attribs, "\n$html\n" );
                }
        }
 
index e19273b..13756e3 100644 (file)
@@ -49,7 +49,7 @@ abstract class HTMLFormField {
         * Defaults to false, which getOOUI will interpret as "use the HTML version"
         *
         * @param string $value
-        * @return OOUI\Widget|false
+        * @return OOUI\\Widget|false
         */
        function getInputOOUI( $value ) {
                return false;
@@ -558,38 +558,47 @@ abstract class HTMLFormField {
         *
         * @param string $value The value to set the input to.
         *
-        * @return string
+        * @return OOUI\\FieldLayout|OOUI\\ActionFieldLayout
         */
        public function getOOUI( $value ) {
-               list( $errors, $errorClass ) = $this->getErrorsAndErrorClass( $value );
-
                $inputField = $this->getInputOOUI( $value );
 
                if ( !$inputField ) {
-                       // This field doesn't have an OOUI implementation yet at all.
-                       // OK, use this trick:
-                       return $this->getDiv( $value );
+                       // This field doesn't have an OOUI implementation yet at all. Fall back to getDiv() to
+                       // generate the whole field, label and errors and all, then wrap it in a Widget.
+                       // It might look weird, but it'll work OK.
+                       return $this->getFieldLayoutOOUI(
+                               new OOUI\Widget( array( 'content' => new OOUI\HtmlSnippet( $this->getDiv( $value ) ) ) ),
+                               array( 'infusable' => false )
+                       );
                }
 
                $infusable = true;
                if ( is_string( $inputField ) ) {
-                       // Mmm… We have an OOUI implementation, but it's not complete, and we got a load of HTML.
-                       // Cheat a little and wrap it in a widget! It won't be infusable, though, since client-side
+                       // We have an OOUI implementation, but it's not proper, and we got a load of HTML.
+                       // Cheat a little and wrap it in a widget. It won't be infusable, though, since client-side
                        // JavaScript doesn't know how to rebuilt the contents.
                        $inputField = new OOUI\Widget( array( 'content' => new OOUI\HtmlSnippet( $inputField ) ) );
                        $infusable = false;
                }
 
                $fieldType = get_class( $this );
-               $field = new OOUI\FieldLayout( $inputField, array(
-                       'classes' => array( "mw-htmlform-field-$fieldType", $this->mClass, $errorClass ),
+               $helpText = $this->getHelpText();
+               $errors = $this->getErrorsRaw( $value );
+               foreach ( $errors as &$error ) {
+                       $error = new OOUI\HtmlSnippet( $error );
+               }
+
+               $config = array(
+                       'classes' => array( "mw-htmlform-field-$fieldType", $this->mClass ),
                        'align' => $this->getLabelAlignOOUI(),
                        'label' => $this->getLabel(),
-                       'help' => $this->getHelpText(),
+                       'help' => $helpText !== null ? new OOUI\HtmlSnippet( $helpText ) : null,
+                       'errors' => $errors,
                        'infusable' => $infusable,
-               ) );
+               );
 
-               return $field . $errors;
+               return $this->getFieldLayoutOOUI( $inputField, $config );
        }
 
        /**
@@ -600,6 +609,18 @@ abstract class HTMLFormField {
                return 'top';
        }
 
+       /**
+        * Get a FieldLayout (or subclass thereof) to wrap this field in when using OOUI output.
+        * @return OOUI\\FieldLayout|OOUI\\ActionFieldLayout
+        */
+       protected function getFieldLayoutOOUI( $inputField, $config ) {
+               if ( isset( $this->mClassWithButton ) ) {
+                       $buttonWidget = $this->mClassWithButton->getInputOOUI( '' );
+                       return new OOUI\ActionFieldLayout( $inputField, $buttonWidget, $config );
+               }
+               return new OOUI\FieldLayout( $inputField, $config );
+       }
+
        /**
         * Get the complete raw fields for the input, including help text,
         * labels, and whatever.
@@ -729,7 +750,7 @@ abstract class HTMLFormField {
        /**
         * Determine the help text to display
         * @since 1.20
-        * @return string
+        * @return string HTML
         */
        public function getHelpText() {
                $helptext = null;
@@ -764,7 +785,7 @@ abstract class HTMLFormField {
         * @since 1.20
         *
         * @param string $value The value of the input
-        * @return array
+        * @return array array( $errors, $errorClass )
         */
        public function getErrorsAndErrorClass( $value ) {
                $errors = $this->validate( $value, $this->mParent->mFieldData );
@@ -780,6 +801,32 @@ abstract class HTMLFormField {
                return array( $errors, $errorClass );
        }
 
+       /**
+        * Determine form errors to display, returning them in an array.
+        *
+        * @since 1.26
+        * @param string $value The value of the input
+        * @return string[] Array of error HTML strings
+        */
+       public function getErrorsRaw( $value ) {
+               $errors = $this->validate( $value, $this->mParent->mFieldData );
+
+               if ( is_bool( $errors ) || !$this->mParent->wasSubmitted() ) {
+                       $errors = array();
+               }
+
+               if ( !is_array( $errors ) ) {
+                       $errors = array( $errors );
+               }
+               foreach ( $errors as &$error ) {
+                       if ( $error instanceof Message ) {
+                               $error = $error->parse();
+                       }
+               }
+
+               return $errors;
+       }
+
        /**
         * @return string
         */
@@ -881,7 +928,7 @@ abstract class HTMLFormField {
 
                        if ( in_array( $key, $boolAttribs ) ) {
                                if ( !empty( $this->mParams[$key] ) ) {
-                                       $ret[$mappedKey] = '';
+                                       $ret[$mappedKey] = $mappedKey;
                                }
                        } elseif ( isset( $this->mParams[$key] ) ) {
                                $ret[$mappedKey] = $this->mParams[$key];
index 113bb4b..6b02c49 100644 (file)
@@ -18,6 +18,9 @@ class HTMLFormFieldWithButton extends HTMLFormField {
        /** @var string $mButtonType Value for the button in this field */
        protected $mButtonValue;
 
+       /** @var string $mButtonType Value for the button in this field */
+       protected $mButtonFlags = array( 'primary', 'progressive' );
+
        public function __construct( $info ) {
                if ( isset( $info['buttonclass'] ) ) {
                        $this->mButtonClass = $info['buttonclass'];
@@ -34,6 +37,9 @@ class HTMLFormFieldWithButton extends HTMLFormField {
                if ( isset( $info['buttontype'] ) ) {
                        $this->mButtonType = $info['buttontype'];
                }
+               if ( isset( $info['buttonflags'] ) ) {
+                       $this->mButtonFlags = $info['buttonflags'];
+               }
                parent::__construct( $info );
        }
 
@@ -46,6 +52,16 @@ class HTMLFormFieldWithButton extends HTMLFormField {
                return Html::input( $this->mButtonName, $this->mButtonValue, $this->mButtonType, $attr );
        }
 
+       public function getInputOOUI( $value ) {
+               return new OOUI\ButtonInputWidget( array(
+                       'name' => $this->mButtonName,
+                       'value' => $this->mButtonValue,
+                       'type' => $this->mButtonType,
+                       'label' => $this->mButtonValue,
+                       'flags' => $this->mButtonFlags,
+               ) );
+       }
+
        /**
         * Combines the passed element with a button.
         * @param String $element Element to combine the button with.
index 23ca3bf..0e4f4f3 100644 (file)
@@ -64,6 +64,10 @@ class HTMLSelectAndOtherField extends HTMLSelectField {
                return "$select<br />\n$textbox";
        }
 
+       function getInputOOUI( $value ) {
+               return false;
+       }
+
        /**
         * @param WebRequest $request
         *
index b2ec9ca..4efdfbf 100644 (file)
@@ -3,13 +3,16 @@
  * Wrapper for Html::namespaceSelector to use in HTMLForm
  */
 class HTMLSelectNamespace extends HTMLFormField {
-       function getInputHTML( $value ) {
-               $allValue = ( isset( $this->mParams['all'] ) ? $this->mParams['all'] : 'all' );
+       public function __construct( $params ) {
+               parent::__construct( $params );
+               $this->mAllValue = isset( $this->mParams['all'] ) ? $this->mParams['all'] : 'all';
+       }
 
+       function getInputHTML( $value ) {
                return Html::namespaceSelector(
                        array(
                                'selected' => $value,
-                               'all' => $allValue
+                               'all' => $this->mAllValue
                        ), array(
                                'name' => $this->mName,
                                'id' => $this->mID,
@@ -17,4 +20,13 @@ class HTMLSelectNamespace extends HTMLFormField {
                        )
                );
        }
+
+       public function getInputOOUI( $value ) {
+               return new MediaWiki\Widget\NamespaceInputWidget( array(
+                       'value' => $value,
+                       'name' => $this->mName,
+                       'id' => $this->mID,
+                       'includeAllValue' => $this->mAllValue,
+               ) );
+       }
 }
index cbf7d12..3e7acdf 100644 (file)
@@ -62,6 +62,10 @@ class HTMLSelectOrOtherField extends HTMLTextField {
                return "$select<br />\n$textbox";
        }
 
+       function getInputOOUI( $value ) {
+               return false;
+       }
+
        /**
         * @param WebRequest $request
         *
index 5c04ee2..157116d 100644 (file)
@@ -113,18 +113,17 @@ class HTMLTextField extends HTMLFormField {
                        'tabindex' => 'tabIndex',
                ) );
 
-               if ( isset( $attribs['readOnly'] ) ) {
-                       // This needs to be set to a boolean value
-                       $attribs['readOnly'] = true;
-               }
-
                $type = $this->getType( $attribs );
 
-               return new OOUI\TextInputWidget( array(
+               return $this->getInputWidget( array(
                        'id' => $this->mID,
                        'name' => $this->mName,
                        'value' => $value,
                        'type' => $type,
                ) + $attribs );
        }
+
+       protected function getInputWidget( $params ) {
+               return new OOUI\TextInputWidget( $params );
+       }
 }
diff --git a/includes/htmlform/HTMLTitleTextField.php b/includes/htmlform/HTMLTitleTextField.php
new file mode 100644 (file)
index 0000000..a225c67
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+
+use MediaWiki\Widget\TitleInputWidget;
+
+/**
+ * Implements a text input field for page titles.
+ * Automatically does validation that the title is valid,
+ * as well as autocompletion if using the OOUI display format.
+ *
+ * Note: Forms using GET requests will need to make sure the title value is not
+ * an empty string.
+ *
+ * Optional parameters:
+ * 'namespace' - Namespace the page must be in
+ * 'relative' - If true and 'namespace' given, strip/add the namespace from/to the title as needed
+ * 'creatable' - Whether to validate the title is creatable (not a special page)
+ * 'exists' - Whether to validate that the title already exists
+ *
+ * @since 1.26
+ */
+class HTMLTitleTextField extends HTMLTextField {
+       public function __construct( $params ) {
+               $params += array(
+                       'namespace' => false,
+                       'relative' => false,
+                       'creatable' => false,
+                       'exists' => false,
+               );
+
+               parent::__construct( $params );
+       }
+
+       public function validate( $value, $alldata ) {
+               if ( $this->mParent->getMethod() === 'get' && $value === '' ) {
+                       // If the form is a GET form and has no value, assume it hasn't been
+                       // submitted yet, and skip validation
+                       return parent::validate( $value, $alldata );
+               }
+               try {
+                       if ( !$this->mParams['relative'] ) {
+                               $title = Title::newFromTextThrow( $value );
+                       } else {
+                               // Can't use Title::makeTitleSafe(), because it doesn't throw useful exceptions
+                               global $wgContLang;
+                               $namespaceName = $wgContLang->getNsText( $this->mParams['namespace'] );
+                               $title = Title::newFromTextThrow( $namespaceName . ':' . $value );
+                       }
+               } catch ( MalformedTitleException $e ) {
+                       $msg = $this->msg( $e->getErrorMessage() );
+                       $params = $e->getErrorMessageParameters();
+                       if ( $params ) {
+                               $msg->params( $params );
+                       }
+                       return $msg->parse();
+               }
+
+               $text = $title->getPrefixedText();
+               if ( $this->mParams['namespace'] !== false && !$title->inNamespace( $this->mParams['namespace'] ) ) {
+                       return $this->msg( 'htmlform-title-badnamespace', $this->mParams['namespace'], $text )->parse();
+               }
+
+               if ( $this->mParams['creatable'] && !$title->canExist() ) {
+                       return $this->msg( 'htmlform-title-not-creatable', $text )->escaped();
+               }
+
+               if ( $this->mParams['exists'] && !$title->exists() ) {
+                       return $this->msg( 'htmlform-title-not-exists', $text )->parse();
+               }
+
+               return parent::validate( $value, $alldata );
+       }
+
+       protected function getInputWidget( $params ) {
+               $this->mParent->getOutput()->addModules( 'mediawiki.widgets' );
+               if ( $this->mParams['namespace'] !== false ) {
+                       $params['namespace'] = $this->mParams['namespace'];
+               }
+               $params['relative'] = $this->mParams['relative'];
+               return new TitleInputWidget( $params );
+       }
+}
diff --git a/includes/htmlform/HTMLUserTextField.php b/includes/htmlform/HTMLUserTextField.php
new file mode 100644 (file)
index 0000000..5869002
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+use MediaWiki\Widget\UserInputWidget;
+
+/**
+ * Implements a text input field for user names.
+ * Automatically auto-completes if using the OOUI display format.
+ *
+ * FIXME: Does not work for forms that support GET requests.
+ *
+ * Optional parameters:
+ * 'exists' - Whether to validate that the user already exists
+ *
+ * @since 1.26
+ */
+class HTMLUserTextField extends HTMLTextField {
+       public function __construct( $params ) {
+               $params += array(
+                       'exists' => false,
+                       'ipallowed' => false,
+               );
+
+               parent::__construct( $params );
+       }
+
+       public function validate( $value, $alldata ) {
+               // check, if a user exists with the given username
+               $user = User::newFromName( $value, false );
+
+               if ( !$user ) {
+                       return $this->msg( 'htmlform-user-not-valid', $value )->parse();
+               } elseif (
+                       ( $this->mParams['exists'] && $user->getId() === 0 ) &&
+                       !( $this->mParams['ipallowed'] && User::isIP( $value ) )
+               ) {
+                       return $this->msg( 'htmlform-user-not-exists', $user->getName() )->parse();
+               }
+
+               return parent::validate( $value, $alldata );
+       }
+
+       protected function getInputWidget( $params ) {
+               $this->mParent->getOutput()->addModules( 'mediawiki.widgets' );
+
+               return new UserInputWidget( $params );
+       }
+}
index 80e91f7..84d40a1 100644 (file)
  * Compact stacked vertical format for forms, implemented using OOUI widgets.
  */
 class OOUIHTMLForm extends HTMLForm {
-       /**
-        * Wrapper and its legend are never generated in OOUI mode.
-        * @var boolean
-        */
-       protected $mWrapperLegend = false;
+       private $oouiErrors;
 
        public function __construct( $descriptor, $context = null, $messagePrefix = '' ) {
                parent::__construct( $descriptor, $context, $messagePrefix );
@@ -71,7 +67,7 @@ class OOUIHTMLForm extends HTMLForm {
                        $attribs['type'] = 'submit';
                        $attribs['label'] = $this->getSubmitText();
                        $attribs['value'] = $this->getSubmitText();
-                       $attribs['flags'] = array( $this->mSubmitFlag );
+                       $attribs['flags'] = $this->mSubmitFlags;
 
                        $buttons .= new OOUI\ButtonInputWidget( $attribs );
                }
@@ -110,23 +106,116 @@ class OOUIHTMLForm extends HTMLForm {
                return $html;
        }
 
-       function getFormAttributes() {
-               $attribs = parent::getFormAttributes();
-               if ( !isset( $attribs['class'] ) ) {
-                       $attribs['class'] = '';
+       /**
+        * Put a form section together from the individual fields' HTML, merging it and wrapping.
+        * @param OOUI\\FieldLayout[] $fieldsHtml
+        * @param string $sectionName
+        * @param bool $anyFieldHasLabel Unused
+        * @return string HTML
+        */
+       protected function formatSection( array $fieldsHtml, $sectionName, $anyFieldHasLabel ) {
+               $config = array(
+                       'items' => $fieldsHtml,
+               );
+               if ( $sectionName ) {
+                       $config['id'] = Sanitizer::escapeId( $sectionName );
+               }
+               if ( is_string( $this->mWrapperLegend ) ) {
+                       $config['label'] = $this->mWrapperLegend;
+               }
+               return new OOUI\FieldsetLayout( $config );
+       }
+
+       /**
+        * @param string|array|Status $err
+        * @return string
+        */
+       function getErrors( $err ) {
+               if ( !$err ) {
+                       $errors = array();
+               } else if ( $err instanceof Status ) {
+                       if ( $err->isOK() ) {
+                               $errors = array();
+                       } else {
+                               $errors = $err->getErrorsByType( 'error' );
+                               foreach ( $errors as &$error ) {
+                                       // Input:  array( 'message' => 'foo', 'errors' => array( 'a', 'b', 'c' ) )
+                                       // Output: array( 'foo', 'a', 'b', 'c' )
+                                       $error = array_merge( array( $error['message'] ), $error['params'] );
+                               }
+                       }
+               } else {
+                       $errors = $err;
+                       if ( !is_array( $errors ) ) {
+                               $errors = array( $errors );
+                       }
+               }
+
+               foreach ( $errors as &$error ) {
+                       if ( is_array( $error ) ) {
+                               $msg = array_shift( $error );
+                       } else {
+                               $msg = $error;
+                               $error = array();
+                       }
+                       $error = $this->msg( $msg, $error )->parse();
+                       $error = new OOUI\HtmlSnippet( $error );
                }
 
-               if ( is_string( $attribs['class'] ) ) {
-                       $attribs['class'] = trim( $attribs['class'] . ' mw-htmlform-ooui' );
+               // Used in getBody()
+               $this->oouiErrors = $errors;
+               return '';
+       }
+
+       function getHeaderText( $section = null ) {
+               if ( is_null( $section ) ) {
+                       // We handle $this->mHeader elsewhere, in getBody()
+                       return '';
                } else {
-                       $attribs['class'][] = 'mw-htmlform-ooui';
+                       return parent::getHeaderText( $section );
                }
+       }
 
-               return $attribs;
+       function getBody() {
+               $fieldset = parent::getBody();
+               // FIXME This only works for forms with no subsections
+               if ( $fieldset instanceof OOUI\FieldsetLayout ) {
+                       $classes = array( 'mw-htmlform-ooui-header' );
+                       if ( !$this->mHeader ) {
+                               $classes[] = 'mw-htmlform-ooui-header-empty';
+                       }
+                       if ( $this->oouiErrors ) {
+                               $classes[] = 'mw-htmlform-ooui-header-errors';
+                       }
+                       $fieldset->addItems( array(
+                               new OOUI\FieldLayout(
+                                       new OOUI\LabelWidget( array( 'label' => new OOUI\HtmlSnippet( $this->mHeader ) ) ),
+                                       array(
+                                               'align' => 'top',
+                                               'errors' => $this->oouiErrors,
+                                               'classes' => $classes,
+                                       )
+                               )
+                       ), 0 );
+               }
+               return $fieldset;
        }
 
        function wrapForm( $html ) {
-               // Always discard $this->mWrapperLegend
-               return Html::rawElement( 'form', $this->getFormAttributes(), $html );
+               $form = new OOUI\FormLayout( $this->getFormAttributes() + array(
+                       'classes' => array( 'mw-htmlform-ooui' ),
+                       'content' => new OOUI\HtmlSnippet( $html ),
+               ) );
+
+               // Include a wrapper for style, if requested.
+               $form = new OOUI\PanelLayout( array(
+                       'classes' => array( 'mw-htmlform-ooui-wrapper' ),
+                       'expanded' => false,
+                       'padded' => $this->mWrapperLegend !== false,
+                       'framed' => $this->mWrapperLegend !== false,
+                       'content' => $form,
+               ) );
+
+               return $form;
        }
 }
index f1fd05d..3788379 100644 (file)
@@ -65,7 +65,7 @@ class VFormHTMLForm extends HTMLForm {
 
        protected function getFormAttributes() {
                $attribs = parent::getFormAttributes();
-               array_push( $attribs['class'], 'mw-ui-vform', 'mw-ui-container' );
+               $attribs['class'] = array( 'mw-ui-vform', 'mw-ui-container', 'visualClear' );
                return $attribs;
        }
 
@@ -95,8 +95,10 @@ class VFormHTMLForm extends HTMLForm {
                        $attribs['class'] = array(
                                'mw-htmlform-submit',
                                'mw-ui-button mw-ui-big mw-ui-block',
-                               'mw-ui-' . $this->mSubmitFlag,
                        );
+                       foreach ( $this->mSubmitFlags as $flag ) {
+                               $attribs['class'][] = 'mw-ui-' . $flag;
+                       }
 
                        $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
                }
index 702f850..7070790 100644 (file)
@@ -145,15 +145,26 @@ abstract class DatabaseUpdater {
                        return; // already loaded
                }
                $vars = Installer::getExistingLocalSettings();
-               if ( !$vars ) {
-                       return; // no LocalSettings found
+
+               $registry = ExtensionRegistry::getInstance();
+               $queue = $registry->getQueue();
+               // Don't accidentally load extensions in the future
+               $registry->clearQueue();
+
+               // This will automatically add "AutoloadClasses" to $wgAutoloadClasses
+               $data = $registry->readFromQueue( $queue );
+               $hooks = array( 'wgHooks' => array( 'LoadExtensionSchemaUpdates' => array() ) );
+               if ( isset( $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
+                       $hooks = $data['globals']['wgHooks']['LoadExtensionSchemaUpdates'];
                }
-               if ( !isset( $vars['wgHooks'] ) || !isset( $vars['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
-                       return;
+               if ( $vars && isset( $vars['wgHooks']['LoadExtensionSchemaUpdates'] ) ) {
+                       $hooks = array_merge_recursive( $hooks, $vars['wgHooks']['LoadExtensionSchemaUpdates'] );
                }
                global $wgHooks, $wgAutoloadClasses;
-               $wgHooks['LoadExtensionSchemaUpdates'] = $vars['wgHooks']['LoadExtensionSchemaUpdates'];
-               $wgAutoloadClasses = $wgAutoloadClasses + $vars['wgAutoloadClasses'];
+               $wgHooks['LoadExtensionSchemaUpdates'] = $hooks;
+               if ( $vars && isset( $vars['wgAutoloadClasses'] ) ) {
+                       $wgAutoloadClasses += $vars['wgAutoloadClasses'];
+               }
        }
 
        /**
index 2818349..662469b 100644 (file)
@@ -538,6 +538,10 @@ abstract class Installer {
                global $wgAutoloadClasses;
                $wgAutoloadClasses = array();
 
+               // LocalSettings.php should not call functions, except wfLoadSkin/wfLoadExtensions
+               // Define the required globals here, to ensure, the functions can do it work correctly.
+               global $wgExtensionDirectory, $wgStyleDirectory;
+
                MediaWiki\suppressWarnings();
                $_lsExists = file_exists( "$IP/LocalSettings.php" );
                MediaWiki\restoreWarnings();
index 7b1cfdc..09b5929 100644 (file)
@@ -332,9 +332,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 ## https://www.mediawiki.org/wiki/Manual:Short_URL
 \$wgScriptPath = \"{$this->values['wgScriptPath']}\";
 ${serverSetting}
-## The relative URL path to the skins directory
-\$wgStylePath = \"\$wgScriptPath/skins\";
-\$wgResourceBasePath = \$wgScriptPath;
 
 ## The relative URL path to the logo.  Make sure you change this from the default,
 ## or else you'll overwrite your logo when you upgrade!
index 3af08d6..e5c1a1d 100644 (file)
@@ -93,9 +93,7 @@ class MysqlInstaller extends DatabaseInstaller {
 
        public function submitConnectForm() {
                // Get variables from the request.
-               $newValues = $this->setVarsFromRequest( array(
-                       'wgDBserver', 'wgDBname', 'wgDBprefix', '_InstallUser', '_InstallPassword'
-               ) );
+               $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBname', 'wgDBprefix' ) );
 
                // Validate them.
                $status = Status::newGood();
@@ -110,12 +108,6 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( !preg_match( '/^[a-z0-9_-]*$/i', $newValues['wgDBprefix'] ) ) {
                        $status->fatal( 'config-invalid-db-prefix', $newValues['wgDBprefix'] );
                }
-               if ( !strlen( $newValues['_InstallUser'] ) ) {
-                       $status->fatal( 'config-db-username-empty' );
-               }
-               if ( !strlen( $newValues['_InstallPassword'] ) ) {
-                       $status->fatal( 'config-db-password-empty', $newValues['_InstallUser'] );
-               }
                if ( !$status->isOK() ) {
                        return $status;
                }
index 36d2c1d..aa60c01 100644 (file)
@@ -267,12 +267,14 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-fa_major_mime-chemical.sql' ),
 
                        // 1.25
-                       array( 'dropTable', 'hitcounter' ),
-                       array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
-                       array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
                        array( 'doUserNewTalkUseridUnsigned' ),
                        // note this patch covers other _comment and _description fields too
                        array( 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ),
+
+                       // 1.26
+                       array( 'dropTable', 'hitcounter' ),
+                       array( 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ),
+                       array( 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ),
                );
        }
 
index b18fe94..cb40f88 100644 (file)
@@ -83,10 +83,7 @@ class PostgresInstaller extends DatabaseInstaller {
 
        function submitConnectForm() {
                // Get variables from the request
-               $newValues = $this->setVarsFromRequest( array(
-                       'wgDBserver', 'wgDBport', 'wgDBname', 'wgDBmwschema',
-                       '_InstallUser', '_InstallPassword'
-               ) );
+               $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBport', 'wgDBname', 'wgDBmwschema' ) );
 
                // Validate them
                $status = Status::newGood();
@@ -98,12 +95,6 @@ class PostgresInstaller extends DatabaseInstaller {
                if ( !preg_match( '/^[a-zA-Z0-9_]*$/', $newValues['wgDBmwschema'] ) ) {
                        $status->fatal( 'config-invalid-schema', $newValues['wgDBmwschema'] );
                }
-               if ( !strlen( $newValues['_InstallUser'] ) ) {
-                       $status->fatal( 'config-db-username-empty' );
-               }
-               if ( !strlen( $newValues['_InstallPassword'] ) ) {
-                       $status->fatal( 'config-db-password-empty', $newValues['_InstallUser'] );
-               }
 
                // Submit user box
                if ( $status->isOK() ) {
index 6ac5436..e1063b0 100644 (file)
@@ -407,6 +407,8 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgField', 'mwuser', 'user_password_expires', 'TIMESTAMPTZ NULL' ),
                        array( 'changeFieldPurgeTable', 'l10n_cache', 'lc_value', 'bytea',
                                "replace(lc_value,'\','\\\\')::bytea" ),
+                       // 1.23.9
+                       array( 'rebuildTextSearch' ),
 
                        // 1.24
                        array( 'addPgField', 'page_props', 'pp_sortkey', 'float NULL' ),
@@ -947,4 +949,12 @@ END;
                        $this->applyPatch( 'patch-tsearch2funcs.sql', false, "Rewriting tsearch2 triggers" );
                }
        }
+
+       protected function rebuildTextSearch() {
+               if ( $this->updateRowExists( 'patch-textsearch_bug66650.sql' ) ) {
+                       $this->output( "...bug 66650 already fixed or not applicable.\n" );
+                       return true;
+               };
+               $this->applyPatch( 'patch-textsearch_bug66650.sql', false, "Rebuilding text search for bug 66650" );
+       }
 }
index 4930826..74904f1 100644 (file)
@@ -696,11 +696,11 @@ class WebInstaller extends Installer {
                $text = wfMessage( $msg, $args )->useDatabase( false )->plain();
                $html = $this->parse( $text, true );
 
-               return "<div class=\"mw-help-field-container\">\n" .
-                       "<span class=\"mw-help-field-hint\" title=\"" .
+               return "<div class=\"config-help-field-container\">\n" .
+                       "<span class=\"config-help-field-hint\" title=\"" .
                        wfMessage( 'config-help-tooltip' )->escaped() . "\">" .
                        wfMessage( 'config-help' )->escaped() . "</span>\n" .
-                       "<span class=\"mw-help-field-data\">" . $html . "</span>\n" .
+                       "<span class=\"config-help-field-data\">" . $html . "</span>\n" .
                        "</div>\n";
        }
 
index f40de71..8715d51 100644 (file)
@@ -287,10 +287,10 @@ class WebInstallerLanguage extends WebInstallerPage {
        public function getLanguageSelector( $name, $label, $selectedCode, $helpHtml = '' ) {
                global $wgDummyLanguageCodes;
 
-               $s = $helpHtml;
+               $output = $helpHtml;
 
-               $s .= Html::openElement( 'select', array( 'id' => $name, 'name' => $name,
-                               'tabindex' => $this->parent->nextTabIndex() ) ) . "\n";
+               $select = new XmlSelect( $name, $name, $selectedCode );
+               $select->setAttribute( 'tabindex', $this->parent->nextTabIndex() );
 
                $languages = Language::fetchLanguageNames();
                ksort( $languages );
@@ -298,11 +298,11 @@ class WebInstallerLanguage extends WebInstallerPage {
                        if ( isset( $wgDummyLanguageCodes[$code] ) ) {
                                continue;
                        }
-                       $s .= "\n" . Xml::option( "$code - $lang", $code, $code == $selectedCode );
+                       $select->addOption( "$code - $lang", $code );
                }
-               $s .= "\n</select>\n";
 
-               return $this->parent->label( $label, $name, $s );
+               $output .= $select->getHTML();
+               return $this->parent->label( $label, $name, $output );
        }
 
 }
@@ -909,7 +909,8 @@ class WebInstallerName extends WebInstallerPage {
                $pwd = $this->getVar( '_AdminPassword' );
                $user = User::newFromName( $cname );
                if ( $user ) {
-                       $valid = $user->getPasswordValidity( $pwd );
+                       $status = $user->checkPasswordValidity( $pwd, 'create' );
+                       $valid = $status->isGood() ? true : $status->getMessage()->escaped();
                } else {
                        $valid = 'config-admin-name-invalid';
                }
index c43f356..13755e3 100644 (file)
@@ -55,6 +55,7 @@
        "config-db-wiki-settings": "حدِّد هذا الويكي",
        "config-db-name": "اسم قاعدة البيانات",
        "config-db-name-oracle": "سكيما قاعدة البيانات:",
+       "config-db-install-account": "حساب المستخدم للتنصيب",
        "config-db-username": "اسم مستخدم قاعدة البيانات:",
        "config-db-password": "كلمة سر قاعدة البيانات:",
        "config-db-prefix": "بادئة جدول قاعدة البيانات:",
        "config-license-cc-by": "المشاع الإبداعي النسبة للمؤلف",
        "config-license-cc-by-nc-sa": "المشاع الإبداعي النسبة للمؤلف غير تجاري المشاركة بالمثل",
        "config-license-pd": "ملكية عامة",
+       "config-license-cc-choose": "اختر ترخيص مشاع إبداعي مخصص",
        "config-email-settings": "إعدادات البريد الإلكتروني",
        "config-email-usertalk": "فعل إخطارات صفحات نقاش المستخدمين",
        "config-email-watchlist": "تمكين إشعارات قائمة المراقبة",
index baf4f6d..775e6e6 100644 (file)
@@ -1,7 +1,9 @@
 {
        "@metadata": {
                "authors": [
-                       "Mousa"
+                       "Mousa",
+                       "Koroğlu",
+                       "Ebrahimi-amir"
                ]
        },
        "config-desc": "مئدیاویکی قوروجوسو",
index 0aecb70..f40bc3e 100644 (file)
@@ -5,12 +5,14 @@
                        "Wikitanvir",
                        "Aftab1995",
                        "Tauhid16",
-                       "Aftabuzzaman"
+                       "Aftabuzzaman",
+                       "Hasive"
                ]
        },
        "config-desc": "মিডিয়াউইকির জন্য ইন্সটলার",
        "config-title": "মিডিয়াউইকি $1 ইন্সটলেশন",
        "config-information": "তথ্য",
+       "config-localsettings-upgrade": "<code>LocalSettings.php</code> ফাইলটি মুছে ফেলা হয়েছে। এই ইন্সটলেশনটি আরো উন্নত করতে দয়া করে <code>$wgUpgradeKey</code> কোডটি বক্সে দিন। আপনি এটি <code>LocalSettings.php</code> -এ পাবেন।",
        "config-localsettings-key": "হালনাগাদ কি",
        "config-localsettings-badkey": "আপনি যেই চাবিটি দিয়েছেন তা সঠিক নয়।",
        "config-session-error": "সেশন শুরুতে ত্রুটি: $1",
        "config-continue": "অব্যাহত →",
        "config-page-language": "ভাষা",
        "config-page-welcome": "মিডিয়াউইকিতে স্বাগতম!",
-       "config-page-dbconnect": "ডà§\87à¦\9fাবà§\87à¦\9cে সংযোগ দিন",
+       "config-page-dbconnect": "ডà§\87à¦\9fাবà§\87সে সংযোগ দিন",
        "config-page-upgrade": "ইতিমধ্যেই থাকা ইন্সটলেশন হালনাগাদ করুন",
-       "config-page-dbsettings": "ডà§\87à¦\9fাবà§\87à¦\9c সেটিংস",
+       "config-page-dbsettings": "ডà§\87à¦\9fাবà§\87স সেটিংস",
        "config-page-name": "নাম",
        "config-page-options": "অপশন",
        "config-page-install": "ইন্সটল",
        "config-page-complete": "সম্পূর্ণ!",
        "config-page-restart": "পুনরায় ইন্সটল প্রক্রিয়া চালু করুন",
        "config-page-readme": "এটি পড়ুন",
-       "config-page-releasenotes": "রিলিà¦\9c à¦¨à§\8bà¦\9f",
+       "config-page-releasenotes": "পà§\8dরà¦\95াশ à¦¸à¦\82à¦\95à§\8dরানà§\8dত à¦¬à¦¾à¦°à§\8dতা",
        "config-page-copying": "অনুলেপন",
        "config-page-upgradedoc": "হালনাগাদকরণ",
        "config-page-existingwiki": "ইতিমধ্যেই থাকা উইকি",
-       "config-help-restart": "à¦\86পনি à¦\95à§\80 à¦¸à¦\95ল à¦¸à¦\82রà¦\95à§\8dষিত à¦\89পাতà§\8dত à¦ªà¦°à¦¿à¦·à§\8dà¦\95ার à¦\95রতà§\87 à¦¯à¦¾ à¦\86পনি à¦ªà§\8dরবà§\87স à¦\95রিয়à§\87à¦\9bিলà§\87ন à¦\8fবà¦\82 à¦\87নà§\8dসà¦\9fালà§\87সন ব্যবস্থা পুনরায় আরম্ভ করতে চান?",
+       "config-help-restart": "à¦\86পনি à¦\95à§\80 à¦¸à¦\95ল à¦¸à¦\82রà¦\95à§\8dষিত à¦\89পাতà§\8dত à¦ªà¦°à¦¿à¦·à§\8dà¦\95ার à¦\95রতà§\87 à¦¯à¦¾ à¦\86পনি à¦ªà§\8dরবà§\87শ à¦\95রিয়à§\87à¦\9bিলà§\87ন à¦\8fবà¦\82 à¦\87নà§\8dসà¦\9fালà§\87শন ব্যবস্থা পুনরায় আরম্ভ করতে চান?",
        "config-restart": "হ্যাঁ, পুনরায় চালু করুন",
        "config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।",
        "config-env-hhvm": "HHVM $1 ইনস্টল করা হয়েছে।",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] ইনস্টল করা হয়েছে",
        "config-apc": "[http://www.php.net/apc এপিসি] ইনস্টল হয়েছে",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ইনস্টল করা হয়েছে",
-       "config-db-type": "ডà§\87à¦\9fাবà§\87à¦\9cের ধরন:",
+       "config-db-type": "ডà§\87à¦\9fাবà§\87সের ধরন:",
        "config-db-host": "ডেটাবেজের হোস্ট:",
        "config-db-wiki-settings": "এই উইকি সনাক্ত করুন",
-       "config-db-name": "à¦\89পাতà§\8dতসà¦\82à¦\97à§\8dরহশালা নামঃ",
+       "config-db-name": "ডà§\87à¦\9fাবà§\87সà§\87র নামঃ",
        "config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট",
        "config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:",
        "config-db-password": "ডেটাবেজের পাসওয়ার্ড:",
-       "config-db-username-empty": "আপনাকে অবশ্যই \"{{int:config-db-username}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
        "config-db-wiki-account": "সাধারণ অভিযানের জন্য ব্যবহারকারী একাউন্ট",
        "config-db-prefix": "উপাত্তশালা ছক প্রিফিক্স:",
        "config-db-charset": "ডেটাবেজের অক্ষর সেট",
index 4d4522c..7a7cfb1 100644 (file)
@@ -3,15 +3,20 @@
                "authors": [
                        "CERminator",
                        "Palapa",
-                       "Emir Mujadzic"
+                       "Emir Mujadzic",
+                       "Semso98",
+                       "Srdjan m"
                ]
        },
        "config-desc": "Instalacija za MediaWiki",
        "config-title": "MediaWiki $1 instalacija",
        "config-information": "Informacija",
        "config-localsettings-upgrade": "Otkrivena je datoteka <code>LocalSettings.php</code>.\nDa biste unaprijedili vaš softver, molimo vas upišite vrijednost od <code>$wgUpgradeKey</code> u okvir ispod.\nNaći ćete ga u <code>LocalSettings.php</code>.",
+       "config-localsettings-cli-upgrade": "Datoteka <code>LocalSettings.php</code> file je otkrivena.\nZa nadogradnju ove instalacije, molimo da pokrenete <code>update.php</code> umjesto toga",
        "config-localsettings-key": "Ključ za nadgradnju:",
        "config-localsettings-badkey": "Ključ koji ste dali je pogrešan.",
+       "config-upgrade-key-missing": "Postojeća instalacije MediaWiki je pronađena.\nZa nadogradnju ove instalacije, molimo da stavite sljedeće liniju na dno vašeg <code>LocalSettings.php</code>:\n\n$1",
+       "config-localsettings-incomplete": "Postojeći <code>LocalSettings.php</code> se čini da je nepotpun.\nVarijabla $1 nije podešena.\nMolimo da zamjenite <code>LocalSettings.php</code> tako da je varijabla podešena, i kliknite \"{{int:Config-continue}}\".",
        "config-session-error": "Greška pri pokretanju sesije: $1",
        "config-no-session": "Vaši podaci sesije su izgubljeni!\nProvjerite vaš php.ini i provjerite da li je <code>session.save_path</code> postavljen na pravilni direktorijum.",
        "config-your-language": "Vaš jezik:",
        "config-admin-name": "Vaše korisničko ime:",
        "config-admin-password": "Lozinka:",
        "config-admin-password-confirm": "Ponovno unesite lozinku:",
-       "config-admin-email": "E-mail adresa:",
+       "config-admin-email": "Adresa e-pošte:",
        "config-profile-wiki": "Otvori wiki",
        "config-profile-private": "Privatna wiki",
        "config-license-pd": "Javno vlasništvo",
        "config-logo": "Logo URL:",
        "config-cc-again": "Odaberi ponovno...",
+       "config-skins": "Teme",
        "config-install-step-done": "završeno",
        "config-install-step-failed": "neuspješno",
        "config-install-extensions": "Uključujući ekstenzije",
index 6d28a58..ee33109 100644 (file)
@@ -80,8 +80,6 @@
        "config-db-install-account": "Compte d'usuari per a la instal·lació",
        "config-db-username": "Nom d'usuari de la base de dades:",
        "config-db-password": "Contrasenya de la base de dades:",
-       "config-db-password-empty": "Si us plau, introduïu una contrasenya pel nou usuari de la base de dades $1. Tot i que es poden crear usuaris sense contrasenyes, no és segur.",
-       "config-db-username-empty": "Heu d'introduir un valor per a «{{int:config-db-username}}»",
        "config-db-install-username": "Introduïu el nom d'usuari que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquest no és el nom d'usuari de MediaWiki, és el nom d'usuari de la vostra base de dades.",
        "config-db-install-password": "Introduïu la contrasenya que s'utilitzarà per connectar a la base de dades durant el procés d'instal·lació. Aquesta no és la contrasenya del vostre compte a MediaWiki, és la contrasenya de la vostra base de dades.",
        "config-db-install-help": "Introduïu el nom d'usuari i la contrasenya que s'empraran per connectar a la base de dades durant el procés d'instal·lació.",
        "config-memcached-servers": "Servidors de Memcache:",
        "config-memcache-badip": "Heu introduït una adreça IP no vàlida per al Memcached: $1.",
        "config-memcache-noport": "No heu especificat un port per utilitzar el servidor Memcached: $1.\nSi no coneixeu el port, per defecte és 11211.",
+       "config-memcache-badport": "Els números de port de Memcached han de ser entre $1 i $2.",
        "config-extensions": "Extensions",
        "config-skins": "Aparences",
        "config-skins-use-as-default": "Utilitza aquest tema per defecte",
index 077c503..0709665 100644 (file)
@@ -31,7 +31,6 @@
        "config-no-fts3": "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.",
        "config-no-cli-uri": "'''ДӀахьедар''': <code>--scriptpath</code> параметр язйина яц, иза Ӏад йитарца лелош ю: <code>$1</code> .",
        "config-db-name": "Хаамийн базан цӀе:",
-       "config-db-username-empty": "Ахьа «{{int:config-db-username}}» параметран маьӀна даздан дезаш ду.",
        "config-db-charset": "Базан хаамийн символийн гулам",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 бинаран",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
@@ -54,7 +53,7 @@
        "config-profile-no-anon": "ДӀаяздар кхолла деза",
        "config-profile-fishbowl": "ДӀаяздарш долу тадархошна бен",
        "config-profile-private": "ДӀачӀаьгӀна вики",
-       "config-license": "Авторан бакъонаш а лицензи а:",
+       "config-license": "Авторан бакъонаш а, лицензи а:",
        "config-license-cc-by-sa": "Creative Commons Attribution Share Alike",
        "config-license-cc-by": "Creative Commons Attribution",
        "config-license-cc-by-nc-sa": "Creative Commons Attribution Non-Commercial Share Alike",
index 1bd12bb..0c69d27 100644 (file)
@@ -4,7 +4,11 @@
                        "ОйЛ"
                ]
        },
+       "config-information": "плирофорїꙗ",
+       "config-your-language": "твои ѩꙁꙑкъ :",
        "config-page-language": "ѩꙁꙑкъ",
        "config-page-name": "имѧ",
+       "config-page-options": "строи",
+       "config-page-complete": "ꙁаврьшєно ѥстъ",
        "config-help": "помощь"
 }
index 3a73c3e..b28a40d 100644 (file)
@@ -1,8 +1,12 @@
 {
        "@metadata": {
                "authors": [
-                       "Geitost"
+                       "Geitost",
+                       "Das Schäfchen"
                ]
        },
+       "config-copyright": "=== Lizenz und Nutzungsbedingungen ===\n\n$1\n\nDieses Programm ist freie Software, d. h. es kann, gemäss den Bedingungen der von der Free Software Foundation veröffentlichten ''GNU General Public License'', weiterverteilt und/oder modifiziert werden. Dabei kann die Version 2, oder nach eigenem Ermessen, jede neuere Version der Lizenz verwendet werden.\n\nDieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, allerdings '''ohne jegliche Garantie''' und sogar ohne die implizierte Garantie einer '''Marktgängigkeit''' oder '''Eignung für einen bestimmten Zweck'''. Hierzu sind weitere Hinweise in der ''GNU General Public License'' enthalten.\n\nEine <doclink href=Copying>Kopie der GNU General Public License</doclink> sollte zusammen mit diesem Programm verteilt worden sein. Sofern dies nicht der Fall war, kann eine Kopie bei der Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, schriftlich angefordert oder auf deren Website [http://www.gnu.org/copyleft/gpl.html online gelesen] werden.",
+       "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit grosser Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
+       "config-uploads-not-safe": "'''Warnung:''' Das Standardverzeichnis für hochgeladene Dateien <code>$1</code> ist für die willkürliche Ausführung von Skripten anfällig.\nObwohl MediaWiki die hochgeladenen Dateien auf Sicherheitsrisiken überprüft, wird dennoch dringend empfohlen, diese [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security Sicherheitslücke] zu schliessen, bevor das Hochladen von Dateien aktiviert wird.",
        "config-license-help": "Viele öffentliche Wikis publizieren alle Beiträge unter einer [http://freedomdefined.org/Definition/De freien Lizenz.]\nDies trägt dazu bei, ein Gefühl von Gemeinschaft zu schaffen, und ermutigt zu längerfristiger Mitarbeit.\nHingegen ist im Allgemeinen eine freie Lizenz auf geschlossenen Wikis nicht notwendig.\n\nSofern man Texte aus der Wikipedia verwenden möchte und umgekehrt, sollte die ''Creative-Commons''-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen“ gewählt werden.\n\nDie Wikipedia nutzte vormals die GNU-Lizenz für freie Dokumentation (GFDL).\nDie GFDL ist eine gültige Lizenz, die allerdings schwer zu verstehen ist.\nEs ist zudem schwierig, gemäss dieser Lizenz lizenzierte Inhalte wiederzuverwenden."
 }
index 8fe7294..d8405cf 100644 (file)
@@ -5,7 +5,8 @@
                        "Protnet",
                        "ZaDiak",
                        "Astralnet",
-                       "Geraki"
+                       "Geraki",
+                       "Stam.nikos"
                ]
        },
        "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki",
        "config-localsettings-key": "Κλειδί αναβάθμισης:",
        "config-localsettings-badkey": "Το κλειδί που δώσατε είναι εσφαλμένο.",
        "config-upgrade-key-missing": "Έχει εντοπιστεί μια υπάρχουσα εγκατάσταση του MediaWiki.\nΓια να αναβαθμίσετε αυτήν την εγκατάσταση, παρακαλούμε να βάλετε την ακόλουθη γραμμή στο κάτω μέρος του <code>LocalSettings.php</code> σας:\n\n$1",
+       "config-session-error": "Σφάλμα κατά την εκκίνηση συνεδρίας: $1",
        "config-your-language": "Η γλώσσα σας:",
+       "config-your-language-help": "Επιλέξτε μία γλώσσα για τη διαδικασία της εγκατάστασης.",
        "config-wiki-language": "Γλώσσα του wiki:",
+       "config-wiki-language-help": "Επιλέξτε τη γλώσσα που θα γραφεί το wiki πρωταρχικά.",
        "config-back": "← Πίσω",
        "config-continue": "Συνέχεια →",
        "config-page-language": "Γλώσσα",
        "config-page-existingwiki": "Υπάρχον wiki",
        "config-help-restart": "Θέλετε να καταργήσετε όλα τα αποθηκευμένα δεδομένα που έχετε εισαγάγει και να επανεκκινήσετε τη διαδικασία εγκατάστασης;",
        "config-restart": "Ναι, κάντε επανεκκίνηση",
+       "config-welcome": "=== Περιβαλλοντικοί έλεγχοι ===\nΤώρα θα γίνουν βασικοί έλεγχοι για να δούμε αν αυτό το περιβάλλον είναι κατάλληλο για την εγκατάσταση του MediaWiki.\nΘυμηθείτε να συμπεριλάβετε αυτές τις πληροφορίες εάν αναζητήσετε υποστήριξη για το πώς να ολοκληρώσετε την εγκατάσταση.",
+       "config-copyright": "=== Πνευματικά δικαιώματα και Όροι ===\n\n$1\n\nΑυτό το πρόγραμμα είναι ελεύθερο λογισμικό• μπορείτε να το αναδιανείμετε ή και να το τροποποιήσετε υπό τους όρους της Γενικής Άδειας Δημόσιας Χρήσης GNU, όπως αυτή δημοσιεύεται από το Ίδρυμα Ελεύθερου Λογισμικού• είτε της έκδοσης 2 της Άδειας, είτε (κατά την επιλογή σας) οποιασδήποτε μεταγενέστερης έκδοσης.\n\nΑυτό το πρόγραμμα διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά <strong>χωρίς καμία εγγύηση</strong>• χωρίς καν την υπονοούμενη εγγύηση της <strong>εμπορευσιμότητας</strong> ή της <strong>καταλληλοτότητας για συγκεκριμένο σκοπό</strong>.\nΔείτε την Γενική Άδεια Δημόσιας Χρήσης GNU για περισσότερες λεπτομέρειες.\n\nΘα πρέπει να έχετε λάβει <doclink href=\"Copying\">ένα αντίγραφο της Γενικής Άδειας Δημόσιας Χρήσης GNU</doclink> μαζί με αυτό το πρόγραμμα• αν όχι, γράψτε στο Free Software Foundation,\n51 Franklin Street, Fifth Floor,\nBoston, MA 02110-1335\nUSA ή [http://www.gnu.org/copyleft/gpl.html διαβάστε online].",
+       "config-sidebar": "* [//www.mediawiki.org Αρχική MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Οδηγός Χρήστη]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Οδηγός Διαχειριστή]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Συχνές ερωτήσεις]\n----\n* <doclink href=\"Readme\">Διαβάστε με</doclink>\n* <doclink href=\"ReleaseNotes\">Σημειώσεις έκδοσης</doclink>\n* <doclink href=\"Copying\">Αντιγραφή</doclink>\n* <doclink href=\"UpgradeDoc\">Αναβάθμιση</doclink>",
        "config-env-good": "Το περιβάλλον έχει ελεγχθεί.\nΜπορείτε να εγκαταστήσετε το MediaWiki.",
        "config-env-bad": "Το περιβάλλον έχει ελεγχθεί.\nΔεν μπορείτε να εγκαταστήσετε το MediaWiki.",
        "config-env-php": "H PHP $1 είναι εγκατεστημένη.",
        "config-env-hhvm": "Το HHVM $1 είναι εγκατεστημένο.",
+       "config-unicode-using-intl": "Χρησιμοποιώντας την [http://pecl.php.net/intl επέκταση intl PECL] για κανονικοποίηση Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Προειδοποίηση:</strong> Η [http://pecl.php.net/intl επέκταση intl PECL] δεν είναι διαθέσιμη για να χειριστεί την κανονικοποίηση Unicode, επιστρέφουμε στην αργή αμιγώς PHP εφαρμογή.\nΕάν λειτουργείτε έναν ιστότοπο υψηλής επισκεψιμότητας, θα πρέπει να ρίξετε μια ματιά στην [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations κανονικοποίηση Unicode].",
        "config-apc": "Το [http://www.php.net/apc APC] είναι εγκατεστημένο",
        "config-diff3-bad": "Το GNU diff3 δεν βρέθηκε.",
        "config-db-type": "Τύπος βάσης δεδομένων:",
@@ -77,6 +86,7 @@
        "config-mysql-engine": "Μηχανή αποθήκευσης:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-charset": "Σύνολο χαρακτήρων βάσης δεδομένων:",
        "config-mysql-binary": "Δυαδικό",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Τύπος ελέγχου ταυτότητας:",
        "config-instantcommons": "Ενεργοποίηση Instant Commons",
        "config-cc-again": "Επιλέξτε ξανά...",
        "config-advanced-settings": "Προηγμένες ρυθμίσεις παραμέτρων",
+       "config-cache-options": "Ρυθμίσεις για την προσωρινή αποθήκευση αντικειμένου:",
        "config-extensions": "Επεκτάσεις",
        "config-skins": "Θέματα εμφάνισης",
        "config-skins-help": "Τα θέματα εμφάνισης που αναφέρονται παραπάνω εντοπίστηκαν στον κατάλογο <code>./skins</code>. Πρέπει να  ενεργοποιήσετε τουλάχιστον ένα και να επιλέξτε ποιο θα είναι το προεπιλεγμένο.",
        "config-skins-use-as-default": "Χρήση αυτού του θέματος εμφάνισης ως προεπιλογή",
+       "config-skins-must-enable-some": "Πρέπει να επιλέξετε τουλάχιστον μία εμφάνιση να την ενεργοποιήσετε.",
        "config-skins-must-enable-default": "Το θέμα εμφάνισης που επιλέχθηκε ως προεπιλεγμένο πρέπει να είναι ενεργοποιημένο.",
+       "config-install-alreadydone": "<strong>Προειδοποίηση:</strong> Φαίνεται πως έχετε ήδη εγκατεστημένο το MediaWiki και προσπαθείτε να το εγκαταστήσετε ξανά.\nΠαρακαλώ προχωρήστε στην επόμενη σελίδα.",
+       "config-install-begin": "Πατώντας «{{int:config-continue}}» θα ξεκινήσει η εγκατάσταση του MediaWiki.\nΕάν θέλετε ακόμα να κάνετε αλλαγές, πατήστε «{{int:config-back}}».",
        "config-install-step-done": "έγινε",
        "config-install-step-failed": "απέτυχε",
        "config-install-extensions": "Γίνεται συμπερίληψη των επεκτάσεων",
index c19e3ee..1eb8e03 100644 (file)
@@ -97,8 +97,6 @@
        "config-db-install-account": "User account for installation",
        "config-db-username": "Database username:",
        "config-db-password": "Database password:",
-       "config-db-password-empty": "Please enter a password for the new database user: $1.\nWhile it may be possible to create users with no passwords, it is not secure.",
-       "config-db-username-empty": "You must enter a value for \"{{int:config-db-username}}\".",
        "config-db-install-username": "Enter the username that will be used to connect to the database during the installation process.\nThis is not the username of the MediaWiki account; this is the username for your database.",
        "config-db-install-password": "Enter the password that will be used to connect to the database during the installation process.\nThis is not the password for the MediaWiki account; this is the password for your database.",
        "config-db-install-help": "Enter the username and password that will be used to connect to the database during the installation process.",
index 7aebc86..0653a72 100644 (file)
@@ -4,7 +4,9 @@
                        "Airon90",
                        "Yekrats",
                        "KuboF",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Ochilov",
+                       "Tlustulimu"
                ]
        },
        "config-desc": "Instalilo de MediaWiki",
        "config-db-name": "Nomo de datumbazo:",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-type-mysql": "MySQL (aŭ kongrua)",
+       "config-mysql-utf8": "UTF-8",
+       "config-site-name": "Nomo de vikio:",
+       "config-ns-generic": "Projekto",
+       "config-admin-name": "Via uzantonomo:",
        "config-admin-password": "Pasvorto:",
        "config-admin-password-confirm": "Retajpu pasvorton:",
        "config-admin-name-blank": "Enigu salutnomon de administranto.",
index da5d93f..1262388 100644 (file)
@@ -66,7 +66,7 @@
        "config-help-restart": "¿Deseas borrar todos los datos guardados que has escrito y reiniciar el proceso de instalación?",
        "config-restart": "Sí, reiniciarlo",
        "config-welcome": "=== Comprobación del entorno ===\nAhora se van a realizar comprobaciones básicas para ver si el entorno es adecuado para la instalación de MediaWiki.\nRecuerda suministrar los resultados de tales comprobaciones si necesitas ayuda para completar la instalación.",
-       "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefiera).\n\nEste programa es distribuido en la esperanza de que sea útil, pero '''sin cualquier garantía'''; inclusive, sin la garantía implícita de la '''posibilidad de ser comercializado''' o de '''idoneidad para cualquier finalidad específica'''.\nConsulte la licencia *GNU General *Public *License para más detalles.\n\nEn conjunto con este programa debe haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; si no la recibió, pídala por escrito a Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léala en internet].",
+       "config-copyright": "=== Derechos de autor y Términos de uso ===\n\n$1\n\nEste programa es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública General de GNU, tal como aparece publicada por la Fundación para el Software Libre, tanto la versión 2 de la Licencia, como cualquier versión posterior (según prefieras).\n\nEste programa es distribuido con la esperanza de que sea útil, pero <strong>sin ninguna garantía</strong>; inclusive, sin la garantía implícita de la <strong>posibilidad de ser comercializado</strong> o de <strong>idoneidad para cualquier finalidad específica</strong>.\nConsulta la Licencia Pública General de GNU para más detalles.\n\nEn conjunto con este programa debes haber recibido <doclink href=Copying>una copia de la Licencia Pública General de GNU</doclink>; caso contrario, pídela por escrito a la Fundación para el Software Libre, Inc., 51 Franklin Street, Fifth Floor, Boston, ME La 02110-1301, USA o [http://www.gnu.org/copyleft/gpl.html léela en Internet].",
        "config-sidebar": "* [//www.mediawiki.org Página principal de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuario]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía del administrador]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Preguntas frecuentes]\n----\n* <doclink href=Readme>Léeme</doclink>\n* <doclink href=ReleaseNotes>Notas de la versión</doclink>\n* <doclink href=Copying>Copia</doclink>\n* <doclink href=UpgradeDoc>Actualización</doclink>",
        "config-env-good": "El entorno ha sido comprobado.\nPuedes instalar MediaWiki.",
        "config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.",
@@ -79,7 +79,7 @@
        "config-outdated-sqlite": "<strong>Advertencia:</strong> tienes SQLite $1, que es inferior a la mínima versión requerida: $2. SQLite no estará disponible.",
        "config-no-fts3": "<strong>Advertencia:</strong> SQLite está compilado sin el [//sqlite.org/fts3.html módulo FTS3]. Las funcionalidades de búsqueda no estarán disponibles en esta instalación.",
        "config-register-globals-error": "<strong>Error: la opción de PHP <code>[http://php.net/register_globals register_globals]</code> está activada.\nDebe estar desactivada para continuar con la instalación.</strong>\nVéase [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obtener ayuda sobre cómo hacerlo.",
-       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activa!</strong>\nEsta opción corrompe la entrada de datos de forma impredecible.\nUsted no puede instalar o utilizar MediaWiki a menos que esta opción esté deshabilitada.",
+       "config-magic-quotes-gpc": "<strong>Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] está activa!</strong>\nEsta opción corrompe la entrada de datos de forma impredecible.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté desactivada.",
        "config-magic-quotes-runtime": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
        "config-magic-quotes-sybase": "'''Fatal: ¡[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está activada!'''\nEsta opción causa la imprevisible corrupción de la entrada de datos.\nNo puedes instalar o utilizar MediaWiki a menos que esta opción esté inhabilitada.",
        "config-mbstring": "'''Fatal: La opción [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está activada!'''\nEsta opción causa errores y puede corromper los datos de una forma imprevisible.\nNo se puede instalar o usar MediaWiki a menos que esta opción sea desactivada.",
@@ -87,7 +87,7 @@
        "config-xml-bad": "Falta el módulo XML de PHP.\nMediaWiki requiere funciones de este módulo y no funcionará en esta configuración.\nPuede que necesites instalar el el paquete RPM llamado php-xml.",
        "config-pcre-old": "'''Fatal:''' Se requiere PCRE $1 o posterior.\nSu PHP binario está enlazado con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
        "config-pcre-no-utf8": "'''Error fatal ''': Parece que el módulo PCRE de PHP fue compilado sin el soporte PCRE_UTF8.\nMediaWiki requiere compatibilidad con UTF-8 para funcionar correctamente.",
-       "config-memory-raised": "el parámetro <code>memory_limit</code> de PHP es $1, aumentada a $2.",
+       "config-memory-raised": "El parámetro <code>memory_limit</code> de PHP es $1. Se aumenta a $2.",
        "config-memory-bad": "<strong>Advertencia:</strong> el parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente sea demasiado bajo.\n¡La instalación puede fallar!",
        "config-ctype": "'''Fatal''': Se necesita compilar PHP con compatibilidad para la [http://www.php.net/manual/en/ctype.installation.php extensión Ctype].",
        "config-iconv": "<strong>Fatal:</strong> PHP debe ser compilado con soporte para la [http://www.php.net/manual/en/iconv.installation.php extensión iconv].",
        "config-db-host": "Servidor de la base de datos:",
        "config-db-host-help": "Si tu servidor de base de datos está en otro servidor, escribe el nombre del equipo o su dirección IP aquí.\n\nSi estás utilizando alojamiento web compartido, tu proveedor debería darte el nombre correcto del servidor en su documentación.\n\nSi vas a instalar en un servidor Windows y a utilizar MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si es así, intenta poner \"127.0.0.1\" como dirección IP local.\n\nSi utilizas PostgreSQL, deja este campo vacío para conectarse a través de un socket de Unix.",
        "config-db-host-oracle": "TNS de la base de datos:",
-       "config-db-host-oracle-help": "Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+       "config-db-host-oracle-help": "Escribe un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si estás utilizando bibliotecas de cliente 10g o más recientes también puedes utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica este wiki",
        "config-db-name": "Nombre de la base de datos:",
        "config-db-name-help": "Elige un nombre que identifique tu wiki.\nNo debe contener espacios.\n\nSi estás utilizando alojamiento web compartido, tu proveedor te dará un nombre específico de base de datos para que lo utilices, o bien te permitirá crear bases de datos a través de un panel de control.",
        "config-db-install-account": "Cuenta de usuario para instalación",
        "config-db-username": "Nombre de usuario de la base de datos:",
        "config-db-password": "Contraseña de la base de datos:",
-       "config-db-password-empty": "Escribe una contraseña para el nuevo usuario de base de datos: $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
-       "config-db-username-empty": "Debes introducir un valor para \"{{int:config-db-username}}\"",
        "config-db-install-username": "Escribe el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki, sino el nombre de usuario para la base de datos.",
        "config-db-install-password": "Escribe la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki, sino la contraseña para la base de datos.",
        "config-db-install-help": "Escribe el nombre de usuario y la contraseña que se utilizarán para conectarse a la base de datos durante el proceso de instalación.",
        "config-dbsupport-postgres": "[{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. Pueden haber algunos fallos menores destacables, y no es recomendable para su uso en un entorno de producción. ([http://www.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un sistema de base de datos ligero con gran compatibilidad con MediaWiki. ([http://www.php.net/manual/es/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usando PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] es una base de datos comercial a nivel empresarial. ([http://www.php.net/manual/es/oci8.installation.php Cómo compilar PHP con compatibilidad con OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-oracle-url}} Oracle] es una base de datos comercial a nivel empresarial. ([http://www.php.net/manual/es/oci8.installation.php Cómo compilar PHP con compatibilidad con OCI8])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] es una base de datos comercial a nivel empresarial para Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Cómo compilar PHP con soporte para SQLSRV])",
        "config-header-mysql": "Configuración de MySQL",
        "config-header-postgres": "Configuración de PostgreSQL",
        "config-header-sqlite": "Configuración de SQLite",
        "config-postgres-old": "Se requiere PostgreSQL $1 o posterior. Tienes la versión $2.",
        "config-mssql-old": "Se requiere Microsoft SQL Server $1 o posterior. Tienes la versión $2.",
        "config-sqlite-name-help": "Elige el nombre que identificará a tu wiki.\nNo uses espacios o guiones.\nEste nombre se usará como nombre del archivo de datos de SQLite.",
-       "config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl instalador ha determinado el usuario cuyo servidor Web se está ejecutando.\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
-       "config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code> , porque el directorio padre <code><nowiki>$2</nowiki></code> no es accesible en escritura por el servidor Web.\n\nEl programa de instalación no pudo determinar el usuario que se ejecuta en el servidor Web\nConceda permisos de escritura en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haga:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+       "config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code>, porque el servidor web no tiene permiso de escribir en el directorio padre <code><nowiki>$2</nowiki></code>.\n\nEl instalador ha determinado el usuario con el que se ejecuta tu servidor web.\nConcede permisos de escritura a él en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haz:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code>, porque el servidor web no tiene permiso de escribir en el directorio padre <code><nowiki>$2</nowiki></code>.\n\nEl instalador no pudo determinar el usuario con el que se ejecuta tu servidor web.\nConcede permisos de escritura a él (¡y a otros!) en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haz:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Error al crear el directorio de datos \"$1\".\nComprueba la ubicación e inténtalo de nuevo.",
        "config-sqlite-dir-unwritable": "No se puede escribir en el directorio \"$1\".\nModifica sus permisos para que el servidor web pueda escribir en él, y vuelve a intentarlo.",
        "config-sqlite-connection-error": "$1.\n\nVerifica el directorio de datos y el nombre de la base de datos mostrada a continuación, e inténtalo nuevamente.",
        "config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
        "config-mssql-auth": "Tipo de autenticación:",
        "config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales de cualquier usuario de el servidor web que se está ejecutando van a ser utilizadas.",
-       "config-mssql-web-auth": "Seleccione el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales del usuario que sea cual sea el servidor Web se ejecuta como será utilizado.",
+       "config-mssql-web-auth": "Selecciona el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el cual se ejecuta el servidor web.",
        "config-mssql-sqlauth": "Autenticación de SQL Server",
        "config-mssql-windowsauth": "Autentificación de Windows",
        "config-site-name": "Nombre del wiki:",
        "config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
        "config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
        "config-email-usertalk-help": "Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.",
-       "config-email-watchlist": "Activar notificación de alteraciones a la páginas vigiladas",
+       "config-email-watchlist": "Activar la notificación de la lista de seguimiento",
        "config-email-watchlist-help": "Permitir a los usuarios recibir notificaciones de cambios en la páginas que vigilan, si lo han activado en sus preferencias.",
        "config-email-auth": "Activar autenticación del correo electrónico",
        "config-email-auth-help": "Si esta opción está habilitada, los usuarios tienen que confirmar su dirección de correo electrónico mediante un enlace que se les envía a ellos cuando éstos lo establecen o lo cambian.\nSolo las direcciones de correo electrónico autenticadas pueden recibir correos electrónicos de otros usuarios o correos electrónicos de notificación de cambios.\nEsta opción está '''recomendada''' para wikis públicos debido a posibles abusos de las características del correo electrónico.",
        "config-email-sender": "Dirección de correo electrónico de retorno:",
-       "config-email-sender-help": "Introduce la dirección de correo electrónico que será usada como dirección de retorno en los mensajes electrónicos de salida.\nAquí llegarán los correos electrónicos que no lleguen a su destino.\nMuchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.",
+       "config-email-sender-help": "Escribe la dirección de correo electrónico que se usará como dirección de retorno en los mensajes electrónicos de salida.\nAquí llegarán los correos electrónicos que no lleguen a su destino.\nMuchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.",
        "config-upload-settings": "Cargas de imágenes y archivos",
        "config-upload-enable": "Habilitar la subida de archivos",
        "config-upload-help": "La carga de archivos expone potencialmente su servidor a riesgos de seguridad.\nPara obtener más información, lea la [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security sección de seguridad] en el manual.\n\nPara habilitar la carga de archivos, cambie el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.\nA continuación, habilite esta opción.",
-       "config-upload-deleted": "*Directorio para los archivos eliminados:",
+       "config-upload-deleted": "Directorio para los archivos eliminados:",
        "config-upload-deleted-help": "Elige un directorio en el que guardar los archivos eliminados.\nLo ideal es una carpeta no accesible desde la red.",
        "config-logo": "URL del logo :",
        "config-logo-help": "La apariencia predeterminada de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.\nCarga una imagen de tamaño adecuado y escribe la dirección URL aquí.\n\nPuedes usar <code>$wgStylePath</code> o <code>$wgScriptPath</code> si tu logotipo es relativo a esas rutas.\n\nSi no deseas un logotipo, deja esta casilla en blanco.",
        "config-skins-missing": "No se encontró ninguna apariencia; MediaWiki utilizará una apariencia anterior hasta que instales unas apariencias adecuadas.",
        "config-skins-must-enable-some": "Debes seleccionar al menos una apariencia para activar.",
        "config-skins-must-enable-default": "La apariencia elegida como predeterminada debe estar habilitada.",
-       "config-install-alreadydone": "'''Aviso:''' Parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente.\nPasa a la próxima página, por favor.",
+       "config-install-alreadydone": "<strong>Advertencia:</strong> parece que ya habías instalado MediaWiki y estás intentando instalarlo nuevamente.\nPasa a la próxima página.",
        "config-install-begin": "Al pulsar en «{{int:config-continue}}» comenzará el proceso de instalación de MediaWiki.\nSi quieres realizar algún cambio, pulsa en «{{int:config-back}}».",
        "config-install-step-done": "hecho",
        "config-install-step-failed": "falló",
        "config-install-pg-plpgsql": "Comprobación de lenguaje PL/pgSQL",
        "config-pg-no-plpgsql": "Necesitas instalar el lenguaje PL/pgSQL en la base de datos $1",
        "config-pg-no-create-privs": "La cuenta especificada para la instalación no tiene suficientes privilegios para crear una cuenta.",
-       "config-pg-not-in-role": "La cuenta especificada para el usuario web ya existe.\nLa cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.\n\nMediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifique otro nombre de cuenta web, o haga clic en \"atrás\" y especifique un usuario de instalación con los privilegios convenientes.",
+       "config-pg-not-in-role": "La cuenta especificada para el usuario web ya existe.\nLa cuenta especificada para la instalación no es de un superusuario y no es miembro del grupo de usuarios con acceso a la web, por lo que es incapaz de crear objetos pertenecientes al usuario web.\n\nMediaWiki requiere actualmente que las tablas sean propiedad del usuario web. Especifica otro nombre de cuenta web, o haz clic en \"atrás\" y especifica un usuario de instalación con los privilegios convenientes.",
        "config-install-user": "Creando el usuario de la base de datos",
        "config-install-user-alreadyexists": "El usuario \"$1\" ya existe",
        "config-install-user-create-failed": "La creación del usuario \"$1\" falló:  $2",
        "config-install-user-grant-failed": "La concesión de permisos al usuario \"$1\" falló: $2",
        "config-install-user-missing": "El usuario especificado \"$1\" no existe.",
-       "config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nPor favor, haga clic en la casilla \"Crear cuenta\" que aparece a continuación si desea crearlo.",
+       "config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nHaz clic en la casilla \"Crear cuenta\" debajo si quieres crearlo.",
        "config-install-tables": "Creando tablas",
-       "config-install-tables-exist": "'''Advertencia''': Al parecer, las tablas de MediaWiki ya existen. Saltándose su creación.",
-       "config-install-tables-failed": "'''Error''': La creación de las tablas falló con el siguiente error: $1",
+       "config-install-tables-exist": "<strong>Advertencia:</strong> al parecer, las tablas de MediaWiki ya existen. Saltándose su creación.",
+       "config-install-tables-failed": "<strong>Error:</strong> la creación de las tablas falló con el siguiente error: $1",
        "config-install-interwiki": "Llenando la tabla interwiki predeterminada",
-       "config-install-interwiki-list": "No se pudo encontrar el archivo <code>interwiki.list</code>.",
-       "config-install-interwiki-exists": "'''Advertencia''': La tabla de interwikis parece ya contener entradas.\nSe omitirá la lista predeterminada.",
+       "config-install-interwiki-list": "No se pudo leer el archivo <code>interwiki.list</code>.",
+       "config-install-interwiki-exists": "<strong>Advertencia:</strong> la tabla de interwikis parece ya contener entradas.\nSe omitirá la lista predeterminada.",
        "config-install-stats": "Iniciando las estadísticas",
        "config-install-keys": "Generando claves secretas",
-       "config-insecure-keys": "''' Atención:'' '  {{PLURAL:$2|Una clave de seguridad generada|Las claves de seguridad generadas}} ($1) durante la instalación no  {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considere {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
+       "config-insecure-keys": "<strong>Advertencia:</strong> {{PLURAL:$2|una clave de seguridad generada|las claves de seguridad generadas}} ($1) durante la instalación no  {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considera {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
        "config-install-updates": "Evitar ejecutar actualizaciones innecesarias",
        "config-install-updates-failed": "<strong>Error:</strong> falló la inserción de claves de actualización en las tablas con el siguiente error: $1",
        "config-install-sysop": "Creando la cuenta de usuario del administrador",
        "config-install-extension-tables": "Creando las tablas para las extensiones habilitadas",
        "config-install-mainpage-failed": "No se pudo insertar la página principal: $1",
        "config-install-done": "<strong>¡Felicidades!</strong>\nHas instalado MediaWiki correctamente.\n\nEl instalador ha generado un  archivo <code>LocalSettings.php</code>.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\n<strong>Nota</strong>: Si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás <strong>[$2  entrar en tu wiki]</strong>.",
-       "config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
+       "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
        "config-help": "ayuda",
        "config-help-tooltip": "haz clic para ampliar",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
index baab24a..57140d3 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "An13sa",
                        "පසිඳු කාවින්ද",
-                       "Subi"
+                       "Subi",
+                       "Sator"
                ]
        },
        "config-desc": "MediaWiki instalatzailea",
@@ -74,6 +75,7 @@
        "config-email-settings": "E-posta hobespenak",
        "config-logo": "Logo URL:",
        "config-extensions": "Luzapenak",
+       "config-skins": "Itxurak",
        "config-install-step-done": "egina",
        "config-help": "Laguntza",
        "mainpagetext": "'''MediaWiki arrakastaz instalatu da.'''",
index 849a517..544b852 100644 (file)
@@ -13,7 +13,7 @@
        "config-localsettings-upgrade": "Detectouse un ficheiro <code>LocalSettings.php</code>.\nPara actualizar esta instalación, introduza o valor de <code>$wgUpgradeKey</code> na caixa.\nPode atopalo en <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Detectouse un ficheiro <code>LocalSettings.php</code>.\nPara actualizar esta instalación, execute <code>update.php</code>",
        "config-localsettings-key": "Clave de actualización:",
-       "config-localsettings-badkey": "A clave dada é incorrecta",
+       "config-localsettings-badkey": "A clave dada é incorrecta.",
        "config-upgrade-key-missing": "Detectouse unha instalación existente de MediaWiki.\nPara actualizar esta instalación, inclúa esta liña ao final do ficheiro <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "Semella que o ficheiro <code>LocalSettings.php</code> existente está incompleto.\nA variable $1 non está establecida.\nModifique o ficheiro <code>LocalSettings.php</code> de xeito que a variable quede establecida e prema en \"{{int:Config-continue}}\".",
        "config-localsettings-connection-error": "Atopouse un erro ao conectar coa base de datos empregando a configuración especificada no ficheiro <code>LocalSettings.php</code>. Corrixa esta configuración e inténteo de novo.\n\n$1",
        "config-db-install-account": "Conta de usuario para a instalación",
        "config-db-username": "Nome de usuario da base de datos:",
        "config-db-password": "Contrasinal da base de datos:",
-       "config-db-password-empty": "Introduza un contrasinal para o novo usuario da base de datos: $1.\nMalia que é posible crear usuarios sen contrasinal, esta práctica non é segura.",
-       "config-db-username-empty": "Debe introducir un valor para \"{{int:config-db-username}}\"",
        "config-db-install-username": "Escriba o nome de usuario que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o nome de usuario da conta de MediaWiki, trátase do nome de usuario para a súa base de datos.",
        "config-db-install-password": "Escriba o contrasinal que empregará para conectarse á base de datos durante o proceso de instalación. Este non é o contrasinal da conta de MediaWiki, trátase do contrasinal para a súa base de datos.",
        "config-db-install-help": "Introduza o nome de usuario e contrasinal que se usará para conectar á base de datos durante o proceso de instalación.",
index 7617942..a1f9154 100644 (file)
@@ -1,5 +1,38 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Vahe Gharakhanyan"
+               ]
+       },
+       "config-title": "ՄեդիաՎիքի $1-ի տեղադրում",
+       "config-information": "Տեղեկատվություն",
+       "config-localsettings-key": "Թարմացման բանալի`",
+       "config-your-language": "Ձեր լեզուն`",
+       "config-wiki-language": "Վիքի լեզու`",
+       "config-back": "← Վերադառնալ",
+       "config-continue": "Շարունակել →",
+       "config-page-language": "Լեզու",
+       "config-page-welcome": "Բարի գալուստ ՄեդիաՎիքի:",
+       "config-page-dbconnect": "Միացում տվյալների բազային",
+       "config-page-name": "Անվանում",
+       "config-page-options": "Ընտրանքներ",
+       "config-page-install": "Տեղադրում",
+       "config-page-complete": "Պատրաստ է:",
+       "config-page-readme": "Կարդա ինձ",
+       "config-page-releasenotes": "Տեղեկություն տարբերակի մասին",
+       "config-page-existingwiki": "Գոյություն ունեցող վիքի",
+       "config-restart": "Այո, նորից սկսել",
+       "config-admin-password": "Գաղտնաբառ՝",
+       "config-admin-password-confirm": "Գաղտնաբառը կրկին`",
+       "config-admin-email": "Էլ-փոստի հասցեն՝",
+       "config-license": "Հեղինակային իրավունք և արտոնագիր`",
+       "config-license-cc-by-sa": "Creative Commons Attribution-ShareAlike",
+       "config-license-cc-by": "Creative Commons Attribution",
+       "config-license-cc-by-nc-sa": "Creative Commons Attribution-NonCommercial-ShareAlike",
+       "config-license-cc-0": "Creative Commons Zero (հանրային սեփականություն)",
+       "config-license-gfdl": "GNU Free Documentation License 1.3 կամ ավելի ուշ",
+       "config-license-pd": "Հանրային սեփականություն",
+       "config-help": "օգնություն",
        "mainpagetext": "'''«MediaWiki» ծրագիրը հաջողությամբ տեղադրվեց։'''",
        "mainpagedocfooter": "Այցելեք [//meta.wikimedia.org/wiki/Help:Contents User's Guide]՝ վիքի ծրագրային ապահովման օգտագործման մասին տեղեկությունների համար։\n\n== Որոշ օգտակար ռեսուրսներ ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
 }
index 0e8f597..9c7acd6 100644 (file)
        "config-env-bad": "Le ambiente ha essite verificate.\nTu non pote installar MediaWiki.",
        "config-env-php": "PHP $1 es installate.",
        "config-env-hhvm": "HHVM $1 es installate.",
-       "config-unicode-using-utf8": "utf8_normalize.so per Brion Vibber es usate pro le normalisation Unicode.",
        "config-unicode-using-intl": "Le [http://pecl.php.net/intl extension PECL intl] es usate pro le normalisation Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': Le [http://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
        "config-unicode-update-warning": "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].\nTu deberea [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.",
-       "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente typos de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo usante <code>./configure --with-mysqli</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe installar equalmente, per exemplo, le modulo <code>php5-mysql</code>.",
+       "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente {{PLURAL:$2|typo|typos}} de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo, usante <code>./configure --with-mysqli</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe etiam installar, per exemplo, le modulo <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
        "config-no-fts3": "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
        "config-register-globals-error": "<strong>Error: Le option <code>[http://php.net/register_globals register_globals]</code> de PHP es active.\nIllo debe esser disactivate pro continuar le installation.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pro obtener adjuta sur como facer lo.",
@@ -61,7 +60,7 @@
        "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''\nIste option causa errores e pote corrumper datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-safe-mode": "'''Aviso:''' Le [http://www.php.net/features.safe-mode modo secur] de PHP es active.\nIsto pote causar problemas, particularmente si es usate le incargamento de files e le supporto de <code>math</code>.",
-       "config-xml-bad": "Le modulo XML de PHP es mancante.\nMediaWiki require functiones de iste modulo e non functionara in iste configuration.\nSi tu usa Mandrake, installa le pacchetto php-xml.",
+       "config-xml-bad": "Le modulo XML de PHP es mancante.\nMediaWiki require functiones de iste modulo e non functionara in iste configuration.\nEs possibile que tu debe installar le pacchetto RPM php-xml.",
        "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 o plus tarde es necessari.\nTu binario de PHP binary es ligate con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Plus information].",
        "config-pcre-no-utf8": "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.\nMediaWiki require supporto de UTF-8 pro functionar correctemente.",
        "config-memory-raised": "Le <code>memory_limit</code> de PHP es $1, elevate a $2.",
        "config-db-install-account": "Conto de usator pro installation",
        "config-db-username": "Nomine de usator del base de datos:",
        "config-db-password": "Contrasigno del base de datos:",
-       "config-db-password-empty": "Per favor entra un contrasigno pro le nove usator del base de datos: $1.\nBen que il es possibile crear usatores sin contrasigno, isto non es secur.",
-       "config-db-username-empty": "Es necessari entrar un valor pro \"{{int:config-db-username}}\".",
        "config-db-install-username": "Entra le nomine de usator que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le nomine de usator del conto MediaWiki; isto es le nomine de usator pro tu base de datos.",
        "config-db-install-password": "Entra le contrasigno que essera usate pro connecter al base de datos durante le processo de installation. Isto non es le contrasigno del conto MediaWiki; isto es le contrasigno pro tu base de datos.",
        "config-db-install-help": "Entra le nomine de usator e contrasigno que essera usate pro connecter al base de datos durante le processo de installation.",
index b9aab3a..aa24362 100644 (file)
                        "Ontsed",
                        "Seb35",
                        "Nemo bis",
-                       "Ricordisamoa"
+                       "Ricordisamoa",
+                       "Fpugliajno",
+                       "The Polish",
+                       "Sannita"
                ]
        },
-       "config-desc": "Il programma di installazione per MediaWiki",
-       "config-title": "Installazione MediaWiki $1",
+       "config-desc": "Programma di installazione per MediaWiki",
+       "config-title": "Installazione di MediaWiki $1",
        "config-information": "Informazioni",
        "config-localsettings-upgrade": "È stato rilevato un file <code>LocalSettings.php</code>.\nPer aggiornare questa installazione, si prega di inserire il valore di <code>$wgUpgradeKey</code> nella casella qui sotto.\nLo potete trovare in <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "È stato rilevato un file <code>LocalSettings.php</code>.\nPer aggiornare questa installazione, eseguire <code>update.php</code>",
@@ -57,7 +60,6 @@
        "config-env-bad": "L'ambiente è stato controllato.\nNon è possibile installare MediaWiki.",
        "config-env-php": "PHP $1 è installato.",
        "config-env-hhvm": "HHVM $1 è installato.",
-       "config-unicode-using-utf8": "Usa Brion Vibber's utf8_normalize.so per la normalizzazione Unicode.",
        "config-unicode-using-intl": "Usa [http://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.",
        "config-unicode-pure-php-warning": "'''Attenzione:''' [http://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, così si usa la lenta implementazione in puro PHP.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].",
        "config-unicode-update-warning": "'''Attenzione:''' La versione installata del gestore per la normalizzazione Unicode usa una vecchia versione della libreria [http://site.icu-project.org/ del progetto ICU].\nDovresti [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aggiornare] se ti interessa usare l'Unicode.",
@@ -70,7 +72,7 @@
        "config-magic-quotes-sybase": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
        "config-mbstring": "'''Errore: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivato!''' Questa opzione causa errori e può interferire in modo imprevedibile coi dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
        "config-safe-mode": "'''Attenzione:''' [http://www.php.net/features.safe-mode safe mode] è attivato!\nQuesta opzione potrebbe causare problemi, in particolare nel caricamento di documenti e nel supporto delle funzioni <code>math</code>.",
-       "config-xml-bad": "Il modulo XML di PHP è mancante.\nMediaWIki necessita di funzioni presenti in questo modulo e non funzionerà con la configurazione corrente.\nSe si sta eseguendo Mandrake, installare il paccketto php-xml.",
+       "config-xml-bad": "Manca il modulo XML di PHP.\nMediaWIki ha bisogno di funzionalità presenti in questo modulo e non funzionerà con la configurazione corrente.\nSe stai eseguendo Mandrake, installa il paccketto php-xml.",
        "config-pcre-old": "<strong>Errore fatale:</strong> si richiede PCRE  $1 o successivo.\nIl tuo file binario PHP è collegato con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Maggiori informazioni su PCRE].",
        "config-pcre-no-utf8": "'''Errore''': Il modulo PCRE di PHP sembra essere stato compilato senza il supporto PCRE_UTF8, ma MediaWiki lo richiede per funzionare correttamente.",
        "config-memory-raised": "Il valore <code>memory_limit</code> di PHP è $1, aumentato a $2.",
        "config-db-install-account": "Account utente per l'installazione",
        "config-db-username": "Nome utente del database:",
        "config-db-password": "Password del database:",
-       "config-db-password-empty": "Inserire una password per il nuovo utente del database: $1.\nAnche se può essere possibile creare utenti senza password, questo non è sicuro.",
-       "config-db-username-empty": "È necessario immettere un valore per \"{{int:config-db-username}}\"",
        "config-db-install-username": "Inserisci il nome utente che verrà utilizzato per connettersi al database durante il processo di installazione.\nQuesto non è il nome utente dell'account MediaWiki; ma quello per il tuo database.",
        "config-db-install-password": "Inserisci la password che verrà utilizzato per connettersi al database durante il processo di installazione.\nQuesta non è la password dell'account MediaWiki; ma quella per il tuo database.",
        "config-db-install-help": "Inserire il nome utente e la password che verranno usate per la connessione al database durante il processo d'installazione.",
index 79e6a0a..6020bdc 100644 (file)
        "config-db-install-account": "インストールで使用する利用者アカウント",
        "config-db-username": "データベースのユーザー名:",
        "config-db-password": "データベースのパスワード:",
-       "config-db-password-empty": "新しいデータベースの利用者名 $1 のパスワードを入力してください。\nパスワードを設定せずにユーザーを作成できる場合もありますが、安全ではありません。",
-       "config-db-username-empty": "「{{int:config-db-username}}」を入力してください。",
        "config-db-install-username": "インストール中にデータベースへの接続で使用するユーザー名を入力してください。\nこれは MediaWiki アカウントの利用者名のことではありません。あなたのデータベースでのユーザー名です。",
        "config-db-install-password": "インストール中にデータベースへの接続で使用するパスワードを入力してください。\nこれは MediaWiki アカウントのパスワードのことではありません。あなたのデータベースでのパスワードです。",
        "config-db-install-help": "インストール作業中にデータベースに接続するための利用者名とパスワードを入力してください。",
        "config-install-keys": "秘密鍵の生成",
        "config-insecure-keys": "<strong>警告:</strong> インストール中に生成されたセキュアキー ($1) は完璧に安全ではありません。手動で変更することを検討してください。",
        "config-install-updates": "不要な更新を実行するのを防ぐ",
+       "config-install-updates-failed": "<strong>エラー:</strong> 更新キーをテーブルに挿入する際に失敗しました。以下のエラーが起こっています: $1",
        "config-install-sysop": "管理者のアカウントの作成",
        "config-install-subscribe-fail": "mediawiki-announce を購読できませんでした: $1",
        "config-install-subscribe-notpossible": "cURL がインストールされていないため、<code>allow_url_fopen</code> を利用できません。",
index 8318e9c..f5dff47 100644 (file)
        "config-page-install": "តំលើង",
        "config-page-complete": "បញ្ចប់!",
        "config-page-restart": "តំលើងឡើងវិញ",
+       "config-install-sysop": "កំពុងបង្កើតគណនីអភិបាល",
        "config-help": "ជំនួយ",
+       "config-help-tooltip": "ចុចដើម្បីពន្លាត",
+       "config-nofile": "រកមិនឃើញឯកសារ \"$1\" ទេ។ វាប្រហែលជាត្រូវបានលុបចោលហើយ។",
        "mainpagetext": "'''មេឌាវិគីត្រូវបានដំឡើងសំរេចហើយ​។'''",
        "mainpagedocfooter": "សូមពិនិត្យមើល [//meta.wikimedia.org/wiki/Help:Contents ខ្លឹមសារ​ណែនាំ​ប្រើប្រាស់]សម្រាប់​ព័ត៌មាន​​បន្ថែមអំពី​ការប្រើប្រាស់សូហ្វវែរវិគី​។\n\n== ការចាប់ផ្ដើម ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings បញ្ជីការកំណត់នានា]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/km សំណួរញឹកញាប់​ក្នុងមេឌាវិគី]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជី​អ៊ីមែលផ្សព្វផ្សាយ​របស់​មេឌាវិគី]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources ការប្រែសម្រួលមេឌាវិគីសម្រាប់ភាសារបស់អ្នក]"
 }
index 8cd8dfe..573172d 100644 (file)
        "config-help-restart": "입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?",
        "config-restart": "예, 다시 시작합니다",
        "config-welcome": "=== 사용 환경 검사 ===\n기본 검사는 지금 이 환경이 미디어위키 설치에 적합한지 수행합니다.\n설치를 완료하는 방법에 대한 지원을 찾는다면 이 정보를 포함해야 하는 것을 기억하세요.",
-       "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+       "config-copyright": "=== 저작권 및 약관 ===\n\n$1\n\n이 프로그램은 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 프로그램을 재배포하거나 수정할 수 있습니다.\n\n이 프로그램이 유용하게 사용될 수 있기를 바라지만 <strong>상용으로 사용</strong>되거나 <strong>특정 목적에 맞을 것</strong>이라는 것을 <strong>보증하지 않습니다</strong>.\n자세한 내용은 GNU 일반 공중 사용 허가서를 참조하십시오.\n\n당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
        "config-sidebar": "* [//www.mediawiki.org 미디어위키 홈]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 사용자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 관리자 가이드]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>읽어보기</doclink>\n* <doclink href=ReleaseNotes>릴리스 노트</doclink>\n* <doclink href=Copying>전문</doclink>\n* <doclink href=UpgradeDoc>업그레이드하기</doclink>",
        "config-env-good": "환경이 확인되었습니다.\n미디어위키를 설치할 수 있습니다.",
        "config-env-bad": "환경이 확인되었습니다.\n미디어위키를 설치할 수 없습니다.",
        "config-env-php": "PHP $1이(가) 설치되어 있습니다.",
-       "config-env-hhvm": "HHMV $1이(가) 설치되어 있습니다.",
+       "config-env-hhvm": "HHVM $1이(가) 설치되어 있습니다.",
        "config-unicode-using-intl": "유니코드 정규화에 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용합니다.",
-       "config-unicode-pure-php-warning": "<strong>경고</strong>: 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.",
-       "config-unicode-update-warning": "<strong>경고</strong>: 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
+       "config-unicode-pure-php-warning": "<strong>경고:</strong> 유니코드 정규화를 처리할 [http://pecl.php.net/intl intl PECL 확장 기능]을 사용할 수 없기 때문에 느린 pure-PHP 구현을 대신 사용합니다.\n트래픽이 높은 사이트에서 실행하시려면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 유니코드 정규화]를 읽어보셔야 합니다.",
+       "config-unicode-update-warning": "<strong>경고:</strong> 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.\n만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 업그레이드]해야합니다.",
        "config-no-db": "적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP용 데이터베이스 드라이버를 설치해야 합니다.\n다음 데이터베이스 {{PLURAL:$2|유형을 지원합니다}}: $1.\n\nPHP를 직접 컴파일했다면, 예를 들어 <code>./configure --with-mysql</code>을 사용하여, 데이터베이스 클라이언트를 활성화하도록 다시 설정하세요.\n데비안이나 우분투 패키지에서 PHP를 설치했다면 <code>php5-mysql</code> 모듈도 설치해야 합니다.",
-       "config-outdated-sqlite": "<strong>경고</strong>: 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
-       "config-no-fts3": "<strong>경고</strong>: SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
+       "config-outdated-sqlite": "<strong>경고:</strong> 최소인 $2 버전보다 낮은 SQLite $1(이)가 있습니다. SQLite를 사용할 수 없습니다.",
+       "config-no-fts3": "<strong>경고:</strong> SQLite를 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일하며, 검색 기능은 백엔드에 사용할 수 없습니다.",
        "config-register-globals-error": "<strong>오류: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.\n설치를 계속하려면 비활성화해야 합니다.</strong>\n어떻게 하는지에 대한 도움말에 대해서는 [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals]를 보세요.",
        "config-magic-quotes-gpc": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상을 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-magic-quotes-runtime": "<strong>치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성화되어 있습니다!</strong>\n이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일으킵니다.\n이 옵션을 비활성화하지 않는 한 미디어위키를 설치하고 사용할 수 없습니다.",
        "config-pcre-old": "<strong>치명:</strong> PCRE $1 또는 그 이상이 필요합니다.\nPHP 바이너리는 PCRE $2에 연결되어 있습니다. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 자세한 정보].",
        "config-pcre-no-utf8": "<strong>치명:</strong> PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.\n미디어위키가 올바르게 작동하려면 UTF-8을 지원해야 합니다.",
        "config-memory-raised": "PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘렸습니다.",
-       "config-memory-bad": "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!",
-       "config-ctype": "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
+       "config-memory-bad": "<strong>경고:</strong> PHP의 <code>memory_limit</code>는 $1입니다.\n아마도 너무 낮은 것 같습니다.\n설치가 실패할 수 있습니다!",
+       "config-ctype": "<strong>치명</strong>: PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
        "config-iconv": "<strong>치명</strong>: PHP는 [http://www.php.net/manual/en/iconv.installation.php iconv 확장 기능]을 지원하도록 하여 컴파일해야 합니다.",
-       "config-json": "'''치명:''' PHP가 JSON 지원이 없이 컴파일되었습니다.\n미디어위키를 설치하기 전에 PHP JSON 확장 기능이나 [http://pecl.php.net/package/jsonc PECL jsonc] 확장 기능 중 하나를 설치해야 합니다.\n* PHP 확장 기능은 Red Hat Enterprise Linux (CentOS) 5와 6에 포함되어 있지만, <code>/etc/php.ini</code>나 <code>/etc/php.d/json.ini</code>에서 활성화해야 합니다.\n* 2013년 5월 이후에 출시된 일부 리눅스 배포판은 PHP 확장 기능이 생략된 대신, <code>php5-json</code>이나 <code>php-pecl-jsonc</code>로 PECL 확장 기능이 포장되어 있습니다.",
+       "config-json": "<strong>치명:</strong> PHP가 JSON 지원이 없이 컴파일되었습니다.\n미디어위키를 설치하기 전에 PHP JSON 확장 기능이나 [http://pecl.php.net/package/jsonc PECL jsonc] 확장 기능 중 하나를 설치해야 합니다.\n* PHP 확장 기능은 Red Hat Enterprise Linux (CentOS) 5와 6에 포함되어 있지만, <code>/etc/php.ini</code>나 <code>/etc/php.d/json.ini</code>에서 활성화해야 합니다.\n* 2013년 5월 이후에 출시된 일부 리눅스 배포판은 PHP 확장 기능이 생략된 대신, <code>php5-json</code>이나 <code>php-pecl-jsonc</code>로 PECL 확장 기능이 포장되어 있습니다.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache]가 설치되었습니다",
        "config-apc": "[http://www.php.net/apc APC]가 설치되었습니다",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]가 설치되었습니다",
-       "config-no-cache": "'''경고:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.\n개체 캐싱을 활성화하지 않습니다.",
-       "config-mod-security": "'''경고''': 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
+       "config-no-cache": "<strong>경고:</strong> [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] 또는 [http://www.iis.net/download/WinCacheForPhp WinCache]를 찾을 수 없습니다.\n개체 캐싱을 활성화하지 않습니다.",
+       "config-mod-security": "<strong>경고:</strong> 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
        "config-diff3-bad": "GNU diff3를 찾을 수 없습니다.",
        "config-git": "Git 버전 관리 소프트웨어를 찾았습니다: <code>$1</code>.",
        "config-git-bad": "Git 버전 관리 소프트웨어를 찾을 수 없습니다.",
        "config-imagemagick": "ImageMagick를 찾았습니다: <code>$1</code>.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
        "config-gd": "내장된 GD 그래픽 라이브러리를 찾았습니다.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
        "config-no-scaling": "GD 라이브러리나 ImageMagick를 찾을 수 없습니다.\n그림 섬네일이 비활성화됩니다.",
-       "config-no-uri": "'''오류:''' 현재 URI를 확인할 수 없습니다.\n설치가 중단되었습니다.",
-       "config-no-cli-uri": "'''경고''': 기본값을 사용하여 <code>--scriptpath</code>를 지정하지 않았습니다: <code>$1</code>.",
+       "config-no-uri": "<strong>오류:</strong> 현재 URI를 확인할 수 없습니다.\n설치가 중단되었습니다.",
+       "config-no-cli-uri": "<strong>경고:</strong> 기본값을 사용하여 <code>--scriptpath</code>를 지정하지 않았습니다: <code>$1</code>.",
        "config-using-server": "\"<nowiki>$1</nowiki>\"(을)를 서버 이름으로 사용합니다.",
        "config-using-uri": "\"<nowiki>$1$2</nowiki>\"(을)를 서버 URL로 사용합니다.",
-       "config-uploads-not-safe": "'''경고:''' 올리기에 대한 기본 디렉터리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.\n미디어위키는 보안 위협 때문에 모든 올려진 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
-       "config-no-cli-uploads-check": "'''경고:''' 올리기를 위한 기본 디렉터리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
+       "config-uploads-not-safe": "<strong>경고:</strong> 올리기에 대한 기본 디렉터리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.\n미디어위키는 보안 위협 때문에 모든 올려진 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
+       "config-no-cli-uploads-check": "<strong>경고:</strong> 올리기를 위한 기본 디렉터리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
        "config-brokenlibxml": "시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.\nlibxml2 2.7.3 이후 버전으로 업그레이드하세요. ([https://bugs.php.net/bug.php?id=45996 PHP에 제기한 버그])\n설치가 중단되었습니다.",
        "config-suhosin-max-value-length": "수호신(Suhosin)이 설치되고 $1 바이트로 GET 매개 변수 <code>length</code>를 제한하고 있습니다.\n미디어위키의 ResourceLoader 구성 요소는 이 제한을 회피하지만 성능이 저하됩니다.\n가능하면 <code>php.ini</code>의 <code>suhosin.get.max_value_length</code>를 1024 이상으로 설정하고 <code>LocalSettings.php</code>의 <code>$wgResourceLoaderMaxQueryLength</code>를 같은 값으로 설정해야 합니다.",
        "config-db-type": "데이터베이스 종류:",
        "config-db-install-account": "설치를 위한 사용자 계정",
        "config-db-username": "데이터베이스 사용자 이름:",
        "config-db-password": "데이터베이스 비밀번호:",
-       "config-db-password-empty": "새 데이터베이스 사용자의 비밀번호를 입력하세요: $1.\n비밀번호 없이 사용자를 만들 수도 있지만 안전하지 않습니다.",
-       "config-db-username-empty": "\"{{int:config-db-username}}\"에 대한 값을 입력해야 합니다.",
        "config-db-install-username": "설치 과정 도중 데이터베이스에 연결할 때 사용할 사용자 이름을 입력하세요.\n미디어위키 계정의 사용자 이름이 아닌 데이터베이스의 사용자 이름입니다.",
        "config-db-install-password": "설치 과정 도중 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요.\n미디어위키 계정의 비밀번호가 아닌 데이터베이스의 비밀번호입니다.",
        "config-db-install-help": "설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름과 비밀번호를 입력하세요.",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 바이너리",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-charset-mysql4": "MySQL 4.0 UTF-8 하위 호환성",
-       "config-charset-help": "'''경고:''' MySQL 4.1에서 '''하위 호환 가능 UTF-8'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스를 백업하면 ASCII가 아닌 모든 문자를 파괴하고 손상된 백업을 되돌릴 수 없습니다!\n\n'''바이너리 모드'''에서 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n'''UTF-8 모드'''에서는 MySQL이 데이터를 사용하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖에 있는 문자를 저장할 수 없습니다.",
+       "config-charset-help": "<strong>경고:</strong> MySQL 4.1에서 <strong>하위 호환 가능 UTF-8</strong>을 사용하고 나서 <code>mysqldump</code>로 데이터베이스를 백업하면 ASCII가 아닌 모든 문자를 파괴하고 손상된 백업을 되돌릴 수 없습니다!\n\n<strong>바이너리 모드</strong>에서 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n<strong>UTF-8 모드</strong>에서는 MySQL이 데이터를 사용하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖에 있는 문자를 저장할 수 없습니다.",
        "config-mysql-old": "MySQL $1 이상이 필요하나 $2(이)가 있습니다.",
        "config-db-port": "데이터베이스 포트:",
        "config-db-schema": "미디어위키에 대한 스키마:",
        "config-db-schema-help": "보통 이 스키마는 문제가 없습니다.\n필요한 경우에만 바꾸세요.",
-       "config-pg-test-error": "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
+       "config-pg-test-error": "<strong>$1</strong> 데이터베이스에 연결할 수 없습니다: $2",
        "config-sqlite-dir": "SQLite 데이터 디렉터리:",
        "config-sqlite-dir-help": "SQLite는 하나의 파일에 모든 데이터를 저장합니다.\n\n입력한 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.\n\n이 디렉토리는 웹을 통해 접근할 수 <strong>없어야</strong> 합니다. PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.\n\n설치 관리자는 <code>.htaccess</code> 파일을 작성하지만, 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.\n데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호)뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.\n\n예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
        "config-oracle-def-ts": "기본 테이블공간:",
        "config-sqlite-readonly": "<code>$1</code> 파일은 쓸 수 없습니다.",
        "config-sqlite-cant-create-db": "<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.",
        "config-sqlite-fts3-downgrade": "PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드합니다",
-       "config-can-upgrade": "이 데이터베이스에 미디어위키 테이블이 있습니다.\n미디어위키 $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
-       "config-upgrade-done": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.\n\n만약 <code>LocalSettings.php</code> 파일을 다시 만들고 싶다면 아래의 버튼을 클릭하세요.\n위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
+       "config-can-upgrade": "이 데이터베이스에 미디어위키 테이블이 있습니다.\n미디어위키 $1(으)로 업그레이드하려면 <strong>계속</strong>을 클릭하세요.",
+       "config-upgrade-done": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.\n\n만약 <code>LocalSettings.php</code> 파일을 다시 만들고 싶다면 아래의 버튼을 클릭하세요.\n위키에 문제가 있지 않는 한 <strong>권장하지 않습니다</strong>.",
        "config-upgrade-done-no-regenerate": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.",
        "config-regenerate": "LocalSettings.php 다시 생성 →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> 쿼리를 실패했습니다!",
-       "config-unknown-collation": "'''경고:''' 데이터베이스가 인식하지 않는 정렬을 사용하고 있습니다.",
+       "config-unknown-collation": "<strong>경고:</strong> 데이터베이스가 인식하지 않는 집합을 사용하고 있습니다.",
        "config-db-web-account": "웹 접근을 위한 데이터베이스 계정",
        "config-db-web-help": "위키의 일반적인 작업을 수행하는 동안 데이터베이스 서버에 연결하는 데 사용할 웹 서버의 계정 이름과 비밀번호를 선택하세요.",
        "config-db-web-account-same": "설치를 위해 같은 계정 사용",
        "config-mysql-engine": "저장소 엔진:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
-       "config-mysql-myisam-dep": "'''경고''': MySQL을 위한 저장소 엔진으로 MyISAM을 선택하였습니다. MyISAM을 미디어위키에 사용하는 것은 좋지 않습니다.  이유는:\n* 테이블 잠금 때문에 동시 실행을 지원하지 않습니다\n* 다른 엔진보다 더 손상되는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\nMySQL이 InnoDB를 지원한다면, InnoDB를 선택할 것을 매우 권장합니다.\nMySQL이 InnoDB를 지원하지 않는다면, 업그레이드를 하시는 편이 좋습니다.",
-       "config-mysql-only-myisam-dep": "'''경고''': MyISAM은 이 기계에  유일하게 사용할 수 있는 MySQL용 저장소 엔진이며, 미디어위키에 사용하는 것은 좋지 않습니다. 이유는:\n* 테이블 잠금 때문에 동시 실행을 지원하지 않습니다\n* 다른 엔진보다 더 손상시키는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\n당신의 MySQL은 InnoDB를 지원하지 않으며, 업그레이드를 하는 것이 좋습니다.",
-       "config-mysql-engine-help": "'''InnoDB'''는 동시 실행 지원이 우수하기 때문에 대부분의 경우 최고의 옵션입니다.\n\n'''MyISAM'''은 단일 사용자나 읽기 전용 설치에서 더 빠를 수 있습니다.\nMyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
+       "config-mysql-myisam-dep": "<strong>경고:</strong> MySQL을 위한 저장소 엔진으로 MyISAM을 선택하였습니다. MyISAM을 미디어위키에 사용하는 것은 좋지 않습니다.  이유는:\n* 테이블 잠금 때문에 동시 실행을 지원하지 않습니다\n* 다른 엔진보다 더 손상되는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\nMySQL이 InnoDB를 지원한다면, InnoDB를 선택할 것을 매우 권장합니다.\nMySQL이 InnoDB를 지원하지 않는다면, 업그레이드를 하시는 편이 좋습니다.",
+       "config-mysql-only-myisam-dep": "<strong>경고:</strong> MyISAM은 이 기계에  유일하게 사용할 수 있는 MySQL용 저장소 엔진이며, 미디어위키에 사용하는 것은 좋지 않습니다. 이유는:\n* 테이블 잠금 때문에 동시 실행을 지원하지 않습니다\n* 다른 엔진보다 더 손상시키는 경향이 있습니다\n* 미디어위키 코드베이스가 항상 정상적으로 MyISAM을 처리하지 않습니다\n\n당신의 MySQL은 InnoDB를 지원하지 않으며, 업그레이드를 하는 것이 좋습니다.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong>는 동시 실행 지원이 우수하기 때문에 대부분의 경우 최고의 옵션입니다.\n\n<strong>MyISAM</strong>은 단일 사용자나 읽기 전용 설치에서 더 빠를 수 있습니다.\nMyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
        "config-mysql-charset": "데이터베이스 문자 집합:",
        "config-mysql-binary": "바이너리",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "'''바이너리 모드'''에서 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드보다 더 효율적이고, 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n'''UTF-8 모드'''에서는 MySQL이 데이터를 사용하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖에 있는 문자를 저장할 수 없습니다.",
+       "config-mysql-charset-help": "<strong>바이너리 모드</strong>에서 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.\nMySQL의 UTF-8 모드보다 더 효율적이고, 유니코드 문자의 전체 범위를 사용할 수 있습니다.\n<strong>UTF-8 모드</strong>에서는 MySQL이 데이터를 사용하는 문자 집합을 알고 있기 때문에 적절하게 표현하고 변환할 수 있지만\n[//ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%ED%8F%89%EB%A9%B4#.EA.B8.B0.EB.B3.B8_.EB.8B.A4.EA.B5.AD.EC.96.B4_.ED.8F.89.EB.A9.B4 기본 다국어 평면] 밖에 있는 문자를 저장할 수 없습니다.",
        "config-mssql-auth": "인증 형식:",
        "config-mssql-install-auth": "설치 과정 중 데이터베이스에 연결하는 데 사용할 인증 형식을 선택하세요.\n\"{{int:config-mssql-windowsauth}}\"을 선택하시면 웹서버를 실행 중인 아무 사용자의 자격 증명이 사용됩니다.",
        "config-mssql-web-auth": "위키가 일반적인 작업을 수행하는 동안 데이터베이스 서버에 연결하는 데 사용할 인증 형식을 선택하세요.\n\n\"{{int:config-mssql-windowsauth}}\"을 선택하시면 웹서버를 실행 중인 아무 사용자의 자격 증명이 사용됩니다.",
        "config-profile-no-anon": "계정 만들기 필요",
        "config-profile-fishbowl": "승인된 편집자만",
        "config-profile-private": "비공개 위키",
-       "config-profile-help": "위키는 가능한 많은 사람들이 편집할 수 있도록 할 때 가장 뛰어난 역할을 합니다.\n미디어위키에서는 최근 바뀜을 검토하기 쉽고, 미숙하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.\n\n그러나 많은 사람이 미디어위키가 다양한 역할을 수행하는 데 유용하다는 것을 알고 있지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.\n그래서 선택할 수 있습니다.\n\n'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.\n'''{{int:config-profile-no-anon}}'''인 위키에서는 편집자에게 추가적인 책임을 부여하지만, 부담 없는 기여를 저해할 수도 있습니다.\n\n'''{{int:config-profile-fishbowl}}''' 시나리오에서는 승인된 사용자만 편집할 수 있지만, 일반 사용자도 문서(문서 역사 포함)는 볼 수 있습니다.\n'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며, 승인된 사용자 그룹이 편집할 수 있습니다.\n\n더 복잡한 사용자 권한 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 관련 설명서 항목]을 참고하세요.",
+       "config-profile-help": "위키는 가능한 많은 사람들이 편집할 수 있도록 할 때 가장 뛰어난 역할을 합니다.\n미디어위키에서는 최근 바뀜을 검토하기 쉽고, 미숙하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.\n\n그러나 많은 사람이 미디어위키가 다양한 역할을 수행하는 데 유용하다는 것을 알고 있지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.\n그래서 선택할 수 있습니다.\n\n<strong>{{int:config-profile-wiki}}/<strong> 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.\n<strong>{{int:config-profile-no-anon}}</strong>인 위키에서는 편집자에게 추가적인 책임을 부여하지만, 부담 없는 기여를 저해할 수도 있습니다.\n\n<strong>{{int:config-profile-fishbowl}}</strong> 시나리오에서는 승인된 사용자만 편집할 수 있지만, 일반 사용자도 문서(문서 역사 포함)는 볼 수 있습니다.\n<strong>{{int:config-profile-private}}</strong>는 승인된 사용자만 문서를 볼 수 있으며, 승인된 사용자 그룹이 편집할 수 있습니다.\n\n더 복잡한 사용자 권한 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 관련 설명서 항목]을 참조하세요.",
        "config-license": "저작권 및 라이선스:",
        "config-license-none": "라이선스 바닥글 없음",
        "config-license-cc-by-sa": "크리에이티브 커먼즈 저작자표시-동일조건변경허락",
        "config-email-watchlist": "주시문서 목록 알림 활성화",
        "config-email-watchlist-help": "환경 설정에서 활성화한 경우 사용자가 주시한 문서에 대한 알림을 받도록 활성화합니다.",
        "config-email-auth": "이메일 인증 활성화",
-       "config-email-auth-help": "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 링크를 사용하여 이메일 주소를 확인해야 합니다.\n인증된 이메일 주소만 다른 사용자로부터의 이메일이나 바뀜 알림 이메일을 받을 수 있습니다.\n이메일 기능의 남용 가능성이 있기 때문에 공개 위키에서는 이 옵션을 설정할 것을 '''권장'''합니다.",
+       "config-email-auth-help": "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 바꿀 때마다 링크를 사용하여 이메일 주소를 확인해야 합니다.\n인증된 이메일 주소만 다른 사용자로부터의 이메일이나 바뀜 알림 이메일을 받을 수 있습니다.\n이메일 기능의 남용 가능성이 있기 때문에 공개 위키에서는 이 옵션을 설정할 것을 <strong>권장</strong>합니다.",
        "config-email-sender": "반송 이메일 주소",
        "config-email-sender-help": "발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.\n반송할 때 보내는 주소입니다.\n대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.",
        "config-upload-settings": "그림과 파일 올리기",
        "config-upload-enable": "파일 올리기 활성화",
-       "config-upload-help": "파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.\n자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security 보안 문단]을 참하세요.\n\n파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.\n그 다음 이 옵션을 활성화합니다.",
+       "config-upload-help": "파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.\n자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security 보안 문단]을 참하세요.\n\n파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.\n그 다음 이 옵션을 활성화합니다.",
        "config-upload-deleted": "삭제된 파일에 대한 디렉터리:",
        "config-upload-deleted-help": "삭제된 파일을 보관할 디렉토리를 선택하세요.\n이상적으로 웹에서 접근할 수 없게 해야 합니다.",
        "config-logo": "로고 URL:",
        "config-logo-help": "미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고의 공간을 포함하고 있습니다.\n적당한 크기로 그림을 올리고 여기에 URL을 입력하세요.\n\n로고가 상대적인 경로에 있으면 <code>$wgStylePath</code>나 <code>$wgScriptPath</code>를 사용할 수 있습니다.\n\n로고 사용을 원하지 않으면 이 상자를 비우세요.",
        "config-instantcommons": "인스턴트 공용 기능 활성화",
-       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.\n이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.\n\n위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한, 기능에 대한 자세한 내용은 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 매뉴얼]을 참하세요.",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.\n이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.\n\n위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한, 기능에 대한 자세한 내용은 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 매뉴얼]을 참하세요.",
        "config-cc-error": "크리에이티브 커먼즈 라이선스 선택기에 결과가 없습니다.\n수동으로 라이선스 이름을 입력하세요.",
        "config-cc-again": "다시 선택...",
        "config-cc-not-chosen": "원하는 크리에이티브 커먼즈 라이선스를 선택하고 \"진행\"을 클릭하세요.",
        "config-skins-missing": "스킨을 찾을 수 없습니다; 미디어위키는 당신이 적절한 스킨을 설치할 때까지 대체 스킨을 사용합니다.",
        "config-skins-must-enable-some": "적어도 활성화활 스킨 하나를 선택해야 합니다.",
        "config-skins-must-enable-default": "기본값으로 설정한 스킨은 반드시 활성화해야 합니다.",
-       "config-install-alreadydone": "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지로 진행하세요.",
+       "config-install-alreadydone": "<strong>경고:</strong> 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지로 진행하세요.",
        "config-install-begin": "\"{{int:config-continue}}\"을 누르면 미디어위키의 설치를 시작합니다.\n그래도 바꾸는 것을 원한다면 \"{{int:config-back}}\"를 누르세요.",
        "config-install-step-done": "완료",
        "config-install-step-failed": "실패",
        "config-install-user-missing": "지정한 \"$1\" 사용자가 존재하지 않습니다.",
        "config-install-user-missing-create": "지정된 \"$1\" 사용자가 존재하지 않습니다.\n사용자를 만드려면 아래의 \"계정 만들기\" 확인 상자를 클릭하세요.",
        "config-install-tables": "테이블을 만드는 중",
-       "config-install-tables-exist": "'''경고''': 미디어위키 테이블이 이미 있는 것 같습니다.\n테이블 만들기를 생략합니다.",
-       "config-install-tables-failed": "'''오류''': 다음 오류로 인해 테이블 만들기에 실패했습니다: $1",
+       "config-install-tables-exist": "<strong>경고:</strong> 미디어위키 테이블이 이미 있는 것 같습니다.\n테이블 만들기를 생략합니다.",
+       "config-install-tables-failed": "<strong>오류</strong>: 다음 오류로 인해 테이블 만들기에 실패했습니다: $1",
        "config-install-interwiki": "기본 인터위키 테이블을 채우는 중",
        "config-install-interwiki-list": "<code>interwiki.list</code> 파일을 불러올 수 없습니다.",
-       "config-install-interwiki-exists": "'''경고''': 인터위키 테이블이 이미 항목을 갖고 있는 것 같습니다.\n기본 목록을 건너뜁니다.",
+       "config-install-interwiki-exists": "<strong>경고:</strong> 인터위키 테이블이 이미 항목을 갖고 있는 것 같습니다.\n기본 목록을 건너뜁니다.",
        "config-install-stats": "통계를 초기화하는 중",
        "config-install-keys": "보안 키를 만드는 중",
-       "config-insecure-keys": "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)는 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸는 것을 고려하세요.",
+       "config-insecure-keys": "<strong>경고:</strong> 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)는 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 바꾸는 것을 고려하세요.",
        "config-install-updates": "불필요한 업데이트 실행 방지",
        "config-install-updates-failed": "<strong>오류:</strong> 다음 오류로 테이블 안에 업데이트 키를 넣기에 실패했습니다: $1",
        "config-install-sysop": "관리자 사용자 계정을 만드는 중",
        "config-help-tooltip": "확장하려면 클릭",
        "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?",
        "config-extension-link": "당신의 위키가 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 분류별 확장 기능]을 찾아보실 수 있습니다.",
-       "mainpagetext": "'''미디어위키가 성공적으로 설치되었습니다.'''",
+       "mainpagetext": "<strong>미디어위키가 성공적으로 설치되었습니다.</strong>",
        "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 설정하기 목록]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 릴리스 메일링 리스트]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 내 언어로 미디어위키 지역화]"
 }
index 8990b8a..bffdf05 100644 (file)
        "config-localsettings-incomplete": "Mer han en Dattei <code lang=\"en\"><code>LocalSettings.php</code>:</code> jefonge, ävver di schingk nit kumplätt ze sin.\nDe Varijable <code lang=\"en\">$1</code> es nit jesatz.\nBes esu joot, un donn di Dattei esu aanpaße, dat se jesaz ea, un dann donn op „{{int:config-continue}}“ klecke.",
        "config-localsettings-connection-error": "Ene Fähler es opjetrodde wi mer en Verbendong noh de Datebangk opmaache wullte met dä Enschtällonge uß dä Dattei <code lang=\"en\">LocalSettings</code> un et hät nit jeflupp. Bes esu joot un don dat repareere un versöhg et dann norr_ens.\n\n$1\n\n$1",
        "config-session-error": "Ene Fähler es opjetrodde beim Aanmelde för en Sezung: $1",
-       "config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
+       "config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mih wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
        "config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
        "config-your-language": "De Schprohch beim Enreeschte:",
        "config-your-language-help": "Donn heh di Schprohch ußsöhke, di dat Enschtallzjuhnsprojramm kalle sull.",
        "config-wiki-language": "Dem Wiki sing Schprohch:",
        "config-wiki-language-help": "Donn heh di Schprohch ußsöhke, di et Wiki schtandattmääßesch kalle sull.",
-       "config-back": "← Retuur",
+       "config-back": "← Retuhr",
        "config-continue": "Wigger →",
        "config-page-language": "Schprohch",
        "config-page-welcome": "Wellkumme beim MehdijaWikki!",
@@ -40,7 +40,7 @@
        "config-page-copying": "Ben aam Kopeere",
        "config-page-upgradedoc": "Ben op der neuste Stand aam bränge",
        "config-page-existingwiki": "Mer han ald e Wiki!",
-       "config-help-restart": "Wells De all Ding enjejovve Sachee fottjeschmesse han, un dä janze Vörjang vun fürre aan neu aanfange?",
+       "config-help-restart": "Wells De all Ding enjejovve Saache fottjeschmeße han, un dä janze Vörjang vun fürre aan neu aanfange?",
        "config-restart": "Joh, neu aanfange!",
        "config-welcome": "=== Ömjevong Pröhfe ===\nMer maache en Aanzahl jrundlääje Pröhvunge, öm erus ze fenge, ov di Ömjävvong heh paß för Mediawiki opzesäze.\nWann de Hölp bem Opsäze hölls, saach wigger, wat heh erus kohm, alsu wat heh schteiht.",
        "config-copyright": "=== Urhävverrääsch un Lizänzbedengunge ===\n\n$1\n\nDat  Projramm heh es frei, mer kann et wiggerjävve un verdeijle un och verändere onger dä Bedengunge vun de  GNU <i lang=\"en\">General Public License</i> (Alljemeine öffentlesche Lizänz) wi se vun de <i lang=\"en\">Free Software Foundation</i> (de Schteftung för frei Projramme) veröffentlesch woode es. Dobei kanns De Der de Version 2 vun dä Lizanz ußsöhke, udder jeede Version donoh, wi et Der jefällt.\n\nDat Projramm weed wigger jejovve met dä Hoffnung, dat et jät nöz, ävver <strong>der ohne Jarrantie</strong>, sujaa der ohne de onußjeshproche Jarantie, <strong>verkoufbaa</strong> ze sin, udder <strong>för öhnds_ene beshtemmpte Zweck ze bruche</strong> ze sin.\nLiß de GNU <i lang=\"en\">General Public License</i> sellver, öm mieh ze erfahre.\n\nDo sullts en <doclink href=Copying>Kopie vun dä alljemene öffentlesche Lizänz vun dä GNU</doclink> (<i lang=\"en\">GNU General Public License</i>) zosamme met heh däm Projramm krääje han. Wann dat nit esu es, schrief aan de <i lang=\"en\">Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA</i>, udder [http://www.gnu.org/copyleft/gpl.html liß se online övver et Internet].",
        "config-outdated-sqlite": "'''Opjepaß:''' <i lang=\"en\">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang=\"en\">SQLite</i> $2 udder hühter. <i lang=\"en\">SQLite</i> kann dröm nit enjesaz wääde.",
        "config-no-fts3": "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
        "config-register-globals-error": "<strong>Fähler: dem PHP sing Enschtällong <code>[http://php.net/register_globals register_globals]</code> es aanjeschalldt.\nSe moß ußjeschalldt sin, domet mer heh wigger maache kann.</strong>\nLoor op dä Sigg [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] wi mer se ußschallde kann.",
-       "config-magic-quotes-gpc": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
-       "config-magic-quotes-runtime": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+       "config-magic-quotes-gpc": "<strong>Dä!</strong> Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mih repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+       "config-magic-quotes-runtime": "<strong>Dä!</strong> Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
        "config-magic-quotes-sybase": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]</code> es enjeschalldt.\nDä määt enjejovve Daate kapott, un doh draan kam_mer dann nix mieh repareere.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
-       "config-mbstring": "'''Dä!''' Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.\nDat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mieh ze repareere es.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
+       "config-mbstring": "<strong>Dä!</strong> Dem PHP singe Schallder <code lang=\"en\">[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]</code> es enjeschalldt.\nDat sorresch för Fähler un kann enjejovve Daate esu kapott maach, dat doh draan nix mih ze repareere es.\nDomet kam_mer MediaWiki nit ennreeshte un och nit loufe lohße.\nDat heiß, mer moß en affschallde, söns jeiht nix.",
        "config-safe-mode": "'''Opjepaß:''' Dem PHP singe <code lang=\"en\">[http://www.php.net/features.safe-mode safe mode]</code> es aanjeschalldt. Dat kann Ärjer maache, besönders beim Datteie Huhlaade bei de Ongershtözung för <code lang=\"en\">math</code>-Befähle.",
        "config-xml-bad": "Dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i> sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Moduhl es nit ze fenge.\nMediaWiki bruch Funxjohne en däm Moduhl un deiht et esu nit.\nDe künns et nühdesch han, dat Pakätt \n„<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">php-xml</code>“ ze enschtallehre.",
        "config-pcre-old": "<strong>Fähler:</strong> PCRE $1 udder neuer es nüüdesch.\nPHP es jäz ävver met PCRE $2 zesamme jebonge.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mieh dohzoh].",
        "config-db-install-account": "Der Zohjang för en Enreeschte",
        "config-db-username": "Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk:",
        "config-db-password": "Et Paßwoot vun däm Aanwender för dä Zohjref op de Daatebangk:",
-       "config-db-password-empty": "Jiv e Paßwoot aan, för dä neue Aanwender för dä Zohjref op de Daatebangk, $1.\nEd es zwa müjjelesch, Aanwender för dä Zohjref op de Daatebangk der ohne e Paßwoot aanzelääje,\nävver dat wöhr en schwere Jevah för de Sescherheit vum Wiki.",
-       "config-db-username-empty": "Do moß jäd aanjävve för \"{{int:config-db-username}}\".",
-       "config-db-install-username": "Jiv ene Name aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.\nDat es keine Metmaacher_Name em Wiki — heh dä Name es alleins en der Daatebangk bikannt.",
+       "config-db-install-username": "Jiv ene Nahme aan för dä Aanwender för dä Zohjref op de Datebangk beim Enshtallehre.\nDat es keine Metmaacher_Nahme em Wikki — heh dä Nahme es alleins en der Dahtebangk bikannt.",
        "config-db-install-password": "Jiv e Paßwoot aan för dä Aanwender för dä Zohjref op de Daatebangk beim Enshtalleere.\nDat es kei Paßwoot för ene Metmaacher em Wiki — et es alleins en der Daatebangk bikannt.",
        "config-db-install-help": "Donn dä Name un et Paßwoot vun däm Aanwänder för der Zohjreff op de Daatebangk jäz för et Enreeshte aanjävve.",
        "config-db-account-lock": "Donn dersälve Name un et sälve Paßwoot för der nomaale Bedrief vum Wiki bruche",
        "config-db-wiki-account": "Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk em nomaale Bedrief:",
        "config-db-wiki-help": "Jiv ene Nahme un e Paßwoot aan, för dä Aanwänder för dä Zohjref op de Dahtebangk, wann et Wikki nommahl aam Loufe es.\nWann et dä Nahme en der Dahtebangk noch nit jit, un dä Aanwender för dä Zohjrevv op de Dahtebangk beim Enschtallehre jenohch Berääschtejonge hät, läht dä heh dä Aanwänder en der Dahtebangk aan un jidd_em di Rääschde, di dä nühdesch hät, ävver nit mih.",
        "config-db-prefix": "Vörsaz för de Name vun de Tabälle en de Daatebangk:",
-       "config-db-prefix-help": "Wann ein Daatebangk för mieh wi ein Wiki udder e Wiki uns söns jät zosamme jebruch weed, dann kam_mer noch jet vör de Tabälle ier Name säze. Esu ene Vörsaz sull dubblte Tabällename vermeide hälfe.\nDonn kein Zwescheräum enjävve!\n\nJewöhnlesch bliev dat Feld heh ävver läddesch.",
+       "config-db-prefix-help": "Wann ein Daatebangk för mih wi ein Wiki udder e Wiki uns söns jät zosamme jebruch weed, dann kam_mer noch jet vör de Tabälle ier Name säze. Esu ene Vörsaz sull dubblte Tabällename vermeide hälfe.\nDonn kein Zwescheräum enjävve!\n\nJewöhnlesch bliev dat Feld heh ävver läddesch.",
        "config-db-charset": "Dä Daatebangk iere Zeischesaz",
        "config-charset-mysql5-binary": "MySQL (4.1 udder 5.0) binär",
        "config-charset-mysql5": "MySQL (4.1 udder 5.0) UTF-8",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "'''Opjepaß:''' <i lang=\"en\">MyISAM</i> es als Speicher för <i lang=\"en\">MySQL</i> nit besönders joot för et Zosammeschpell met MediaWiki zo bruche:\n* Dorj_et kumplätte Sperre vun Tabälle, künne koum ens Saache parrallel en dä Daatebangk jedonn wääde.\n* Dat Fomaat es anfällesch för Probleme met de Daate.\n* Et weed vun MediaWiki nit ėmmer zopaß ongerschtöz.\n\nWann Ding <i lang=\"en\">MySQL</i> et Schpeischere en <i lang=\"en\">InnoDB</i>-Datteije ongerschtöze deiht, dom_mer dat nohdröcklesch ämfähle.\nKann dä ẞööver dat nit, künnd et joode jelääjeheit sin, dä ens op der neuste Schtand ze bränge.",
        "config-mysql-only-myisam-dep": "'''Opjepaß:''' <i lang=\"en\" xml:lang=\"en\">MyISAM</i> es de einzeje Zoot Schpeischerprojramm för <i lang=\"en\" xml:lang=\"en\">MySQL</i> op dä Maschiin. Di es nit för MediaWiki ze ämfähle es, weil:\n* wääje dem Schpärre vun jannze Tabälle sin koum paralleele Axjuhne en dä Daatebangk möjjelesch,\n* ed es aanfällesch för Probleeme met de Daate es, un\n* et weed vun MediaWiki nit emmer jood ongerschtöz.\n\nDing Enschtallazjuhn vum <i lang=\"en\" xml:lang=\"en\">MySQL</i> kann nit met <i lang=\"en\" xml:lang=\"en\">InnoDB</i> ömjonn.\nWi wöhr et med ene neuere Väsjohn vum <i lang=\"en\" xml:lang=\"en\">MySQL</i>?",
-       "config-mysql-engine-help": "'''InnoDB''' es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde.\n\n'''MyISAM''' es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann.\nMyISAM-Daatebangke han em Schnett mieh Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.",
+       "config-mysql-engine-help": "<strong>InnoDB</strong> es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde.\n\n<strong>MyISAM</strong> es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann.\nMyISAM-Daatebangke han em Schnett mih Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.",
        "config-mysql-charset": "Dä Daatebangk iere Zeischesaz:",
        "config-mysql-binary": "binär",
        "config-mysql-utf8": "UTF-8",
        "config-ns-invalid": "Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ es nit jöltesch.\nNemm ene andere Name för däm Wiki sing eije Appachtemang.",
        "config-ns-conflict": "Dat aanjejovve Appachtemang „<nowiki>$1</nowiki>“ kütt ald als Standatt-Appachtemang em MediaWiki vör.\nNemm ene andere Name för däm Wiki sing eije Appachtemang.",
        "config-admin-box": "Der Zohjang för der eezte Wiki_Köbes",
-       "config-admin-name": "Dinge Metmaacher_Name:",
+       "config-admin-name": "Dinge Metmaacher_Nahme:",
        "config-admin-password": "Et Paßwoot:",
        "config-admin-password-confirm": "Norrens dat Paßwoot:",
        "config-admin-help": "Jif Dinge leevste Name als Metmaacher för Desch aan, för e Beishpell „Schmitzens Pitter“\n— Dat weed dä Name wääde, met dämm De Desch enlogge deihs.",
-       "config-admin-name-blank": "Jiv ene Metmaacher_Name en för dä Wiki-Köbes.",
-       "config-admin-name-invalid": "„<nowiki>$1</nowiki>“ es keine jöltijje Metmaacher_Name.\nJiv ene joode Name en!",
+       "config-admin-name-blank": "Jiv ene Metmaacher_Nahme en för dä Wikki-Köhbes.",
+       "config-admin-name-invalid": "„<nowiki>$1</nowiki>“ es keine jöltijje Metmaacher_Nahme.\nJiv ene johde Nahme en!",
        "config-admin-password-blank": "Do mos_e Paßwoot för dä Wiki_Köbes aanjävve!",
        "config-admin-password-mismatch": "Di Paßwööter sin ongerscheidlesh!",
        "config-admin-email": "Addräß för de <i lang=\"en\">e-mail</i>:",
        "config-profile-no-anon": "Schriever möße enlogge",
        "config-profile-fishbowl": "Bloß ußdröcklesch zohjelohße Schriever",
        "config-profile-private": "E jeschloße Privat_Wiki",
-       "config-profile-help": "Wikis loufe et bäß, wam_mer esu vill Lück wi möjjelesch draan metmaache un schrieve löht.\nMet MediaWiki es et ejfach, de neuste Änderonge ze beloore un wat ahnungslose udder fiese Lück kapott jemaat han wider retuur ze maache.\n\nBloß, mänsch eine häd_eruß jefonge, dat mer MediaWiki jood en en jruuße Zahl ongerscheidlijje Rolle bruche kann, un nit emmer es et leisch, ene vum onverfälschte Wiki_Wääsch ze övverzeuje.\nEsu häß De de Wahl:\n\n'''{{int:config-profile-wiki}}''' löht jeder_ein metschrieve, och ohne sesch enzelogge.\n\n'''{{int:config-profile-no-anon}}''', dat sorsch för mieh seeschbaa Verantwootlischkeite, künnt ävver zohfällije Methellefer verschrecke.\n\n'''{{int:config-profile-fishbowl}}''' löht nor de ußjesöhk Metmaacher schrieve, ävver de janze Öffentleshkeit kann et lässe un süht och de ällder Versione, un wat wää wann draan jedonn hät.\n\n'''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wiki zohjelohße es, un desellve Jropp kann uch schrieve.\n\nNoch ander un un opwändijere Enschtellunge för de Rääschte sin möjjelesch, wann et Wiki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights zopaß Hölp em Handbooch] aan.",
+       "config-profile-help": "Wikkis loufe et bäß, wam_mer esu vill Lück wi möjjelesch draan metmaache un schrieve löht.\nMet MehdijaWikki es et ejfach, de neuste Änderonge ze beloore un wat ahnungslose udder fiese Lück kapott jemaat han wider retuur ze maache.\n\nBloß, mänsch eine häd_eruß jefonge, dat mer MediaWiki jood en en jruuße Zahl ongerscheidlijje Rolle bruche kann, un nit emmer es et leisch, ene vum onverfälschte Wiki_Wääsch ze övverzeuje.\nEsu häß De de Wahl:\n\n'''{{int:config-profile-wiki}}''' löht jeder_ein metschrihve, och ohne sesch enzelogge.\n\n'''{{int:config-profile-no-anon}}''', dat sorsch för mieh seeschbaa Verantwootlischkeite, künnt ävver zohfällije Methellefer verschrecke.\n\n'''{{int:config-profile-fishbowl}}''' löht nor de ußjesöhk Metmaacher schrieve, ävver de janze Öffentleshkeit kann et lässe un süht och de ällder Versione, un wat wää wann draan jedonn hät.\n\n'''{{int:config-profile-private}}''' kann nur lässe, wäh en et Wikki zohjelohße es, un desellve Jropp kann och schrieve.\n\nNoch ander un un opwändijere Enschtällonge för de Rääschte sin müjjelesch, wann et Wikki ens aam Loufe es. Loor Der doför de [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights zopaß Hölp em Handbooch] aan.",
        "config-license": "Urhävverrääsch un Lizänz:",
        "config-license-none": "Kein Fooßreih övver de Lizänz",
        "config-license-cc-by-sa": "<i lang=\"en\">Creative Commons</i> Der Name moß jenannt sin, et Wiggerjävve es zohjelohße onger dersellve Bedengunge",
        "config-license-help": "Ättlijje öffentleje Wikis donn iehr Beidrääsch onger en [http://freedomdefined.org/Definition freije Lizänz] schtelle.\nDat hellef, e Jeföhl vun Jemeinsamkeid opzeboue, un op lange Seesch emmer wider Beidrääsch ze krijje.\nDat es nit onbedengk nüüdesh för e Jeschäffs- udder Privaat_Wiki.\n\nWä Stöcke uß de Wikipedia bruche well, un dröm han well, dat mer för Wikipedia uss_em eije Wiki jät övvernämme kann, sullt „'''<i lang=\"en\">Creative Commons</i>, dem Schriever singe Name moß jenannt wääde, un Wiggerjävve zoh dersellve Bedengunge es zohjelohße'''“ ußwähle.\n\nDe su jenannte '''<i lang=\"en\">GNU Free Documentation License</i>''' (de freije Lizänz för Dokemäntazjuhne vun dä GNU) sen de ahle Lizänzbedenonge vun de Wikipedia. Se es emmer noch in Odenong un jöltesch, ävver se es schwer ze verschtonn un et Wiggerjävve un widder Bruche es ens schwieerejer domet.",
        "config-email-settings": "Enschtellunge för de <i lang=\"en\">e-mail</i>",
        "config-enable-email": "De <i lang=\"en\">e-mail</i> noh druße zohlohße",
-       "config-enable-email-help": "Sulle <i lang=\"en\">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, de [http://www.php.net/manual/en/mail.configuration.php Enschtellunge em PHP för de <i lang=\"en\">e-mails</i>] zopaß jemaat han.\nWann kein <i lang=\"en\">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.",
+       "config-enable-email-help": "Sulle \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mails</i> zohjelohße sin, moß mer, domet et noher flupp, dä Datteij <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[http://www.php.net/manual/en/mail.configuration.php</code> Enschtällonge em PHP för de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>] zopaß jemaat han.\nWann kein <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mails</i> nüüdesch sin, kam_mer se heh afschallde.",
        "config-email-user": "<i lang=\"en\">e-mails</i> zwesche de Metmaacher zohlohße",
-       "config-email-user-help": "Määt et müjjelesch, dat sesch de Metmaacher jääjesiggesch <i lang=\"en\">e-mails</i> schecke künne, wann se dat en iehre eije Enschtellunge och enjeschalldt han.",
+       "config-email-user-help": "Määt et müjjelesch, dat sesch de Metmaacher jääjesiggesch \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mails</i> scheke künne, wann se dat en iehre eije Enschtällonge och enjeschalldt han.",
        "config-email-usertalk": "<i lang=\"en\">e-mails</i> mem Bescheid zohlohße, dat einem sing Klaafsigg verändert woodt",
        "config-email-usertalk-help": "Maach et müjjelesch, dat Metmaaacher en iere Enschtällonge <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mails</i>mem Bescheid zohlohße, dat einem sing Klaafsigg veränndert woodt.",
        "config-email-watchlist": "Nohreeschte övver Änderonge aan Sigg op de Opaßleßte zohlohße",
        "config-email-sender": "De Adräß för de Antwoote op <i lang=\"en\">e-mails</i>:",
        "config-email-sender-help": "Jiff de Adräß för de <i lang=\"en\">e-mail</i> en, woh Antwoote ob em Wiki singe <i lang=\"en\">e-mails</i> hen jonn sulle.\nDat es och de Adräß, woh de <i lang=\"en\">e-mails</i> met Fählermäldonge hen jon.\nVill ẞöövere för de <i lang=\"en\">e-mail</i> welle winnischßdens ene jöltijje Domain en dä Adräß han.",
        "config-upload-settings": "Belder un Datteie huh laade",
-       "config-upload-enable": "Belder un Datteie huh laade zohlohße",
+       "config-upload-enable": "Et Belder un Datteie Huhlahde zohlohße",
        "config-upload-help": "Datteije huh ze laade künnt e Risiko för dem ẞööver singe Sescherheit sin.\nMieh doh drövver kam_mer em [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security Kapitel övver de Sescherheit] em Handbooch lässe.\n\nÖm et Huhlaade zohzelohße donn de Rääschde för der Zohjreff op dat Ongerverzeischneß <code lang=\"en\">images</code> em MediaWiki singem Houpverzeischneß esu enshtälle, dat et Webßööverprojramm doh Datteije un Verzeischneße eren schrieve kann.\nDonoh donn heh di Saach zohlohße.",
        "config-upload-deleted": "Dat Verzeishneß för fottjeschmeße Datteije:",
        "config-upload-deleted-help": "Söhk e Verzeijschneß uß för de fottjeschmeße Datteije vum Wiki dren afzelääje.\nEt bäß es, wam_mer vum <i lang=\"en\">world wide web</i> doh nit drahn kumme kann.",
        "config-install-extension-tables": "Ben Datebangk-Tabälle för de Zohsazprojramme aam ennreschte",
        "config-install-mainpage-failed": "Kunnt de Houpsigg nit afshpeishere: $1",
        "config-install-done": "'''Jlöckwonsch!'''\nMediaWiki es jetz enstalleet.\n\nEt Projramm zom Enreeschte hät en Dattei <code lang=\"en\">LocalSettings.php</code> aanjelaat.\nDoh sin de Enstellunge vum Wiki dren.\n\nDo weeß se eronge laade möße un dann en dem Wiki sing Aanfangsverzeishnes donn möße, et sellve Verzeisneß, woh di Dattei <code lang=\"en\">index.php</code> dren litt. Dat Erongerlaade sullt automattesch aanjefange han.\n\nWann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op dä Lengk heh dronger klecke:\n\n$3\n\n'''Opjepaß''': Wann De dat jez nit deihß, es alles verschött, wat De bes jöz enjejovve häs, weil di Dattei fott es en däm Momang, woh heh dat Projamm aam Engk es.\n\nWann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[$2 en Ding Wiki jonn]'''.",
-       "config-download-localsettings": "Donn di Dattei <code lang=\"en\">LocalSettings.php</code> eronger laade",
+       "config-download-localsettings": "Donn di Dattei <code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">LocalSettings.php</code> eronger lahde",
        "config-help": "Hölp",
        "config-help-tooltip": "Donn Hölp heh aan däm Plaaz enblände.",
        "config-nofile": "De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?",
index eb66bbb..69bbc83 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "GreenZeb",
-                       "Papuass"
+                       "Papuass",
+                       "Silraks"
                ]
        },
        "config-information": "Informācija",
        "config-page-readme": "Lasīt mani",
        "config-page-releasenotes": "Informācija par laidienu",
        "config-page-copying": "Kopē",
+       "config-restart": "Jā, restartēt",
        "config-env-php": "PHP $1 ir uzstādīts.",
        "config-diff3-bad": "GNU diff3 nav atrasts.",
+       "config-db-username": "Datubāzes lietotājvārds:",
+       "config-db-password": "Datubāzes parole:",
        "config-db-charset": "Datubāzes rakstzīmju kopa",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binārs",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-header-mssql": "Microsoft SQL servera iestatījumi",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-admin-name": "Tavs lietotājvārds:",
+       "config-admin-password": "Parole:",
+       "config-admin-password-confirm": "Parole vēlreiz:",
+       "config-admin-name-blank": "Ievadiet administratora lietotājvārdu.",
+       "config-admin-email": "E-pasta adrese:",
+       "config-cc-again": "Izvēlies vēlreiz...",
+       "config-install-step-done": "Gatavs",
+       "config-help": "palīdzība",
+       "config-help-tooltip": "uzspiediet, lai izvērstu",
        "mainpagetext": "'''MediaWiki veiksmīgi ieinstalēts'''",
        "mainpagedocfooter": "Izlasi [//meta.wikimedia.org/wiki/Help:Contents Lietotāja pamācību], lai iegūtu vairāk informācijas par Wiki programmatūras lietošanu.\n\n== Pirmie soļi ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Konfigurācijas iespēju saraksts]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki J&A]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Parakstīties uz paziņojumiem par jaunām MediaWiki versijām]"
 }
index e9deb7b..3916233 100644 (file)
        "config-unicode-pure-php-warning": "<strong>Fampitandremana: </strong>  Ny [http://pecl.php.net/intl itatra PECL intl] dia tsy misy mba hahazakana ny fampifenerana Unicode, ka mitontona amin'ny implementasiona PHP ranoray noho ny tsifisiany.\nRaha hametraka tranonkala be mpamangy ianao dia tokony mamaky ny [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (amin'ny teny anglisy)",
        "config-db-username": "Anaram-pikamban'ny banky angona :",
        "config-db-password": "Tenimiafin'ny banky angona :",
+       "config-charset-mysql5-binary": "roafototra MySQL 4.1/5.0",
+       "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-charset-mysql4": "MySQL 4.0 miverinjaka UTF-8",
+       "config-db-port": "Seranam-banky angona:",
        "config-header-mysql": "Parametatr'i MySQL",
        "config-header-sqlite": "Parametatr'i SQLite",
        "config-header-oracle": "Parametatr'i Oracle",
index 582919d..76bfc04 100644 (file)
@@ -89,7 +89,7 @@
        "config-suhosin-max-value-length": "Suhosin е воспоставен и ја ограничува должината на параметарот GET на $1 бајти. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на <code>suhosin.get.max_value_length</code> треба да го наместите на 1024 или повеќе во <code>php.ini</code>, и да му ја зададете истата вредност на <code>$wgResourceLoaderMaxQueryLength</code> во <code>LocalSettings.php</code>.",
        "config-db-type": "Тип на база:",
        "config-db-host": "Домаќин на базата:",
-       "config-db-host-help": "Ð\90ко Ð²Ð°Ñ\88аÑ\82а Ð±Ð°Ð·Ð° Ðµ Ð½Ð° Ð´Ñ\80Ñ\83г Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87, Ñ\82огаÑ\88 Ñ\82Ñ\83ка Ð²Ð½ÐµÑ\81еÑ\82е Ð³Ð¾ Ð¸Ð¼ÐµÑ\82о Ð½Ð° Ð´Ð¾Ð¼Ð°Ñ\9cиноÑ\82 Ð¸Ð»Ð¸ IP-адÑ\80еÑ\81аÑ\82а.\n\nÐ\90ко ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87ко (Ñ\81поделено) Ð²Ð´Ð¾Ð¼Ñ\83ваÑ\9aе, Ñ\82огаÑ\88 Ð²Ð°Ñ\88иоÑ\82 Ð²Ð´Ð¾Ð¼Ð¸Ñ\82ел Ñ\82Ñ\80еба Ð´Ð° Ð³Ð¾ Ð½Ð°Ð²ÐµÐ´Ðµ Ñ\82оÑ\87ноÑ\82о Ð¸Ð¼Ðµ Ð½Ð° Ð´Ð¾Ð¼Ð°Ñ\9cиноÑ\82 Ð²Ð¾ Ð½ÐµÐ³Ð¾Ð²Ð°Ñ\82а Ð´Ð¾ÐºÑ\83менÑ\82аÑ\86иÑ\98а.\n\nÐ\90ко Ð²Ð¾Ñ\81поÑ\81Ñ\82авÑ\83ваÑ\82е Ð½Ð° Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87 Ð½Ð° Windows Ð¸ ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е MySQL, Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82а â\80\9elocalhostâ\80\9c Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð½Ðµ Ñ\84Ñ\83нкÑ\86иониÑ\80а Ð·Ð° Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87коÑ\82о Ð¸Ð¼Ðµ. Ð\92о Ñ\82оÑ\98 Ñ\81лÑ\83Ñ\87аÑ\98, Ð¾Ð±Ð¸Ð´ÐµÑ\82е Ñ\81е Ñ\81о Ð²Ð½ÐµÑ\81Ñ\83ваÑ\9aе Ð½Ð° â\80\9e127.0.0.1â\80\9c ÐºÐ°ÐºÐ¾ Ð»Ð¾ÐºÐ°Ð»на IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
+       "config-db-host-help": "Ð\90ко Ð²Ð°Ñ\88аÑ\82а Ð±Ð°Ð·Ð° Ðµ Ð½Ð° Ð´Ñ\80Ñ\83г Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87, Ñ\82огаÑ\88 Ñ\82Ñ\83ка Ð²Ð½ÐµÑ\81еÑ\82е Ð³Ð¾ Ð¸Ð¼ÐµÑ\82о Ð½Ð° Ð´Ð¾Ð¼Ð°Ñ\9cиноÑ\82 Ð¸Ð»Ð¸ IP-адÑ\80еÑ\81аÑ\82а.\n\nÐ\90ко ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87ко (Ñ\81поделено) Ð²Ð´Ð¾Ð¼Ñ\83ваÑ\9aе, Ñ\82огаÑ\88 Ð²Ð°Ñ\88иоÑ\82 Ð²Ð´Ð¾Ð¼Ð¸Ñ\82ел Ñ\82Ñ\80еба Ð´Ð° Ð³Ð¾ Ð½Ð°Ð²ÐµÐ´Ðµ Ñ\82оÑ\87ноÑ\82о Ð¸Ð¼Ðµ Ð½Ð° Ð´Ð¾Ð¼Ð°Ñ\9cиноÑ\82 Ð²Ð¾ Ð½ÐµÐ³Ð¾Ð²Ð°Ñ\82а Ð´Ð¾ÐºÑ\83менÑ\82аÑ\86иÑ\98а.\n\nÐ\90ко Ð²Ð¾Ñ\81поÑ\81Ñ\82авÑ\83ваÑ\82е Ð½Ð° Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87 Ð½Ð° Windows Ð¸ ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е MySQL, Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82а â\80\9elocalhostâ\80\9c Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð½Ðµ Ñ\84Ñ\83нкÑ\86иониÑ\80а Ð·Ð° Ð¾Ð¿Ñ\81лÑ\83жÑ\83ваÑ\87коÑ\82о Ð¸Ð¼Ðµ. Ð\92о Ñ\82оÑ\98 Ñ\81лÑ\83Ñ\87аÑ\98, Ð¾Ð±Ð¸Ð´ÐµÑ\82е Ñ\81е Ñ\81о Ð²Ð½ÐµÑ\81Ñ\83ваÑ\9aе Ð½Ð° â\80\9e127.0.0.1â\80\9c ÐºÐ°ÐºÐ¾ Ð¼ÐµÑ\81на IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
        "config-db-host-oracle": "TNS на базата:",
        "config-db-host-oracle-help": "Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm месно име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификувај го викиво",
        "config-db-install-account": "Корисничка смета за воспоставка",
        "config-db-username": "Корисничко име за базата:",
        "config-db-password": "Лозинка за базата:",
-       "config-db-password-empty": "Внесете лозинка за новиот корисник на базата: $1.\nИако може да се создаваат корисници без лозинка, тоа не е безбедно.",
-       "config-db-username-empty": "Мора да внесете вредност за „{{int:config-db-username}}“.",
        "config-db-install-username": "Внесете корисничко име што ќе се користи за поврзување со базата во текот на воспоставката. Ова не е корисничкото име од сметката на МедијаВики, туку посебно корисничко име за вашата база на податоци.",
        "config-db-install-password": "Внесете клозинка што ќе се користи за поврзување со базата во текот на воспоставката. Ова не е лозинката од сметката на МедијаВики, туку посебна лозинка за вашата база на податоци.",
        "config-db-install-help": "Внесете го корисничкото име и лозинката што ќе се користи за поврзување со базата на податоци во текот на воспоставката.",
index fbc2bbc..70addf9 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Ianbu"
+                       "Ianbu",
+                       "唐吉訶德的侍從"
                ]
        },
        "config-desc": "MediaWiki的安裝程式",
@@ -9,8 +10,8 @@
        "config-information": "資訊",
        "config-localsettings-upgrade": "有一个<code>LocalSettings.php</code>檔案佇咧。若欲升級,請佇下面的框內底拍<code>$wgUpgradeKey</code>的內容。你會使佇<code>LocalSettings.php</code>內底揣著彼項。",
        "config-localsettings-cli-upgrade": "有一个<code>LocalSettings.php</code>檔案。若欲升級,請直接執行<code>update.php</code>。",
-       "config-localsettings-key": "升級的密碼:",
-       "config-localsettings-badkey": "你提供的密碼無正確。",
+       "config-localsettings-key": "Seng-kip--ê bi̍t-bé:",
+       "config-localsettings-badkey": "Lí phah--ê bi̍t-bé bô chèng-khak.",
        "config-upgrade-key-missing": "已經有一个MediaWiki矣。若要升級,請共下面這逝加去<code>LocalSettings.php</code>的下跤:\n\n$1",
        "config-localsettings-incomplete": "這馬的<code>LocalSettings.php</code>可能無齊全,因為無設變量$1。請佇<code>LocalSettings.php</code>設彼个變量,並且揤「{{int:Config-continue}}」。",
        "config-localsettings-connection-error": "An error was encountered when connecting to the database 用<code>LocalSettings.php</code>的設定去連接資料庫的時陣有一个錯誤發生,請改遮的設定了,才閣試。\n\n$1",
@@ -28,7 +29,7 @@
        "config-page-dbconnect": "連接去資料庫",
        "config-page-upgrade": "共這馬的安裝升級",
        "config-page-dbsettings": "資料庫的設定",
-       "config-page-name": "名稱",
+       "config-page-name": "Miâ",
        "config-page-options": "選項",
        "config-page-install": "安裝",
        "config-page-complete": "完成",
@@ -46,8 +47,6 @@
        "config-env-good": "環境檢查已完成。\n你會當安裝 MediaWiki。",
        "config-env-bad": "環境檢查已完成。\n你無法度安裝 MediaWiki。",
        "config-env-php": "PHP $1 已經安裝。",
-       "config-env-php-toolow": "已經安裝 PHP $1。\n但是 MediaWiki 愛 PHP $2 抑較新的版本。",
-       "config-unicode-using-utf8": "用 Brion Vibber 的 utf8_normalize.so 做 Unicode 正規化。",
        "config-unicode-using-intl": "用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
        "config-unicode-pure-php-warning": "<strong>警告:</strong> 無法度用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,所以退回用純 PHP 實作的正規化程式,這種方式處理速度較慢。\n\n若你的網站瀏覽人數誠濟,你應該先看 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
        "config-unicode-update-warning": "<strong>警告</strong>:這馬安裝的 Unicode 正規化包裝程式用舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若你需要用 Unicode,你應該先進行 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升級]。",
index 741c198..3058130 100644 (file)
@@ -51,7 +51,7 @@
        "config-unicode-using-intl": "Aúsa [http://pecl.php.net/intl l'estensione PECL intl] pe' ne fà 'a normalizzazione Unicode.",
        "config-unicode-pure-php-warning": "<strong>Attenziò:</strong> L' [http://pecl.php.net/intl estensione intl PECL] nun è a disposizione pe' gestire 'a normalizzazione Unicode, accussì se ausasse n'imprementazziona llenta 'n puro PHP.\nSi state a gestire nu pizzo ad alto traffico, avisseve a lieggere cocche considerazione ncopp' 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaziona Unicode].",
        "config-unicode-update-warning": "<strong>Attenziò:</strong> 'A verziona installata 'e normalizzazione Unicode aùsa 'a verziona viecchia d' 'o [http://site.icu-project.org/ pruggetto ICU].\nV'avite 'a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations agghiurnà] si state a penzà ncopp' 'o fatto d'ausà Unicode.",
-       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmatto suppurtato|'E furmatte suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
+       "config-no-db": "Nun se può truvà nu driver adatto p' 'o database! È necessario installare nu driver p' 'o PHP.\n{{PLURAL:$2|'O furmato suppurtato|'E furmate suppurtate}} 'e database ccà annanze: $1.\n\nSi cumpilate PHP autonomamente, riaccunciatevello attivando nu client database, p'esempio ausannoo <code>./configure --with-mysqli</code>.\nQuanno fosse installato PHP pe' bbìa 'e nu pacchetto Debian o Ubuntu, allora avite 'a installà pure 'o pacchetto <code>php5-mysql</code>.",
        "config-outdated-sqlite": "'''Attenziò''': tenite 'o SQLite $1 pe' tramente ca ce vulesse 'a verziona $2, SQLite nun sarrà a disposizione.",
        "config-no-fts3": "'''Attenziò''': SQLite è cumpilato senza 'o [//sqlite.org/fts3.html modulo FTS3], 'e funziune 'e p'ascià dinto nun sarranno a disposizione ncopp'a stu backend.",
        "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è apicciata.\nS'avesse 'a stutà pe' cuntinuà c' 'a installazione.</strong>\nVide [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] pe' n'avé n'aiuto ncopp'a comme s'avess'a ffà.",
@@ -60,7 +60,7 @@
        "config-magic-quotes-sybase": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
        "config-mbstring": "<strong>Fatale: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivo!'</strong>\nSt'opzione scassa 'e date 'e na manera scanusciuta.\nNun se può installà o ausà MediaWiki si nun se stuta st'opzione.",
        "config-safe-mode": "<strong>Warning:</strong> PHP's [http://www.php.net/features.safe-mode safe mode] è attivato.\nPutesse fà cocche probblema, specialmente si state ausanno 'a funziona 'e carrecà file e 'o supporto d' ' e funziune <code>math</code>.",
-       "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml.",
+       "config-xml-bad": "'O modulo XML 'e PHP è mancante.\nA MediaWiki servessero 'e funziune prisente dint'a stu modulo e nun faticarrà c' 'a configurazione 'e mò.\nSi se sta eseguenno Mandrake, installare 'o pacco php-xml RPM.",
        "config-pcre-old": "<strong>Errore fatale:</strong> s'addimanna PCRE  $1 o succiessivo.\n'O file vuosto binario PHP è acucchiato c' 'o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Cchiù nfurmaziune].",
        "config-pcre-no-utf8": "<strong>Fatale:</strong> 'E module PCRE d' 'o PHP pare ca se so' compilate senza PCRE_UTF8 supporto.\nA MediaWiki serve nu supporto UTF-8 pe' putè funziunà apposto.",
        "config-memory-raised": "'O valore 'e PHP <code>memory_limit</code> è $1, aumentato a $2.",
        "config-db-install-account": "Cunto utente pe' l'installazione",
        "config-db-username": "Nomme utente p' 'o database:",
        "config-db-password": "Password d' 'o database:",
-       "config-db-password-empty": "Avita nzertà na password pe' l'utente nuovo d' 'o database: $1.\nPure si fosse possibbele 'e crià ll'utente senza password chisto nun fosse sicuro.",
-       "config-db-username-empty": "Avita miette nu valore p' 'o \"{{int:config-db-username}}\"",
        "config-db-install-username": "Nzertate 'o nomme utente ca s'aussarrà pe' ve cullegà ô database pe' tramente ca se fà l'installazione. Chistu nun è 'o nomme utente d' 'o cunto MediaWiki; ma chillo p' 'o database vuosto.",
        "config-db-install-password": "Nzertate 'a password che s'ausarrà pe' ve putè cullegà ô database pe' tramente ca se fa l'installazione.\nChista nun è 'a password d' 'o cunto 'e MediaWiki; ma chilla p' 'o database vuosto.",
        "config-db-install-help": "Miette 'o nomme utente e 'a password ca sarrà usata quanno ve cullegate ô database pe' tramente ca facite 'a installazione.",
        "config-db-account-lock": "Aúsa 'o stisso nomme utente e password pe' l'operazione normale.",
-       "config-db-wiki-account": "Account utente p' 'o funzionamento nurmale",
+       "config-db-wiki-account": "Cunto utente p' 'o funzionamento nurmale",
        "config-db-wiki-help": "Miette 'o nomme utente e 'a password ca sarrà ausata pe' se cullegà ô database pe' l'operazione normale d' 'o wiki. Si 'o cunto nun esiste, e 'o cunto e installazione téne diritte sufficiente, sarrà criato ch' 'e diritte minime necessarie pe' putè faticà ncopp' 'o wiki.",
        "config-db-prefix": "Prefisso d' 'a tavolozza d' 'o database:",
        "config-db-prefix-help": "Si tenite abbesuogno 'e spartì nu database nfra cchiù wiki, o nfra MediaWiki e n'at'apprecazione web, putite scegliere d'azzeccà nu prefisso a tutte 'e nomme 'e tabbella, pe putè evità cunflitte.\nNun ausate abbacante.\n\n'O solito, stu campo se lassasse abbacante.",
        "config-regenerate": "Rigennera LocalSettings.php →",
        "config-show-table-status": "'A query <code>SHOW TABLE STATUS</code> è fallita!",
        "config-unknown-collation": "<strong>Attenziò:</strong> 'O database sta ausanno reule 'e cunfronto nun ricanusciute.",
-       "config-db-web-account": "Account d' 'o database pe' ne fà acciesso web",
+       "config-db-web-account": "Cunto d' 'o database pe' ne fà acciesso web",
        "config-db-web-help": "Scigliete 'o nomme utente e passwrod ca 'o web server ausarrà pe' se cullegà 'o server database, pe' tramente ca se fa' operazione normale d' 'o wiki.",
        "config-db-web-account-same": "Aúsa 'o stisso cunto comme quanno s'è fatta 'a installazione",
        "config-db-web-create": "Crìa 'o cunto si nun esiste ancora",
        "config-admin-error-password": "Errore interno quanno se steva a mpustà na password pe ll'ammenistratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "Avite miso n'indirizzo e-mail invalido.",
        "config-subscribe": "Mettiteve dint' 'a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list 'e ll'annunciazione 'e verziune d' 'o software rilassate].",
+       "config-almost-done": "Avite quase fernuto!\nMo' putite zumpà 'a parta r' 'a configurazione e sempricemente installà 'a wiki.",
        "config-optional-continue": "Spiate cchiù dimanne.",
        "config-optional-skip": "Me so' scucciato già, installa surtanto 'o wiki.",
        "config-profile": "Profilo 'e deritte utente:",
        "config-profile-private": "Wiki privato",
        "config-license": "Copyright e licienza:",
        "config-license-none": "Nisciuno piede 'e paggena p' 'a licienza",
+       "config-license-cc-by-sa": "Creative Commons Attribuziona-SparteEguale",
+       "config-license-cc-by": "Creative Commons Attribuziona",
+       "config-license-cc-by-nc-sa": "Creative Commons Attribuziona-NunCommerciale-SparteEguale",
+       "config-license-cc-0": "Creative Commons Zero (Pubbreco dumminio)",
+       "config-license-gfdl": "GNU Free Documentation License 1.3 o verziune aroppo",
        "config-license-pd": "Pubbreco duminio",
+       "config-license-cc-choose": "Sciglite na licienza Creative Commons ca vulite",
+       "config-email-settings": "Mpustaziune email",
+       "config-enable-email": "Premmette mmasciate elettroniche r'asciuta",
+       "config-email-user": "Premmette email utente-utente",
+       "config-email-user-help": "Cunzente a ll'utente 'e mannà uno a ll'ato le mail si 'e teneno appicciate dint' 'e preferenze lloro.",
+       "config-email-usertalk": "Premmette notifiche p' 'e paggene 'e chiacchiera utente",
+       "config-email-usertalk-help": "Premmette ll'utente 'e ricevere notifiche p' 'e cagnamiente r' 'e paggene 'e chiacchiera lloro, si l'avessero appicciato dint' 'e preferenze lloro.",
+       "config-email-watchlist": "Appiccia notifica 'osservati speciale",
+       "config-email-auth": "Appiccia autenticaziona via email",
+       "config-email-sender": "Innerizo email e ritorno:",
+       "config-upload-settings": "Immaggene e upload",
+       "config-upload-enable": "Premmette 'a carreca 'e file",
+       "config-upload-deleted": "Cartella p' 'e file scancellate:",
+       "config-upload-deleted-help": "Sciglite na cartella addò s'astipassero 'e file scancellate.\nIdealmente a sta cartella nun s'avess'a trasì r' 'a web",
        "config-logo": "URL d\"o logo:",
-       "config-cc-again": "Selezziona 'e novo...",
+       "config-instantcommons": "Appiccia Instant Commons",
+       "config-cc-error": "'O selettore 'e licienze Creative Commons nun mmustaje nisciuno risultato.\nNzertate manualmente 'o nomme d' 'a licienza.",
+       "config-cc-again": "Selezziona n'ata vota...",
+       "config-cc-not-chosen": "Sciglite quale licienza Creative Commons desiderate e cliccate ncopp' 'a \"prucede\".",
+       "config-advanced-settings": "Configurazione avanzata",
+       "config-cache-options": "Mpustaziune p' 'a cache d'oggette:",
+       "config-memcached-servers": "Server memcached:",
+       "config-memcached-help": "Elenco 'e ll'indirizzi IP p' 'e putè ausà p' 'o Memcached.\nS'avess'a specificà uno pe' riga e scrivere 'a porta 'e trasuta. P'esempio:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+       "config-memcache-needservers": "È stato scigliuto 'o tipo 'e caching Memcached, ma nun è stato mpustato 'a nisciunu server.",
+       "config-memcache-badip": "È stat'azzeccato nu indirizzo IP nun valido p' 'o Memcached: $1.",
+       "config-memcache-noport": "Nun avite specificato na porta p'ausà 'o server Memcached: $1. Si nun sapite 'a porta, chill' 'e default è 11211.",
+       "config-memcache-badport": "'E nummere 'e porta 'e Memcached avesser'a stà nfra $1 e $2.",
+       "config-extensions": "Estenziune",
+       "config-skins": "Skin",
        "config-install-step-done": "fatto",
+       "config-install-step-failed": "fallito",
+       "config-install-extensions": "Ncludenno 'estenziune",
+       "config-install-database": "Configurazione database",
+       "config-install-schema": "Crianno schema",
+       "config-install-pg-schema-not-exist": "'O schema PostgreSQL nun esiste.",
+       "config-install-pg-commit": "Mannann' 'e cagnamiente",
+       "config-install-pg-plpgsql": "Cuntrollo p' 'o lenguaggio PL/pgSQL",
+       "config-install-user": "Crianno utente 'e database",
+       "config-install-stats": "Inizializzaziona d' 'e statistiche",
+       "config-install-keys": "Generaziona d' 'e chiave segrete",
        "config-install-updates": "Mpiccià ll'agghiurnamiente ca nun fossero necessarie",
-       "config-help": "ajùto"
+       "config-install-sysop": "Crianno nu cunto utente ammenistratore",
+       "config-install-subscribe-fail": "Nun se pò sottoscrivere mediawiki-announce: $1",
+       "config-install-mainpage": "Crianno 'a paggena prencepale ch' 'e cuntenute predefinite",
+       "config-install-extension-tables": "Crianno tabelle pe' estenziune appicciate",
+       "config-install-mainpage-failed": "Nun se pò nzertà 'a paggena prencepale: $1",
+       "config-download-localsettings": "Scarreca <code>LocalSettings.php</code>",
+       "config-help": "ajùto",
+       "config-help-tooltip": "cliccà pe' 'o spannere",
+       "config-nofile": "'O file \"$1\" nun se trova. Forse è stato scancellato?",
+       "mainpagetext": "<strong>MediaWiki è stato nstallato.</strong>"
 }
diff --git a/includes/installer/i18n/olo.json b/includes/installer/i18n/olo.json
new file mode 100644 (file)
index 0000000..9f8743c
--- /dev/null
@@ -0,0 +1,59 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mashoi7"
+               ]
+       },
+       "config-your-language": "Sinun kieli:",
+       "config-wiki-language": "Wikin kieli:",
+       "config-back": "← Järilleh",
+       "config-continue": "Jatka →",
+       "config-page-language": "Kieli",
+       "config-page-welcome": "Tule terveh MediaWikih!",
+       "config-page-dbconnect": "Yhtistä tiedokandah",
+       "config-page-dbsettings": "Tiedokanduazetukset",
+       "config-page-name": "Nimi",
+       "config-page-options": "Azetukset",
+       "config-page-install": "Azenda",
+       "config-page-complete": "Valmis!",
+       "config-page-readme": "Luve minut",
+       "config-page-copying": "Kopiruitah",
+       "config-page-upgradedoc": "Päivitetäh",
+       "config-page-existingwiki": "Olemasolii wiki",
+       "config-restart": "Muga, käynnistä uvvelleh",
+       "config-env-php": "PHP $1 on azendettu.",
+       "config-env-hhvm": "HHVM $1 on azendettu.",
+       "config-db-name": "Tiedokannan nimi:",
+       "config-db-username": "Tiedokannan käyttäinimi:",
+       "config-db-password": "Tiedokannan peittosana:",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "MySQL-azetukset",
+       "config-header-postgres": "PostgreSQL-azetukset",
+       "config-header-sqlite": "SQLite-azetukset",
+       "config-header-oracle": "Oracle-azetukset",
+       "config-header-mssql": "Microsoft SQL Server azetukset",
+       "config-mysql-innodb": "InnoDB",
+       "config-mysql-myisam": "MyISAM",
+       "config-mysql-utf8": "UTF-8",
+       "config-site-name": "Wikin nimi:",
+       "config-site-name-blank": "Kirjuta sivun nimi.",
+       "config-project-namespace": "Projektan nimitila:",
+       "config-ns-generic": "Projektu",
+       "config-ns-other-default": "MinunWiki",
+       "config-admin-name": "Sinun käyttäitunnus:",
+       "config-admin-password": "Peittosana:",
+       "config-admin-password-confirm": "Peittosana myös:",
+       "config-admin-name-blank": "Kirjuta administruattoran käyttäinimi.",
+       "config-admin-password-blank": "Kirjuta administruattorutilin peittosana.",
+       "config-admin-password-mismatch": "Sinun kirjutetut kaksi peittosanua ei oldu yhtenjyttymät.",
+       "config-admin-email": "Sähköpoštuadressu:",
+       "config-optional-continue": "Kyzy minuspäi ližiä kyzymyksii.",
+       "config-optional-skip": "Olen jo terstavunnuh, vaiku azenda wiki.",
+       "config-email-settings": "Sähköpoštuazetukset",
+       "config-logo": "Logon URL:",
+       "config-skins": "Ketut",
+       "config-install-step-done": "ruattu",
+       "config-install-user-alreadyexists": "Käyttäi \"$1\" on jo olemas",
+       "config-help": "abu",
+       "config-nofile": "Failua \"$1\" ei löydynyh. Ongo se otettu iäre?"
+}
index e7d2388..6a1d4a4 100644 (file)
@@ -18,7 +18,8 @@
                        "Alan ffm",
                        "Matik7",
                        "Pio387",
-                       "Darellur"
+                       "Darellur",
+                       "The Polish"
                ]
        },
        "config-desc": "Instalator MediaWiki",
        "config-db-install-account": "Konto użytkownika dla instalatora",
        "config-db-username": "Nazwa użytkownika bazy danych:",
        "config-db-password": "Hasło bazy danych:",
-       "config-db-password-empty": "Wprowadź hasło dla nowego użytkownika bazy danych: $1.\nChoć istnieje możliwość tworzenia użytkowników bez hasła, nie jest to bezpieczne.",
-       "config-db-username-empty": "Należy podać wartość parametru \"{{int:config-db-username}}\".",
        "config-db-install-username": "Wprowadź nazwę użytkownika, który będzie używany do łączenia się z bazą danych podczas procesu instalacji.\nNie jest to nazwa konta MediaWiki, a użytkownika bazy danych.",
        "config-db-install-password": "Wprowadź hasło, które będzie wykorzystywane do łączenia się z bazą danych w procesie instalacji.\nTo nie jest hasło konta MediaWiki, lecz hasło do bazy danych.",
        "config-db-install-help": "Podaj nazwę użytkownika i jego hasło, które zostaną użyte do połączenia z bazą danych w czasie procesu instalacji.",
        "config-install-keys": "Generowanie tajnych kluczy",
        "config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
        "config-install-updates": "Zapobieganie uruchamianiu niepotrzebnych aktualizacji",
+       "config-install-updates-failed": "<strong>Błąd:</strong> Wstawianie kluczy aktualizacji d0 tabeli nie powiodło się z powodu następującego błędu: $1",
        "config-install-sysop": "Tworzenie konta administratora",
        "config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce” – $1",
        "config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
index 795bacd..8f2a0fd 100644 (file)
        "config-db-name": "د توکبنسټ نوم:",
        "config-db-username": "د توکبنسټ کارن-نوم:",
        "config-db-password": "د توکبنسټ پټنوم:",
+       "config-charset-mysql5-binary": "مای اس کيو ال 4.1/5.0 دوييز",
+       "config-charset-mysql5": "مای اس کيو ال 4.1/5.0 يو ټي اف-8",
+       "config-db-port": "د توکبنسټ ور:",
+       "config-db-schema": "د مېډياويکي طرحه:",
        "config-type-mssql": "مايکروسافټ SQL پالنگر",
        "config-header-mysql": "د MySQL امستنې",
        "config-header-postgres": "د PostgreSQL امستنې",
        "config-header-mssql": "د مايکروسافټ SQL پالنگر امستنې",
        "config-sqlite-readonly": "د <code>$1</code> دوتنه د ليکلو وړ نه ده.",
        "config-sqlite-cant-create-db": "د توکبنسټ دوتنه <code>$1</code> جوړه نه شوه.",
+       "config-mysql-binary": "دوه ايز",
        "config-mysql-utf8": "UTF-8",
        "config-site-name": "د ويکي نوم:",
        "config-site-name-blank": "د وېبځي نوم وليکۍ.",
        "config-project-namespace": "د پروژې نوم-تشيال:",
        "config-ns-generic": "پروژه",
+       "config-ns-site-name": "ويکي نوم ته ورته: $1",
        "config-ns-other": "بل (ځانگړی کړئ)",
        "config-ns-other-default": "زما ويکي",
        "config-admin-box": "د پازوال گڼون",
index 4d9fa38..27dddd3 100644 (file)
@@ -16,7 +16,8 @@
                        "Marcos dias de oliveira",
                        "Fasouzafreitas",
                        "TheEduGobi",
-                       "Dianakc"
+                       "Dianakc",
+                       "Walesson"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
@@ -65,7 +66,7 @@
        "config-unicode-using-intl": "Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "<strong>Aviso</strong>: A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode, abortando e passando para a lenta implementação de PHP puro.\nSe o seu site tem um alto volume de tráfego, informe-se sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalização Unicode].",
        "config-unicode-update-warning": "<strong>Aviso:</strong> A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [//www.site.icu-project.org/projeto ICU].\nVocê deve [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizar] se você tem quaisquer preocupações com o uso do Unicode.",
-       "config-no-db": "Não foi possível encontrar um driver de banco de dados adequado! É necessário instalar um driver de banco de dados para o PHP.\nSão suportados os seguintes tipos de bancos de dados: $1.\n\nSe você mesmo tiver compilado o PHP, reconfigure-o com um cliente de banco de dados ativado usando, por exemplo <code>./configure --with-mysqli</code>.\nSe você instalou o PHP a partir de um pacote do Debian ou do Ubuntu, então será também necessário instalar, por exemplo, o pacote <code>php5-mysql</code>.",
+       "config-no-db": "Não foi possível localizar um driver de banco de dados apropriado! Você precisa instalar um driver de banco de dados para PHP. O banco de dados seguinte {{PLURAL: $ 2 | | tipo é tipos são}} suportado: $ 1. Se você compilou o PHP mesmo, reconfigurá-lo com um cliente de banco de dados ativada, por exemplo, usando <code> ./ configure --with-mysqli </ code>. Se você instalou o PHP a partir de um pacote Debian ou Ubuntu, então você também precisa instalar, por exemplo, o <code> php5-mysql </ code> pacote.",
        "config-outdated-sqlite": "<strong>Aviso:</strong> você tem o SQLite versão $1, que é menor do que a versão mínima necessária $2. O SQLite não estará disponível.",
        "config-no-fts3": "<strong>Aviso</strong> O SQLite foi compilado sem o [//sqlite.org/fts3.html módulo FTS3], as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
        "config-register-globals-error": "<strong>Erro: a opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.\nA mesma deve ser desativada para continuar a instalação.</strong>\nVeja [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] para obter ajuda com isto.",
@@ -74,7 +75,7 @@
        "config-magic-quotes-sybase": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativada!</strong>\nEsta opção corrompe os dados de entrada de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-mbstring": "<strong>Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativada!</strong>\nEsta opção causa erros e pode corromper os dados de forma imprevisível.\nVocê não pode instalar ou utilizar o MediaWiki a menos que esta opção seja desativada.",
        "config-safe-mode": "<strong>Aviso:</strong> O [http://www.php.net/features.safe-mode safe mode] do PHP está ativado.\nEste modo pode causar problemas, especialmente no upload de arquivos e no suporte a <code>math</code>.",
-       "config-xml-bad": "O módulo XML do PHP está ausente.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nSe está utilizando o Mandrake, instale o pacote php-xml.",
+       "config-xml-bad": "Módulo XML do PHP está faltando. MediaWiki requer funções deste módulo e não vai funcionar nesta configuração. Pode ser necessário instalar o pacote RPM php-xml.",
        "config-pcre-old": "<strong>Erro fatal:</strong> É necessário o PCRE $1 ou versão posterior.\nO binário do seu PHP foi vinculado com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].",
        "config-pcre-no-utf8": "<strong>Erro fatal:</strong> O módulo PCRE do PHP parece ser compilado sem suporte a PCRE_UTF8.\nO MediaWiki requer suporte a UTF-8 para funcionar corretamente.",
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-db-install-account": "Conta de usuário para instalação",
        "config-db-username": "Nome de usuário do banco de dados:",
        "config-db-password": "Senha do banco de dados:",
-       "config-db-password-empty": "Por favor digite uma senha para o novo usuário do banco de dados: $1. Embora seja possível criar usuários sem senha, isto não é seguro.",
-       "config-db-username-empty": "É necessário entrar um valor para \"{{int:config-db-username}}\".",
        "config-db-install-username": "Digite o nome de usuário que será utilizado para conectar com o banco de dados durante o processo de instalação.\nEste não é a conta de usuário do MediaWiki; este é o nome de usuário para sua base de dados.",
        "config-db-install-password": "Digite a senha que será utilizada para conectar com o banco de dados durante o processo de instalação.\nEsta não é a senha de usuário da conta do MediaWiki; esta será a senha para seu banco de dados.",
        "config-db-install-help": "Digite o nome de usuário e a senha que serão utilizados para conectar com o banco de dados durante o processo de instalação.",
index b63905b..bbf2798 100644 (file)
@@ -60,7 +60,6 @@
        "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
        "config-env-php": "O PHP $1 está instalado.",
        "config-env-hhvm": "HHVM $1 está instalado.",
-       "config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.",
        "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
        "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
        "config-unicode-update-warning": "'''Aviso''': A versão instalada do wrapper de normalização Unicode usa uma versão mais antiga da biblioteca do [http://site.icu-project.org/ projeto ICU].\nDevia [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations atualizá-la] se tem quaisquer preocupações sobre o uso do Unicode.",
        "config-magic-quotes-sybase": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] está ativa!'''\nEsta opção causa corrupção dos dados de entrada, de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
        "config-mbstring": "'''Erro fatal: A opção [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] está ativa!'''\nEsta opção causa erros e pode corromper os dados de uma forma imprevisível.\nNão pode instalar ou usar o MediaWiki a menos que esta opção seja desativada.",
        "config-safe-mode": "'''Aviso:''' O [http://www.php.net/features.safe-mode safe mode] do PHP está ativo.\nEste modo pode causar problemas, especialmente no upload de ficheiros e no suporte a <code>math</code>.",
-       "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nSe está a executar o Mandrake, instale o pacote php-xml.",
+       "config-xml-bad": "Falta o módulo XML do PHP.\nO MediaWiki necessita de funções deste módulo e não funcionará com esta configuração.\nPode precisar de instalar o pacote RPM chamado php-xml.",
        "config-pcre-old": "<strong>Erro fatal:</strong> É necessário o PCRE $1 ou versão posterior.\nO <i>link</i> do seu binário PHP foi feito com o PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mais informações].",
        "config-pcre-no-utf8": "'''Erro fatal''': O módulo PCRE do PHP parece ter sido compilado sem suporte PCRE_UTF8.\nO MediaWiki necessita do suporte UTF-8 para funcionar corretamente.",
        "config-memory-raised": "A configuração <code>memory_limit</code> do PHP era $1; foi aumentada para $2.",
        "config-memory-bad": "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.\nIsto é provavelmente demasiado baixo.\nA instalação poderá falhar!",
        "config-ctype": "'''Erro fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
+       "config-iconv": "<strong>Erro fatal:</strong> O PHP deve ser compilado com suporte à [http://www.php.net/manual/en/iconv.installation.php extensão iconv].",
        "config-json": "<strong>Erro fatal:</strong> O PHP foi compilado sem suporte de JSON.\nTem de instalar a extensão JSON do PHP (incluída no PHP 5.2 ou posterior) ou a extensão [http://pecl.php.net/package/jsonc PECL jsonc] antes de instalar o MediaWiki.\n* A extensão JSON do PHP está incluída nas distribuções 5 e 6 do Red Hat Enterprise Linux (CentOS), mas tem de estar ativa nos ficheiros <code>/etc/php.ini</code> ou <code>/etc/php.d/json.ini</code>.\n* Algumas distribuições do Linux posteriores a maio de 2013 omitem a extensão JSON do PHP e substituem-na pela extensão PECL chamando-lhe <code>php5-json</code> ou <code>php-pecl-jsonc</code>.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] instalada",
        "config-apc": "[http://www.php.net/apc APC] instalada",
        "config-db-install-account": "Conta do utilizador para a instalação",
        "config-db-username": "Nome do utilizador da base de dados:",
        "config-db-password": "Palavra-chave do utilizador da base de dados:",
-       "config-db-password-empty": "Introduza a palavra-chave do novo utilizador da base de dados: $1.\nEmbora seja possível criar utilizadores sem palavra-chave, fazê-lo não é seguro.",
-       "config-db-username-empty": "Tem de introduzir um valor para \"{{int:config-db-username}}\"",
        "config-db-install-username": "Introduza o nome de utilizador que será usado para aceder à base de dados durante o processo de instalação. Este utilizador não é o do MediaWiki; é o utilizador da base de dados.",
        "config-db-install-password": "Introduza a palavra-chave do utilizador que será usado para aceder à base de dados durante o processo de instalação. Esta palavra-chave não é a do utilizador do MediaWiki; é a palavra-chave do utilizador da base de dados.",
        "config-db-install-help": "Introduza o nome de utilizador e a palavra-chave que serão usados para aceder à base de dados durante o processo de instalação.",
index fba5165..bb42d88 100644 (file)
@@ -82,7 +82,7 @@
        "config-memory-bad": "Parameters:\n* $1 is the configured <code>memory_limit</code>.",
        "config-ctype": "Message if support for [http://www.php.net/manual/en/ctype.installation.php Ctype] is missing from PHP.\n{{Related|Config-fatal}}",
        "config-iconv": "Message if support for [http://www.php.net/manual/en/iconv.installation.php iconv] is missing from PHP.\n{{Related|Config-fatal}}",
-       "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[bugzilla:47431]]).\n{{Related|Config-fatal}}",
+       "config-json": "Message if support for [[wikipedia:JSON|JSON]] is missing from PHP.\n* \"[[wikipedia:Red Hat Enterprise Linux|Red Hat Enterprise Linux]]\" (RHEL) and \"[[wikipedia:CentOS|CentOS]]\" refer to two almost-identical Linux distributions. \"5 and 6\" refers to version 5 or 6 of either distribution. Because RHEL 7 likely will not include the PHP extension, do not translate as \"5 or newer\".\n* \"The [http://www.php.net/json PHP extension]\" is the JSON extension included with PHP 5.2 and newer.\n* \"The [http://pecl.php.net/package/jsonc PECL extension]\" is based on the PHP extension, though excludes code some distributions have found unacceptable (see [[phab:T49431]]).\n{{Related|Config-fatal}}",
        "config-xcache": "Message indicates if this program is available",
        "config-apc": "Message indicates if this program is available",
        "config-wincache": "Message indicates if this program is available",
        "config-db-name-oracle": "Field label in the MediaWiki installer where an Oracle database schema can be specified.",
        "config-db-account-oracle-warn": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
        "config-db-install-account": "Legend in the MediaWiki installer for the section where database username and password have to be provided.",
-       "config-db-username": "Used as label.\n\nAlso used in {{msg-mw|Config-db-username-empty}}.",
+       "config-db-username": "Used as label.",
        "config-db-password": "Field label in the MediaWiki installer where database password has to be provided.",
-       "config-db-password-empty": "Used as error message. Parameters:\n* $1 - database username",
-       "config-db-username-empty": "Used as error message. Shown when the database username is not entered by the user.\n\nRefers to {{msg-mw|Config-db-username}}.",
        "config-db-install-username": "Help box text in the MediaWiki installer clarifying the requirement for database username.",
        "config-db-install-password": "Help box text in the MediaWiki installer clarifying the requirement for database password.",
        "config-db-install-help": "Help text in MediaWiki installer.",
index fcade71..e0c78b7 100644 (file)
@@ -5,7 +5,8 @@
                        "Minisarm",
                        "Stelistcristi",
                        "XXN",
-                       "Tuxilina"
+                       "Tuxilina",
+                       "Strainu"
                ]
        },
        "config-desc": "Programul de instalare pentru MediaWiki",
        "config-help-restart": "Doriți să ștergeți toate datele salvate introduse și să reporniți procesul de instalare?",
        "config-restart": "Da, repornește.",
        "config-env-good": "Verificarea mediului a fost efectuată cu succes.\nPuteți instala MediaWiki.",
+       "config-env-bad": "Verificarea mediului a fost efectuată.\nNu puteți instala MediaWiki.",
        "config-env-php": "PHP $1 este instalat.",
        "config-env-hhvm": "HHVM $1 este instalat.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] este instalat",
        "config-apc": "[http://www.php.net/apc APC] este instalat",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] este instalat",
+       "config-diff3-bad": "GNU diff3 nu a fost găsit.",
+       "config-no-uri": "<strong>Eroare:</strong> Nu pot determina URI-ul curent.\nInstalare întreruptă.",
        "config-db-type": "Tipul bazei de date:",
        "config-db-host": "Gazdă bază de date:",
        "config-db-host-oracle": "Baza de date TNS:",
        "config-db-wiki-settings": "Identificați acest wiki",
        "config-db-name": "Numele bazei de date:",
        "config-db-name-oracle": "Schema bazei de date:",
+       "config-db-install-account": "Contul de utilizator pentru instalare",
        "config-db-username": "Nume de utilizator pentru baza de date:",
        "config-db-password": "Parola bazei de date:",
+       "config-db-install-username": "Introduceți numele de utilizator care va fi utilizat pentru conexiunea la baza de date în timpul procesului de instalare.\nNu este numele de utilizator al contului MediaWiki; este numele de utilizator al bazei dumneavoastră de date.",
+       "config-db-install-password": "Introduceți parola care va fi utilizată pentru conexiunea la baza de date în timpul procesului de instalare.\nNu este parola contului MediaWiki; este parola bazei dumneavoastră de date.",
+       "config-db-install-help": "Introduceți numele de utilizator și parola care vor fi utilizate pentru conexiunea la baza de date în timpul procesului de instalare.",
+       "config-db-account-lock": "Folosește același nume de utilizator și parolă în timpul funcționării normale",
+       "config-db-wiki-account": "Contul de utilizator pentru funcționarea normală",
        "config-db-prefix": "Prefixul tabelelor din baza de date:",
        "config-db-charset": "Setul de caractere al bazei de date",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 binar",
@@ -65,6 +75,8 @@
        "config-sqlite-dir": "Director de date SQLite:",
        "config-oracle-def-ts": "Spațiu de stocare („tablespace”) implicit:",
        "config-oracle-temp-ts": "Spațiu de stocare („tablespace”) temporar:",
+       "config-type-mysql": "MySQL (sau compatibil)",
+       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Setările MySQL",
        "config-header-postgres": "Setări PostgreSQL",
        "config-header-sqlite": "Setări SQLite",
index 14233aa..ab257dd 100644 (file)
@@ -1,5 +1,12 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "HalanTul"
+               ]
+       },
+       "config-desc": "MediaWiki инсталлятора",
+       "config-title": "MediaWiki $1 туруоруу",
+       "config-information": "Бу туһунан",
        "mainpagetext": "'''«MediaWiki» сөпкө туруорулунна.'''",
        "mainpagedocfooter": "Биики программатын туһунан [//meta.wikimedia.org/wiki/Help:Contents справочникка] көрүөххүн сөп.\n\n== Саҕаланыыта ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Конфигурация уларытыытын параметрдара]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki релизтарын почтовай испииһэгэ]"
 }
index f3bb6dd..7f0ad67 100644 (file)
@@ -1,5 +1,43 @@
 {
-       "@metadata": [],
+       "@metadata": {
+               "authors": [
+                       "Ammartivari"
+               ]
+       },
+       "config-desc": "Instaluesi për MediaWiki",
+       "config-title": "Instalimi MediaWiki $1",
+       "config-information": "Të dhëna",
+       "config-your-language": "Gjuha juaj:",
+       "config-your-language-help": "Zgjidhni një gjuhë për ta përdorur gjatë procesit të instalimit.",
+       "config-wiki-language": "Gjuha wiki:",
+       "config-wiki-language-help": "Zgjidhni gjuhën në të cilën wiki do të jetë kryesisht e shkruar.",
+       "config-back": "← Prapa",
+       "config-continue": "Para →",
+       "config-page-language": "Gjuha",
+       "config-page-welcome": "Mirë se vini në MediaWiki!",
+       "config-page-dbconnect": "Lidhuni me bazën e të dhënave",
+       "config-page-dbsettings": "Cilësimet e bazës së të dhënave",
+       "config-page-name": "Emri",
+       "config-page-options": "Opcionet",
+       "config-page-install": "Instalo",
+       "config-page-complete": "Përfundoi!",
+       "config-page-restart": "Rinisni instalimin",
+       "config-page-copying": "Duke kopjuar",
+       "config-restart": "Po, rinisni",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] u instalua",
+       "config-apc": "[http://www.php.net/apc APC] u instalua",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] u instalua",
+       "config-diff3-bad": "GNU diff3 nuk u gjet.",
+       "config-db-wiki-settings": "Identifikoni këtë wiki",
+       "config-db-name": "Emri i bazës së të dhënave:",
+       "config-admin-box": "Llogari administruesi",
+       "config-admin-name-blank": "Shkruani nofkën e një administruesi.",
+       "config-admin-password-blank": "Shkruani një fjalëkalim për llogarinë e administruesit.",
+       "config-admin-email": "Email adresa:",
+       "config-license-pd": "Domeni publik",
+       "config-logo": "URL-ja i logos:",
+       "config-install-tables": "Duke krijuar tabela",
+       "config-help": "ndihmë",
        "mainpagetext": "'''MediaWiki software u instalua me sukses.'''",
        "mainpagedocfooter": "Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].\n\n== Sa për fillim==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Parazgjedhjet e MediaWiki-t]\n* [//www.mediawiki.org/wiki/Help:FAQ Pyetjet e shpeshta rreth MediaWiki-t]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]"
 }
index c63ac00..95dad25 100644 (file)
@@ -4,7 +4,8 @@
                        "Rancher",
                        "Михајло Анђелковић",
                        "Milicevic01",
-                       "Aktron"
+                       "Aktron",
+                       "Сербијана"
                ]
        },
        "config-desc": "Инсталација за Медијавики",
@@ -37,6 +38,7 @@
        "config-help-restart": "Желите ли да обришете све сачуване податке које сте унели и поново покренете инсталацију?",
        "config-restart": "Да, покрени поново",
        "config-env-php": "PHP $1 је инсталиран.",
+       "config-env-hhvm": "HHVM $1 је инсталиран.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] је инсталиран",
        "config-apc": "[http://www.php.net/apc APC] је инсталиран",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] је инсталиран",
@@ -44,7 +46,6 @@
        "config-db-host": "Хост базе података",
        "config-db-name": "Назив базе података:",
        "config-db-password": "Лозинка за базу података:",
-       "config-db-password-empty": "Унесите лозинку за новог корисника базе података: ($1).\n\nМада је могуће отворити налоге без лозинки, то се не препоручује.",
        "config-type-mysql": "MySQL (или компактибилан)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
index 87ac7a5..68b2695 100644 (file)
@@ -54,7 +54,6 @@
        "config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.",
        "config-env-php": "PHP $1 är installerat.",
        "config-env-hhvm": "HHVM $1 är installerat.",
-       "config-unicode-using-utf8": "Använder Brion Vibbers utf8_normalize.so för Unicode-normalisering.",
        "config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
        "config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-unicode-update-warning": "'''Varning:''' Den installerade versionen av Unicode-normaliserings \"wrappern\" använder en äldre version av [http://site.icu-project.org/ ICU projektets] bibliotek.\nDu bör [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations uppgradera] om är intresserad av att använda Unicode.",
@@ -67,7 +66,7 @@
        "config-magic-quotes-sybase": "'''Kritiskt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] är aktiv!'''\nDetta alternativ korrumperar inmatad data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.",
        "config-mbstring": "'''Kritiskt: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] är aktiv!'''\nDetta alternativ orsakar fel och kan korrumpera data oförutsägbart.\nDu kan inte installera eller använda MediaWiki om detta alternativ är aktiverat.",
        "config-safe-mode": "''' Varning:''' PHP:s [http://www.php.net/features.safe-mode felsäkra läge] är aktivt.\nDet kan orsaka problem, särskilt om du använder filuppladdningar och <code>math</code>-stöd.",
-       "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nOm du kör Mandrake, installera php-xml-paketet.",
+       "config-xml-bad": "PHP:s XML-modul saknas.\nMediaWiki kräver funktioner i denna modul och kommer inte att fungera i den här konfigurationen.\nDu kan behöva installera RPM-paketet för php-xml.",
        "config-pcre-old": "'''Kritiskt:''' PCRE $1 eller senare krävs.\nDin PHP-binär är länkad till PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Mer information].",
        "config-pcre-no-utf8": "'''Kritiskt:''' PHP:s PCRE-modul verkar vara kompilerat utan PCRE_UTF8-stöd.\nMediaWiki kräver stöd för UTF-8 för att fungera korrekt.",
        "config-memory-raised": "PHPs <code>memory_limit</code> är $1, ökad till $2.",
        "config-db-install-account": "Användarkonto för installation",
        "config-db-username": "Databas-användarnamn:",
        "config-db-password": "Databas-lösenord:",
-       "config-db-password-empty": "Ange ett lösenord för den nya databasanvändaren: $1.\nÄven om det kan vara möjligt att skapa användare utan lösenord är det inte säkert.",
-       "config-db-username-empty": "Du måste ange ett värde för \"{{int:config-db-username}}\"",
        "config-db-install-username": "Ange det användarnamn som ska används för att ansluta till databasen under installationsprocessen.\nDetta är inte användarnamnet för ditt MediaWiki-konto; detta är användarnamnet för din databas.",
        "config-db-install-password": "Ange det lösenord som ska användas för att ansluta till databasen under installationsprocessen.\nDetta är inte lösenordet för ditt MediaWiki-konto; detta är lösenordet för din databas.",
        "config-db-install-help": "Ange användarnamnet och lösenordet som kommer att användas för att ansluta till databasen under installationsprocessen.",
diff --git a/includes/installer/i18n/tokipona.json b/includes/installer/i18n/tokipona.json
new file mode 100644 (file)
index 0000000..348380f
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Robin0van0der0vliet"
+               ]
+       },
+       "config-page-language": "toki"
+}
index 16f2e54..c4a230c 100644 (file)
@@ -2,9 +2,14 @@
        "@metadata": {
                "authors": [
                        "KhayR",
-                       "Seb35"
+                       "Seb35",
+                       "Ильнар"
                ]
        },
+       "config-back": "← Артка",
+       "config-continue": "Киләсе →",
+       "config-page-language": "Тел",
+       "config-page-welcome": "MediaWiki проектына рәхим итегез!",
        "mainpagetext": "«MediaWiki» уңышлы куелды.",
        "mainpagedocfooter": "Бу вики турында мәгълүматны [//meta.wikimedia.org/wiki/Help:Contents биредә] табып була.\n\n== Кайбер файдалы ресурслар ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Көйләнмәләр исемлеге (инг.)];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki турында еш бирелгән сораулар һәм җаваплар (инг.)];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'ның яңа версияләре турында хәбәрләр яздырып алу];\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]."
 }
index 73e1764..b4a03cb 100644 (file)
        "config-db-install-account": "Обліковий запис користувача для встановлення",
        "config-db-username": "Ім'я користувача бази даних:",
        "config-db-password": "Пароль бази даних:",
-       "config-db-password-empty": "Будь ласка, введіть пароль для нового користувача бази даних: $1.\nХоча можна створювати користувачів без паролів, це не є безпечним.",
-       "config-db-username-empty": "Ви повинні ввести значення для \"{{int:config-db username}}\"",
        "config-db-install-username": "Введіть ім'я користувача, яке буде використано для підключення до бази даних під час процесу встановлення.\nЦе не ім'я користувача облікового запису MediaWiki; це ім'я користувача для Вашої бази даних.",
        "config-db-install-password": "Введіть пароль, який буде використано для підключення до бази даних під час процесу встановлення.\nЦе не пароль облікового запису MediaWiki; це пароль для Вашої бази даних.",
        "config-db-install-help": "Введіть ім'я користувача і пароль, які буде використано для підключення до бази даних у процесі встановлення.",
        "config-ns-site-name": "Те ж саме, що й назва вікі: $1",
        "config-ns-other": "Інше (вкажіть)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у \"'''просторі імен проекту'''\".\nУсі назви сторінок у цьому просторі імен починаються з певного префікса, який Ви можете вказати тут.\nТрадиційно цей префікс виводиться з назви вікі, але не може містити знаки пунктуація, як-то \"#\" чи \":\".",
-       "config-ns-invalid": "Вказаний простір імен \"<nowiki>$1</nowiki>\" не припустимий.\nВкажіть інший простір імен проекту.",
-       "config-ns-conflict": "Вказаний простір імен \"<nowiki>$1</nowiki>\" конфліктує зі стандартним простором імен MediaWiki.\nВкажіть інший простір імен проекту.",
+       "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у «'''просторі назв проекту'''».\nУсі назви сторінок у цьому просторі назв починаються з певного префікса, який Ви можете вказати тут.\nЗазвичай цей префікс виводиться з назви вікі, але не може містити знаки пунктуації, як-то «#» чи «:».",
+       "config-ns-invalid": "Вказаний простір назв «<nowiki>$1</nowiki>» не припустимий.\nВкажіть інший простір назв проекту.",
+       "config-ns-conflict": "Вказаний простір назв «<nowiki>$1</nowiki>» конфліктує зі стандартним простором назв MediaWiki.\nВкажіть інший простір назв проекту.",
        "config-admin-box": "Обліковий запис адміністратора",
        "config-admin-name": "Ваше ім'я користувача:",
        "config-admin-password": "Пароль:",
index bf3636b..3923f7e 100644 (file)
@@ -62,7 +62,7 @@
        "config-magic-quotes-sybase": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] đang hoạt động!</strong>\nTùy chọn này sẽ làm hỏng dữ liệu nhập một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
        "config-mbstring": "<strong>Lỗi chí tử: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] được kích hoạt!</strong>\nTùy chọn này gây lỗi và có thể làm hỏng dữ liệu một cách không thể đoán trước.\nBạn không thể cài đặt hoặc sử dụng MediaWiki trừ phi tùy chọn này bị vô hiệu.",
        "config-safe-mode": "<strong>Cảnh báo:</strong> [http://www.php.net/features.safe-mode Chế độ an toàn] của PHP đang được kích hoạt.\nNó có thể gây vấn đề, nhất là nếu dùng các chức năng tải lên tập tin và <code>math</code>.",
-       "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nNếu bạn đang chạy Mandrake, hãy cài đặt gói php-xml.",
+       "config-xml-bad": "Mô đun XML của PHP đang bị thiếu.\nMediaWiki yêu cầu các hàm trong mô đun này và sẽ không hoạt động trong cấu hình này.\nBạn có thể cần cài đặt gói RPM php-xml.",
        "config-pcre-old": "<strong>Lỗi chí tử:</strong> PCRE $1 trở lên được yêu cầu phải có.\nBản nhị phân PHP của bạn dang được liên kết với PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Thông tin bổ sung].",
        "config-pcre-no-utf8": "<strong>Lỗi chí tử:</strong> Mô đun PCRE của PHP dường như được biên dịch mà không có hỗ trợ PCRE_UTF8.\nMediaWiki yêu cầu phải có hỗ trợ UTF-8 để hoạt động chính xác.",
        "config-memory-raised": "<code>memory_limit</code> của PHP là $1, tăng lên $2.",
        "config-db-install-account": "Tài khoản người dùng để cài đặt",
        "config-db-username": "Tên người dùng cơ sở dữ liệu:",
        "config-db-password": "Mật khẩu cơ sở dữ liệu:",
-       "config-db-password-empty": "Xin nhập vào một mật khẩu cho người dùng cơ sở dữ liệu mới: $1. Tuy bạn có thể tạo một tài khoản người dùng mà không cần mật khẩu, nhưng khi đó sẽ không đảm bảo tính bảo mật cho bạn.",
-       "config-db-username-empty": "Bạn phải nhập một giá trị cho “{{int:config-db-username}}”",
        "config-db-install-username": "Nhập tên người dùng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là tên người dùng của tài khoản MediaWiki; đây là tên người dùng cho cơ sở dữ liệu của bạn.",
        "config-db-install-password": "Nhập mật khẩu để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nĐây không phải là mật khẩu của tài khoản MediaWiki; đây là mật khẩu cho cơ sở dữ liệu của bạn.",
        "config-db-install-help": "Nhập tên người dùng và mật khẩu sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.",
index 92b2d3b..e877280 100644 (file)
        "config-using-server": "באניצן סארווער־נאמען \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "באניצן סארווער־אדרעס \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "דאטנבאזע טיפ:",
+       "config-db-host": "דאטנבאזע־סארווער:",
        "config-db-host-oracle": "דאטנבאזע־TNS:",
        "config-db-wiki-settings": "אידענטיפיצירן די דאזיקע וויקי",
        "config-db-name": "דאטנבאזע נאָמען:",
+       "config-db-install-account": "באניצער־קאנטע פאר אינסטאלאציע",
        "config-db-username": "דאטנבאזע באניצער־נאָמען:",
        "config-db-password": "דאטנבאזע־פאסווארט:",
+       "config-invalid-db-type": "אומגילטיגער דאטנבאזע־טיפ",
+       "config-missing-db-name": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host}}\".",
+       "config-missing-db-server-oracle": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host-oracle}}\".",
        "config-project-namespace": "פראיעקט נאָמענטייל:",
        "config-ns-generic": "פראיעקט",
        "config-admin-name": "אײַער באַניצער־נאָמען:",
index 4713f45..414b6e9 100644 (file)
        "config-db-install-account": "用于安装的用户帐号",
        "config-db-username": "数据库用户名:",
        "config-db-password": "数据库密码:",
-       "config-db-password-empty": "请为新数据库用户$1输入密码。尽管您可以创建不使用密码的用户,但这样做并不安全。",
-       "config-db-username-empty": "您必须输入用于“{{int:config-db-username}}”的值。",
        "config-db-install-username": "请输入在安装过程中用于连接数据库的用户名。请勿输入MediaWiki帐号的用户名,请输入您数据库的用户名。",
        "config-db-install-password": "请输入在安装过程中用于连接数据库的密码。请勿输入MediaWiki帐号的密码,请输入您数据库的密码。",
        "config-db-install-help": "请输入在安装过程中用于连接数据库的用户名和密码。",
index d1db005..d6f88a7 100644 (file)
@@ -93,7 +93,7 @@
        "config-no-uri": "<strong>錯誤:</strong>無法辨識目前的 URI 位置。\n安裝已中止。",
        "config-no-cli-uri": "<strong>警告:</strong>:未指定 <code>--scriptpath</code> 指令參數,使用預設值:<code>$1</code>。",
        "config-using-server": "使用伺服器名稱 \"<nowiki>$1</nowiki>\"。",
-       "config-using-uri": "使用伺服器 URL 位置 \"<nowiki>$1$2</nowiki>\"。",
+       "config-using-uri": "使用伺服器 URL  \"<nowiki>$1$2</nowiki>\"。",
        "config-uploads-not-safe": "<strong>警告:</strong>您預設的上傳目錄 <code>$1</code> 有可被任意執行 Script 的漏洞。\n雖然 MediaWiki 會對所有上傳的檔案進行安全檢查,但我們仍強烈建議您在開啟上傳功能前了解如何 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 關閉此安全漏洞]。",
        "config-no-cli-uploads-check": "<strong>警告:</strong>透過指令介面安不會檢查您預設的上傳目錄 (<code>$1</code>) 是否有可任意執行 Script 的安全性漏洞。",
        "config-brokenlibxml": "您的系統使用了可能造成 MediaWiki 或其他網頁應用程式資料損毀問題的 PHP 與 limbxml2 版本。\n請升級 libxml2 2.7.3 或更新的版本 ([https://bugs.php.net/bug.php?id=45996 PHP 問題報告])。\n安裝已中止。",
        "config-db-install-account": "安裝程式使用的使用者帳號",
        "config-db-username": "資料庫使用者名稱:",
        "config-db-password": "資料庫密碼:",
-       "config-db-password-empty": "請輸入新增資料庫使用者 $1 的密碼。\n雖然您可以不設定任何密碼,但這樣做並不安全。",
-       "config-db-username-empty": "您必須輸入 \"{{int:config-db-username}}\" 欄位的內容。",
        "config-db-install-username": "請輸入在安裝過程中用來連線資料庫的使用者名稱。\n請注意,這不是 MediaWiki 帳號的使用者名稱,這是您資料庫的使用者名稱。",
        "config-db-install-password": "請輸入在安裝過程中用來連線資料庫的密碼。\n請注意,這不是 MediaWiki 帳號的密碼,這是您資料庫的密碼。",
        "config-db-install-help": "請輸入在安裝過程中用來連線資料庫的使用者名稱及密碼。",
        "config-mysql-charset": "資料庫字元集:",
        "config-mysql-binary": "二進制",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "在 <strong>二進制模式</strong> 下,MediaWiki 將 UTF-8 的文字儲存在二進位型態的欄位。\n這個模式比 MySQL 的 UTF-8 模式還要更有效,並且可以讓您使用完整的 Unicode 字元集。\n\n在 <storng>UTF-8 模式</strong> 下,MySQL 可以知道您的資料使用何種編碼儲存,您可以正常的取得與轉換內容,但此個模式只支援到 Unicode 中的  [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 基本多文種平面] 字元。",
+       "config-mysql-charset-help": "在 <strong>二進制模式</strong> 下,MediaWiki 將 UTF-8 的文字儲存在二進位型態的欄位。\n這個模式比 MySQL 的 UTF-8 模式還要更有效,並且可以讓您使用完整的 Unicode 字元集。\n\n在 <strong>UTF-8 模式</strong> 下,MySQL 可以知道您的資料使用何種編碼儲存,您可以正常的取得與轉換內容,但此個模式只支援到 Unicode 中的  [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 基本多文種平面] 字元。",
        "config-mssql-auth": "身份驗證類型:",
        "config-mssql-install-auth": "請選擇安裝程序中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
        "config-mssql-web-auth": "請選擇一般操作中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
        "config-upload-help": "檔案上傳功能會讓您的伺服器暴露在潛藏的安全性風險之下。\n要取得更多相關的資訊,請參考 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security 安全性章節]。\n\n要開啟檔案上傳需要將 MediaWiki 根目錄底下的 <code>images</code> 目錄開啟網頁伺服器的寫入權,\n然後再啟動選項。",
        "config-upload-deleted": "已刪除檔案的目錄:",
        "config-upload-deleted-help": "請選擇用來存放已刪除檔案的目錄。\n理想情況下,此目錄不可被網頁直接存取。",
-       "config-logo": "標誌 URL 位置:",
+       "config-logo": "Logo 網址:",
        "config-logo-help": "在 MediaWiki 的預設介面,側欄選單上方有一塊 135x160 像素用來放置標誌的區域。\n請上傳合適大小的圖片並在此輸入 URL 網址。\n\n您可以透過 <code>$wgStylePath</code> 或者 <code>$wgScriptPath</code> 來表示您的圖片與這些路徑的相對位置。\n\n如果您不想使用標誌,可略過此欄位。",
        "config-instantcommons": "開啟即時共享資源",
        "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即時共享資源] 是允許 Wiki 使用來自 [//commons.wikimedia.org/ Wikimedia Commons] 網站上的圖片、聲音以及其他媒體的一項功能。\n若要開啟此功能,您的 MediaWiki 必須能夠連線網際網路。\n更多有關此功能的訊息,包含如何存除了 Wikimedia Commons 之外其他網站的說明,請參考 \n[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 操作手冊]。",
        "config-memcached-servers": "Memcached 伺服器:",
        "config-memcached-help": "請列出 Memcached 伺服器的 IP 位址。\n每一行只指定一個位置並且要註明使用的埠號,例如:\n 127.0.0.1:11211\n 192.168.1.25:1234",
        "config-memcache-needservers": "您的快取類型選擇使用 Memcached,但並未設定任何的伺服器。",
-       "config-memcache-badip": "您輸入了一筆無效的 Memcached IP 位:$1。",
+       "config-memcache-badip": "您輸入了一筆無效的 Memcached IP 位:$1。",
        "config-memcache-noport": "您沒有輸入 Memcached 伺服器的埠號:$1。\n如果您不曉得埠號為多少,預設為 11211。",
        "config-memcache-badport": "Memcached 埠號應介於 $1 到 $2 之間。",
        "config-extensions": "擴充套件",
index 913aea0..69a3def 100644 (file)
@@ -94,7 +94,7 @@ abstract class JobQueue {
         *                  This might be useful for improving concurrency for job acquisition.
         *   - claimTTL   : If supported, the queue will recycle jobs that have been popped
         *                  but not acknowledged as completed after this many seconds. Recycling
-        *                  of jobs simple means re-inserting them into the queue. Jobs can be
+        *                  of jobs simply means re-inserting them into the queue. Jobs can be
         *                  attempted up to three times before being discarded.
         *
         * Queue classes should throw an exception if they do not support the options given.
index e021d99..29c8068 100644 (file)
@@ -365,6 +365,7 @@ LUA;
                        throw new UnexpectedValueException( "Job of type '{$job->getType()}' has no UUID." );
                }
 
+               $uuid = $job->metadata['uuid'];
                $conn = $this->getConnection();
                try {
                        static $script =
@@ -381,13 +382,13 @@ LUA;
                                        $this->getQueueKey( 'z-claimed' ), # KEYS[1]
                                        $this->getQueueKey( 'h-attempts' ), # KEYS[2]
                                        $this->getQueueKey( 'h-data' ), # KEYS[3]
-                                       $job->metadata['uuid'] # ARGV[1]
+                                       $uuid # ARGV[1]
                                ),
                                3 # number of first argument(s) that are keys
                        );
 
                        if ( !$res ) {
-                               wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+                               wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job $uuid." );
 
                                return false;
                        }
@@ -446,6 +447,7 @@ LUA;
                        // Get the last time this root job was enqueued
                        $timestamp = $conn->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
                } catch ( RedisException $e ) {
+                       $timestamp = false;
                        $this->throwRedisException( $conn, $e );
                }
 
@@ -611,6 +613,8 @@ LUA;
                        $job = Job::factory( $item['type'], $title, $item['params'] );
                        $job->metadata['uuid'] = $item['uuid'];
                        $job->metadata['timestamp'] = $item['timestamp'];
+                       // Add in attempt count for debugging at showJobs.php
+                       $job->metadata['attempts'] = $conn->hGet( $this->getQueueKey( 'h-attempts' ), $uid );
 
                        return $job;
                } catch ( RedisException $e ) {
index 3982134..1304362 100644 (file)
@@ -109,10 +109,8 @@ class JobRunner implements LoggerAwareInterface {
                        return $response;
                }
 
-               $profiler = Profiler::instance();
-
                // Catch huge single updates that lead to slave lag
-               $trxProfiler = $profiler->getTransactionProfiler();
+               $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setLogger( LoggerFactory::getInstance( 'DBPerformance' ) );
                $trxProfiler->setExpectations( $wgTrxProfilerLimits['JobRunner'], __METHOD__ );
 
@@ -176,7 +174,6 @@ class JobRunner implements LoggerAwareInterface {
                                $this->debugCallback( $msg );
 
                                // Run the job...
-                               $psection = $profiler->scopedProfileIn( __METHOD__ . '-' . $jType );
                                $jobStartTime = microtime( true );
                                try {
                                        ++$jobsPopped;
@@ -197,15 +194,22 @@ class JobRunner implements LoggerAwareInterface {
                                wfGetLBFactory()->commitAll();
                                $timeMs = intval( ( microtime( true ) - $jobStartTime ) * 1000 );
                                $timeMsTotal += $timeMs;
-                               $profiler->scopedProfileOut( $psection );
 
+                               // Record how long jobs wait before getting popped
                                $readyTs = $job->getReadyTimestamp();
                                if ( $readyTs ) {
-                                       // Record time to run for the job type
                                        $pickupDelay = $popTime - $readyTs;
-                                       $stats->timing( 'jobqueue.pickup_delay.all', $pickupDelay );
-                                       $stats->timing( "jobqueue.pickup_delay.$jType", $pickupDelay );
+                                       $stats->timing( 'jobqueue.pickup_delay.all', 1000 * $pickupDelay );
+                                       $stats->timing( "jobqueue.pickup_delay.$jType", 1000 * $pickupDelay );
+                               }
+                               // Record root job age for jobs being run
+                               $root = $job->getRootJobParams();
+                               if ( $root['rootJobTimestamp'] ) {
+                                       $age = $popTime - wfTimestamp( TS_UNIX, $root['rootJobTimestamp'] );
+                                       $stats->timing( "jobqueue.pickup_root_age.$jType", 1000 * $age );
                                }
+                               // Track the execution time for jobs
+                               $stats->timing( "jobqueue.run.$jType", $timeMs );
 
                                // Mark the job as done on success or when the job cannot be retried
                                if ( $status !== false || !$job->allowRetries() ) {
@@ -263,7 +267,10 @@ class JobRunner implements LoggerAwareInterface {
                                }
 
                                // Bail if near-OOM instead of in a job
-                               $this->assertMemoryOK();
+                               if ( !$this->checkMemoryOK() ) {
+                                       $response['reached'] = 'memory-limit';
+                                       break;
+                               }
                        }
                } while ( $job ); // stop when there are no jobs
 
@@ -392,9 +399,9 @@ class JobRunner implements LoggerAwareInterface {
        /**
         * Make sure that this script is not too close to the memory usage limit.
         * It is better to die in between jobs than OOM right in the middle of one.
-        * @throws MWException
+        * @return bool
         */
-       private function assertMemoryOK() {
+       private function checkMemoryOK() {
                static $maxBytes = null;
                if ( $maxBytes === null ) {
                        $m = array();
@@ -408,8 +415,14 @@ class JobRunner implements LoggerAwareInterface {
                }
                $usedBytes = memory_get_usage();
                if ( $maxBytes && $usedBytes >= 0.95 * $maxBytes ) {
-                       throw new MWException( "Detected excessive memory usage ($usedBytes/$maxBytes)." );
+                       $msg = "Detected excessive memory usage ($usedBytes/$maxBytes).";
+                       $this->debugCallback( $msg );
+                       $this->logger->error( $msg );
+
+                       return false;
                }
+
+               return true;
        }
 
        /**
index 68e96fc..beeb067 100644 (file)
@@ -38,7 +38,7 @@ class EmaillingJob extends Job {
                        $this->params['from'],
                        $this->params['subj'],
                        $this->params['body'],
-                       $this->params['replyto']
+                       array( 'replyTo' => $this->params['replyto'] )
                );
 
                return $status->isOK();
index ca597ca..c7ee9b6 100644 (file)
@@ -59,6 +59,8 @@ final class EnqueueJob extends Job {
         * @return EnqueueJob
         */
        public static function newFromJobsByWiki( array $jobsByWiki ) {
+               $deduplicate = true;
+
                $jobMapsByWiki = array();
                foreach ( $jobsByWiki as $wiki => $jobs ) {
                        $jobMapsByWiki[$wiki] = array();
@@ -68,10 +70,19 @@ final class EnqueueJob extends Job {
                                } else {
                                        throw new InvalidArgumentException( "Jobs must be of type JobSpecification." );
                                }
+                               $deduplicate = $deduplicate && $job->ignoreDuplicates();
                        }
                }
 
-               return new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) );
+               $eJob = new self(
+                       Title::makeTitle( NS_SPECIAL, 'Badtitle/' . __CLASS__ ),
+                       array( 'jobsByWiki' => $jobMapsByWiki )
+               );
+               // If *all* jobs to be pushed are to be de-duplicated (a common case), then
+               // de-duplicate this whole job itself to avoid build up in high traffic cases
+               $eJob->removeDuplicates = $deduplicate;
+
+               return $eJob;
        }
 
        public function run() {
index e86d914..d6fa26b 100644 (file)
@@ -75,11 +75,13 @@ class RecentChangesUpdateJob extends Job {
                $lockKey = wfWikiID() . ':recentchanges-prune';
 
                $dbw = wfGetDB( DB_MASTER );
-               if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
+               if ( !$dbw->lockIsFree( $lockKey, __METHOD__ )
+                       || !$dbw->lock( $lockKey, __METHOD__, 1 )
+               ) {
                        return; // already in progress
                }
-               $batchSize = 100; // Avoid slave lag
 
+               $batchSize = 100; // avoid slave lag
                $cutoff = $dbw->timestamp( time() - $wgRCMaxAge );
                do {
                        $rcIds = $dbw->selectFieldValues( 'recentchanges',
index a58fa8b..f558c48 100644 (file)
@@ -50,16 +50,16 @@ class ThumbnailRenderJob extends Job {
                                        return false;
                                }
                        } elseif ( $wgUploadThumbnailRenderMethod === 'http' ) {
-                               $status = $this->hitThumbUrl( $file, $transformParams );
+                               $thumbUrl = '';
+                               $status = $this->hitThumbUrl( $file, $transformParams, $thumbUrl );
 
                                wfDebug( __METHOD__ . ": received status {$status}\n" );
 
-                               if ( $status === 200 || $status === 301 || $status === 302 ) {
+                               // 400 happens when requesting a size greater or equal than the original
+                               if ( $status === 200 || $status === 301 || $status === 302 || $status === 400 ) {
                                        return true;
                                } elseif ( $status ) {
-                                       // Note that this currently happens (500) when requesting sizes larger then or
-                                       // equal to the original, which is harmless.
-                                       $this->setLastError( __METHOD__ . ': incorrect HTTP status ' . $status );
+                                       $this->setLastError( __METHOD__ . ': incorrect HTTP status ' . $status . ' when hitting ' . $thumbUrl );
                                        return false;
                                } else {
                                        $this->setLastError( __METHOD__ . ': HTTP request failure' );
@@ -75,7 +75,7 @@ class ThumbnailRenderJob extends Job {
                }
        }
 
-       protected function hitThumbUrl( $file, $transformParams ) {
+       protected function hitThumbUrl( $file, $transformParams, &$thumbUrl ) {
                global $wgUploadThumbnailRenderHttpCustomHost, $wgUploadThumbnailRenderHttpCustomDomain;
 
                $thumbName = $file->thumbName( $transformParams );
index a15d51e..ade4810 100644 (file)
@@ -166,11 +166,11 @@ class UploadFromUrlJob extends Job {
        }
 
        /**
-        * Initialize the session data. Sets the intial result to queued.
+        * Initialize the session data. Sets the initial result to queued.
         */
        public function initializeSessionData() {
                $session =& self::getSessionData( $this->params['sessionKey'] );
-               $$session['result'] = 'Queued';
+               $session['result'] = 'Queued';
        }
 
        /**
index 0caf90b..100d2a4 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Liuggio\StatsdClient\Entity\StatsdData;
 use Liuggio\StatsdClient\Entity\StatsdDataInterface;
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 
@@ -39,11 +40,28 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
                $this->prefix = $prefix;
        }
 
+       /**
+        * Normalize a metric key for StatsD
+        *
+        * Replace occurences of '::' with dots and any other non-alphanumeric
+        * characters with underscores. Combine runs of dots or underscores.
+        * Then trim leading or trailing dots or underscores.
+        *
+        * @param string $key
+        * @since 1.26
+        */
+       private static function normalizeMetricKey( $key ) {
+               $key = preg_replace( '/[:.]+/', '.', $key );
+               $key = preg_replace( '/[^a-z0-9.]+/i', '_', $key );
+               $key = trim( $key, '_.' );
+               return str_replace( array( '._', '_.' ), '.', $key );
+       }
+
        public function produceStatsdData( $key, $value = 1, $metric = StatsdDataInterface::STATSD_METRIC_COUNT ) {
                $entity = $this->produceStatsdDataEntity();
                if ( $key !== null ) {
-                       $prefixedKey = ltrim( $this->prefix . '.' . $key, '.' );
-                       $entity->setKey( $prefixedKey );
+                       $key = self::normalizeMetricKey( "{$this->prefix}.{$key}" );
+                       $entity->setKey( $key );
                }
                if ( $value !== null ) {
                        $entity->setValue( $value );
@@ -58,6 +76,9 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
                return $entity;
        }
 
+       /**
+        * @return StatsdData[]
+        */
        public function getBuffer() {
                return $this->buffer;
        }
index f415c9b..2c90431 100644 (file)
@@ -399,16 +399,16 @@ class CSSMin {
 
                if ( $local === false ) {
                        // Assume that all paths are relative to $remote, and make them absolute
-                       return $remote . '/' . $url;
+                       $url = $remote . '/' . $url;
                } else {
                        // We drop the query part here and instead make the path relative to $remote
                        $url = "{$remote}/{$file}";
                        // Path to the actual file on the filesystem
                        $localFile = "{$local}/{$file}";
                        if ( file_exists( $localFile ) ) {
-                               // Add version parameter as a time-stamp in ISO 8601 format,
-                               // using Z for the timezone, meaning GMT
-                               $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $localFile ), -2 ) );
+                               // Add version parameter as the first five hex digits
+                               // of the MD5 hash of the file's contents.
+                               $url .= '?' . substr( md5_file( $localFile ), 0, 5 );
                                if ( $embed ) {
                                        $data = self::encodeImageAsDataURI( $localFile );
                                        if ( $data !== false ) {
@@ -418,8 +418,11 @@ class CSSMin {
                        }
                        // If any of these conditions failed (file missing, we don't want to embed it
                        // or it's not embeddable), return the URL (possibly with ?timestamp part)
-                       return $url;
                }
+               if ( function_exists( 'wfRemoveDotSegments' ) ) {
+                       $url = wfRemoveDotSegments( $url );
+               }
+               return $url;
        }
 
        /**
index 2022b22..e7a1099 100644 (file)
@@ -223,8 +223,8 @@ class HashRing {
         * @return array List of locations
         * @throws UnexpectedValueException
         */
-       public function getLiveLocations( $item ) {
-               return $this->getLiveRing()->getLocations( $item );
+       public function getLiveLocations( $item, $limit ) {
+               return $this->getLiveRing()->getLocations( $item, $limit );
        }
 
        /**
diff --git a/includes/libs/IPSet.php b/includes/libs/IPSet.php
deleted file mode 100644 (file)
index c1c841e..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Brandon Black <blblack@gmail.com>
- */
-
-/**
- * Matches IP addresses against a set of CIDR specifications
- *
- * Usage:
- *   // At startup, calculate the optimized data structure for the set:
- *   $ipset = new IPSet( $wgSquidServersNoPurge );
- *   // runtime check against cached set (returns bool):
- *   $allowme = $ipset->match( $ip );
- *
- * In rough benchmarking, this takes about 80% more time than
- * in_array() checks on a short (a couple hundred at most) array
- * of addresses.  It's fast either way at those levels, though,
- * and IPSet would scale better than in_array if the array were
- * much larger.
- *
- * For mixed-family CIDR sets, however, this code gives well over
- * 100x speedup vs iterating IP::isInRange() over an array
- * of CIDR specs.
- *
- * The basic implementation is two separate binary trees
- * (IPv4 and IPv6) as nested php arrays with keys named 0 and 1.
- * The values false and true are terminal match-fail and match-success,
- * otherwise the value is a deeper node in the tree.
- *
- * A simple depth-compression scheme is also implemented: whole-byte
- * tree compression at whole-byte boundaries only, where no branching
- * occurs during that whole byte of depth.  A compressed node has
- * keys 'comp' (the byte to compare) and 'next' (the next node to
- * recurse into if 'comp' matched successfully).
- *
- * For example, given these inputs:
- * 25.0.0.0/9
- * 25.192.0.0/10
- *
- * The v4 tree would look like:
- * root4 => array(
- *     'comp' => 25,
- *     'next' => array(
- *         0 => true,
- *         1 => array(
- *             0 => false,
- *             1 => true,
- *         ),
- *     ),
- * );
- *
- * (multi-byte compression nodes were attempted as well, but were
- * a net loss in my test scenarios due to additional match complexity)
- *
- * @since 1.24
- */
-class IPSet {
-       /** @var array $root4: the root of the IPv4 matching tree */
-       private $root4 = array( false, false );
-
-       /** @var array $root6: the root of the IPv6 matching tree */
-       private $root6 = array( false, false );
-
-       /**
-        * __construct() instantiate the object from an array of CIDR specs
-        *
-        * @param array $cfg array of IPv[46] CIDR specs as strings
-        * @return IPSet new IPSet object
-        *
-        * Invalid input network/mask values in $cfg will result in issuing
-        * E_WARNING and/or E_USER_WARNING and the bad values being ignored.
-        */
-       public function __construct( array $cfg ) {
-               foreach ( $cfg as $cidr ) {
-                       $this->addCidr( $cidr );
-               }
-
-               self::recOptimize( $this->root4 );
-               self::recCompress( $this->root4, 0, 24 );
-               self::recOptimize( $this->root6 );
-               self::recCompress( $this->root6, 0, 120 );
-       }
-
-       /**
-        * Add a single CIDR spec to the internal matching trees
-        *
-        * @param string $cidr string CIDR spec, IPv[46], optional /mask (def all-1's)
-        */
-       private function addCidr( $cidr ) {
-               // v4 or v6 check
-               if ( strpos( $cidr, ':' ) === false ) {
-                       $node =& $this->root4;
-                       $defMask = '32';
-               } else {
-                       $node =& $this->root6;
-                       $defMask = '128';
-               }
-
-               // Default to all-1's mask if no netmask in the input
-               if ( strpos( $cidr, '/' ) === false ) {
-                       $net = $cidr;
-                       $mask = $defMask;
-               } else {
-                       list( $net, $mask ) = explode( '/', $cidr, 2 );
-                       if ( !ctype_digit( $mask ) || intval( $mask ) > $defMask ) {
-                               trigger_error( "IPSet: Bad mask '$mask' from '$cidr', ignored", E_USER_WARNING );
-                               return;
-                       }
-               }
-               $mask = intval( $mask ); // explicit integer convert, checked above
-
-               // convert $net to an array of integer bytes, length 4 or 16:
-               $raw = inet_pton( $net );
-               if ( $raw === false ) {
-                       return; // inet_pton() sends an E_WARNING for us
-               }
-               $rawOrd = array_map( 'ord', str_split( $raw ) );
-
-               // special-case: zero mask overwrites the whole tree with a pair of terminal successes
-               if ( $mask == 0 ) {
-                       $node = array( true, true );
-                       return;
-               }
-
-               // iterate the bits of the address while walking the tree structure for inserts
-               $curBit = 0;
-               while ( 1 ) {
-                       $maskShift = 7 - ( $curBit & 7 );
-                       $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift];
-                       ++$curBit;
-                       if ( $node === true ) {
-                               // already added a larger supernet, no need to go deeper
-                               return;
-                       } elseif ( $curBit == $mask ) {
-                               // this may wipe out deeper subnets from earlier
-                               $node = true;
-                               return;
-                       } elseif ( $node === false ) {
-                               // create new subarray to go deeper
-                               $node = array( false, false );
-                       }
-               }
-       }
-
-       /**
-        * Match an IP address against the set
-        *
-        * @param string $ip string IPv[46] address
-        * @return bool true is match success, false is match failure
-        *
-        * If $ip is unparseable, inet_pton may issue an E_WARNING to that effect
-        */
-       public function match( $ip ) {
-               $raw = inet_pton( $ip );
-               if ( $raw === false ) {
-                       return false; // inet_pton() sends an E_WARNING for us
-               }
-
-               $rawOrd = array_map( 'ord', str_split( $raw ) );
-               if ( count( $rawOrd ) == 4 ) {
-                       $node =& $this->root4;
-               } else {
-                       $node =& $this->root6;
-               }
-
-               $curBit = 0;
-               while ( 1 ) {
-                       if ( isset( $node['comp'] ) ) {
-                               // compressed node, matches 1 whole byte on a byte boundary
-                               if ( $rawOrd[$curBit >> 3] != $node['comp'] ) {
-                                       return false;
-                               }
-                               $curBit += 8;
-                               $node =& $node['next'];
-                       } else {
-                               // uncompressed node, walk in the correct direction for the current bit-value
-                               $maskShift = 7 - ( $curBit & 7 );
-                               $node =& $node[( $rawOrd[$curBit >> 3] & ( 1 << $maskShift ) ) >> $maskShift];
-                               ++$curBit;
-                       }
-
-                       if ( $node === true || $node === false ) {
-                               return $node;
-                       }
-               }
-       }
-
-       /**
-        * Recursively merges adjacent nets into larger supernets
-        *
-        * @param array &$node Tree node to optimize, by-reference
-        *
-        *  e.g.: 8.0.0.0/8 + 9.0.0.0/8 -> 8.0.0.0/7
-        */
-       private static function recOptimize( &$node ) {
-               if ( $node[0] !== false && $node[0] !== true && self::recOptimize( $node[0] ) ) {
-                       $node[0] = true;
-               }
-               if ( $node[1] !== false && $node[1] !== true && self::recOptimize( $node[1] ) ) {
-                       $node[1] = true;
-               }
-               if ( $node[0] === true && $node[1] === true ) {
-                       return true;
-               }
-               return false;
-       }
-
-       /**
-        * Recursively compresses a tree
-        *
-        * @param array &$node Tree node to compress, by-reference
-        * @param integer $curBit current depth in the tree
-        * @param integer $maxCompStart maximum depth at which compression can start, family-specific
-        *
-        * This is a very simplistic compression scheme: if we go through a whole
-        * byte of address starting at a byte boundary with no real branching
-        * other than immediate false-vs-(node|true), compress that subtree down to a single
-        * byte-matching node.
-        * The $maxCompStart check elides recursing the final 7 levels of depth (family-dependent)
-        */
-       private static function recCompress( &$node, $curBit, $maxCompStart ) {
-               if ( !( $curBit & 7 ) ) { // byte boundary, check for depth-8 single path(s)
-                       $byte = 0;
-                       $cnode =& $node;
-                       $i = 8;
-                       while ( $i-- ) {
-                               if ( $cnode[0] === false ) {
-                                       $byte |= 1 << $i;
-                                       $cnode =& $cnode[1];
-                               } elseif ( $cnode[1] === false ) {
-                                       $cnode =& $cnode[0];
-                               } else {
-                                       // partial-byte branching, give up
-                                       break;
-                               }
-                       }
-                       if ( $i == -1 ) { // means we did not exit the while() via break
-                               $node = array(
-                                       'comp' => $byte,
-                                       'next' => &$cnode,
-                               );
-                               $curBit += 8;
-                               if ( $cnode !== true ) {
-                                       self::recCompress( $cnode, $curBit, $maxCompStart );
-                               }
-                               return;
-                       }
-               }
-
-               ++$curBit;
-               if ( $curBit <= $maxCompStart ) {
-                       if ( $node[0] !== false && $node[0] !== true ) {
-                               self::recCompress( $node[0], $curBit, $maxCompStart );
-                       }
-                       if ( $node[1] !== false && $node[1] !== true ) {
-                               self::recCompress( $node[1], $curBit, $maxCompStart );
-                       }
-               }
-       }
-}
index 2990782..141a515 100644 (file)
@@ -565,6 +565,14 @@ class JavaScriptMinifier {
                                $out .= ' ';
                                $lineLength++;
                        }
+                       if (
+                               $type === self::TYPE_LITERAL
+                               && ( $token === 'true' || $token === 'false' )
+                               && ( $state === self::EXPRESSION || $state === self::PROPERTY_EXPRESSION )
+                               && $last !== '.'
+                       ) {
+                               $token = ( $token === 'true' ) ? '!0' : '!1';
+                       }
 
                        $out .= $token;
                        $lineLength += $end - $pos; // += strlen( $token )
index f5d5229..6af3ed5 100644 (file)
@@ -72,7 +72,9 @@ class MultiHttpClient {
                                throw new Exception( "Cannot find CA bundle: " . $this->caBundlePath );
                        }
                }
-               static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy' );
+               static $opts = array(
+                       'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy'
+               );
                foreach ( $opts as $key ) {
                        if ( isset( $options[$key] ) ) {
                                $this->$key = $options[$key];
@@ -189,6 +191,7 @@ class MultiHttpClient {
 
                // @TODO: use a per-host rolling handle window (e.g. CURLMOPT_MAX_HOST_CONNECTIONS)
                $batches = array_chunk( $indexes, $this->maxConnsPerHost );
+               $infos = array();
 
                foreach ( $batches as $batch ) {
                        // Attach all cURL handles for this batch
@@ -201,6 +204,10 @@ class MultiHttpClient {
                                // Do any available work...
                                do {
                                        $mrc = curl_multi_exec( $chm, $active );
+                                       $info = curl_multi_info_read( $chm );
+                                       if ( $info !== false ) {
+                                               $infos[(int)$info['handle']] = $info;
+                                       }
                                } while ( $mrc == CURLM_CALL_MULTI_PERFORM );
                                // Wait (if possible) for available work...
                                if ( $active > 0 && $mrc == CURLM_OK ) {
@@ -216,10 +223,20 @@ class MultiHttpClient {
                foreach ( $reqs as $index => &$req ) {
                        $ch = $handles[$index];
                        curl_multi_remove_handle( $chm, $ch );
-                       if ( curl_errno( $ch ) !== 0 ) {
-                               $req['response']['error'] = "(curl error: " .
-                                       curl_errno( $ch ) . ") " . curl_error( $ch );
+
+                       if ( isset( $infos[(int)$ch] ) ) {
+                               $info = $infos[(int)$ch];
+                               $errno = $info['result'];
+                               if ( $errno !== 0 ) {
+                                       $req['response']['error'] = "(curl error: $errno)";
+                                       if ( function_exists( 'curl_strerror' ) ) {
+                                               $req['response']['error'] .= " " . curl_strerror( $errno );
+                                       }
+                               }
+                       } else {
+                               $req['response']['error'] = "(curl error: no status set)";
                        }
+
                        // For convenience with the list() operator
                        $req['response'][0] = $req['response']['code'];
                        $req['response'][1] = $req['response']['reason'];
index ec8c36a..1cb544b 100644 (file)
@@ -49,6 +49,13 @@ class ObjectFactory {
         * constructor/callable. This behavior can be suppressed by adding
         * closure_expansion => false to the specification.
         *
+        * The specification may also contain a 'calls' key that describes method
+        * calls to make on the newly created object before returning it. This
+        * pattern is often known as "setter injection". The value of this key is
+        * expected to be an associative array with method names as keys and
+        * argument lists as values. The argument list will be expanded (or not)
+        * in the same way as the 'args' key for the main object.
+        *
         * @param array $spec Object specification
         * @return object
         * @throws InvalidArgumentException when object specification does not
@@ -58,18 +65,11 @@ class ObjectFactory {
         */
        public static function getObjectFromSpec( $spec ) {
                $args = isset( $spec['args'] ) ? $spec['args'] : array();
+               $expandArgs = !isset( $spec['closure_expansion'] ) ||
+                       $spec['closure_expansion'] === true;
 
-               if ( !isset( $spec['closure_expansion'] ) ||
-                       $spec['closure_expansion'] === true
-               ) {
-                       $args = array_map( function ( $value ) {
-                               if ( is_object( $value ) && $value instanceof Closure ) {
-                                       // If an argument is a Closure, call it.
-                                       return $value();
-                               } else {
-                                       return $value;
-                               }
-                       }, $args );
+               if ( $expandArgs ) {
+                       $args = static::expandClosures( $args );
                }
 
                if ( isset( $spec['class'] ) ) {
@@ -88,6 +88,33 @@ class ObjectFactory {
                        );
                }
 
+               if ( isset( $spec['calls'] ) && is_array( $spec['calls'] ) ) {
+                       // Call additional methods on the newly created object
+                       foreach ( $spec['calls'] as $method => $margs ) {
+                               if ( $expandArgs ) {
+                                       $margs = static::expandClosures( $margs );
+                               }
+                               call_user_func_array( array( $obj, $method ), $margs );
+                       }
+               }
+
                return $obj;
        }
+
+       /**
+        * Iterate a list and call any closures it contains.
+        *
+        * @param array $list List of things
+        * @return array List with any Closures replaced with their output
+        */
+       protected static function expandClosures( $list ) {
+               return array_map( function ( $value ) {
+                       if ( is_object( $value ) && $value instanceof Closure ) {
+                               // If $value is a Closure, call it.
+                               return $value();
+                       } else {
+                               return $value;
+                       }
+               }, $list );
+       }
 }
index 185914c..b6faa37 100644 (file)
@@ -111,7 +111,10 @@ class ReplacementArray {
         * @return string
         */
        public function replace( $subject ) {
-               if ( function_exists( 'fss_prep_replace' ) ) {
+               if (
+                       function_exists( 'fss_prep_replace' )  &&
+                       version_compare( PHP_VERSION, '5.5.0' ) < 0
+               ) {
                        if ( $this->fss === false ) {
                                $this->fss = fss_prep_replace( $this->data );
                        }
diff --git a/includes/libs/SamplingStatsdClient.php b/includes/libs/SamplingStatsdClient.php
new file mode 100644 (file)
index 0000000..f7afdb5
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Copyright 2015
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Entity\StatsdData;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+/**
+ * A statsd client that applies the sampling rate to the data items before sending them.
+ *
+ * @since 1.26
+ */
+class SamplingStatsdClient extends StatsdClient {
+       /**
+        * Sets sampling rate for all items in $data.
+        * The sample rate specified in a StatsdData entity overrides the sample rate specified here.
+        *
+        * {@inheritDoc}
+        */
+       public function appendSampleRate( $data, $sampleRate = 1 ) {
+               if ( $sampleRate < 1 ) {
+                       array_walk( $data, function( $item ) use ( $sampleRate ) {
+                               /** @var $item StatsdData */
+                               if ( $item->getSampleRate() === 1 ) {
+                                       $item->setSampleRate( $sampleRate );
+                               }
+                       } );
+               }
+
+               return $data;
+       }
+
+       /**
+        * Sample the metrics according to their sample rate and send the remaining ones.
+        *
+        * {@inheritDoc}
+        */
+       public function send( $data, $sampleRate = 1 ) {
+               if ( !is_array( $data ) ) {
+                       $data = array( $data );
+               }
+               if ( !$data ) {
+                       return;
+               }
+               foreach ( $data as $item ) {
+                       if ( !( $item instanceof StatsdDataInterface ) ) {
+                               throw new InvalidArgumentException(
+                                       'SamplingStatsdClient does not accept stringified messages' );
+                       }
+               }
+
+               // add sampling
+               if ( $sampleRate < 1 ) {
+                       $data = $this->appendSampleRate( $data, $sampleRate );
+               }
+               $data = $this->sampleData( $data );
+
+               $messages = array_map( 'strval', $data );
+
+               // reduce number of packets
+               if ( $this->getReducePacket() ) {
+                       $data = $this->reduceCount( $data );
+               }
+               //failures in any of this should be silently ignored if ..
+               $written = 0;
+               try {
+                       $fp = $this->getSender()->open();
+                       if ( !$fp ) {
+                               return;
+                       }
+                       foreach ( $messages as $message ) {
+                               $written += $this->getSender()->write( $fp, $message );
+                       }
+                       $this->getSender()->close( $fp );
+               } catch ( Exception $e ) {
+                       $this->throwException( $e );
+               }
+
+               return $written;
+       }
+
+       /**
+        * Throw away some of the data according to the sample rate.
+        * @param StatsdDataInterface[] $data
+        * @return array
+        * @throws LogicException
+        */
+       protected function sampleData( $data ) {
+               $newData = array();
+               $mt_rand_max = mt_getrandmax();
+               foreach ( $data as $item ) {
+                       $samplingRate = $item->getSampleRate();
+                       if ( $samplingRate <= 0.0 || $samplingRate > 1.0 ) {
+                               throw new LogicException( 'Sampling rate shall be within ]0, 1]' );
+                       }
+                       if (
+                               $samplingRate === 1 ||
+                               ( mt_rand() / $mt_rand_max <= $samplingRate )
+                       ) {
+                               $newData[] = $item;
+                       }
+               }
+               return $newData;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       protected function throwException( Exception $exception ) {
+               if ( !$this->getFailSilently() ) {
+                       throw $exception;
+               }
+       }
+}
diff --git a/includes/libs/ScopedPHPTimeout.php b/includes/libs/ScopedPHPTimeout.php
deleted file mode 100644 (file)
index d1493c3..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?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.
- * Use this when performing changes that should not be interrupted.
- *
- * On construction, set_time_limit() is called and set to $seconds.
- * If the client aborts the connection, PHP will continue to run.
- * When the object goes out of scope, the timer is restarted, with
- * the original time limit minus the time the object existed.
- */
-class ScopedPHPTimeout {
-       protected $startTime; // float; seconds
-       protected $oldTimeout; // integer; seconds
-       protected $oldIgnoreAbort; // boolean
-
-       protected static $stackDepth = 0; // integer
-       protected static $totalCalls = 0; // integer
-       protected static $totalElapsed = 0; // float; seconds
-
-       /* Prevent callers in infinite loops from running forever */
-       const MAX_TOTAL_CALLS = 1000000;
-       const MAX_TOTAL_TIME = 300; // seconds
-
-       /**
-        * @param $seconds integer
-        */
-       public function __construct( $seconds ) {
-               if ( ini_get( 'max_execution_time' ) > 0 ) { // CLI uses 0
-                       if ( self::$totalCalls >= self::MAX_TOTAL_CALLS ) {
-                               trigger_error( "Maximum invocations of " . __CLASS__ . " exceeded." );
-                       } elseif ( self::$totalElapsed >= self::MAX_TOTAL_TIME ) {
-                               trigger_error( "Time limit within invocations of " . __CLASS__ . " exceeded." );
-                       } elseif ( self::$stackDepth > 0 ) { // recursion guard
-                               trigger_error( "Resursive invocation of " . __CLASS__ . " attempted." );
-                       } else {
-                               $this->oldIgnoreAbort = ignore_user_abort( true );
-                               $this->oldTimeout = ini_set( 'max_execution_time', $seconds );
-                               $this->startTime = microtime( true );
-                               ++self::$stackDepth;
-                               ++self::$totalCalls; // proof against < 1us scopes
-                       }
-               }
-       }
-
-       /**
-        * Restore the original timeout.
-        * This does not account for the timer value on __construct().
-        */
-       public function __destruct() {
-               if ( $this->oldTimeout ) {
-                       $elapsed = microtime( true ) - $this->startTime;
-                       // Note: a limit of 0 is treated as "forever"
-                       set_time_limit( max( 1, $this->oldTimeout - (int)$elapsed ) );
-                       // If each scoped timeout is for less than one second, we end up
-                       // restoring the original timeout without any decrease in value.
-                       // Thus web scripts in an infinite loop can run forever unless we
-                       // take some measures to prevent this. Track total time and calls.
-                       self::$totalElapsed += $elapsed;
-                       --self::$stackDepth;
-                       ignore_user_abort( $this->oldIgnoreAbort );
-               }
-       }
-}
index eaf1155..0dbbaba 100644 (file)
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
-       public function get( $key, &$casToken = null ) {
-               $val = apc_fetch( $key );
+       /**
+        * @var string String to append to each APC key. This may be changed
+        *  whenever the handling of values is changed, to prevent existing code
+        *  from encountering older values which it cannot handle.
+        **/
+       const KEY_SUFFIX = ':1';
 
-               $casToken = $val;
+       public function get( $key, &$casToken = null, $flags = 0 ) {
+               $val = apc_fetch( $key . self::KEY_SUFFIX );
 
-               if ( is_string( $val ) ) {
-                       if ( $this->isInteger( $val ) ) {
-                               $val = intval( $val );
-                       } else {
-                               $val = unserialize( $val );
-                       }
-               }
+               $casToken = $val;
 
                return $val;
        }
 
        public function set( $key, $value, $exptime = 0 ) {
-               if ( !$this->isInteger( $value ) ) {
-                       $value = serialize( $value );
-               }
-
-               apc_store( $key, $value, $exptime );
+               apc_store( $key . self::KEY_SUFFIX, $value, $exptime );
 
                return true;
        }
 
        public function delete( $key ) {
-               apc_delete( $key );
+               apc_delete( $key . self::KEY_SUFFIX );
 
                return true;
        }
 
        public function incr( $key, $value = 1 ) {
-               return apc_inc( $key, $value );
+               return apc_inc( $key . self::KEY_SUFFIX, $value );
        }
 
        public function decr( $key, $value = 1 ) {
-               return apc_dec( $key, $value );
+               return apc_dec( $key . self::KEY_SUFFIX, $value );
        }
 }
index 65ff0ee..ddbe8ea 100644 (file)
@@ -43,22 +43,26 @@ use Psr\Log\NullLogger;
  * @ingroup Cache
  */
 abstract class BagOStuff implements LoggerAwareInterface {
-       private $debugMode = false;
-
+       /** @var array[] Lock tracking */
+       protected $locks = array();
        /** @var integer */
        protected $lastError = self::ERR_NONE;
 
-       /**
-        * @var LoggerInterface
-        */
+       /** @var LoggerInterface */
        protected $logger;
 
+       /** @var bool */
+       private $debugMode = false;
+
        /** Possible values for getLastError() */
        const ERR_NONE = 0; // no error
        const ERR_NO_RESPONSE = 1; // no response
        const ERR_UNREACHABLE = 2; // can't connect
        const ERR_UNEXPECTED = 3; // response gave some error
 
+       /** Bitfield constants for get()/getMulti() */
+       const READ_LATEST = 1; // use latest data for replicated stores
+
        public function __construct( array $params = array() ) {
                if ( isset( $params['logger'] ) ) {
                        $this->setLogger( $params['logger'] );
@@ -86,9 +90,10 @@ abstract class BagOStuff implements LoggerAwareInterface {
         * Get an item with the given key. Returns false if it does not exist.
         * @param string $key
         * @param mixed $casToken [optional]
+        * @param integer $flags Bitfield; supports READ_LATEST [optional]
         * @return mixed Returns false on failure
         */
-       abstract public function get( $key, &$casToken = null );
+       abstract public function get( $key, &$casToken = null, $flags = 0 );
 
        /**
         * Set an item.
@@ -138,11 +143,17 @@ abstract class BagOStuff implements LoggerAwareInterface {
         */
        protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
                do {
+                       $this->clearLastError();
                        $casToken = null; // passed by reference
                        $currentValue = $this->get( $key, $casToken );
+                       if ( $this->getLastError() ) {
+                               return false; // don't spam retries (retry only on races)
+                       }
+
                        // Derive the new value from the old value
                        $value = call_user_func( $callback, $this, $key, $currentValue );
 
+                       $this->clearLastError();
                        if ( $value === false ) {
                                $success = true; // do nothing
                        } elseif ( $currentValue === false ) {
@@ -152,6 +163,9 @@ abstract class BagOStuff implements LoggerAwareInterface {
                                // Try to update the key, failing if it gets changed in the meantime
                                $success = $this->cas( $casToken, $key, $value, $exptime );
                        }
+                       if ( $this->getLastError() ) {
+                               return false; // IO error; don't spam retries
+                       }
                } while ( !$success && --$attempts );
 
                return $success;
@@ -185,14 +199,18 @@ abstract class BagOStuff implements LoggerAwareInterface {
                        return false;
                }
 
+               $this->clearLastError();
                $currentValue = $this->get( $key );
-               // Derive the new value from the old value
-               $value = call_user_func( $callback, $this, $key, $currentValue );
-
-               if ( $value === false ) {
-                       $success = true; // do nothing
+               if ( $this->getLastError() ) {
+                       $success = false;
                } else {
-                       $success = $this->set( $key, $value, $exptime ); // set the new value
+                       // Derive the new value from the old value
+                       $value = call_user_func( $callback, $this, $key, $currentValue );
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } else {
+                               $success = $this->set( $key, $value, $exptime ); // set the new value
+                       }
                }
 
                if ( !$this->unlock( $key ) ) {
@@ -204,48 +222,116 @@ abstract class BagOStuff implements LoggerAwareInterface {
        }
 
        /**
+        * Acquire an advisory lock on a key string
+        *
+        * Note that if reentry is enabled, duplicate calls ignore $expiry
+        *
         * @param string $key
         * @param int $timeout Lock wait timeout; 0 for non-blocking [optional]
-        * @param int $expiry Lock expiry [optional]
+        * @param int $expiry Lock expiry [optional]; 1 day maximum
+        * @param string $rclass Allow reentry if set and the current lock used this value
         * @return bool Success
         */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
+               // Avoid deadlocks and allow lock reentry if specified
+               if ( isset( $this->locks[$key] ) ) {
+                       if ( $rclass != '' && $this->locks[$key]['class'] === $rclass ) {
+                               ++$this->locks[$key]['depth'];
+                               return true;
+                       } else {
+                               return false;
+                       }
+               }
+
+               $expiry = min( $expiry ?: INF, 86400 );
+
                $this->clearLastError();
                $timestamp = microtime( true ); // starting UNIX timestamp
                if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
-                       return true;
-               } elseif ( $this->getLastError() ) {
-                       return false;
+                       $locked = true;
+               } elseif ( $this->getLastError() || $timeout <= 0 ) {
+                       $locked = false; // network partition or non-blocking
+               } else {
+                       $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
+                       $sleep = 2 * $uRTT; // rough time to do get()+set()
+
+                       $attempts = 0; // failed attempts
+                       do {
+                               if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
+                                       // Exponentially back off after failed attempts to avoid network spam.
+                                       // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
+                                       $sleep *= 2;
+                               }
+                               usleep( $sleep ); // back off
+                               $this->clearLastError();
+                               $locked = $this->add( "{$key}:lock", 1, $expiry );
+                               if ( $this->getLastError() ) {
+                                       $locked = false; // network partition
+                                       break;
+                               }
+                       } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
                }
 
-               $uRTT = ceil( 1e6 * ( microtime( true ) - $timestamp ) ); // estimate RTT (us)
-               $sleep = 2 * $uRTT; // rough time to do get()+set()
-
-               $locked = false; // lock acquired
-               $attempts = 0; // failed attempts
-               do {
-                       if ( ++$attempts >= 3 && $sleep <= 5e5 ) {
-                               // Exponentially back off after failed attempts to avoid network spam.
-                               // About 2*$uRTT*(2^n-1) us of "sleep" happen for the next n attempts.
-                               $sleep *= 2;
-                       }
-                       usleep( $sleep ); // back off
-                       $this->clearLastError();
-                       $locked = $this->add( "{$key}:lock", 1, $expiry );
-                       if ( $this->getLastError() ) {
-                               return false;
-                       }
-               } while ( !$locked && ( microtime( true ) - $timestamp ) < $timeout );
+               if ( $locked ) {
+                       $this->locks[$key] = array( 'class' => $rclass, 'depth' => 1 );
+               }
 
                return $locked;
        }
 
        /**
+        * Release an advisory lock on a key string
+        *
         * @param string $key
         * @return bool Success
         */
        public function unlock( $key ) {
-               return $this->delete( "{$key}:lock" );
+               if ( isset( $this->locks[$key] ) && --$this->locks[$key]['depth'] <= 0 ) {
+                       unset( $this->locks[$key] );
+
+                       return $this->delete( "{$key}:lock" );
+               }
+
+               return true;
+       }
+
+       /**
+        * Get a lightweight exclusive self-unlocking lock
+        *
+        * Note that the same lock cannot be acquired twice.
+        *
+        * This is useful for task de-duplication or to avoid obtrusive
+        * (though non-corrupting) DB errors like INSERT key conflicts
+        * or deadlocks when using LOCK IN SHARE MODE.
+        *
+        * @param string $key
+        * @param int $timeout Lock wait timeout; 0 for non-blocking [optional]
+        * @param int $expiry Lock expiry [optional]; 1 day maximum
+        * @param string $rclass Allow reentry if set and the current lock used this value
+        * @return ScopedCallback|null Returns null on failure
+        * @since 1.26
+        */
+       final public function getScopedLock( $key, $timeout = 6, $expiry = 30, $rclass = '' ) {
+               $expiry = min( $expiry ?: INF, 86400 );
+
+               if ( !$this->lock( $key, $timeout, $expiry, $rclass ) ) {
+                       return null;
+               }
+
+               $lSince = microtime( true ); // lock timestamp
+               // PHP 5.3: Can't use $this in a closure
+               $that = $this;
+               $logger = $this->logger;
+
+               return new ScopedCallback( function() use ( $that, $logger, $key, $lSince, $expiry ) {
+                       $latency = .050; // latency skew (err towards keeping lock present)
+                       $age = ( microtime( true ) - $lSince + $latency );
+                       if ( ( $age + $latency ) >= $expiry ) {
+                               $logger->warning( "Lock for $key held too long ($age sec)." );
+                               return; // expired; it's not "safe" to delete the key
+                       }
+                       $that->unlock( $key );
+               } );
        }
 
        /**
@@ -262,14 +348,13 @@ abstract class BagOStuff implements LoggerAwareInterface {
                return false;
        }
 
-       /* *** Emulated functions *** */
-
        /**
         * Get an associative array containing the item for each of the keys that have items.
         * @param array $keys List of strings
+        * @param integer $flags Bitfield; supports READ_LATEST [optional]
         * @return array
         */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $res = array();
                foreach ( $keys as $key ) {
                        $val = $this->get( $key );
index 4ccf270..55e84b0 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Cache
  */
 class EmptyBagOStuff extends BagOStuff {
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                return false;
        }
 
index 2c8b05a..b685e41 100644 (file)
@@ -48,7 +48,7 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
                }
@@ -68,20 +68,8 @@ class HashBagOStuff extends BagOStuff {
        }
 
        function delete( $key ) {
-               if ( !isset( $this->bag[$key] ) ) {
-                       return false;
-               }
-
                unset( $this->bag[$key] );
 
                return true;
        }
-
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               return true;
-       }
-
-       function unlock( $key ) {
-               return true;
-       }
 }
index 1b24616..9e80e9f 100644 (file)
@@ -72,12 +72,16 @@ class ReplicatedBagOStuff extends BagOStuff {
                $this->readStore->setDebug( $debug );
        }
 
-       public function get( $key, &$casToken = null ) {
-               return $this->readStore->get( $key, $casToken );
+       public function get( $key, &$casToken = null, $flags = 0 ) {
+               return ( $flags & self::READ_LATEST )
+                       ? $this->writeStore->get( $key, $casToken, $flags )
+                       : $this->readStore->get( $key, $casToken, $flags );
        }
 
-       public function getMulti( array $keys ) {
-               return $this->readStore->getMulti( $keys );
+       public function getMulti( array $keys, $flags = 0 ) {
+               return ( $flags & self::READ_LATEST )
+                       ? $this->writeStore->getMulti( $keys, $flags )
+                       : $this->readStore->getMulti( $keys, $flags );
        }
 
        public function set( $key, $value, $exptime = 0 ) {
@@ -100,8 +104,8 @@ class ReplicatedBagOStuff extends BagOStuff {
                return $this->writeStore->decr( $key, $value );
        }
 
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
-               return $this->writeStore->lock( $key, $timeout, $expiry );
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
+               return $this->writeStore->lock( $key, $timeout, $expiry, $rclass );
        }
 
        public function unlock( $key ) {
index c32efb9..dcd413d 100644 (file)
@@ -128,9 +128,9 @@ class WANObjectCache {
         * Fetch the value of a key from cache
         *
         * If passed in, $curTTL is set to the remaining TTL (current time left):
-        *   - a) INF; if the key exists and has no TTL
-        *   - b) float (>=0); if the key exists and has a TTL
-        *   - c) float (<0); if the key is tombstoned or expired by $checkKeys
+        *   - a) INF; if the key exists, has no TTL, and is not expired by $checkKeys
+        *   - b) float (>=0); if the key exists, has a TTL, and is not expired by $checkKeys
+        *   - c) float (<0); if the key is tombstoned or existing but expired by $checkKeys
         *   - d) null; if the key does not exist and is not tombstoned
         *
         * If a key is tombstoned, $curTTL will reflect the time since delete().
@@ -256,9 +256,19 @@ class WANObjectCache {
        /**
         * Purge a key from all clusters
         *
-        * This instantiates a hold-off period where the key cannot be
-        * written to avoid race conditions where dependent keys get updated
-        * with a stale value (e.g. from a DB slave).
+        * This deletes the key and instantiates a hold-off period where the key
+        * cannot be written to for the next few seconds (HOLDOFF_TTL). This is to
+        * avoid the following race condition:
+        *   a) Some DB data changes and delete() is called on a corresponding key
+        *   b) A request refills the key with a stale value from a lagged DB
+        *   c) The stale value is stuck there until the key is expired/evicted
+        *
+        * This is implemented by storing a special "tombstone" value at the cache
+        * key that this class recognizes; get() calls will return false for the key
+        * and any set() calls will refuse to replace tombstone values at the key.
+        * For this to always avoid writing stale values, the following must hold:
+        *   a) Replication lag is bounded to being less than HOLDOFF_TTL; or
+        *   b) If lag is higher, the DB will have gone into read-only mode already
         *
         * This should only be called when the underlying data (being cached)
         * changes in a significant way. If called twice on the same key, then
@@ -270,6 +280,8 @@ class WANObjectCache {
         */
        final public function delete( $key, $ttl = self::HOLDOFF_TTL ) {
                $key = self::VALUE_KEY_PREFIX . $key;
+               // Avoid indefinite key salting for sanity
+               $ttl = max( $ttl, 1 );
                // Update the local cluster immediately
                $ok = $this->cache->set( $key, self::PURGE_VAL_PREFIX . microtime( true ), $ttl );
                // Publish the purge to all clusters
@@ -300,8 +312,10 @@ class WANObjectCache {
 
                $time = self::parsePurgeValue( $this->cache->get( $key ) );
                if ( $time === false ) {
-                       $time = microtime( true );
+                       // Casting assures identical floats for the next getCheckKeyTime() calls
+                       $time = (string)microtime( true );
                        $this->cache->add( $key, self::PURGE_VAL_PREFIX . $time, self::CHECK_KEY_TTL );
+                       $time = (float)$time;
                }
 
                return $time;
@@ -320,6 +334,13 @@ class WANObjectCache {
         * avoid race conditions where dependent keys get updated with a
         * stale value (e.g. from a DB slave).
         *
+        * This is typically useful for keys with static names or some cases
+        * dynamically generated names where a low number of combinations exist.
+        * When a few important keys get a large number of hits, a high cache
+        * time is usually desired as well as lockTSE logic. The resetCheckKey()
+        * method is less appropriate in such cases since the "time since expiry"
+        * cannot be inferred.
+        *
         * Note that "check" keys won't collide with other regular keys
         *
         * @see WANObjectCache::get()
@@ -336,6 +357,39 @@ class WANObjectCache {
                return $this->relayPurge( $key, self::CHECK_KEY_TTL ) && $ok;
        }
 
+       /**
+        * Delete a "check" key from all clusters, invalidating keys that use it
+        *
+        * This is similar to touchCheckKey() in that keys using it via
+        * getWithSetCallback() will be invalidated. The differences are:
+        *   a) The timestamp will be deleted from all caches and lazily
+        *      re-initialized when accessed (rather than set everywhere)
+        *   b) Thus, dependent keys will be known to be invalid, but not
+        *      for how long (they are treated as "just" purged), which
+        *      effects any lockTSE logic in getWithSetCallback()
+        * The advantage is that this does not place high TTL keys on every cache
+        * server, making it better for code that will cache many different keys
+        * and either does not use lockTSE or uses a low enough TTL anyway.
+        *
+        * This is typically useful for keys with dynamically generated names
+        * where a high number of combinations exist.
+        *
+        * Note that "check" keys won't collide with other regular keys
+        *
+        * @see WANObjectCache::touchCheckKey()
+        * @see WANObjectCache::get()
+        *
+        * @param string $key Cache key
+        * @return bool True if the item was purged or not found, false on failure
+        */
+       final public function resetCheckKey( $key ) {
+               $key = self::TIME_KEY_PREFIX . $key;
+               // Update the local cluster immediately
+               $ok = $this->cache->delete( $key );
+               // Publish the purge to all clusters
+               return $this->relayDelete( $key ) && $ok;
+       }
+
        /**
         * Method to fetch/regenerate cache keys
         *
@@ -411,10 +465,9 @@ class WANObjectCache {
         *               Other threads will try to use stale values if possible.
         *               If, on miss, the time since expiration is low, the assumption
         *               is that the key is hot and that a stampede is worth avoiding.
-        *   - tempTTL : when 'lockTSE' is set, this determines the TTL of the temp
-        *               key used to cache values while a key is tombstoned.
-        *               This avoids excessive regeneration of hot keys on delete() but
-        *               may result in stale values.
+        *   - tempTTL : TTL of the temp key used to cache values while a key is tombstoned.
+        *               This avoids excessive regeneration of hot keys on delete() but may
+        *               result in stale values.
         * @return mixed Value to use for the key
         */
        final public function getWithSetCallback(
@@ -545,6 +598,26 @@ class WANObjectCache {
                return $ok;
        }
 
+       /**
+        * Do the actual async bus delete of a key
+        *
+        * @param string $key Cache key
+        * @return bool Success
+        */
+       protected function relayDelete( $key ) {
+               $event = $this->cache->modifySimpleRelayEvent( array(
+                       'cmd' => 'delete',
+                       'key' => $key,
+               ) );
+
+               $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+               if ( !$ok ) {
+                       $this->lastRelayError = self::ERR_RELAY;
+               }
+
+               return $ok;
+       }
+
        /**
         * Check if a key should be regenerated (using random probability)
         *
@@ -553,7 +626,7 @@ class WANObjectCache {
         * moves from $lowTTL to 0 seconds. This handles widely varying
         * levels of cache access traffic.
         *
-        * @param float|INF $curTTL Approximate TTL left on the key if present
+        * @param float $curTTL Approximate TTL left on the key if present
         * @param float $lowTTL Consider a refresh when $curTTL is less than this
         * @return bool
         */
index 5362574..c480aa0 100644 (file)
  * @ingroup Cache
  */
 class WinCacheBagOStuff extends BagOStuff {
-
-       /**
-        * Get a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param int $casToken [optional] Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $val = wincache_ucache_get( $key );
 
                $casToken = $val;
@@ -48,14 +40,6 @@ class WinCacheBagOStuff extends BagOStuff {
                return $val;
        }
 
-       /**
-        * Store a value in the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Value to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
        public function set( $key, $value, $expire = 0 ) {
                $result = wincache_ucache_set( $key, serialize( $value ), $expire );
 
@@ -64,25 +48,10 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === array() ) || $result;
        }
 
-       /**
-        * Store a value in the WinCache object cache, race condition-safe
-        *
-        * @param int $casToken Cas token
-        * @param string $key Cache key
-        * @param int $value Object to store
-        * @param int $exptime Expiration time
-        * @return bool
-        */
        protected function cas( $casToken, $key, $value, $exptime = 0 ) {
                return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
        }
 
-       /**
-        * Remove a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
        public function delete( $key ) {
                wincache_ucache_delete( $key );
 
index cfee923..9dbff6f 100644 (file)
  * @ingroup Cache
  */
 class XCacheBagOStuff extends BagOStuff {
-       /**
-        * Get a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $casToken Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
@@ -51,14 +44,6 @@ class XCacheBagOStuff extends BagOStuff {
                return $val;
        }
 
-       /**
-        * Store a value in the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Object to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
        public function set( $key, $value, $expire = 0 ) {
                if ( !$this->isInteger( $value ) ) {
                        $value = serialize( $value );
@@ -68,12 +53,6 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
-       /**
-        * Remove a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
        public function delete( $key ) {
                xcache_unset( $key );
                return true;
index 32a27f7..43dfab3 100644 (file)
  */
 class ParsoidVirtualRESTService extends VirtualRESTService {
        /**
-        * Example requests:
-        *  GET /local/v1/page/$title/html/$oldid
-        *   * $oldid is optional
-        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        * Example Parsoid v3 requests:
+        *  GET /local/v3/page/html/$title/{$revision}
+        *   * $revision is optional
+        *  POST /local/v3/transform/html/to/wikitext/{$title}{/$revision}
         *   * body: array( 'html' => ... )
-        *   * $title and $oldid are optional
-        *  POST /local/v1/transform/wikitext/to/html/$title
-        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title and $revision are optional
+        *  POST /local/v3/transform/wikitext/to/html/{$title}{/$revision}
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
         *   * $title is optional
+        *   * $revision is optional
+     *
+        * There are also deprecated "v1" requests; see onParsoid1Request
+        * for details.
         * @param array $params Key/value map
         *   - url            : Parsoid server URL
-        *   - prefix         : Parsoid prefix for this wiki
+        *   - domain         : Wiki domain to use
         *   - timeout        : Parsoid timeout (optional)
         *   - forwardCookies : Cookies to forward to Parsoid, or false. (optional)
         *   - HTTPProxy      : Parsoid HTTP proxy (optional)
+        *   - restbaseCompat : whether to parse URL as if they were meant for RESTBase
+        *                       boolean (optional)
         */
        public function __construct( array $params ) {
                // for backwards compatibility:
@@ -46,7 +52,30 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                        $params['url'] = $params['URL'];
                        unset( $params['URL'] );
                }
-               parent::__construct( $params );
+               // set up defaults and merge them with the given params
+               $mparams = array_merge( array(
+                       'name' => 'parsoid',
+                       'url' => 'http://localhost:8000/',
+                       'prefix' => 'localhost',
+                       'domain' => 'localhost',
+                       'forwardCookies' => false,
+                       'HTTPProxy' => null,
+               ), $params );
+               // Ensure that the url parameter has a trailing slash.
+               $mparams['url'] = preg_replace(
+                       '#/?$#',
+                       '/',
+                       $mparams['url']
+               );
+               // Ensure the correct domain format: strip protocol, port,
+               // and trailing slash if present.  This lets us use
+               // $wgCanonicalServer as a default value, which is very convenient.
+               $mparams['domain'] = preg_replace(
+                       '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
+                       '$2',
+                       $mparams['domain']
+               );
+               parent::__construct( $mparams );
        }
 
        public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
@@ -56,71 +85,143 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
 
                        list(
                                $targetWiki, // 'local'
-                               $version, // 'v1'
-                               $reqType // 'page' or 'transform'
+                               $version, // 'v3' ('v1' for restbase compatibility)
+                               $reqType, // 'page' or 'transform'
+                               $format, // 'html' or 'wikitext'
+                               // $title (optional)
+                               // $revision (optional)
                        ) = $parts;
 
+                       if ( isset( $this->params['restbaseCompat'] ) && $this->params['restbaseCompat'] ) {
+                               if ( $version !== 'v1' ) {
+                                       throw new Exception( "Only RESTBase v1 API is supported." );
+                               }
+                               # Map RESTBase v1 API to Parsoid v3 API (pretty easy)
+                               $req['url'] = preg_replace( '#^local/v1/#', 'local/v3/', $req['url'] );
+                       } elseif ( $version !== 'v3' ) {
+                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
+                               continue;
+                       }
                        if ( $targetWiki !== 'local' ) {
+
                                throw new Exception( "Only 'local' target wiki is currently supported" );
-                       } elseif ( $version !== 'v1' ) {
-                               throw new Exception( "Only version 1 exists" );
-                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                               throw new Exception( "Request type must be either 'page' or 'transform'" );
                        }
-
-                       $req['url'] = $this->params['url'] . '/' . urlencode( $this->params['prefix'] ) . '/';
-
-                       if ( $reqType === 'page' ) {
-                               $title = $parts[3];
-                               if ( $parts[4] !== 'html' ) {
-                                       throw new Exception( "Only 'html' output format is currently supported" );
-                               }
-                               if ( isset( $parts[5] ) ) {
-                                       $req['url'] .= $title . '?oldid=' . $parts[5];
-                               } else {
-                                       $req['url'] .= $title;
-                               }
-                       } elseif ( $reqType === 'transform' ) {
-                               if ( $parts[4] !== 'to' ) {
-                                       throw new Exception( "Part index 4 is not 'to'" );
-                               }
-
-                               if ( isset( $parts[6] ) ) {
-                                       $req['url'] .= $parts[6];
-                               }
-
-                               if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
-                                       if ( !isset( $req['body']['html'] ) ) {
-                                               throw new Exception( "You must set an 'html' body key for this request" );
-                                       }
-                                       if ( isset( $parts[7] ) ) {
-                                               $req['body']['oldid'] = $parts[7];
-                                       }
-                               } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                                       if ( !isset( $req['body']['wikitext'] ) ) {
-                                               throw new Exception( "You must set a 'wikitext' body key for this request" );
-                                       }
-                                       $req['body']['wt'] = $req['body']['wikitext'];
-                                       unset( $req['body']['wikitext'] );
-                               } else {
-                                       throw new Exception( "Transformation unsupported" );
-                               }
+                       if ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                               throw new Exception( "Request action must be either 'page' or 'transform'" );
                        }
-
-                       if ( isset( $this->params['HTTPProxy'] ) && $this->params['HTTPProxy'] ) {
+                       if ( $format !== 'html' && $format !== 'wikitext' ) {
+                               throw new Exception( "Request format must be either 'html' or 'wt'" );
+                       }
+                       // replace /local/ with the current domain
+                       $req['url'] = preg_replace( '#^local/#', $this->params['domain'] . '/', $req['url'] );
+                       // and prefix it with the service URL
+                       $req['url'] = $this->params['url'] . $req['url'];
+                       // set the appropriate proxy, timeout and headers
+                       if ( $this->params['HTTPProxy'] ) {
                                $req['proxy'] = $this->params['HTTPProxy'];
                        }
-                       if ( isset( $this->params['timeout'] ) ) {
+                       if ( $this->params['timeout'] != null ) {
                                $req['reqTimeout'] = $this->params['timeout'];
                        }
-
-                       // Forward cookies
-                       if ( isset( $this->params['forwardCookies'] ) ) {
+                       if ( $this->params['forwardCookies'] ) {
                                $req['headers']['Cookie'] = $this->params['forwardCookies'];
                        }
-
                        $result[$key] = $req;
                }
                return $result;
        }
+
+       /**
+        * Remap a Parsoid v1 request to a Parsoid v3 request.
+        *
+        * Example Parsoid v1 requests:
+        *  GET /local/v1/page/$title/html/$oldid
+        *   * $oldid is optional
+        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        *   * body: array( 'html' => ... )
+        *   * $title and $oldid are optional
+        *  POST /local/v1/transform/wikitext/to/html/$title
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title is optional
+        *
+        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
+        * Visual Editor "pretends" the V1 API is like.  A previous version of
+        * ParsoidVirtualRESTService translated these to the "real" Parsoid v1
+        * API.  We now translate these to the "real" Parsoid v3 API.
+        */
+       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
+
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v1'
+                       $reqType // 'page' or 'transform'
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v1' ) {
+                       throw new Exception( "Only v1 and v3 are supported." );
+               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                       throw new Exception( "Request type must be either 'page' or 'transform'" );
+               }
+               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v3/';
+               if ( $reqType === 'page' ) {
+                       $title = $parts[3];
+                       if ( $parts[4] !== 'html' ) {
+                               throw new Exception( "Only 'html' output format is currently supported" );
+                       }
+                       $req['url'] .= 'page/html/' . $title;
+                       if ( isset( $parts[5] ) ) {
+                               $req['url'] .= '/' . $parts[5];
+                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+                               $req['url'] .= '/' . $req['query']['oldid'];
+                               unset( $req['query']['oldid'] );
+                       }
+               } elseif ( $reqType === 'transform' ) {
+                       $req['url'] .= 'transform/'. $parts[3] . '/to/' . $parts[5];
+                       // the title
+                       if ( isset( $parts[6] ) ) {
+                               $req['url'] .= '/' . $parts[6];
+                       }
+                       // revision id
+                       if ( isset( $parts[7] ) ) {
+                               $req['url'] .= '/' . $parts[7];
+                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+                               $req['url'] .= '/' . $req['body']['oldid'];
+                               unset( $req['body']['oldid'] );
+                       }
+                       if ( $parts[4] !== 'to' ) {
+                               throw new Exception( "Part index 4 is not 'to'" );
+                       }
+                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
+                               if ( !isset( $req['body']['html'] ) ) {
+                                       throw new Exception( "You must set an 'html' body key for this request" );
+                               }
+                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+                               if ( !isset( $req['body']['wikitext'] ) ) {
+                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
+                               }
+                               if ( isset( $req['body']['body'] ) ) {
+                                       $req['body']['bodyOnly'] = $req['body']['body'];
+                                       unset( $req['body']['body'] );
+                               }
+                       } else {
+                               throw new Exception( "Transformation unsupported" );
+                       }
+               }
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
+               }
+
+               return $req;
+
+       }
+
 }
index 8fe5b92..3a7bc58 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Virtual HTTP service client for Restbase
+ * Virtual HTTP service client for RESTBase
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 
 /**
- * Virtual REST service for Restbase
+ * Virtual REST service for RESTBase
  * @since 1.25
  */
 class RestbaseVirtualRESTService extends VirtualRESTService {
        /**
-        * Example requests:
-        *  GET /local/v1/page/{title}/html{/revision}
+        * Example RESTBase v1 requests:
+        *  GET /local/v1/page/html/{title}{/revision}
         *  POST /local/v1/transform/html/to/wikitext{/title}{/revision}
         *   * body: array( 'html' => ... )
         *  POST /local/v1/transform/wikitext/to/html{/title}{/revision}
         *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
         *
         * @param array $params Key/value map
-        *   - url            : Restbase server URL
+        *   - url            : RESTBase server URL
         *   - domain         : Wiki domain to use
         *   - timeout        : request timeout in seconds (optional)
-        *   - forwardCookies : cookies to forward to Restbase/Parsoid (as a Cookie
+        *   - forwardCookies : cookies to forward to RESTBase/Parsoid (as a Cookie
         *                       header string) or false (optional)
         *                       Note: forwardCookies will in the future be a boolean
         *                       only, signifing request cookies should be forwarded
@@ -48,18 +48,27 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        public function __construct( array $params ) {
                // set up defaults and merge them with the given params
                $mparams = array_merge( array(
-                       'url' => 'http://localhost:7231',
+                       'name' => 'restbase',
+                       'url' => 'http://localhost:7231/',
                        'domain' => 'localhost',
                        'timeout' => 100,
                        'forwardCookies' => false,
                        'HTTPProxy' => null,
                        'parsoidCompat' => false
                ), $params );
-               // ensure the correct domain format
+               // Ensure that the url parameter has a trailing slash.
+               $mparams['url'] = preg_replace(
+                       '#/?$#',
+                       '/',
+                       $mparams['url']
+               );
+               // Ensure the correct domain format: strip protocol, port,
+               // and trailing slash if present.  This lets us use
+               // $wgCanonicalServer as a default value, which is very convenient.
                $mparams['domain'] = preg_replace(
-                               '/^(https?:\/\/)?([^\/:]+?)(\/|:\d+\/?)?$/',
-                               '$2',
-                               $mparams['domain']
+                       '/^(https?:\/\/)?([^\/:]+?)(:\d+)?\/?$/',
+                       '$2',
+                       $mparams['domain']
                );
                parent::__construct( $mparams );
        }
@@ -73,7 +82,7 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
                $result = array();
                foreach ( $reqs as $key => $req ) {
                        // replace /local/ with the current domain
-                       $req['url'] = preg_replace( '/^\/local\//', '/' . $this->params['domain'] . '/', $req['url'] );
+                       $req['url'] = preg_replace( '#^local/#', $this->params['domain'] . '/', $req['url'] );
                        // and prefix it with the service URL
                        $req['url'] = $this->params['url'] . $req['url'];
                        // set the appropriate proxy, timeout and headers
@@ -94,83 +103,164 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
        }
 
        /**
-        * Remaps Parsoid requests to Restbase paths
+        * Remaps Parsoid v1/v3 requests to RESTBase v1 requests.
         */
        public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
 
                $result = array();
                foreach ( $reqs as $key => $req ) {
                        $parts = explode( '/', $req['url'] );
-                       list(
-                               $targetWiki, // 'local'
-                               $version, // 'v1'
-                               $reqType // 'page' or 'transform'
-                       ) = $parts;
-                       if ( $targetWiki !== 'local' ) {
-                               throw new Exception( "Only 'local' target wiki is currently supported" );
-                       } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
-                               throw new Exception( "Request type must be either 'page' or 'transform'" );
+                       if ( $parts[1] === 'v3' ) {
+                               $result[$key] = $this->onParsoid3Request( $req, $idGeneratorFunc );
+                       } elseif ( $parts[1] === 'v1' ) {
+                               $result[$key] = $this->onParsoid1Request( $req, $idGeneratorFunc );
+                       } else {
+                               throw new Exception( "Only v1 and v3 are supported." );
                        }
-                       $req['url'] = $this->params['url'] . '/' . $this->params['domain'] . '/v1/' . $reqType . '/';
-                       if ( $reqType === 'page' ) {
-                               $title = $parts[3];
-                               if ( $parts[4] !== 'html' ) {
-                                       throw new Exception( "Only 'html' output format is currently supported" );
-                               }
-                               $req['url'] .= 'html/' . $title;
-                               if ( isset( $parts[5] ) ) {
-                                       $req['url'] .= '/' . $parts[5];
-                               } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
-                                       $req['url'] .= '/' . $req['query']['oldid'];
-                                       unset( $req['query']['oldid'] );
-                               }
-                       } elseif ( $reqType === 'transform' ) {
-                               // from / to transform
-                               $req['url'] .= $parts[3] . '/to/' . $parts[5];
-                               // the title
-                               if ( isset( $parts[6] ) ) {
-                                       $req['url'] .= '/' . $parts[6];
-                               }
-                               // revision id
-                               if ( isset( $parts[7] ) ) {
-                                       $req['url'] .= '/' . $parts[7];
-                               } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
-                                       $req['url'] .= '/' . $req['body']['oldid'];
-                                       unset( $req['body']['oldid'] );
-                               }
-                               if ( $parts[4] !== 'to' ) {
-                                       throw new Exception( "Part index 4 is not 'to'" );
-                               }
-                               if ( $parts[3] === 'html' & $parts[5] === 'wikitext' ) {
-                                       if ( !isset( $req['body']['html'] ) ) {
-                                               throw new Exception( "You must set an 'html' body key for this request" );
-                                       }
-                               } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
-                                       if ( !isset( $req['body']['wikitext'] ) ) {
-                                               throw new Exception( "You must set a 'wikitext' body key for this request" );
-                                       }
-                                       if ( isset( $req['body']['body'] ) ) {
-                                               $req['body']['bodyOnly'] = $req['body']['body'];
-                                               unset( $req['body']['body'] );
-                                       }
-                               } else {
-                                       throw new Exception( "Transformation unsupported" );
-                               }
+               }
+
+               return $result;
+
+       }
+
+       /**
+        * Remap a Parsoid v1 request to a RESTBase v1 request.
+        *
+        * Example Parsoid v1 requests:
+        *  GET /local/v1/page/$title/html/$oldid
+        *   * $oldid is optional
+        *  POST /local/v1/transform/html/to/wikitext/$title/$oldid
+        *   * body: array( 'html' => ... )
+        *   * $title and $oldid are optional
+        *  POST /local/v1/transform/wikitext/to/html/$title
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body' => true/false )
+        *   * $title is optional
+        *
+        * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
+        * Visual Editor "pretends" the V1 API is like.  (See
+        * ParsoidVirtualRESTService.)
+        */
+       public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v1'
+                       $reqType // 'page' or 'transform'
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v1' ) {
+                       throw new Exception( "Version mismatch: should not happen." );
+               } elseif ( $reqType !== 'page' && $reqType !== 'transform' ) {
+                       throw new Exception( "Request type must be either 'page' or 'transform'" );
+               }
+               $req['url'] = $this->params['url'] . $this->params['domain'] . '/v1/' . $reqType . '/';
+               if ( $reqType === 'page' ) {
+                       $title = $parts[3];
+                       if ( $parts[4] !== 'html' ) {
+                               throw new Exception( "Only 'html' output format is currently supported" );
                        }
-                       // set the appropriate proxy, timeout and headers
-                       if ( $this->params['HTTPProxy'] ) {
-                               $req['proxy'] = $this->params['HTTPProxy'];
+                       $req['url'] .= 'html/' . $title;
+                       if ( isset( $parts[5] ) ) {
+                               $req['url'] .= '/' . $parts[5];
+                       } elseif ( isset( $req['query']['oldid'] ) && $req['query']['oldid'] ) {
+                               $req['url'] .= '/' . $req['query']['oldid'];
+                               unset( $req['query']['oldid'] );
                        }
-                       if ( $this->params['timeout'] != null ) {
-                               $req['reqTimeout'] = $this->params['timeout'];
+               } elseif ( $reqType === 'transform' ) {
+                       // from / to transform
+                       $req['url'] .= $parts[3] . '/to/' . $parts[5];
+                       // the title
+                       if ( isset( $parts[6] ) ) {
+                               $req['url'] .= '/' . $parts[6];
                        }
-                       if ( $this->params['forwardCookies'] ) {
-                               $req['headers']['Cookie'] = $this->params['forwardCookies'];
+                       // revision id
+                       if ( isset( $parts[7] ) ) {
+                               $req['url'] .= '/' . $parts[7];
+                       } elseif ( isset( $req['body']['oldid'] ) && $req['body']['oldid'] ) {
+                               $req['url'] .= '/' . $req['body']['oldid'];
+                               unset( $req['body']['oldid'] );
+                       }
+                       if ( $parts[4] !== 'to' ) {
+                               throw new Exception( "Part index 4 is not 'to'" );
+                       }
+                       if ( $parts[3] === 'html' && $parts[5] === 'wikitext' ) {
+                               if ( !isset( $req['body']['html'] ) ) {
+                                       throw new Exception( "You must set an 'html' body key for this request" );
+                               }
+                       } elseif ( $parts[3] == 'wikitext' && $parts[5] == 'html' ) {
+                               if ( !isset( $req['body']['wikitext'] ) ) {
+                                       throw new Exception( "You must set a 'wikitext' body key for this request" );
+                               }
+                               if ( isset( $req['body']['body'] ) ) {
+                                       $req['body']['bodyOnly'] = $req['body']['body'];
+                                       unset( $req['body']['body'] );
+                               }
+                       } else {
+                               throw new Exception( "Transformation unsupported" );
                        }
-                       $result[$key] = $req;
+               }
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
                }
 
-               return $result;
+               return $req;
+
+       }
+
+       /**
+        * Remap a Parsoid v3 request to a RESTBase v1 request.
+        *
+        * Example Parsoid v3 requests:
+        *  GET /local/v3/page/html/$title/{$revision}
+        *   * $revision is optional
+        *  POST /local/v3/transform/html/to/wikitext/{$title}{/$revision}
+        *   * body: array( 'html' => ... )
+        *   * $title and $revision are optional
+        *  POST /local/v3/transform/wikitext/to/html/{$title}{/$revision}
+        *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'bodyOnly' => true/false )
+        *   * $title is optional
+        *   * $revision is optional
+        */
+       public function onParsoid3Request( array $req, Closure $idGeneratorFunc ) {
+
+               $parts = explode( '/', $req['url'] );
+               list(
+                       $targetWiki, // 'local'
+                       $version, // 'v3'
+                       $action, // 'transform' or 'page'
+                       $format, // 'html' or 'wikitext'
+                       // $title, // optional
+                       // $revision, // optional
+               ) = $parts;
+               if ( $targetWiki !== 'local' ) {
+                       throw new Exception( "Only 'local' target wiki is currently supported" );
+               } elseif ( $version !== 'v3' ) {
+                       throw new Exception( "Version mismatch: should not happen." );
+               }
+               // replace /local/ with the current domain, change v3 to v1,
+               $req['url'] = preg_replace( '#^local/v3/#', $this->params['domain'] . '/v1/', $req['url'] );
+               // and prefix it with the service URL
+               $req['url'] = $this->params['url'] . $req['url'];
+               // set the appropriate proxy, timeout and headers
+               if ( $this->params['HTTPProxy'] ) {
+                       $req['proxy'] = $this->params['HTTPProxy'];
+               }
+               if ( $this->params['timeout'] != null ) {
+                       $req['reqTimeout'] = $this->params['timeout'];
+               }
+               if ( $this->params['forwardCookies'] ) {
+                       $req['headers']['Cookie'] = $this->params['forwardCookies'];
+               }
+
+               return $req;
 
        }
 
index 011dabe..88b0e1f 100644 (file)
@@ -45,7 +45,11 @@ class SwiftVirtualRESTService extends VirtualRESTService {
         *   - swiftAuthTTL       : Swift authentication TTL (seconds)
         */
        public function __construct( array $params ) {
-               parent::__construct( $params );
+               // set up defaults and merge them with the given params
+               $mparams = array_merge( array(
+                       'name' => 'swift'
+               ), $params );
+               parent::__construct( $mparams );
        }
 
        /**
index 2a0b3f0..01a4ea6 100644 (file)
@@ -44,6 +44,17 @@ abstract class VirtualRESTService {
                $this->params = $params;
        }
 
+       /**
+        * Return the name of this service, in a form suitable for error
+        * reporting or debugging.
+        *
+        * @return string The name of the service behind this VRS object.
+        */
+       public function getName() {
+               return isset( $this->params['name'] ) ? $this->params['name'] :
+                       get_class( $this );
+       }
+
        /**
         * Prepare virtual HTTP(S) requests (for this service) for execution
         *
index 0145b02..f31a42a 100644 (file)
@@ -273,6 +273,10 @@ class LogFormatter {
                                                $text = wfMessage( 'modifiedarticleprotection' )
                                                        ->rawParams( $target . ' ' . $parameters[0] )->inContentLanguage()->escaped();
                                                break;
+                                       case 'move_prot':
+                                               $text = wfMessage( 'movedarticleprotection' )
+                                                       ->rawParams( $target, $parameters['4::oldtitle'] )->inContentLanguage()->escaped();
+                                               break;
                                }
                                break;
 
diff --git a/includes/logging/ProtectLogFormatter.php b/includes/logging/ProtectLogFormatter.php
new file mode 100644 (file)
index 0000000..5327e07
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Formatter for protect 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.26
+ */
+
+/**
+ * This class formats protect log entries.
+ *
+ * @since 1.26
+ */
+class ProtectLogFormatter extends LogFormatter {
+       public function getPreloadTitles() {
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'move_prot' ) {
+                       $params = $this->extractParameters();
+                       return array( Title::newFromText( $params[3] ) );
+               }
+               return array();
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               $subtype = $this->entry->getSubtype();
+               if ( $subtype === 'move_prot' ) {
+                       $oldname = $this->makePageLink( Title::newFromText( $params[3] ), array( 'redirect' => 'no' ) );
+                       $params[3] = Message::rawParam( $oldname );
+               }
+
+               return $params;
+       }
+
+       protected function getParametersForApi() {
+               $entry = $this->entry;
+               $params = $entry->getParameters();
+
+               static $map = array(
+                       // param keys for move_prot sub type
+                       '4:title:oldtitle',
+                       '4::oldtitle' => '4:title:oldtitle',
+               );
+               foreach ( $map as $index => $key ) {
+                       if ( isset( $params[$index] ) ) {
+                               $params[$key] = $params[$index];
+                               unset( $params[$index] );
+                       }
+               }
+
+               return $params;
+       }
+}
index c359659..01b6afa 100644 (file)
  * Visit the documentation pages under http://meta.wikipedia.com/Enotif
  */
 class EmailNotification {
+
+       /**
+        * Notification is due to user's user talk being edited
+        */
+       const USER_TALK = 'user_talk';
+       /**
+        * Notification is due to a watchlisted page being edited
+        */
+       const WATCHLIST = 'watchlist';
+       /**
+        * Notification because user is notified for all changes
+        */
+       const ALL_CHANGES = 'all_changes';
+
        protected $subject, $body, $replyto, $from;
        protected $timestamp, $summary, $minorEdit, $oldid, $composed_common, $pageStatus;
        protected $mailTargets = array();
@@ -135,7 +149,9 @@ class EmailNotification {
 
                $sendEmail = true;
                // If nobody is watching the page, and there are no users notified on all changes
-               // don't bother creating a job/trying to send emails
+               // don't bother creating a job/trying to send emails, unless it's a
+               // talk page with an applicable notification.
+               //
                // $watchers deals with $wgEnotifWatchlist
                if ( !count( $watchers ) && !count( $wgUsersNotifiedOnAllChanges ) ) {
                        $sendEmail = false;
@@ -201,7 +217,7 @@ class EmailNotification {
        public function actuallyNotifyOnPageChange( $editor, $title, $timestamp, $summary, $minorEdit,
                $oldid, $watchers, $pageStatus = 'changed' ) {
                # we use $wgPasswordSender as sender's address
-               global $wgEnotifWatchlist;
+               global $wgEnotifWatchlist, $wgBlockDisablesLogin;
                global $wgEnotifMinorEdits, $wgEnotifUserTalk;
 
                # The following code is only run, if several conditions are met:
@@ -234,21 +250,23 @@ class EmailNotification {
                                && $this->canSendUserTalkEmail( $editor, $title, $minorEdit )
                        ) {
                                $targetUser = User::newFromName( $title->getText() );
-                               $this->compose( $targetUser );
+                               $this->compose( $targetUser, self::USER_TALK );
                                $userTalkId = $targetUser->getId();
                        }
 
                        if ( $wgEnotifWatchlist ) {
                                // Send updates to watchers other than the current editor
+                               // and don't send to watchers who are blocked and cannot login
                                $userArray = UserArray::newFromIDs( $watchers );
                                foreach ( $userArray as $watchingUser ) {
                                        if ( $watchingUser->getOption( 'enotifwatchlistpages' )
                                                && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) )
                                                && $watchingUser->isEmailConfirmed()
                                                && $watchingUser->getID() != $userTalkId
+                                               && !( $wgBlockDisablesLogin && $watchingUser->isBlocked() )
                                        ) {
                                                if ( Hooks::run( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) {
-                                                       $this->compose( $watchingUser );
+                                                       $this->compose( $watchingUser, self::WATCHLIST );
                                                }
                                        }
                                }
@@ -262,7 +280,7 @@ class EmailNotification {
                                continue;
                        }
                        $user = User::newFromName( $name );
-                       $this->compose( $user );
+                       $this->compose( $user, self::ALL_CHANGES );
                }
 
                $this->sendMails();
@@ -275,7 +293,7 @@ class EmailNotification {
         * @return bool
         */
        private function canSendUserTalkEmail( $editor, $title, $minorEdit ) {
-               global $wgEnotifUserTalk;
+               global $wgEnotifUserTalk, $wgBlockDisablesLogin;
                $isUserTalkPage = ( $title->getNamespace() == NS_USER_TALK );
 
                if ( $wgEnotifUserTalk && $isUserTalkPage ) {
@@ -285,6 +303,8 @@ class EmailNotification {
                                wfDebug( __METHOD__ . ": user talk page edited, but user does not exist\n" );
                        } elseif ( $targetUser->getId() == $editor->getId() ) {
                                wfDebug( __METHOD__ . ": user edited their own talk page, no notification sent\n" );
+                       } elseif ( $wgBlockDisablesLogin && $targetUser->isBlocked() ) {
+                               wfDebug( __METHOD__ . ": talk page owner is blocked and cannot login, no notification sent\n" );
                        } elseif ( $targetUser->getOption( 'enotifusertalkpages' )
                                && ( !$minorEdit || $targetUser->getOption( 'enotifminoredits' ) )
                        ) {
@@ -421,8 +441,9 @@ class EmailNotification {
         *
         * Call sendMails() to send any mails that were queued.
         * @param User $user
+        * @param string $source
         */
-       function compose( $user ) {
+       function compose( $user, $source ) {
                global $wgEnotifImpersonal;
 
                if ( !$this->composed_common ) {
@@ -432,7 +453,7 @@ class EmailNotification {
                if ( $wgEnotifImpersonal ) {
                        $this->mailTargets[] = MailAddress::newFromUser( $user );
                } else {
-                       $this->sendPersonalised( $user );
+                       $this->sendPersonalised( $user, $source );
                }
        }
 
@@ -452,10 +473,11 @@ class EmailNotification {
         * Returns true if the mail was sent successfully.
         *
         * @param User $watchingUser
+        * @param string $source
         * @return bool
         * @private
         */
-       function sendPersonalised( $watchingUser ) {
+       function sendPersonalised( $watchingUser, $source ) {
                global $wgContLang, $wgEnotifUseRealName;
                // From the PHP manual:
                //   Note: The to parameter cannot be an address in the form of
@@ -476,7 +498,15 @@ class EmailNotification {
                                $wgContLang->userTime( $this->timestamp, $watchingUser ) ),
                        $this->body );
 
-               return UserMailer::send( $to, $this->from, $this->subject, $body, $this->replyto );
+               $headers = array();
+               if ( $source === self::WATCHLIST ) {
+                       $headers['List-Help'] = 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Watchlist';
+               }
+
+               return UserMailer::send( $to, $this->from, $this->subject, $body, array(
+                       'replyTo' => $this->replyto,
+                       'headers' => $headers,
+               ) );
        }
 
        /**
@@ -501,7 +531,9 @@ class EmailNotification {
                                $wgContLang->time( $this->timestamp, false, false ) ),
                        $this->body );
 
-               return UserMailer::send( $addresses, $this->from, $this->subject, $body, $this->replyto );
+               return UserMailer::send( $addresses, $this->from, $this->subject, $body, array(
+                       'replyTo' => $this->replyto,
+               ) );
        }
 
 }
index 546cc8c..7c5f18d 100644 (file)
@@ -43,7 +43,7 @@ class UserMailer {
        protected static function sendWithPear( $mailer, $dest, $headers, $body ) {
                $mailResult = $mailer->send( $dest, $headers, $body );
 
-               # Based on the result return an error string,
+               // Based on the result return an error string,
                if ( PEAR::isError( $mailResult ) ) {
                        wfDebug( "PEAR::Mail failed: " . $mailResult->getMessage() . "\n" );
                        return Status::newFatal( 'pear-mail-error', $mailResult->getMessage() );
@@ -102,16 +102,35 @@ class UserMailer {
         * @param MailAddress $from Sender's email
         * @param string $subject Email's subject.
         * @param string $body Email's text or Array of two strings to be the text and html bodies
-        * @param MailAddress $replyto Optional reply-to email (default: null).
-        * @param string $contentType Optional custom Content-Type (default: text/plain; charset=UTF-8)
+        * @param array $options:
+        *              'replyTo' MailAddress
+        *              'contentType' string default 'text/plain; charset=UTF-8'
+        *              'headers' array Extra headers to set
+        *
+        * Previous versions of this function had $replyto as the 5th argument and $contentType
+        * as the 6th. These are still supported for backwards compatability, but deprecated.
+        *
         * @throws MWException
         * @throws Exception
         * @return Status
         */
-       public static function send( $to, $from, $subject, $body, $replyto = null,
-               $contentType = 'text/plain; charset=UTF-8'
-       ) {
+       public static function send( $to, $from, $subject, $body, $options = array() ) {
                global $wgSMTP, $wgEnotifMaxRecips, $wgAdditionalMailParams, $wgAllowHTMLEmail;
+               $contentType = 'text/plain; charset=UTF-8';
+               $headers = array();
+               if ( is_array( $options ) ) {
+                       $replyto = isset( $options['replyTo'] ) ? $options['replyTo'] : null;
+                       $contentType = isset( $options['contentType'] ) ? $options['contentType'] : $contentType;
+                       $headers = isset( $options['headers'] ) ? $options['headers'] : $headers;
+               } else {
+                       // Old calling style
+                       wfDeprecated( __METHOD__ . ' with $replyto as 5th parameter', '1.26' );
+                       $replyto = $options;
+                       if ( func_num_args() === 6 ) {
+                               $contentType = func_get_arg( 5 );
+                       }
+               }
+
                $mime = null;
                if ( !is_array( $to ) ) {
                        $to = array( $to );
@@ -147,7 +166,7 @@ class UserMailer {
 
                wfDebug( __METHOD__ . ': sending mail to ' . implode( ', ', $to ) . "\n" );
 
-               # Make sure we have at least one address
+               // Make sure we have at least one address
                $has_address = false;
                foreach ( $to as $u ) {
                        if ( $u->address ) {
@@ -159,32 +178,32 @@ class UserMailer {
                        return Status::newFatal( 'user-mail-no-addy' );
                }
 
-               # Forge email headers
-               # -------------------
-               #
-               # WARNING
-               #
-               # DO NOT add To: or Subject: headers at this step. They need to be
-               # handled differently depending upon the mailer we are going to use.
-               #
-               # To:
-               #  PHP mail() first argument is the mail receiver. The argument is
-               #  used as a recipient destination and as a To header.
-               #
-               #  PEAR mailer has a recipient argument which is only used to
-               #  send the mail. If no To header is given, PEAR will set it to
-               #  to 'undisclosed-recipients:'.
-               #
-               #  NOTE: To: is for presentation, the actual recipient is specified
-               #  by the mailer using the Rcpt-To: header.
-               #
-               # Subject:
-               #  PHP mail() second argument to pass the subject, passing a Subject
-               #  as an additional header will result in a duplicate header.
-               #
-               #  PEAR mailer should be passed a Subject header.
-               #
-               # -- hashar 20120218
+               // Forge email headers
+               // -------------------
+               //
+               // WARNING
+               //
+               // DO NOT add To: or Subject: headers at this step. They need to be
+               // handled differently depending upon the mailer we are going to use.
+               //
+               // To:
+               //  PHP mail() first argument is the mail receiver. The argument is
+               //  used as a recipient destination and as a To header.
+               //
+               //  PEAR mailer has a recipient argument which is only used to
+               //  send the mail. If no To header is given, PEAR will set it to
+               //  to 'undisclosed-recipients:'.
+               //
+               //  NOTE: To: is for presentation, the actual recipient is specified
+               //  by the mailer using the Rcpt-To: header.
+               //
+               // Subject:
+               //  PHP mail() second argument to pass the subject, passing a Subject
+               //  as an additional header will result in a duplicate header.
+               //
+               //  PEAR mailer should be passed a Subject header.
+               //
+               // -- hashar 20120218
 
                $headers['From'] = $from->toString();
                $returnPath = $from->address;
@@ -192,9 +211,9 @@ class UserMailer {
 
                // Hook to generate custom VERP address for 'Return-Path'
                Hooks::run( 'UserMailerChangeReturnPath', array( $to, &$returnPath ) );
-               # Add the envelope sender address using the -f command line option when PHP mail() is used.
-               # Will default to the $from->address when the UserMailerChangeReturnPath hook fails and the
-               # generated VERP address when the hook runs effectively.
+               // Add the envelope sender address using the -f command line option when PHP mail() is used.
+               // Will default to the $from->address when the UserMailerChangeReturnPath hook fails and the
+               // generated VERP address when the hook runs effectively.
                $extraParams .= ' -f ' . $returnPath;
 
                $headers['Return-Path'] = $returnPath;
@@ -209,8 +228,8 @@ class UserMailer {
                $headers['List-Unsubscribe'] = '<' . SpecialPage::getTitleFor( 'Preferences' )
                        ->getFullURL( '', false, PROTO_CANONICAL ) . '>';
 
-               # Line endings need to be different on Unix and Windows due to
-               # the bug described at http://trac.wordpress.org/ticket/2603
+               // Line endings need to be different on Unix and Windows due to
+               // the bug described at http://trac.wordpress.org/ticket/2603
                if ( wfIsWindows() ) {
                        $endl = "\r\n";
                } else {
@@ -225,7 +244,10 @@ class UserMailer {
                                // remove the html body for text email fall back
                                $body = $body['text'];
                        } else {
-                               require_once 'Mail/mime.php';
+                               // Check if pear/mail_mime is already loaded (via composer)
+                               if ( !class_exists( 'Mail_mime' ) ) {
+                                       require_once 'Mail/mime.php';
+                               }
                                if ( wfIsWindows() ) {
                                        $body['text'] = str_replace( "\n", "\r\n", $body['text'] );
                                        $body['html'] = str_replace( "\n", "\r\n", $body['html'] );
@@ -262,14 +284,14 @@ class UserMailer {
                }
 
                if ( is_array( $wgSMTP ) ) {
-                       #
-                       # PEAR MAILER
-                       #
-
-                       if ( !stream_resolve_include_path( 'Mail.php' ) ) {
-                               throw new MWException( 'PEAR mail package is not installed' );
+                       // Check if pear/mail is already loaded (via composer)
+                       if ( !class_exists( 'Mail' ) ) {
+                               // PEAR MAILER
+                               if ( !stream_resolve_include_path( 'Mail.php' ) ) {
+                                       throw new MWException( 'PEAR mail package is not installed' );
+                               }
+                               require_once 'Mail.php';
                        }
-                       require_once 'Mail.php';
 
                        MediaWiki\suppressWarnings();
 
@@ -285,17 +307,17 @@ class UserMailer {
 
                        $headers['Subject'] = self::quotedPrintable( $subject );
 
-                       # When sending only to one recipient, shows it its email using To:
+                       // When sending only to one recipient, shows it its email using To:
                        if ( count( $to ) == 1 ) {
                                $headers['To'] = $to[0]->toString();
                        }
 
-                       # Split jobs since SMTP servers tends to limit the maximum
-                       # number of possible recipients.
+                       // Split jobs since SMTP servers tends to limit the maximum
+                       // number of possible recipients.
                        $chunks = array_chunk( $to, $wgEnotifMaxRecips );
                        foreach ( $chunks as $chunk ) {
                                $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
-                               # FIXME : some chunks might be sent while others are not!
+                               // FIXME : some chunks might be sent while others are not!
                                if ( !$status->isOK() ) {
                                        MediaWiki\restoreWarnings();
                                        return $status;
@@ -304,9 +326,9 @@ class UserMailer {
                        MediaWiki\restoreWarnings();
                        return Status::newGood();
                } else {
-                       #
-                       # PHP mail()
-                       #
+                       //
+                       // PHP mail()
+                       //
                        if ( count( $to ) > 1 ) {
                                $headers['To'] = 'undisclosed-recipients:;';
                        }
@@ -402,7 +424,7 @@ class UserMailer {
         * @return string
         */
        public static function quotedPrintable( $string, $charset = '' ) {
-               # Probably incomplete; see RFC 2045
+               // Probably incomplete; see RFC 2045
                if ( empty( $charset ) ) {
                        $charset = 'UTF-8';
                }
index 4be20b2..1f00650 100644 (file)
@@ -70,8 +70,7 @@ class BitmapHandler extends TransformationalImageHandler {
        protected function transformImageMagick( $image, $params ) {
                # use ImageMagick
                global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
-                       $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgResourceBasePath,
-                       $wgUseTinyRGBForJPGThumbnails;
+                       $wgImageMagickTempDir, $wgImageMagickConvertCommand;
 
                $quality = array();
                $sharpen = array();
index dbbe991..dac76fa 100644 (file)
@@ -150,7 +150,7 @@ class DjVuImage {
                                wfDebug( __METHOD__ . ": not a DjVu file\n" );
                        } elseif ( $subtype == 'DJVU' ) {
                                // Single-page document
-                               $info = $this->getPageInfo( $file, $formLength );
+                               $info = $this->getPageInfo( $file );
                        } elseif ( $subtype == 'DJVM' ) {
                                // Multi-page document
                                $info = $this->getMultiPageInfo( $file, $formLength );
@@ -202,7 +202,7 @@ class DjVuImage {
                                if ( $subtype == 'DJVU' ) {
                                        wfDebug( __METHOD__ . ": found first subpage\n" );
 
-                                       return $this->getPageInfo( $file, $length );
+                                       return $this->getPageInfo( $file );
                                }
                                $this->skipChunk( $file, $length - 4 );
                        } else {
@@ -216,7 +216,7 @@ class DjVuImage {
                return false;
        }
 
-       private function getPageInfo( $file, $formLength ) {
+       private function getPageInfo( $file ) {
                list( $chunk, $length ) = $this->readChunk( $file );
                if ( $chunk != 'INFO' ) {
                        wfDebug( __METHOD__ . ": expected INFO chunk, got '$chunk'\n" );
index 4377f75..1118598 100644 (file)
@@ -205,6 +205,7 @@ class SvgHandler extends ImageHandler {
                $tmpDir = wfTempDir() . '/svg_' . wfRandomString( 24 );
                $lnPath = "$tmpDir/" . basename( $srcPath );
                $ok = mkdir( $tmpDir, 0771 ) && symlink( $srcPath, $lnPath );
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $cleaner = new ScopedCallback( function () use ( $tmpDir, $lnPath ) {
                        MediaWiki\suppressWarnings();
                        unlink( $lnPath );
index 8afa31b..1ec2f81 100644 (file)
@@ -319,16 +319,6 @@ class SVGReader {
                }
        }
 
-       // @todo FIXME: Unused, remove?
-       private function warn( $data ) {
-               wfDebug( "SVGReader: $data\n" );
-       }
-
-       // @todo FIXME: Unused, remove?
-       private function notice( $data ) {
-               wfDebug( "SVGReader WARN: $data\n" );
-       }
-
        /**
         * Parse the attributes of an SVG element
         *
index 05d12c4..ff4dcee 100644 (file)
@@ -219,8 +219,8 @@ class WebPHandler extends BitmapHandler {
 
                return array(
                        'compression' => 'unknown',
-                       'animated' => ($flags[1] & self::VP8X_ANIM) == self::VP8X_ANIM,
-                       'transparency' => ($flags[1] & self::VP8X_ALPHA) == self::VP8X_ALPHA,
+                       'animated' => ( $flags[1] & self::VP8X_ANIM ) == self::VP8X_ANIM,
+                       'transparency' => ( $flags[1] & self::VP8X_ALPHA ) == self::VP8X_ALPHA,
                        'width' => ( $width[1] & 0xFFFFFF ) + 1,
                        'height' => ( $height[1] & 0xFFFFFF ) + 1
                );
@@ -271,7 +271,7 @@ class WebPHandler extends BitmapHandler {
                $ser = $image->getMetadata();
                if ( $ser ) {
                        $metadata = unserialize( $ser );
-                       if ( isset($metadata['animated']) && $metadata['animated'] === true ) {
+                       if ( isset( $metadata['animated'] ) && $metadata['animated'] === true ) {
                                return true;
                        }
                }
index a838355..64a7e8a 100644 (file)
@@ -348,7 +348,7 @@ class XMPReader implements LoggerAwareInterface {
                        // could declare entities unsafe to parse with xml_parse (T85848/T71210).
                        if ( $this->parsable !== self::PARSABLE_OK ) {
                                if ( $this->parsable === self::PARSABLE_NO ) {
-                                       throw new Exception( 'Unsafe doctype declaration in XML.' );
+                                       throw new RuntimeException( 'Unsafe doctype declaration in XML.' );
                                }
 
                                $content = $this->xmlParsableBuffer . $content;
@@ -361,29 +361,44 @@ class XMPReader implements LoggerAwareInterface {
                                        $msg = ( $this->parsable === self::PARSABLE_NO ) ?
                                                'Unsafe doctype declaration in XML.' :
                                                'No root element found in XML.';
-                                       throw new Exception( $msg );
+                                       throw new RuntimeException( $msg );
                                }
                        }
 
                        $ok = xml_parse( $this->xmlParser, $content, $allOfIt );
                        if ( !$ok ) {
-                               $error = xml_error_string( xml_get_error_code( $this->xmlParser ) );
-                               $where = 'line: ' . xml_get_current_line_number( $this->xmlParser )
-                                       . ' column: ' . xml_get_current_column_number( $this->xmlParser )
-                                       . ' byte offset: ' . xml_get_current_byte_index( $this->xmlParser );
-
-                               $this->logger->info( "XMPReader::parse : Error reading XMP content: $error ($where)" );
+                               $code = xml_get_error_code( $this->xmlParser );
+                               $error = xml_error_string( $code );
+                               $line = xml_get_current_line_number( $this->xmlParser );
+                               $col = xml_get_current_column_number( $this->xmlParser );
+                               $offset = xml_get_current_byte_index( $this->xmlParser );
+
+                               $this->logger->warning(
+                                       '{method} : Error reading XMP content: {error} ' .
+                                       '(line: {line} column: {column} byte offset: {offset})',
+                                       array(
+                                               'method' => __METHOD__,
+                                               'error_code' => $code,
+                                               'error' => $error,
+                                               'line' => $line,
+                                               'column' => $col,
+                                               'offset' => $offset,
+                                               'content' => $content,
+                               ) );
                                $this->results = array(); // blank if error.
                                $this->destroyXMLParser();
                                return false;
                        }
                } catch ( Exception $e ) {
-                       $this->logger->info( 'XMP parse error: ' . $e );
+                       $this->logger->warning(
+                               '{method} Exception caught while parsing: ' . $e->getMessage(),
+                               array(
+                                       'method' => __METHOD__,
+                                       'exception' => $e,
+                                       'content' => $content,
+                               )
+                       );
                        $this->results = array();
-
-                       if ( $allOfIt ) {
-                               $this->destroyXMLParser();
-                       }
                        return false;
                }
                if ( $allOfIt ) {
@@ -525,6 +540,7 @@ class XMPReader implements LoggerAwareInterface {
                );
 
                $oldDisable = libxml_disable_entity_loader( true );
+               /** @noinspection PhpUnusedLocalVariableInspection */
                $reset = new ScopedCallback(
                        'libxml_disable_entity_loader',
                        array( $oldDisable )
index 97aa796..1d8d777 100644 (file)
@@ -34,8 +34,6 @@ class XMPInfo {
                return self::$items;
        }
 
-       static private $ranHooks = false;
-
        /**
         * XMPInfo::$items keeps a list of all the items
         * we are interested to extract, as well as
index eeca9b1..e545aa5 100644 (file)
@@ -57,12 +57,7 @@ class MemcachedBagOStuff extends BagOStuff {
                return $params;
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                return $this->client->get( $this->encodeKey( $key ), $casToken );
        }
 
index 6912864..5010b89 100644 (file)
@@ -94,6 +94,11 @@ class MWMemcached {
         */
        const COMPRESSED = 2;
 
+       /**
+        * Flag: indicates data is an integer
+        */
+       const INTVAL = 4;
+
        // }}}
 
        /**
@@ -979,6 +984,8 @@ class MWMemcached {
                                         */
                                        if ( $flags & self::SERIALIZED ) {
                                                $ret[$rkey] = unserialize( $ret[$rkey] );
+                                       } elseif ( $flags & self::INTVAL ) {
+                                               $ret[$rkey] = intval( $ret[$rkey] );
                                        }
                                }
 
@@ -1027,7 +1034,9 @@ class MWMemcached {
 
                $flags = 0;
 
-               if ( !is_scalar( $val ) ) {
+               if ( is_int( $val ) ) {
+                       $flags |= self::INTVAL;
+               } elseif ( !is_scalar( $val ) ) {
                        $val = serialize( $val );
                        $flags |= self::SERIALIZED;
                        if ( $this->_debug ) {
index f2c4928..1b2c8db 100644 (file)
@@ -115,12 +115,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                $this->client->addServers( $servers );
        }
 
-       /**
-        * @param string $key
-        * @param float $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $this->debugLog( "get($key)" );
                $result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
                $result = $this->checkResult( $key, $result );
@@ -238,15 +233,16 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $result;
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
                $callback = array( $this, 'encodeKey' );
-               $result = $this->client->getMulti( array_map( $callback, $keys ) );
-               $result = $result ?: array(); // must be an array
+               $encodedResult = $this->client->getMulti( array_map( $callback, $keys ) );
+               $encodedResult = $encodedResult ?: array(); // must be an array
+               $result = array();
+               foreach ( $encodedResult as $key => $value ) {
+                       $key = $this->decodeKey( $key );
+                       $result[$key] = $value;
+               }
                return $this->checkResult( false, $result );
        }
 
index 6fba61b..6f0ba58 100644 (file)
@@ -57,13 +57,15 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
                $this->client->set_debug( $debug );
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $callback = array( $this, 'encodeKey' );
-               return $this->client->get_multi( array_map( $callback, $keys ) );
+               $encodedResult = $this->client->get_multi( array_map( $callback, $keys ) );
+               $result = array();
+               foreach ( $encodedResult as $key => $value ) {
+                       $key = $this->decodeKey( $key );
+                       $result[$key] = $value;
+               }
+               return $result;
        }
 
        /**
index be54e4d..bbfaa5e 100644 (file)
@@ -29,7 +29,7 @@
  * @ingroup Cache
  */
 class MultiWriteBagOStuff extends BagOStuff {
-       /** @var array BagOStuff[] */
+       /** @var BagOStuff[] */
        protected $caches;
 
        /**
@@ -61,14 +61,9 @@ class MultiWriteBagOStuff extends BagOStuff {
                $this->doWrite( 'setDebug', $debug );
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool|mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                foreach ( $this->caches as $cache ) {
-                       $value = $cache->get( $key );
+                       $value = $cache->get( $key, $casToken, $flags );
                        if ( $value !== false ) {
                                return $value;
                        }
@@ -126,12 +121,13 @@ class MultiWriteBagOStuff extends BagOStuff {
         * @param string $key
         * @param int $timeout
         * @param int $expiry
+        * @param string $rclass
         * @return bool
         */
-       public function lock( $key, $timeout = 6, $expiry = 6 ) {
+       public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
                // Lock only the first cache, to avoid deadlocks
                if ( isset( $this->caches[0] ) ) {
-                       return $this->caches[0]->lock( $key, $timeout, $expiry );
+                       return $this->caches[0]->lock( $key, $timeout, $expiry, $rclass );
                } else {
                        return true;
                }
index c5850b6..6019105 100644 (file)
@@ -28,10 +28,45 @@ use MediaWiki\Logger\LoggerFactory;
  *
  * The word "cache" has two main dictionary meanings, and both
  * are used in this factory class. They are:
- *   - a) A place to store copies or computations on existing data
- *     for higher access speeds (the computer science definition)
- *   - b) A place to store lightweight data that is not canonically
- *     stored anywhere else (e.g. a "hoard" of objects)
+ *
+ *   - a) Cache (the computer science definition).
+ *        A place to store copies or computations on existing data for
+ *        higher access speeds.
+ *   - b) Storage.
+ *        A place to store lightweight data that is not canonically
+ *        stored anywhere else (e.g. a "hoard" of objects).
+ *
+ * The former should always use strongly consistent stores, so callers don't
+ * have to deal with stale reads. The later may be eventually consistent, but
+ * callers can use BagOStuff:READ_LATEST to see the latest available data.
+ *
+ * Primary entry points:
+ *
+ * - ObjectCache::newAccelerator( $fallbackType )
+ *   Purpose: Cache.
+ *   Stored only on the individual web server.
+ *   Not associated with other servers.
+ *
+ * - wfGetMainCache()
+ *   Purpose: Cache.
+ *   Stored centrally within the local data-center.
+ *   Not replicated to other DCs.
+ *   Also known as $wgMemc. Configured by $wgMainCacheType.
+ *
+ * - ObjectCache::getMainWANInstance()
+ *   Purpose: Cache.
+ *   Stored in the local data-center's main cache (uses different cache keys).
+ *   Delete events are broadcasted to other DCs. See WANObjectCache for details.
+ *
+ * - ObjectCache::getMainStashInstance()
+ *   Purpose: Ephemeral storage.
+ *   Stored centrally within the local data-center.
+ *   Changes are replicated to other DCs (eventually consistent).
+ *   To retrieve the latest value (e.g. not from a slave), use BagOStuff:READ_LATEST.
+ *   This store may be subject to LRU style evictions.
+ *
+ * - wfGetCache( $cacheType )
+ *   Get a specific cache type by key in $wgObjectCaches.
  *
  * @ingroup Cache
  */
@@ -45,10 +80,10 @@ class ObjectCache {
        /**
         * Get a cached instance of the specified type of cache object.
         *
-        * @param string $id
+        * @param string $id A key in $wgObjectCaches.
         * @return BagOStuff
         */
-       static function getInstance( $id ) {
+       public static function getInstance( $id ) {
                if ( !isset( self::$instances[$id] ) ) {
                        self::$instances[$id] = self::newFromId( $id );
                }
@@ -57,13 +92,13 @@ class ObjectCache {
        }
 
        /**
-        * Get a cached instance of the specified type of cache object.
+        * Get a cached instance of the specified type of WAN cache object.
         *
         * @since 1.26
-        * @param string $id
+        * @param string $id A key in $wgWANObjectCaches.
         * @return WANObjectCache
         */
-       static function getWANInstance( $id ) {
+       public static function getWANInstance( $id ) {
                if ( !isset( self::$wanInstances[$id] ) ) {
                        self::$wanInstances[$id] = self::newWANCacheFromId( $id );
                }
@@ -71,22 +106,14 @@ class ObjectCache {
                return self::$wanInstances[$id];
        }
 
-       /**
-        * Clear all the cached instances.
-        */
-       static function clear() {
-               self::$instances = array();
-               self::$wanInstances = array();
-       }
-
        /**
         * Create a new cache object of the specified type.
         *
-        * @param string $id
+        * @param string $id A key in $wgObjectCaches.
         * @return BagOStuff
         * @throws MWException
         */
-       static function newFromId( $id ) {
+       public static function newFromId( $id ) {
                global $wgObjectCaches;
 
                if ( !isset( $wgObjectCaches[$id] ) ) {
@@ -98,13 +125,17 @@ class ObjectCache {
        }
 
        /**
-        * Create a new cache object from parameters
+        * Create a new cache object from parameters.
         *
-        * @param array $params
+        * @param array $params Must have 'factory' or 'class' property.
+        *  - factory: Callback passed $params that returns BagOStuff.
+        *  - class: BagOStuff subclass constructed with $params.
+        *  - loggroup: Alias to set 'logger' key with LoggerFactory group.
+        *  - .. Other parameters passed to factory or class.
         * @return BagOStuff
         * @throws MWException
         */
-       static function newFromParams( $params ) {
+       public static function newFromParams( $params ) {
                if ( isset( $params['loggroup'] ) ) {
                        $params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
                } else {
@@ -125,7 +156,7 @@ class ObjectCache {
        }
 
        /**
-        * Factory function referenced from DefaultSettings.php for CACHE_ANYTHING
+        * Factory function for CACHE_ANYTHING (referenced from DefaultSettings.php)
         *
         * CACHE_ANYTHING means that stuff has to be cached, not caching is not an option.
         * If a caching method is configured for any of the main caches ($wgMainCacheType,
@@ -137,7 +168,7 @@ class ObjectCache {
         * @param array $params
         * @return BagOStuff
         */
-       static function newAnything( $params ) {
+       public static function newAnything( $params ) {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
                $candidates = array( $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType );
                foreach ( $candidates as $candidate ) {
@@ -149,17 +180,20 @@ class ObjectCache {
        }
 
        /**
-        * Factory function referenced from DefaultSettings.php for CACHE_ACCEL.
+        * Factory function for CACHE_ACCEL (referenced from DefaultSettings.php)
         *
         * This will look for any APC style server-local cache.
         * A fallback cache can be specified if none is found.
         *
-        * @param array $params
+        * @param array $params [optional]
         * @param int|string $fallback Fallback cache, e.g. (CACHE_NONE, "hash") (since 1.24)
         * @return BagOStuff
         * @throws MWException
         */
-       static function newAccelerator( $params, $fallback = null ) {
+       public static function newAccelerator( $params = array(), $fallback = null ) {
+               if ( !is_array( $params ) && $fallback === null ) {
+                       $fallback = $params;
+               }
                if ( function_exists( 'apc_fetch' ) ) {
                        $id = 'apc';
                } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) {
@@ -186,19 +220,19 @@ class ObjectCache {
         * @param array $params
         * @return MemcachedPhpBagOStuff
         */
-       static function newMemcached( $params ) {
+       public static function newMemcached( $params ) {
                return new MemcachedPhpBagOStuff( $params );
        }
 
        /**
-        * Create a new cache object of the specified type
+        * Create a new cache object of the specified type.
         *
         * @since 1.26
-        * @param string $id
+        * @param string $id A key in $wgWANObjectCaches.
         * @return WANObjectCache
         * @throws MWException
         */
-       static function newWANCacheFromId( $id ) {
+       public static function newWANCacheFromId( $id ) {
                global $wgWANObjectCaches;
 
                if ( !isset( $wgWANObjectCaches[$id] ) ) {
@@ -216,18 +250,20 @@ class ObjectCache {
        }
 
        /**
-        * Get the main WAN cache object
+        * Get the main WAN cache object.
         *
         * @since 1.26
         * @return WANObjectCache
         */
-       static function getMainWANInstance() {
+       public static function getMainWANInstance() {
                global $wgMainWANCache;
 
                return self::getWANInstance( $wgMainWANCache );
        }
 
        /**
+        * Get the cache object for the main stash.
+        *
         * Stash objects are BagOStuff instances suitable for storing light
         * weight data that is not canonically stored elsewhere (such as RDBMS).
         * Stashes should be configured to propagate changes to all data-centers.
@@ -238,13 +274,22 @@ class ObjectCache {
         * In general, this means avoiding updates on idempotent HTTP requests and
         * avoiding an assumption of perfect serializability (or accepting anomalies).
         * Reads may be eventually consistent or data might rollback as nodes flap.
+        * Callers can use BagOStuff:READ_LATEST to see the latest available data.
         *
-        * @since 1.26
         * @return BagOStuff
+        * @since 1.26
         */
-       static function getMainStashInstance() {
+       public static function getMainStashInstance() {
                global $wgMainStash;
 
                return self::getInstance( $wgMainStash );
        }
+
+       /**
+        * Clear all the cached instances.
+        */
+       public static function clear() {
+               self::$instances = array();
+               self::$wanInstances = array();
+       }
 }
index ae3850f..2a5d695 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Cache
  */
 
+use MediaWiki\Logger\LoggerFactory;
+
 /**
  * Session storage in object cache.
  * Used if $wgSessionsInObjectCache is true.
@@ -31,8 +33,6 @@ class ObjectCacheSessionHandler {
        /** @var array Map of (session ID => SHA-1 of the data) */
        protected static $hashCache = array();
 
-       const TTL_REFRESH_WINDOW = 600; // refresh if expiring in 10 minutes
-
        /**
         * Install a session handler for the current web request
         */
@@ -108,7 +108,11 @@ class ObjectCacheSessionHandler {
         * @return mixed Session data
         */
        static function read( $id ) {
+               $stime = microtime( true );
                $data = self::getCache()->get( self::getKey( $id ) );
+               $real = microtime( true ) - $stime;
+
+               RequestContext::getMain()->getStats()->timing( "session.read", 1000 * $real );
 
                self::$hashCache = array( $id => self::getHash( $data ) );
 
@@ -129,7 +133,11 @@ class ObjectCacheSessionHandler {
                if ( !isset( self::$hashCache[$id] )
                        || self::getHash( $data ) !== self::$hashCache[$id]
                ) {
+                       $stime = microtime( true );
                        self::getCache()->set( self::getKey( $id ), $data, $wgObjectCacheSessionExpiry );
+                       $real = microtime( true ) - $stime;
+
+                       RequestContext::getMain()->getStats()->timing( "session.write", 1000 * $real );
                }
 
                return true;
@@ -142,7 +150,11 @@ class ObjectCacheSessionHandler {
         * @return bool Success
         */
        static function destroy( $id ) {
+               $stime = microtime( true );
                self::getCache()->delete( self::getKey( $id ) );
+               $real = microtime( true ) - $stime;
+
+               RequestContext::getMain()->getStats()->timing( "session.destroy", 1000 * $real );
 
                return true;
        }
@@ -163,20 +175,33 @@ class ObjectCacheSessionHandler {
         * See the comment inside ObjectCacheSessionHandler::install for rationale.
         */
        static function handleShutdown() {
+               session_write_close();
+       }
+
+       /**
+        * Pre-emptive session renewal function
+        */
+       static function renewCurrentSession() {
                global $wgObjectCacheSessionExpiry;
 
+               // Once a session is at half TTL, renew it
+               $window = $wgObjectCacheSessionExpiry / 2;
+               $logger = LoggerFactory::getInstance( 'SessionHandler' );
+
                $now = microtime( true );
                // Session are only written in object stores when $_SESSION changes,
                // which also renews the TTL ($wgObjectCacheSessionExpiry). If a user
                // is active but not causing session data changes, it may suddenly
-               // as they view a form, blocking the first submission.
+               // expire as they view a form, blocking the first submission.
                // Make a dummy change every so often to avoid this.
-               if ( !isset( $_SESSION['wsExpiresUnix'] )
-                       || ( $now + self::TTL_REFRESH_WINDOW ) > isset( $_SESSION['wsExpiresUnix'] )
-               ) {
+               if ( !isset( $_SESSION['wsExpiresUnix'] ) ) {
                        $_SESSION['wsExpiresUnix'] = $now + $wgObjectCacheSessionExpiry;
-               }
 
-               session_write_close();
+                       $logger->info( "Set expiry for session " . session_id(), array() );
+               } elseif ( ( $now + $window ) > $_SESSION['wsExpiresUnix'] ) {
+                       $_SESSION['wsExpiresUnix'] = $now + $wgObjectCacheSessionExpiry;
+
+                       $logger->info( "Renewed session " . session_id(), array() );
+               }
        }
 }
index b8a0dd5..a9af9b1 100644 (file)
@@ -80,7 +80,7 @@ class RedisBagOStuff extends BagOStuff {
                }
        }
 
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
 
                list( $server, $conn ) = $this->getConnection( $key );
                if ( !$conn ) {
@@ -174,7 +174,7 @@ class RedisBagOStuff extends BagOStuff {
                return $result;
        }
 
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
 
                $batches = array();
                $conns = array();
@@ -372,31 +372,30 @@ class RedisBagOStuff extends BagOStuff {
                        }
                }
 
-               foreach ( $candidates as $tag ) {
+               while ( ( $tag = array_shift( $candidates ) ) !== null ) {
                        $server = $this->serverTagMap[$tag];
-
                        $conn = $this->redisPool->getConnection( $server );
                        if ( !$conn ) {
                                continue;
                        }
 
-                       try {
-                               $info = $conn->info();
-                               // Check if this server has an unreachable redis master
-                               if ( $info['role'] === 'slave'
-                                       && $info['master_link_status'] === 'down'
-                                       && $this->automaticFailover
-                               ) {
-                                       // If the master cannot be reached, fail-over to the next server.
-                                       // If masters are in data-center A, and slaves in data-center B,
-                                       // this helps avoid the case were fail-over happens in A but not
-                                       // to the corresponding server in B (e.g. read/write mismatch).
+                       // If automatic failover is enabled, check that the server's link
+                       // to its master (if any) is up -- but only if there are other
+                       // viable candidates left to consider.
+                       if ( $this->automaticFailover && $candidates ) {
+                               try {
+                                       if ( $this->getMasterLinkStatus( $conn ) === 'down' ) {
+                                               // If the master cannot be reached, fail-over to the next server.
+                                               // If masters are in data-center A, and slaves in data-center B,
+                                               // this helps avoid the case were fail-over happens in A but not
+                                               // to the corresponding server in B (e.g. read/write mismatch).
+                                               continue;
+                                       }
+                               } catch ( RedisException $e ) {
+                                       // Server is not accepting commands
+                                       $this->handleException( $conn, $e );
                                        continue;
                                }
-                       } catch ( RedisException $e ) {
-                               // Server is not accepting commands
-                               $this->handleException( $conn, $e );
-                               continue;
                        }
 
                        return array( $server, $conn );
@@ -407,6 +406,19 @@ class RedisBagOStuff extends BagOStuff {
                return array( false, false );
        }
 
+       /**
+        * Check the master link status of a Redis server that is configured as a slave.
+        * @param RedisConnRef $conn
+        * @return string|null Master link status (either 'up' or 'down'), or null
+        *  if the server is not a slave.
+        */
+       protected function getMasterLinkStatus( RedisConnRef $conn ) {
+               $info = $conn->info();
+               return isset( $info['master_link_status'] )
+                       ? $info['master_link_status']
+                       : null;
+       }
+
        /**
         * Log a fatal error
         * @param string $msg
index 3b46249..e08fec9 100644 (file)
@@ -220,12 +220,7 @@ class SqlBagOStuff extends BagOStuff {
                }
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $values = $this->getMulti( array( $key ) );
                if ( array_key_exists( $key, $values ) ) {
                        $casToken = $values[$key];
@@ -234,11 +229,7 @@ class SqlBagOStuff extends BagOStuff {
                return false;
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $values = array(); // array of (key => value)
 
                $keysByTable = array();
index f213f6a..54db19c 100644 (file)
@@ -1256,7 +1256,7 @@ class Article implements Page {
 
                # Show error message
                $oldid = $this->getOldID();
-               if ( !$oldid && $title->getNamespace() === NS_MEDIAWIKI ) {
+               if ( !$oldid && $title->getNamespace() === NS_MEDIAWIKI && $title->hasSourceText() ) {
                        $outputPage->addParserOutput( $this->getContentObject()->getParserOutput( $title ) );
                } else {
                        if ( $oldid ) {
@@ -1270,7 +1270,13 @@ class Article implements Page {
                                $text = wfMessage( 'noarticletext-nopermission' )->plain();
                        }
 
-                       $outputPage->addWikiText( "<div class='noarticletext'>\n$text\n</div>" );
+                       $dir = $this->getContext()->getLanguage()->getDir();
+                       $lang = $this->getContext()->getLanguage()->getCode();
+                       $outputPage->addWikiText( Xml::openElement( 'div', array(
+                               'class' => "noarticletext mw-content-$dir",
+                               'dir' => $dir,
+                               'lang' => $lang,
+                       ) ) . "\n$text\n</div>" );
                }
        }
 
index 7ea4ed7..43b12b2 100644 (file)
@@ -219,6 +219,9 @@ class ImagePage extends Article {
                }
                // always show the local local Filepage.css, bug 29277
                $out->addModuleStyles( 'filepage' );
+
+               // Add MediaWiki styles for a file page
+               $out->addModuleStyles( 'mediawiki.action.view.filepage' );
        }
 
        /**
@@ -296,7 +299,7 @@ class ImagePage extends Article {
        }
 
        protected function openShowImage() {
-               global $wgEnableUploads, $wgSend404Code;
+               global $wgEnableUploads, $wgSend404Code, $wgSVGMaxSize;
 
                $this->loadFile();
                $out = $this->getContext()->getOutput();
@@ -351,7 +354,7 @@ class ImagePage extends Article {
                                        );
                                        $linktext = $this->getContext()->msg( 'show-big-image' )->escaped();
 
-                                       $thumbSizes = $this->getThumbSizes( $width, $height, $width_orig, $height_orig );
+                                       $thumbSizes = $this->getThumbSizes( $width_orig, $height_orig );
                                        # Generate thumbnails or thumbnail links as needed...
                                        $otherSizes = array();
                                        foreach ( $thumbSizes as $size ) {
@@ -361,10 +364,12 @@ class ImagePage extends Article {
                                                // the current thumbnail's size ($width/$height)
                                                // since that is added to the message separately, so
                                                // it can be denoted as the current size being shown.
-                                               // Vectorized images are "infinitely" big, so all thumb
-                                               // sizes are shown.
+                                               // Vectorized images are limited by $wgSVGMaxSize big,
+                                               // so all thumbs less than or equal that are shown.
                                                if ( ( ( $size[0] <= $width_orig && $size[1] <= $height_orig )
-                                                               || $this->displayImg->isVectorized() )
+                                                               || ( $this->displayImg->isVectorized()
+                                                                       && max( $size[0], $size[1] ) <= $wgSVGMaxSize )
+                                                       )
                                                        && $size[0] != $width && $size[1] != $height
                                                ) {
                                                        $sizeLink = $this->makeSizeLink( $params, $size[0], $size[1] );
@@ -704,7 +709,7 @@ EOT
                $out->addHTML( "<ul>\n" );
 
                # "Upload a new version of this file" link
-               $canUpload = $this->getTitle()->userCan( 'upload', $this->getContext()->getUser() );
+               $canUpload = $this->getTitle()->quickUserCan( 'upload', $this->getContext()->getUser() );
                if ( $canUpload && UploadBase::userCanReUpload(
                                $this->getContext()->getUser(),
                                $this->mPage->getFile()->name )
index f7f2528..657c4d0 100644 (file)
@@ -361,18 +361,18 @@ class WikiPage implements Page, IDBAccessObject {
                        return;
                }
 
-               if ( $from === self::READ_LOCKING ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle, array( 'FOR UPDATE' ) );
-               } elseif ( $from === self::READ_LATEST ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-               } elseif ( $from === self::READ_NORMAL ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
+               if ( is_int( $from ) ) {
+                       list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
+                       $data = $this->pageDataFromTitle( wfGetDB( $index ), $this->mTitle, $opts );
+
                        if ( !$data
+                               && $index == DB_SLAVE
                                && wfGetLB()->getServerCount() > 1
                                && wfGetLB()->hasOrMadeRecentMasterChanges()
                        ) {
                                $from = self::READ_LATEST;
-                               $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
+                               list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
+                               $data = $this->pageDataFromTitle( wfGetDB( $index ), $this->mTitle, $opts );
                        }
                } else {
                        // No idea from where the caller got this data, assume slave database.
@@ -1199,10 +1199,9 @@ class WikiPage implements Page, IDBAccessObject {
         * Best if all done inside a transaction.
         *
         * @param DatabaseBase $dbw
-        * @return int The newly created page_id key, or false if the title already existed
+        * @return int|bool The newly created page_id key; false if the title already existed
         */
        public function insertOn( $dbw ) {
-
                $page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
                $dbw->insert( 'page', array(
                        'page_id'           => $page_id,
@@ -1223,9 +1222,11 @@ class WikiPage implements Page, IDBAccessObject {
                        $newid = $dbw->insertId();
                        $this->mId = $newid;
                        $this->mTitle->resetArticleID( $newid );
-               }
 
-               return $affected ? $newid : false;
+                       return $newid;
+               } else {
+                       return false;
+               }
        }
 
        /**
@@ -2257,7 +2258,7 @@ class WikiPage implements Page, IDBAccessObject {
                if ( $options['created'] ) {
                        self::onArticleCreate( $this->mTitle );
                } elseif ( $options['changed'] ) { // bug 50785
-                       self::onArticleEdit( $this->mTitle );
+                       self::onArticleEdit( $this->mTitle, $revision );
                }
        }
 
@@ -3213,8 +3214,9 @@ class WikiPage implements Page, IDBAccessObject {
         * Purge caches on page update etc
         *
         * @param Title $title
+        * @param Revision|null $revision Revision that was just saved, may be null
         */
-       public static function onArticleEdit( Title $title ) {
+       public static function onArticleEdit( Title $title, Revision $revision = null ) {
                // Invalidate caches of articles which include this page
                DeferredUpdates::addHTMLCacheUpdate( $title, 'templatelinks' );
 
@@ -3223,10 +3225,13 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Purge squid for this page only
                $title->purgeSquid();
-
                // Clear file cache for this page only
                HTMLFileCache::clearFileCache( $title );
-               InfoAction::invalidateCache( $title );
+
+               $revid = $revision ? $revision->getId() : null;
+               DeferredUpdates::addCallableUpdate( function() use ( $title, $revid ) {
+                       InfoAction::invalidateCache( $title, $revid );
+               } );
        }
 
        /**#@-*/
index 8095539..ea619f1 100644 (file)
@@ -233,6 +233,13 @@ abstract class TablePager extends IndexPager {
                }
        }
 
+       /**
+        * @return stdClass
+        */
+       protected function getCurrentRow() {
+               return $this->mCurrentRow;
+       }
+
        /**
         * Get any extra attributes to be applied to the given cell. Don't
         * take this as an excuse to hardcode styles; use classes and
index cf8cd41..7639e2f 100644 (file)
@@ -88,9 +88,13 @@ class CoreParserFunctions {
                if ( strval( $part1 ) !== '' ) {
                        $args = array_slice( func_get_args(), 2 );
                        $message = wfMessage( $part1, $args )
-                               ->inLanguage( $parser->getOptions()->getUserLangObj() )->plain();
-
-                       return array( $message, 'noparse' => false );
+                               ->inLanguage( $parser->getOptions()->getUserLangObj() );
+                       if ( !$message->exists() ) {
+                               // When message does not exists, the message name is surrounded by angle
+                               // and can result in a tag, therefore escape the angles
+                               return $message->escaped();
+                       }
+                       return array( $message->plain(), 'noparse' => false );
                } else {
                        return array( 'found' => false );
                }
@@ -178,7 +182,9 @@ class CoreParserFunctions {
                        default:
                                $func = 'urlencode';
                }
-               return $parser->markerSkipCallback( $s, $func );
+               // See T105242, where the choice to kill markers and various
+               // other options were discussed.
+               return $func( $parser->killMarkers( $s ) );
        }
 
        public static function lcfirst( $parser, $s = '' ) {
index e29ee88..807842b 100644 (file)
  * @ingroup Parser
  */
 
-/**
- * Class used to hide mw:editsection tokens from Tidy so that it doesn't break them
- * or break on them. This is a bit of a hack for now, but hopefully in the future
- * we may create a real postprocessor or something that will replace this.
- * It's called wrapper because for now it basically takes over MWTidy::tidy's task
- * of wrapping the text in a xhtml block
- *
- * 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 {
-
-       /**
-        * @var ReplacementArray
-        */
-       protected $mTokens;
-
-       protected $mMarkerIndex;
-
-       public function __construct() {
-               $this->mTokens = null;
-       }
-
-       /**
-        * @param string $text
-        * @return string
-        */
-       public function getWrapped( $text ) {
-               $this->mTokens = new ReplacementArray;
-               $this->mMarkerIndex = 0;
-
-               // Replace <mw:editsection> elements with placeholders
-               $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
-                       array( &$this, 'replaceCallback' ), $text );
-               // ...and <mw:toc> markers
-               $wrappedtext = preg_replace_callback( '/\<\\/?mw:toc\>/',
-                       array( &$this, 'replaceCallback' ), $wrappedtext );
-               // ... and <math> tags
-               $wrappedtext = preg_replace_callback( '/\<math(.*?)\<\\/math\>/s',
-                       array( &$this, 'replaceCallback' ), $wrappedtext );
-               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
-               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
-               $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
-
-               // Wrap the whole thing in a doctype and body for Tidy.
-               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' .
-                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>' .
-                       '<head><title>test</title></head><body>' . $wrappedtext . '</body></html>';
-
-               return $wrappedtext;
-       }
-
-       /**
-        * @param array $m
-        *
-        * @return string
-        */
-       public function replaceCallback( $m ) {
-               $marker = Parser::MARKER_PREFIX . "-item-{$this->mMarkerIndex}" . Parser::MARKER_SUFFIX;
-               $this->mMarkerIndex++;
-               $this->mTokens->setPair( $marker, $m[0] );
-               return $marker;
-       }
-
-       /**
-        * @param string $text
-        * @return string
-        */
-       public function postprocess( $text ) {
-               // Revert <html-{link,meta}> back to <{link,meta}>
-               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
-
-               // Restore the contents of placeholder tokens
-               $text = $this->mTokens->replace( $text );
-
-               return $text;
-       }
-
-}
-
 /**
  * Class to interact with HTML tidy
  *
@@ -113,32 +31,24 @@ class MWTidyWrapper {
  * @ingroup Parser
  */
 class MWTidy {
+       private static $instance;
+
        /**
-        * Interface with html tidy, used if $wgUseTidy = true.
+        * Interface with html tidy.
         * If tidy isn't able to correct the markup, the original will be
         * returned in all its glory with a warning comment appended.
         *
-        * @param string $text Hideous HTML input
+        * @param string $text HTML input fragment. This should not contain a
+        *                     <body> or <html> tag.
         * @return string Corrected HTML output
         */
        public static function tidy( $text ) {
-               $wrapper = new MWTidyWrapper;
-               $wrappedtext = $wrapper->getWrapped( $text );
-
-               $retVal = null;
-               $correctedtext = self::clean( $wrappedtext, false, $retVal );
-
-               if ( $retVal < 0 ) {
-                       wfDebug( "Possible tidy configuration error!\n" );
-                       return $text . "\n<!-- Tidy was unable to run -->\n";
-               } elseif ( is_null( $correctedtext ) ) {
-                       wfDebug( "Tidy error detected!\n" );
-                       return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
+               $driver = self::singleton();
+               if ( !$driver ) {
+                       throw new MWException( __METHOD__.
+                               ': tidy is disabled, caller should have checked MWTidy::isEnabled()' );
                }
-
-               $correctedtext = $wrapper->postprocess( $correctedtext ); // restore any hidden tokens
-
-               return $correctedtext;
+               return $driver->tidy( $text );
        }
 
        /**
@@ -149,170 +59,80 @@ class MWTidy {
         * @return bool Whether the HTML is valid
         */
        public static function checkErrors( $text, &$errorStr = null ) {
-               $retval = 0;
-               $errorStr = self::clean( $text, true, $retval );
-               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+               $driver = self::singleton();
+               if ( !$driver ) {
+                       throw new MWException( __METHOD__.
+                               ': tidy is disabled, caller should have checked MWTidy::isEnabled()' );
+               }
+               if ( $driver->supportsValidate() ) {
+                       return $driver->validate( $text, $errorStr );
+               } else {
+                       throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+               }
        }
 
-       /**
-        * Perform a clean/repair operation
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return null|string
-        * @throws MWException
-        */
-       private static function clean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyInternal;
+       public static function isEnabled() {
+               return self::singleton() !== false;
+       }
 
-               if ( $wgTidyInternal ) {
-                       if ( wfIsHHVM() ) {
-                               if ( $stderr ) {
-                                       throw new MWException( __METHOD__ . ": error text return from HHVM tidy is not supported" );
+       protected static function singleton() {
+               global $wgUseTidy, $wgTidyInternal, $wgTidyConf, $wgDebugTidy, $wgTidyConfig,
+                       $wgTidyBin, $wgTidyOpts;
+
+               if ( self::$instance === null ) {
+                       if ( $wgTidyConfig !== null ) {
+                               $config = $wgTidyConfig;
+                       } elseif ( $wgUseTidy ) {
+                               // b/c configuration
+                               $config = array(
+                                       'tidyConfigFile' => $wgTidyConf,
+                                       'debugComment' => $wgDebugTidy,
+                                       'tidyBin' => $wgTidyBin,
+                                       'tidyCommandLine' => $wgTidyOpts );
+                               if ( $wgTidyInternal ) {
+                                       if ( wfIsHHVM() ) {
+                                               $config['driver'] = 'RaggettInternalHHVM';
+                                       } else {
+                                               $config['driver'] = 'RaggettInternalPHP';
+                                       }
+                               } else {
+                                       $config['driver'] = 'RaggettExternal';
                                }
-                               return self::hhvmClean( $text, $retval );
                        } else {
-                               return self::phpClean( $text, $stderr, $retval );
+                               return false;
                        }
-               } else {
-                       return self::externalClean( $text, $stderr, $retval );
-               }
-       }
-
-       /**
-        * Spawn an external HTML tidy process and get corrected markup back from it.
-        * Also called in OutputHandler.php for full page validation
-        *
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
-        */
-       private static function externalClean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyConf, $wgTidyBin, $wgTidyOpts;
-
-               $cleansource = '';
-               $opts = ' -utf8';
-
-               if ( $stderr ) {
-                       $descriptorspec = array(
-                               0 => array( 'pipe', 'r' ),
-                               1 => array( 'file', wfGetNull(), 'a' ),
-                               2 => array( 'pipe', 'w' )
-                       );
-               } else {
-                       $descriptorspec = array(
-                               0 => array( 'pipe', 'r' ),
-                               1 => array( 'pipe', 'w' ),
-                               2 => array( 'file', wfGetNull(), 'a' )
-                       );
-               }
-
-               $readpipe = $stderr ? 2 : 1;
-               $pipes = array();
-
-               $process = proc_open(
-                       "$wgTidyBin -config $wgTidyConf $wgTidyOpts$opts", $descriptorspec, $pipes );
-
-               //NOTE: At least on linux, the process will be created even if tidy is not installed.
-               //      This means that missing tidy will be treated as a validation failure.
-
-               if ( is_resource( $process ) ) {
-                       // Theoretically, this style of communication could cause a deadlock
-                       // here. If the stdout buffer fills up, then writes to stdin could
-                       // block. This doesn't appear to happen with tidy, because tidy only
-                       // writes to stdout after it's finished reading from stdin. Search
-                       // for tidyParseStdin and tidySaveStdout in console/tidy.c
-                       fwrite( $pipes[0], $text );
-                       fclose( $pipes[0] );
-                       while ( !feof( $pipes[$readpipe] ) ) {
-                               $cleansource .= fgets( $pipes[$readpipe], 1024 );
+                       switch ( $config['driver'] ) {
+                               case 'RaggettInternalHHVM':
+                                       self::$instance = new MediaWiki\Tidy\RaggettInternalHHVM( $config );
+                                       break;
+                               case 'RaggettInternalPHP':
+                                       self::$instance = new MediaWiki\Tidy\RaggettInternalPHP( $config );
+                                       break;
+                               case 'RaggettExternal':
+                                       self::$instance = new MediaWiki\Tidy\RaggettExternal( $config );
+                                       break;
+                               case 'Html5Depurate':
+                                       self::$instance = new MediaWiki\Tidy\Html5Depurate( $config );
+                                       break;
+                               default:
+                                       throw new MWException( "Invalid tidy driver: \"{$config['driver']}\"" );
                        }
-                       fclose( $pipes[$readpipe] );
-                       $retval = proc_close( $process );
-               } else {
-                       wfWarn( "Unable to start external tidy process" );
-                       $retval = -1;
                }
-
-               if ( !$stderr && $cleansource == '' && $text != '' ) {
-                       // Some kind of error happened, so we couldn't get the corrected text.
-                       // Just give up; we'll use the source text and append a warning.
-                       $cleansource = null;
-               }
-
-               return $cleansource;
+               return self::$instance;
        }
 
        /**
-        * Use the HTML tidy extension to use the tidy library in-process,
-        * saving the overhead of spawning a new process.
-        *
-        * @param string $text HTML to check
-        * @param bool $stderr Whether to read result from error status instead of output
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
+        * Set the driver to be used. This is for testing.
+        * @param TidyDriverBase|false|null $instance
         */
-       private static function phpClean( $text, $stderr = false, &$retval = null ) {
-               global $wgTidyConf, $wgDebugTidy;
-
-               if ( ( !wfIsHHVM() && !class_exists( 'tidy' ) ) ||
-                       ( wfIsHHVM() && !function_exists( 'tidy_repair_string' ) )
-               ) {
-                       wfWarn( "Unable to load internal tidy class." );
-                       $retval = -1;
-
-                       return null;
-               }
-
-               $tidy = new tidy;
-               $tidy->parseString( $text, $wgTidyConf, 'utf8' );
-
-               if ( $stderr ) {
-                       $retval = $tidy->getStatus();
-                       return $tidy->errorBuffer;
-               }
-
-               $tidy->cleanRepair();
-               $retval = $tidy->getStatus();
-               if ( $retval == 2 ) {
-                       // 2 is magic number for fatal error
-                       // http://www.php.net/manual/en/function.tidy-get-status.php
-                       $cleansource = null;
-               } else {
-                       $cleansource = tidy_get_output( $tidy );
-                       if ( $wgDebugTidy && $retval > 0 ) {
-                               $cleansource .= "<!--\nTidy reports:\n" .
-                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
-                                       "\n-->";
-                       }
-               }
-
-               return $cleansource;
+       public static function setInstance( $instance ) {
+               self::$instance = $instance;
        }
 
        /**
-        * Use the tidy extension for HHVM from
-        * https://github.com/wikimedia/mediawiki-php-tidy
-        *
-        * This currently does not support the object-oriented interface, but
-        * tidy_repair_string() can be used for the most common tasks.
-        *
-        * @param string $text HTML to check
-        * @param int &$retval Exit code (-1 on internal error)
-        * @return string|null
+        * Destroy the current singleton instance
         */
-       private static function hhvmClean( $text, &$retval ) {
-               global $wgTidyConf;
-
-               $cleansource = tidy_repair_string( $text, $wgTidyConf, 'utf8' );
-               if ( $cleansource === false ) {
-                       $cleansource = null;
-                       $retval = -1;
-               } else {
-                       $retval = 0;
-               }
-
-               return $cleansource;
+       public static function destroySingleton() {
+               self::$instance = null;
        }
 }
index 1603fc6..677da63 100644 (file)
@@ -87,7 +87,11 @@ class Parser {
        # \p{Zs} is unicode 'separator, space' category. It covers the space 0x20
        # as well as U+3000 is IDEOGRAPHIC SPACE for bug 19052
        const EXT_LINK_URL_CLASS = '[^][<>"\\x00-\\x20\\x7F\p{Zs}]';
-       const EXT_IMAGE_REGEX = '/^(http:\/\/|https:\/\/)([^][<>"\\x00-\\x20\\x7F\p{Zs}]+)
+       # Simplified expression to match an IPv4 or IPv6 address, or
+       # at least one character of a host name (embeds EXT_LINK_URL_CLASS)
+       const EXT_LINK_ADDR = '(?:[0-9.]+|\\[(?i:[0-9a-f:.]+)\\]|[^][<>"\\x00-\\x20\\x7F\p{Zs}])';
+       # RegExp to make image URLs (embeds IPv6 part of EXT_LINK_ADDR)
+       const EXT_IMAGE_REGEX = '/^(http:\/\/|https:\/\/)((?:\\[(?i:[0-9a-f:.]+)\\])?[^][<>"\\x00-\\x20\\x7F\p{Zs}]+)
                \\/([A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]+)\\.((?i)gif|png|jpg|jpeg)$/Sxu';
 
        # Regular expression for a non-newline space
@@ -254,7 +258,8 @@ class Parser {
                $this->mConf = $conf;
                $this->mUrlProtocols = wfUrlProtocols();
                $this->mExtLinkBracketedRegex = '/\[(((?i)' . $this->mUrlProtocols . ')' .
-                       self::EXT_LINK_URL_CLASS . '+)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
+                       self::EXT_LINK_ADDR .
+                       self::EXT_LINK_URL_CLASS . '*)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F]*?)\]/Su';
                if ( isset( $conf['preprocessorClass'] ) ) {
                        $this->mPreprocessorClass = $conf['preprocessorClass'];
                } elseif ( defined( 'HPHP_VERSION' ) ) {
@@ -504,6 +509,9 @@ class Parser {
                        if ( $wgShowHostnames ) {
                                $limitReport .= 'Parsed by ' . wfHostname() . "\n";
                        }
+                       $limitReport .= 'Cached time: ' . $this->mOutput->getCacheTime() . "\n";
+                       $limitReport .= 'Cache expiry: ' . $this->mOutput->getCacheExpiry() . "\n";
+                       $limitReport .= 'Dynamic content: ' . ( $this->mOutput->hasDynamicContent() ? 'true' : 'false' ) . "\n";
                        foreach ( $this->mOutput->getLimitReportData() as $key => $value ) {
                                if ( Hooks::run( 'ParserLimitReportFormat',
                                        array( $key, &$value, &$limitReport, false, false )
@@ -1023,9 +1031,10 @@ class Parser {
                        }
 
                        $first_character = $line[0];
+                       $first_two = substr( $line, 0, 2 );
                        $matches = array();
 
-                       if ( preg_match( '/^(:*)\{\|(.*)$/', $line, $matches ) ) {
+                       if ( preg_match( '/^(:*)\s*\{\|(.*)$/', $line, $matches ) ) {
                                # First check if we are starting a new table
                                $indent_level = strlen( $matches[1] );
 
@@ -1042,7 +1051,7 @@ class Parser {
                                # Don't do any of the following
                                $out .= $outLine . "\n";
                                continue;
-                       } elseif ( substr( $line, 0, 2 ) === '|}' ) {
+                       } elseif ( $first_two === '|}' ) {
                                # We are ending a table
                                $line = '</table>' . substr( $line, 2 );
                                $last_tag = array_pop( $last_tag_history );
@@ -1060,7 +1069,7 @@ class Parser {
                                }
                                array_pop( $tr_attributes );
                                $outLine = $line . str_repeat( '</dd></dl>', $indent_level );
-                       } elseif ( substr( $line, 0, 2 ) === '|-' ) {
+                       } elseif ( $first_two === '|-' ) {
                                # Now we have a table row
                                $line = preg_replace( '#^\|-+#', '', $line );
 
@@ -1089,16 +1098,16 @@ class Parser {
                                array_push( $last_tag_history, '' );
                        } elseif ( $first_character === '|'
                                || $first_character === '!'
-                               || substr( $line, 0, 2 ) === '|+'
+                               || $first_two === '|+'
                        ) {
                                # This might be cell elements, td, th or captions
-                               if ( substr( $line, 0, 2 ) === '|+' ) {
+                               if ( $first_two === '|+' ) {
                                        $first_character = '+';
+                                       $line = substr( $line, 2 );
+                               } else {
                                        $line = substr( $line, 1 );
                                }
 
-                               $line = substr( $line, 1 );
-
                                if ( $first_character === '!' ) {
                                        $line = str_replace( '!!', '||', $line );
                                }
@@ -1274,8 +1283,6 @@ class Parser {
         * @return string
         */
        private function internalParseHalfParsed( $text, $isMain = true, $linestart = true ) {
-               global $wgUseTidy, $wgAlwaysUseTidy;
-
                $text = $this->mStripState->unstripGeneral( $text );
 
                if ( $isMain ) {
@@ -1326,7 +1333,7 @@ class Parser {
 
                $text = Sanitizer::normalizeCharReferences( $text );
 
-               if ( ( $wgUseTidy && $this->mOptions->getTidy() ) || $wgAlwaysUseTidy ) {
+               if ( MWTidy::isEnabled() && $this->mOptions->getTidy() ) {
                        $text = MWTidy::tidy( $text );
                } else {
                        # attempt to sanitize at least some nesting problems
@@ -1377,20 +1384,23 @@ class Parser {
        public function doMagicLinks( $text ) {
                $prots = wfUrlProtocolsWithoutProtRel();
                $urlChar = self::EXT_LINK_URL_CLASS;
+               $addr = self::EXT_LINK_ADDR;
                $space = self::SPACE_NOT_NL; #  non-newline space
                $spdash = "(?:-|$space)"; # a dash or a non-newline space
                $spaces = "$space++"; # possessive match of 1 or more spaces
                $text = preg_replace_callback(
-                       '!(?:                           # Start cases
-                               (<a[ \t\r\n>].*?</a>) |     # m[1]: Skip link text
-                               (<.*?>) |                   # m[2]: Skip stuff inside HTML elements' . "
-                               (\b(?i:$prots)$urlChar+) |  # m[3]: Free external links
-                               \b(?:RFC|PMID) $spaces      # m[4]: RFC or PMID, capture number
+                       '!(?:                            # Start cases
+                               (<a[ \t\r\n>].*?</a>) |      # m[1]: Skip link text
+                               (<.*?>) |                    # m[2]: Skip stuff inside
+                                                            #       HTML elements' . "
+                               (\b(?i:$prots)($addr$urlChar*)) | # m[3]: Free external links
+                                                            # m[4]: Post-protocol path
+                               \b(?:RFC|PMID) $spaces       # m[5]: RFC or PMID, capture number
                                        ([0-9]+)\b |
-                               \bISBN $spaces (            # m[5]: ISBN, capture number
-                                       (?: 97[89] $spdash? )?   # optional 13-digit ISBN prefix
-                                       (?: [0-9]  $spdash? ){9} # 9 digits with opt. delimiters
-                                       [0-9Xx]                 # check digit
+                               \bISBN $spaces (             # m[6]: ISBN, capture number
+                                       (?: 97[89] $spdash? )?   #  optional 13-digit ISBN prefix
+                                       (?: [0-9]  $spdash? ){9} #  9 digits with opt. delimiters
+                                       [0-9Xx]                  #  check digit
                                )\b
                        )!xu", array( &$this, 'magicLinkCallback' ), $text );
                return $text;
@@ -1410,28 +1420,28 @@ class Parser {
                        return $m[0];
                } elseif ( isset( $m[3] ) && $m[3] !== '' ) {
                        # Free external link
-                       return $this->makeFreeExternalLink( $m[0] );
-               } elseif ( isset( $m[4] ) && $m[4] !== '' ) {
+                       return $this->makeFreeExternalLink( $m[0], strlen( $m[4] ) );
+               } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
                        # RFC or PMID
                        if ( substr( $m[0], 0, 3 ) === 'RFC' ) {
                                $keyword = 'RFC';
                                $urlmsg = 'rfcurl';
                                $cssClass = 'mw-magiclink-rfc';
-                               $id = $m[4];
+                               $id = $m[5];
                        } elseif ( substr( $m[0], 0, 4 ) === 'PMID' ) {
                                $keyword = 'PMID';
                                $urlmsg = 'pubmedurl';
                                $cssClass = 'mw-magiclink-pmid';
-                               $id = $m[4];
+                               $id = $m[5];
                        } else {
                                throw new MWException( __METHOD__ . ': unrecognised match type "' .
                                        substr( $m[0], 0, 20 ) . '"' );
                        }
                        $url = wfMessage( $urlmsg, $id )->inContentLanguage()->text();
                        return Linker::makeExternalLink( $url, "{$keyword} {$id}", true, $cssClass );
-               } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
+               } elseif ( isset( $m[6] ) && $m[6] !== '' ) {
                        # ISBN
-                       $isbn = $m[5];
+                       $isbn = $m[6];
                        $space = self::SPACE_NOT_NL; #  non-newline space
                        $isbn = preg_replace( "/$space/", ' ', $isbn );
                        $num = strtr( $isbn, array(
@@ -1452,11 +1462,12 @@ class Parser {
         * Make a free external link, given a user-supplied URL
         *
         * @param string $url
-        *
+        * @param int $numPostProto
+        *   The number of characters after the protocol.
         * @return string HTML
         * @private
         */
-       public function makeFreeExternalLink( $url ) {
+       public function makeFreeExternalLink( $url, $numPostProto ) {
 
                $trail = '';
 
@@ -1495,6 +1506,12 @@ class Parser {
                        $url = substr( $url, 0, -$numSepChars );
                }
 
+               # Verify that we still have a real URL after trail removal, and
+               # not just lone protocol
+               if ( strlen( $trail ) >= $numPostProto ) {
+                       return $url . $trail;
+               }
+
                $url = Sanitizer::cleanUrl( $url );
 
                # Is this an external image?
@@ -1612,12 +1629,10 @@ class Parser {
                                                        $firstspace = $i;
                                                }
                                        } elseif ( $x2 === ' ' ) {
-                                               if ( $firstsingleletterword == -1 ) {
-                                                       $firstsingleletterword = $i;
-                                                       // if $firstsingleletterword is set, we don't
-                                                       // look at the other options, so we can bail early.
-                                                       break;
-                                               }
+                                               $firstsingleletterword = $i;
+                                               // if $firstsingleletterword is set, we don't
+                                               // look at the other options, so we can bail early.
+                                               break;
                                        } else {
                                                if ( $firstmultiletterword == -1 ) {
                                                        $firstmultiletterword = $i;
@@ -2146,7 +2161,8 @@ class Parser {
                                $link = substr( $link, 1 );
                        }
 
-                       $nt = Title::newFromText( $this->mStripState->unstripNoWiki( $link ) );
+                       $unstrip = $this->mStripState->unstripNoWiki( $link );
+                       $nt = is_string( $unstrip ) ? Title::newFromText( $unstrip ) : null;
                        if ( $nt === null ) {
                                $s .= $prefix . '[[' . $line;
                                continue;
@@ -3308,7 +3324,8 @@ class Parser {
         */
        public function replaceVariables( $text, $frame = false, $argsOnly = false ) {
                # Is there any text? Also, Prevent too big inclusions!
-               if ( strlen( $text ) < 1 || strlen( $text ) > $this->mOptions->getMaxIncludeSize() ) {
+               $textSize = strlen( $text );
+               if ( $textSize < 1 || $textSize > $this->mOptions->getMaxIncludeSize() ) {
                        return $text;
                }
 
@@ -4554,6 +4571,12 @@ class Parser {
                                array( '', '<$1>' ),
                                $safeHeadline
                        );
+
+                       # Strip '<span></span>', which is the result from the above if
+                       # <span id="foo"></span> is used to produce an additional anchor
+                       # for a section.
+                       $tocline = str_replace( '<span></span>', '', $tocline );
+
                        $tocline = trim( $tocline );
 
                        # For the anchor, strip out HTML-y stuff period
@@ -5303,6 +5326,7 @@ class Parser {
                $ig->setParser( $this );
                $ig->setHideBadImages();
                $ig->setAttributes( Sanitizer::validateTagAttributes( $params, 'table' ) );
+               $this->getOutput()->addModuleStyles( 'mediawiki.page.gallery.styles' );
 
                if ( isset( $params['showfilename'] ) ) {
                        $ig->setShowFilename( true );
@@ -5398,9 +5422,10 @@ class Parser {
                                                case 'gallery-internal-link':
                                                        $linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
                                                        $chars = self::EXT_LINK_URL_CLASS;
+                                                       $addr = self::EXT_LINK_ADDR;
                                                        $prots = $this->mUrlProtocols;
                                                        //check to see if link matches an absolute url, if not then it must be a wiki link.
-                                                       if ( preg_match( "/^($prots)$chars+$/u", $linkValue ) ) {
+                                                       if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
                                                                $link = $linkValue;
                                                        } else {
                                                                $localLinkTitle = Title::newFromText( $linkValue );
@@ -5582,13 +5607,14 @@ class Parser {
                                                        break;
                                                case 'link':
                                                        $chars = self::EXT_LINK_URL_CLASS;
+                                                       $addr = self::EXT_LINK_ADDR;
                                                        $prots = $this->mUrlProtocols;
                                                        if ( $value === '' ) {
                                                                $paramName = 'no-link';
                                                                $value = true;
                                                                $validated = true;
                                                        } elseif ( preg_match( "/^((?i)$prots)/", $value ) ) {
-                                                               if ( preg_match( "/^((?i)$prots)$chars+$/u", $value, $m ) ) {
+                                                               if ( preg_match( "/^((?i)$prots)$addr$chars*$/u", $value, $m ) ) {
                                                                        $paramName = 'link-url';
                                                                        $this->mOutput->addExternalLink( $value );
                                                                        if ( $this->mOptions->getExternalLinkTarget() ) {
@@ -6427,4 +6453,15 @@ class Parser {
                        return $this;
                }
        }
+
+       /**
+        * Set's up the PHP implementation of OOUI for use in this request
+        * and instructs OutputPage to enable OOUI for itself.
+        *
+        * @since 1.26
+        */
+       public function enableOOUI() {
+               OutputPage::setupOOUI();
+               $this->mOutput->setEnableOOUI( true );
+       }
 }
index 44b0bc9..47fcd30 100644 (file)
@@ -26,7 +26,7 @@
  * @todo document
  */
 class ParserCache {
-       /** @var MWMemcached */
+       /** @var BagOStuff */
        private $mMemc;
        /**
         * Get an instance of this object
@@ -46,7 +46,7 @@ class ParserCache {
         * Setup a cache pathway with a given back-end storage mechanism.
         * May be a memcached client or a BagOStuff derivative.
         *
-        * @param MWMemcached $memCached
+        * @param BagOStuff $memCached
         * @throws MWException
         */
        protected function __construct( $memCached ) {
index 100656d..1073aed 100644 (file)
@@ -34,145 +34,145 @@ class ParserOptions {
        /**
         * Interlanguage links are removed and returned in an array
         */
-       public $mInterwikiMagic;
+       private $mInterwikiMagic;
 
        /**
         * Allow external images inline?
         */
-       public $mAllowExternalImages;
+       private $mAllowExternalImages;
 
        /**
         * If not, any exception?
         */
-       public $mAllowExternalImagesFrom;
+       private $mAllowExternalImagesFrom;
 
        /**
         * If not or it doesn't match, should we check an on-wiki whitelist?
         */
-       public $mEnableImageWhitelist;
+       private $mEnableImageWhitelist;
 
        /**
         * Date format index
         */
-       public $mDateFormat = null;
+       private $mDateFormat = null;
 
        /**
         * Create "edit section" links?
         */
-       public $mEditSection = true;
+       private $mEditSection = true;
 
        /**
         * Allow inclusion of special pages?
         */
-       public $mAllowSpecialInclusion;
+       private $mAllowSpecialInclusion;
 
        /**
         * Use tidy to cleanup output HTML?
         */
-       public $mTidy = false;
+       private $mTidy = false;
 
        /**
         * Which lang to call for PLURAL and GRAMMAR
         */
-       public $mInterfaceMessage = false;
+       private $mInterfaceMessage = false;
 
        /**
         * Overrides $mInterfaceMessage with arbitrary language
         */
-       public $mTargetLanguage = null;
+       private $mTargetLanguage = null;
 
        /**
         * Maximum size of template expansions, in bytes
         */
-       public $mMaxIncludeSize;
+       private $mMaxIncludeSize;
 
        /**
         * Maximum number of nodes touched by PPFrame::expand()
         */
-       public $mMaxPPNodeCount;
+       private $mMaxPPNodeCount;
 
        /**
         * Maximum number of nodes generated by Preprocessor::preprocessToObj()
         */
-       public $mMaxGeneratedPPNodeCount;
+       private $mMaxGeneratedPPNodeCount;
 
        /**
         * Maximum recursion depth in PPFrame::expand()
         */
-       public $mMaxPPExpandDepth;
+       private $mMaxPPExpandDepth;
 
        /**
         * Maximum recursion depth for templates within templates
         */
-       public $mMaxTemplateDepth;
+       private $mMaxTemplateDepth;
 
        /**
         * Maximum number of calls per parse to expensive parser functions
         */
-       public $mExpensiveParserFunctionLimit;
+       private $mExpensiveParserFunctionLimit;
 
        /**
         * Remove HTML comments. ONLY APPLIES TO PREPROCESS OPERATIONS
         */
-       public $mRemoveComments = true;
+       private $mRemoveComments = true;
 
        /**
         * Callback for current revision fetching. Used as first argument to call_user_func().
         */
-       public $mCurrentRevisionCallback =
+       private $mCurrentRevisionCallback =
                array( 'Parser', 'statelessFetchRevision' );
 
        /**
         * Callback for template fetching. Used as first argument to call_user_func().
         */
-       public $mTemplateCallback =
+       private $mTemplateCallback =
                array( 'Parser', 'statelessFetchTemplate' );
 
        /**
         * Enable limit report in an HTML comment on output
         */
-       public $mEnableLimitReport = false;
+       private $mEnableLimitReport = false;
 
        /**
         * Timestamp used for {{CURRENTDAY}} etc.
         */
-       public $mTimestamp;
+       private $mTimestamp;
 
        /**
         * Target attribute for external links
         */
-       public $mExternalLinkTarget;
+       private $mExternalLinkTarget;
 
        /**
         * Clean up signature texts?
         * @see Parser::cleanSig
         */
-       public $mCleanSignatures;
+       private $mCleanSignatures;
 
        /**
         * Transform wiki markup when saving the page?
         */
-       public $mPreSaveTransform = true;
+       private $mPreSaveTransform = true;
 
        /**
         * Whether content conversion should be disabled
         */
-       public $mDisableContentConversion;
+       private $mDisableContentConversion;
 
        /**
         * Whether title conversion should be disabled
         */
-       public $mDisableTitleConversion;
+       private $mDisableTitleConversion;
 
        /**
         * Automatically number headings?
         */
-       public $mNumberHeadings;
+       private $mNumberHeadings;
 
        /**
         * Thumb size preferred by the user.
         */
-       public $mThumbSize;
+       private $mThumbSize;
 
        /**
         * Maximum article size of an article to be marked as "stub"
@@ -182,38 +182,38 @@ class ParserOptions {
        /**
         * Language object of the User language.
         */
-       public $mUserLang;
+       private $mUserLang;
 
        /**
         * @var User
         * Stored user object
         */
-       public $mUser;
+       private $mUser;
 
        /**
         * Parsing the page for a "preview" operation?
         */
-       public $mIsPreview = false;
+       private $mIsPreview = false;
 
        /**
         * Parsing the page for a "preview" operation on a single section?
         */
-       public $mIsSectionPreview = false;
+       private $mIsSectionPreview = false;
 
        /**
         * Parsing the printable version of the page?
         */
-       public $mIsPrintable = false;
+       private $mIsPrintable = false;
 
        /**
         * Extra key that should be present in the caching key.
         */
-       public $mExtraKey = '';
+       private $mExtraKey = '';
 
        /**
         * Function to be called when an option is accessed.
         */
-       protected $onAccessCallback = null;
+       private $onAccessCallback = null;
 
        /**
         * If the page being parsed is a redirect, this should hold the redirect
@@ -372,16 +372,17 @@ class ParserOptions {
        }
 
        /**
-        * Get the user language used by the parser for this page.
+        * Get the user language used by the parser for this page and split the parser cache.
         *
-        * You shouldn't use this. Really. $parser->getFunctionLang() is all you need.
+        * @warning: Calling this causes the parser cache to be fragmented by user language!
+        * To avoid cache fragmentation, output should not depend on the user language.
+        * Use Parser::getFunctionLang() or Parser::getTargetLanguage() instead!
         *
-        * To avoid side-effects where the page will be rendered based on the language
-        * of the user who last saved, this function will triger a cache fragmentation.
-        * Usage of this method is discouraged for that reason.
-        *
-        * When saving, this will return the default language instead of the user's.
+        * @note This function will trigger a cache fragmentation by recording the
+        * 'userlang' option, see optionUsed(). This is done to avoid cache pollution
+        * when the page is rendered based on the language of the user.
         *
+        * @note When saving, this will return the default language instead of the user's.
         * {{int: }} uses this which used to produce inconsistent link tables (bug 14404).
         *
         * @return Language
@@ -395,6 +396,12 @@ class ParserOptions {
        /**
         * Same as getUserLangObj() but returns a string instead.
         *
+        * @warning: Calling this causes the parser cache to be fragmented by user language!
+        * To avoid cache fragmentation, output should not depend on the user language.
+        * Use Parser::getFunctionLang() or Parser::getTargetLanguage() instead!
+        *
+        * @see getUserLangObj()
+        *
         * @return string Language code
         * @since 1.17
         */
@@ -700,6 +707,10 @@ class ParserOptions {
 
        /**
         * Called when an option is accessed.
+        * Calls the watcher that was set using registerWatcher().
+        * Typically, the watcher callback is ParserOutput::registerOption().
+        * The information registered that way will be used by ParserCache::save().
+        *
         * @param string $optionName Name of the option
         */
        public function optionUsed( $optionName ) {
@@ -791,6 +802,10 @@ class ParserOptions {
 
                $confstr .= $wgRenderHashAppend;
 
+               // @note: as of Feb 2015, core never sets the editsection flag, since it uses
+               // <mw:editsection> tags to inject editsections on the fly. However, extensions
+               // may be using it by calling ParserOption::optionUsed resp. ParserOutput::registerOption
+               // directly. At least Wikibase does at this point in time.
                if ( !in_array( 'editsection', $forOptions ) ) {
                        $confstr .= '!*';
                } elseif ( !$this->mEditSection ) {
index 7068bd7..2eb1dc9 100644 (file)
@@ -49,7 +49,8 @@ class ParserOutput extends CacheTime {
                $mProperties = array(),       # Name/value pairs to be cached in the DB
                $mTOCHTML = '',               # HTML of the TOC
                $mTimestamp,                  # Timestamp of the revision
-               $mTOCEnabled = true;          # Whether TOC should be shown, can't override __NOTOC__
+               $mTOCEnabled = true,          # Whether TOC should be shown, can't override __NOTOC__
+               $mEnableOOUI = false;         # Whether OOUI should be enabled
        private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
        private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
        private $mExtensionData = array(); # extra data used by extensions
@@ -232,6 +233,10 @@ class ParserOutput extends CacheTime {
                return $this->mTOCEnabled;
        }
 
+       public function getEnableOOUI() {
+               return $this->mEnableOOUI;
+       }
+
        public function setText( $text ) {
                return wfSetVar( $this->mText, $text );
        }
@@ -283,6 +288,17 @@ class ParserOutput extends CacheTime {
                $this->mIndicators[$id] = $content;
        }
 
+       /**
+        * Enables OOUI, if true, in any OutputPage instance this ParserOutput
+        * object is added to.
+        *
+        * @since 1.26
+        * @param bool $enable If OOUI should be enabled or not
+        */
+       public function setEnableOOUI( $enable = false ) {
+               $this->mEnableOOUI = $enable;
+       }
+
        public function addLanguageLink( $t ) {
                $this->mLanguageLinks[] = $t;
        }
@@ -670,6 +686,8 @@ class ParserOutput extends CacheTime {
        /**
         * Tags a parser option for use in the cache key for this parser output.
         * Registered as a watcher at ParserOptions::registerWatcher() by Parser::clearState().
+        * The information gathered here is available via getUsedOptions(),
+        * and is used by ParserCache::save().
         *
         * @see ParserCache::getKey
         * @see ParserCache::save
index 718ca35..8a09be8 100644 (file)
@@ -1203,9 +1203,11 @@ class PPFrame_DOM implements PPFrame {
                                } elseif ( $contextNode->nodeName == 'comment' ) {
                                        # HTML-style comment
                                        # Remove it in HTML, pre+remove and STRIP_COMMENTS modes
-                                       if ( $this->parser->ot['html']
+                                       # Not in RECOVER_COMMENTS mode (msgnw) though.
+                                       if ( ( $this->parser->ot['html']
                                                || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() )
                                                || ( $flags & PPFrame::STRIP_COMMENTS )
+                                               ) && !( $flags & PPFrame::RECOVER_COMMENTS )
                                        ) {
                                                $out .= '';
                                        } elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
index d1ad39c..9429e44 100644 (file)
@@ -734,8 +734,12 @@ class Preprocessor_Hash implements Preprocessor {
                // Cache
                if ( $cacheable ) {
                        $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode );
-                       $wgMemc->set( $cacheKey, $cacheValue, 86400 );
-                       wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+
+                       // T111289: Cache values should not exceed 1 Mb, but they do.
+                       if ( strlen( $cacheValue ) <= 1e6 ) {
+                               $wgMemc->set( $cacheKey, $cacheValue, 86400 );
+                               wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" );
+                       }
                }
 
                return $rootNode;
@@ -1124,9 +1128,11 @@ class PPFrame_Hash implements PPFrame {
                                } elseif ( $contextNode->name == 'comment' ) {
                                        # HTML-style comment
                                        # Remove it in HTML, pre+remove and STRIP_COMMENTS modes
-                                       if ( $this->parser->ot['html']
+                                       # Not in RECOVER_COMMENTS mode (msgnw) though.
+                                       if ( ( $this->parser->ot['html']
                                                || ( $this->parser->ot['pre'] && $this->parser->mOptions->getRemoveComments() )
                                                || ( $flags & PPFrame::STRIP_COMMENTS )
+                                               ) && !( $flags & PPFrame::RECOVER_COMMENTS )
                                        ) {
                                                $out .= '';
                                        } elseif ( $this->parser->ot['wiki'] && !( $flags & PPFrame::RECOVER_COMMENTS ) ) {
index cdad9ba..80dc669 100644 (file)
@@ -67,27 +67,59 @@ class UserPasswordPolicy {
         * Check if a passwords meets the effective password policy for a User.
         * @param User $user who's policy we are checking
         * @param string $password the password to check
+        * @param string $purpose one of 'login', 'create', 'reset'
         * @return Status error to indicate the password didn't meet the policy, or fatal to
         *      indicate the user shouldn't be allowed to login.
         */
-       public function checkUserPassword( User $user, $password ) {
-               $effectivePolicy = $this->getPoliciesForUser( $user );
-               $status = Status::newGood();
+       public function checkUserPassword( User $user, $password, $purpose = 'login' ) {
+               $effectivePolicy = $this->getPoliciesForUser( $user, $purpose );
+               return $this->checkPolicies(
+                       $user,
+                       $password,
+                       $effectivePolicy,
+                       $this->policyCheckFunctions
+               );
+       }
+
+       /**
+        * Check if a passwords meets the effective password policy for a User, using a set
+        * of groups they may or may not belong to. This function does not use the DB, so can
+        * be used in the installer.
+        * @param User $user who's policy we are checking
+        * @param string $password the password to check
+        * @param array $groups list of groups to which we assume the user belongs
+        * @return Status error to indicate the password didn't meet the policy, or fatal to
+        *      indicate the user shouldn't be allowed to login.
+        */
+       public function checkUserPasswordForGroups( User $user, $password, array $groups ) {
+               $effectivePolicy = self::getPoliciesForGroups(
+                       $this->policies,
+                       $groups,
+                       $this->policies['default']
+               );
+               return $this->checkPolicies(
+                       $user,
+                       $password,
+                       $effectivePolicy,
+                       $this->policyCheckFunctions
+               );
+       }
 
-               foreach ( $effectivePolicy as $policy => $value ) {
-                       if ( !isset( $this->policyCheckFunctions[$policy] ) ) {
+       private function checkPolicies( User $user, $password, $policies, $policyCheckFunctions ) {
+               $status = Status::newGood();
+               foreach ( $policies as $policy => $value ) {
+                       if ( !isset( $policyCheckFunctions[$policy] ) ) {
                                throw new DomainException( 'Invalid password policy config' );
                        }
                        $status->merge(
                                call_user_func(
-                                       $this->policyCheckFunctions[$policy],
+                                       $policyCheckFunctions[$policy],
                                        $value,
                                        $user,
                                        $password
                                )
                        );
                }
-
                return $status;
        }
 
@@ -95,16 +127,20 @@ class UserPasswordPolicy {
         * Get the policy for a user, based on their group membership. Public so
         * UI elements can access and inform the user.
         * @param User $user
+        * @param string $purpose one of 'login', 'create', 'reset'
         * @return array the effective policy for $user
         */
-       public function getPoliciesForUser( User $user ) {
-               $effectivePolicy = self::getPoliciesForGroups(
-                       $this->policies,
-                       $user->getEffectiveGroups(),
-                       $this->policies['default']
-               );
+       public function getPoliciesForUser( User $user, $purpose = 'login' ) {
+               $effectivePolicy = $this->policies['default'];
+               if ( $purpose !== 'create' ) {
+                       $effectivePolicy = self::getPoliciesForGroups(
+                               $this->policies,
+                               $user->getEffectiveGroups(),
+                               $this->policies['default']
+                       );
+               }
 
-               Hooks::run( 'PasswordPoliciesForUser', array( $user, &$effectivePolicy ) );
+               Hooks::run( 'PasswordPoliciesForUser', array( $user, &$effectivePolicy, $purpose ) );
 
                return $effectivePolicy;
        }
index 98797a3..d7357cf 100644 (file)
@@ -76,7 +76,7 @@ class PoolCounterRedis extends PoolCounter {
        const AWAKE_ONE = 1; // wake-up if when a slot can be taken from an existing process
        const AWAKE_ALL = 2; // wake-up if an existing process finishes and wake up such others
 
-       /** @var array List of active PoolCounterRedis objects in this script */
+       /** @var PoolCounterRedis[] List of active PoolCounterRedis objects in this script */
        protected static $active = null;
 
        function __construct( $conf, $type, $key ) {
@@ -121,7 +121,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function acquireForMe() {
-
                $status = $this->precheckAcquire();
                if ( !$status->isGood() ) {
                        return $status;
@@ -131,7 +130,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function acquireForAnyone() {
-
                $status = $this->precheckAcquire();
                if ( !$status->isGood() ) {
                        return $status;
@@ -141,7 +139,6 @@ class PoolCounterRedis extends PoolCounter {
        }
 
        function release() {
-
                if ( $this->slot === null ) {
                        return Status::newGood( PoolCounter::NOT_LOCKED ); // not locked
                }
@@ -190,7 +187,7 @@ class PoolCounterRedis extends PoolCounter {
                return 1
 LUA;
                try {
-                       $res = $conn->luaEval( $script,
+                       $conn->luaEval( $script,
                                array(
                                        $this->getSlotListKey(),
                                        $this->getSlotRTimeSetKey(),
index a702d2e..d601467 100644 (file)
@@ -142,8 +142,12 @@ class PoolWorkArticleView extends PoolCounterWork {
 
                // Timing hack
                if ( $time > 3 ) {
-                       wfDebugLog( 'slow-parse', sprintf( "%-5.2f %s", $time,
-                               $this->page->getTitle()->getPrefixedDBkey() ) );
+                       // TODO: Use Parser's logger (once it has one)
+                       $logger = MediaWiki\Logger\LoggerFactory::getInstance( 'slow-parse' );
+                       $logger->info( '{time} {title}', array(
+                               'time' => number_format( $time, 2 ),
+                               'title' => $this->page->getTitle()->getPrefixedDBkey(),
+                       ) );
                }
 
                if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
index d816a01..52aa54a 100644 (file)
  */
 class ProfilerOutputStats extends ProfilerOutput {
 
-       /**
-        * Normalize a metric key for StatsD
-        *
-        * Replace occurences of '::' with dots and any other non-alphabetic
-        * characters with underscores. Combine runs of dots or underscores.
-        * Then trim leading or trailing dots or underscores.
-        *
-        * @param string $key
-        * @since 1.26
-        */
-       private static function normalizeMetricKey( $key ) {
-               $key = preg_replace( '/[:.]+/', '.', $key );
-               $key = preg_replace( '/[^a-z.]+/i', '_', $key );
-               $key = trim( $key, '_.' );
-               return str_replace( array( '._', '_.' ), '.', $key );
-       }
-
        /**
         * Flush profiling data to the current profiling context's stats buffer.
         *
         * @param array $stats
         */
        public function log( array $stats ) {
-               if ( isset( $this->params['prefix'] ) ) {
-                       $prefix = self::normalizeMetricKey( $this->params['prefix'] );
-               } else {
-                       $prefix = '';
-               }
-
+               $prefix = isset( $this->params['prefix'] ) ? $this->params['prefix'] : '';
                $contextStats = $this->collector->getContext()->getStats();
 
                foreach ( $stats as $stat ) {
-                       $key = self::normalizeMetricKey( "{$prefix}.{$stat['name']}" );
+                       $key = "{$prefix}.{$stat['name']}";
 
                        // Convert fractional seconds to whole milliseconds
                        $cpu = round( $stat['cpu'] * 1000 );
index 2f15659..f7e62ee 100644 (file)
@@ -32,7 +32,8 @@ interface RCFeedFormatter {
         * @param RecentChange $rc The RecentChange object showing what sort
         *                         of event has taken place.
         * @param string|null $actionComment
-        * @return string The text to send.
+        * @return string|null The text to send.  If the formatter returns null,
+        *  the line will not be sent.
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment );
 }
index 273e9ef..ca84a51 100644 (file)
@@ -46,6 +46,26 @@ class ExtensionProcessor implements Processor {
                'ValidSkinNames',
        );
 
+       /**
+        * Mapping of global settings to their specific merge strategies.
+        *
+        * @see ExtensionRegistry::exportExtractedData
+        * @see getExtractedInfo
+        * @var array
+        */
+       protected static $mergeStrategies = array(
+               'wgGroupPermissions' => 'array_plus_2d',
+               'wgRevokePermissions' => 'array_plus_2d',
+               'wgHooks' => 'array_merge_recursive',
+               // credits are handled in the ExtensionRegistry
+               //'wgExtensionCredits' => 'array_merge_recursive',
+               'wgExtraGenderNamespaces' => 'array_plus',
+               'wgNamespacesWithSubpages' => 'array_plus',
+               'wgNamespaceContentModels' => 'array_plus',
+               'wgNamespaceProtection' => 'array_plus',
+               'wgCapitalLinkOverrides' => 'array_plus',
+       );
+
        /**
         * Keys that are part of the extension credits
         *
@@ -156,6 +176,13 @@ class ExtensionProcessor implements Processor {
        }
 
        public function getExtractedInfo() {
+               // Make sure the merge strategies are set
+               foreach ( $this->globals as $key => $val ) {
+                       if ( isset( self::$mergeStrategies[$key] ) ) {
+                               $this->globals[$key][ExtensionRegistry::MERGE_STRATEGY] = self::$mergeStrategies[$key];
+                       }
+               }
+
                return array(
                        'globals' => $this->globals,
                        'defines' => $this->defines,
@@ -185,7 +212,7 @@ class ExtensionProcessor implements Processor {
                        foreach ( $info['namespaces'] as $ns ) {
                                $id = $ns['id'];
                                $this->defines[$ns['constant']] = $id;
-                               $this->globals['wgExtraNamespaces'][$id] = $ns['name'];
+                               $this->attributes['ExtensionNamespaces'][$id] = $ns['name'];
                                if ( isset( $ns['gender'] ) ) {
                                        $this->globals['wgExtraGenderNamespaces'][$id] = $ns['gender'];
                                }
@@ -198,6 +225,12 @@ class ExtensionProcessor implements Processor {
                                if ( isset( $ns['defaultcontentmodel'] ) ) {
                                        $this->globals['wgNamespaceContentModels'][$id] = $ns['defaultcontentmodel'];
                                }
+                               if ( isset( $ns['protection'] ) ) {
+                                       $this->globals['wgNamespaceProtection'][$id] = $ns['protection'];
+                               }
+                               if ( isset( $ns['capitallinkoverride'] ) ) {
+                                       $this->globals['wgCapitalLinkOverrides'][$id] = $ns['capitallinkoverride'];
+                               }
                        }
                }
        }
@@ -272,9 +305,15 @@ class ExtensionProcessor implements Processor {
         */
        protected function extractConfig( array $info ) {
                if ( isset( $info['config'] ) ) {
+                       if ( isset( $info['config']['_prefix'] ) ) {
+                               $prefix = $info['config']['_prefix'];
+                               unset( $info['config']['_prefix'] );
+                       } else {
+                               $prefix = 'wg';
+                       }
                        foreach ( $info['config'] as $key => $val ) {
                                if ( $key[0] !== '@' ) {
-                                       $this->globals["wg$key"] = $val;
+                                       $this->globals["$prefix$key"] = $val;
                                }
                        }
                }
index d48a1bd..f838103 100644 (file)
@@ -21,6 +21,18 @@ class ExtensionRegistry {
         */
        const OLDEST_MANIFEST_VERSION = 1;
 
+       /**
+        * Bump whenever the registration cache needs resetting
+        */
+       const CACHE_VERSION = 1;
+
+       /**
+        * Special key that defines the merge strategy
+        *
+        * @since 1.26
+        */
+       const MERGE_STRATEGY = '_merge_strategy';
+
        /**
         * @var BagOStuff
         */
@@ -69,7 +81,7 @@ class ExtensionRegistry {
                // we don't want to fail here if $wgObjectCaches is not configured
                // properly for APC setup
                try {
-                       $this->cache = ObjectCache::newAccelerator( array() );
+                       $this->cache = ObjectCache::newAccelerator();
                } catch ( MWException $e ) {
                        $this->cache = new EmptyBagOStuff();
                }
@@ -102,7 +114,7 @@ class ExtensionRegistry {
                }
 
                // See if this queue is in APC
-               $key = wfMemcKey( 'registration', md5( json_encode( $this->queued ) ) );
+               $key = wfMemcKey( 'registration', md5( json_encode( $this->queued ) ), self::CACHE_VERSION );
                $data = $this->cache->get( $key );
                if ( $data ) {
                        $this->exportExtractedData( $data );
@@ -118,6 +130,24 @@ class ExtensionRegistry {
                $this->queued = array();
        }
 
+       /**
+        * Get the current load queue. Not intended to be used
+        * outside of the installer.
+        *
+        * @return array
+        */
+       public function getQueue() {
+               return $this->queued;
+       }
+
+       /**
+        * Clear the current load queue. Not intended to be used
+        * outside of the installer.
+        */
+       public function clearQueue() {
+               $this->queued = array();
+       }
+
        /**
         * Process a queue of extensions and return their extracted data
         *
@@ -157,31 +187,54 @@ class ExtensionRegistry {
                foreach ( $data['credits'] as $credit ) {
                        $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
                }
+               $data['globals']['wgExtensionCredits'][self::MERGE_STRATEGY] = 'array_merge_recursive';
                $data['autoload'] = $autoloadClasses;
                return $data;
        }
 
        protected function exportExtractedData( array $info ) {
                foreach ( $info['globals'] as $key => $val ) {
+                       // If a merge strategy is set, read it and remove it from the value
+                       // so it doesn't accidentally end up getting set.
+                       // Need to check $val is an array for PHP 5.3 which will return
+                       // true on isset( 'string'['foo'] ).
+                       if ( isset( $val[self::MERGE_STRATEGY] ) && is_array( $val ) ) {
+                               $mergeStrategy = $val[self::MERGE_STRATEGY];
+                               unset( $val[self::MERGE_STRATEGY] );
+                       } else {
+                               $mergeStrategy = 'array_merge';
+                       }
+
+                       // Optimistic: If the global is not set, or is an empty array, replace it entirely.
+                       // Will be O(1) performance.
                        if ( !isset( $GLOBALS[$key] ) || ( is_array( $GLOBALS[$key] ) && !$GLOBALS[$key] ) ) {
                                $GLOBALS[$key] = $val;
-                       } elseif ( $key === 'wgHooks' || $key === 'wgExtensionCredits' ) {
-                               // Special case $wgHooks and $wgExtensionCredits, which require a recursive merge.
-                               // Ideally it would have been taken care of in the first if block though.
-                               $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
-                       } elseif ( $key === 'wgGroupPermissions' ) {
-                               // First merge individual groups
-                               foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
-                                       if ( isset( $val[$name] ) ) {
-                                               $groupVal += $val[$name];
-                                       }
-                               }
-                               // Now merge groups that didn't exist yet
-                               $GLOBALS[$key] += $val;
-                       } elseif ( is_array( $GLOBALS[$key] ) && is_array( $val ) ) {
-                               $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
-                       } // else case is a config setting where it has already been overriden, so don't set it
+                               continue;
+                       }
+
+                       if ( !is_array( $GLOBALS[$key] ) || !is_array( $val ) ) {
+                               // config setting that has already been overridden, don't set it
+                               continue;
+                       }
+
+                       switch ( $mergeStrategy ) {
+                               case 'array_merge_recursive':
+                                       $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
+                                       break;
+                               case 'array_plus_2d':
+                                       $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val );
+                                       break;
+                               case 'array_plus':
+                                       $GLOBALS[$key] = $val + $GLOBALS[$key];
+                                       break;
+                               case 'array_merge':
+                                       $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
+                                       break;
+                               default:
+                                       throw new UnexpectedValueException( "Unknown merge strategy '$mergeStrategy'" );
+                       }
                }
+
                foreach ( $info['defines'] as $name => $val ) {
                        define( $name, $val );
                }
index e6cb5eb..173fcc1 100644 (file)
@@ -25,6 +25,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use WrappedString\WrappedString;
 
 /**
  * Dynamic JavaScript and CSS resource loading system.
@@ -180,7 +181,7 @@ class ResourceLoader implements LoggerAwareInterface {
         * @param string $data Text to filter, such as JavaScript or CSS text
         * @param array $options For back-compat, can also be the boolean value for "cacheReport". Keys:
         *  - (bool) cache: Whether to allow caching this data. Default: true.
-        *  - (bool) cacheReport: Whether to include the "cache key" report comment. Default: true.
+        *  - (bool) cacheReport: Whether to include the "cache key" report comment. Default: false.
         * @return string Filtered data, or a comment containing an error message
         */
        public function filter( $filter, $data, $options = array() ) {
@@ -189,7 +190,8 @@ class ResourceLoader implements LoggerAwareInterface {
                        $options = array( 'cacheReport' => $options );
                }
                // Defaults
-               $options += array( 'cache' => true, 'cacheReport' => true );
+               $options += array( 'cache' => true, 'cacheReport' => false );
+               $stats = RequestContext::getMain()->getStats();
 
                // Don't filter empty content
                if ( trim( $data ) === '' ) {
@@ -204,23 +206,22 @@ class ResourceLoader implements LoggerAwareInterface {
                }
 
                if ( !$options['cache'] ) {
-                       $result = $this->applyFilter( $filter, $data );
+                       $result = self::applyFilter( $filter, $data, $this->config );
                } else {
                        $key = wfGlobalCacheKey( 'resourceloader', 'filter', $filter, self::$filterCacheVersion, md5( $data ) );
                        $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
                        $cacheEntry = $cache->get( $key );
                        if ( is_string( $cacheEntry ) ) {
-                               wfIncrStats( "resourceloader_cache.$filter.hit" );
+                               $stats->increment( "resourceloader_cache.$filter.hit" );
                                return $cacheEntry;
                        }
                        $result = '';
                        try {
-                               $stats = RequestContext::getMain()->getStats();
                                $statStart = microtime( true );
-
-                               $result = $this->applyFilter( $filter, $data );
-
-                               $stats->timing( "resourceloader_cache.$filter.miss", microtime( true ) - $statStart );
+                               $result = self::applyFilter( $filter, $data, $this->config );
+                               $statTiming = microtime( true ) - $statStart;
+                               $stats->increment( "resourceloader_cache.$filter.miss" );
+                               $stats->timing( "resourceloader_cache.$filter.timing", 1000 * $statTiming );
                                if ( $options['cacheReport'] ) {
                                        $result .= "\n/* cache key: $key */";
                                }
@@ -238,12 +239,12 @@ class ResourceLoader implements LoggerAwareInterface {
                return $result;
        }
 
-       private function applyFilter( $filter, $data ) {
+       private static function applyFilter( $filter, $data, Config $config ) {
                switch ( $filter ) {
                        case 'minify-js':
                                return JavaScriptMinifier::minify( $data,
-                                       $this->config->get( 'ResourceLoaderMinifierStatementsOnOwnLine' ),
-                                       $this->config->get( 'ResourceLoaderMinifierMaxLineLength' )
+                                       $config->get( 'ResourceLoaderMinifierStatementsOnOwnLine' ),
+                                       $config->get( 'ResourceLoaderMinifierMaxLineLength' )
                                );
                        case 'minify-css':
                                return CSSMin::minify( $data );
@@ -814,6 +815,11 @@ class ResourceLoader implements LoggerAwareInterface {
                        $exp = min( $maxage, $smaxage );
                        header( 'Expires: ' . wfTimestamp( TS_RFC2822, $exp + time() ) );
                }
+
+               // Send the current time expressed as fractional seconds since epoch,
+               // with microsecond precision. This helps distinguish hits from misses
+               // in edge caches.
+               header( 'MediaWiki-Timestamp: ' . microtime( true ) );
        }
 
        /**
@@ -934,11 +940,11 @@ class ResourceLoader implements LoggerAwareInterface {
        protected static function formatExceptionNoComment( $e ) {
                global $wgShowExceptionDetails;
 
-               if ( $wgShowExceptionDetails ) {
-                       return $e->__toString();
-               } else {
-                       return wfMessage( 'internalerror' )->text();
+               if ( !$wgShowExceptionDetails ) {
+                       return 'Internal error';
                }
+
+               return $e->__toString();
        }
 
        /**
@@ -1100,7 +1106,18 @@ MESSAGE;
                $name, $scripts, $styles, $messages, $templates
        ) {
                if ( is_string( $scripts ) ) {
-                       $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
+                       // Site and user module are a legacy scripts that run in the global scope (no closure).
+                       // Transportation as string instructs mw.loader.implement to use globalEval.
+                       if ( $name === 'site' || $name === 'user' ) {
+                               // Minify manually because the general makeModuleResponse() minification won't be
+                               // effective here due to the script being a string instead of a function. (T107377)
+                               if ( !ResourceLoader::inDebugMode() ) {
+                                       $scripts = self::applyFilter( 'minify-js', $scripts,
+                                               ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
+                               }
+                       } else {
+                               $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
+                       }
                } elseif ( !is_array( $scripts ) ) {
                        throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
                }
@@ -1363,7 +1380,7 @@ MESSAGE;
         * @return string
         */
        public static function makeLoaderConditionalScript( $script ) {
-               return "if(window.mw){\n" . trim( $script ) . "\n}";
+               return "window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n" . trim( $script ) . "\n} );";
        }
 
        /**
@@ -1373,11 +1390,15 @@ MESSAGE;
         * only if the client has adequate support for MediaWiki JavaScript code.
         *
         * @param string $script JavaScript code
-        * @return string HTML
+        * @return WrappedString HTML
         */
        public static function makeInlineScript( $script ) {
                $js = self::makeLoaderConditionalScript( $script );
-               return Html::inlineScript( $js );
+               return new WrappedString(
+                       Html::inlineScript( $js ),
+                       "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n",
+                       "\n} );</script>"
+               );
        }
 
        /**
@@ -1388,11 +1409,13 @@ MESSAGE;
         * @return string
         */
        public static function makeConfigSetScript( array $configuration ) {
-               return Xml::encodeJsCall(
-                       'mw.config.set',
-                       array( $configuration ),
-                       ResourceLoader::inDebugMode()
-               );
+               if ( ResourceLoader::inDebugMode() ) {
+                       return Xml::encodeJsCall( 'mw.config.set', array( $configuration ), true );
+               }
+
+               $config = RequestContext::getMain()->getConfig();
+               $js = Xml::encodeJsCall( 'mw.config.set', array( $configuration ), false );
+               return self::applyFilter( 'minify-js', $js, $config );
        }
 
        /**
@@ -1454,7 +1477,7 @@ MESSAGE;
         * @param string $source Name of the ResourceLoader source
         * @param ResourceLoaderContext $context
         * @param array $extraQuery
-        * @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative)
+        * @return string URL to load.php. May be protocol-relative if $wgLoadScript is, too.
         */
        public function createLoaderURL( $source, ResourceLoaderContext $context,
                $extraQuery = array()
@@ -1462,9 +1485,7 @@ MESSAGE;
                $query = self::createLoaderQuery( $context, $extraQuery );
                $script = $this->getLoadScript( $source );
 
-               // Prevent the IE6 extension check from being triggered (bug 28840)
-               // by appending a character that's invalid in Windows extensions ('*')
-               return wfExpandUrl( wfAppendQuery( $script, $query ) . '&*', PROTO_RELATIVE );
+               return wfAppendQuery( $script, $query );
        }
 
        /**
@@ -1480,7 +1501,7 @@ MESSAGE;
         * @param bool $printable Printable mode
         * @param bool $handheld Handheld mode
         * @param array $extraQuery Extra query parameters to add
-        * @return string URL to load.php. May be protocol-relative (if $wgLoadScript is procol-relative)
+        * @return string URL to load.php. May be protocol-relative if $wgLoadScript is, too.
         */
        public static function makeLoaderURL( $modules, $lang, $skin, $user = null,
                $version = null, $debug = false, $only = null, $printable = false,
@@ -1492,9 +1513,7 @@ MESSAGE;
                        $only, $printable, $handheld, $extraQuery
                );
 
-               // Prevent the IE6 extension check from being triggered (bug 28840)
-               // by appending a character that's invalid in Windows extensions ('*')
-               return wfExpandUrl( wfAppendQuery( $wgLoadScript, $query ) . '&*', PROTO_RELATIVE );
+               return wfAppendQuery( $wgLoadScript, $query );
        }
 
        /**
@@ -1606,9 +1625,6 @@ MESSAGE;
                $less->setPreserveComments( true );
                $less->setVariables( self::getLessVars( $config ) );
                $less->setImportDir( $config->get( 'ResourceLoaderLESSImportPaths' ) );
-               foreach ( $config->get( 'ResourceLoaderLESSFunctions' ) as $name => $func ) {
-                       $less->registerFunction( $name, $func );
-               }
                return $less;
        }
 
index b734def..4a4a828 100644 (file)
@@ -526,19 +526,16 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Helper method to gather file mtimes for getDefinitionSummary.
+        * Helper method to gather file hashes for getDefinitionSummary.
         *
-        * Last modified timestamps are calculated from the highest last modified
-        * timestamp of this module's constituent files as well as the files it
-        * depends on. This function is context-sensitive, only performing
-        * calculations on files relevant to the given language, skin and debug
-        * mode.
+        * This function is context-sensitive, only computing hashes of files relevant to the
+        * given language, skin, etc.
         *
         * @see ResourceLoaderModule::getFileDependencies
         * @param ResourceLoaderContext $context
         * @return array
         */
-       protected function getFileMtimes( ResourceLoaderContext $context ) {
+       protected function getFileHashes( ResourceLoaderContext $context ) {
                $files = array();
 
                // Flatten style files into $files
@@ -577,13 +574,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                // entry point Less file we already know about.
                $files = array_values( array_unique( $files ) );
 
-               // Don't max() because older files are significant.
-               // While the associated file names are significant, that is already taken care of by the
-               // definition summary. Avoid creating an array keyed by file path here because those are
-               // absolute file paths. Including that would needlessly cause global cache invalidation
-               // when the MediaWiki installation path changes (which is quite common in cases like
-               // Wikimedia where the installation path reflects the MediaWiki branch name).
-               return array_map( array( __CLASS__, 'safeFilemtime' ), $files );
+               // Don't include keys or file paths here, only the hashes. Including that would needlessly
+               // cause global cache invalidation when files move or if e.g. the MediaWiki path changes.
+               // Any significant ordering is already detected by the definition summary.
+               return array_map( array( __CLASS__, 'safeFileHash' ), $files );
        }
 
        /**
@@ -597,6 +591,14 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
                $options = array();
                foreach ( array(
+                       // The following properties are omitted because they don't affect the module reponse:
+                       // - localBasePath (Per T104950; Changes when absolute directory name changes. If
+                       //    this affects 'scripts' and other file paths, getFileHashes accounts for that.)
+                       // - remoteBasePath (Per T104950)
+                       // - dependencies (provided via startup module)
+                       // - targets
+                       // - group (provided via startup module)
+                       // - position (only used by OutputPage)
                        'scripts',
                        'debugScripts',
                        'loaderScripts',
@@ -604,17 +606,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'languageScripts',
                        'skinScripts',
                        'skinStyles',
-                       'dependencies',
                        'messages',
-                       'targets',
                        'templates',
-                       'group',
-                       'position',
                        'skipFunction',
-                       // FIXME: localBasePath includes the MediaWiki installation path and
-                       // needlessly causes cache invalidation.
-                       'localBasePath',
-                       'remoteBasePath',
                        'debugRaw',
                        'raw',
                ) as $member ) {
@@ -623,7 +617,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
                $summary[] = array(
                        'options' => $options,
-                       'fileMtimes' => $this->getFileMTimes( $context ),
+                       'fileHashes' => $this->getFileHashes( $context ),
                        'msgBlobMtime' => $this->getMsgBlobMtime( $context->getLanguage() ),
                );
                return $summary;
diff --git a/includes/resourceloader/ResourceLoaderForeignApiModule.php b/includes/resourceloader/ResourceLoaderForeignApiModule.php
new file mode 100644 (file)
index 0000000..7ed0831
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+/**
+ * ResourceLoader module for mediawiki.ForeignApi that has dynamically
+ * generated dependencies, via a hook usable by extensions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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 module for mediawiki.ForeignApi and its generated data
+ */
+class ResourceLoaderForeignApiModule extends ResourceLoaderFileModule {
+       public function getDependencies( ResourceLoaderContext $context = null ) {
+               $dependencies = $this->dependencies;
+               Hooks::run( 'ResourceLoaderForeignApiModules', array( &$dependencies, $context ) );
+               return $dependencies;
+       }
+}
index d159284..f9dfbdc 100644 (file)
@@ -48,6 +48,15 @@ class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
                return $fileScript . $dataScript;
        }
 
+       /**
+       * @param ResourceLoaderContext $context
+       * @return array
+       */
+       public function getScriptURLsForDebug( ResourceLoaderContext $context ) {
+               // Bypass file module urls
+               return ResourceLoaderModule::getScriptURLsForDebug( $context );
+       }
+
        /**
         * @return bool
         */
index 94edb36..1243f23 100644 (file)
@@ -571,9 +571,9 @@ abstract class ResourceLoaderModule {
                }
 
                $statTiming = microtime( true ) - $statStart;
-               $statName = str_replace( '.', '_', $this->getName() );
-               $stats->timing( "resourceloader_build.all", $statTiming );
-               $stats->timing( "resourceloader_build.$statName", $statTiming );
+               $statName = strtr( $this->getName(), '.', '_' );
+               $stats->timing( "resourceloader_build.all", 1000 * $statTiming );
+               $stats->timing( "resourceloader_build.$statName", 1000 * $statTiming );
 
                return $content;
        }
@@ -835,16 +835,30 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
-        * but returns 1 instead.
-        * @param string $filename File name
+        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist.
+        * Defaults to 1.
+        *
+        * @param string $filePath File path
         * @return int UNIX timestamp
         */
-       protected static function safeFilemtime( $filename ) {
+       protected static function safeFilemtime( $filePath ) {
                MediaWiki\suppressWarnings();
-               $mtime = filemtime( $filename ) ?: 1;
+               $mtime = filemtime( $filePath ) ?: 1;
                MediaWiki\restoreWarnings();
-
                return $mtime;
        }
+
+       /**
+        * Safe version of sha1_file(), which doesn't throw a PHP warning if the file doesn't exist.
+        * Defaults to empty string.
+        *
+        * @param string $filePath File path
+        * @return string Hash
+        */
+       protected static function safeFileHash( $filePath ) {
+               MediaWiki\suppressWarnings();
+               $hash = sha1_file( $filePath ) ?: '';
+               MediaWiki\restoreWarnings();
+               return $hash;
+       }
 }
index 19e0bae..380b7a5 100644 (file)
@@ -47,13 +47,4 @@ class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
                }
                return $pages;
        }
-
-       /**
-        * Get group name
-        *
-        * @return string
-        */
-       public function getGroup() {
-               return 'site';
-       }
 }
index a578ece..c704c1a 100644 (file)
@@ -88,6 +88,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgContentNamespaces' => MWNamespace::getContentNamespaces(),
                        'wgSiteName' => $conf->get( 'Sitename' ),
                        'wgDBname' => $conf->get( 'DBname' ),
+                       'wgExtraSignatureNamespaces' => $conf->get( 'ExtraSignatureNamespaces' ),
                        'wgAvailableSkins' => Skin::getSkinNames(),
                        'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ),
                        // MediaWiki sets cookies to have this prefix by default
@@ -100,6 +101,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ),
                        'wgResourceLoaderStorageVersion' => $conf->get( 'ResourceLoaderStorageVersion' ),
                        'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ),
+                       'wgResourceLoaderLegacyModules' => self::getLegacyModules(),
                );
 
                Hooks::run( 'ResourceLoaderGetConfigVars', array( &$vars ) );
@@ -187,6 +189,9 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
                $resourceLoader = $context->getResourceLoader();
                $target = $context->getRequest()->getVal( 'target', 'desktop' );
+               // Bypass target filter if this request is from a unit test context. To prevent misuse in
+               // production, this is only allowed if testing is enabled server-side.
+               $byPassTargetFilter = $this->getConfig()->get( 'EnableJavaScriptTest' ) && $target === 'test';
 
                $out = '';
                $registryData = array();
@@ -195,7 +200,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                foreach ( $resourceLoader->getModuleNames() as $name ) {
                        $module = $resourceLoader->getModule( $name );
                        $moduleTargets = $module->getTargets();
-                       if ( !in_array( $target, $moduleTargets ) ) {
+                       if ( !$byPassTargetFilter && !in_array( $target, $moduleTargets ) ) {
                                continue;
                        }
 
@@ -268,7 +273,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                }
 
                // Register modules
-               $out .= ResourceLoader::makeLoaderRegisterScript( $registrations );
+               $out .= "\n" . ResourceLoader::makeLoaderRegisterScript( $registrations );
 
                return $out;
        }
@@ -289,6 +294,20 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return array( 'jquery', 'mediawiki' );
        }
 
+       public static function getLegacyModules() {
+               global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil;
+
+               $legacyModules = array();
+               if ( $wgIncludeLegacyJavaScript ) {
+                       $legacyModules[] = 'mediawiki.legacy.wikibits';
+               }
+               if ( $wgPreloadJavaScriptMwUtil ) {
+                       $legacyModules[] = 'mediawiki.util';
+               }
+
+               return $legacyModules;
+       }
+
        /**
         * Get the load URL of the startup modules.
         *
@@ -321,40 +340,25 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
         */
        public function getScript( ResourceLoaderContext $context ) {
                global $IP;
+               if ( $context->getOnly() !== 'scripts' ) {
+                       return '/* Requires only=script */';
+               }
 
                $out = file_get_contents( "$IP/resources/src/startup.js" );
-               if ( $context->getOnly() === 'scripts' ) {
 
-                       // Startup function
-                       $configuration = $this->getConfigSettings( $context );
-                       $registrations = $this->getModuleRegistrations( $context );
+               $pairs = array_map( function ( $value ) {
+                       $value = FormatJson::encode( $value, ResourceLoader::inDebugMode(), FormatJson::ALL_OK );
                        // Fix indentation
-                       $registrations = str_replace( "\n", "\n\t", trim( $registrations ) );
-                       $mwMapJsCall = Xml::encodeJsCall(
-                               'mw.Map',
-                               array( $this->getConfig()->get( 'LegacyJavaScriptGlobals' ) )
-                       );
-                       $mwConfigSetJsCall = Xml::encodeJsCall(
-                               'mw.config.set',
-                               array( $configuration ),
-                               ResourceLoader::inDebugMode()
-                       );
-
-                       $out .= "var startUp = function () {\n" .
-                               "\tmw.config = new " .
-                               $mwMapJsCall . "\n" .
-                               "\t$registrations\n" .
-                               "\t" . $mwConfigSetJsCall .
-                               "};\n";
-
-                       // Conditional script injection
-                       $scriptTag = Html::linkedScript( self::getStartupModulesUrl( $context ) );
-                       $out .= "if ( isCompatible() ) {\n" .
-                               "\t" . Xml::encodeJsCall( 'document.write', array( $scriptTag ) ) .
-                               "\n}";
-               }
-
-               return $out;
+                       $value = str_replace( "\n", "\n\t", $value );
+                       return $value;
+               }, array(
+                       '$VARS.wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ),
+                       '$VARS.configuration' => $this->getConfigSettings( $context ),
+                       '$VARS.baseModulesUri' => self::getStartupModulesUrl( $context ),
+               ) );
+               $pairs['$CODE.registrations()'] = str_replace( "\n", "\n\t", trim( $this->getModuleRegistrations( $context ) ) );
+
+               return strtr( $out, $pairs );
        }
 
        /**
index a4d94f8..0023de2 100644 (file)
@@ -149,7 +149,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
         */
        protected function getContent( $titleText ) {
                $title = Title::newFromText( $titleText );
-               if ( !$title || $title->isRedirect() ) {
+               if ( !$title ) {
                        return null;
                }
 
index fa2423b..246f115 100644 (file)
@@ -439,7 +439,7 @@ class SearchMySQL extends SearchDatabase {
                        $sql = "SHOW GLOBAL VARIABLES LIKE 'ft\\_min\\_word\\_len'";
 
                        $dbr = wfGetDB( DB_SLAVE );
-                       $result = $dbr->query( $sql );
+                       $result = $dbr->query( $sql, __METHOD__ );
                        $row = $result->fetchObject();
                        $result->free();
 
index bda10b0..71e3b63 100644 (file)
@@ -186,7 +186,7 @@ class SearchPostgres extends SearchDatabase {
        function update( $pageid, $title, $text ) {
                ## We don't want to index older revisions
                $sql = "UPDATE pagecontent SET textvector = NULL WHERE textvector IS NOT NULL and old_id IN " .
-                               "(SELECT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
+                               "(SELECT DISTINCT rev_text_id FROM revision WHERE rev_page = " . intval( $pageid ) .
                                " ORDER BY rev_text_id DESC OFFSET 1)";
                $this->db->query( $sql );
                return true;
index 9243f12..077dbc0 100644 (file)
@@ -168,9 +168,11 @@ class CachingSiteStore implements SiteStore {
        }
 
        /**
-        * Purges the internal and external cache of the site list, forcing the list
+        * Purges the internal and external cache of the site list, forcing the list.
         * of sites to be reloaded.
         *
+        * Only use this for testing, as APC is typically used and is per-server
+        *
         * @since 1.25
         */
        public function reset() {
@@ -182,6 +184,8 @@ class CachingSiteStore implements SiteStore {
        /**
         * Clears the list of sites stored.
         *
+        * Only use this for testing, as APC is typically used and is per-server.
+        *
         * @see SiteStore::clear()
         *
         * @return bool Success
index f167584..1193bd6 100644 (file)
@@ -153,7 +153,11 @@ class DBSiteStore implements SiteStore {
        protected function loadSites() {
                $this->sites = new SiteList();
 
-               foreach ( $this->sitesTable->select() as $siteRow ) {
+               $siteRows = $this->sitesTable->select( null, array(), array(
+                       'ORDER BY' => 'site_global_key'
+               ) );
+
+               foreach ( $siteRows as $siteRow ) {
                        $this->sites[] = $this->siteFromRow( $siteRow );
                }
 
index d77f07b..e3230ff 100644 (file)
@@ -41,7 +41,7 @@ class SiteSQLStore extends CachingSiteStore {
         */
        public static function newInstance( ORMTable $sitesTable = null, BagOStuff $cache = null ) {
                if ( $cache === null ) {
-                       $cache = wfGetMainCache();
+                       $cache = wfGetCache( wfIsHHVM() ? CACHE_ACCEL : CACHE_ANYTHING );
                }
 
                $siteStore = new DBSiteStore();
index 327ef7c..53af3e7 100644 (file)
@@ -180,8 +180,7 @@ abstract class Skin extends ContextSource {
         * @return array Array of modules with helper keys for easy overriding
         */
        public function getDefaultModules() {
-               global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil, $wgUseAjax,
-                       $wgAjaxWatch, $wgEnableAPI, $wgEnableWriteAPI;
+               global $wgUseAjax, $wgAjaxWatch, $wgEnableAPI, $wgEnableWriteAPI;
 
                $out = $this->getOutput();
                $user = $out->getUser();
@@ -191,7 +190,7 @@ abstract class Skin extends ContextSource {
                                'mediawiki.page.ready',
                        ),
                        // modules that exist for legacy reasons
-                       'legacy' => array(),
+                       'legacy' => ResourceLoaderStartUpModule::getLegacyModules(),
                        // modules relating to search functionality
                        'search' => array(),
                        // modules relating to functionality relating to watching an article
@@ -199,18 +198,9 @@ abstract class Skin extends ContextSource {
                        // modules which relate to the current users preferences
                        'user' => array(),
                );
-               if ( $wgIncludeLegacyJavaScript ) {
-                       $modules['legacy'][] = 'mediawiki.legacy.wikibits';
-               }
-
-               if ( $wgPreloadJavaScriptMwUtil ) {
-                       $modules['legacy'][] = 'mediawiki.util';
-               }
 
                // Add various resources if required
                if ( $wgUseAjax ) {
-                       $modules['legacy'][] = 'mediawiki.legacy.ajax';
-
                        if ( $wgEnableAPI ) {
                                if ( $wgEnableWriteAPI && $wgAjaxWatch && $user->isLoggedIn()
                                        && $user->isAllowed( 'writeapi' )
index ae78b2c..baf9d95 100644 (file)
@@ -51,12 +51,22 @@ class SkinTemplate extends Skin {
         * @param OutputPage $out
         */
        function setupSkinUserCss( OutputPage $out ) {
-               $out->addModuleStyles( array(
+               $moduleStyles = array(
                        'mediawiki.legacy.shared',
                        'mediawiki.legacy.commonPrint',
-                       'mediawiki.ui.button',
                        'mediawiki.sectionAnchor'
-               ) );
+               );
+               if ( $out->isSyndicated() ) {
+                       $moduleStyles[] = 'mediawiki.feedlink';
+               }
+
+               // Deprecated since 1.26: Unconditional loading of mediawiki.ui.button
+               // on every page is deprecated. Express a dependency instead.
+               if ( strpos( $out->getHTML(), 'mw-ui-button' ) !== false ) {
+                       $moduleStyles[] = 'mediawiki.ui.button';
+               }
+
+               $out->addModuleStyles( $moduleStyles );
        }
 
        /**
index 9056761..42c5980 100644 (file)
@@ -96,7 +96,11 @@ abstract class FormSpecialPage extends SpecialPage {
                        $this->getMessagePrefix()
                );
                $form->setSubmitCallback( array( $this, 'onSubmit' ) );
-               $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
+               if ( $this->getDisplayFormat() !== 'ooui' ) {
+                       // No legend and wrapper by default in OOUI forms, but can be set manually
+                       // from alterForm()
+                       $form->setWrapperLegendMsg( $this->getMessagePrefix() . '-legend' );
+               }
 
                $headerMsg = $this->msg( $this->getMessagePrefix() . '-text' );
                if ( !$headerMsg->isDisabled() ) {
index 69e1d8c..3c8b742 100644 (file)
@@ -141,7 +141,7 @@ abstract class QueryPage extends SpecialPage {
         * @return array
         * @since 1.18
         */
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return null;
        }
 
@@ -178,7 +178,7 @@ abstract class QueryPage extends SpecialPage {
         * @return bool
         * @since 1.18
         */
-       function usesTimestamps() {
+       public function usesTimestamps() {
                return false;
        }
 
@@ -198,7 +198,7 @@ abstract class QueryPage extends SpecialPage {
         *
         * @return bool
         */
-       function isExpensive() {
+       public function isExpensive() {
                return $this->getConfig()->get( 'DisableQueryPages' );
        }
 
@@ -219,7 +219,7 @@ abstract class QueryPage extends SpecialPage {
         *
         * @return bool
         */
-       function isCached() {
+       public function isCached() {
                return $this->isExpensive() && $this->getConfig()->get( 'MiserMode' );
        }
 
@@ -294,7 +294,7 @@ abstract class QueryPage extends SpecialPage {
         * @throws DBError|Exception
         * @return bool|int
         */
-       function recache( $limit, $ignoreErrors = true ) {
+       public function recache( $limit, $ignoreErrors = true ) {
                if ( !$this->isCacheable() ) {
                        return 0;
                }
@@ -370,7 +370,7 @@ abstract class QueryPage extends SpecialPage {
         * @return ResultWrapper
         * @since 1.18
         */
-       function reallyDoQuery( $limit, $offset = false ) {
+       public function reallyDoQuery( $limit, $offset = false ) {
                $fname = get_class( $this ) . "::reallyDoQuery";
                $dbr = $this->getRecacheDB();
                $query = $this->getQueryInfo();
@@ -421,7 +421,7 @@ abstract class QueryPage extends SpecialPage {
         * @param int|bool $limit
         * @return ResultWrapper
         */
-       function doQuery( $offset = false, $limit = false ) {
+       public function doQuery( $offset = false, $limit = false ) {
                if ( $this->isCached() && $this->isCacheable() ) {
                        return $this->fetchFromCache( $limit, $offset );
                } else {
@@ -436,7 +436,7 @@ abstract class QueryPage extends SpecialPage {
         * @return ResultWrapper
         * @since 1.18
         */
-       function fetchFromCache( $limit, $offset = false ) {
+       public function fetchFromCache( $limit, $offset = false ) {
                $dbr = wfGetDB( DB_SLAVE );
                $options = array();
                if ( $limit !== false ) {
@@ -487,7 +487,7 @@ abstract class QueryPage extends SpecialPage {
         * real, honest-to-gosh query page.
         * @param string $par
         */
-       function execute( $par ) {
+       public function execute( $par ) {
                $user = $this->getUser();
                if ( !$this->userCanExecute( $user ) ) {
                        $this->displayRestrictionError();
index eb18b8f..65a4eb9 100644 (file)
@@ -686,4 +686,14 @@ class SpecialPage {
        protected function getGroupName() {
                return 'other';
        }
+
+       /**
+        * Call wfTransactionalTimeLimit() if this request was POSTed
+        * @since 1.26
+        */
+       protected function useTransactionalTimeLimit() {
+               if ( $this->getRequest()->wasPosted() ) {
+                       wfTransactionalTimeLimit();
+               }
+       }
 }
index 41c2f93..762658c 100644 (file)
@@ -206,7 +206,7 @@ class AllMessagesTablePager extends TablePager {
                        Xml::label( $this->msg( 'table_pager_limit_label' )->text(), 'mw-table_pager_limit_label' ) .
                        '</td>
                        <td class="mw-input">' .
-                       $this->getLimitSelect() .
+                       $this->getLimitSelect( array( 'id' => 'mw-table_pager_limit_label' ) ) .
                        '</td>
                        <tr>
                                <td></td>
@@ -445,7 +445,7 @@ class AllMessagesTablePager extends TablePager {
                } elseif ( $field === 'am_title' ) {
                        return array( 'class' => $field );
                } else {
-                       return array( 'lang' => $this->langcode, 'dir' => $this->lang->getDir(), 'class' => $field );
+                       return array( 'lang' => wfBCP47( $this->langcode ), 'dir' => $this->lang->getDir(), 'class' => $field );
                }
        }
 
index 74b1f7b..c4a67c0 100644 (file)
@@ -25,6 +25,7 @@
  * Implements Special:Allpages
  *
  * @ingroup SpecialPage
+ * @todo Rewrite using IndexPager
  */
 class SpecialAllPages extends IncludableSpecialPage {
 
@@ -179,6 +180,7 @@ class SpecialAllPages extends IncludableSpecialPage {
                $toList = $this->getNamespaceKeyAndText( $namespace, $to );
                $namespaces = $this->getContext()->getLanguage()->getNamespaces();
                $n = 0;
+               $prevTitle = null;
 
                if ( !$fromList || !$toList ) {
                        $out = $this->msg( 'allpagesbadtitle' )->parseAsBlock();
@@ -191,15 +193,13 @@ class SpecialAllPages extends IncludableSpecialPage {
                        list( , $toKey, $to ) = $toList;
 
                        $dbr = wfGetDB( DB_SLAVE );
-                       $conds = array(
-                               'page_namespace' => $namespace,
-                               'page_title >= ' . $dbr->addQuotes( $fromKey )
-                       );
-
+                       $filterConds = array( 'page_namespace' => $namespace );
                        if ( $hideredirects ) {
-                               $conds['page_is_redirect'] = 0;
+                               $filterConds['page_is_redirect'] = 0;
                        }
 
+                       $conds = $filterConds;
+                       $conds[] = 'page_title >= ' . $dbr->addQuotes( $fromKey );
                        if ( $toKey !== "" ) {
                                $conds[] = 'page_title <= ' . $dbr->addQuotes( $toKey );
                        }
@@ -234,6 +234,35 @@ class SpecialAllPages extends IncludableSpecialPage {
                        } else {
                                $out = '';
                        }
+
+                       if ( $fromKey !== '' && !$this->including() ) {
+                               # Get the first title from previous chunk
+                               $prevConds = $filterConds;
+                               $prevConds[] = 'page_title < ' . $dbr->addQuotes( $fromKey );
+                               $prevKey = $dbr->selectField(
+                                       'page',
+                                       'page_title',
+                                       $prevConds,
+                                       __METHOD__,
+                                       array( 'ORDER BY' => 'page_title DESC', 'OFFSET' => $this->maxPerPage - 1 )
+                               );
+
+                               if ( $prevKey === false ) {
+                                       # The previous chunk is not complete, need to link to the very first title
+                                       # available in the database
+                                       $prevKey = $dbr->selectField(
+                                               'page',
+                                               'page_title',
+                                               $prevConds,
+                                               __METHOD__,
+                                               array( 'ORDER BY' => 'page_title' )
+                                       );
+                               }
+
+                               if ( $prevKey !== false ) {
+                                       $prevTitle = Title::makeTitle( $namespace, $prevKey );
+                               }
+                       }
                }
 
                if ( $this->including() ) {
@@ -241,44 +270,6 @@ class SpecialAllPages extends IncludableSpecialPage {
                        return;
                }
 
-               if ( $from == '' ) {
-                       // First chunk; no previous link.
-                       $prevTitle = null;
-               } else {
-                       # Get the last title from previous chunk
-                       $dbr = wfGetDB( DB_SLAVE );
-                       $res_prev = $dbr->select(
-                               'page',
-                               'page_title',
-                               array( 'page_namespace' => $namespace, 'page_title < ' . $dbr->addQuotes( $from ) ),
-                               __METHOD__,
-                               array( 'ORDER BY' => 'page_title DESC',
-                                       'LIMIT' => $this->maxPerPage, 'OFFSET' => ( $this->maxPerPage - 1 )
-                               )
-                       );
-
-                       # Get first title of previous complete chunk
-                       if ( $dbr->numrows( $res_prev ) >= $this->maxPerPage ) {
-                               $pt = $dbr->fetchObject( $res_prev );
-                               $prevTitle = Title::makeTitle( $namespace, $pt->page_title );
-                       } else {
-                               # The previous chunk is not complete, need to link to the very first title
-                               # available in the database
-                               $options = array( 'LIMIT' => 1 );
-                               if ( !$dbr->implicitOrderby() ) {
-                                       $options['ORDER BY'] = 'page_title';
-                               }
-                               $reallyFirstPage_title = $dbr->selectField( 'page', 'page_title',
-                                       array( 'page_namespace' => $namespace ), __METHOD__, $options );
-                               # Show the previous link if it s not the current requested chunk
-                               if ( $from != $reallyFirstPage_title ) {
-                                       $prevTitle = Title::makeTitle( $namespace, $reallyFirstPage_title );
-                               } else {
-                                       $prevTitle = null;
-                               }
-                       }
-               }
-
                $self = $this->getPageTitle();
 
                $topLinks = array(
@@ -287,7 +278,7 @@ class SpecialAllPages extends IncludableSpecialPage {
                $bottomLinks = array();
 
                # Do we put a previous link ?
-               if ( $prevTitle && $pt = $prevTitle->getText() ) {
+               if ( $prevTitle ) {
                        $query = array( 'from' => $prevTitle->getText() );
 
                        if ( $namespace ) {
@@ -300,7 +291,7 @@ class SpecialAllPages extends IncludableSpecialPage {
 
                        $prevLink = Linker::linkKnown(
                                $self,
-                               $this->msg( 'prevpage', $pt )->escaped(),
+                               $this->msg( 'prevpage', $prevTitle->getText() )->escaped(),
                                array(),
                                $query
                        );
index b083032..2da24a8 100644 (file)
@@ -32,7 +32,7 @@ class AncientPagesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -40,7 +40,7 @@ class AncientPagesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'revision' ),
                        'fields' => array(
@@ -56,7 +56,7 @@ class AncientPagesPage extends QueryPage {
                );
        }
 
-       function usesTimestamps() {
+       public function usesTimestamps() {
                return true;
        }
 
index b4d4220..e0f35c6 100644 (file)
@@ -97,7 +97,6 @@ class SpecialBlock extends FormSpecialPage {
        protected function alterForm( HTMLForm $form ) {
                $form->setWrapperLegendMsg( 'blockip-legend' );
                $form->setHeaderText( '' );
-               $form->setSubmitCallback( array( __CLASS__, 'processUIForm' ) );
                $form->setSubmitDestructive();
 
                $msg = $this->alreadyBlocked ? 'ipb-change-block' : 'ipbsubmit';
@@ -597,17 +596,8 @@ class SpecialBlock extends FormSpecialPage {
        }
 
        /**
-        * Submit callback for an HTMLForm object, will simply pass
-        * @param array $data
-        * @param HTMLForm $form
-        * @return bool|string
-        */
-       public static function processUIForm( array $data, HTMLForm $form ) {
-               return self::processForm( $data, $form->getContext() );
-       }
-
-       /**
-        * Given the form data, actually implement a block
+        * Given the form data, actually implement a block. This is also called from ApiBlock.
+        *
         * @param array $data
         * @param IContextSource $context
         * @return bool|string
@@ -962,11 +952,11 @@ class SpecialBlock extends FormSpecialPage {
        /**
         * Process the form on POST submission.
         * @param array $data
+        * @param HTMLForm $form
         * @return bool|array True for success, false for didn't-try, array of errors on failure
         */
-       public function onSubmit( array $data ) {
-               // This isn't used since we need that HTMLForm that's passed in the
-               // second parameter. See alterForm for the real function
+       public function onSubmit( array $data, HTMLForm $form = null ) {
+               return self::processForm( $data, $form->getContext() );
        }
 
        /**
index 8a9aefd..9defaba 100644 (file)
@@ -65,6 +65,9 @@ class SpecialBlockList extends SpecialPage {
                        return;
                }
 
+               # setup BlockListPager here to get the actual default Limit
+               $pager = $this->getBlockListPager();
+
                # Just show the block list
                $fields = array(
                        'Target' => array(
@@ -77,11 +80,11 @@ class SpecialBlockList extends SpecialPage {
                        ),
                        'Options' => array(
                                'type' => 'multiselect',
-                               'options' => array(
-                                       $this->msg( 'blocklist-userblocks' )->text() => 'userblocks',
-                                       $this->msg( 'blocklist-tempblocks' )->text() => 'tempblocks',
-                                       $this->msg( 'blocklist-addressblocks' )->text() => 'addressblocks',
-                                       $this->msg( 'blocklist-rangeblocks' )->text() => 'rangeblocks',
+                               'options-messages' => array(
+                                       'blocklist-userblocks' => 'userblocks',
+                                       'blocklist-tempblocks' => 'tempblocks',
+                                       'blocklist-addressblocks' => 'addressblocks',
+                                       'blocklist-rangeblocks' => 'rangeblocks',
                                ),
                                'flatlist' => true,
                        ),
@@ -96,7 +99,7 @@ class SpecialBlockList extends SpecialPage {
                                        $lang->formatNum( 500 ) => 500,
                                ),
                                'name' => 'limit',
-                               'default' => 50,
+                               'default' => $pager->getLimit(),
                        ),
                );
                $context = new DerivativeContext( $this->getContext() );
@@ -109,10 +112,14 @@ class SpecialBlockList extends SpecialPage {
                $form->prepareForm();
 
                $form->displayForm( '' );
-               $this->showList();
+               $this->showList( $pager );
        }
 
-       function showList() {
+       /**
+        * Setup a new BlockListPager instance.
+        * @return BlockListPager
+        */
+       protected function getBlockListPager() {
                $conds = array();
                # Is the user allowed to see hidden blocks?
                if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
@@ -163,12 +170,20 @@ class SpecialBlockList extends SpecialPage {
                        $conds[] = "ipb_range_end = ipb_range_start";
                }
 
+               return new BlockListPager( $this, $conds );
+       }
+
+       /**
+        * Show the list of blocked accounts matching the actual filter.
+        * @param BlockListPager $pager The BlockListPager instance for this page
+        */
+       protected function showList( BlockListPager $pager ) {
+               $out = $this->getOutput();
+
                # Check for other blocks, i.e. global/tor blocks
                $otherBlockLink = array();
                Hooks::run( 'OtherBlockLogLink', array( &$otherBlockLink, $this->target ) );
 
-               $out = $this->getOutput();
-
                # Show additional header for the local block only when other blocks exists.
                # Not necessary in a standard installation without such extensions enabled
                if ( count( $otherBlockLink ) ) {
@@ -177,7 +192,6 @@ class SpecialBlockList extends SpecialPage {
                        );
                }
 
-               $pager = new BlockListPager( $this, $conds );
                if ( $pager->getNumRows() ) {
                        $out->addParserOutputContent( $pager->getFullOutput() );
                } elseif ( $this->target ) {
@@ -249,7 +263,7 @@ class BlockListPager extends TablePager {
        function formatValue( $name, $value ) {
                static $msg = null;
                if ( $msg === null ) {
-                       $msg = array(
+                       $keys = array(
                                'anononlyblock',
                                'createaccountblock',
                                'noautoblockblock',
@@ -258,17 +272,22 @@ class BlockListPager extends TablePager {
                                'unblocklink',
                                'change-blocklink',
                        );
-                       $msg = array_combine( $msg, array_map( array( $this, 'msg' ), $msg ) );
+
+                       foreach ( $keys as $key ) {
+                               $msg[$key] = $this->msg( $key )->escaped();
+                       }
                }
 
                /** @var $row object */
                $row = $this->mCurrentRow;
 
+               $language = $this->getLanguage();
+
                $formatted = '';
 
                switch ( $name ) {
                        case 'ipb_timestamp':
-                               $formatted = $this->getLanguage()->userTimeAndDate( $value, $this->getUser() );
+                               $formatted = htmlspecialchars( $language->userTimeAndDate( $value, $this->getUser() ) );
                                break;
 
                        case 'ipb_target':
@@ -294,7 +313,10 @@ class BlockListPager extends TablePager {
                                break;
 
                        case 'ipb_expiry':
-                               $formatted = $this->getLanguage()->formatExpiry( $value, /* User preference timezone */true );
+                               $formatted = htmlspecialchars( $language->formatExpiry(
+                                       $value,
+                                       /* User preference timezone */true
+                               ) );
                                if ( $this->getUser()->isAllowed( 'block' ) ) {
                                        if ( $row->ipb_auto ) {
                                                $links[] = Linker::linkKnown(
@@ -317,7 +339,7 @@ class BlockListPager extends TablePager {
                                                'span',
                                                array( 'class' => 'mw-blocklist-actions' ),
                                                $this->msg( 'parentheses' )->rawParams(
-                                                       $this->getLanguage()->pipeList( $links ) )->escaped()
+                                                       $language->pipeList( $links ) )->escaped()
                                        );
                                }
                                break;
@@ -355,7 +377,7 @@ class BlockListPager extends TablePager {
                                        $properties[] = $msg['blocklist-nousertalk'];
                                }
 
-                               $formatted = $this->getLanguage()->commaList( $properties );
+                               $formatted = $language->commaList( $properties );
                                break;
 
                        default:
index 1bbdbea..701f75f 100644 (file)
@@ -32,7 +32,7 @@ class BrokenRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -48,7 +48,7 @@ class BrokenRedirectsPage extends QueryPage {
                return $this->msg( 'brokenredirectstext' )->parseAsBlock();
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                $dbr = wfGetDB( DB_SLAVE );
 
                return array(
index 7647999..cce5da5 100644 (file)
@@ -44,22 +44,10 @@ class SpecialChangeContentModel extends FormSpecialPage {
                        // No form input yet
                        return true;
                }
-               try {
-                       $titleObj = Title::newFromTextThrow( $title );
-               } catch ( MalformedTitleException $e ) {
-                       $msg = $this->msg( $e->getErrorMessage() );
-                       $params = $e->getErrorMessageParameters();
-                       if ( $params ) {
-                               $msg->params( $params );
-                       }
-                       return $msg->parse();
-               }
-               if ( !$titleObj->canExist() ) {
-                       return $this->msg(
-                               'changecontentmodel-title-cantexist',
-                               $titleObj->getPrefixedText()
-                       )->escaped();
-               }
+
+               // Already validated by HTMLForm, but if not, throw
+               // and exception instead of a fatal
+               $titleObj = Title::newFromTextThrow( $title );
 
                $this->oldRevision = Revision::newFromTitle( $titleObj ) ?: false;
 
@@ -79,7 +67,8 @@ class SpecialChangeContentModel extends FormSpecialPage {
                $that = $this;
                $fields = array(
                        'pagetitle' => array(
-                               'type' => 'text',
+                               'type' => 'title',
+                               'creatable' => true,
                                'name' => 'pagetitle',
                                'default' => $this->par,
                                'label-message' => 'changecontentmodel-title-label',
index da1a54c..0f8b729 100644 (file)
@@ -50,10 +50,12 @@ class SpecialComparePages extends SpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
+               # Form (.mw-searchInput enables suggestions)
                $form = new HTMLForm( array(
                        'Page1' => array(
                                'type' => 'text',
                                'name' => 'page1',
+                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page1',
                                'size' => '40',
                                'section' => 'page1',
@@ -70,6 +72,7 @@ class SpecialComparePages extends SpecialPage {
                        'Page2' => array(
                                'type' => 'text',
                                'name' => 'page2',
+                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page2',
                                'size' => '40',
                                'section' => 'page2',
index b6ab112..147f67e 100644 (file)
@@ -43,6 +43,10 @@ class EmailConfirmation extends UnlistedSpecialPage {
         * @throws UserNotLoggedIn
         */
        function execute( $code ) {
+               // Ignore things like master queries/connections on GET requests.
+               // It's very convenient to just allow formless link usage.
+               Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
                $this->setHeaders();
 
                $this->checkReadOnly();
@@ -120,7 +124,7 @@ class EmailConfirmation extends UnlistedSpecialPage {
         * @param string $code Confirmation code
         */
        function attemptConfirm( $code ) {
-               $user = User::newFromConfirmationCode( $code );
+               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
                if ( !is_object( $user ) ) {
                        $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
 
@@ -151,6 +155,10 @@ class EmailInvalidation extends UnlistedSpecialPage {
        }
 
        function execute( $code ) {
+               // Ignore things like master queries/connections on GET requests.
+               // It's very convenient to just allow formless link usage.
+               Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
                $this->setHeaders();
                $this->checkReadOnly();
                $this->checkPermissions();
@@ -164,7 +172,7 @@ class EmailInvalidation extends UnlistedSpecialPage {
         * @param string $code Confirmation code
         */
        function attemptInvalidate( $code ) {
-               $user = User::newFromConfirmationCode( $code );
+               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
                if ( !is_object( $user ) ) {
                        $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
 
index 8c7f0c8..44352a7 100644 (file)
@@ -477,7 +477,7 @@ class DeletedContributionsPage extends SpecialPage {
                        if ( ( $id !== null ) || ( $id === null && IP::isIPAddress( $nt->getText() ) ) ) {
                                # Block / Change block / Unblock links
                                if ( $this->getUser()->isAllowed( 'block' ) ) {
-                                       if ( $userObj->isBlocked() ) {
+                                       if ( $userObj->isBlocked() && $userObj->getBlock()->getType() !== Block::TYPE_AUTO ) {
                                                $tools[] = Linker::linkKnown( # Change block link
                                                        SpecialPage::getTitleFor( 'Block', $nt->getDBkey() ),
                                                        $this->msg( 'change-blocklink' )->escaped()
index 47b426d..6d40985 100644 (file)
@@ -32,7 +32,7 @@ class DoubleRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -99,7 +99,7 @@ class DoubleRedirectsPage extends QueryPage {
                return $retval;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return $this->reallyGetQueryInfo();
        }
 
index f41a1f1..54f50d9 100644 (file)
@@ -349,20 +349,18 @@ class SpecialEditTags extends UnlistedSpecialPage {
        protected function getTagSelect( $selectedTags, $label ) {
                $result = array();
                $result[0] = Xml::label( $label, 'mw-edittags-tag-list' );
-               $result[1] = Xml::openElement( 'select', array(
-                       'name' => 'wpTagList[]',
-                       'id' => 'mw-edittags-tag-list',
-                       'multiple' => 'multiple',
-                       'size' => '8',
-               ) );
+
+               $select = new XmlSelect( 'wpTagList[]', 'mw-edittags-tag-list', $selectedTags );
+               $select->setAttribute( 'multiple', 'multiple' );
+               $select->setAttribute( 'size', '8' );
 
                $tags = ChangeTags::listExplicitlyDefinedTags();
                $tags = array_unique( array_merge( $tags, $selectedTags ) );
-               foreach ( $tags as $tag ) {
-                       $result[1] .= Xml::option( $tag, $tag, in_array( $tag, $selectedTags ) );
-               }
 
-               $result[1] .= Xml::closeElement( 'select' );
+               // Values of $tags are also used as <option> labels
+               $select->addOptions( array_combine( $tags, $tags ) );
+
+               $result[1] = $select->getHTML();
                return $result;
        }
 
index 910fe25..74662ae 100644 (file)
@@ -102,7 +102,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
 
                        case self::EDIT_NORMAL:
                        default:
-                       $this->executeViewEditWatchlist();
+                               $this->executeViewEditWatchlist();
                                break;
                }
        }
@@ -299,7 +299,9 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         */
        private function getWatchlist() {
                $list = array();
-               $dbr = wfGetDB( DB_MASTER );
+
+               $index = $this->getRequest()->wasPosted() ? DB_MASTER : DB_SLAVE;
+               $dbr = wfGetDB( $index );
 
                $res = $dbr->select(
                        'watchlist',
@@ -312,6 +314,7 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                );
 
                if ( $res->numRows() > 0 ) {
+                       /** @var Title[] $titles */
                        $titles = array();
                        foreach ( $res as $row ) {
                                $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
index c55fa94..1754471 100644 (file)
@@ -356,7 +356,9 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        $replyTo = null;
                }
 
-               $status = UserMailer::send( $to, $mailFrom, $subject, $text, $replyTo );
+               $status = UserMailer::send( $to, $mailFrom, $subject, $text, array(
+                       'replyTo' => $replyTo,
+               ) );
 
                if ( !$status->isGood() ) {
                        return $status;
index dc9d57c..406233b 100644 (file)
@@ -32,7 +32,7 @@ class FewestrevisionsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -40,7 +40,7 @@ class FewestrevisionsPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'revision', 'page' ),
                        'fields' => array(
index da79bb8..4c0c75f 100644 (file)
@@ -48,7 +48,7 @@ class FileDuplicateSearchPage extends QueryPage {
                return false;
        }
 
-       function isCached() {
+       public function isCached() {
                return false;
        }
 
@@ -82,7 +82,7 @@ class FileDuplicateSearchPage extends QueryPage {
                $this->getOutput()->addHtml( implode( "\n", $html ) );
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'image' ),
                        'fields' => array(
@@ -95,7 +95,7 @@ class FileDuplicateSearchPage extends QueryPage {
                );
        }
 
-       function execute( $par ) {
+       public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
 
index f9b8ac3..4cdf6dd 100644 (file)
@@ -57,6 +57,8 @@ class SpecialImport extends SpecialPage {
         * @throws ReadOnlyError
         */
        function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $this->setHeaders();
                $this->outputHeader();
 
index d330b0e..fbdefea 100644 (file)
@@ -44,6 +44,11 @@ class SpecialJavaScriptTest extends SpecialPage {
 
                if ( $par === null ) {
                        // No framework specified
+                       // If only one framework is configured, redirect to it. Otherwise display a list.
+                       if ( count( self::$frameworks ) === 1 ) {
+                               $out->redirect( $this->getPageTitle( self::$frameworks[0] . '/plain' )->getLocalURL() );
+                               return;
+                       }
                        $out->setStatusCode( 404 );
                        $out->setPageTitle( $this->msg( 'javascripttest' ) );
                        $out->addHTML(
@@ -74,10 +79,14 @@ class SpecialJavaScriptTest extends SpecialPage {
                // no sensitive data. In order to allow TestSwarm to embed it into a test client window,
                // we need to allow iframing of this page.
                $out->allowClickjacking();
-               $out->setSubtitle(
-                       $this->msg( 'javascripttest-backlink' )
-                               ->rawParams( Linker::linkKnown( $this->getPageTitle() ) )
-               );
+               if ( count( self::$frameworks ) !== 1 ) {
+                       // If there's only one framework, don't set the subtitle since it
+                       // is going to redirect back to this page
+                       $out->setSubtitle(
+                               $this->msg( 'javascripttest-backlink' )
+                                       ->rawParams( Linker::linkKnown( $this->getPageTitle() ) )
+                       );
+               }
 
                // Custom actions
                if ( isset( $pars[1] ) ) {
@@ -134,13 +143,15 @@ class SpecialJavaScriptTest extends SpecialPage {
        }
 
        /**
-        * Wrap HTML contents in a summary container.
+        * Get summary text wrapped in a container
         *
-        * @param string $html HTML contents to be wrapped
         * @return string HTML
         */
-       private function wrapSummaryHtml( $html ) {
-               return "<div id=\"mw-javascripttest-summary\">$html</div>";
+       private function getSummaryHtml() {
+               $summary = $this->msg( 'javascripttest-qunit-intro' )
+                       ->params( 'https://www.mediawiki.org/wiki/Manual:JavaScript_unit_testing' )
+                       ->parseAsBlock();
+               return "<div id=\"mw-javascripttest-summary\">$summary</div>";
        }
 
        /**
@@ -153,17 +164,13 @@ class SpecialJavaScriptTest extends SpecialPage {
 
                $modules = $out->getResourceLoader()->getTestModuleNames( 'qunit' );
 
-               $summary = $this->msg( 'javascripttest-qunit-intro' )
-                       ->params( 'https://www.mediawiki.org/wiki/Manual:JavaScript_unit_testing' )
-                       ->parseAsBlock();
-
                $baseHtml = <<<HTML
 <div class="mw-content-ltr">
 <div id="qunit"></div>
 </div>
 HTML;
 
-               $out->addHtml( $this->wrapSummaryHtml( $summary ) . $baseHtml );
+               $out->addHtml( $this->getSummaryHtml() . $baseHtml );
 
                // The testrunner configures QUnit and essentially depends on it. However, test suites
                // are reusable in environments that preload QUnit (or a compatibility interface to
@@ -198,13 +205,27 @@ HTML;
                        'lang' => $this->getLanguage()->getCode(),
                        'skin' => $this->getSkin()->getSkinName(),
                        'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
+                       'target' => 'test',
                );
                $embedContext = new ResourceLoaderContext( $rl, new FauxRequest( $query ) );
                $query['only'] = 'scripts';
                $startupContext = new ResourceLoaderContext( $rl, new FauxRequest( $query ) );
 
+               $query['raw'] = true;
+
                $modules = $rl->getTestModuleNames( 'qunit' );
 
+               // Disable autostart because we load modules asynchronously. By default, QUnit would start
+               // at domready when there are no tests loaded and also fire 'QUnit.done' which then instructs
+               // Karma to end the run before the tests even started.
+               $qunitConfig = 'QUnit.config.autostart = false;'
+                       . 'if (window.__karma__) {'
+                       // karma-qunit's use of autostart=false and QUnit.start conflicts with ours.
+                       // Hack around this by replacing 'karma.loaded' with a no-op and call it ourselves later.
+                       // See <https://github.com/karma-runner/karma-qunit/issues/27>.
+                       . 'window.__karma__.loaded = function () {};'
+                       . '}';
+
                // The below is essentially a pure-javascript version of OutputPage::getHeadScripts.
                $startup = $rl->makeModuleResponse( $startupContext, array(
                        'startup' => $rl->getModule( 'startup' ),
@@ -218,43 +239,54 @@ HTML;
                        'user.options' => $rl->getModule( 'user.options' ),
                        'user.tokens' => $rl->getModule( 'user.tokens' ),
                ) );
-               $code .= Xml::encodeJsCall( 'mw.loader.load', array( $modules ) );
+               // Catch exceptions (such as "dependency missing" or "unknown module") so that we
+               // always start QUnit. Re-throw so that they are caught and reported as global exceptions
+               // by QUnit and Karma.
+               $code .= '(function () {'
+                       . 'var start = window.__karma__ ? window.__karma__.start : QUnit.start;'
+                       . 'try {'
+                       . 'mw.loader.using( ' . Xml::encodeJsVar( $modules ) . ' ).always( start );'
+                       . '} catch ( e ) { start(); throw e; }'
+                       . '}());';
 
                header( 'Content-Type: text/javascript; charset=utf-8' );
                header( 'Cache-Control: private, no-cache, must-revalidate' );
                header( 'Pragma: no-cache' );
+               echo $qunitConfig;
                echo $startup;
-               echo "\n";
-               // Note: The following has to be wrapped in a script tag because the startup module also
-               // writes a script tag (the one loading mediawiki.js). Script tags are synchronous, block
-               // each other, and run in order. But they don't nest. The code appended after the startup
-               // module runs before the added script tag is parsed and executed.
-               echo Xml::encodeJsCall( 'document.write', array( Html::inlineScript( $code ) ) );
+               // The following has to be deferred via RLQ because the startup module is asynchronous.
+               echo ResourceLoader::makeLoaderConditionalScript( $code );
        }
 
        private function plainQUnit() {
                $out = $this->getOutput();
                $out->disable();
 
-               $url = $this->getPageTitle( 'qunit/export' )->getFullURL( array(
-                       'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
-               ) );
-
-               $styles = $out->makeResourceLoaderLink(
-                       'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false
+               $styles = $out->makeResourceLoaderLink( 'jquery.qunit',
+                       ResourceLoaderModule::TYPE_STYLES
                );
-               // Use 'raw' since this is a plain HTML page without ResourceLoader
-               $scripts = $out->makeResourceLoaderLink(
-                       'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' )
+
+               // Use 'raw' because QUnit loads before ResourceLoader initialises (omit mw.loader.state call)
+               // Use 'test' to ensure OutputPage doesn't use the "async" attribute because QUnit must
+               // load before qunit/export.
+               $scripts = $out->makeResourceLoaderLink( 'jquery.qunit',
+                       ResourceLoaderModule::TYPE_SCRIPTS,
+                       array( 'raw' => true, 'sync' => true )
                );
 
-               $head = trim( $styles['html'] . $scripts['html'] );
+               $head = implode( "\n", array_merge( $styles['html'], $scripts['html'] ) );
+               $summary = $this->getSummaryHtml();
                $html = <<<HTML
 <!DOCTYPE html>
 <title>QUnit</title>
 $head
+$summary
 <div id="qunit"></div>
 HTML;
+
+               $url = $this->getPageTitle( 'qunit/export' )->getFullURL( array(
+                       'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
+               ) );
                $html .= "\n" . Html::linkedScript( $url );
 
                header( 'Content-Type: text/html; charset=utf-8' );
index 7ffaf48..f474867 100644 (file)
@@ -80,7 +80,7 @@ class LinkSearchPage extends QueryPage {
                return false;
        }
 
-       function execute( $par ) {
+       public function execute( $par ) {
                $this->initServices();
 
                $this->setHeaders();
@@ -91,7 +91,7 @@ class LinkSearchPage extends QueryPage {
 
                $request = $this->getRequest();
                $target = $request->getVal( 'target', $par );
-               $namespace = $request->getIntOrNull( 'namespace', null );
+               $namespace = $request->getIntOrNull( 'namespace' );
 
                $protocols_list = array();
                foreach ( $this->getConfig()->get( 'UrlProtocols' ) as $prot ) {
@@ -135,7 +135,7 @@ class LinkSearchPage extends QueryPage {
                if ( !$this->getConfig()->get( 'MiserMode' ) ) {
                        $fields += array(
                                'namespace' => array(
-                                       'class' => 'HTMLSelectNamespace',
+                                       'type' => 'namespaceselect',
                                        'name' => 'namespace',
                                        'label-message' => 'linksearch-ns',
                                        'default' => $namespace,
@@ -148,7 +148,7 @@ class LinkSearchPage extends QueryPage {
                $hiddenFields = array(
                        'title' => $this->getPageTitle()->getPrefixedDBkey(),
                );
-               $htmlForm = HTMLForm::factory( 'inline', $fields, $this->getContext() );
+               $htmlForm = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
                $htmlForm->addHiddenFields( $hiddenFields );
                $htmlForm->setSubmitTextMsg( 'linksearch-ok' );
                $htmlForm->setWrapperLegendMsg( 'linksearch' );
@@ -218,7 +218,7 @@ class LinkSearchPage extends QueryPage {
                return $params;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                $dbr = wfGetDB( DB_SLAVE );
                // strip everything past first wildcard, so that
                // index-based-only lookup would be done
index 1e3dff6..317b62f 100644 (file)
@@ -34,7 +34,7 @@ class ListDuplicatedFilesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -53,7 +53,7 @@ class ListDuplicatedFilesPage extends QueryPage {
         * with however we are doing cached special pages.
         * @return array
         */
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'image' ),
                        'fields' => array(
index 2df4834..fa94b4a 100644 (file)
@@ -33,7 +33,7 @@ class ListredirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -45,7 +45,7 @@ class ListredirectsPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'p1' => 'page', 'redirect', 'p2' => 'page' ),
                        'fields' => array( 'namespace' => 'p1.page_namespace',
index 56c4eb5..31200c8 100644 (file)
@@ -263,6 +263,8 @@ class UsersPager extends AlphabeticPager {
        function getPageHeader() {
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
 
+               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
+
                # Form tag
                $out = Xml::openElement(
                        'form',
@@ -271,13 +273,14 @@ class UsersPager extends AlphabeticPager {
                        Xml::fieldset( $this->msg( 'listusers' )->text() ) .
                        Html::hidden( 'title', $self );
 
-               # Username field
+               # Username field (with autocompletion support)
                $out .= Xml::label( $this->msg( 'listusersfrom' )->text(), 'offset' ) . ' ' .
                        Html::input(
                                'username',
                                $this->requestedUser,
                                'text',
                                array(
+                                       'class' => 'mw-autocomplete-user',
                                        'id' => 'offset',
                                        'size' => 20,
                                        'autofocus' => $this->requestedUser === ''
@@ -285,13 +288,14 @@ class UsersPager extends AlphabeticPager {
                        ) . ' ';
 
                # Group drop-down list
-               $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' ' .
-                       Xml::openElement( 'select', array( 'name' => 'group', 'id' => 'group' ) ) .
-                       Xml::option( $this->msg( 'group-all' )->text(), '' );
+               $sel = new XmlSelect( 'group', 'group', $this->requestedGroup );
+               $sel->addOption( $this->msg( 'group-all' )->text(), '' );
                foreach ( $this->getAllGroups() as $group => $groupText ) {
-                       $out .= Xml::option( $groupText, $group, $group == $this->requestedGroup );
+                       $sel->addOption( $groupText, $group );
                }
-               $out .= Xml::closeElement( 'select' ) . '<br />';
+
+               $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' ';
+               $out .= $sel->getHTML() . '<br />';
                $out .= Xml::checkLabel(
                        $this->msg( 'listusers-editsonly' )->text(),
                        'editsOnly',
index 6c7133f..32344a8 100644 (file)
@@ -34,8 +34,8 @@ class MIMEsearchPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
-               return false;
+       public function isExpensive() {
+               return true;
        }
 
        function isSyndicated() {
@@ -123,7 +123,7 @@ class MIMEsearchPage extends QueryPage {
                                        Xml::closeElement( 'form' );
        }
 
-       function execute( $par ) {
+       public function execute( $par ) {
                $this->mime = $par ? $par : $this->getRequest()->getText( 'mime' );
                $this->mime = trim( $this->mime );
                list( $this->major, $this->minor ) = File::splitMime( $this->mime );
index 7a7979c..e5ba8c6 100644 (file)
@@ -36,7 +36,7 @@ class MediaStatisticsPage extends QueryPage {
                $this->shownavigation = false;
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
index 1f0b6d4..7edf961 100644 (file)
@@ -109,6 +109,8 @@ class SpecialMergeHistory extends SpecialPage {
        }
 
        public function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $this->checkPermissions();
                $this->checkReadOnly();
 
index c70bbdb..18083f6 100644 (file)
@@ -34,7 +34,7 @@ class MostcategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -42,7 +42,7 @@ class MostcategoriesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'categorylinks', 'page' ),
                        'fields' => array(
index ab3d9c9..b07b833 100644 (file)
@@ -34,7 +34,7 @@ class MostinterwikisPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -42,7 +42,7 @@ class MostinterwikisPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array(
                                'langlinks',
index ae0b070..019df49 100644 (file)
@@ -35,7 +35,7 @@ class MostlinkedPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -43,7 +43,7 @@ class MostlinkedPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'pagelinks', 'page' ),
                        'fields' => array(
index cc718e0..6eeab91 100644 (file)
@@ -38,7 +38,7 @@ class MostlinkedCategoriesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'category' ),
                        'fields' => array( 'title' => 'cat_title',
index ae1fefe..8091f1b 100644 (file)
@@ -28,7 +28,7 @@
  */
 class MovePageForm extends UnlistedSpecialPage {
        /** @var Title */
-       protected $oldTitle;
+       protected $oldTitle = null;
 
        /** @var Title */
        protected $newTitle;
@@ -64,6 +64,8 @@ class MovePageForm extends UnlistedSpecialPage {
        }
 
        public function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $this->checkReadOnly();
 
                $this->setHeaders();
@@ -75,9 +77,12 @@ class MovePageForm extends UnlistedSpecialPage {
                // Yes, the use of getVal() and getText() is wanted, see bug 20365
 
                $oldTitleText = $request->getVal( 'wpOldTitle', $target );
-               $this->oldTitle = Title::newFromText( $oldTitleText );
+               if ( is_string( $oldTitleText ) ) {
+                       $this->oldTitle = Title::newFromText( $oldTitleText );
+               }
 
-               if ( is_null( $this->oldTitle ) ) {
+               if ( $this->oldTitle === null ) {
+                       // Either oldTitle wasn't passed, or newFromText returned null
                        throw new ErrorPageError( 'notargettitle', 'notargettext' );
                }
                if ( !$this->oldTitle->exists() ) {
@@ -99,7 +104,9 @@ class MovePageForm extends UnlistedSpecialPage {
                $permErrors = $this->oldTitle->getUserPermissionsErrors( 'move', $user );
                if ( count( $permErrors ) ) {
                        // Auto-block user's IP if the account was "hard" blocked
-                       $user->spreadAnyEditBlock();
+                       DeferredUpdates::addCallableUpdate( function() use ( $user ) {
+                               $user->spreadAnyEditBlock();
+                       } );
                        throw new PermissionsError( 'move', $permErrors );
                }
 
@@ -140,6 +147,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'move-page', $this->oldTitle->getPrefixedText() ) );
                $out->addModules( 'mediawiki.special.movePage' );
+               $out->addModuleStyles( 'mediawiki.special.movePage.styles' );
                $this->addHelpLink( 'Help:Moving a page' );
 
                $newTitle = $this->newTitle;
@@ -283,7 +291,6 @@ class MovePageForm extends UnlistedSpecialPage {
                // is enforced in the mediawiki.special.movePage module
 
                $immovableNamespaces = array();
-
                foreach ( array_keys( $this->getLanguage()->getNamespaces() ) as $nsId ) {
                        if ( !MWNamespace::isMovable( $nsId ) ) {
                                $immovableNamespaces[] = $nsId;
@@ -292,202 +299,207 @@ class MovePageForm extends UnlistedSpecialPage {
 
                $handler = ContentHandler::getForTitle( $this->oldTitle );
 
-               $out->addHTML(
-                       Xml::openElement(
-                               'form',
-                               array(
-                                       'method' => 'post',
-                                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
-                                       'id' => 'movepage'
-                               )
-                       ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) )
+               $out->enableOOUI();
+               $fields = array();
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\LabelWidget( array(
+                               'label' => new OOUI\HtmlSnippet( "<strong>$oldTitleLink</strong>" )
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movearticle' )->text(),
+                               'align' => 'top',
+                       )
                );
 
-               $out->addHTML(
-                       "<tr>
-                               <td class='mw-label'>" .
-                                       $this->msg( 'movearticle' )->escaped() .
-                               "</td>
-                               <td class='mw-input'>
-                                       <strong>{$oldTitleLink}</strong>
-                               </td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'newtitle' )->text(), 'wpNewTitleMain' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Html::namespaceSelector(
-                                               array(
-                                                       'selected' => $newTitle->getNamespace(),
-                                                       'exclude' => $immovableNamespaces
-                                               ),
-                                               array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
-                                       ) .
-                                       Xml::input(
-                                               'wpNewTitleMain',
-                                               60,
-                                               $wgContLang->recodeForEdit( $newTitle->getText() ),
-                                               array(
-                                                       'type' => 'text',
-                                                       'id' => 'wpNewTitleMain',
-                                                       'maxlength' => 255
-                                               )
-                                       ) .
-                                       Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
-                               "</td>
-                       </tr>
-                       <tr>
-                               <td class='mw-label'>" .
-                                       Xml::label( $this->msg( 'movereason' )->text(), 'wpReason' ) .
-                               "</td>
-                               <td class='mw-input'>" .
-                                       Xml::input( 'wpReason', 60, $this->reason, array(
-                                               'type' => 'text',
-                                               'id' => 'wpReason',
-                                               'maxlength' => 200,
-                                       ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new MediaWiki\Widget\ComplexTitleInputWidget( array(
+                               'id' => 'wpNewTitle',
+                               'namespace' => array(
+                                       'id' => 'wpNewTitleNs',
+                                       'name' => 'wpNewTitleNs',
+                                       'value' => $newTitle->getNamespace(),
+                                       'exclude' => $immovableNamespaces,
+                               ),
+                               'title' => array(
+                                       'id' => 'wpNewTitleMain',
+                                       'name' => 'wpNewTitleMain',
+                                       'value' => $wgContLang->recodeForEdit( $newTitle->getText() ),
+                                       // Inappropriate, since we're expecting the user to input a non-existent page's title
+                                       'suggestions' => false,
+                               ),
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'newtitle' )->text(),
+                               'align' => 'top',
+                       )
+               );
+
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\TextInputWidget( array(
+                               'name' => 'wpReason',
+                               'id' => 'wpReason',
+                               'maxLength' => 200,
+                               'infusable' => true,
+                       ) ),
+                       array(
+                               'label' => $this->msg( 'movereason' )->text(),
+                               'align' => 'top',
+                       )
                );
 
                if ( $considerTalk ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'movetalk' )->text(),
-                                                       'wpMovetalk',
-                                                       'wpMovetalk',
-                                                       $this->moveTalk
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovetalk',
+                                       'id' => 'wpMovetalk',
+                                       'value' => '1',
+                                       'selected' => $this->moveTalk,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'movetalk' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $user->isAllowed( 'suppressredirect' ) ) {
                        if ( $handler->supportsRedirects() ) {
                                $isChecked = $this->leaveRedirect;
-                               $options = array();
+                               $isDisabled = false;
                        } else {
                                $isChecked = false;
-                               $options = array(
-                                       'disabled' => 'disabled'
-                               );
+                               $isDisabled = true;
                        }
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-leave-redirect' )->text(),
-                                                       'wpLeaveRedirect',
-                                                       'wpLeaveRedirect',
-                                                       $isChecked,
-                                                       $options
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpLeaveRedirect',
+                                       'id' => 'wpLeaveRedirect',
+                                       'value' => '1',
+                                       'selected' => $isChecked,
+                                       'disabled' => $isDisabled,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-leave-redirect' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $hasRedirects ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'fix-double-redirects' )->text(),
-                                                       'wpFixRedirects',
-                                                       'wpFixRedirects',
-                                                       $this->fixRedirects
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpFixRedirects',
+                                       'id' => 'wpFixRedirects',
+                                       'value' => '1',
+                                       'selected' => $this->fixRedirects,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'fix-double-redirects' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $canMoveSubpage ) {
                        $maximumMovedPages = $this->getConfig()->get( 'MaximumMovedPages' );
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::check(
-                                                       'wpMovesubpages',
-                                                       # Don't check the box if we only have talk subpages to
-                                                       # move and we aren't moving the talk page.
-                                                       $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
-                                                       array( 'id' => 'wpMovesubpages' )
-                                               ) . '&#160;' .
-                                               Xml::tags(
-                                                       'label',
-                                                       array( 'for' => 'wpMovesubpages' ),
-                                                       $this->msg(
-                                                               ( $this->oldTitle->hasSubpages()
-                                                                       ? 'move-subpages'
-                                                                       : 'move-talk-subpages' )
-                                                       )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpMovesubpages',
+                                       'id' => 'wpMovesubpages',
+                                       'value' => '1',
+                                       # Don't check the box if we only have talk subpages to
+                                       # move and we aren't moving the talk page.
+                                       'selected' => $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
+                               ) ),
+                               array(
+                                       'label' => new OOUI\HtmlSnippet(
+                                               $this->msg(
+                                                       ( $this->oldTitle->hasSubpages()
+                                                               ? 'move-subpages'
+                                                               : 'move-talk-subpages' )
+                                               )->numParams( $maximumMovedPages )->params( $maximumMovedPages )->parse()
+                                       ),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
-                       || $user->isWatched( $this->oldTitle ) );
                # Don't allow watching if user is not logged in
                if ( $user->isLoggedIn() ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'move-watch' )->text(),
-                                                       'wpWatch',
-                                                       'watch',
-                                                       $watchChecked
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpWatch',
+                                       'id' => 'watch', # ew
+                                       'value' => '1',
+                                       'selected' => $watchChecked,
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'move-watch' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
                if ( $confirm ) {
-                       $out->addHTML( "
-                               <tr>
-                                       <td></td>
-                                       <td class='mw-input'>" .
-                                               Xml::checkLabel(
-                                                       $this->msg( 'delete_and_move_confirm' )->text(),
-                                                       'wpConfirm',
-                                                       'wpConfirm'
-                                               ) .
-                                       "</td>
-                               </tr>"
+                       $watchChecked = $user->isLoggedIn() && ( $this->watch || $user->getBoolOption( 'watchmoves' )
+                               || $user->isWatched( $this->oldTitle ) );
+                       $fields[] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( array(
+                                       'name' => 'wpConfirm',
+                                       'id' => 'wpConfirm',
+                                       'value' => '1',
+                               ) ),
+                               array(
+                                       'label' => $this->msg( 'delete_and_move_confirm' )->text(),
+                                       'align' => 'inline',
+                               )
                        );
                }
 
-               $out->addHTML( "
-                       <tr>
-                               <td></td>
-                               <td class='mw-submit'>" .
-                                       Xml::submitButton( $movepagebtn, array( 'name' => $submitVar ) ) .
-                               "</td>
-                       </tr>"
+               $fields[] = new OOUI\FieldLayout(
+                       new OOUI\ButtonInputWidget( array(
+                               'name' => $submitVar,
+                               'value' => $movepagebtn,
+                               'label' => $movepagebtn,
+                               'flags' => array( 'progressive', 'primary' ),
+                               'type' => 'submit',
+                       ) ),
+                       array(
+                               'align' => 'top',
+                       )
+               );
+
+               $fieldset = new OOUI\FieldsetLayout( array(
+                       'label' => $this->msg( 'move-page-legend' )->text(),
+                       'id' => 'mw-movepage-table',
+                       'items' => $fields,
+               ) );
+
+               $form = new OOUI\FormLayout( array(
+                       'method' => 'post',
+                       'action' => $this->getPageTitle()->getLocalURL( 'action=submit' ),
+                       'id' => 'movepage',
+               ) );
+               $form->appendContent(
+                       $fieldset,
+                       new OOUI\HtmlSnippet(
+                               Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
+                               Html::hidden( 'wpEditToken', $user->getEditToken() )
+                       )
                );
 
                $out->addHTML(
-                       Xml::closeElement( 'table' ) .
-                       Html::hidden( 'wpEditToken', $user->getEditToken() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' ) .
-                       "\n"
+                       new OOUI\PanelLayout( array(
+                               'classes' => array( 'movepage-wrapper' ),
+                               'expanded' => false,
+                               'padded' => true,
+                               'framed' => true,
+                               'content' => $form,
+                       ) )
                );
 
                $this->showLogFragment( $this->oldTitle );
index 670a397..f211ec9 100644 (file)
@@ -40,7 +40,7 @@ class SpecialPagesWithProp extends QueryPage {
                return false;
        }
 
-       function execute( $par ) {
+       public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
                $this->getOutput()->addModuleStyles( 'mediawiki.special.pagesWithProp' );
@@ -100,7 +100,7 @@ class SpecialPagesWithProp extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page_props', 'page' ),
                        'fields' => array(
@@ -113,9 +113,11 @@ class SpecialPagesWithProp extends QueryPage {
                                'pp_value',
                        ),
                        'conds' => array(
-                               'page_id = pp_page',
                                'pp_propname' => $this->propName,
                        ),
+                       'join_conds' => array(
+                               'page' => array( 'INNER JOIN', 'page_id = pp_page' )
+                       ),
                        'options' => array()
                );
        }
index 7371da7..4b75e5f 100644 (file)
@@ -50,7 +50,14 @@ class SpecialPreferences extends SpecialPage {
 
                if ( $this->getRequest()->getCheck( 'success' ) ) {
                        $out->wrapWikiMsg(
-                               "<div class=\"successbox\">\n$1\n</div>",
+                               Html::rawElement(
+                                       'div',
+                                       array(
+                                               'class' => 'mw-preferences-messagebox successbox',
+                                               'id' => 'mw-preferences-success'
+                                       ),
+                                       Html::element( 'p', array(), '$1' )
+                               ),
                                'savedprefs'
                        );
                }
index e21eaeb..7cf6b0a 100644 (file)
@@ -70,15 +70,15 @@ class SpecialRandomInCategory extends FormSpecialPage {
        protected function getFormFields() {
                $this->addHelpLink( 'Help:RandomInCategory' );
 
-               $form = array(
+               return array(
                        'category' => array(
-                               'type' => 'text',
+                               'type' => 'title',
+                               'namespace' => NS_CATEGORY,
+                               'relative' => true,
                                'label-message' => 'randomincategory-category',
                                'required' => true,
                        )
                );
-
-               return $form;
        }
 
        public function requiresWrite() {
@@ -89,6 +89,10 @@ class SpecialRandomInCategory extends FormSpecialPage {
                return false;
        }
 
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
+
        protected function alterForm( HTMLForm $form ) {
                $form->setSubmitTextMsg( 'randomincategory-submit' );
        }
index 73a88b9..9f7ef66 100644 (file)
@@ -135,20 +135,26 @@ class RandomPage extends SpecialPage {
 
        protected function getQueryInfo( $randstr ) {
                $redirect = $this->isRedirect() ? 1 : 0;
+               $tables = array( 'page' );
+               $conds = array_merge( array(
+                       'page_namespace' => $this->namespaces,
+                       'page_is_redirect' => $redirect,
+                       'page_random >= ' . $randstr
+               ), $this->extra );
+               $joinConds = array();
+
+               // Allow extensions to modify the query
+               Hooks::run( 'RandomPageQuery', array( &$tables, &$conds, &$joinConds ) );
 
                return array(
-                       'tables' => array( 'page' ),
+                       'tables' => $tables,
                        'fields' => array( 'page_title', 'page_namespace' ),
-                       'conds' => array_merge( array(
-                               'page_namespace' => $this->namespaces,
-                               'page_is_redirect' => $redirect,
-                               'page_random >= ' . $randstr
-                       ), $this->extra ),
+                       'conds' => $conds,
                        'options' => array(
                                'ORDER BY' => 'page_random',
                                'LIMIT' => 1,
                        ),
-                       'join_conds' => array()
+                       'join_conds' => $joinConds
                );
        }
 
index 27a3a69..cba5a44 100644 (file)
@@ -25,6 +25,7 @@
  * Let users reset tokens like the watchlist token.
  *
  * @ingroup SpecialPage
+ * @deprecated 1.26
  */
 class SpecialResetTokens extends FormSpecialPage {
        private $tokensList;
index 77ebac3..7c27ac4 100644 (file)
@@ -110,6 +110,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
        }
 
        public function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $this->checkPermissions();
                $this->checkReadOnly();
 
index bc1bb3d..af2dc94 100644 (file)
@@ -68,6 +68,11 @@ class SpecialSearch extends SpecialPage {
         */
        protected $fulltext;
 
+       /**
+        * @var bool
+        */
+       protected $runSuggestion = true;
+
        const NAMESPACES_CURRENT = 'sense';
 
        public function __construct() {
@@ -169,6 +174,7 @@ class SpecialSearch extends SpecialPage {
                }
 
                $this->fulltext = $request->getVal( 'fulltext' );
+               $this->runSuggestion = (bool)$request->getVal( 'runsuggestion', true );
                $this->profile = $profile;
        }
 
@@ -214,7 +220,6 @@ class SpecialSearch extends SpecialPage {
                $search->setNamespaces( $this->namespaces );
                $search->prefix = $this->mPrefix;
                $term = $search->transformSearchTerm( $term );
-               $didYouMeanHtml = '';
 
                Hooks::run( 'SpecialSearchSetupEngine', array( $this, $this->profile, $search ) );
 
@@ -265,37 +270,17 @@ class SpecialSearch extends SpecialPage {
                }
 
                // did you mean... suggestions
-               if ( $showSuggestion && $textMatches && !$textStatus && $textMatches->hasSuggestion() ) {
-                       # mirror Go/Search behavior of original request ..
-                       $didYouMeanParams = array( 'search' => $textMatches->getSuggestionQuery() );
-
-                       if ( $this->fulltext != null ) {
-                               $didYouMeanParams['fulltext'] = $this->fulltext;
-                       }
-
-                       $stParams = array_merge(
-                               $didYouMeanParams,
-                               $this->powerSearchOptions()
-                       );
-
-                       $suggestionSnippet = $textMatches->getSuggestionSnippet();
-
-                       if ( $suggestionSnippet == '' ) {
-                               $suggestionSnippet = null;
+               $didYouMeanHtml = '';
+               if ( $showSuggestion && $textMatches && !$textStatus ) {
+                       if ( $this->shouldRunSuggestedQuery( $textMatches ) ) {
+                               $newMatches = $search->searchText( $textMatches->getSuggestionQuery() );
+                               if ( $newMatches instanceof SearchResultSet && $newMatches->numRows() > 0 ) {
+                                       $didYouMeanHtml = $this->getDidYouMeanRewrittenHtml( $term, $textMatches );
+                                       $textMatches = $newMatches;
+                               }
+                       } elseif ( $textMatches->hasSuggestion() ) {
+                               $didYouMeanHtml = $this->getDidYouMeanHtml( $textMatches );
                        }
-
-                       $suggestLink = Linker::linkKnown(
-                               $this->getPageTitle(),
-                               $suggestionSnippet,
-                               array(),
-                               $stParams
-                       );
-
-                       # html of did you mean... search suggestion link
-                       $didYouMeanHtml =
-                               Xml::openElement( 'div', array( 'class' => 'searchdidyoumean' ) ) .
-                               $this->msg( 'search-suggest' )->rawParams( $suggestLink )->text() .
-                               Xml::closeElement( 'div' );
                }
 
                if ( !Hooks::run( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
@@ -405,16 +390,108 @@ class SpecialSearch extends SpecialPage {
                                $this->showCreateLink( $title, $num, $titleMatches, $textMatches );
                        }
                }
-               $out->addHtml( "</div>" );
 
                if ( $prevnext ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
 
+               $out->addHtml( "</div>" );
+
                Hooks::run( 'SpecialSearchResultsAppend', array( $this, $out ) );
 
        }
 
+       /**
+        * Decide if the suggested query should be run, and it's results returned
+        * instead of the provided $textMatches
+        *
+        * @param SearchResultSet $textMatches The results of a users query
+        * @return bool
+        */
+       protected function shouldRunSuggestedQuery( SearchResultSet $textMatches ) {
+               if ( !$this->runSuggestion ||
+                       !$textMatches->hasSuggestion() ||
+                       $textMatches->numRows() > 0 ||
+                       $textMatches->searchContainedSyntax()
+               ) {
+                       return false;
+               }
+
+               // Generate a random number between 0 and 1. If the
+               // number is less than the desired percentages run it.
+               $rand = rand( 0, getrandmax() ) / getrandmax();
+               return $this->getConfig()->get( 'SearchRunSuggestedQueryPercent' ) > $rand;
+       }
+
+       /**
+        * Generates HTML shown to the user when we have a suggestion about a query
+        * that might give more results than their current query.
+        */
+       protected function getDidYouMeanHtml( SearchResultSet $textMatches ) {
+               # mirror Go/Search behavior of original request ..
+               $params = array( 'search' => $textMatches->getSuggestionQuery() );
+               if ( $this->fulltext != null ) {
+                       $params['fulltext'] = $this->fulltext;
+               }
+               $stParams = array_merge( $params, $this->powerSearchOptions() );
+
+               $suggest = Linker::linkKnown(
+                       $this->getPageTitle(),
+                       $textMatches->getSuggestionSnippet() ?: null,
+                       array(),
+                       $stParams
+               );
+
+               # html of did you mean... search suggestion link
+               return Html::rawElement(
+                       'div',
+                       array( 'class' => 'searchdidyoumean' ),
+                       $this->msg( 'search-suggest' )->rawParams( $suggest )->parse()
+               );
+       }
+
+       /**
+        * Generates HTML shown to user when their query has been internally rewritten,
+        * and the results of the rewritten query are being returned.
+        *
+        * @param string $term The users search input
+        * @param SearchResultSet $textMatches The response to the users initial search request
+        * @return string HTML linking the user to their original $term query, and the one
+        *  suggested by $textMatches.
+        */
+       protected function getDidYouMeanRewrittenHtml( $term, SearchResultSet $textMatches ) {
+               // Showing results for '$rewritten'
+               // Search instead for '$orig'
+
+               $params = array( 'search' => $textMatches->getSuggestionQuery() );
+               if ( $this->fulltext != null ) {
+                       $params['fulltext'] = $this->fulltext;
+               }
+               $stParams = array_merge( $params, $this->powerSearchOptions() );
+
+               $rewritten = Linker::linkKnown(
+                       $this->getPageTitle(),
+                       $textMatches->getSuggestionSnippet() ?: null,
+                       array(),
+                       $stParams
+               );
+
+               $stParams['search'] = $term;
+               $stParams['runsuggestion'] = 0;
+               $original = Linker::linkKnown(
+                       $this->getPageTitle(),
+                       htmlspecialchars( $term ),
+                       array(),
+                       $stParams
+               );
+
+               return Html::rawElement(
+                       'div',
+                       array( 'class' => 'searchdidyoumean' ),
+                       $this->msg( 'search-rewritten' )->rawParams( $rewritten, $original )->escaped()
+               );
+       }
+
        /**
         * @param Title $title
         * @param int $num The number of search results found
index 7ec69e0..ba11862 100644 (file)
@@ -37,7 +37,7 @@ class ShortPagesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page' ),
                        'fields' => array(
index 652ea82..8de6f8b 100644 (file)
@@ -107,11 +107,11 @@ class SpecialStatistics extends SpecialPage {
        ) {
                if ( $descMsg ) {
                        $msg = $this->msg( $descMsg, $descMsgParam );
-                       if ( $msg->exists() ) {
-                               $descriptionText = $this->msg( 'parentheses' )->rawParams( $msg->parse() )
+                       if ( !$msg->isDisabled() ) {
+                               $descriptionHtml = $this->msg( 'parentheses' )->rawParams( $msg->parse() )
                                        ->escaped();
-                               $text .= "<br />" . Xml::element( 'small', array( 'class' => 'mw-statistic-desc' ),
-                                       " $descriptionText" );
+                               $text .= "<br />" . Html::rawElement( 'small', array( 'class' => 'mw-statistic-desc' ),
+                                       " $descriptionHtml" );
                        }
                }
 
@@ -134,7 +134,8 @@ class SpecialStatistics extends SpecialPage {
                                $this->formatRow( Linker::linkKnown( SpecialPage::getTitleFor( 'Allpages' ),
                                        $this->msg( 'statistics-articles' )->parse() ),
                                        $this->getLanguage()->formatNum( $this->good ),
-                                       array( 'class' => 'mw-statistics-articles' ) ) .
+                                       array( 'class' => 'mw-statistics-articles' ),
+                                       'statistics-articles-desc' ) .
                                $this->formatRow( $this->msg( 'statistics-pages' )->parse(),
                                        $this->getLanguage()->formatNum( $this->total ),
                                        array( 'class' => 'mw-statistics-pages' ),
index a6847e1..70eee9f 100644 (file)
@@ -216,15 +216,17 @@ class SpecialTags extends SpecialPage {
                $newRow .= Xml::tags( 'td', null, $this->msg( $activeMsg )->escaped() );
 
                $hitcountLabel = $this->msg( 'tags-hitcount' )->numParams( $hitcount )->escaped();
-               $hitcountLink = Linker::link(
-                       SpecialPage::getTitleFor( 'Recentchanges' ),
-                       $hitcountLabel,
-                       array(),
-                       array( 'tagfilter' => $tag )
-               );
+               if ( $this->getConfig()->get( 'UseTagFilter' ) ) {
+                       $hitcountLabel = Linker::link(
+                               SpecialPage::getTitleFor( 'Recentchanges' ),
+                               $hitcountLabel,
+                               array(),
+                               array( 'tagfilter' => $tag )
+                       );
+               }
 
                // add raw $hitcount for sorting, because tags-hitcount contains numbers and letters
-               $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLink );
+               $newRow .= Xml::tags( 'td', array( 'data-sort-value' => $hitcount ), $hitcountLabel );
 
                // actions
                if ( $showActions ) { // we've already checked that the user had the requisite userright
index 5732ef9..a66a3d1 100644 (file)
@@ -149,7 +149,8 @@ class PageArchive {
                        $fields,
                        $conds,
                        $join_conds,
-                       $options
+                       $options,
+                       ''
                );
 
                return $dbr->select( $tables,
@@ -770,6 +771,8 @@ class SpecialUndelete extends SpecialPage {
        }
 
        function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $user = $this->getUser();
 
                $this->setHeaders();
@@ -998,7 +1001,7 @@ class SpecialUndelete extends SpecialPage {
                        return;
                }
 
-               if ( $this->mPreview || !$isText ) {
+               if ( ( $this->mPreview || !$isText ) && $content ) {
                        // NOTE: non-text content has no source view, so always use rendered preview
 
                        // Hide [edit]s
index 713823b..0d3216c 100644 (file)
@@ -29,7 +29,7 @@ class UnusedCategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -37,7 +37,7 @@ class UnusedCategoriesPage extends QueryPage {
                return $this->msg( 'unusedcategoriestext' )->parseAsBlock();
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'categorylinks' ),
                        'fields' => array(
index 0c2b870..33444f6 100644 (file)
@@ -34,7 +34,7 @@ class UnusedtemplatesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -46,7 +46,7 @@ class UnusedtemplatesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'templatelinks' ),
                        'fields' => array(
index bb07c19..b3ca006 100644 (file)
@@ -35,7 +35,7 @@ class UnwatchedpagesPage extends QueryPage {
                parent::__construct( $name, 'unwatchedpages' );
        }
 
-       function isExpensive() {
+       public function isExpensive() {
                return true;
        }
 
@@ -43,7 +43,7 @@ class UnwatchedpagesPage extends QueryPage {
                return false;
        }
 
-       function getQueryInfo() {
+       public function getQueryInfo() {
                return array(
                        'tables' => array( 'page', 'watchlist' ),
                        'fields' => array(
index 6b0bf41..10d55b2 100644 (file)
@@ -152,6 +152,8 @@ class SpecialUpload extends SpecialPage {
         * @throws UserBlockedError
         */
        public function execute( $par ) {
+               $this->useTransactionalTimeLimit();
+
                $this->setHeaders();
                $this->outputHeader();
 
@@ -357,7 +359,7 @@ class SpecialUpload extends SpecialPage {
                $sessionKey = $this->mUpload->stashSession();
 
                $warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
-                       . '<ul class="warning">';
+                       . '<div class="warningbox"><ul>';
                foreach ( $warnings as $warning => $args ) {
                        if ( $warning == 'badfilename' ) {
                                $this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
@@ -385,7 +387,7 @@ class SpecialUpload extends SpecialPage {
                        }
                        $warningHtml .= $msg;
                }
-               $warningHtml .= "</ul>\n";
+               $warningHtml .= "</ul></div>\n";
                $warningHtml .= $this->msg( 'uploadwarning-text' )->parseAsBlock();
 
                $form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
index ad329d3..dd90590 100644 (file)
@@ -58,6 +58,8 @@ class SpecialUploadStash extends UnlistedSpecialPage {
         * @return bool Success
         */
        public function execute( $subPage ) {
+               $this->useTransactionalTimeLimit();
+
                $this->stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
                $this->checkPermissions();
 
index 472fdb7..0410ef0 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup SpecialPage
  */
+use MediaWiki\Logger\LoggerFactory;
 
 /**
  * Implements Special:UserLogin
@@ -43,6 +44,24 @@ class LoginForm extends SpecialPage {
        const WRONG_TOKEN = 13;
        const USER_MIGRATED = 14;
 
+       public static $statusCodes = array(
+               self::SUCCESS => 'success',
+               self::NO_NAME => 'no_name',
+               self::ILLEGAL => 'illegal',
+               self::WRONG_PLUGIN_PASS => 'wrong_plugin_pass',
+               self::NOT_EXISTS => 'not_exists',
+               self::WRONG_PASS => 'wrong_pass',
+               self::EMPTY_PASS => 'empty_pass',
+               self::RESET_PASS => 'reset_pass',
+               self::ABORTED => 'aborted',
+               self::CREATE_BLOCKED => 'create_blocked',
+               self::THROTTLED => 'throttled',
+               self::USER_BLOCKED => 'user_blocked',
+               self::NEED_TOKEN => 'need_token',
+               self::WRONG_TOKEN => 'wrong_token',
+               self::USER_MIGRATED => 'user_migrated',
+       );
+
        /**
         * Valid error and warning messages
         *
@@ -338,6 +357,10 @@ class LoginForm extends SpecialPage {
                }
 
                $status = $this->addNewAccountInternal();
+               LoggerFactory::getInstance( 'authmanager' )->info( 'Account creation attempt with mailed password', array(
+                       'event' => 'accountcreation',
+                       'status' => $status,
+               ) );
                if ( !$status->isGood() ) {
                        $error = $status->getMessage();
                        $this->mainLoginForm( $error->toString() );
@@ -375,6 +398,11 @@ class LoginForm extends SpecialPage {
 
                # Create the account and abort if there's a problem doing so
                $status = $this->addNewAccountInternal();
+               LoggerFactory::getInstance( 'authmanager' )->info( 'Account creation attempt', array(
+                       'event' => 'accountcreation',
+                       'status' => $status,
+               ) );
+
                if ( !$status->isGood() ) {
                        $error = $status->getMessage();
                        $this->mainLoginForm( $error->toString() );
@@ -529,9 +557,15 @@ class LoginForm extends SpecialPage {
 
                # Now create a dummy user ($u) and check if it is valid
                $u = User::newFromName( $this->mUsername, 'creatable' );
-               if ( !is_object( $u ) ) {
+               if ( !$u ) {
                        return Status::newFatal( 'noname' );
-               } elseif ( 0 != $u->idForName() ) {
+               }
+
+               # Make sure the user does not exist already
+               $lock = $wgMemc->getScopedLock( wfGlobalCacheKey( 'account', md5( $this->mUsername ) ) );
+               if ( !$lock ) {
+                       return Status::newFatal( 'usernameinprogress' );
+               } elseif ( $u->idForName( User::READ_LOCKING ) ) {
                        return Status::newFatal( 'userexists' );
                }
 
@@ -545,7 +579,7 @@ class LoginForm extends SpecialPage {
                        }
 
                        # check for password validity, return a fatal Status if invalid
-                       $validity = $u->checkPasswordValidity( $this->mPassword );
+                       $validity = $u->checkPasswordValidity( $this->mPassword, 'create' );
                        if ( !$validity->isGood() ) {
                                $validity->ok = false; // make sure this Status is fatal
                                return $validity;
@@ -911,7 +945,8 @@ class LoginForm extends SpecialPage {
                global $wgMemc, $wgLang, $wgSecureLogin, $wgPasswordAttemptThrottle,
                        $wgInvalidPasswordReset;
 
-               switch ( $this->authenticateUserData() ) {
+               $authRes = $this->authenticateUserData();
+               switch ( $authRes ) {
                        case self::SUCCESS:
                                # We've verified now, update the real record
                                $user = $this->getUser();
@@ -948,7 +983,10 @@ class LoginForm extends SpecialPage {
                                        } elseif ( $wgInvalidPasswordReset
                                                && !$user->isValidPassword( $this->mPassword )
                                        ) {
-                                               $status = $user->checkPasswordValidity( $this->mPassword );
+                                               $status = $user->checkPasswordValidity(
+                                                       $this->mPassword,
+                                                       'login'
+                                               );
                                                $this->resetLoginForm(
                                                        $status->getMessage( 'resetpass-validity-soft' )
                                                );
@@ -1031,6 +1069,12 @@ class LoginForm extends SpecialPage {
                        default:
                                throw new MWException( 'Unhandled case value' );
                }
+
+               LoggerFactory::getInstance( 'authmanager' )->info( 'Login attempt', array(
+                       'event' => 'login',
+                       'successful' => $authRes === self::SUCCESS,
+                       'status' => LoginForm::$statusCodes[$authRes],
+               ) );
        }
 
        /**
@@ -1323,9 +1367,6 @@ class LoginForm extends SpecialPage {
                        'mediawiki.ui.input',
                        'mediawiki.special.userlogin.common.styles'
                ) );
-               $out->addModules( array(
-                       'mediawiki.special.userlogin.common.js'
-               ) );
 
                if ( $this->mType == 'signup' ) {
                        // XXX hack pending RL or JS parse() support for complex content messages
@@ -1387,6 +1428,7 @@ class LoginForm extends SpecialPage {
                        : is_array( $wgPasswordResetRoutes ) && in_array( true, array_values( $wgPasswordResetRoutes ) );
 
                $template->set( 'header', '' );
+               $template->set( 'formheader', '' );
                $template->set( 'skin', $this->getSkin() );
                $template->set( 'name', $this->mUsername );
                $template->set( 'password', $this->mPassword );
index 0a91957..38baf5b 100644 (file)
@@ -92,7 +92,14 @@ class SpecialVersion extends SpecialPage {
                                        if ( $file ) {
                                                $wikiText = file_get_contents( $file );
                                                if ( substr( $file, -4 ) === '.txt' ) {
-                                                       $wikiText = Html::element( 'pre', array(), $wikiText );
+                                                       $wikiText = Html::element(
+                                                               'pre',
+                                                               array(
+                                                                       'lang' => 'en',
+                                                                       'dir' => 'ltr',
+                                                               ),
+                                                               $wikiText
+                                                       );
                                                }
                                        }
                                }
@@ -109,7 +116,14 @@ class SpecialVersion extends SpecialPage {
                                        $file = $this->getExtLicenseFileName( dirname( $extNode['path'] ) );
                                        if ( $file ) {
                                                $wikiText = file_get_contents( $file );
-                                               $wikiText = "<pre>$wikiText</pre>";
+                                               $wikiText = Html::element(
+                                                       'pre',
+                                                       array(
+                                                               'lang' => 'en',
+                                                               'dir' => 'ltr',
+                                                       ),
+                                                       $wikiText
+                                               );
                                        }
                                }
 
@@ -215,6 +229,10 @@ class SpecialVersion extends SpecialPage {
                }
                $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
 
+               if ( IcuCollation::getICUVersion() ) {
+                       $software['[http://site.icu-project.org/ ICU]'] = IcuCollation::getICUVersion();
+               }
+
                // Allow a hook to add/remove items.
                Hooks::run( 'SoftwareInfo', array( &$software ) );
 
@@ -541,6 +559,10 @@ class SpecialVersion extends SpecialPage {
                                return $arr['name'];
                        }, $info['authors'] );
                        $authors = $this->listAuthors( $authors, false, "$IP/vendor/$name" );
+
+                       // We can safely assume that the libraries' names and descriptions
+                       // are written in English and aren't going to be translated,
+                       // so set appropriate lang and dir attributes
                        $out .= Html::openElement( 'tr' )
                                . Html::rawElement(
                                        'td',
@@ -551,9 +573,9 @@ class SpecialVersion extends SpecialPage {
                                                array( 'class' => 'mw-version-library-name' )
                                        )
                                )
-                               . Html::element( 'td', array(), $info['version'] )
-                               . Html::element( 'td', array(), $this->listToText( $info['licenses'] ) )
-                               . Html::element( 'td', array(), $info['description'] )
+                               . Html::element( 'td', array( 'dir' => 'auto' ), $info['version'] )
+                               . Html::element( 'td', array( 'dir' => 'auto' ), $this->listToText( $info['licenses'] ) )
+                               . Html::element( 'td', array( 'lang' => 'en', 'dir' => 'ltr' ), $info['description'] )
                                . Html::rawElement( 'td', array(), $authors )
                                . Html::closeElement( 'tr' );
                }
@@ -575,7 +597,10 @@ class SpecialVersion extends SpecialPage {
                if ( count( $tags ) ) {
                        $out = Html::rawElement(
                                'h2',
-                               array( 'class' => 'mw-headline plainlinks' ),
+                               array(
+                                       'class' => 'mw-headline plainlinks',
+                                       'id' => 'mw-version-parser-extensiontags',
+                               ),
                                Linker::makeExternalLink(
                                        '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Tag_extensions',
                                        $this->msg( 'version-parser-extensiontags' )->parse(),
@@ -615,7 +640,10 @@ class SpecialVersion extends SpecialPage {
                if ( count( $fhooks ) ) {
                        $out = Html::rawElement(
                                'h2',
-                               array( 'class' => 'mw-headline plainlinks' ),
+                               array(
+                                       'class' => 'mw-headline plainlinks',
+                                       'id' => 'mw-version-parser-function-hooks',
+                               ),
                                Linker::makeExternalLink(
                                        '//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Parser_functions',
                                        $this->msg( 'version-parser-function-hooks' )->parse(),
@@ -1110,7 +1138,10 @@ class SpecialVersion extends SpecialPage {
                if ( is_array( $list ) && count( $list ) == 1 ) {
                        $list = $list[0];
                }
-               if ( is_object( $list ) ) {
+               if ( $list instanceof Closure ) {
+                       // Don't output stuff like "Closure$;1028376090#8$48499d94fe0147f7c633b365be39952b$"
+                       return 'Closure';
+               } elseif ( is_object( $list ) ) {
                        $class = wfMessage( 'parentheses' )->params( get_class( $list ) )->escaped();
 
                        return $class;
index be77e62..39980d2 100644 (file)
@@ -155,7 +155,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        $conds['pagelinks'][] = 'rd_from is NOT NULL';
                }
 
-               $queryFunc = function ( $dbr, $table, $fromCol ) use (
+               $queryFunc = function ( IDatabase $dbr, $table, $fromCol ) use (
                        $conds, $target, $limit, $useLinkNamespaceDBFields
                ) {
                        // Read an extra row as an at-end check
@@ -170,11 +170,12 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        }
                        // Inner LIMIT is 2X in case of stale backlinks with wrong namespaces
                        $subQuery = $dbr->selectSqlText(
-                               array( $table, 'page', 'redirect' ),
+                               array( $table, 'redirect', 'page' ),
                                array( $fromCol, 'rd_from' ),
                                $conds[$table],
                                __CLASS__ . '::showIndirectLinks',
-                               array( 'ORDER BY' => $fromCol, 'LIMIT' => 2 * $queryLimit ),
+                               // Force JOIN order per T106682 to avoid large filesorts
+                               array( 'ORDER BY' => $fromCol, 'LIMIT' => 2 * $queryLimit, 'STRAIGHT_JOIN' ),
                                array(
                                        'page' => array( 'INNER JOIN', "$fromCol = page_id" ),
                                        'redirect' => array( 'LEFT JOIN', $on )
@@ -267,6 +268,14 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                }
                $prevId = $from;
 
+               // use LinkBatch to make sure, that all required data (associated with Titles)
+               // is loaded in one query
+               $lb = new LinkBatch();
+               foreach ( $rows as $row ) {
+                       $lb->add( $row->page_namespace, $row->page_title );
+               }
+               $lb->execute();
+
                if ( $level == 0 ) {
                        if ( !$this->including() ) {
                                $out->addHTML( $this->whatlinkshereForm() );
@@ -314,7 +323,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                static $msgcache = null;
                if ( $msgcache === null ) {
                        static $msgs = array( 'isredirect', 'istemplate', 'semicolon-separator',
-                               'whatlinkshere-links', 'isimage' );
+                               'whatlinkshere-links', 'isimage', 'editlink' );
                        $msgcache = array();
                        foreach ( $msgs as $msg ) {
                                $msgcache[$msg] = $this->msg( $msg )->escaped();
@@ -355,7 +364,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                }
 
                # Space for utilities links, with a what-links-here link provided
-               $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'] );
+               $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'], $msgcache['editlink'] );
                $wlh = Xml::wrapClass(
                        $this->msg( 'parentheses' )->rawParams( $wlhLink )->escaped(),
                        'mw-whatlinkshere-tools'
@@ -370,18 +379,39 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                return Xml::closeElement( 'ul' );
        }
 
-       protected function wlhLink( Title $target, $text ) {
+       protected function wlhLink( Title $target, $text, $editText ) {
                static $title = null;
                if ( $title === null ) {
                        $title = $this->getPageTitle();
                }
 
-               return Linker::linkKnown(
-                       $title,
-                       $text,
-                       array(),
-                       array( 'target' => $target->getPrefixedText() )
+               // always show a "<- Links" link
+               $links = array(
+                       'links' => Linker::linkKnown(
+                               $title,
+                               $text,
+                               array(),
+                               array( 'target' => $target->getPrefixedText() )
+                       ),
                );
+
+               // if the page is editable, add an edit link
+               if (
+                       // check user permissions
+                       $this->getUser()->isAllowed( 'edit' ) &&
+                       // check, if the content model is editable through action=edit
+                       ContentHandler::getForTitle( $target )->supportsDirectEditing()
+               ) {
+                       $links['edit'] = Linker::linkKnown(
+                               $target,
+                               $editText,
+                               array(),
+                               array( 'action' => 'edit' )
+                       );
+               }
+
+               // build the links html
+               return $this->getLanguage()->pipeList( $links );
        }
 
        function makeSelfLink( $text, $query ) {
index f09b6bb..a39690a 100644 (file)
@@ -38,8 +38,6 @@ class UsercreateTemplate extends BaseTemplate {
        }
 
        function execute() {
-               global $wgCookieExpiration;
-               $expirationDays = ceil( $wgCookieExpiration / ( 3600 * 24 ) );
 ?>
 <div class="mw-ui-container">
        <?php if ( $this->haveData( 'languages' ) ) { ?>
@@ -73,6 +71,12 @@ class UsercreateTemplate extends BaseTemplate {
                        <?php } ?>
                        </div>
 
+                       <?php if ( $this->data['formheader'] ) { ?>
+                               <div class="mw-form-formheader">
+                                       <?php $this->html( 'formheader' ); /* extensions such as MobileFrontend add html here */ ?>
+                               </div>
+                       <?php } ?>
+
                        <div class="mw-ui-vform-field">
                                <label for='wpName2'>
                                        <?php $this->msg( 'userlogin-yourname' ); ?>
index 345bb71..4a0b413 100644 (file)
@@ -56,6 +56,11 @@ class UserloginTemplate extends BaseTemplate {
                                </div>
                        <?php } ?>
 
+                       <?php if ( $this->data['formheader'] ) { ?>
+                               <div class="mw-form-formheader">
+                                       <?php $this->html( 'formheader' ); /* extensions such as MobileFrontend add html here */ ?>
+                               </div>
+                       <?php } ?>
                        <div class="mw-ui-vform-field">
                                <label for='wpName1'>
                                        <?php
diff --git a/includes/tidy.conf b/includes/tidy.conf
deleted file mode 100644 (file)
index 4c4daed..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# html tidy (http://tidy.sf.net) configuration
-# tidy - validate, correct, and pretty-print HTML files
-# see: man 1 tidy, http://tidy.sourceforge.net/docs/quickref.html
-
-show-body-only: yes
-force-output: yes
-tidy-mark: no
-wrap: 0
-wrap-attributes: no
-literal-attributes: yes
-output-xhtml: yes
-numeric-entities: yes
-enclose-text: yes
-enclose-block-text: yes
-quiet: yes
-quote-nbsp: yes
-fix-backslash: no
-fix-uri: no
-# Don't strip html5 elements we support
-# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
-new-empty-tags: html-meta, html-link, wbr
-new-inline-tags: video, audio, source, track, bdi, data, time, mark
diff --git a/includes/tidy/Html5Depurate.php b/includes/tidy/Html5Depurate.php
new file mode 100644 (file)
index 0000000..23e445f
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+namespace MediaWiki\Tidy;
+use MWHttpRequest;
+use Exception;
+
+class Html5Depurate extends TidyDriverBase {
+       public function __construct( array $config ) {
+               parent::__construct( $config + array(
+                       'url' => 'http://localhost:4339/document',
+                       'timeout' => 10,
+                       'connectTimeout' => 0.5,
+               ) );
+       }
+
+       public function tidy( $text ) {
+               $wrappedtext = '<!DOCTYPE html><html>' .
+                       '<body>' . $text . '</body></html>';
+
+               $req = MWHttpRequest::factory( $this->config['url'],
+                       array(
+                               'method' => 'POST',
+                               'timeout' => $this->config['timeout'],
+                               'connectTimeout' => $this->config['connectTimeout'],
+                               'postData' => array(
+                                       'text' => $wrappedtext
+                               )
+                       ) );
+               $status = $req->execute();
+               if ( !$status->isOK() ) {
+                       throw new Exception( "Error contacting depurate service: " . $status->getWikiText() );
+               } elseif ( $req->getStatus() !== 200 ) {
+                       throw new Exception( "Depurate returned error: " . $status->getWikiText() );
+               }
+               $result = $req->getContent();
+               $startBody = strpos( $result, "<body>" );
+               $endBody = strrpos( $result, "</body>" );
+               if ( $startBody !== false && $endBody !== false && $endBody > $startBody ) {
+                       $startBody += strlen( "<body>" );
+                       return substr( $result, $startBody, $endBody - $startBody );
+               } else {
+                       return $text . "\n<!-- Html5Depurate returned an invalid result -->";
+               }
+       }
+}
diff --git a/includes/tidy/RaggettBase.php b/includes/tidy/RaggettBase.php
new file mode 100644 (file)
index 0000000..a3717b2
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+abstract class RaggettBase extends TidyDriverBase {
+       /**
+        * Generic interface for wrapping and unwrapping HTML for Dave Raggett's tidy.
+        *
+        * @param string $text Hideous HTML input
+        * @return string Corrected HTML output
+        */
+       public function tidy( $text ) {
+               $wrapper = new RaggettWrapper;
+               $wrappedtext = $wrapper->getWrapped( $text );
+
+               $retVal = null;
+               $correctedtext = $this->cleanWrapped( $wrappedtext, false, $retVal );
+
+               if ( $retVal < 0 ) {
+                       wfDebug( "Possible tidy configuration error!\n" );
+                       return $text . "\n<!-- Tidy was unable to run -->\n";
+               } elseif ( is_null( $correctedtext ) ) {
+                       wfDebug( "Tidy error detected!\n" );
+                       return $text . "\n<!-- Tidy found serious XHTML errors -->\n";
+               }
+
+               $correctedtext = $wrapper->postprocess( $correctedtext ); // restore any hidden tokens
+
+               return $correctedtext;
+       }
+
+       public function validate( $text, &$errorStr ) {
+               $retval = 0;
+               $errorStr = $this->cleanWrapped( $text, true, $retval );
+               return ( $retval < 0 && $errorStr == '' ) || $retval == 0;
+       }
+
+       /**
+        * Perform a clean/repair operation
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return null|string
+        * @throws MWException
+        */
+       abstract protected function cleanWrapped( $text, $stderr = false, &$retval = null );
+}
diff --git a/includes/tidy/RaggettExternal.php b/includes/tidy/RaggettExternal.php
new file mode 100644 (file)
index 0000000..1193318
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettExternal extends RaggettBase {
+       /**
+        * Spawn an external HTML tidy process and get corrected markup back from it.
+        * Also called in OutputHandler.php for full page validation
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from STDERR rather than STDOUT
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               $cleansource = '';
+               $opts = ' -utf8';
+
+               if ( $stderr ) {
+                       $descriptorspec = array(
+                               0 => array( 'pipe', 'r' ),
+                               1 => array( 'file', wfGetNull(), 'a' ),
+                               2 => array( 'pipe', 'w' )
+                       );
+               } else {
+                       $descriptorspec = array(
+                               0 => array( 'pipe', 'r' ),
+                               1 => array( 'pipe', 'w' ),
+                               2 => array( 'file', wfGetNull(), 'a' )
+                       );
+               }
+
+               $readpipe = $stderr ? 2 : 1;
+               $pipes = array();
+
+               $process = proc_open(
+                       "{$this->config['tidyBin']} -config {$this->config['tidyConfigFile']} " .
+                       $this->config['tidyCommandLine'] . $opts, $descriptorspec, $pipes );
+
+               //NOTE: At least on linux, the process will be created even if tidy is not installed.
+               //      This means that missing tidy will be treated as a validation failure.
+
+               if ( is_resource( $process ) ) {
+                       // Theoretically, this style of communication could cause a deadlock
+                       // here. If the stdout buffer fills up, then writes to stdin could
+                       // block. This doesn't appear to happen with tidy, because tidy only
+                       // writes to stdout after it's finished reading from stdin. Search
+                       // for tidyParseStdin and tidySaveStdout in console/tidy.c
+                       fwrite( $pipes[0], $text );
+                       fclose( $pipes[0] );
+                       while ( !feof( $pipes[$readpipe] ) ) {
+                               $cleansource .= fgets( $pipes[$readpipe], 1024 );
+                       }
+                       fclose( $pipes[$readpipe] );
+                       $retval = proc_close( $process );
+               } else {
+                       wfWarn( "Unable to start external tidy process" );
+                       $retval = -1;
+               }
+
+               if ( !$stderr && $cleansource == '' && $text != '' ) {
+                       // Some kind of error happened, so we couldn't get the corrected text.
+                       // Just give up; we'll use the source text and append a warning.
+                       $cleansource = null;
+               }
+
+               return $cleansource;
+       }
+
+       public function supportsValidate() {
+               return true;
+       }
+}
diff --git a/includes/tidy/RaggettInternalHHVM.php b/includes/tidy/RaggettInternalHHVM.php
new file mode 100644 (file)
index 0000000..2a3986d
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettInternalHHVM extends RaggettBase {
+       /**
+        * Use the HTML tidy extension to use the tidy library in-process,
+        * saving the overhead of spawning a new process.
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from error status instead of output
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               if ( $stderr ) {
+                       throw new Exception( "\$stderr cannot be used with RaggettInternalHHVM" );
+               }
+               $cleansource = tidy_repair_string( $text, $this->config['tidyConfigFile'], 'utf8' );
+               if ( $cleansource === false ) {
+                       $cleansource = null;
+                       $retval = -1;
+               } else {
+                       $retval = 0;
+               }
+
+               return $cleansource;
+       }
+}
diff --git a/includes/tidy/RaggettInternalPHP.php b/includes/tidy/RaggettInternalPHP.php
new file mode 100644 (file)
index 0000000..1ce14b6
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+class RaggettInternalPHP extends RaggettBase {
+       /**
+        * Use the HTML tidy extension to use the tidy library in-process,
+        * saving the overhead of spawning a new process.
+        *
+        * @param string $text HTML to check
+        * @param bool $stderr Whether to read result from error status instead of output
+        * @param int &$retval Exit code (-1 on internal error)
+        * @return string|null
+        */
+       protected function cleanWrapped( $text, $stderr = false, &$retval = null ) {
+               if ( !class_exists( 'tidy' ) ) {
+                       wfWarn( "Unable to load internal tidy class." );
+                       $retval = -1;
+
+                       return null;
+               }
+
+               $tidy = new \tidy;
+               $tidy->parseString( $text, $this->config['tidyConfigFile'], 'utf8' );
+
+               if ( $stderr ) {
+                       $retval = $tidy->getStatus();
+                       return $tidy->errorBuffer;
+               }
+
+               $tidy->cleanRepair();
+               $retval = $tidy->getStatus();
+               if ( $retval == 2 ) {
+                       // 2 is magic number for fatal error
+                       // http://www.php.net/manual/en/function.tidy-get-status.php
+                       $cleansource = null;
+               } else {
+                       $cleansource = tidy_get_output( $tidy );
+                       if ( !empty( $this->config['debugComment'] ) && $retval > 0 ) {
+                               $cleansource .= "<!--\nTidy reports:\n" .
+                                       str_replace( '-->', '--&gt;', $tidy->errorBuffer ) .
+                                       "\n-->";
+                       }
+               }
+
+               return $cleansource;
+       }
+
+       public function supportsValidate() {
+               return true;
+       }
+}
diff --git a/includes/tidy/RaggettWrapper.php b/includes/tidy/RaggettWrapper.php
new file mode 100644 (file)
index 0000000..083f402
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+namespace MediaWiki\Tidy;
+
+use ReplacementArray;
+use ParserOutput;
+use Parser;
+
+/**
+ * Class used to hide mw:editsection tokens from Tidy so that it doesn't break them
+ * or break on them. This is a bit of a hack for now, but hopefully in the future
+ * we may create a real postprocessor or something that will replace this.
+ * It's called wrapper because for now it basically takes over MWTidy::tidy's task
+ * of wrapping the text in a xhtml block
+ *
+ * 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 RaggettWrapper {
+
+       /**
+        * @var ReplacementArray
+        */
+       protected $mTokens;
+
+       protected $mMarkerIndex;
+
+       public function __construct() {
+               $this->mTokens = null;
+       }
+
+       /**
+        * @param string $text
+        * @return string
+        */
+       public function getWrapped( $text ) {
+               $this->mTokens = new ReplacementArray;
+               $this->mMarkerIndex = 0;
+
+               // Replace <mw:editsection> elements with placeholders
+               $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
+                       array( &$this, 'replaceCallback' ), $text );
+               // ...and <mw:toc> markers
+               $wrappedtext = preg_replace_callback( '/\<\\/?mw:toc\>/',
+                       array( &$this, 'replaceCallback' ), $wrappedtext );
+               // ... and <math> tags
+               $wrappedtext = preg_replace_callback( '/\<math(.*?)\<\\/math\>/s',
+                       array( &$this, 'replaceCallback' ), $wrappedtext );
+               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
+               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
+               $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
+
+               // Wrap the whole thing in a doctype and body for Tidy.
+               $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' .
+                       ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>' .
+                       '<head><title>test</title></head><body>' . $wrappedtext . '</body></html>';
+
+               return $wrappedtext;
+       }
+
+       /**
+        * @param array $m
+        *
+        * @return string
+        */
+       public function replaceCallback( $m ) {
+               $marker = Parser::MARKER_PREFIX . "-item-{$this->mMarkerIndex}" . Parser::MARKER_SUFFIX;
+               $this->mMarkerIndex++;
+               $this->mTokens->setPair( $marker, $m[0] );
+               return $marker;
+       }
+
+       /**
+        * @param string $text
+        * @return string
+        */
+       public function postprocess( $text ) {
+               // Revert <html-{link,meta}> back to <{link,meta}>
+               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
+
+               // Restore the contents of placeholder tokens
+               $text = $this->mTokens->replace( $text );
+
+               return $text;
+       }
+
+}
+?>
diff --git a/includes/tidy/TidyDriverBase.php b/includes/tidy/TidyDriverBase.php
new file mode 100644 (file)
index 0000000..1d994aa
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+namespace MediaWiki\Tidy;
+
+/**
+ * Base class for HTML cleanup utilities
+ */
+abstract class TidyDriverBase {
+       protected $config;
+
+       function __construct( $config ) {
+               $this->config = $config;
+       }
+
+       /**
+        * Return true if validate() can be used
+        */
+       public function supportsValidate() {
+               return false;
+       }
+
+       /**
+        * Check HTML for errors, used if $wgValidateAllHtml = true.
+        *
+        * @param string $text
+        * @param string &$errorStr Return the error string
+        * @return bool Whether the HTML is valid
+        */
+       public function validate( $text, &$errorStr ) {
+               throw new MWException( get_class( $this ) . " does not support validate()" );
+       }
+
+       /**
+        * Clean up HTML
+        *
+        * @param string HTML document fragment to clean up
+        * @param string The corrected HTML output
+        */
+       public abstract function tidy( $text );
+}
diff --git a/includes/tidy/tidy.conf b/includes/tidy/tidy.conf
new file mode 100644 (file)
index 0000000..4c4daed
--- /dev/null
@@ -0,0 +1,22 @@
+# html tidy (http://tidy.sf.net) configuration
+# tidy - validate, correct, and pretty-print HTML files
+# see: man 1 tidy, http://tidy.sourceforge.net/docs/quickref.html
+
+show-body-only: yes
+force-output: yes
+tidy-mark: no
+wrap: 0
+wrap-attributes: no
+literal-attributes: yes
+output-xhtml: yes
+numeric-entities: yes
+enclose-text: yes
+enclose-block-text: yes
+quiet: yes
+quote-nbsp: yes
+fix-backslash: no
+fix-uri: no
+# Don't strip html5 elements we support
+# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
+new-empty-tags: html-meta, html-link, wbr
+new-inline-tags: video, audio, source, track, bdi, data, time, mark
index 426c752..b06b91e 100644 (file)
@@ -752,6 +752,12 @@ abstract class UploadBase {
                if ( $this->mTitle !== false ) {
                        return $this->mTitle;
                }
+               if ( !is_string( $this->mDesiredDestName ) ) {
+                       $this->mTitleError = self::ILLEGAL_FILENAME;
+                       $this->mTitle = null;
+
+                       return $this->mTitle;
+               }
                /* Assume that if a user specified File:Something.jpg, this is an error
                 * and that the namespace prefix needs to be stripped of.
                 */
@@ -1935,7 +1941,7 @@ abstract class UploadBase {
        public static function getSessionStatus( User $user, $statusKey ) {
                $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
 
-               return wfGetCache( CACHE_ANYTHING )->get( $key );
+               return ObjectCache::getMainStashInstance()->get( $key );
        }
 
        /**
@@ -1951,7 +1957,7 @@ abstract class UploadBase {
        public static function setSessionStatus( User $user, $statusKey, $value ) {
                $key = wfMemcKey( 'uploadstatus', $user->getId() ?: md5( $user->getName() ), $statusKey );
 
-               $cache = wfGetCache( CACHE_ANYTHING );
+               $cache = ObjectCache::getMainStashInstance();
                if ( $value === false ) {
                        $cache->delete( $key );
                } else {
index 4c099b3..f578745 100644 (file)
@@ -195,7 +195,7 @@ class UploadFromUrl extends UploadBase {
         */
        public function fetchFile( $httpOptions = array() ) {
                if ( !Http::isValidURI( $this->mUrl ) ) {
-                       return Status::newFatal( 'http-invalid-url' );
+                       return Status::newFatal( 'http-invalid-url', $this->mUrl );
                }
 
                if ( !self::isAllowedHost( $this->mUrl ) ) {
diff --git a/includes/utils/BatchRowIterator.php b/includes/utils/BatchRowIterator.php
new file mode 100644 (file)
index 0000000..9441608
--- /dev/null
@@ -0,0 +1,278 @@
+<?php
+/**
+ * Allows iterating a large number of rows in batches transparently.
+ * By default when iterated over returns the full query result as an
+ * array of rows.  Can be wrapped in RecursiveIteratorIterator to
+ * collapse those arrays into a single stream of rows queried in batches.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+class BatchRowIterator implements RecursiveIterator {
+
+       /**
+        * @var DatabaseBase $db The database to read from
+        */
+       protected $db;
+
+       /**
+        * @var string $table The name of the table to read from
+        */
+       protected $table;
+
+       /**
+        * @var array $primaryKey The name of the primary key(s)
+        */
+       protected $primaryKey;
+
+       /**
+        * @var integer $batchSize The number of rows to fetch per iteration
+        */
+       protected $batchSize;
+
+       /**
+        * @var array $conditions Array of strings containing SQL conditions
+        *  to add to the query
+        */
+       protected $conditions = array();
+
+       /**
+        * @var array $joinConditions
+        */
+       protected $joinConditions = array();
+
+       /**
+        * @var array $fetchColumns List of column names to select from the
+        *  table suitable for use with DatabaseBase::select()
+        */
+       protected $fetchColumns;
+
+       /**
+        * @var string $orderBy SQL Order by condition generated from $this->primaryKey
+        */
+       protected $orderBy;
+
+       /**
+        * @var array $current The current iterator value
+        */
+       private $current = array();
+
+       /**
+        * @var integer key 0-indexed number of pages fetched since self::reset()
+        */
+       private $key;
+
+       /**
+        * @param DatabaseBase $db         The database to read from
+        * @param string       $table      The name of the table to read from
+        * @param string|array $primaryKey The name or names of the primary key columns
+        * @param integer      $batchSize  The number of rows to fetch per iteration
+        * @throws MWException
+        */
+       public function __construct( DatabaseBase $db, $table, $primaryKey, $batchSize ) {
+               if ( $batchSize < 1 ) {
+                       throw new MWException( 'Batch size must be at least 1 row.' );
+               }
+               $this->db = $db;
+               $this->table = $table;
+               $this->primaryKey = (array) $primaryKey;
+               $this->fetchColumns = $this->primaryKey;
+               $this->orderBy = implode( ' ASC,', $this->primaryKey ) . ' ASC';
+               $this->batchSize = $batchSize;
+       }
+
+       /**
+        * @param array $condition Query conditions suitable for use with
+        *  DatabaseBase::select
+        */
+       public function addConditions( array $conditions ) {
+               $this->conditions = array_merge( $this->conditions, $conditions );
+       }
+
+       /**
+        * @param array $condition Query join conditions suitable for use
+        *  with DatabaseBase::select
+        */
+       public function addJoinConditions( array $conditions ) {
+               $this->joinConditions = array_merge( $this->joinConditions, $conditions );
+       }
+
+       /**
+        * @param array $columns List of column names to select from the
+        *  table suitable for use with DatabaseBase::select()
+        */
+       public function setFetchColumns( array $columns ) {
+               // If it's not the all column selector merge in the primary keys we need
+               if ( count( $columns ) === 1 && reset( $columns ) === '*' ) {
+                       $this->fetchColumns = $columns;
+               } else {
+                       $this->fetchColumns = array_unique( array_merge(
+                               $this->primaryKey,
+                               $columns
+                       ) );
+               }
+       }
+
+       /**
+        * Extracts the primary key(s) from a database row.
+        *
+        * @param stdClass $row An individual database row from this iterator
+        * @return array Map of primary key column to value within the row
+        */
+       public function extractPrimaryKeys( $row ) {
+               $pk = array();
+               foreach ( $this->primaryKey as $column ) {
+                       $pk[$column] = $row->$column;
+               }
+               return $pk;
+       }
+
+       /**
+        * @return array The most recently fetched set of rows from the database
+        */
+       public function current() {
+               return $this->current;
+       }
+
+       /**
+        * @return integer 0-indexed count of the page number fetched
+        */
+       public function key() {
+               return $this->key;
+       }
+
+       /**
+        * Reset the iterator to the begining of the table.
+        */
+       public function rewind() {
+               $this->key = -1; // self::next() will turn this into 0
+               $this->current = array();
+               $this->next();
+       }
+
+       /**
+        * @return boolean True when the iterator is in a valid state
+        */
+       public function valid() {
+               return (bool) $this->current;
+       }
+
+       /**
+        * @return boolean True when this result set has rows
+        */
+       public function hasChildren() {
+               return $this->current && count( $this->current );
+       }
+
+       /**
+        * @return RecursiveIterator
+        */
+       public function getChildren() {
+               return new NotRecursiveIterator( new ArrayIterator( $this->current ) );
+       }
+
+       /**
+        * Fetch the next set of rows from the database.
+        */
+       public function next() {
+               $res = $this->db->select(
+                       $this->table,
+                       $this->fetchColumns,
+                       $this->buildConditions(),
+                       __METHOD__,
+                       array(
+                               'LIMIT' => $this->batchSize,
+                               'ORDER BY' => $this->orderBy,
+                       ),
+                       $this->joinConditions
+               );
+
+               // The iterator is converted to an array because in addition to
+               // returning it in self::current() we need to use the end value
+               // in self::buildConditions()
+               $this->current = iterator_to_array( $res );
+               $this->key++;
+       }
+
+       /**
+        * Uses the primary key list and the maximal result row from the
+        * previous iteration to build an SQL condition sufficient for
+        * selecting the next page of results.  All except the final key use
+        * `=` conditions while the final key uses a `>` condition
+        *
+        * Example output:
+        *        array( '( foo = 42 AND bar > 7 ) OR ( foo > 42 )' )
+        *
+        * @return array The SQL conditions necessary to select the next set
+        *  of rows in the batched query
+        */
+       protected function buildConditions() {
+               if ( !$this->current ) {
+                       return $this->conditions;
+               }
+
+               $maxRow = end( $this->current );
+               $maximumValues = array();
+               foreach ( $this->primaryKey as $column ) {
+                       $maximumValues[$column] = $this->db->addQuotes( $maxRow->$column );
+               }
+
+               $pkConditions = array();
+               // For example: If we have 3 primary keys
+               // first run through will generate
+               //   col1 = 4 AND col2 = 7 AND col3 > 1
+               // second run through will generate
+               //   col1 = 4 AND col2 > 7
+               // and the final run through will generate
+               //   col1 > 4
+               while ( $maximumValues ) {
+                       $pkConditions[] = $this->buildGreaterThanCondition( $maximumValues );
+                       array_pop( $maximumValues );
+               }
+
+               $conditions = $this->conditions;
+               $conditions[] = sprintf( '( %s )', implode( ' ) OR ( ', $pkConditions ) );
+
+               return $conditions;
+       }
+
+       /**
+        * Given an array of column names and their maximum value  generate
+        * an SQL condition where all keys except the last match $quotedMaximumValues
+        * exactly and the last column is greater than the matching value in
+        * $quotedMaximumValues
+        *
+        * @param array $quotedMaximumValues The maximum values quoted with
+        *  $this->db->addQuotes()
+        * @return string An SQL condition that will select rows where all
+        *  columns match the maximum value exactly except the last column
+        *  which must be greater than the provided maximum value
+        */
+       protected function buildGreaterThanCondition( array $quotedMaximumValues ) {
+               $keys = array_keys( $quotedMaximumValues );
+               $lastColumn = end( $keys );
+               $lastValue = array_pop( $quotedMaximumValues );
+               $conditions = array();
+               foreach ( $quotedMaximumValues as $column => $value ) {
+                       $conditions[] = "$column = $value";
+               }
+               $conditions[] = "$lastColumn > $lastValue";
+
+               return implode( ' AND ', $conditions );
+       }
+}
diff --git a/includes/utils/BatchRowUpdate.php b/includes/utils/BatchRowUpdate.php
new file mode 100644 (file)
index 0000000..a4257a5
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/*
+ * Ties together the batch update components to provide a composable
+ * method of batch updating rows in a database. To use create a class
+ * implementing the RowUpdateGenerator interface and configure the
+ * BatchRowIterator and BatchRowWriter for access to the correct table.
+ * The components will handle reading, writing, and waiting for slaves
+ * while the generator implementation handles generating update arrays
+ * for singular rows.
+ *
+ * Instantiate:
+ *   $updater = new BatchRowUpdate(
+ *       new BatchRowIterator( $dbr, 'some_table', 'primary_key_column', 500 ),
+ *       new BatchRowWriter( $dbw, 'some_table', 'clusterName' ),
+ *       new MyImplementationOfRowUpdateGenerator
+ *   );
+ *
+ * Run:
+ *   $updater->execute();
+ *
+ * An example maintenance script utilizing the BatchRowUpdate can be
+ * located in the Echo extension file maintenance/updateSchema.php
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+class BatchRowUpdate {
+       /**
+        * @var BatchRowIterator $reader Iterator that returns an array of
+        *  database rows
+        */
+       protected $reader;
+
+       /**
+        * @var BatchRowWriter $writer Writer capable of pushing row updates
+        *  to the database
+        */
+       protected $writer;
+
+       /**
+        * @var RowUpdateGenerator $generator Generates single row updates
+        *  based on the rows content
+        */
+       protected $generator;
+
+       /**
+        * @var callable $output Output callback
+        */
+       protected $output;
+
+       /**
+        * @param BatchRowIterator   $reader    Iterator that returns an
+        *  array of database rows
+        * @param BatchRowWriter     $writer    Writer capable of pushing
+        *  row updates to the database
+        * @param RowUpdateGenerator $generator Generates single row updates
+        *  based on the rows content
+        */
+       public function __construct( BatchRowIterator $reader, BatchRowWriter $writer, RowUpdateGenerator $generator ) {
+               $this->reader = $reader;
+               $this->writer = $writer;
+               $this->generator = $generator;
+               $this->output = function() {
+               }; // nop
+       }
+
+       /**
+        * Runs the batch update process
+        */
+       public function execute() {
+               foreach ( $this->reader as $rows ) {
+                       $updates = array();
+                       foreach ( $rows as $row ) {
+                               $update = $this->generator->update( $row );
+                               if ( $update ) {
+                                       $updates[] = array(
+                                               'primaryKey' => $this->reader->extractPrimaryKeys( $row ),
+                                               'changes' => $update,
+                                       );
+                               }
+                       }
+
+                       if ( $updates ) {
+                               $this->output( "Processing " . count( $updates ) . " rows\n" );
+                               $this->writer->write( $updates );
+                       }
+               }
+
+               $this->output( "Completed\n" );
+       }
+
+       /**
+        * Accepts a callable which will receive a single parameter
+        * containing string status updates
+        *
+        * @param callable $output A callback taking a single string
+        *  parameter to output
+        *
+        * @throws MWException
+        */
+       public function setOutput( $output ) {
+               if ( !is_callable( $output ) ) {
+                       throw new MWException(
+                               'Provided $output param is required to be callable.'
+                       );
+               }
+               $this->output = $output;
+       }
+
+       /**
+        * Write out a status update
+        *
+        * @param string $text The value to print
+        */
+       protected function output( $text ) {
+               call_user_func( $this->output, $text );
+       }
+}
diff --git a/includes/utils/BatchRowWriter.php b/includes/utils/BatchRowWriter.php
new file mode 100644 (file)
index 0000000..04c00a3
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Updates database rows by primary key in batches.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+class BatchRowWriter {
+       /**
+        * @var DatabaseBase $db The database to write to
+        */
+       protected $db;
+
+       /**
+        * @var string $table The name of the table to update
+        */
+       protected $table;
+
+       /**
+        * @var string $clusterName A cluster name valid for use with LBFactory
+        */
+       protected $clusterName;
+
+       /**
+        * @param DatabaseBase $db          The database to write to
+        * @param string       $table       The name of the table to update
+        * @param string|bool  $clusterName A cluster name valid for use with LBFactory
+        */
+       public function __construct( DatabaseBase $db, $table, $clusterName = false ) {
+               $this->db = $db;
+               $this->table = $table;
+               $this->clusterName = $clusterName;
+       }
+
+       /**
+        * @param array $updates Array of arrays each containing two keys, 'primaryKey'
+        *  and 'changes'. primaryKey must contain a map of column names to values
+        *  sufficient to uniquely identify the row changes must contain a map of column
+        *  names to update values to apply to the row.
+        */
+       public function write( array $updates ) {
+               $this->db->begin();
+
+               foreach ( $updates as $update ) {
+                       $this->db->update(
+                               $this->table,
+                               $update['changes'],
+                               $update['primaryKey'],
+                               __METHOD__
+                       );
+               }
+
+               $this->db->commit();
+               wfWaitForSlaves( false, false, $this->clusterName );
+       }
+}
index dfcbe78..666660a 100644 (file)
@@ -21,6 +21,8 @@
  * @author Antoine Musso "<hashar at free dot fr>", Aaron Schulz
  */
 
+use IPSet\IPSet;
+
 // Some regex definition to "play" with IP address and IP address blocks
 
 // An IPv4 address is made of 4 bytes from x00 to xFF which is d0 to d255
@@ -240,7 +242,7 @@ class IP {
         * A bare IPv6 address is accepted despite the lack of square brackets.
         *
         * @param string $both The string with the host and port
-        * @return array
+        * @return array|false Array normally, false on certain failures
         */
        public static function splitHostAndPort( $both ) {
                if ( substr( $both, 0, 1 ) === '[' ) {
index 950dd84..740df92 100644 (file)
@@ -161,7 +161,7 @@ class MWCryptHKDF {
         * @throws MWException
         */
        protected static function singleton() {
-               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey;
+               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey, $wgMainCacheType;
 
                $secret = $wgHKDFSecret ?: $wgSecretKey;
                if ( !$secret ) {
@@ -176,11 +176,7 @@ class MWCryptHKDF {
                $context[] = gethostname();
 
                // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
-               try {
-                       $cache = ObjectCache::newAccelerator( array() );
-               } catch ( Exception $e ) {
-                       $cache = wfGetMainCache();
-               }
+               $cache = ObjectCache::newAccelerator( $wgMainCacheType );
 
                if ( is_null( self::$singleton ) ) {
                        self::$singleton = new self( $secret, $wgHKDFAlgorithm, $cache, $context );
diff --git a/includes/utils/RowUpdateGenerator.php b/includes/utils/RowUpdateGenerator.php
new file mode 100644 (file)
index 0000000..6a4792c
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Interface for generating updates to single rows in the database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+interface RowUpdateGenerator {
+       /**
+        * Given a database row, generates an array mapping column names to
+        * updated value within the database row.
+        *
+        * Sample Response:
+        *   return array(
+        *       'some_col' => 'new value',
+        *       'other_col' => 99,
+        *   );
+        *
+        * @param stdClass $row A row from the database
+        * @return array Map of column names to updated value within the
+        *  database row. When no update is required returns an empty array.
+        */
+       public function update( $row );
+}
index 2d7d932..04c8e19 100644 (file)
@@ -283,7 +283,7 @@ class UIDGenerator {
                $cache = null;
                if ( ( $flags & self::QUICK_VOLATILE ) && PHP_SAPI !== 'cli' ) {
                        try {
-                               $cache = ObjectCache::newAccelerator( array() );
+                               $cache = ObjectCache::newAccelerator();
                        } catch ( Exception $e ) {
                                // not supported
                        }
diff --git a/includes/utils/iterators/IteratorDecorator.php b/includes/utils/iterators/IteratorDecorator.php
new file mode 100644 (file)
index 0000000..c1b5020
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Allows extending classes to decorate an Iterator with
+ * reduced boilerplate.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+abstract class IteratorDecorator implements Iterator {
+       protected $iterator;
+
+       public function __construct( Iterator $iterator ) {
+               $this->iterator = $iterator;
+       }
+
+       public function current() {
+               return $this->iterator->current();
+       }
+
+       public function key() {
+               return $this->iterator->key();
+       }
+
+       public function next() {
+               $this->iterator->next();
+       }
+
+       public function rewind() {
+               $this->iterator->rewind();
+       }
+
+       public function valid() {
+               return $this->iterator->valid();
+       }
+}
diff --git a/includes/utils/iterators/NotRecursiveIterator.php b/includes/utils/iterators/NotRecursiveIterator.php
new file mode 100644 (file)
index 0000000..52ca61b
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Wraps a non-recursive iterator with methods to be recursive
+ * without children.
+ *
+ * Alternatively wraps a recursive iterator to prevent recursing deeper
+ * than the wrapped iterator.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write 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
+ */
+class NotRecursiveIterator extends IteratorDecorator implements RecursiveIterator {
+       public function hasChildren() {
+               return false;
+       }
+
+       public function getChildren() {
+               return null;
+       }
+}
index 10064b2..a0d7703 100644 (file)
@@ -3,6 +3,7 @@ Authors (alphabetically)
 Alex Monk <krenair@wikimedia.org>
 Bartosz Dziewoński <bdziewonski@wikimedia.org>
 Ed Sanders <esanders@wikimedia.org>
+Florian Schmidt <florian.schmidt.welzow@t-online.de>
 James D. Forrester <jforrester@wikimedia.org>
 Roan Kattouw <roan@wikimedia.org>
 Sucheta Ghoshal <sghoshal@wikimedia.org>
diff --git a/includes/widget/ComplexNamespaceInputWidget.php b/includes/widget/ComplexNamespaceInputWidget.php
new file mode 100644 (file)
index 0000000..21c5709
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+/**
+ * MediaWiki Widgets – ComplexNamespaceInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Namespace input widget. Displays a dropdown box with the choice of available namespaces, plus two
+ * checkboxes to include associated namespace or to invert selection.
+ */
+class ComplexNamespaceInputWidget extends \OOUI\Widget {
+
+       protected $config;
+       protected $namespace;
+       protected $associated = null;
+       protected $associatedLabel = null;
+       protected $invert = null;
+       protected $invertLabel = null;
+
+       /**
+        * @param array $config Configuration options
+        * @param array $config['namespace'] Configuration for the NamespaceInputWidget dropdown with list
+        *     of namespaces
+        * @param string $config['namespace']['includeAllValue'] If specified, add a "all namespaces"
+        *     option to the dropdown, and use this as the input value for it
+        * @param array|null $config['invert'] Configuration for the "invert selection" CheckboxInputWidget. If
+        *     null, the checkbox will not be generated.
+        * @param array|null $config['associated'] Configuration for the "include associated namespace"
+        *     CheckboxInputWidget. If null, the checkbox will not be generated.
+        * @param array $config['invertLabel'] Configuration for the FieldLayout with label wrapping the
+        *     "invert selection" checkbox
+        * @param string $config['invertLabel']['label'] Label text for the label
+        * @param array $config['associatedLabel'] Configuration for the FieldLayout with label wrapping
+        *     the "include associated namespace" checkbox
+        * @param string $config['associatedLabel']['label'] Label text for the label
+        */
+       public function __construct( array $config = array() ) {
+               // Configuration initialization
+               $config = array_merge(
+                       array(
+                               // Config options for nested widgets
+                               'namespace' => array(),
+                               'invert' => array(),
+                               'invertLabel' => array(),
+                               'associated' => array(),
+                               'associatedLabel' => array(),
+                       ),
+                       $config
+               );
+
+               // Parent constructor
+               parent::__construct( $config );
+
+               // Properties
+               $this->config = $config;
+
+               $this->namespace = new NamespaceInputWidget( $config['namespace'] );
+               if ( $config['associated'] !== null ) {
+                       $this->associated = new \OOUI\CheckboxInputWidget( array_merge(
+                               array( 'value' => '1' ),
+                               $config['associated']
+                       ) );
+                       // TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
+                       $this->associatedLabel = new \OOUI\FieldLayout(
+                               $this->associated,
+                               array_merge(
+                                       array( 'align' => 'inline' ),
+                                       $config['associatedLabel']
+                               )
+                       );
+               }
+               if ( $config['invert'] !== null ) {
+                       $this->invert = new \OOUI\CheckboxInputWidget( array_merge(
+                               array( 'value' => '1' ),
+                               $config['invert']
+                       ) );
+                       // TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
+                       $this->invertLabel = new \OOUI\FieldLayout(
+                               $this->invert,
+                               array_merge(
+                                       array( 'align' => 'inline' ),
+                                       $config['invertLabel']
+                               )
+                       );
+               }
+
+               // Initialization
+               $this
+                       ->addClasses( array( 'mw-widget-complexNamespaceInputWidget' ) )
+                       ->appendContent( $this->namespace, $this->associatedLabel, $this->invertLabel );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.ComplexNamespaceInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config = array_merge(
+                       $config,
+                       array_intersect_key(
+                               $this->config,
+                               array_fill_keys( array( 'namespace', 'invert', 'invertLabel', 'associated', 'associatedLabel' ), true )
+                       )
+               );
+               return parent::getConfig( $config );
+       }
+}
diff --git a/includes/widget/ComplexTitleInputWidget.php b/includes/widget/ComplexTitleInputWidget.php
new file mode 100644 (file)
index 0000000..73ef54c
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * MediaWiki Widgets – ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Complex title input widget.
+ */
+class ComplexTitleInputWidget extends \OOUI\Widget {
+
+       protected $namespace = null;
+       protected $title = null;
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @param array $config Configuration options
+        * @param array $config['namespace'] Configuration for the NamespaceInputWidget dropdown with list
+        *     of namespaces
+        * @param array $config['title'] Configuration for the TitleInputWidget text field
+        */
+       public function __construct( array $config = array() ) {
+               // Configuration initialization
+               $config = array_merge(
+                       array(
+                               'namespace' => array(),
+                               'title' => array(),
+                       ),
+                       $config
+               );
+
+               // Parent constructor
+               parent::__construct( $config );
+
+               // Properties
+               $this->config = $config;
+               $this->namespace = new NamespaceInputWidget( $config['namespace'] );
+               $this->title = new TitleInputWidget( array_merge(
+                       $config['title'],
+                       array(
+                               // The inner TitleInputWidget shouldn't be infusable, only the ComplexTitleInputWidget itself can be.
+                               'infusable' => false,
+                               'relative' => true,
+                               'namespace' => isset( $config['namespace']['value'] ) ? $config['namespace']['value'] : null,
+                       )
+               ) );
+
+               // Initialization
+               $this
+                       ->addClasses( array( 'mw-widget-complexTitleInputWidget' ) )
+                       ->appendContent( $this->namespace, $this->title );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.ComplexTitleInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config['namespace'] = $this->config['namespace'];
+               $config['title'] = $this->config['title'];
+               return parent::getConfig( $config );
+       }
+}
diff --git a/includes/widget/NamespaceInputWidget.php b/includes/widget/NamespaceInputWidget.php
new file mode 100644 (file)
index 0000000..696c8ad
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+ * MediaWiki Widgets – NamespaceInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * Namespace input widget. Displays a dropdown box with the choice of available namespaces.
+ */
+class NamespaceInputWidget extends \OOUI\DropdownInputWidget {
+
+       protected $includeAllValue = null;
+
+       /**
+        * @param array $config Configuration options
+        * @param string $config['includeAllValue'] If specified, add a "all namespaces" option to the
+        *     namespace dropdown, and use this as the input value for it
+        * @param number[] $config['exclude'] List of namespace numbers to exclude from the selector
+        */
+       public function __construct( array $config = array() ) {
+               // Configuration initialization
+               $config['options'] = $this->getNamespaceDropdownOptions( $config );
+
+               // Parent constructor
+               parent::__construct( $config );
+
+               // Properties
+               $this->includeAllValue = isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null;
+               $this->exclude = isset( $config['exclude'] ) ? $config['exclude'] : array();
+
+               // Initialization
+               $this->addClasses( array( 'mw-widget-namespaceInputWidget' ) );
+       }
+
+       protected function getNamespaceDropdownOptions( array $config ) {
+               $namespaceOptionsParams = array(
+                       'all' => isset( $config['includeAllValue'] ) ? $config['includeAllValue'] : null,
+                       'exclude' => isset( $config['exclude'] ) ? $config['exclude'] : null
+               );
+               $namespaceOptions = \Html::namespaceSelectorOptions( $namespaceOptionsParams );
+
+               $options = array();
+               foreach ( $namespaceOptions as $id => $name ) {
+                       $options[] = array(
+                               'data' => (string)$id,
+                               'label' => $name,
+                       );
+               }
+
+               return $options;
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.NamespaceInputWidget';
+       }
+
+       public function getConfig( &$config ) {
+               $config['includeAllValue'] = $this->includeAllValue;
+               $config['exclude'] = $this->exclude;
+               // Skip DropdownInputWidget's getConfig(), we don't need 'options' config
+               return \OOUI\InputWidget::getConfig( $config );
+       }
+}
index 7ddc67a..8ac7014 100644 (file)
@@ -7,36 +7,42 @@
  */
 namespace MediaWiki\Widget;
 
-use OOUI\TextInputWidget;
-
 /**
  * Title input widget.
  */
-class TitleInputWidget extends TextInputWidget {
+class TitleInputWidget extends \OOUI\TextInputWidget {
 
        protected $namespace = null;
        protected $relative = null;
+       protected $suggestions = null;
 
        /**
         * @param array $config Configuration options
         * @param int|null $config['namespace'] Namespace to prepend to queries
-        * @param bool|null $config['relative'] If a namespace is set, return a title relative to it (default; true)
+        * @param bool|null $config['relative'] If a namespace is set, return a title relative to it (default: true)
+        * @param bool|null $config['suggestions'] Display search suggestions (default: true)
         */
        public function __construct( array $config = array() ) {
                // Parent constructor
-               parent::__construct( array_merge( $config, array( 'infusable' => true ) ) );
+               parent::__construct( array_merge( array( 'infusable' => true, 'maxLength' => 255 ), $config ) );
 
                // Properties, which are ignored in PHP and just shipped back to JS
                if ( isset( $config['namespace'] ) ) {
                        $this->namespace = $config['namespace'];
                }
-
                if ( isset( $config['relative'] ) ) {
                        $this->relative = $config['relative'];
                }
+               if ( isset( $config['suggestions'] ) ) {
+                       $this->suggestions = $config['suggestions'];
+               }
 
                // Initialization
-               $this->addClasses( array( 'mw-widget-TitleInputWidget' ) );
+               $this->addClasses( array( 'mw-widget-titleInputWidget' ) );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.TitleInputWidget';
        }
 
        public function getConfig( &$config ) {
@@ -46,6 +52,9 @@ class TitleInputWidget extends TextInputWidget {
                if ( $this->relative !== null ) {
                        $config['relative'] = $this->relative;
                }
+               if ( $this->suggestions !== null ) {
+                       $config['suggestions'] = $this->suggestions;
+               }
                return parent::getConfig( $config );
        }
 }
diff --git a/includes/widget/UserInputWidget.php b/includes/widget/UserInputWidget.php
new file mode 100644 (file)
index 0000000..1e2d3d6
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * MediaWiki Widgets – UserInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+namespace MediaWiki\Widget;
+
+/**
+ * User input widget.
+ */
+class UserInputWidget extends \OOUI\TextInputWidget {
+
+       /**
+        * @param array $config Configuration options
+        */
+       public function __construct( array $config = array() ) {
+               // Parent constructor
+               parent::__construct( array_merge( array( 'infusable' => true ), $config ) );
+
+               // Initialization
+               $this->addClasses( array( 'mw-widget-userInputWidget' ) );
+       }
+
+       protected function getJavaScriptClassName() {
+               return 'mw.widgets.UserInputWidget';
+       }
+}
index 58d1ee6..5dd4977 100644 (file)
@@ -7,7 +7,7 @@
        "--builtin-classes": true,
        "--processes": "0",
        "--warnings-exit-nonzero": true,
-       "--external": "HTMLElement,HTMLDocument,Window,File,MouseEvent,KeyboardEvent",
+       "--external": "HTMLElement,HTMLDocument,Window,File,MouseEvent,KeyboardEvent,HTMLIframeElement,HTMLInputElement,XMLDocument",
        "--output": "docs/js",
        "--": [
                "maintenance/jsduck/external.js",
index fe0bd7e..1613536 100644 (file)
@@ -167,9 +167,11 @@ class Language {
         * Generated by UnicodeJS (see tools/strongDir) from the UCD; see
         * https://git.wikimedia.org/summary/unicodejs.git .
         */
+       // @codingStandardsIgnoreStart
        // @codeCoverageIgnoreStart
        static private $strongDirRegex = '/(?:([\x{41}-\x{5a}\x{61}-\x{7a}\x{aa}\x{b5}\x{ba}\x{c0}-\x{d6}\x{d8}-\x{f6}\x{f8}-\x{2b8}\x{2bb}-\x{2c1}\x{2d0}\x{2d1}\x{2e0}-\x{2e4}\x{2ee}\x{370}-\x{373}\x{376}\x{377}\x{37a}-\x{37d}\x{37f}\x{386}\x{388}-\x{38a}\x{38c}\x{38e}-\x{3a1}\x{3a3}-\x{3f5}\x{3f7}-\x{482}\x{48a}-\x{52f}\x{531}-\x{556}\x{559}-\x{55f}\x{561}-\x{587}\x{589}\x{903}-\x{939}\x{93b}\x{93d}-\x{940}\x{949}-\x{94c}\x{94e}-\x{950}\x{958}-\x{961}\x{964}-\x{980}\x{982}\x{983}\x{985}-\x{98c}\x{98f}\x{990}\x{993}-\x{9a8}\x{9aa}-\x{9b0}\x{9b2}\x{9b6}-\x{9b9}\x{9bd}-\x{9c0}\x{9c7}\x{9c8}\x{9cb}\x{9cc}\x{9ce}\x{9d7}\x{9dc}\x{9dd}\x{9df}-\x{9e1}\x{9e6}-\x{9f1}\x{9f4}-\x{9fa}\x{a03}\x{a05}-\x{a0a}\x{a0f}\x{a10}\x{a13}-\x{a28}\x{a2a}-\x{a30}\x{a32}\x{a33}\x{a35}\x{a36}\x{a38}\x{a39}\x{a3e}-\x{a40}\x{a59}-\x{a5c}\x{a5e}\x{a66}-\x{a6f}\x{a72}-\x{a74}\x{a83}\x{a85}-\x{a8d}\x{a8f}-\x{a91}\x{a93}-\x{aa8}\x{aaa}-\x{ab0}\x{ab2}\x{ab3}\x{ab5}-\x{ab9}\x{abd}-\x{ac0}\x{ac9}\x{acb}\x{acc}\x{ad0}\x{ae0}\x{ae1}\x{ae6}-\x{af0}\x{af9}\x{b02}\x{b03}\x{b05}-\x{b0c}\x{b0f}\x{b10}\x{b13}-\x{b28}\x{b2a}-\x{b30}\x{b32}\x{b33}\x{b35}-\x{b39}\x{b3d}\x{b3e}\x{b40}\x{b47}\x{b48}\x{b4b}\x{b4c}\x{b57}\x{b5c}\x{b5d}\x{b5f}-\x{b61}\x{b66}-\x{b77}\x{b83}\x{b85}-\x{b8a}\x{b8e}-\x{b90}\x{b92}-\x{b95}\x{b99}\x{b9a}\x{b9c}\x{b9e}\x{b9f}\x{ba3}\x{ba4}\x{ba8}-\x{baa}\x{bae}-\x{bb9}\x{bbe}\x{bbf}\x{bc1}\x{bc2}\x{bc6}-\x{bc8}\x{bca}-\x{bcc}\x{bd0}\x{bd7}\x{be6}-\x{bf2}\x{c01}-\x{c03}\x{c05}-\x{c0c}\x{c0e}-\x{c10}\x{c12}-\x{c28}\x{c2a}-\x{c39}\x{c3d}\x{c41}-\x{c44}\x{c58}-\x{c5a}\x{c60}\x{c61}\x{c66}-\x{c6f}\x{c7f}\x{c82}\x{c83}\x{c85}-\x{c8c}\x{c8e}-\x{c90}\x{c92}-\x{ca8}\x{caa}-\x{cb3}\x{cb5}-\x{cb9}\x{cbd}-\x{cc4}\x{cc6}-\x{cc8}\x{cca}\x{ccb}\x{cd5}\x{cd6}\x{cde}\x{ce0}\x{ce1}\x{ce6}-\x{cef}\x{cf1}\x{cf2}\x{d02}\x{d03}\x{d05}-\x{d0c}\x{d0e}-\x{d10}\x{d12}-\x{d3a}\x{d3d}-\x{d40}\x{d46}-\x{d48}\x{d4a}-\x{d4c}\x{d4e}\x{d57}\x{d5f}-\x{d61}\x{d66}-\x{d75}\x{d79}-\x{d7f}\x{d82}\x{d83}\x{d85}-\x{d96}\x{d9a}-\x{db1}\x{db3}-\x{dbb}\x{dbd}\x{dc0}-\x{dc6}\x{dcf}-\x{dd1}\x{dd8}-\x{ddf}\x{de6}-\x{def}\x{df2}-\x{df4}\x{e01}-\x{e30}\x{e32}\x{e33}\x{e40}-\x{e46}\x{e4f}-\x{e5b}\x{e81}\x{e82}\x{e84}\x{e87}\x{e88}\x{e8a}\x{e8d}\x{e94}-\x{e97}\x{e99}-\x{e9f}\x{ea1}-\x{ea3}\x{ea5}\x{ea7}\x{eaa}\x{eab}\x{ead}-\x{eb0}\x{eb2}\x{eb3}\x{ebd}\x{ec0}-\x{ec4}\x{ec6}\x{ed0}-\x{ed9}\x{edc}-\x{edf}\x{f00}-\x{f17}\x{f1a}-\x{f34}\x{f36}\x{f38}\x{f3e}-\x{f47}\x{f49}-\x{f6c}\x{f7f}\x{f85}\x{f88}-\x{f8c}\x{fbe}-\x{fc5}\x{fc7}-\x{fcc}\x{fce}-\x{fda}\x{1000}-\x{102c}\x{1031}\x{1038}\x{103b}\x{103c}\x{103f}-\x{1057}\x{105a}-\x{105d}\x{1061}-\x{1070}\x{1075}-\x{1081}\x{1083}\x{1084}\x{1087}-\x{108c}\x{108e}-\x{109c}\x{109e}-\x{10c5}\x{10c7}\x{10cd}\x{10d0}-\x{1248}\x{124a}-\x{124d}\x{1250}-\x{1256}\x{1258}\x{125a}-\x{125d}\x{1260}-\x{1288}\x{128a}-\x{128d}\x{1290}-\x{12b0}\x{12b2}-\x{12b5}\x{12b8}-\x{12be}\x{12c0}\x{12c2}-\x{12c5}\x{12c8}-\x{12d6}\x{12d8}-\x{1310}\x{1312}-\x{1315}\x{1318}-\x{135a}\x{1360}-\x{137c}\x{1380}-\x{138f}\x{13a0}-\x{13f5}\x{13f8}-\x{13fd}\x{1401}-\x{167f}\x{1681}-\x{169a}\x{16a0}-\x{16f8}\x{1700}-\x{170c}\x{170e}-\x{1711}\x{1720}-\x{1731}\x{1735}\x{1736}\x{1740}-\x{1751}\x{1760}-\x{176c}\x{176e}-\x{1770}\x{1780}-\x{17b3}\x{17b6}\x{17be}-\x{17c5}\x{17c7}\x{17c8}\x{17d4}-\x{17da}\x{17dc}\x{17e0}-\x{17e9}\x{1810}-\x{1819}\x{1820}-\x{1877}\x{1880}-\x{18a8}\x{18aa}\x{18b0}-\x{18f5}\x{1900}-\x{191e}\x{1923}-\x{1926}\x{1929}-\x{192b}\x{1930}\x{1931}\x{1933}-\x{1938}\x{1946}-\x{196d}\x{1970}-\x{1974}\x{1980}-\x{19ab}\x{19b0}-\x{19c9}\x{19d0}-\x{19da}\x{1a00}-\x{1a16}\x{1a19}\x{1a1a}\x{1a1e}-\x{1a55}\x{1a57}\x{1a61}\x{1a63}\x{1a64}\x{1a6d}-\x{1a72}\x{1a80}-\x{1a89}\x{1a90}-\x{1a99}\x{1aa0}-\x{1aad}\x{1b04}-\x{1b33}\x{1b35}\x{1b3b}\x{1b3d}-\x{1b41}\x{1b43}-\x{1b4b}\x{1b50}-\x{1b6a}\x{1b74}-\x{1b7c}\x{1b82}-\x{1ba1}\x{1ba6}\x{1ba7}\x{1baa}\x{1bae}-\x{1be5}\x{1be7}\x{1bea}-\x{1bec}\x{1bee}\x{1bf2}\x{1bf3}\x{1bfc}-\x{1c2b}\x{1c34}\x{1c35}\x{1c3b}-\x{1c49}\x{1c4d}-\x{1c7f}\x{1cc0}-\x{1cc7}\x{1cd3}\x{1ce1}\x{1ce9}-\x{1cec}\x{1cee}-\x{1cf3}\x{1cf5}\x{1cf6}\x{1d00}-\x{1dbf}\x{1e00}-\x{1f15}\x{1f18}-\x{1f1d}\x{1f20}-\x{1f45}\x{1f48}-\x{1f4d}\x{1f50}-\x{1f57}\x{1f59}\x{1f5b}\x{1f5d}\x{1f5f}-\x{1f7d}\x{1f80}-\x{1fb4}\x{1fb6}-\x{1fbc}\x{1fbe}\x{1fc2}-\x{1fc4}\x{1fc6}-\x{1fcc}\x{1fd0}-\x{1fd3}\x{1fd6}-\x{1fdb}\x{1fe0}-\x{1fec}\x{1ff2}-\x{1ff4}\x{1ff6}-\x{1ffc}\x{200e}\x{2071}\x{207f}\x{2090}-\x{209c}\x{2102}\x{2107}\x{210a}-\x{2113}\x{2115}\x{2119}-\x{211d}\x{2124}\x{2126}\x{2128}\x{212a}-\x{212d}\x{212f}-\x{2139}\x{213c}-\x{213f}\x{2145}-\x{2149}\x{214e}\x{214f}\x{2160}-\x{2188}\x{2336}-\x{237a}\x{2395}\x{249c}-\x{24e9}\x{26ac}\x{2800}-\x{28ff}\x{2c00}-\x{2c2e}\x{2c30}-\x{2c5e}\x{2c60}-\x{2ce4}\x{2ceb}-\x{2cee}\x{2cf2}\x{2cf3}\x{2d00}-\x{2d25}\x{2d27}\x{2d2d}\x{2d30}-\x{2d67}\x{2d6f}\x{2d70}\x{2d80}-\x{2d96}\x{2da0}-\x{2da6}\x{2da8}-\x{2dae}\x{2db0}-\x{2db6}\x{2db8}-\x{2dbe}\x{2dc0}-\x{2dc6}\x{2dc8}-\x{2dce}\x{2dd0}-\x{2dd6}\x{2dd8}-\x{2dde}\x{3005}-\x{3007}\x{3021}-\x{3029}\x{302e}\x{302f}\x{3031}-\x{3035}\x{3038}-\x{303c}\x{3041}-\x{3096}\x{309d}-\x{309f}\x{30a1}-\x{30fa}\x{30fc}-\x{30ff}\x{3105}-\x{312d}\x{3131}-\x{318e}\x{3190}-\x{31ba}\x{31f0}-\x{321c}\x{3220}-\x{324f}\x{3260}-\x{327b}\x{327f}-\x{32b0}\x{32c0}-\x{32cb}\x{32d0}-\x{32fe}\x{3300}-\x{3376}\x{337b}-\x{33dd}\x{33e0}-\x{33fe}\x{3400}-\x{4db5}\x{4e00}-\x{9fd5}\x{a000}-\x{a48c}\x{a4d0}-\x{a60c}\x{a610}-\x{a62b}\x{a640}-\x{a66e}\x{a680}-\x{a69d}\x{a6a0}-\x{a6ef}\x{a6f2}-\x{a6f7}\x{a722}-\x{a787}\x{a789}-\x{a7ad}\x{a7b0}-\x{a7b7}\x{a7f7}-\x{a801}\x{a803}-\x{a805}\x{a807}-\x{a80a}\x{a80c}-\x{a824}\x{a827}\x{a830}-\x{a837}\x{a840}-\x{a873}\x{a880}-\x{a8c3}\x{a8ce}-\x{a8d9}\x{a8f2}-\x{a8fd}\x{a900}-\x{a925}\x{a92e}-\x{a946}\x{a952}\x{a953}\x{a95f}-\x{a97c}\x{a983}-\x{a9b2}\x{a9b4}\x{a9b5}\x{a9ba}\x{a9bb}\x{a9bd}-\x{a9cd}\x{a9cf}-\x{a9d9}\x{a9de}-\x{a9e4}\x{a9e6}-\x{a9fe}\x{aa00}-\x{aa28}\x{aa2f}\x{aa30}\x{aa33}\x{aa34}\x{aa40}-\x{aa42}\x{aa44}-\x{aa4b}\x{aa4d}\x{aa50}-\x{aa59}\x{aa5c}-\x{aa7b}\x{aa7d}-\x{aaaf}\x{aab1}\x{aab5}\x{aab6}\x{aab9}-\x{aabd}\x{aac0}\x{aac2}\x{aadb}-\x{aaeb}\x{aaee}-\x{aaf5}\x{ab01}-\x{ab06}\x{ab09}-\x{ab0e}\x{ab11}-\x{ab16}\x{ab20}-\x{ab26}\x{ab28}-\x{ab2e}\x{ab30}-\x{ab65}\x{ab70}-\x{abe4}\x{abe6}\x{abe7}\x{abe9}-\x{abec}\x{abf0}-\x{abf9}\x{ac00}-\x{d7a3}\x{d7b0}-\x{d7c6}\x{d7cb}-\x{d7fb}\x{e000}-\x{fa6d}\x{fa70}-\x{fad9}\x{fb00}-\x{fb06}\x{fb13}-\x{fb17}\x{ff21}-\x{ff3a}\x{ff41}-\x{ff5a}\x{ff66}-\x{ffbe}\x{ffc2}-\x{ffc7}\x{ffca}-\x{ffcf}\x{ffd2}-\x{ffd7}\x{ffda}-\x{ffdc}\x{10000}-\x{1000b}\x{1000d}-\x{10026}\x{10028}-\x{1003a}\x{1003c}\x{1003d}\x{1003f}-\x{1004d}\x{10050}-\x{1005d}\x{10080}-\x{100fa}\x{10100}\x{10102}\x{10107}-\x{10133}\x{10137}-\x{1013f}\x{101d0}-\x{101fc}\x{10280}-\x{1029c}\x{102a0}-\x{102d0}\x{10300}-\x{10323}\x{10330}-\x{1034a}\x{10350}-\x{10375}\x{10380}-\x{1039d}\x{1039f}-\x{103c3}\x{103c8}-\x{103d5}\x{10400}-\x{1049d}\x{104a0}-\x{104a9}\x{10500}-\x{10527}\x{10530}-\x{10563}\x{1056f}\x{10600}-\x{10736}\x{10740}-\x{10755}\x{10760}-\x{10767}\x{11000}\x{11002}-\x{11037}\x{11047}-\x{1104d}\x{11066}-\x{1106f}\x{11082}-\x{110b2}\x{110b7}\x{110b8}\x{110bb}-\x{110c1}\x{110d0}-\x{110e8}\x{110f0}-\x{110f9}\x{11103}-\x{11126}\x{1112c}\x{11136}-\x{11143}\x{11150}-\x{11172}\x{11174}-\x{11176}\x{11182}-\x{111b5}\x{111bf}-\x{111c9}\x{111cd}\x{111d0}-\x{111df}\x{111e1}-\x{111f4}\x{11200}-\x{11211}\x{11213}-\x{1122e}\x{11232}\x{11233}\x{11235}\x{11238}-\x{1123d}\x{11280}-\x{11286}\x{11288}\x{1128a}-\x{1128d}\x{1128f}-\x{1129d}\x{1129f}-\x{112a9}\x{112b0}-\x{112de}\x{112e0}-\x{112e2}\x{112f0}-\x{112f9}\x{11302}\x{11303}\x{11305}-\x{1130c}\x{1130f}\x{11310}\x{11313}-\x{11328}\x{1132a}-\x{11330}\x{11332}\x{11333}\x{11335}-\x{11339}\x{1133d}-\x{1133f}\x{11341}-\x{11344}\x{11347}\x{11348}\x{1134b}-\x{1134d}\x{11350}\x{11357}\x{1135d}-\x{11363}\x{11480}-\x{114b2}\x{114b9}\x{114bb}-\x{114be}\x{114c1}\x{114c4}-\x{114c7}\x{114d0}-\x{114d9}\x{11580}-\x{115b1}\x{115b8}-\x{115bb}\x{115be}\x{115c1}-\x{115db}\x{11600}-\x{11632}\x{1163b}\x{1163c}\x{1163e}\x{11641}-\x{11644}\x{11650}-\x{11659}\x{11680}-\x{116aa}\x{116ac}\x{116ae}\x{116af}\x{116b6}\x{116c0}-\x{116c9}\x{11700}-\x{11719}\x{11720}\x{11721}\x{11726}\x{11730}-\x{1173f}\x{118a0}-\x{118f2}\x{118ff}\x{11ac0}-\x{11af8}\x{12000}-\x{12399}\x{12400}-\x{1246e}\x{12470}-\x{12474}\x{12480}-\x{12543}\x{13000}-\x{1342e}\x{14400}-\x{14646}\x{16800}-\x{16a38}\x{16a40}-\x{16a5e}\x{16a60}-\x{16a69}\x{16a6e}\x{16a6f}\x{16ad0}-\x{16aed}\x{16af5}\x{16b00}-\x{16b2f}\x{16b37}-\x{16b45}\x{16b50}-\x{16b59}\x{16b5b}-\x{16b61}\x{16b63}-\x{16b77}\x{16b7d}-\x{16b8f}\x{16f00}-\x{16f44}\x{16f50}-\x{16f7e}\x{16f93}-\x{16f9f}\x{1b000}\x{1b001}\x{1bc00}-\x{1bc6a}\x{1bc70}-\x{1bc7c}\x{1bc80}-\x{1bc88}\x{1bc90}-\x{1bc99}\x{1bc9c}\x{1bc9f}\x{1d000}-\x{1d0f5}\x{1d100}-\x{1d126}\x{1d129}-\x{1d166}\x{1d16a}-\x{1d172}\x{1d183}\x{1d184}\x{1d18c}-\x{1d1a9}\x{1d1ae}-\x{1d1e8}\x{1d360}-\x{1d371}\x{1d400}-\x{1d454}\x{1d456}-\x{1d49c}\x{1d49e}\x{1d49f}\x{1d4a2}\x{1d4a5}\x{1d4a6}\x{1d4a9}-\x{1d4ac}\x{1d4ae}-\x{1d4b9}\x{1d4bb}\x{1d4bd}-\x{1d4c3}\x{1d4c5}-\x{1d505}\x{1d507}-\x{1d50a}\x{1d50d}-\x{1d514}\x{1d516}-\x{1d51c}\x{1d51e}-\x{1d539}\x{1d53b}-\x{1d53e}\x{1d540}-\x{1d544}\x{1d546}\x{1d54a}-\x{1d550}\x{1d552}-\x{1d6a5}\x{1d6a8}-\x{1d6da}\x{1d6dc}-\x{1d714}\x{1d716}-\x{1d74e}\x{1d750}-\x{1d788}\x{1d78a}-\x{1d7c2}\x{1d7c4}-\x{1d7cb}\x{1d800}-\x{1d9ff}\x{1da37}-\x{1da3a}\x{1da6d}-\x{1da74}\x{1da76}-\x{1da83}\x{1da85}-\x{1da8b}\x{1f110}-\x{1f12e}\x{1f130}-\x{1f169}\x{1f170}-\x{1f19a}\x{1f1e6}-\x{1f202}\x{1f210}-\x{1f23a}\x{1f240}-\x{1f248}\x{1f250}\x{1f251}\x{20000}-\x{2a6d6}\x{2a700}-\x{2b734}\x{2b740}-\x{2b81d}\x{2b820}-\x{2cea1}\x{2f800}-\x{2fa1d}\x{f0000}-\x{ffffd}\x{100000}-\x{10fffd}])|([\x{590}\x{5be}\x{5c0}\x{5c3}\x{5c6}\x{5c8}-\x{5ff}\x{7c0}-\x{7ea}\x{7f4}\x{7f5}\x{7fa}-\x{815}\x{81a}\x{824}\x{828}\x{82e}-\x{858}\x{85c}-\x{89f}\x{200f}\x{fb1d}\x{fb1f}-\x{fb28}\x{fb2a}-\x{fb4f}\x{10800}-\x{1091e}\x{10920}-\x{10a00}\x{10a04}\x{10a07}-\x{10a0b}\x{10a10}-\x{10a37}\x{10a3b}-\x{10a3e}\x{10a40}-\x{10ae4}\x{10ae7}-\x{10b38}\x{10b40}-\x{10e5f}\x{10e7f}-\x{10fff}\x{1e800}-\x{1e8cf}\x{1e8d7}-\x{1edff}\x{1ef00}-\x{1efff}\x{608}\x{60b}\x{60d}\x{61b}-\x{64a}\x{66d}-\x{66f}\x{671}-\x{6d5}\x{6e5}\x{6e6}\x{6ee}\x{6ef}\x{6fa}-\x{710}\x{712}-\x{72f}\x{74b}-\x{7a5}\x{7b1}-\x{7bf}\x{8a0}-\x{8e2}\x{fb50}-\x{fd3d}\x{fd40}-\x{fdcf}\x{fdf0}-\x{fdfc}\x{fdfe}\x{fdff}\x{fe70}-\x{fefe}\x{1ee00}-\x{1eeef}\x{1eef2}-\x{1eeff}]))/u';
        // @codeCoverageIgnoreEnd
+       // @codingStandardsIgnoreEnd
 
        /**
         * Get a cached or new language object for a given language code
@@ -254,10 +256,16 @@ class Language {
         * @since 1.21
         */
        public static function isSupportedLanguage( $code ) {
-               return self::isValidBuiltInCode( $code )
-                       && ( is_readable( self::getMessagesFileName( $code ) )
-                               || is_readable( self::getJsonMessagesFileName( $code ) )
-               );
+               if ( !self::isValidBuiltInCode( $code ) ) {
+                       return false;
+               }
+
+               if ( $code === 'qqq' ) {
+                       return false;
+               }
+
+               return is_readable( self::getMessagesFileName( $code ) ) ||
+                       is_readable( self::getJsonMessagesFileName( $code ) );
        }
 
        /**
@@ -547,10 +555,8 @@ class Language {
        }
 
        /**
-        * A convenience function that returns the same thing as
-        * getNamespaces() except with the array values changed to ' '
-        * where it found '_', useful for producing output to be displayed
-        * e.g. in <select> forms.
+        * A convenience function that returns getNamespaces() with spaces instead of underscores
+        * in values. Useful for producing output to be displayed e.g. in `<select>` forms.
         *
         * @return array
         */
@@ -564,6 +570,7 @@ class Language {
 
        /**
         * Get a namespace value by key
+        *
         * <code>
         * $mw_ns = $wgContLang->getNsText( NS_MEDIAWIKI );
         * echo $mw_ns; // prints 'MediaWiki'
@@ -574,7 +581,6 @@ class Language {
         */
        function getNsText( $index ) {
                $ns = $this->getNamespaces();
-
                return isset( $ns[$index] ) ? $ns[$index] : false;
        }
 
@@ -593,7 +599,6 @@ class Language {
         */
        function getFormattedNsText( $index ) {
                $ns = $this->getNsText( $index );
-
                return strtr( $ns, '_', ' ' );
        }
 
@@ -2267,30 +2272,33 @@ class Language {
 
        /**
         * Get a format string for a given type and preference
-        * @param string $type May be date, time or both
-        * @param string $pref The format name as it appears in Messages*.php
+        * @param string $type May be 'date', 'time', 'both', or 'pretty'.
+        * @param string $pref The format name as it appears in Messages*.php under
+        *  $datePreferences.
         *
         * @since 1.22 New type 'pretty' that provides a more readable timestamp format
         *
         * @return string
         */
        function getDateFormatString( $type, $pref ) {
+               $wasDefault = false;
+               if ( $pref == 'default' ) {
+                       $wasDefault = true;
+                       $pref = $this->getDefaultDateFormat();
+               }
+
                if ( !isset( $this->dateFormatStrings[$type][$pref] ) ) {
-                       if ( $pref == 'default' ) {
-                               $pref = $this->getDefaultDateFormat();
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                       } else {
-                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
+                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
 
-                               if ( $type === 'pretty' && $df === null ) {
-                                       $df = $this->getDateFormatString( 'date', $pref );
-                               }
+                       if ( $type === 'pretty' && $df === null ) {
+                               $df = $this->getDateFormatString( 'date', $pref );
+                       }
 
-                               if ( $df === null ) {
-                                       $pref = $this->getDefaultDateFormat();
-                                       $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
-                               }
+                       if ( !$wasDefault && $df === null ) {
+                               $pref = $this->getDefaultDateFormat();
+                               $df = self::$dataCache->getSubitem( $this->mCode, 'dateFormats', "$pref $type" );
                        }
+
                        $this->dateFormatStrings[$type][$pref] = $df;
                }
                return $this->dateFormatStrings[$type][$pref];
@@ -2835,7 +2843,7 @@ class Language {
         * @return bool
         */
        function isMultibyte( $str ) {
-               return (bool)preg_match( '/[\x80-\xff]/', $str );
+               return strlen( $str ) !== mb_strlen( $str );
        }
 
        /**
index 6d537d3..a81f17f 100644 (file)
@@ -41,6 +41,8 @@
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ace' => 'Acèh',       # Aceh
+       'ady' => 'адыгабзэ',    # Adyghe
+       'ady-cyrl' => 'адыгабзэ',       # Adyghe
        'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
        'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
        'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
@@ -59,6 +61,7 @@
        'ary' => 'Maġribi',    # Moroccan Spoken Arabic
        'arz' => 'مصرى',    # Egyptian Spoken Arabic
        'as' => 'অসমীয়া',        # Assamese
+       'ase' => 'American sign language',      # American sign language
        'ast' => 'asturianu',   # Asturian
        'av' => 'авар',     # Avar
        'avk' => 'Kotava', # Kotava
        'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
        'bbc' => 'Batak Toba', # Batak Toba (falls back to bbc-latn)
        'bbc-latn' => 'Batak Toba', # Batak Toba
-       'bcc' => 'بÙ\84Ù\88Ú\86Û\8c Ù\85کراÙ\86Û\8c', # Southern Balochi
+       'bcc' => 'جÙ\87Ù\84سرÛ\8c Ø¨Ù\84Ù\88Ú\86Û\8c', # Southern Balochi
        'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
        'be' => 'беларуская', #  Belarusian normative
        'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
        'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
        'bg' => 'български',   # Bulgarian
-       'bgn' => 'بÙ\84Ù\88Ú\86Û\8c Ø±Ø®Ø´Ø§Ù\86Û\8c', # Western Balochi
+       'bgn' => 'رÙ\88Ú\86 Ú©Ù¾ØªÛ\8cÙ\86 Ø¨Ù\84Ù\88Ú\86Û\8c', # Western Balochi
        'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
        'bho' => 'भोजपुरी',       # Bhojpuri
        'bi' => 'Bislama',              # Bislama
        'lt' => 'lietuvių',    # Lithuanian
        'ltg' => 'latgaļu',    # Latgalian
        'lus' => 'Mizo ţawng', # Mizo/Lushai
+       'luz' => 'لئری دوٙمینی', # Southern Luri
        'lv' => 'latviešu',    # Latvian
        'lzh' => '文言',      # Literary Chinese, bug 8217
        'lzz' => 'Lazuri',      # Laz
        'sco' => 'Scots',       # Scots
        'sd' => 'سنڌي',     # Sindhi
        'sdc' => 'Sassaresu',   # Sassarese
+       'sdh' => 'کوردی خوارگ',       # Southern Kurdish
        'se' => 'sámegiella',  # Northern Sami
        'sei' => 'Cmique Itom', # Seri
        'ses' => 'Koyraboro Senni',     # Koyraboro Senni
diff --git a/languages/i18n/ady-cyrl.json b/languages/i18n/ady-cyrl.json
new file mode 100644 (file)
index 0000000..09b45c5
--- /dev/null
@@ -0,0 +1,1305 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Adamsa123",
+                       "Amire80",
+                       "Bedynokue.nart",
+                       "Celekan",
+                       "GR44 Luc",
+                       "H.2B.H",
+                       "Highlander45temp",
+                       "Inyzh",
+                       "Peserey",
+                       "SamGamgee",
+                       "SmartNart12",
+                       "TheRossatron"
+               ]
+       },
+       "tog-underline": "Зэпыщэхэм якIэгъэтхъын:",
+       "tog-hideminor": "ЗэхъокӀ цIыкIухэр бэмышIхэм къащымгъэлъагъу",
+       "tog-hidepatrolled": "УплъэкIужьыгъэ зэхъокӀхэр бэмышIхэм къащымгъэлъагъу",
+       "tog-newpageshidepatrolled": "НэкIубгъуакIэ купым и уплъэкIужьыгъэ нэкIубгъохэр гъэбылъ",
+       "tog-extendwatchlist": "КӀэлъыплъэ тхылъыр зэхэщ зэхъокӀ пстэур плъэгъунэу, бэмышӀхэм ямызакъоу",
+       "tog-usenewrc": "БэмышI зэхъокIхэм ыкIи лъыплъэ купым щыщ зэхъокIхэр куп-купэу гъэзаф",
+       "tog-numberheadings": "Аутоматэу цӀэшъхьаӀхэм номер ятын",
+       "tog-showtoolbar": "Къэгъэлъагъу еIэзэн Ӏэмэ-псымэхэр",
+       "tog-editondblclick": "ТIо-теIункIэмкIэ нэкIубгъомэ яIаз",
+       "tog-editsectiononrightclick": "Жъабгъу тIо-теIункIэмкIэ уеIэзэшъунэу къэшI",
+       "tog-watchcreations": "СшIыгъэ нэкIубгъохэр ыкIи ислъхьэгъэ файлэхэр си лъыплъэ купым хэгъахъу",
+       "tog-watchdefault": "СызэIэзэрэ нэкIубгъохэр ыкIи файлхэр си лъыплъэ купым хэгъахъу",
+       "tog-watchmoves": "ЗыцIэ схъожьыгъэ нэкIубгъохэмрэ файлэхэмрэ си лъыплъэ купым хэгъахъу",
+       "tog-watchdeletion": "ТезгъэкIыгъэ нэкIубгъохэмрэ файлхэмрэ си лъыплъэ купым хэгъахъу",
+       "tog-minordefault": "АпэмкIэ еIэзэн пстэур мэхьанэшхо зимыIэ фэдэу къэгъэлъагъу",
+       "tog-previewontop": "Ыпэтеплъэр еIэзалъэ-плIэмыем ыпэ къэгъэлъагъу",
+       "tog-previewonfirst": "Ыпэтеплъэр къэгъэлъагъу апэрэ еIэзэным ыпэ",
+       "tog-enotifwatchlistpages": "Си лъыплъэ купым щыщэу нэкIубгъом е файлым еIэзагъэхэмэ емэйл къысфегъэхь",
+       "tog-enotifusertalkpages": "Поштэ къысфегъэхь си тегущыIэн нэкIубгъор зэхъокIыгъэмэ",
+       "tog-enotifminoredits": "Ащ нэмыкIэу еIэзэн цIыкIу щыIэмэ емэйл къысфегъэхь",
+       "tog-enotifrevealaddr": "Къэбар къэӀофыгъохэм си поштэ адресыр къыщыгъэлъагъу",
+       "tog-shownumberswatching": "Лъыплъэрэ хэлэжьэкIо пчъагъэ къэгъэлъагъу",
+       "tog-oldsig": "Джырэ кIэтхэжьыкIэ:",
+       "tog-fancysig": "КIэтхэжьыкIэр викитекстэу лъытэ (аутоматик зэпыщэ имыIэу)",
+       "tog-uselivepreview": "Ыпэеплъ шӀэхыр гъэфедэн",
+       "tog-forceeditsummary": "СэгъашI, гъэтэрэзыным и гурыIогъапIэм зи имытхагъэмэ",
+       "tog-watchlisthideown": "Лъыплъэ тхылъым си еIэзэнхэр къыщымгъэлъагъу",
+       "tog-watchlisthidebots": "Бот еIэзэныгъэхэр лъыплъэ купым хэх",
+       "tog-watchlisthideminor": "МэхьанэцIыкIу еIэзэныгъэхэр лъыплъэ купым хэх",
+       "tog-watchlisthideliu": "Системэм хэхьэгъэ нэбгырэмэ я еIэзэнхэр лъыплъэ купым хэх",
+       "tog-watchlisthideanons": "Системэм хэмыхьэгъэ нэбгырэмэ я еIэзэнхэр лъыплъэ купым хэх",
+       "tog-watchlisthidepatrolled": "УплъэкIужьыгъэ еIэзэнхэр лъыплъэ купым хэх",
+       "tog-ccmeonemails": "Емэйлэу фязгъэхьхэрэр сэри къысфэдзыжьых",
+       "tog-diffonly": "Зэгъэпшалъэм ычIэгъ нэкIубгъом итыр къэмгъэлъагъу",
+       "tog-showhiddencats": "Гъэбылъыгъэ категориехэр къэгъэлъагъу",
+       "tog-norollbackdiff": "ЗэкIэдзэжьым ыуж зэгъэпшалъэр къэмгъэлъагъу",
+       "tog-useeditwarning": "СэгъашI сызэIазэрэ нэкIубгъом темгъэпытыхьагъэу сыкъекIымэ",
+       "tog-prefershttps": "Ренэу зэпышIэныгъэ шъэфыр гъэфед, системэм ухэхьагъэу щытмэ",
+       "underline-always": "Ренэу",
+       "underline-never": "ЗэнэмыIэ",
+       "editfont-style": "ЕIэзалъэ плIэмыем ытхыбзэ теплъ:",
+       "editfont-default": "Шрифтыр браузерым зэрэщыгъэпсыгъэм фэдэу",
+       "sunday": "Тхьаумаф",
+       "monday": "Блыпэ",
+       "tuesday": "Гъубдж",
+       "wednesday": "Бэрэскэжъый",
+       "thursday": "Мэфэку",
+       "friday": "Бэрэскэшху",
+       "saturday": "Мэфэзакъу",
+       "sun": "Тмф",
+       "mon": "Блп",
+       "tue": "Гбж",
+       "wed": "Брж",
+       "thu": "Мфк",
+       "fri": "Брш",
+       "sat": "Мфз",
+       "january": "Щылэ",
+       "february": "Мэзай",
+       "march": "Гъэтхапэ",
+       "april": "Мэлылъфэгъу",
+       "may_long": "ЖъоныгъуакӀ",
+       "june": "Мэкъуогъу",
+       "july": "Бэдзэогъу",
+       "august": "ШышъхьэӀу",
+       "september": "Ӏоныгъу",
+       "october": "Чъэпыогъу",
+       "november": "ШэкӀогъу",
+       "december": "Тыгъэгъаз",
+       "january-gen": "Щылэ",
+       "february-gen": "Мэзай",
+       "march-gen": "Гъэтхапэ",
+       "april-gen": "Мэлылъфэгъу",
+       "may-gen": "ЖъоныгъуакӀ",
+       "june-gen": "Мэкъуогъу",
+       "july-gen": "Бэдзэогъу",
+       "august-gen": "ШышъхьаӀу",
+       "september-gen": "Ӏоныгъу",
+       "october-gen": "Чъэпыогъу",
+       "november-gen": "ШэкӀогъу",
+       "december-gen": "Тыгъэгъаз",
+       "jan": "Щл",
+       "feb": "Мзй",
+       "mar": "Гътп",
+       "apr": "Мллъ",
+       "may": "Жън",
+       "jun": "Мкъгъ",
+       "jul": "Бдз",
+       "aug": "Шшъхь",
+       "sep": "Ӏон",
+       "oct": "Чъп",
+       "nov": "Шкгъ",
+       "dec": "Тгъ",
+       "january-date": "Щылэ мазэ $1",
+       "february-date": "Мэзай $1",
+       "march-date": "Гъэтхапэ $1",
+       "april-date": "Мэлылъфэгъу $1",
+       "may-date": "ЖъоныгъуакӀ $1",
+       "june-date": "Мэкъуогъу $1",
+       "july-date": "Бэдзэогъу $1",
+       "august-date": "ШышъхьаӀу $1",
+       "september-date": "Ӏоныгъо $1",
+       "october-date": "Чъэпыогъу $1",
+       "november-date": "ШэкӀогъу $1",
+       "december-date": "Тыгъэгъаз $1",
+       "pagecategories": "{{PLURAL:$1|Категорий|Категориехэр}}",
+       "category_header": "НэкӀубгъохэр категориеу \"$1\"-м щыщхэр",
+       "subcategories": "КӀэкӀэт категориехэр",
+       "category-media-header": "\"$1\" категорием хэт медиэр",
+       "category-empty": "<em>Мы категорием нэкIубгъо е медиэ пари джыри илъэп.</em>",
+       "hidden-categories": "{{PLURAL:$1|Гъэбылъыгъэ категорие|Гъэбылъыгъэ категориехэр}}",
+       "hidden-category-category": "Гъэбылъыгъэ категориехэр",
+       "category-subcat-count": "{{PLURAL:$2|Мы категорием мы кIэткатегорие закъу иIэр.|Мы категорием мы {{PLURAL:$1|кIэткатегорие|$1 кIэткатегориехэр}}, $2 пстэум щыщэу.}}",
+       "category-subcat-count-limited": "Мы категорием мы {{PLURAL:$1|кIэткатегорие|$1 кIэткатегориехэр}} иIэр.",
+       "category-article-count": "{{PLURAL:$2|Мы категорием мы нэкIубгъо закъор илъ.|Мы {{PLURAL:$1|нэкIубгъор|$1 нэкIубгъохэр}} мы категорием илъых, $2 пстэумкIэ.}}",
+       "category-article-count-limited": "КIэлъыкIорэ {{PLURAL:$1|файлыр илъ|$1 файлэхэр илъых}} мы категорием.",
+       "category-file-count": "{{PLURAL:$2|Мы категорием къык1элъык1орэ файлэ закъо илъ.|Мы {{PLURAL:$1|файлыр|$1 файлэхэр}} мы категорием илъхэр, $2 пстэумк1э.}}",
+       "category-file-count-limited": "КIэлъыкIорэ {{PLURAL:$1|файлыр илъ|$1 файлэхэр илъых}} мы категорием.",
+       "listingcontinuesabbrev": "пэубл.",
+       "index-category": "Индекс хъурэ нэкIубгъохэр",
+       "noindex-category": "Индекс мыхъурэ нэкIубгъохэр",
+       "broken-file-category": "Къончэ зэпыщэхэр зиIэ нэкIубгъохэр",
+       "about": "Фэгъэхьыгъэу",
+       "article": "Дэтхэр",
+       "newwindow": "(шъхьангъупчъэ шъхьафым къыщызэӀух)",
+       "cancel": "Ыуж икӀ",
+       "moredotdotdot": "Джыри...",
+       "morenotlisted": "Мы купыр джыри изэп.",
+       "mypage": "НэкIубгъо",
+       "mytalk": "ГущыӀ",
+       "anontalk": "Мы IP-адресым тегущыI",
+       "navigation": "Зыплъыхьэн",
+       "and": "&#32;ыкӀи",
+       "qbfind": "Къэгъот",
+       "qbbrowse": "Хаплъ",
+       "qbedit": "ЕIаз",
+       "qbpageoptions": "Мы нэкIубгъор",
+       "qbmyoptions": "Си нэкIубгъохэр",
+       "faq": "ПчъаЗы",
+       "faqpage": "Project:ПчъаЗы",
+       "actions": "ШӀагъэхэр",
+       "namespaces": "ЦӀэчӀыпӀ",
+       "variants": "Вариантхэр",
+       "navigation-heading": "Зыплъыхьэн меню",
+       "errorpagetitle": "Хэукъоныгъэ",
+       "returnto": "$1-м егъэзэжь",
+       "tagline": "{{SITENAME}}-м щыщ",
+       "help": "ӀэпыӀэгъу",
+       "search": "Лъыхъу",
+       "searchbutton": "Лъыхъу",
+       "go": "КӀо",
+       "searcharticle": "КӀо",
+       "history": "Тхьапэм итарихъ",
+       "history_short": "Тарихъ",
+       "updatedmarker": "мыщпэм сыкъызихьагъэм азфагу кIэмэ уплъэкIужьыгъэ",
+       "printableversion": "Хэутын теплъ",
+       "permalink": "Ренэу щыт зэпыщ",
+       "print": "Къыхэут",
+       "view": "Еплъ",
+       "view-foreign": "Сайтэу $1-м къыщыгъэлъагъу",
+       "edit": "ХэӀэзыхь",
+       "edit-local": "Хьанэгъунэ гурыӀоныгъэм еIэзэн",
+       "create": "КъэшӀ",
+       "create-local": "Хьанэгъунэ гурыӀоныгъэ пыдзэжь",
+       "editthispage": "Гъэтэрэзыжь мы нэкӀубгъор",
+       "create-this-page": "Къэубл мы тхылъыр",
+       "delete": "ТегъэкI",
+       "deletethispage": "Мы нэкIубгъор тегъэкI",
+       "undeletethispage": "ТемыгъэкI мы нэкIубгъор",
+       "undelete_short": "ТемыгъэкI {{PLURAL:$1|зы еIэзэныгъэ|$1 еIэзэныгъэхэр}}",
+       "viewdeleted_short": "Къэгъэлъагъу {{PLURAL:$1|зы тегъэкIыгъэ еIэзэныгъэ|$1 тегъэкIыгъэ еIэзэныгъэхэр}}",
+       "protect": "Ухъум",
+       "protect_change": "зэблэхъу",
+       "protectthispage": "Ухъум мы нэкIубгъор",
+       "unprotect": "Ухъумэныгъэр зэблэхъу",
+       "unprotectthispage": "Мы нэкIубгъом и ухъумэныгъэ зэблэхъу",
+       "newpage": "НэкӀубгъуакӀэ",
+       "talkpage": "ТегущыI мы нэкIубгъом",
+       "talkpagelinktext": "ГущыӀ",
+       "specialpage": "ХэшыкӀыгъэ нэкӀубгъу",
+       "personaltools": "СиӀэмэпсымэхэр",
+       "articlepage": "КӀоцӀытхагъэм еплъ",
+       "talk": "ТегущыӀэн",
+       "views": "Еплъыгъэхэр",
+       "toolbox": "Ӏэмэ-псымэхэр",
+       "userpage": "Нэбгырэм инэкIубгъо еплъ",
+       "projectpage": "Проектым и нэкӀубгъо еплъ",
+       "imagepage": "Файлым и нэкIубгъо еплъ",
+       "mediawikipage": "Тхыгъэм инэкIубгъо еплъ",
+       "templatepage": "Шапхъэм и нэкIубгъо еплъ",
+       "viewhelppage": "IэпыIэгъу нэкIубгъом еплъ",
+       "categorypage": "Категорием и нэкIубгъо еплъ",
+       "viewtalkpage": "ТегущыIэныгъэм еплъ",
+       "otherlanguages": "ПэмыкӀ бзэхэмкӀэ",
+       "redirectedfrom": "($1-м къикӀыгъ)",
+       "redirectpagesub": "ЕгъэкIокI нэкIубгъор",
+       "redirectto": "МыдыкӀэ егъэкӀокӀ:",
+       "lastmodifiedat": "Мыщпэм мы нэкӀубгъор зеӀэзагъэхэр $1, $2-м.",
+       "viewcount": "Мы нэкIубгъом еплъыгъэх {{PLURAL:$1|зэ|$1-рэ}}.",
+       "protectedpage": "Ухъумагъэ нэкIубгъу",
+       "jumpto": "МыкӀэ пкӀэ:",
+       "jumptonavigation": "зыплъыхьэн",
+       "jumptosearch": "лъыхъу",
+       "pool-timeout": "Уахътэр икIыгъэ, гъэпытэныр къэсыфэ",
+       "pool-queuefull": "Упч1эмэ я Iатэр изы",
+       "pool-errorunknown": "ЗэхэмышIагъэ къончагъэ",
+       "poolcounter-usage-error": "Гъэфедэныгъэм и къончагъэ: $1",
+       "aboutsite": "{{SITENAME}} фэгъэхьыгъэу",
+       "aboutpage": "Project:Фэгъэхьыгъэу",
+       "copyright": "$1-м тетэу кIоцIрытыр олъэгъу, нэмыкIым игугъу къамышIмэ.",
+       "copyrightpage": "{{ns:project}}:Ауторфитныгъэхэр",
+       "currentevents": "Джыр хъугъэ-шӀагъэхэр",
+       "currentevents-url": "Project:Джыр хъугъэ-шӀагъэхэр",
+       "disclaimers": "ПшъэдэкӀ умыхьын",
+       "disclaimerpage": "Project:ПшъэдэкӀ умыхьын",
+       "edithelp": "ХэӀэзэнымкӀэ ӀэпыӀэгъу",
+       "helppage-top-gethelp": "ӀэпыӀэгъу",
+       "mainpage": "НэкӀубгъо шъхьаӀ",
+       "mainpage-description": "НэкӀубгъо шъхьаӀ",
+       "policy-url": "Project:Хабзэхэр",
+       "portal": "Лъэпкъэгъу ӀухьапӀ",
+       "portal-url": "Project:Лъэпкъэгъу ӀухьапӀ",
+       "privacy": "Зыушъэфын хабзэр",
+       "privacypage": "Project:Зыушъэфын хабзэр",
+       "badaccess": "Фитыныгъэм и къончагъэ",
+       "badaccess-group0": "УзыкIэупчъэрэ шIэн-мурадым пае фитыныгъэ уиIэп.",
+       "versionrequired": "MediaWiki-м и $1-рэ версие ищыкIагъ",
+       "versionrequiredtext": "MediaWiki-м и $1-рэ версие ищыкIагъ.\nЕплъ [[Special:Version|version page]].",
+       "ok": "Хъун",
+       "retrievedfrom": "\"$1\" - м къикӀыгъ",
+       "youhavenewmessages": "{{PLURAL:$3|УиI}} $1 ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|зы тхыгхакIэ|999=тхыгъакIэхэр}}",
+       "newmessagesdifflinkplural": "ыужрэ {{PLURAL:$1|зэхъокIыныгъэ|999=зэхъокIыныгъэхэр}}",
+       "youhavenewmessagesmulti": "ТхыгъакIэхэр уиI $1-кIэ",
+       "editsection": "хэӀэзыхь",
+       "editold": "еӀаз",
+       "viewsourceold": "еплъ лъапсэм",
+       "editlink": "еӀаз",
+       "viewsourcelink": "лъапсэм еплъ",
+       "editsectionhint": "Пычыгъом хатх: $1",
+       "toc": "Дэлъхэр",
+       "showtoc": "къэгъэлъагъу",
+       "hidetoc": "гъэбылъ",
+       "collapsible-collapse": "Зэхэгъахь",
+       "collapsible-expand": "Зэхэщ",
+       "confirmable-confirm": "{{GENDER:$1|Уэ}} пытэу ошIа?",
+       "confirmable-yes": "Ары",
+       "confirmable-no": "ХьаIу",
+       "thisisdeleted": "Еплъ е зэкIэдзэжь $1?",
+       "viewdeleted": "Еплъ $1?",
+       "restorelink": "{{PLURAL:$1|зы еIэзэн тегъэкIыгъ|$1 еIэзэн тегъэкIыгъэхэр}}",
+       "feedlinks": "Теплъэр мифэд:",
+       "feed-invalid": "КIэтхакIэ каналым и типыр къуанчэ",
+       "feed-unavailable": "Синдикацие чэзыухэр щыIэп",
+       "site-rss-feed": "$1 RSS чэзыу",
+       "site-atom-feed": "$1 Atom чэзыу",
+       "page-rss-feed": "$1 RSS чэзыу",
+       "page-atom-feed": "$1 Atom чэзыу",
+       "red-link-title": "$1 (нэкӀубгъор щыӀэп)",
+       "sort-descending": "Ехырэ чэзыу",
+       "sort-ascending": "ДэкIуаерэ чэзыу",
+       "nstab-main": "НэкӀубгъо",
+       "nstab-user": "Сэ ситхьап",
+       "nstab-media": "Медиэ нэкIубгъо",
+       "nstab-special": "ХэшыкӀыгъэ нэкӀубгъу",
+       "nstab-project": "Проектым фэгъэхьыгъэу",
+       "nstab-image": "Файл",
+       "nstab-mediawiki": "Тхыгъэ",
+       "nstab-template": "Шапхъэ",
+       "nstab-help": "IэпыIэгъу нэкIубгъу",
+       "nstab-category": "Категорие",
+       "nosuchaction": "Ащ фэдэ шIагъэ щыIэп",
+       "nosuchspecialpage": "Афэдэ специал нэкIубгъо щыIэп",
+       "error": "Къончагъэ",
+       "databaseerror": "Датэбазэм и къончагъэ",
+       "databaseerror-query": "КIэупчIэн: $1",
+       "databaseerror-function": "Функцие: $1",
+       "databaseerror-error": "Хэукъоныгъэ: $1",
+       "laggedslavemode": "<strong>Сакъ:</strong> НэкIубгъом имылъын лъэкIыщт хэIэзэныкIэмэ ащыщ.",
+       "readonly": "Датэбазэр гъэпытагъэ",
+       "missingarticle-rev": "(версиеу № $1)",
+       "missingarticle-diff": "(Зэгъапш: $1, $2)",
+       "internalerror": "ЫкIоцI хэукъоныгъэ",
+       "internalerror_info": "ЫкIоцI фыкъуагъэ: $1",
+       "filecopyerror": "\"$1\"-файлыр \"$2\"-м копи шIын лъэкIыгъэп.",
+       "filerenameerror": "Файлэу \"$1\" ыц1э \"$2\" фэдэу хъожьын лъэкIырэп.",
+       "filedeleteerror": "Файлэу \"$1\" тегъэкIын лъэкIырэп.",
+       "directorycreateerror": "Директориеу \"$1\" къэублэн лъэкIыгъэп.",
+       "directoryreadonlyerror": "Директориер \"$1\" еджэн пэе закъу.",
+       "directorynotreadableerror": "Директорием \"$1\" еджэн лъэкIырэп.",
+       "filenotfound": "Файлэу \"$1\" гъотыгъэн лъэкIырэп.",
+       "formerror": "Хэукъоныгъэ: Формэр тегъэпытыхьан лъэкIыгъэп.",
+       "badarticleerror": "Мы хъугъэ-шIагъэр мы нэкIубгъом щызэшIогъэкIын лъэкIыщтэп.",
+       "cannotdelete": "НэкIубгъоу е файлэу \"$1\" тегъэкIын лъэкIыгъэп.\nПэмыкI нэбгырэм тыригъэкIыгъахэн фае.",
+       "cannotdelete-title": "НэкIубгъоу \"$1\" тегъэкIыгъэн лъэкIырэп",
+       "badtitle": "ЦӀэ дэгъуэп",
+       "badtitletext": "УзкIэупчIэрэ нэкIубгъом ыцIэр къуанчэ, е нэкIы, е бзэзэпыщэ е интервики гъэнэфагъэп.\nМыхъущт символ агъэфедагъэнкIи мэхъу.",
+       "viewsource": "Еплъ лъапсэм",
+       "viewsource-title": "Еплъ лъапсэм $1 пае",
+       "protectedpagetext": "ЕIэзэнхэм ыкIи нэмыкI шIэнмэ яягъэ къэмыкIынэу мы нэкIубгъор ухъумагъэу щыт.",
+       "viewsourcetext": "Мы нэкIубгъом ылъапсэм уеплъын и копи пшIышъущт.",
+       "viewyourtext": "<strong>Уэ уи еIэзэнхэм</strong> я лъапсэ уеплъын е копи пшIын плъэкIыыщт мы нэкIубгъом.",
+       "translateinterface": "ЗэкIэ викимэ язэдзэкIмэ ахэбгъэхъон е еIэзэн пшIоигъомэ, [//translatewiki.net/ translatewiki.net] гъэфед, MediaWiki и хьанэгъуналъэ сайт.",
+       "namespaceprotected": "<strong>$1</strong> цIэчIыпIэм и нэкIубгъомэ уяIэзэнэу фитыныгъэ уиIэп.",
+       "mycustomcssprotected": "Мы CSS-нэкIубгъом уеIэзэн уфитэп.",
+       "mycustomjsprotected": "Мы JavaScript нэкIубгъом уеIэзэн уфитэп.",
+       "myprivateinfoprotected": "Уи шъэф информацием уеIэзэн уфитэп.",
+       "mypreferencesprotected": "Уи Iэмэпсымэхэм уяIэзэн уфитэп.",
+       "ns-specialprotected": "Специал нэкIубгъохэр зэхъокIын хъущтэп.",
+       "exception-nologin": "Системэм хэхьагъэп",
+       "exception-nologin-text": "Системэм хахьэба мы нэкIубгъом е шIэным унэсышъунэу.",
+       "virus-badscanner": "ЗэтегъэпсыхьакIэ дэй: ЗэхэмышIыкIыгъэ вирус сканер: <em>$1</em>",
+       "virus-scanfailed": "сканшIын къуанч (кодэу $1)",
+       "virus-unknownscanner": "зэхэмышIыкIыгъэ антивирус:",
+       "welcomeuser": "Къеблагъ, $1!",
+       "yourname": "НэбгырацIэ:",
+       "userlogin-yourname": "НэбгырацӀэр",
+       "userlogin-yourname-ph": "Итх уи нэбгырацIэ",
+       "createacct-another-username-ph": "Итх уи нэбгырацӀэр",
+       "yourpassword": "ШъэфгущыI:",
+       "userlogin-yourpassword": "ШъэфгущыI",
+       "userlogin-yourpassword-ph": "Уи шъэфгущыIэ итх",
+       "createacct-yourpassword-ph": "Къэтх шъэфгущыIэ горэ",
+       "yourpasswordagain": "Джыри зэ къэтх шъэфгущыIэр:",
+       "createacct-yourpasswordagain": "Тегъэпытыхь шъэфгущыIэр",
+       "createacct-yourpasswordagain-ph": "Къэтх шъэфгущыIэр джыри зэ",
+       "userlogin-remembermypassword": "Системэм сыхэтэу сыкъэгъан",
+       "userlogin-signwithsecure": "Ухъумэгъэ зэпышIэныгъэр гъэфед",
+       "yourdomainname": "Уи домен:",
+       "password-change-forbidden": "Мы виким и шъэфгущыIэхэр зэблэпхъун уфитэп.",
+       "login": "Системэм хахь",
+       "nav-login-createaccount": "Къыхахь / аккаунт къэубл",
+       "userlogin": "Къыхахь / аккаунт къэубл",
+       "userloginnocreate": "Системэм хахь",
+       "logout": "ХэкӀыжь",
+       "userlogout": "ХэкӀыжь",
+       "notloggedin": "Системэм хэхьагъэп",
+       "userlogin-noaccount": "Аккаунт уиӏэба?",
+       "userlogin-joinproject": "{{SITENAME}} зигъэгъус",
+       "nologin": "Аккаунт уиӏэба? $1.",
+       "nologinlink": "Аккаунт къэубл",
+       "createaccount": "Аккаунт къэубл",
+       "gotaccount": "Аккаунт уиӏаха? $1.",
+       "gotaccountlink": "Системэм хахь",
+       "userlogin-resetlink": "Уи хэхьан датэхэр пщыгъупшагъа?",
+       "userlogin-resetpassword-link": "УишъэфгущыIэр пщыгъупшагъа?",
+       "userlogin-helplink2": "Системэм сыхэхьанэу къыздеӏ",
+       "userlogin-createanother": "НэмыкI аккаунт къэубл",
+       "createacct-emailrequired": "Емэйл адрес",
+       "createacct-emailoptional": "Емэйл адрес (егъэзыгъэп)",
+       "createacct-email-ph": "Игъахь уи емэйл адресыр",
+       "createacct-another-email-ph": "Игъахь уи емэйл адресыр",
+       "createacct-realname": "ЦIэ шъыпкъэр (егъэзыгъэп)",
+       "createaccountreason": "ЗыпкъырыкIырэр:",
+       "createacct-reason": "ЗыпкъырыкIырэр:",
+       "createacct-reason-ph": "Сыда пэмыкI аккаунт зэкIэублэрэр?",
+       "createacct-captcha": "Щынэгъончъэгъэ уплъэкӀун",
+       "createacct-imgcaptcha-ph": "ЫшъхьагъкӀэ плъэгъурэ текстыр итх",
+       "createacct-submit": "Уи аккаунт бгъэпсын",
+       "createacct-another-submit": "НэмыкI аккаунт къэубл",
+       "createacct-benefit-heading": "{{SITENAME}}-м ощ фэдэхэр дэлажьэх.",
+       "createacct-benefit-body1": "{{PLURAL:$1|еӀэзэныгъэ|еӀэзэныгъ}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|нэкӀубгъо|нэкӀубгъу}}",
+       "createacct-benefit-body3": "бэмышӀэу {{PLURAL:$1|хэлэжьакӀу|хэлэжьакӀо}}",
+       "badretype": "ШъэфгущыIэу ибгъэхьагъэхэр зэтефэрэп.",
+       "userexists": "Ибгъэхьэгъэ нэбгырацIэр агъэфедэ.\nНэмыкI цIэ горэ къыхэхба.",
+       "loginerror": "Системэ хэхьаныгъэр къуанчэ",
+       "createacct-error": "Аккаунт къэублэныгъэ къончагъ",
+       "createaccounterror": "Аккаунт ублэн лъэкIыгъэп: $1",
+       "noname": "НэбгырацIэ тэрэз итхагъэп.",
+       "loginsuccesstitle": "ШIоу ухэхьагъ",
+       "nouserspecified": "НэбгырацIэр птхын фае.",
+       "wrongpassword": "ШъэфгущыIэр тэрэзэп.\nДжыри зэ еплъ.",
+       "wrongpasswordempty": "ШъэфгущыIэр нэкIы.\nДжыри зэ еплъ.",
+       "passwordtooshort": "ШъэфгущыIэр мыхъуми {{PLURAL:$1|1 символ |символ $1}} хъун фае.",
+       "password-name-match": "Уи шъэфгущыIэр уи нэбгырацIэм фэдапэ хъущтэп.",
+       "mailmypassword": "Зэтедз шъэфгущыIэр",
+       "noemailcreate": "Емэйл тэрэз птхын фае.",
+       "mailerror": "Емэйл егъэхьыныр къуанчэ: $1",
+       "emailauthenticated": "Уи емэйл адресыр уплъэкIужьыгъы, мафэр $2, уахъэр $3",
+       "emailconfirmlink": "Тегъэпытыхь уи емэйл адресыр",
+       "emaildisabled": "Мы сайтым емэйлхэр ыгъэхьын лъэкIырэп.",
+       "accountcreated": "Аккаунтыр ублагъэ",
+       "createaccount-title": "Аккаунт къэублэн, {{SITENAME}} пае",
+       "login-abort-generic": "Уи системэ хэхьакIэр шIоп",
+       "loginlanguagelabel": "Бзэ: $1",
+       "pt-login": "Системэм хахь",
+       "pt-login-button": "Системэм хахь",
+       "pt-createaccount": "Аккаунт егъажь",
+       "pt-userlogout": "ХэкӀыжь системэм",
+       "php-mail-error-unknown": "PHP-функциеу mail()-м къончагъэ горэ иI.",
+       "user-mail-no-addy": "Емэйл адрес имыIэу емэйл аригъэхьынэу фэягъ.",
+       "user-mail-no-body": "Емэйл ебгъэхьынэу уфаягъ, нэкIэу е мэхьанэнчъэ кIакоу.",
+       "changepassword": "ШъэфгущыIэр зэблэхъу",
+       "resetpass_announce": "Системэ хэхьаныр зэшIобгъэкIынэу, шъэфгущыIакIэ бгъэпсын фае.",
+       "resetpass_header": "Аккаунтым и шъэфгущыIэр зэблэхъу",
+       "oldpassword": "ШъэфгущыIэжъыр:",
+       "newpassword": "ШъэфгущыIакIэр:",
+       "retypenew": "Къэтхыжь шъэфгущыIэр:",
+       "resetpass_submit": "ШъэфгущыIэр гъэпси, къыхахь",
+       "changepassword-success": "Уи шъэфгущыIэр шIоу зэблэхъугъэ!",
+       "resetpass_forbidden": "ШъэфгущыIэр зэблэхъун лъэкIыщтэп",
+       "resetpass-no-info": "Мы нэкIубгъом занкIэу укIонэу уфаемэ, системэм ухэхьэгъэн фае.",
+       "resetpass-submit-loggedin": "ШъэфгущыIэр зэблэхъу",
+       "resetpass-submit-cancel": "Ыуж икӀ",
+       "resetpass-recycled": "УишъэфгущыIэр зэтедзба джырэм фэмыдэу.",
+       "resetpass-expired": "ШъэфгущыIэм и зэман икIыгъ. ШъэфгущыIакIэ горэ гъэпсба.",
+       "passwordreset": "Зэтедз шъэфгущыIэр",
+       "passwordreset-disabled": "Мы виким шъэфгущыIэр щызэтебдзэшъущтэп.",
+       "passwordreset-emaildisabled": "Мы виким емэйл-Iофыгъохэр щылажьэхэрэп.",
+       "passwordreset-username": "НэбгырацIэ:",
+       "passwordreset-domain": "Домен:",
+       "passwordreset-capture": "Къэхъурэ емэйлым уеплъыщта?",
+       "passwordreset-email": "Емэйл адрес:",
+       "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
+       "passwordreset-emailelement": "НэбгырацIэ: $1\nTemporary password: $2",
+       "passwordreset-emailsent": "ШъэфгущыIэм и зэтедзым пае емэйл агъэхьыгъ.",
+       "passwordreset-emailsent-capture": "ШъэфгущыIэм изэтедз фэгъэхьыгъэ емэйлыр гъахьыгъэ, ычIэгъкIэ ар олъэгъу.",
+       "changeemail": "Зэблэхъу емэйл адресыр",
+       "changeemail-oldemail": "Джырэ емэйл адрес:",
+       "changeemail-newemail": "Емэйл адресыкIэр:",
+       "changeemail-none": "(зи)",
+       "changeemail-password": "Уи {{SITENAME}} ишъэфгущыI:",
+       "changeemail-submit": "Емэйлыр зэблэхъу",
+       "resettokens": "Токенхэр зэтедзэх",
+       "resettokens-no-tokens": "Токен зэтебзынэу щыIэп.",
+       "resettokens-tokens": "Токенхэр:",
+       "resettokens-done": "Токенхэр зэтедзыгъэх.",
+       "resettokens-resetbutton": "ХэшыпыкIыгъэ токенхэр зэтедзэх",
+       "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": "Горизонтал сатыр (пчъагъэу умыгъэфед)",
+       "summary": "КӀэкӀэу:",
+       "minoredit": "Мыр хэӀэзэныгъэ цӀыкӀу",
+       "watchthis": "Мы нэкӀубгъом лъыплъ",
+       "savearticle": "НэкӀубгъор дэтхэжь",
+       "preview": "Ыпэтеплъ",
+       "showpreview": "Итеплъэ къэгъэлъагъу",
+       "showdiff": "ЗэхъокӀыныгъэхэр къэгъэлъагъу",
+       "anoneditwarning": "<strong>Сакъ:</strong>Системэм ухэхьагъэп. Уи IP-адресыр зэкIэми алъэгъушъущт зыгорэм ухэIазэмэ. <strong>[$1 ухахьэмэ]</strong> е <strong>[$2 аккаунт уублэмэ]</strong>, уи еIэзэнхэр уи нэбгырацIэм пышIэгъэщтых, нэмыкI шIуагъэхэм анэмыкIэу.",
+       "missingcommenttext": "ТегущыIэн горэ кIэтхэжьба ычIэгъ.",
+       "summary-preview": "Къэбарым и ыпэтеплъ:",
+       "previewerrortext": "Уи ыпэтеплъэмэ я къэгъэлъэгъон игъо зы къончагъэ горэ хъугъэ.",
+       "blockednoreason": "къызыпкъырыкIрэр итхагъэп",
+       "nosuchsectiontitle": "Секциер гъотыгъэн лъэкIырэп",
+       "loginreqtitle": "Ухэхьанэу ищыкIагъ",
+       "loginreqlink": "системэм хахь",
+       "accmailtitle": "ШъэфгущыIэр агъэхьыгъ",
+       "newarticle": "(КIэ)",
+       "newarticletext": "ЩымыIэ нэкIубгъом уекIугъ зэпыщэмкIэ.\nНэкIубгъор ебгъэжьэным пае ычIэгъ щыт плIэмыем зыгорэ итх (еплъ [$1 IэпыIэгъу нэкIубгъом] нахьыбэу пшIэным пае).\nУмышIахэу мыщ укъэкIуагъэмэ, уи броузерым и <strong>зэкIакIо</strong> кнопкэм теIункI.",
+       "noarticletext": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын],\nе [{{fullurl:{{FULLPAGENAME}}|action=edit}} мы нэкIубгъом уеIэзэн]</span>.",
+       "noarticletext-nopermission": "Текст пари итыгоп мы нэкIубгъом.\n[[Special:Search/{{PAGENAME}}|Мы нэкIубгъом ыцIэ улъыхъун]] плъэкIыщт нэмыкI нэкIубгъомэ, е\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ехьылIэгъэ журналхэм къащыбгъотын]</span>. Ау мы нэкIубгъор уублэнэу фитыныгъэ уиIэп.",
+       "userpage-userdoesnotexist-view": "Аккаунтэу \"$1\" регистрацие ыкIугъэп.",
+       "note": "<strong>Еплъ:</strong>",
+       "previewnote": "<strong>Зыщымыгъэгъупш, мыр ыпэтеплъэ къодый.</strong>\nУи еIэзэнхэр джыри дэгъэпытыхьагъэхэп.",
+       "continue-editing": "ЕIэзалъэ плIэмыем кIо",
+       "editing": "$1 и еӀэзэн",
+       "creating": "$1 нэкӀубгъом и егъэжьэн",
+       "editingsection": "$1-м (секцие) и еӀэзэныгъэ",
+       "editingcomment": "$1-м (секциякIэ) и еӀэзэныгъэ",
+       "editconflict": "ЕIэзэным зэгурымыIоныгъэ: $1",
+       "yourtext": "Уи текст",
+       "editpage-cannot-use-custom-model": "Мы нэкӀубгъом ыкӀоцӀрытым и модел зэхъокӀын хъущтэп.",
+       "templatesused": "{{PLURAL:$1|Шапхъэ|Шапхъэхэр}} мы нэкIубгъом щагъэфедагъэх:",
+       "template-protected": "(ухъумагъэ)",
+       "template-semiprotected": "(ызныкъокӀэ ухъумагъэ)",
+       "hiddencategories": "Мы нэкIубгъор зыщыщыр мы {{PLURAL:$1|1 категорие гъэбылъыгъэр|$1 категорие гъэбылъыгъэхэр}} ары:",
+       "nocreate-loggedin": "НэкIубгъуакIэ ебгъэжьэ уфитэп.",
+       "permissionserrors": "Фитыныгъэм и къончагъэ",
+       "permissionserrorstext-withaction": "$2-кIэ фитыныгъэ уиIэп, къыкIэлъыкIорэ {{PLURAL:$1|резонкIэ|резонхэмкIэ}}:",
+       "moveddeleted-notice": "Мы нэкӀубгъор тегъэкӀыжьыгъэу щыт.\nТегъэкӀыжьыным ыкӀи кощыным и лог-нэкӀубгъор кӀэлъыкӀорэ зэпыщэмкӀэ къэбгъотышъущт.",
+       "log-fulllog": "Лог псаом еплъ",
+       "edit-conflict": "ЕIэзэным зэгурымыIоныгъэ.",
+       "postedit-confirmation-created": "НэкIубгъор ублагъэ.",
+       "postedit-confirmation-restored": "НэкIубгъор зэтегъэуцожьыгъэу щыт.",
+       "postedit-confirmation-saved": "Уи еIэзэныгъэр тегъэпытыхьагъ.",
+       "edit-already-exists": "НэкIубгъуакIэр егъэжьэгъэн лъэкIыгъэп.\nАщ фэдэр щыIах.",
+       "invalid-content-data": "КIоцIрытыр тэрэзэп",
+       "content-model-wikitext": "вики-текст",
+       "content-model-text": "текст занкI",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Объект нэкI",
+       "content-json-empty-array": "Массив нэкI",
+       "cantcreateaccounttitle": "Аккаунт ублэн лъэкIыгъэп",
+       "viewpagelogs": "Мы нэкӏубгъом и логхэр къэгъэлъагъу",
+       "nohistory": "Мы нэкIубгъом и еIэзэнмэ я тарихъ щыIэп.",
+       "currentrev": "Ыужрэ версие",
+       "currentrev-asof": "Джырэ версие, $1-м тетэу",
+       "revisionasof": "$1-м щытыгъэр",
+       "revision-info": "$1-м тетэу версие, зиер {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Пэсэрэ теплъэжьыр",
+       "nextrevision": "Кӏэлъыкӏорэр →",
+       "currentrevisionlink": "Ыужрэ теплъэр",
+       "cur": "джр",
+       "next": "кIэлъ.",
+       "last": "ыпэ",
+       "page_first": "апэрэ",
+       "page_last": "ыужрэ",
+       "history-fieldset-title": "Хаплъ тарихъым",
+       "history-show-deleted": "ТегъэкIыгъэ закъохэр",
+       "histfirst": "нахьыжъдэдэхэр",
+       "histlast": "кIэдэдэхэр",
+       "historysize": "({{PLURAL:$1|1 байт|$1 байтхэр}})",
+       "historyempty": "(нэкI)",
+       "history-feed-title": "ЕIэзэнмэ я тарихъ",
+       "history-feed-description": "Мы нэкIубгъом и еIэзэнмэ я тарихъ викимкIэ",
+       "history-edit-tags": "ХэшыпыкIыгъэ версиемэ я тегхэр зэблэхъу",
+       "rev-deleted-comment": "(еIэзэныгъэм и къэбар тегъэкIыжьыгъэ)",
+       "rev-deleted-user": "(нэбгырацIэр тегъэкIыгъэ)",
+       "rev-deleted-event": "(лог деталхэр тегъэкIыгъэх)",
+       "rev-delundel": "къэгъэлъагъу/гъэбылъ",
+       "rev-showdeleted": "къэгъэлъагъу",
+       "revdelete-no-file": "Зигугъу шIыгъэ файлыр щыIэп.",
+       "revdelete-show-file-submit": "Ары",
+       "revdelete-hide-text": "Версием и текст",
+       "revdelete-hide-image": "Файлым кIоцIрытыр гъэбылъ",
+       "revdelete-hide-comment": "ЕIэзэнмэ якъэбар",
+       "revdelete-hide-user": "ЕIэзакIом и нэбгырацI/IP-адрес",
+       "revdelete-radio-same": "(зэблэмыхъу)",
+       "revdelete-radio-set": "(гъэбылъыгъэ)",
+       "revdelete-radio-unset": "Плъэгъушъунэу",
+       "revdelete-log": "ЗыпкъырыкIырэр:",
+       "revdel-restore": "плъэгъушъущтыр зэблэхъу",
+       "pagehist": "НэкIубгъом и тарихъ",
+       "deletedhist": "ТегъэкIыгъэмэ я тарихъ",
+       "revdelete-reasonotherlist": "ПэмыкI къызпкъырыкIрэр",
+       "revdelete-offender": "Версием и аутор:",
+       "mergehistory": "НэкIубгъомэ ятарихъхэр зэпыдз",
+       "mergehistory-box": "НэкIубгъуитIум ятарихъхэр зэпыдзэх:",
+       "mergehistory-from": "Лъапсэ нэкIубгъор:",
+       "mergehistory-into": "ЗыдакIорэ нэкIубгъор:",
+       "mergehistory-go": "Зэпыбдзэшъурэ еIэзэнхэр къэгъэлъагъу",
+       "mergehistory-submit": "Зэпыдз версиехэр",
+       "mergehistory-no-source": "Лъапсэ нэкIубгъоу $1 щыIэп.",
+       "mergehistory-invalid-source": "Лъапсэ нэкIубгъом цIэ тэрэз иIэн фай.",
+       "mergehistory-reason": "ЗыпкъырыкIырэр:",
+       "mergelog": "Зэпыдзэмэ я лог",
+       "revertmerge": "ЗэхэгъэкӀыжь",
+       "history-title": "ЗэхъокIыныгъэмэ я тарихъ - \"$1\"",
+       "difference-title": "\"$1\" - версиемэ зэгъэпшэн",
+       "lineno": "Сатыр $1:",
+       "compareselectedversions": "Хэгъэщыгъэ версиехэр зэгъапш",
+       "editundo": "зэкӀэгъэкӀожь",
+       "diff-empty": "(зэфэмыдэ яIэп)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Зы гурыт версие горэ|$1 гурыт версиехэр}} зы нэбгырэм иеу къэгъэлъэгъуагъэп)",
+       "searchresults": "Къэгъотынэу хъугъэр",
+       "searchresults-title": "$1-м пае къэгъот",
+       "prevn": "ыпэ {{PLURAL:$1|$1}}",
+       "nextn": "кӀэлъыкӀорэ {{PLURAL:$1|$1}}",
+       "prev-page": "ыпэит нэкIубгъу",
+       "next-page": "кIэлъыкIорэ нэкIубгъу",
+       "nextn-title": "КIэлъыкIорэ $1 {{PLURAL:$1|резултат|резултатхэр}}",
+       "shown-title": "Зы нэкӀубгъом $1{{PLURAL:$1|гъотыгъэ|гъотыгъэхэр}} къыщыгъэлъагъу",
+       "viewprevnext": "Еплъ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>НэкIубгъор щыублэ \"[[:$1]]\" мы вики-проектым!</strong> {{PLURAL:$2|0=|Узщылъыхъугъэм ирезултат-нэкIубгъоми еплъ.|Узщылъыхъугъэм ирезултат-нэкIубгъохэми яплъ.}}",
+       "searchprofile-articles": "НэкӀубгъо шъхьаӀхэр",
+       "searchprofile-images": "Мултимедие",
+       "searchprofile-everything": "ЗэкӀэ",
+       "searchprofile-advanced": "Зэхэщыгъэу",
+       "searchprofile-articles-tooltip": "Хэлъыхъу $1-м",
+       "searchprofile-images-tooltip": "Файлэхэм алъыхъу",
+       "searchprofile-everything-tooltip": "Тхыгъэм зэкӀэм щылъыхъу (гущыӀэ нэкӀубгъохэри ахэтэу)",
+       "searchprofile-advanced-tooltip": "Къатыгъэ чӀыпӀацӀэмэ къащылъыхъу",
+       "search-result-size": "$1({{PLURAL:$2|$2 гущыӀ}})",
+       "search-redirect": "(гъэкӀожь $1-м)",
+       "search-section": "(секцие $1)",
+       "search-category": "(категориеу $1)",
+       "search-suggest": "Мыра къэпӀонэу узфэягъэр: $1",
+       "search-interwiki-caption": "Iахьыл проектхэр",
+       "search-interwiki-more": "(джыри)",
+       "search-relatedarticle": "ЕхьылIагъ",
+       "searchrelated": "ехьылIагъ",
+       "searchall": "зэкӀэ",
+       "search-showingresults": "{{PLURAL:$4|Резултат <strong>$1</strong> мыщ щыщэу <strong>$3</strong>|Резултатхэр <strong>$1 - $2</strong> мыщ щыщхэу <strong>$3</strong>}}",
+       "search-nonefound": "Узлъыхъугъэм пари ехьылӀагъэ щыӀэп.",
+       "powersearch-legend": "Зэхэщыгъэ лъыхъун",
+       "powersearch-ns": "ЦIэчIыпIэмэ ащылъыхъу:",
+       "powersearch-togglelabel": "Гъэнаф:",
+       "powersearch-toggleall": "ЗэкIэ",
+       "powersearch-togglenone": "Зи",
+       "preferences": "Iамэ-псымэхэр",
+       "mypreferences": "ГъэпсыкӀэхэр",
+       "prefs-edits": "ЕIэзэнмэ япчъагъэ:",
+       "prefs-skin": "Ышъотеплъ",
+       "skin-preview": "Ыпэтеплъ",
+       "prefs-user-pages": "Нэбгырэм и нэкIубгъу",
+       "prefs-personal": "Нэбгырэм и профил",
+       "prefs-rc": "Ыужрэ зэхъокӀыныгъэхэр",
+       "prefs-watchlist": "Лъыплъэ куп",
+       "prefs-editwatchlist": "Лъыплъэ купым еIэзэн",
+       "prefs-editwatchlist-raw": "Лъыплъэ купым щыщэу сатырым еIэзэн",
+       "prefs-editwatchlist-clear": "Лъыплъэ купыр унэкI",
+       "prefs-watchlist-days": "Мафэ пчъагъэр:",
+       "prefs-watchlist-days-max": "Максимум $1 {{PLURAL:$1|маф|мафэхэр}}",
+       "prefs-watchlist-edits-max": "Нахьинышъущт нумер: 1000",
+       "prefs-watchlist-token": "Лъыплъэ купым и токен:",
+       "prefs-misc": "ПэмыкI гъэпсыкIэхэр",
+       "prefs-resetpass": "ШъэфгущыIэр зэблэхъу",
+       "prefs-changeemail": "Зэблэхъу емэйл адресыр",
+       "prefs-setemail": "Игъахь уи емэйл адресыр",
+       "prefs-email": "Емэйл гъэпсыкIэхэр",
+       "prefs-rendering": "Ышъотеплъэ",
+       "saveprefs": "Игъэпытыхь",
+       "prefs-editing": "ЕIэзэныгъэ",
+       "rows": "Сатырхэу:",
+       "searchresultshead": "Лъыхъу",
+       "stub-threshold-disabled": "ГъэкIуэсагъэ",
+       "recentchangesdays-max": "Максимум $1 {{PLURAL:$1|маф|мафэхэр}}",
+       "savedprefs": "Уи гъэпсыкIэхэр джы игъэпытыхьагъэх.",
+       "timezonelegend": "Сыхьат зон:",
+       "localtime": "Хьанэгъунэ уахът:",
+       "timezoneuseoffset": "НэмыкI (къэгъэлъагъу кощыр)",
+       "servertime": "Сервер уахът:",
+       "guesstimezone": "Браузерым къитхыкI",
+       "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": "Файлэхэр",
+       "prefs-emailconfirm-label": "Емэйл уплъэкIуныгъэ:",
+       "youremail": "Емэйл:",
+       "username": "{{GENDER:$1|НэбгырацI}}:",
+       "prefs-registration": "Регистрацие уахът:",
+       "yourrealname": "ЦIэ шъыпкъэр:",
+       "yourlanguage": "Бзэ:",
+       "yourvariant": "КIоцIрытым ыбзэ и вариант:",
+       "yournick": "КIэтхэжьыкIакIэ:",
+       "badsig": "КIэтхэжьыкIэр къуанчэ.\nHTML тегхэр уплъэкIу.",
+       "gender-male": "Вики нэкIубгъомэ яIазэ",
+       "gender-female": "Вики нэкIубгъомэ яIазэ",
+       "email": "Емэйл",
+       "prefs-help-email-required": "Емэйл адрес ищыкIагъ.",
+       "prefs-info": "Къэбар шъхьаIэр",
+       "prefs-i18n": "Интернационализацие",
+       "prefs-signature": "КIэтхэжьыкIэ",
+       "prefs-dateformat": "Мафэ формат",
+       "prefs-timeoffset": "Уахътэм и кощ",
+       "prefs-editor": "ЕIэзакIо",
+       "prefs-preview": "Ыпэтеплъ",
+       "prefs-advancedrc": "ГъэпсыкIэ игъэкIотыгъэхэр",
+       "prefs-advancedrendering": "ГъэпсыкIэ игъэкIотыгъэхэр",
+       "prefs-advancedsearchoptions": "ГъэпсыкIэ игъэкIотыгъэхэр",
+       "prefs-advancedwatchlist": "ГъэпсыкIэ игъэкIотыгъэхэр",
+       "prefs-displayrc": "ГъэпсыкIэхэр къэгъэлъагъу",
+       "prefs-displaywatchlist": "ГъэпсыкIэхэр къэгъэлъагъу",
+       "prefs-tokenwatchlist": "Токен",
+       "email-address-validity-valid": "Емэйл адресыр тэрэзым фэд",
+       "email-address-validity-invalid": "Емэйл адрес тэрэз итх",
+       "userrights-lookup-user": "Нэбгырэмэ якупхэр гъэпс",
+       "userrights-user-editname": "Итх уи нэбгырацӀэр:",
+       "editusergroup": "Нэбгырэмэ я купмэ яIаз",
+       "userrights-editusergroup": "Нэбгырэмэ я купмэ яIаз",
+       "userrights-groupsmember": "Мы купмэ ахахьэ:",
+       "userrights-reason": "ЗыпкъырыкIырэр:",
+       "userrights-nodatabase": "Датэбазэу $1 щыIэп е хьанэгъунэу щытэп.",
+       "userrights-changeable-col": "Купхэу узхэIэзыхьашъущтхэр",
+       "userrights-unchangeable-col": "Купхэу узхэМыIэзыхьашъущтхэр",
+       "group": "Куп:",
+       "group-user": "Нэбгырэхэр",
+       "group-autoconfirmed": "АутоуплъэкIугъэ нэбгырэхэр",
+       "group-bot": "Ботхэр",
+       "group-sysop": "Ιэшъхьэтетхэр",
+       "group-bureaucrat": "Бюрократхэр",
+       "group-all": "(зэкIэ)",
+       "group-user-member": "{{GENDER:$1|нэбгырэ}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|аутоуплъэкIугъэ нэбгырэ}}",
+       "group-bot-member": "{{GENDER:$1|бот}}",
+       "group-sysop-member": "{{GENDER:$1|Iэшъхьэтет}}",
+       "group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
+       "grouppage-user": "{{ns:project}}:Нэбгырэхэр",
+       "grouppage-autoconfirmed": "{{ns:project}}:АутоуплъэкIугъэ нэбгырэхэр",
+       "grouppage-bot": "{{ns:project}}:Ботхэр",
+       "grouppage-sysop": "{{ns:project}}:Ӏэшъхьэтетхэр",
+       "grouppage-bureaucrat": "{{ns:project}}:Бюрократхэр",
+       "right-read": "НэкIубгъомэ яплъ",
+       "right-edit": "НэкIубгъомэ яIаз",
+       "right-createtalk": "ТегущыIэнэ нэкIубгъохэр шIы",
+       "right-createaccount": "Нэбгырэмэ я аккаунт кIэхэр шIы",
+       "right-minoredit": "ЕIэзэнхэр цIыкIухэу гъэнафэх",
+       "right-move": "НэкIубгъомэ ацIэхэр хъожь",
+       "right-move-subpages": "Хьых нэкIубгъохэмрэ кIэтнэкIубгъохэмрэ",
+       "right-move-categorypages": "Хьы категорием и нэкIубгъохэр",
+       "right-movefile": "Файлэмэ ацIэхэр хъожь",
+       "right-upload": "Файлыр илъхь",
+       "right-reupload": "ЩыIэ файлхэм ашъхьэтетхэн",
+       "right-upload_by_url": "URL-м файлэхэр къищых",
+       "right-writeapi": "Итхэным пае API игъэфедэн",
+       "right-delete": "ТегъэкI нэкIбгъохэр",
+       "right-bigdelete": "ТегъэкI нэкIубгъохэр тарихъ кIахь зиIэ",
+       "right-browsearchive": "ТегъэкIыжьыгъэ нэкIубгъомэ алъыхъу",
+       "right-undelete": "ТемыгъэкI нэкIубгъор",
+       "right-viewsuppressed": "ЗэкIэмэ ашIогъэбылъыгъэ версиемэ яплъ",
+       "right-editcontentmodel": "НэкIубгъом и кIоцIырытым и модел зэблэхъун",
+       "right-editinterface": "Нэбгырэ-интерфейсым еIэзэн",
+       "right-editusercssjs": "НэмыкI нэбгырэмэ я CSS, JavaScript файлэмэ яIэзэн",
+       "right-editusercss": "НэмыкI нэбгырэмэ я CSS файлэмэ яIэзэн",
+       "right-edituserjs": "НэмыкI нэбгырэмэ я JavaScript файлэмэ яIэзэн",
+       "right-editmyusercss": "Уи CSS файлэмэ яIэзэн",
+       "right-editmyuserjs": "Уи JavaScript файлэмэ яIэзэн",
+       "right-viewmywatchlist": "Уи лъыплъэ купым еплъ",
+       "right-editmyoptions": "УигъэпсыкIэмэ яIаз",
+       "right-unwatchedpages": "Зылъымыплъэрэ нэкIубгъо купым еплъ",
+       "right-mergehistory": "НэкIубгъомэ ятарихъхэр зэпыдзэх",
+       "right-sendemail": "НэмыкIмэ емэйл афегъэхь",
+       "right-passwordreset": "ШъэфгущыIэм фэгъэхьыгъэ емэйлхэм яплъ",
+       "newuserlogpage": "ХэлэжьакӀомэ яублэн лог",
+       "action-read": "едж мы нэкIубгъом",
+       "action-edit": "мы нэкIубгъом еIаз",
+       "action-createpage": "нэкIубгъомэ я ублэн",
+       "action-createtalk": "тегущыIэнэ нэкIубгъомэ я ублэн",
+       "action-createaccount": "мы нэбгырэм и аккаунт ублэн",
+       "action-history": "мы нэкIубгъом и тарихъым еплъын",
+       "action-minoredit": "мы еIэзэныгъэр цIыкIоу гъэнаф",
+       "action-move": "мы нэкIубгъом ыцIэ хъожь",
+       "action-move-subpages": "хьы мы нэкIубгъори, кIэтнэкIубгъохэри",
+       "action-move-categorypages": "хьы категорием и нэкIубгъохэр",
+       "action-movefile": "хьы мы файлыр",
+       "action-upload": "илъхь мы файлэр",
+       "action-reupload": "мы файлыр икIэу къэтхыжь",
+       "action-upload_by_url": "илъхь мы файлыр мы URL-кIэ",
+       "action-writeapi": "еIэзэныгъэмэ апае API гъэфедэн",
+       "action-delete": "мы нэкIубгъор тегъэкI",
+       "action-deleterevision": "мы версиер тегъэкI",
+       "action-deletedhistory": "мы нэкIубгъом и тегъэкIыгъэ тарихъым еплъын",
+       "action-browsearchive": "тегъэкIыжьыгъэ нэкIубгъомэ алъыхъу",
+       "action-undelete": "мы нэкIубгъор теМыгъэкI",
+       "action-suppressrevision": "еплъи зэтегъэуцожь мы гъэбылъыгъэ версиер",
+       "action-import": "нэмыкI виким нэкIубгъохэр къих",
+       "action-importupload": "илъхьэгъэ файлэм нэкIубгъохэр къих",
+       "action-unwatchedpages": "зылъыМыплъэхэрэ нэкIубгъо купым яплъын",
+       "action-sendemail": "емэйлхэр ягъэхь",
+       "action-editmywatchlist": "уи лъыплъэ купым еIаз",
+       "action-viewmywatchlist": "уи лъыплъэ купым еплъ",
+       "nchanges": "$1 {{PLURAL:$1|зэхъокIыныгъэ|зэхъокIыныгъэхэр}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ыужрэ хэхьагъум азыфагу}}",
+       "enhancedrc-history": "тарихъ",
+       "recentchanges": "Ыужрэ зэхъокӀыныгъэхэр",
+       "recentchanges-legend": "БэмышӀ хэӀэзэгъу лъэкӀхэр",
+       "recentchanges-summary": "Мы нэкӀубгъом и вики и бэмышӀ зэхъокӀыныгъэхэм алъыплъ.",
+       "recentchanges-label-newpage": "Мы хэӀэзэныгъэм нэкӀубгъуакӀэ къышӀыгъ",
+       "recentchanges-label-minor": "Мыр хэӀэзэныгъэ цӀыкӀу",
+       "recentchanges-label-bot": "Мы хэӀэзэныгъэр ботым ышӀыгъ",
+       "recentchanges-label-unpatrolled": "Мы хэӀэзэныгъэм джыри патрулэу ауплъэкӀугъэп",
+       "recentchanges-label-plusminus": "НэкIубгъом ионтэгъугъэ мыщ фэдиз байт пчъагъэкIэ зэхъокIыгъэ",
+       "recentchanges-legend-heading": "'''Тхыдэ:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (нэмыкӀэу еплъ [[Special:NewPages|нэкӀубгъуакӀэ куп]])",
+       "rclistfrom": "ХэIэзэныкIэхэр къэгъэлъагъу мыщ щегъэжьагъэу $2, $3",
+       "rcshowhideminor": "$1 зэхъокӀыныгъэ цӀыкӀу",
+       "rcshowhideminor-show": "Къэгъэлъагъу",
+       "rcshowhideminor-hide": "Гъэбылъ",
+       "rcshowhidebots": "$1 бот",
+       "rcshowhidebots-show": "Къэгъэлъагъу",
+       "rcshowhidebots-hide": "Гъэбылъ",
+       "rcshowhideliu": "$1 хэхьэгъэ хэлэжьакӀу",
+       "rcshowhideliu-show": "Къэгъэлъагъу",
+       "rcshowhideliu-hide": "Гъэбылъ",
+       "rcshowhideanons": "$1 цӀэрамыӀо нэбгырэхэр",
+       "rcshowhideanons-show": "Къэгъэлъагъу",
+       "rcshowhideanons-hide": "Гъэбылъ",
+       "rcshowhidepatr": "$1 уплъэкIужьыгъэ еIэзэн",
+       "rcshowhidepatr-show": "Къэгъэлъагъу",
+       "rcshowhidepatr-hide": "Гъэбылъ",
+       "rcshowhidemine": "$1 си хэӀэзэнхэр",
+       "rcshowhidemine-show": "Къэгъэлъагъу",
+       "rcshowhidemine-hide": "Гъэбылъ",
+       "rclinks": "Ыужрэ $1 зэхъокIыныгъэ къэгъэлъагъу мэфэ $2 ыкIоцI<br />$3",
+       "diff": "зэфэшъхь",
+       "hist": "тар",
+       "hide": "Гъэбылъ",
+       "show": "Къэгъэлъагъу",
+       "minoreditletter": "ц",
+       "newpageletter": "КӀ",
+       "boteditletter": "б",
+       "rc_categories_any": "ХэшыпыкIыгъэмэ ащыщ горэ",
+       "rc-change-size-new": "$1 {{PLURAL:$1|байт}} зэхъокӀым ыуж",
+       "newsectionsummary": "/* $1 */ секциякIэ",
+       "rc-enhanced-expand": "Ӏэмэ-псымэхэр къэгъэлъагъу",
+       "rc-enhanced-hide": "Жъыиэ паркӀэхэр гъэбылъых",
+       "recentchangeslinked": "ЕхьылӀэгъэ зэхъокӀыныгъэхэр",
+       "recentchangeslinked-feed": "ЕхьылӀэгъэ зэхъокӀыныгъэхэр",
+       "recentchangeslinked-toolbox": "ЕхьылӀэгъэ зэблэхъуныгъэхэр",
+       "recentchangeslinked-title": "\"$1\"-м ехьылӀэгъэ зэхъокӀыныгъэхэр",
+       "recentchangeslinked-summary": "НэкIубгъо гъэнэфагъэ горэм зыщэрэ (е категорие гъэнэфагъэм итхэм зыщэрэ) нэкIубгъомэ яеIэзэнмэ ябэмышIэ куп.\n\n[[Special:Watchlist|Уилъыплъэ купым]] хахьэрэ нэкIубгъохэр <strong>хэунэфыкIыгъэх</strong>.",
+       "recentchangeslinked-page": "НэкӀубгъом ыцӀэр:",
+       "recentchangeslinked-to": "Пхэнджэу, зигугъу шIыгъэ нэкIубгъом къэзыщэрэ нэкIубгъомэ язэхъокIыныгъэхэр къэгъэлъагъу",
+       "upload": "Файлыр илъхь",
+       "uploadbtn": "Файлыр илъхь",
+       "uploadnologin": "Системэм хэхьагъэп",
+       "uploaderror": "Файл илъхьаныр фыкъуагъэ",
+       "uploadlogpage": "Илъхьанхэм я лог",
+       "filename": "ФайлыцIэ",
+       "filedesc": "КӀэкӀэу",
+       "fileuploadsummary": "КӀэкӀэу:",
+       "filereuploadsummary": "Файлым и зэблэхъунхэр:",
+       "filesource": "Лъапсэ:",
+       "minlength1": "ФайлэцIэр зы буквэу щытын фае мыхъуми.",
+       "filename-toolong": "ФайлыцIэр байт 240 нахьыбэ хъун лъэкIыщтэп.",
+       "badfilename": "ФайлыцIэр хъожьыгъэ мыщкIэ \"$1\".",
+       "filetype-missing": "Мы файлым зэхэщьыгъэ пари еIэп (\".jpg\" фэдэу).",
+       "empty-file": "Ебгъэхьыгъэ файлыр нэкIы.",
+       "file-too-large": "Ебгъэхьыгъэ файлыр иныщэ.",
+       "filename-tooshort": "ФайлыцIэр кIэкуащэ.",
+       "filetype-banned": "Мыфэдэ файл типыр адэрэп.",
+       "verification-error": "Мы файлым файл-уплъэкIуныр ыкIушъугъэп.",
+       "illegal-filename": "Мы файлыцIэр адэрэп.",
+       "overwrite": "ЩыIахэ файлым ушъхьатетхэ хъущтэп.",
+       "unknown-error": "Къончагъэ гор.",
+       "savefile": "Файлыр итх",
+       "uploadvirus": "Файлым вирусхэр илъыъ!\nКъэбар: $1",
+       "upload-source": "Лъэпсэ файл",
+       "sourcefilename": "Лъэпсэ файлым ыцI:",
+       "sourceurl": "Лъэпсэ URL:",
+       "destfilename": "ЗдакIорэ файлым цыI:",
+       "upload-maxfilesize": "Файлым иинагъэ максимум: $1",
+       "upload-description": "Файлым и къэбар",
+       "upload-options": "Илъхьан гъэпсыкIэхэр",
+       "watchthisupload": "Мы файлым лъыплъ",
+       "upload-success-subj": "ШIоу илъхьагъ",
+       "upload-proto-error": "Протокол фыкъуагъэ",
+       "upload-file-error": "ЫкIоцI фыкъуагъэ",
+       "upload-misc-error": "ЗэхэмышIыкIыгъэ илъхьан фыкъуагъэ",
+       "upload-http-error": "HTTP фыкъуагъэ горэ хъугъэ: $1",
+       "upload-dialog-title": "Файлыр илъхь",
+       "upload-dialog-error": "Фыкъуагъэ горэ хъугъэ",
+       "upload-dialog-button-cancel": "Ыуж икӀ",
+       "upload-dialog-button-done": "ЗэшIуэкIыгъэ",
+       "upload-dialog-button-save": "Итх",
+       "upload-dialog-button-upload": "Илъхь",
+       "upload-dialog-label-select-file": "Къыхэх файл",
+       "upload-dialog-label-infoform-title": "Къэбар",
+       "upload-dialog-label-infoform-name": "ЦIэ",
+       "upload-dialog-label-infoform-description": "АгурыбгъэIон",
+       "upload-dialog-label-usage-title": "Гъэфедэныгъэ",
+       "upload-dialog-label-usage-filename": "ФайлыцIэ",
+       "backend-fail-notexists": "Файлэу $1 щыIэп.",
+       "backend-fail-delete": "Файлэу \"$1\" тегъэкIын лъэкIырэп.",
+       "backend-fail-read": "Файлэу \"$1\" еплъын лъэкIырэп.",
+       "backend-fail-create": "Файлэу \"$1\" еIэзэн лъэкIырэп.",
+       "uploadstash": "Илъхьан шъэф",
+       "http-invalid-url": "URL къуанч: $1",
+       "http-read-error": "HTTP и еджэн фыкъуагъэ.",
+       "upload-curl-error6": "URL-м нэсын лъэкIырэп",
+       "license-header": "ЛицензиешӀын",
+       "nolicense": "Зи хэшыпыкIыгъэп",
+       "license-nopreview": "(Ыпэтеплъэр гъэпсыгъэп)",
+       "upload_source_file": "(къыхэпхыгъэ файлыр уи компьютер щыщ)",
+       "listfiles-delete": "ТегъэкI",
+       "listfiles_search_for": "ФайлыцIэмкIэ лыхъу:",
+       "imgfile": "файл",
+       "file-anchor-link": "Файл",
+       "filehist": "Файл тарихъ",
+       "filehist-help": "Мафэ/уахътэм теӀункӀ итеплъэр ащыгъум зэрэщытыгъэр плъэгъуным пае.",
+       "filehist-revert": "зэкIэгъэкIон",
+       "filehist-current": "джырэ",
+       "filehist-datetime": "Мафэ/Уахътэ",
+       "filehist-thumb": "рэсым цӀыку",
+       "filehist-thumbtext": "Зэманэу $1-м и версие и теплъэцIыкIу",
+       "filehist-user": "Нэбгрэ",
+       "filehist-dimensions": "Иинагъэхэр",
+       "filehist-comment": "ПыӀухьажь",
+       "imagelinks": "Файлым и гъэфедэн",
+       "linkstoimage": "КIэлъыкIорэ {{PLURAL:$1|нэкIубгъор ещэ|$1 нэкIубгъохэм ащэ}} мы файлым:",
+       "nolinkstoimage": "Мыщ къэзыщэу нэкӀубгъо пари щыӀэп.",
+       "sharedupload-desc-here": "Мы файлыр мыщ къикIыгъ $1 ыкIи нэмыкI проектхэм ащыгъэфедэн лъэкIыщт.\nИнформациеу [$2 файлым и гурыIон-тхыгъэм] щыщыр ычIэгъкIэ щыт.",
+       "upload-disallowed-here": "Мы файлым ухэӀэзахьыжьын уфитэп.",
+       "mimesearch": "MIME лъыхъун",
+       "mimetype": "MIME-тип",
+       "unwatchedpages": "Пари лымыплъэрэ нэкIубгъохэр",
+       "unusedtemplateswlh": "нэмыкI зэпыщэхэр",
+       "randompage": "ОшӀэдэмышӀэ нэкӀубгъу",
+       "randomincategory-category": "Категорие:",
+       "randomincategory-legend": "Категорием щыщэу ошIэдэмышIэ нэкIубгъу",
+       "randomincategory-submit": "КӀо",
+       "statistics": "Статистикэ",
+       "statistics-header-pages": "Нэк1убгъо статистикэ",
+       "statistics-header-edits": "ЕIэзэнхэм ястатистикэ",
+       "statistics-header-users": "Нэбгырэмэ ястатистикэ",
+       "statistics-header-hooks": "НэмыкI статистикэ",
+       "statistics-pages": "НэкӀубгъохэр",
+       "statistics-files": "Илъхьэгъэ файлэхэр",
+       "pageswithprop-submit": "КӀо",
+       "brokenredirects-edit": "еӀаз",
+       "brokenredirects-delete": "тегъэкI",
+       "withoutinterwiki": "Бзэ зэпыщэ зимыIэ нэкIубгъохэр",
+       "withoutinterwiki-summary": "Мы нэкIубгъомэ нэмыкI бзэ версиехэм ащэрэп.",
+       "withoutinterwiki-submit": "Къэгъэлъагъу",
+       "nbytes": "$1{{PLURAL:$1|байт|байтхэр}}",
+       "nmembers": "$1 {{PLURAL:$1|объект|объектхэр}}",
+       "uncategorizedcategories": "Категорие мыхьыгъэ категориехэр",
+       "uncategorizedimages": "Категорие мыхьыгъэ файлхэр",
+       "uncategorizedtemplates": "Категорие мыхьыгъэ шапхъэхэр",
+       "unusedcategories": "Мыгъэсэбэпыгъэ категориехэр",
+       "unusedimages": "Мыгъэсэбэпыгъэ файлхэр",
+       "wantedcategories": "ИщыкIэгъэ категориехэр",
+       "wantedpages": "ИщыкIэгъэ нэкIубгъохэр",
+       "wantedfiles": "ИщыкIэгъэ файлхэр",
+       "wantedtemplates": "ИщыкIэгъэ шапхъэхэр",
+       "mostlinked": "Нахьыбэу зыдащэрэ нэкIубгъохэр",
+       "mostlinkedcategories": "Нахьыбэу зыдащэрэ категориехэр",
+       "mostcategories": "Категорие нахьыбэ зиIэ нэкIубгъохэр",
+       "mostimages": "Нахьыбэу зыдащэрэ файлхэр",
+       "shortpages": "НэкIубгъо кIакIохэр",
+       "longpages": "НэкIубгъо кIахьхэр",
+       "protectedpages-page": "НэкӀубгъо",
+       "protectedpages-reason": "ЗыпкъырыкIырэр",
+       "protectedpages-unknown-timestamp": "ЗэхэмышIыкIыгъэ",
+       "newpages": "НэкӀубгъуакӀэхэр",
+       "newpages-username": "НэбгырацIэ:",
+       "ancientpages": "Жъыдэдэ нэкIубгъохэр",
+       "move": "Хьы",
+       "movethispage": "ЫцIэ зэблэхъу мы нэкIубгъом",
+       "pager-older-n": "{{PLURAL:$1|нахьыжъэу 1|нахьыжъхэу $1}}",
+       "booksources": "Тхылъхэр къыздикӀыгъэхэр",
+       "booksources-search-legend": "Тхылъ лъапсэхэм алъыхъу",
+       "booksources-search": "Лъыхъу",
+       "log": "Логхэр",
+       "log-title-wildcard": "Мы символхэмкIэ къежьэрэ нэкIубгъуацIэмэ алъыхъу",
+       "allpages": "НэкIубгъо пстэур",
+       "nextpage": "КIэлъыкIорэ нэкIубгъор ($1)",
+       "prevpage": "Ыпэит нэкубгъор ($1)",
+       "allarticles": "НэкӀубгъо пстэур",
+       "allinnamespace": "НэкIубгъо пстэур ($1 цIэчIыпIэр)",
+       "allpagessubmit": "KӀо",
+       "cachedspecial-refresh-now": "Ыуждэдэм еплъын.",
+       "categories": "Категориехэр",
+       "special-categories-sort-count": "гъэзаф пчъагъэкIэ",
+       "special-categories-sort-abc": "гъэзаф алфыбэкIэ",
+       "sp-deletedcontributions-contribs": "лэжьыгъэ",
+       "linksearch-pat": "Лъыхъун шапхъ:",
+       "linksearch-ns": "ЦӀэчӀыпӀ:",
+       "linksearch-ok": "Лъыхъу",
+       "listusers-submit": "Къэгъэлъагъу",
+       "listusers-noresult": "Нэбгырэ пари гъотыгъэп.",
+       "activeusers-hidebots": "Ботхэр гъэбылъ",
+       "activeusers-hidesysops": "Администраторхэр гъэбылъ",
+       "activeusers-noresult": "Нэбгырэ пари гъотыгъэп.",
+       "listgrouprights": "Нэбгырэмэ якупмэ яфитыныгъэхэр",
+       "listgrouprights-group": "Куп",
+       "listgrouprights-rights": "Фитыныгъэхэр",
+       "listgrouprights-helppage": "Help:Купхэм яфитыныгъэхэр",
+       "listgrouprights-members": "(хэлэжьэкIо пстэур)",
+       "listgrouprights-addgroup-all": "Куп пстэум хэгъахъу",
+       "listgrouprights-removegroup-all": "Куп пстэур тегъэкI",
+       "listgrouprights-namespaceprotection-namespace": "ЦӀэчӀыпӀ",
+       "trackingcategories": "Лъыплъэрэ категориехэр",
+       "trackingcategories-msg": "Лъыплъэрэ категорие",
+       "trackingcategories-name": "Мессаджым ыцIэ",
+       "mailnologin": "Гъахьыным пае адрес щыIэп",
+       "emailuser": "Нэбгырэм емэйл фегъэхь",
+       "emailuser-title-notarget": "Нэбгырэм емэйл фегъэхьын",
+       "noemailtitle": "Емэйл адресыр щыIэп",
+       "emailusername": "НэбгырацIэ:",
+       "emailusernamesubmit": "Егъэхь",
+       "emailmessage": "Мессадж:",
+       "emailsend": "Егъэхь",
+       "emailccme": "Симессаджым икопие къысфегъэхь.",
+       "emailsent": "Емэйлыр гъахьыгъэ",
+       "emailsenttext": "Уиемэйлыр моу джы гъахьыгъэ.",
+       "usermessage-summary": "Системэ мессадж къэгъан.",
+       "watchlist": "Лъыплъэ куп",
+       "mywatchlist": "Лъыплъэ куп",
+       "watchlistfor2": "$1 $2 пае",
+       "watchnologin": "Системэм хэхьагъэп",
+       "addwatch": "Лъыплъэ купым хэгъахъу",
+       "removewatch": "Лъыплъэ купым хэгъэкI",
+       "removedwatchtext-short": "НэкIубгъоу \"$1\" лъыплъэ купым хэгъэкIыгъэ.",
+       "watch": "Лъыплъ",
+       "watchthispage": "Мы нэкӀубгъом лъыплъ",
+       "unwatch": "Лъымыплъэжь",
+       "unwatchthispage": "Лъыплъэныр щыгъэт",
+       "watching": "Лъыплъ...",
+       "unwatching": "Лъымплъэжь...",
+       "enotif_impersonal_salutation": "{{SITENAME}} инэбгырэ",
+       "enotif_anon_editor": "ТымышӀэрэ нэбгыр $1",
+       "created": "къагъэхъуыгъ",
+       "changed": "зэблэхъугъэ",
+       "deletepage": "ТегъэкI нэкIубгъор",
+       "confirm": "Теубыт",
+       "excontent": "дэтхэгъагъэр: \"$1\"",
+       "excontentauthor": "дэтхэгъагъэр: \"$1\" (хэлэжьэкIо закъоэр \"[[Special:Contributions/$2|$2]]\")",
+       "delete-confirm": "ТегъэкI \"$1\"",
+       "delete-legend": "ТегъэкI",
+       "actioncomplete": "ЗэшIогъэкIыгъэ",
+       "actionfailed": "ЗэшIогъэкIыгъэп",
+       "dellogpage": "Тегъэкӏыкӏэ лог",
+       "dellogpagetext": "Анахь бэмышI тегъэкIынмэ я куп ычIэгъкIэ",
+       "deletionlog": "тегъэкӏынмэ я лог",
+       "reverted": "Ыпэрэ версие горэм дзыгъэ",
+       "deletecomment": "ЗыпкъырыкIырэр:",
+       "deletereasonotherlist": "ПэмыкI къызпкъырыкIрэр",
+       "delete-edit-reasonlist": "ТегъэкIын къызпкъырыкIхэм яIэзэн",
+       "deleteprotected": "Мы нэкIубгъор ухъумагъэшъ, тебгъэкIышъущтэп.",
+       "rollback": "ЕIэзэнхэр зэкIэгъэкIожь",
+       "rollbacklink": "къегъэгъэзэжъ",
+       "rollbacklinkcount": "зэкIэгъакIу $1 {{PLURAL:$1|зэхъокIыныгъэ|зэхъокIыныгъэхэр}}",
+       "sessionfailure-title": "Сессиер зэтеуагъ",
+       "changecontentmodel": "НэкIубгъом и кIоцIырытым и модел зэблэхъун",
+       "changecontentmodel-legend": "КIоцIырытым и модел зэблэхъун",
+       "changecontentmodel-title-label": "НэкIубгъуацIэ",
+       "changecontentmodel-model-label": "КIоцIырытым и моделыкIэ",
+       "changecontentmodel-reason-label": "ЗыпкъырыкIырэр:",
+       "changecontentmodel-success-title": "КIоцIырытым и модел зэблэхъугъэ",
+       "log-name-contentmodel": "КIоцIырыт моделым и зэхъокIхэм я тарихъ",
+       "protectlogpage": "Ухъумэным и лог",
+       "protectedarticle": "ухъумагъэ «[[$1]]»",
+       "unprotectedarticle": "\"[[$1]]\" и ухъумэныгъэр техыгъ",
+       "prot_1movedto2": "[[$1]]-р мыдыкIэ кощыгъэ [[$2]]",
+       "protect-badnamespace-title": "Мыухъумэгъэ цIэчIыпI",
+       "protect-badnamespace-text": "ЦIэчIыпIэм илъ нэкIубгъохэр ухъумэгъэн лъэкIырэп.",
+       "protect-norestrictiontypes-title": "Мыухъумэгъэ нэкIубгъу",
+       "protect-legend": "Тегъэпытыхь ухъумэныгъэр",
+       "protectcomment": "ЗыпкъырыкIырэр:",
+       "protectexpiry": "ЕкΙыжьы:",
+       "protect_expiry_invalid": "ИкI-зэманыр къуанчэ.",
+       "protect-default": "Мыухъумагъэ",
+       "protect-level-autoconfirmed": "АутоуплъэкIужьыгъэ нэбгырэ закъохэр ары фитхэр",
+       "protect-level-sysop": "Администратор закъохэр ары фитхэр",
+       "protect-summary-cascade": "каскадэу",
+       "protect-expiring": "екIыжьы $1 (UTC)",
+       "protect-expiring-local": "екIыжьы $1",
+       "protect-othertime": "ПэмыкI зэман:",
+       "protect-othertime-op": "пэмыкI зэман",
+       "protect-otherreason-op": "ПэмыкI къызпкъырыкIрэр",
+       "protect-edit-reasonlist": "Ухъумэн къызпкъырыкIхэм яIэзэн",
+       "restriction-type": "Фитыныгъэ:",
+       "minimum-size": "Минимал инагъэ",
+       "maximum-size": "Максимал инагъэ:",
+       "pagesize": "(байт)",
+       "restriction-edit": "ЕIаз",
+       "restriction-move": "Хьы",
+       "restriction-create": "КъэшI",
+       "restriction-upload": "Къыхащ",
+       "restriction-level-sysop": "зэрэпсаоу ухъумагъэ",
+       "restriction-level-autoconfirmed": "(ызныкъокӀэ ухъумагъэ)",
+       "undelete": "ТегъэкIыгъэ нэкIубгъохэр къэгъэлъагъу",
+       "undeletepage": "ТегъэкIыгъэ нэкIубгъохэр къэгъэлъагъу, зэшIогъэуцожьых",
+       "viewdeletedpage": "ТегъэкIыгъэ нэкIубгъохэр къэгъэлъагъу",
+       "undelete-fieldset-title": "Версиехэр зэшIогъэуцожь",
+       "undeletebtn": "ЗэшIогъэуцожь",
+       "undeletelink": "еплъ/зэкIэгъакIу",
+       "undeleteviewlink": "еплъ",
+       "undeletecomment": "ЗыпкъырыкIырэр:",
+       "undelete-search-title": "ТегъэкIыжьыгъэ нэкIубгъомэ алъыхъу",
+       "undelete-search-box": "ТегъэкIыжьыгъэ нэкIубгъомэ алъыхъу",
+       "undelete-search-prefix": "Къэгъэлъагъу нэкIубгъохэр мыщкIэ къежьэхэрэр:",
+       "undelete-search-submit": "Лъыхъу",
+       "undelete-show-file-submit": "Ары",
+       "namespace": "ЦӀэчӀыпӀ:",
+       "invert": "Зэшъхьатегъэуцу хэгъэщыгъэр",
+       "tooltip-invert": "Мы плIэмыер гъэнаф, хэхыгъэ цIэчIыпIэм щыщ нэкIубгъомэ яеIэзэнхэр бгъэбылъынэу (ыкIи ехьылIэгъэ цIэчIыпIэр, гъэнэфагъэмэ)",
+       "namespace_association": "ЕхьылӀэгъэ цӀэчӀыпӀэр",
+       "tooltip-namespace_association": "Мы плIэмыер гъэнаф, хэхыгъэ цIэчIыпIэм ехьылIэгъэ тегущыIэн-нэкIубгъор е субъект цIэчIыпIэр пыбгъэхъонэу уфаемэ.",
+       "blanknamespace": "(ШъхьаӀ)",
+       "contributions": "{{GENDER:$1|ХэлэжьакIом}} и лэжьыгъэ Iахь",
+       "contributions-title": "$1 нэбгырэм и лэжьыгъэ",
+       "mycontris": "Лэжьыгъэ",
+       "contribsub2": "{{GENDER:$3|$1}} пае ($2)",
+       "contributions-userdoesnotexist": "Аккаунтэу \"$1\" регистрацие шIыгъэп.",
+       "uctop": "(джырэ)",
+       "month": "Мазэм ыкӀоцӀ (ыкӀи нахь жьэу):",
+       "year": "Илъэсым ыкӀоцӀ (ыкӀи нахь жьэу):",
+       "sp-contributions-newbies": "Аккаунт кШэ закъомэ я лэжьыгъэр къэгъэлъагъу",
+       "sp-contributions-newbies-sub": "Аккаунт кIэмэ апай",
+       "sp-contributions-logs": "Логхэр",
+       "sp-contributions-talk": "тегущыI",
+       "sp-contributions-username": "IP-адрес е нэбгырацIэ:",
+       "sp-contributions-submit": "Лъыхъу",
+       "whatlinkshere": "Мы нэкӀубгъом къэзыщэрэ зэпыщэхэр",
+       "whatlinkshere-title": "\"$1\"-м къэзыщэрэ нэкӀубгъохэр",
+       "whatlinkshere-page": "НэкӀубгъо:",
+       "linkshere": "Мы нэкӀубгъомэ зэпыщэр мыщ къащэ <strong>[[:$1]]</strong>:",
+       "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": "Филтрэхэр",
+       "ipaddressorusername": "IP-адрес е нэбгырацIэ:",
+       "ipbreason": "ЗыпкъырыкIырэр:",
+       "ipbemailban": "Нэбгырэм емэйл ымыгъэхьышъунэу шIы",
+       "ipboptions": "сыхьатитIу:2 hours, зымаф:1 day,мэфищ:3 days, зытхьамаф:1 week, тхьамафитӀу:2 weeks, зымаз:1 month, мэзищ:3 months, мэзих:6 months, зыилъэс:1 year, ренэу:infinite",
+       "badipaddress": "IP адрес фыкъуагъэ",
+       "blocklist-reason": "ЗыпкъырыкIырэр",
+       "ipblocklist-submit": "Лъыхъу",
+       "ipblocklist-empty": "Блок купыр нэкIы.",
+       "blocklink": "егъэт",
+       "unblocklink": "Ӏухъотещ",
+       "change-blocklink": "Ӏухъор зэблэхъу",
+       "contribslink": "лъэжьыгъэ",
+       "movelogpage": "Кощхэм я лог",
+       "revertmove": "зэкIэгъэкIон",
+       "export": "НэкӀубгъохэр къыхэщын",
+       "export-addcattext": "Хэгъахъу нэкIубгъохэр категорием щыщэу:",
+       "export-addcat": "Хэгъахъу",
+       "export-addnstext": "Хэгъахъу нэкIубгъохэр цIэчIыпIэм щыщэу:",
+       "export-addns": "Хэгъахъу",
+       "allmessages": "Системэ мессаджхэр",
+       "allmessagesname": "ЦIэ",
+       "allmessagescurrent": "Джырэ мессаджым итекст",
+       "allmessages-filter-legend": "Филтр",
+       "allmessages-filter-unmodified": "ЗэмыхъакIыгъэ",
+       "allmessages-filter-all": "ЗэкIэ",
+       "allmessages-filter-modified": "ЗэхъокIыгъэ",
+       "allmessages-language": "Бзэ:",
+       "allmessages-filter-submit": "КӀо",
+       "allmessages-filter-translate": "ЗэдзэкI",
+       "thumbnail-more": "Джадэ къэшӀ",
+       "filemissing": "Файлыр щэкIэ",
+       "thumbnail_error_remote": "Къончагъэм имессадж, зиер $1: $2",
+       "import-interwiki-sourcewiki": "Лъапсэм и вики:",
+       "import-interwiki-sourcepage": "Лъапсэ нэкIубгъор:",
+       "import-interwiki-submit": "Къих",
+       "import-mapping-namespace": "Къихи цIэчIыпIэм къилъхь:",
+       "import-upload-filename": "ФайлыцIэ:",
+       "import-comment": "ПыIухьажь:",
+       "tooltip-pt-userpage": "Ситхьапэ",
+       "tooltip-pt-mytalk": "Уи гущыӀэ нэкӀубгъу",
+       "tooltip-pt-preferences": "Сызыфаехэр",
+       "tooltip-pt-watchlist": "НэкӀубгъоу зэӀазэхэрэм узылъыплъэу куп",
+       "tooltip-pt-mycontris": "Силэжьыгъэр",
+       "tooltip-pt-login": "Системэм ухахьэмэ дэгъу; егъэзыгъэ Ӏофэп",
+       "tooltip-pt-logout": "ХэкӀыжь системэм",
+       "tooltip-pt-createaccount": "Ӏамал щыӀэмэ аккаунт егъажьи системэм хахь; ау егъэзыгъэ Ӏоф хэлъэп",
+       "tooltip-ca-talk": "Апэ мэхьанэ нэкӀубгъом и тегущыӀэн",
+       "tooltip-ca-edit": "Гъэтэрэзыжь мы нэкӀубгъор",
+       "tooltip-ca-addsection": "Секцие кӀэ горэ къэубл",
+       "tooltip-ca-viewsource": "Мы нэкубгъор ухъумагъ.\nАу ылъапсэ плъэгъушъущт",
+       "tooltip-ca-history": "Мы нэкӀубгъом иверсиежъхэр",
+       "tooltip-ca-move": "Хьы мы нэкӀубгъор",
+       "tooltip-ca-watch": "НэкӀубгъор лъыплъэ купым хэгъахъу",
+       "tooltip-ca-unwatch": "Мы нэкIубгъор си лъыплъэ купым хэгъэкI",
+       "tooltip-search": "{{SITENAME}}-ым лъыхъу",
+       "tooltip-search-go": "ЩыӀэмэ, мыр зыцӀэ дэдэ нэкӀубгъом кӀо",
+       "tooltip-search-fulltext": "Мы тхыгъэр нэкӀубгъомэ къахэгъуат",
+       "tooltip-p-logo": "НэкӀубгъо шъхьаӀэм кӀо",
+       "tooltip-n-mainpage": "НэкӀубгъо шъхьаӀэм кӀо",
+       "tooltip-n-mainpage-description": "НэкӀубгъо шъхьаӀэм кӀо",
+       "tooltip-n-portal": "Проектым пае, пшӀэшъущтыр, сыд пӀомэ узэплъыщтыр",
+       "tooltip-n-currentevents": "КъэбаркӀэ нэкӀубгъу",
+       "tooltip-n-recentchanges": "Мы виким и аужрэ зэхъокӀыгъохэр",
+       "tooltip-n-randompage": "ОшӀэдэмышӀэ нэкӀубгъогорэ къигъахь",
+       "tooltip-n-help": "ӀэпыӀэгъу зыщыбгъотыщт чӀыпӀэр",
+       "tooltip-t-whatlinkshere": "Мы нэкӀубгъом къэзыщэрэ зэпыщэ пстэур",
+       "tooltip-t-recentchangeslinked": "Мы нэкӀубгъом пышӀагъэ нэкӀубгъорхэмэ яаужрэ зэблэхъухэр",
+       "tooltip-feed-atom": "Мы нэкӀубгъом ехьылӀэгъэ Atom чэзыур",
+       "tooltip-t-contributions": "Мы нэбгырэм и лэжьыгъэхэр",
+       "tooltip-t-upload": "Файлэхэр къилъхь",
+       "tooltip-t-specialpages": "Шъхьаф нэкӀубгъо пстэур",
+       "tooltip-t-print": "НэкӀубгъом ихэутын теплъ",
+       "tooltip-t-permalink": "Мы нэкӀубгъом къакIорэ зэмыхъокӀ зэпыщ",
+       "tooltip-ca-nstab-main": "КӀоцӀытхагъэм еплъ",
+       "tooltip-ca-nstab-user": "ЦӀыфым итхьапэ еплъ",
+       "tooltip-ca-nstab-special": "Мы нэкӀубгъор шъхьафы, зыцэ хэптхэжьын хъущтэп",
+       "tooltip-ca-nstab-project": "Проектым и нэкӀубгъу",
+       "tooltip-ca-nstab-image": "Тхьапэм и файл еплъ",
+       "tooltip-ca-nstab-mediawiki": "Систем мессаджым еплъ",
+       "tooltip-ca-nstab-template": "Шапхъэ къэгъэлъагъу",
+       "tooltip-ca-nstab-category": "Категорие тхьапэм еплъ",
+       "tooltip-minoredit": "Мэхьанэ зимыIэ хэIэзэныгъэу къэгъэлъагъу",
+       "tooltip-save": "Зэблэпхъугъэхэр дэтхэжь",
+       "tooltip-preview": "Ыпэ яплъ уи хэӀэзэнхэм, мыр гъэфедэба бгъэпытэным ыпэ!",
+       "tooltip-diff": "Яплъ зэпхъокӀыгъэхэмэ",
+       "tooltip-rollback": "\"ЗэкIэгъакIу\"-эм зэтеIункIэу зэкIегъэкIожьы еIэзэнхэу ыужрэ хэлэжьакIомкIэ шIыгъэхэр",
+       "tooltip-undo": "«КӀэгъэкӀожьын»-ым мы зэхъокӀыныгъэр зэкӀегъэкӀожьы ыкӀи еӀэзэкӀо формэр утеплъэшъунэу къызэӀуехы. ЗыфызэкӀэбгъэкӀожьыгъэри пыптхэжьышъущт.",
+       "tooltip-summary": "Къэбар тӀэкӀу горэ итх",
+       "simpleantispam-label": "Спам-ебэнрэ уплъэкӀун.\nМыщ зи хаптхэ <strong>хъущтэп</strong>!",
+       "pageinfo-language": "НэкIубгъом ыбз",
+       "pageinfo-toolboxlink": "НэкӀубгъом и информацие",
+       "previousdiff": "← ЫпэкъэкӀорэ еӀэзэн",
+       "nextdiff": "Нахь еӀэзэныгъакӀ →",
+       "file-info-size": "Пиксел $1 × $2, файлым иинагъэ: $3, MIME-тип: $4",
+       "file-nohires": "Нахь зэхэщыкIэ ин щыIэп.",
+       "svg-long-desc": "SVG файл, номиналэу $1 × $2 пиксел, файлым иинагъэ: $3",
+       "show-big-image": "Оригинал файлыр",
+       "show-big-image-preview": "Мыщ и ыпэтеплъэм иинагъэр: $1.",
+       "show-big-image-other": "НэпэмыкI {{PLURAL:$2|зэхэщыкIэ|зэхэщыкIэхэр}}: $1.",
+       "show-big-image-size": "Пиксел $1 × $2",
+       "ilsubmit": "Лъыхъу",
+       "bad_image_list": "Форматыр зэрщытыр:\n\nГулытэ зиӀэныр тхылъым и тамыгъэхэм (сатыр тамыгъэ * къежьэхэр).\nСатырым и техьэпӀэ япэрем сурэт иплъхьэ мыхъуным и техьэпӀэ иӀэн фай.\nЯужы ит техьэпӀэхэр хэгъэкӀа фэдэу къилъытэну, сурэтыр здиплъэ хъуну тхыгъэхэр.",
+       "metadata": "Метадатэр",
+       "metadata-help": "Мы файлым нэмыкI информацие илъ, диджитал камерэм сканнерым къикIыгъэу, шIыным е и диджитацие пае.\nМы файлыр иублэ щытыкIэ елъытыгъэу еIэзагъэхэмэ, детал горэхэр щыкIэщтхэнкIи мэхъу.",
+       "metadata-fields": "Сурэтым иметадатэ ишъофхэр мы мессаджым къыщыгъэлъэгъуагъэхэр сурэтым инэкIубгъо щыIэщтых, метадатэм инэкIубгъо щыхьагъэу щытэу.\nАдрэхэр гъэбылъыгъэу щытыщтых.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Кадрым и ориентацие",
+       "exif-xresolution": "Шъомбгъуагъ зэхэщыкIэ",
+       "exif-yresolution": "Iатыгъагъ зэхэщыкIэ",
+       "exif-datetime": "Файлым и зэхъокӀын мафэрэ, и зэманрэ",
+       "exif-make": "Камерэр къыдэзгъэкӀыгъэр",
+       "exif-model": "Камерэм и модел",
+       "exif-software": "Программ купэу гъэфедагъэр",
+       "exif-exifversion": "Exif версиер",
+       "exif-colorspace": "Теплъэшъо чӀыпӀэ",
+       "exif-datetimeoriginal": "Датэм и къежьэпӀэ мафэрэ уахътэрэ",
+       "exif-datetimedigitized": "ЦифрэшӀыным и мафэрэ, и уахътэрэ",
+       "exif-languagecode": "Бзэ",
+       "exif-orientation-1": "Тэрэз",
+       "namespacesall": "зэкӀэ",
+       "monthsall": "зэкӀэ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|тегущыIэныр]])",
+       "fileduplicatesearch-submit": "Лъыхъу",
+       "specialpages": "ЯӀамышӀыкӀ нэкӀубгъохэр",
+       "specialpages-group-login": "Къыхахь / аккаунт къэубл",
+       "tag-filter": "[[Special:Tags|Tag]] филтрэр:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Гъэнэфалъ|Гъэнэфалъэхэр}}]]: $2)",
+       "logentry-delete-delete": "$3 нэкӀубгъор $1 {{GENDER:$2|Ӏыгъ}}",
+       "logentry-move-move": "$1 {{GENDER:$2|ыгъэкощыгъэ}} нэкIубгъоу $3-р $4-м",
+       "logentry-newusers-create": "ХэлэжьэкIо аккаунтэу $1 {{GENDER:$2|ублагъэ}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|къырищыгъ}} $3",
+       "feedback-message": "Мессадж:",
+       "searchsuggest-search": "Лъыхъу",
+       "api-error-badtoken": "ЫкIоцI фыкъуагъэ: Токен дэй.",
+       "api-error-empty-file": "Ебгъэхьыгъэ файлыр нэкIы.",
+       "expand_templates_input": "Ихьэрэ текст:",
+       "expand_templates_output": "Резултат",
+       "expand_templates_xml_output": "XML къикIырэр",
+       "expand_templates_ok": "Хъун",
+       "expand_templates_remove_comments": "ТегъэкI комментхэр",
+       "expand_templates_preview": "Ыпэтеплъ",
+       "pagelanguage": "НэкIубгъом ыбзэ къыхэх",
+       "pagelang-name": "НэкӀубгъо",
+       "pagelang-language": "Бзэ",
+       "pagelang-select-lang": "Бзэр къыхэх",
+       "right-pagelang": "НэкIубгъом ыбзэр зэблэхъу",
+       "action-pagelang": "мы нэкIубгъом ыбзэ зэблэхъу",
+       "log-name-pagelang": "Бзэ зэблэхъунхэм я журнал",
+       "mediastatistics-table-mimetype": "MIME-тип",
+       "mediastatistics-table-count": "Файл пчъагъэр",
+       "mediastatistics-table-totalbytes": "Пстэум ионтэгъугъэ",
+       "mediastatistics-header-unknown": "ЗэхэмышIыкIыгъэ",
+       "mediastatistics-header-drawing": "Сурэтхэр (вектор сурэтхэр)",
+       "mediastatistics-header-audio": "Мэкъамэ",
+       "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-multimedia": "Мултимедиэ",
+       "mediastatistics-header-office": "Офис",
+       "mediastatistics-header-text": "Текстхэр",
+       "mediastatistics-header-archive": "Фызыгъэ форматхэр",
+       "json-error-state-mismatch": "Мыхъун е фыкъуэгъэ JSON",
+       "json-error-syntax": "Синтакс къончагъэ",
+       "headline-anchor-title": "Мы секцием къэзыщэрэ зэпыщ",
+       "special-characters-group-latin": "Латин",
+       "special-characters-group-latinextended": "Латин зэхэщыгъэ",
+       "special-characters-group-ipa": "ДФА",
+       "special-characters-group-symbols": "Символхэр",
+       "special-characters-group-greek": "Урым",
+       "special-characters-group-cyrillic": "Кирилл",
+       "special-characters-group-arabic": "Арап",
+       "special-characters-group-arabicextended": "Арап зэхэщыгъэ",
+       "special-characters-group-persian": "Перс",
+       "special-characters-group-hebrew": "Джурт",
+       "special-characters-group-bangla": "Бенгал",
+       "special-characters-group-tamil": "Тамил",
+       "special-characters-group-telugu": "Телугу",
+       "special-characters-group-sinhala": "Сингал",
+       "special-characters-group-gujarati": "Гуджарати",
+       "special-characters-group-devanagari": "Деванагари",
+       "special-characters-group-thai": "Тай",
+       "special-characters-group-lao": "Лао",
+       "special-characters-group-khmer": "Кхмер",
+       "special-characters-title-endash": "ыку-тире",
+       "special-characters-title-emdash": "тире кIахь",
+       "special-characters-title-minus": "минус символ",
+       "mw-widgets-dateinput-no-date": "Мафэр гъэнэфагъэп",
+       "mw-widgets-titleinput-description-new-page": "нэкIубгъор джыри щыIэп",
+       "mw-widgets-titleinput-description-redirect": "гъакIо мыкIэ $1"
+}
index 721b6d6..b72324c 100644 (file)
@@ -7,7 +7,9 @@
                        "Malekbr",
                        "아라",
                        "Aħmedbaɛl",
-                       "GeekEmad"
+                       "GeekEmad",
+                       "Nemo bis",
+                       "Shbib Al-Subaie"
                ]
        },
        "tog-usenewrc": ")جمّع التعديلات حسب الصفحة في أحدث التغييرات وقائمة المراقبة (يتطلب جافاسكربت",
@@ -61,6 +63,7 @@
        "versionrequiredtext": "تلزم النسخة $1 من ميدياويكي لاستعمال هذه الصفحة. انظر [[Special:Version|صفحة النسخة]]",
        "youhavenewmessages": "توجد لديك $1 ($2).",
        "youhavenewmessagesmulti": "لديك رسائل جديدة على $1",
+       "viewdeleted": "أأعرض $1؟",
        "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديلا محذوفا}}",
        "feedlinks": "التغذية:",
        "feed-invalid": "نوع اشتراك التلقيم غير صحيح.",
        "resetpass-wrong-oldpass": "كلمة سر حالية أو مؤقتة غير صحيحة.\nربما تكون غيرت كلمة السر الخاصة بك بنجاح أو طلبت كلمة سر مؤقتة جديدة.",
        "resetpass-temp-password": "كلمة سر مؤقتة:",
        "passwordreset": "إعادة ضبط كلمة السر",
-       "passwordreset-legend": "إعادة تعيين كلمة السر",
        "passwordreset-disabled": "عُطّلت إعادة تعيين كلمة السر على هذه الويكي.",
        "passwordreset-username": "اسم المستخدم:",
        "passwordreset-domain": "النطاق:",
        "isredirect": "صفحة تحويل",
        "istemplate": "مضمن",
        "isimage": "وصلة ملف",
-       "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
+       "whatlinkshere-next": "{{PLURAL:$1|التالية|ال$1 التالية}}",
        "whatlinkshere-links": "← وصلات",
        "whatlinkshere-hideredirs": "$1 التحويلات",
        "whatlinkshere-hidetrans": "$1 التضمينات",
index f11d703..f31a36e 100644 (file)
@@ -21,7 +21,8 @@
                        "පසිඳු කාවින්ද",
                        "아라",
                        "Macofe",
-                       "Fwolff"
+                       "Fwolff",
+                       "Oesjaar"
                ]
        },
        "tog-underline": "Onderstreep skakels.",
@@ -38,6 +39,7 @@
        "tog-watchdefault": "Voeg bladsye en lêers wat ek wysig by my dophoulys",
        "tog-watchmoves": "Voeg bladsye en lêers wat ek skuif by my dophoulys",
        "tog-watchdeletion": "Voeg bladsye en lêers wat ek skrap by my dophoulys",
+       "tog-watchrollback": "Voeg bladsye wat ek teruggerol het by my dophoulys",
        "tog-minordefault": "Merk alle wysigings automaties as klein by verstek.",
        "tog-previewontop": "Wys voorskou bo wysigingsboks.",
        "tog-previewonfirst": "Wys voorskou met eerste wysiging",
        "navigation-heading": "Navigasie-keuseskerm",
        "errorpagetitle": "Fout",
        "returnto": "Keer terug na $1.",
-       "tagline": "in {{SITENAME}}",
+       "tagline": "Vanaf {{SITENAME}}",
        "help": "Hulp",
        "search": "Soek",
        "searchbutton": "Soek",
        "go": "Wys",
        "searcharticle": "Wys",
-       "history": "Ouer weergawes",
+       "history": "Bladsygeskiedenis",
        "history_short": "Geskiedenis",
        "updatedmarker": "opgedateer sedert my laaste besoek",
        "printableversion": "Drukbare weergawe",
        "aboutsite": "Inligting oor {{SITENAME}}",
        "aboutpage": "Project:Omtrent",
        "copyright": "Inhoud is onderhewig aan $1, tensy anders vermeld",
-       "copyrightpage": "{{ns:project}}:kopiereg",
+       "copyrightpage": "{{ns:project}}:Kopieregte",
        "currentevents": "Huidige gebeure",
        "currentevents-url": "Project:Huidige gebeure",
        "disclaimers": "Voorbehoud",
        "feed-invalid": "Voertipe word nie ondersteun nie.",
        "feed-unavailable": "Sindikasievoer is nie beskikbaar",
        "site-rss-feed": "$1 RSS-voer",
-       "site-atom-feed": "$1 Atom-voer",
+       "site-atom-feed": "$1 Atoomvoer",
        "page-rss-feed": "\"$1\" RSS-voer",
-       "page-atom-feed": "\"$1\" Atom-voer",
+       "page-atom-feed": "\"$1\" Atoomvoer",
        "red-link-title": "$1 (bladsy bestaan nie)",
        "sort-descending": "Sorteer aflopend",
        "sort-ascending": "Sorteer oplopend",
        "passwordreset": "Herstel wagwoord",
        "passwordreset-text-one": "Voltooi hierdie vorm om u wagwoord te herstel.",
        "passwordreset-text-many": "{{PLURAL:$1|Vul een van die velde in om 'n tydelike wagwoord per e-pos te ontvang.}}",
-       "passwordreset-legend": "Kry nuwe wagwoord",
        "passwordreset-disabled": "Die herskik van U wagwoord is gedeaktiveer op hierdie wiki.",
        "passwordreset-emaildisabled": "E-posfunksies is afgeskakel op hierdie wiki.",
        "passwordreset-username": "Gebruiker:",
        "changeemail-password": "U wagwoord vir {{SITENAME}}:",
        "changeemail-submit": "Wysig E-posadres",
        "resettokens-token-label": "$1 (huidige waarde: $2)",
-       "bold_sample": "Vetgedrukte teks",
+       "bold_sample": "Vetdruk",
        "bold_tip": "Vetdruk",
        "italic_sample": "Skuinsgedrukte teks",
        "italic_tip": "Skuinsdruk",
        "nowiki_sample": "Plaas ongeformatteerde teks hier",
        "nowiki_tip": "Ignoreer wiki-formattering",
        "image_sample": "Voorbeeld.jpg",
-       "image_tip": "Beeld/prentjie/diagram",
+       "image_tip": "Medialêer",
        "media_sample": "Voorbeeld.ogg",
-       "media_tip": "Skakel na ander tipe medialêer",
+       "media_tip": "Lêerskakel",
        "sig_tip": "Handtekening met datum",
        "hr_tip": "Horisontale streep (selde nodig)",
        "summary": "Opsomming:",
        "updated": "(Gewysig)",
        "note": "'''Nota:'''",
        "previewnote": "'''Onthou dat hierdie slegs 'n voorskou is.'''\nU teks is nog nie gestoor nie!",
-       "continue-editing": "Wysig verder",
+       "continue-editing": "Gaan na redigeerarea",
        "previewconflict": "Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk as u die bladsy stoor.",
        "session_fail_preview": "'''Jammer! Weens verlies aan sessie-inligting is die wysiging nie verwerk nie.\nProbeer asseblief weer. As dit steeds nie werk nie, probeer om [[Special:UserLogout|af te teken]] en dan weer aan te meld.'''",
        "session_fail_preview_html": "'''Jammer! U wysigings is nie verwerk nie omdat sessie-data verlore gegaan het.'''\n\n''Omrede rou HTML hier by {{SITENAME}} ingevoer kan word, kan die voorskou nie gesien word nie ter beskerming teen aanvalle met JavaScript.''\n\n'''As dit 'n regmatige wysiging is, probeer asseblief weer. As dit daarna nog nie werk nie, [[Special:UserLogout|teken dan af]] en weer aan.'''",
        "viewpagelogs": "Bekyk logboeke vir hierdie bladsy",
        "nohistory": "Daar is geen wysigingsgeskiedenis vir hierdie bladsy nie.",
        "currentrev": "Huidige wysiging",
-       "currentrev-asof": "Huidige wysiging per $1",
+       "currentrev-asof": "Huidige wysiging sedert $1",
        "revisionasof": "Wysiging soos op $1",
-       "revision-info": "Weergawe deur {{GENDER:$6|$2}} op $4 om $5$7",
+       "revision-info": "Weergawe deur {{GENDER:$6|$2}} op $1$7",
        "previousrevision": "← Ouer weergawe",
        "nextrevision": "Nuwer weergawe →",
        "currentrevisionlink": "Huidige weergawe",
        "mergelog": "Versmeltingslogboek",
        "revertmerge": "Samesmelting ongedaan maak",
        "mergelogpagetext": "Hieronder is 'n lys van die mees onlangse versmeltings van een bladsy se geskiedenis na 'n ander.",
-       "history-title": "$1: weergawegeskiedenis",
-       "difference-title": "$1: verskil tussen weergawes",
+       "history-title": "Weergawegeskiedenis van \"$1\"",
+       "difference-title": "Verskil tussen weergawes van \"$1\"",
        "difference-title-multipage": "$1 en $2: verskil tussen bladsye",
        "difference-multipage": "(Verskil tussen bladsye)",
        "lineno": "Lyn $1:",
        "showhideselectedversions": "Wys/versteek gekose weergawes",
        "editundo": "maak ongedaan",
        "diff-empty": "(Geen verskil)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur dieselfde gebruiker nie gewys nie)",
        "diff-multi-manyusers": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur meer as $2 {{PLURAL:$2|gebruiker|gebruikers}} nie gewys nie)",
        "difference-missing-revision": "{{PLURAL:$2|'n Weergawe|$2 weergawes}} van die verskil ($1) {{PLURAL:$2|is|is}} nie gevind nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
        "searchresults": "Soekresultate",
        "next-page": "volgende bladsy",
        "prevn-title": "Vorige {{PLURAL:$1|resultaat|$1 resultate}}",
        "nextn-title": "Volgende {{PLURAL:$1|resultaat|$1 resultate}}",
-       "shown-title": "$1 {{PLURAL:$1|resultaat|resultate}} per bladsy",
+       "shown-title": "Wys $1 {{PLURAL:$1|resultaat|resultate}} per bladsy",
        "viewprevnext": "Wys ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Daar is reeds 'n bladsy genaamd \"[[:$1]]\" op die wiki'''",
        "searchmenu-new": "<strong>Skep die bladsy \"[[:$1]]\" op hierdie wiki</strong> {{PLURAL:$2|0=|Sien ook die bladsy wat in u soektog gevind is.|Sien ook die soekresultate wat gevind is.}}",
        "searchall": "alle",
        "showingresults": "Hier volg {{PLURAL:$1|'''1''' resultaat|'''$1''' resultate}} vanaf #'''$2'''.",
        "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultate <strong>$1 - $2</strong> van <strong>$3</strong>}}",
-       "search-nonefound": "Daar is geen resultate vir u soekopdrag nie.",
+       "search-nonefound": "Daar is geen resultate vir die navraag nie.",
        "powersearch-legend": "Gevorderde soektog",
        "powersearch-ns": "Soek in naamruimtes:",
        "powersearch-togglelabel": "Kies:",
        "recentchanges-feed-description": "Hierdie voer laat u toe om die mees onlangse wysigings aan die wiki te volg.",
        "recentchanges-label-newpage": "Met die wysiging is 'n nuwe bladsy geskep.",
        "recentchanges-label-minor": "Hierdie is 'n klein wysiging",
-       "recentchanges-label-bot": "Hierdie wysiging is deur 'n bot uitgevoer",
+       "recentchanges-label-bot": "Hierdie wysiging is deur 'n bot gemaak",
        "recentchanges-label-unpatrolled": "Die wysiging is nog nie gekontroleer nie",
        "recentchanges-label-plusminus": "Bladsy is met die aantal grepe gewysig",
        "recentchanges-legend-heading": "'''Sleutel:'''",
        "imagelinks": "Lêergebruik",
        "linkstoimage": "Die volgende {{PLURAL:$1|bladsy|$1 bladsye}} gebruik hierdie prent:",
        "linkstoimage-more": "Daar is meer as $1 {{PLURAL:$1|skakel|skakels}} na hierdie lêer.\nDie volgende lys vertoon slegs die eerste {{PLURAL:$1|skakel|$1 skakels}} wat na die lêer verwys.\n'n [[Special:WhatLinksHere/$2|Volledige lys]] is ook beskikbaar.",
-       "nolinkstoimage": "Daar is geen bladsye wat hierdie prent gebruik nie.",
+       "nolinkstoimage": "Daar is geen bladsye wat skakel na hierdie lêer nie.",
        "morelinkstoimage": "Wys [[Special:WhatLinksHere/$1|meer skakels]] na die lêer.",
        "linkstoimage-redirect": "$1 (lêeraanstuur) $2",
        "duplicatesoffile": "Die volgende {{PLURAL:$1|lêer is 'n duplikaat|$1 lêers is duplikate}} van die lêer ([[Special:FileDuplicateSearch/$2|meer details]]):",
        "randomincategory-invalidcategory": "\"$1\" is nie 'n geldige kategorienaam nie.",
        "randomincategory-nopages": "Daar is geen bladsye in kategorie [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorie:",
+       "randomincategory-submit": "Laat waai",
        "randomredirect": "Lukrake aanstuur",
        "randomredirect-nopages": "Daar is geen aansture in naamruimte \"$1\" nie.",
        "statistics": "Statistieke",
        "nmembers": "$1 {{PLURAL:$1|lid|lede}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|lid|lede}}",
        "nrevisions": "$1 {{PLURAL:$1|weergawe|weergawes}}",
-       "nviews": "$1 {{PLURAL:$1|keer|kere}} aangevra",
        "nimagelinks": "Gebruik op {{PLURAL:$1|een bladsy|$1 bladsye}}",
        "ntransclusions": "gebruik op {{PLURAL:$1|een bladsy|$1 bladsye}}",
        "specialpage-empty": "Die verslag lewer geen resultate nie.",
        "linksearch-pat": "Soekpatroon:",
        "linksearch-ns": "Naamruimte:",
        "linksearch-ok": "Soek",
-       "linksearch-text": "Patrone soos \"*.wikipedia.org\" kan gebruik word.<br />\nBenodig ten minste een topvlakdomein, soos byvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteunde protokol|Ondersteunde protokolle}}: <code>$1</code> (http:// word gebruik as niks gespesifiseer is nie)",
+       "linksearch-text": "Patrone soos \"*.wikipedia.org\" kan gebruik word.<br />\nBenodig ten minste een topvlakdomein, soos byvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteunde protokol|Ondersteunde protokolle}}: $1 (http:// word gebruik as niks gespesifiseer is nie)",
        "linksearch-line": "$1 geskakel vanaf $2",
        "linksearch-error": "Patrone kan slegs aan die begin van die rekenaarnaam geplaas word.",
        "listusersfrom": "Wys gebruikers, beginnende by:",
        "listgrouprights-removegroup-self-all": "Alle groepe verwyder van eie gebruiker",
        "listgrouprights-namespaceprotection-header": "Naamruimtebeperkings",
        "listgrouprights-namespaceprotection-namespace": "Naamruimte",
+       "trackingcategories": "Volg kategorieë",
        "trackingcategories-msg": "Volg kategorie",
        "trackingcategories-name": "Boodskapnaam",
        "trackingcategories-nodesc": "Geen beskrywing beskikbaar nie.",
        "emailuser": "Stuur e-pos na hierdie gebruiker",
        "emailuser-title-target": "E-pos die {{GENDER:$1|gebruiker}}",
        "emailuser-title-notarget": "E-pos gebruiker",
-       "emailpage": "Stuur e-pos na gebruiker",
        "emailpagetext": "As {{GENDER:$1|dié gebruiker}} 'n geldige e-posadres in sy/haar gebruikersvoorkeure het, sal hierdie vorm 'n enkele boodskap stuur. Die e-posadres in u [[Special:Preferences|gebruikersvoorkeure]] sal verskyn as die \"Van\"-adres van die pos. Dus sal die ontvanger kan terug antwoord.",
        "defemailsubject": "E-pos van {{SITENAME}}-gebruiker \"$1\"",
        "usermaildisabled": "E-pos deur gebruikers is gedeaktiveer.",
        "delete-toobig": "Die bladsy het 'n lang wysigingsgeskiedenis, meer as $1 {{PLURAL:$1|weergawe|weergawes}}.\nVerwydering van die soort blaaie is beperk om ontwrigting van {{SITENAME}} te voorkom.",
        "delete-warning-toobig": "Hierdie bladsy het 'n lang wysigingsgeskiedenis; meer as $1 {{PLURAL:$1|wysiging|wysigings}}.\nDeur weg te doen met hierdie bladsy mag dalk die werking van {{SITENAME}} versteur;\nTree asseblief versigtig op.",
        "rollback": "Rol veranderinge terug",
-       "rollbacklink": "Rol terug",
+       "rollbacklink": "rol terug",
        "rollbacklinkcount": "rol {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
        "rollbacklinkcount-morethan": "rol meer as {{PLURAL:$1|een wysiging|$1 wysigings}} terug",
        "rollbackfailed": "Terugrol onsuksesvol",
        "rollback-success": "Wysigings deur $1 is teruggerol.\nDie laaste weergawe van $2 is teruggeplaas.",
        "sessionfailure-title": "Sessie het gefaal",
        "sessionfailure": "Dit lyk of daar 'n probleem met u sessie is.\nHierdie aksie is gekanselleer omdat dit 'n veiligheidsrisiko is (moontlike kaping van u sessie).\nGaan een bladsy terug, herlaai die bladsy en probeer dan weer.",
-       "protectlogpage": "Beskermlogboek",
+       "protectlogpage": "Beskermingboekstaaf",
        "protectlogtext": "Hieronder is 'n lys van veranderinge wat aan die beveilig van bladsye aangebring is.\nSien die [[Special:ProtectedPages|lys van beveiligde bladsye]] vir alle bladsye wat tans operasioneel beveilig is.",
        "protectedarticle": "het [[$1]] beskerm",
        "modifiedarticleprotection": "Die beskermingsvlak vir \"[[$1]]\" is gewysig",
        "tooltip-pt-watchlist": "Die lys bladsye wat u vir veranderinge dophou",
        "tooltip-pt-mycontris": "Lys van my bydraes",
        "tooltip-pt-login": "U word aangemoedig om aan te meld. Dit is egter nie verpligtend nie.",
-       "tooltip-pt-logout": "Teken uit",
+       "tooltip-pt-logout": "Meld af",
        "tooltip-pt-createaccount": "U word aangemoedig om 'n gebruiker te skep en aan te meld, hoewel dit nie verpligtend is nie.",
        "tooltip-ca-talk": "Bespreking oor die inhoudbladsy",
-       "tooltip-ca-edit": "U kan hierdie bladsy wysig. Gebruik asseblief die voorskoufunksie vóór u dit stoor.",
+       "tooltip-ca-edit": "Wysig hierdie bladsy",
        "tooltip-ca-addsection": "Begin 'n nuwe bespreking",
        "tooltip-ca-viewsource": "Hierdie bladsy is beskerm. U kan die bronteks besigtig.",
        "tooltip-ca-history": "Ouer weergawes van hierdie bladsy",
        "tooltip-n-mainpage": "Besoek die Tuisblad",
        "tooltip-n-mainpage-description": "Gaan na die tuisblad",
        "tooltip-n-portal": "Meer oor die projek, wat jy kan doen, nuttige skakels",
-       "tooltip-n-currentevents": "'n Plek waar almal gesellig kan verkeer",
+       "tooltip-n-currentevents": "Agtergrondinligting oor aktuele sake",
        "tooltip-n-recentchanges": "'n Lys van onlangse wysigings",
        "tooltip-n-randompage": "Laai 'n lukrake bladsye",
        "tooltip-n-help": "Vind meer uit oor iets",
        "tooltip-t-whatlinkshere": "'n Lys bladsye wat hierheen skakel",
        "tooltip-t-recentchangeslinked": "Onlangse wysigings aan bladsye wat vanaf hierdie bladsy geskakel is",
        "tooltip-feed-rss": "RSS-voed vir hierdie bladsy",
-       "tooltip-feed-atom": "Atom-voed vir hierdie bladsy",
+       "tooltip-feed-atom": "Atoomvoer vir hierdie bladsy",
        "tooltip-t-contributions": "Bekyk 'n lys van bydraes deur hierdie gebruiker",
        "tooltip-t-emailuser": "Stuur 'n e-pos aan hierdie gebruiker",
-       "tooltip-t-upload": "Laai beelde of ander medialêers op",
+       "tooltip-t-upload": "Laai lêers op",
        "tooltip-t-specialpages": "'n Lys van al die spesiale bladsye",
        "tooltip-t-print": "Drukbare weergawe van hierdie bladsy",
        "tooltip-t-permalink": "'n Permanente skakel na hierdie weergawe van die bladsy",
        "tooltip-ca-nstab-media": "Bekyk die mediabladsy",
        "tooltip-ca-nstab-special": "Hierdie is 'n spesiale bladsy; u kan dit nie wysig nie",
        "tooltip-ca-nstab-project": "Bekyk die projekbladsy",
-       "tooltip-ca-nstab-image": "Bekyk die lrbladsy",
+       "tooltip-ca-nstab-image": "Bekyk die lêerbladsy",
        "tooltip-ca-nstab-mediawiki": "Bekyk die stelselboodskap",
        "tooltip-ca-nstab-template": "Bekyk die sjabloon",
        "tooltip-ca-nstab-help": "Bekyk die hulpbladsy",
        "tooltip-watchlistedit-raw-submit": "Opdateer dophoulys",
        "tooltip-recreate": "Herskep hierdie bladsy al is dit voorheen geskrap",
        "tooltip-upload": "Begin oplaai",
-       "tooltip-rollback": "Rol met een kliek die laaste gebruiker se wysiging(s) van aan hierdie bladsy terug.",
-       "tooltip-undo": "Met \"ongedaan maak\" maak u hierdie wysiging ongedaan en land u in die wysigingsvenster.\nU kan daar 'n wysigingsopsomming byvoeg.",
+       "tooltip-rollback": "Rol met een kliek die laaste gebruiker se wysiging(s) aan hierdie bladsy terug.",
+       "tooltip-undo": "\"Maak ongedaan\" keer die wysiging om wys die wysigingsbladsy met 'n voorskou. U kan daar 'n wysigingsopsomming byvoeg.",
        "tooltip-preferences-save": "Stoor voorkeure",
        "tooltip-summary": "Verskaf 'n kort opsomming",
        "interlanguage-link-title": "$1 – $2",
        "spam_reverting": "Besig met terugrol na die laaste weergawe wat nie skakels na $1 bevat nie",
        "spam_blanking": "Alle weergawes met 'n skakel na $1 word verwyder",
        "spam_deleting": "Alle weergawes bevat verwysings na $1. Bladsy verwyder",
-       "simpleantispam-label": "Antispam-kontrole.\n<strong>Moenie</strong> die veld invul nie!",
+       "simpleantispam-label": "<strong>Moenie</strong> die veld invul nie!",
        "pageinfo-title": "Inligting oor \"$1\"",
        "pageinfo-not-current": "Hierdie gegewens is slegs vir die huidige weergawe beskikbaar.",
        "pageinfo-header-basic": "Basiese inligting",
        "yesterday-at": "Gister om $1",
        "bad_image_list": "Die formaat is as volg:\n\nSlegs lys-items (lyne wat met * begin) word verwerk.\nDie eerste skakel op 'n lyn moet na 'n ongewenste lêer skakel.\nEnige opeenvolgende skakels op dieselfde lyn word as uitsonderings beskou, bv. blaaie waar die lêer inlyn kan voorkom.",
        "metadata": "Metadata",
-       "metadata-help": "Die lêer bevat aanvullende inligting wat moontlik deur 'n digitale kamera of skandeerder bygevoeg is.\nAs die lêer verander is, mag sekere inligting nie meer ooreenkom met die van die gewysigde lêer nie.",
+       "metadata-help": "Die lêer bevat aanvullende inligting wat moontlik deur 'n digitale kamera of skandeerder bygevoeg is.\nAs die lêer verander is, sal sekere inligting dalk nie meer ooreenkom met dié van die gewysigde lêer nie.",
        "metadata-expand": "Wys uitgebreide gegewens",
        "metadata-collapse": "Versteek uitgebreide gegewens",
        "metadata-fields": "Die velde in die boodskap word ook gewys op 'n beeldbladsy as die metadatatabel toegevou is.\nAnder velde sal versteek wees.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-referenceblackwhite": "Paar swart en wit verwysingswaardes",
        "exif-datetime": "Tydstip laaste lêerwysiging",
        "exif-imagedescription": "Beeldtitel",
-       "exif-make": "Kamera vervaardiger:",
-       "exif-model": "Kamera model",
+       "exif-make": "Kameravervaardiger:",
+       "exif-model": "Kameramodel",
        "exif-software": "Sagteware gebruik",
        "exif-artist": "Outeur",
        "exif-copyright": "Kopiereghouer",
-       "exif-exifversion": "Exif weergawe",
+       "exif-exifversion": "Exif-weergawe",
        "exif-flashpixversion": "Ondersteunde Flashpix-weergawe",
        "exif-colorspace": "Kleurruimte",
        "exif-componentsconfiguration": "Betekenis van elke komponent",
        "htmlform-cloner-create": "Meer meer by",
        "htmlform-cloner-delete": "Verwyder",
        "htmlform-cloner-required": "Ten minste één waarde verwag.",
+       "htmlform-title-badnamespace": "[[:$1]] is nie in die \"{{ns:$2}}\" naamspasie nie.",
+       "htmlform-title-not-creatable": "\"$1\" is nie 'n aanvaarbare blad titel nie",
+       "htmlform-title-not-exists": "[[:$1]] bestaan nie.",
        "sqlite-has-fts": "Weergawe $1 met ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "sqlite-no-fts": "Weergawe $1 sonder ondersteuning vir vol-teks soektogte (\"full-text search\")",
        "logentry-delete-delete": "$1 {{GENDER:$2|het}} bladsy $3 verwyder",
        "log-name-pagelang": "Logboek van taalwysigings",
        "log-description-pagelang": "Hierdie is 'n logboek van wysigings van die taal van bladsye.",
        "logentry-pagelang-pagelang": "$1 wysig die taal van bladsy '$3' van $4 na $5.",
+       "mediastatistics": "Mediastatistieke",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 greep|$1 grepe}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-tipe",
        "mediastatistics-table-extensions": "Moontlike uitbreidings",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 4ed68bc..3b8eee3 100644 (file)
@@ -5,7 +5,9 @@
                        "Cradel",
                        "Dardan",
                        "Mdupont",
-                       "아라"
+                       "아라",
+                       "Ammartivari",
+                       "Olsi"
                ]
        },
        "tog-underline": "Nënvizoji vegzat",
@@ -26,7 +28,7 @@
        "tog-previewontop": "Vendose parapamjen përpara kutisë redaktuese",
        "tog-previewonfirst": "Shfaqe parapamjen në redaktimin e parë",
        "tog-enotifwatchlistpages": "Njoftomë me email, kur ndryshojnë faqet e mbikëqyruna",
-       "tog-enotifusertalkpages": "Njoftomë me email kur ndryshon faqja ime e diskutimit",
+       "tog-enotifusertalkpages": "Njoftomë me email kur ndryshon faqja ime e bisedimit",
        "tog-enotifminoredits": "Njoftomë me email për redaktime të vogla të faqeve",
        "tog-enotifrevealaddr": "Shfaqe adresën time në emailat njoftues",
        "tog-shownumberswatching": "Shfaqe numrin e përdoruesve mbikëqyrës",
        "oct": "Tet",
        "nov": "Nan",
        "dec": "Dhe",
+       "january-date": "$1 kallnor",
+       "february-date": "$1 fror",
+       "march-date": "$1 mars",
+       "april-date": "$1 prill",
+       "may-date": "$1 maj",
+       "june-date": "$1 qershor",
+       "july-date": "$1 korrik",
+       "august-date": "$1 gusht",
+       "september-date": "$1 shtator",
+       "october-date": "$1 tetor",
+       "november-date": "$1 nândor",
+       "december-date": "$1 dhetor",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nënkategori",
        "newwindow": "(çelet në nji dritare të re)",
        "cancel": "Harroje",
        "moredotdotdot": "Mâ shumë...",
-       "mypage": "Faqja jeme",
-       "mytalk": "Diskutimet e mija",
-       "anontalk": "Diskutimet për këtë IP",
+       "morenotlisted": "Kjo listë nuk âsht e plotë.",
+       "mypage": "Faqja",
+       "mytalk": "Bisedimet",
+       "anontalk": "Bisedimet për këtë adres IP",
        "navigation": "Lundrimi",
        "and": "&#32;dhe",
        "qbfind": "Kërko",
        "printableversion": "Version për shtyp",
        "permalink": "Vegëz e përhershme",
        "print": "Shtyp",
+       "view": "Shiko",
+       "view-foreign": "Shiko në $1",
        "edit": "Redakto",
+       "edit-local": "Redakto përshkrimin vendor",
        "create": "Krijo",
        "editthispage": "Redaktoje kët faqe",
-       "create-this-page": "Krijo këtë faqe",
-       "delete": "Fshij",
-       "deletethispage": "Fshije këtë faqe",
+       "create-this-page": "Krijo kët faqe",
+       "delete": "Fshije",
+       "deletethispage": "Fshije kët faqe",
        "undelete_short": "Kthe {{PLURAL:$1|redaktimin e fshimë|$1 redaktime të fshime}}",
        "protect": "Mbroj",
        "protect_change": "ndrysho",
        "unprotect": "Hiq mbrojtjen",
        "unprotectthispage": "Hiq mbrojtjen nga kjo faqe",
        "newpage": "Faqe e re",
-       "talkpage": "Diskuto këtë faqe",
+       "talkpage": "Bisedo këtë faqe",
        "talkpagelinktext": "Bisedo",
        "specialpage": "Faqe speciale",
        "personaltools": "Vegla vetjake",
        "articlepage": "Shiko artikullin",
-       "talk": "Diskutimi",
+       "talk": "Bisedimi",
        "views": "Paraqitje",
        "toolbox": "Veglat",
        "userpage": "Shiko faqen e përdoruesit",
        "templatepage": "Shiko faqen e shabllonit",
        "viewhelppage": "Shiko faqen për ndihmë",
        "categorypage": "Shiko faqen e kategorisë",
-       "viewtalkpage": "Shiko diskutimin",
+       "viewtalkpage": "Shiko bisedimin",
        "otherlanguages": "Në gjuhë tjera",
        "redirectedfrom": "(Përcjellë nga $1)",
        "redirectpagesub": "Faqe përcjellëse",
        "right-read": "Lexo faqe",
        "right-edit": "Redakto faqet",
        "right-createpage": "Hap faqe (që nuk janë faqe diskutimi)",
-       "right-createtalk": "Hap faqe diskutimi",
+       "right-createtalk": "Hap faqe bisedimi",
        "right-createaccount": "Hap llogari të re",
        "right-minoredit": "Shëno redaktimet si të vogla",
        "right-move": "Lëviz faqet",
        "action-read": "lexo këtë faqe",
        "action-edit": "redakto këtë faqe",
        "action-createpage": "hapë faqe",
-       "action-createtalk": "hap faqe diskutimi",
+       "action-createtalk": "hap faqe bisedimi",
        "action-createaccount": "hapë këtë llogari",
        "action-minoredit": "shëno këtë redaktim si të vogël",
        "action-move": "lëviz këtë faqe",
        "year": "Prej vjetit (e mâ herët):",
        "sp-contributions-newbies": "Trego sall kontributet e përdoruesve të rij",
        "sp-contributions-blocklog": "regjistri i bllokimeve",
-       "sp-contributions-talk": "Diskuto",
+       "sp-contributions-talk": "Bisedo",
        "sp-contributions-search": "Kërko te kontributet",
        "sp-contributions-username": "Adresa IP ose përdoruesi:",
        "sp-contributions-submit": "Lyp",
        "thumbnail-more": "Zmadho",
        "thumbnail_error": "Gabim gjatë krijimit të figurës përmbledhëse: $1",
        "tooltip-pt-userpage": "Faqja juej e përdoruesit",
-       "tooltip-pt-mytalk": "Faqja juej e diskutimeve",
+       "tooltip-pt-mytalk": "Faqja juej e bisedimeve",
        "tooltip-pt-preferences": "Parapëlqimet tuaja",
        "tooltip-pt-watchlist": "Lista e faqeve nën mbikqyrjen tuej.",
        "tooltip-pt-mycontris": "Lista e kontributeve tueja",
        "tooltip-pt-login": "Të këshillojmë me u kyçë; mirëpo, nuk asht e detyrueshme",
        "tooltip-pt-logout": "Dalje",
-       "tooltip-ca-talk": "Diskuto për përmbajtjen e faqes",
+       "tooltip-ca-talk": "Bisedo për përmbajtjen e faqes",
        "tooltip-ca-edit": "Mund ta redaktosh kët faqe. Përdore pullën >>Shfaqe parapamjen<< para se t'i krysh ndryshimet.",
        "tooltip-ca-addsection": "Nis nji sekcion të ri.",
        "tooltip-ca-viewsource": "Kjo faqe asht e mbrojtun. Mundesh veç me pa burimin e tekstit.",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
        "searchsuggest-search": "Kërkim",
-       "searchsuggest-containing": "përmban ..."
+       "searchsuggest-containing": "përmban ...",
+       "special-characters-group-latin": "Latinisht",
+       "special-characters-group-latinextended": "Latine zgjeruar",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Simbolet",
+       "special-characters-group-greek": "Grek",
+       "special-characters-group-cyrillic": "I sllavishtes së vjetër",
+       "special-characters-group-arabic": "Arabisht",
+       "special-characters-group-hebrew": "Hebraisht",
+       "special-characters-group-bangla": "Shqip",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Guxharati"
 }
index e88507f..31a6016 100644 (file)
@@ -12,7 +12,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Macofe",
-                       "Carlos Cristia"
+                       "Carlos Cristia",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Subrayar os vinclos:",
        "resetpass-wrong-oldpass": "A clau actual u temporal no ye conforme.\nTalment ya ha cambiato a suya clau u ha demandato una nueva clau temporal.",
        "resetpass-temp-password": "Clau temporal:",
        "passwordreset": "Restablir a clau d'acceso",
-       "passwordreset-legend": "Restablir a clau d'acceso",
        "passwordreset-disabled": "S'ha desactivau o restablimiento de claus en ista wiki.",
        "passwordreset-username": "Nombre d'usuario:",
        "passwordreset-domain": "Dominio:",
        "prefs-reset-intro": "Puet emplegar ista pachina ta restaurar as suyas preferencias a las valuras por defecto d'o sitio.\nNo se podrá desfer iste cambio.",
        "prefs-emailconfirm-label": "Confirmación de correu electronico:",
        "youremail": "Adreza de correu electronico:",
-       "username": "Nombre d'usuario:",
+       "username": "{{GENDER:$1|Nombre d'usuario|Nombre d'usuaria|Nombre d'usuario}}:",
        "prefs-memberingroups": "Miembro {{PLURAL:$1|d'a colla|d'as collas}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "Tiempo de rechistro:",
        "nlinks": "$1 {{PLURAL:$1|vinclo|vinclos}}",
        "nmembers": "$1 {{PLURAL:$1|miembro|miembros}}",
        "nrevisions": "$1 {{PLURAL:$1|versión|versions}}",
-       "nviews": "$1 {{PLURAL:$1|vesita|vesitas}}",
        "nimagelinks": "S'emplega en $1 {{PLURAL:$1|pachina|pachinas}}",
        "ntransclusions": "s'emplega en $1 {{PLURAL:$1|pachina|pachinas}}",
        "specialpage-empty": "Ista pachina ye bueda.",
        "linksearch-pat": "Mirar patrón:",
        "linksearch-ns": "Espacio de nombres:",
        "linksearch-ok": "Mirar",
-       "linksearch-text": "Pueden usar-se carácters comodín como \"*.wikipedia.org\".\nA lo menos aprecisa un dominio de maximo libel, como \"*.org\".<br />\nProtocolos suportados: <code>$1</code> (no los adhiba en a suya busca).",
+       "linksearch-text": "Pueden usar-se carácters comodín como \"*.wikipedia.org\".\nA lo menos aprecisa un dominio de maximo libel, como \"*.org\".<br />\nProtocolos suportados: $1 (no los adhiba en a suya busca).",
        "linksearch-line": "$1 tiene un vinclo dende $2",
        "linksearch-error": "Os carácters comodín nomás pueden apareixer en o prencipio d'o nombre d'o sitio.",
        "listusersfrom": "Amostrar usuarios que o nombre suyo prencipie por:",
        "mailnologin": "No ninviar l'adreza",
        "mailnologintext": "Ha d'haber [[Special:UserLogin|encetato una sesión]] y tener una adreza conforme de correu-e en as suyas [[Special:Preferences|preferencias]] ta ninviar un correu electronico ta atros usuarios.",
        "emailuser": "Ninviar un correu electronico ta iste usuario",
-       "emailpage": "Ninviar correu ta l'usuario",
        "emailpagetext": "Puede fer servir o formulario que bi ye contino ta ninviar un correu electronico a iste usuario.\nL'adreza de correu-e que endicó en as suyas [[Special:Preferences|preferencias d'usuario]] amaneixerá en o campo \"Remitent\" ta que o destinatario pueda responder-le.",
        "defemailsubject": "Correu de {{SITENAME}} de l'usuario $1",
        "usermaildisabled": "S'ha desactivau o ninvío de correus electronicos a os usuarios",
        "special-characters-group-gujarati": "Gujaratí",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laosiano",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index 1bf03a3..f5b8df0 100644 (file)
        "history": "Trametes stǣr",
        "history_short": "Stǣr",
        "updatedmarker": "nīwod æfter mīnre lætestan sōcne",
-       "printableversion": "Ūtmǣlendlīc fadung",
+       "printableversion": "Ūtmǣlendlicu fadung",
        "permalink": "Fæst hlenca",
        "print": "Ūtmǣlan",
        "view": "Sihþ",
        "view-foreign": "Sihþ on $1",
-       "edit": "Adihtan",
+       "edit": "Ādihtan",
        "create": "Scieppan",
        "create-local": "Besettan stōwlice gemearcunge",
        "editthispage": "Adihtan þisne tramet",
        "view-pool-error": "Wālā, þā þegntōlas nū oferlīce wyrcaþ.\nTō mænige brūcendas gesēcaþ tō sēonne þisne tramet.\nWē biddaþ þæt þū abīde scortne tīman ǣr þū gesēce to sēonne þisne tramet eft.\n\n$1",
        "pool-errorunknown": "Uncūþ wōh",
        "aboutsite": "Gecȳþness ymbe {{GRAMMAR:wrēgendlīc|{{SITENAME}}}}",
-       "aboutpage": "Project:Gecȳþness",
+       "aboutpage": "Project:Gefrǣge",
        "copyright": "Man mæg innunge under $1 findan, būton þǣr hit is elles amearcod.",
        "copyrightpage": "{{ns:project}}:Gelīcnessriht",
        "currentevents": "Gelimpunga þisses tīman",
        "portal": "Gemǣnscipes ingang",
        "portal-url": "Project:Gemǣnscipes ingang",
        "privacy": "Ānlēpnesse rǣd",
-       "privacypage": "Project:Ānlēpnesse rǣd",
+       "privacypage": "Project:Ä\80nlÄ«Ä\93pnesse rÇ£d",
        "badaccess": "Þafunge wōh",
        "badaccess-group0": "Þū ne mōst dōn þā dǣde þǣre þe þū hafast abede.",
        "badaccess-groups": "Þēos dǣd þǣre þū hafast abeden is synderlīce alȳfedlic brūcendum on {{PLURAL:$2|þissum þrēate|ānum þāra þrēata}}: $1.",
        "resetpass-submit-loggedin": "Andwendan þafungword",
        "resetpass-submit-cancel": "Undōn",
        "passwordreset": "Settan þafungword eft",
-       "passwordreset-legend": "Settan þafungword eft",
        "passwordreset-username": "Brūcendnama:",
        "bold_sample": "Þicce traht",
        "bold_tip": "Þicce traht",
        "recentchanges-legend": "Nīwra andwendunga cyras",
        "recentchanges-summary": "Sēon þā nīwostan andwendunga þisses wiki on þissum tramete",
        "recentchanges-feed-description": "Īwan þā nīwostan andwendunga þæs wiki mid þissum strēame",
-       "recentchanges-label-newpage": "Þēos adihtung scōp nīwne tramet",
-       "recentchanges-label-minor": "Þēos is lytel adihtung",
+       "recentchanges-label-newpage": "Þēos ādihtung scōp nīwne tramet",
+       "recentchanges-label-minor": "Þēos is lytel ādihtung",
        "recentchanges-label-bot": "Searuþrǣl fremede þās adihtunge",
        "recentchanges-label-plusminus": "Þæs trametes micelness wæs andwended þȳs rīme grēatbitena",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (seoh ēac [[Special:NewPages|getæl nīwra trameta]])",
        "filerevert-legend": "Settan ymelan on bæc",
        "filedelete-submit": "Forlēosan",
        "unusedtemplateswlh": "ōðre hlencan",
-       "randompage": "Gelimplīc tramet",
+       "randompage": "Gelimplic tramet",
        "statistics": "Cȳþþu",
        "statistics-articles": "Innunge trametas",
        "statistics-pages": "Trametas",
        "allmessages-filter-modified": "Andwended",
        "allmessages-language": "Sprǣc:",
        "allmessages-filter-submit": "Gān",
-       "thumbnail-more": "Mǣrsian",
+       "thumbnail-more": "Gerȳman",
        "filemissing": "Ymele is æfweard",
        "import": "Inbringan trametas",
        "import-interwiki-submit": "Inbringan",
        "tooltip-pt-logout": "Ūtmeldian",
        "tooltip-pt-createaccount": "Þū āhst wyrcan grīman tō brūcenne, ac þū ne þearft þæt dōn.",
        "tooltip-ca-talk": "Mōtung ymbe þone innunge tramet",
-       "tooltip-ca-edit": "Þū meaht þisne tramet adihtan. Brūc lā þone forebysene cnæpp ǣr þū hordie.",
+       "tooltip-ca-edit": "Þisne tramet ādihtan.",
        "tooltip-ca-addsection": "Beginnan nīwne dǣl",
        "tooltip-ca-viewsource": "Þes tramet is borgen.\nÞū canst his fruman sēon.",
        "tooltip-ca-history": "Ǣrran fadunga þisses trametes",
        "specialpages-group-other": "Ōðre syndrige trametas",
        "specialpages-group-users": "Brūcendas and riht",
        "blankpage": "Tramet is æmettig",
+       "tag-filter": "[[Special:Tags|Mearcincles]] siftere:",
        "tags-edit": "adihtan",
        "htmlform-submit": "Forþsendan",
        "htmlform-reset": "Undōn andwendunga",
index c8667e9..2332ff6 100644 (file)
@@ -51,7 +51,9 @@
                        "Khaled",
                        "Emara",
                        "Macofe",
-                       "Yahya Sakhnini"
+                       "Yahya Sakhnini",
+                       "Mervat Salman",
+                       "Shbib Al-Subaie"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "readonly_lag": "تم قفل قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي",
        "internalerror": "عطل داخلي",
        "internalerror_info": "عطل داخلي: $1",
+       "internalerror-fatal-exception": "استثناء مميت من النوع \"$1\"",
        "filecopyerror": "تعذّر نسخ الملف \"$1\" إلى \"$2\".",
        "filerenameerror": "تعذّر تغيير اسم الملف \"$1\" إلى \"$2\".",
        "filedeleteerror": "تعذّر حذف الملف \"$1\".",
        "badtitle": "عنوان سيء",
        "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.",
        "title-invalid-empty": "عنوان الصفحة المطلوبة فارغ أو يحتوي اسم النطاق فقط.",
+       "title-invalid-utf8": "عنوان الصفحة المطلوب يحتوي سلسلة محارف UTF-8 غير صالحة.",
        "title-invalid-interwiki": "عنوان الصفحة المطلوب يتضمن وصلة لحلقة لغة وهو ما لا يمكن استخدامه في العناوين.",
        "title-invalid-talk-namespace": "عنوان الصفحة المطلوبة يشير إلى صفحة نقاش غير موجودة.",
        "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن محارف غير صالحة: \"$1\"",
+       "title-invalid-leading-colon": "عنوان الصفحة المطلوب يتضمن فاصلة غير صالحة في بدايته.",
        "perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
        "perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
        "querypage-no-updates": "تحديثات هذه الصفحة معطلة حاليا.\nالبيانات هنا لن يتم تحديثها حاليا.",
        "actionthrottled": "تم كبح الفعل",
        "actionthrottledtext": "احترازا من السُّخام، يُحظر إجراء هذا الفعل مرات كثيرة في فترة زمنية قصيرة، و لقد تجاوزت هذا الحد.\nمن فضلك حاول مجددا بعد عدة دقائق.",
        "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.",
-       "viewsourcetext": "تمكنك مطالعة و نسخ مصدر هذه الصفحة:",
-       "viewyourtext": "Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø§Ø³ØªØ¹Ø±Ø§Ø¶ Ù\88 Ù\86سخ Ù\85صدر ''' ØªØ¹Ø¯Ù\8aÙ\84اتÙ\83 ''' Ù\81Ù\8a Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة:",
+       "viewsourcetext": "يمكنك مطالعة و نسخ مصدر هذه الصفحة.",
+       "viewyourtext": "Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø±Ø¤Ù\8aØ© Ù\88 Ù\86سخ Ù\85صدر <strong>تعدÙ\8aÙ\84اتÙ\83</strong> Ù\84Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة.",
        "protectedinterface": "توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.\nلإضافة أو تغيير الترجمات لجميع مشاريع الويكي، رجاءً أستخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
        "editinginterface": "<strong>تنبيه:</strong> تعديل هذه الصفحة سيحفظ في هذا الويكي فقط. لتعميم التعديل على جميع مشاريع ميدياويكي، عدلها في [//translatewiki.net/ مشروع ترجمة الويكي].",
        "translateinterface": "من أجل إضافة أو تعديل ترجمات في كل مشاريع الويكي يرجى استخدم [//translatewiki.net/ translatewiki.net]، مشروع ميدياويكي لترجمة الواجهة.",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحة}}",
        "createacct-benefit-body3": "آخر {{PLURAL:$1|مساهم|مساهمين}}",
        "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
+       "usernameinprogress": "إن عملية إنشاء حساب لاسم المستخدم هذا جارية بالفعل. برجاء الانتظار.",
        "userexists": "اسم المستخدم الذي تم إدخاله مستعمل بالفعل.\nالرجاء اختيار اسم مختلف.",
        "loginerror": "خطأ في الدخول",
        "createacct-error": "خطأ في إنشاء حساب",
        "yourdiff": "الفروق",
        "copyrightwarning": "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)\nإذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.\nكما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.\n'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
        "copyrightwarning2": "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.\nإذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />\nأنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).\n'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
+       "editpage-cannot-use-custom-model": "نموذج المحتوى لهذه الصفحة لا يمكن تغييره.",
        "longpageerror": "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''\nو يتعذر حفظه.",
        "readonlywarning": "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''\n\nالإداري الذي أغلقها أعطى هذا التفسير: $1",
        "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "semiprotectedpagewarning": "'''ملاحظة:''' هذه الصفحة محمية بحيث يمكن للمستخدمين المسجلين وحدهم تعديلها.",
-       "cascadeprotectedwarning": "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+       "cascadeprotectedwarning": "<strong>تحذير:</strong> تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
        "titleprotectedwarning": "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
        "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
        "rev-showdeleted": "أظهر",
        "revisiondelete": "حذف/استرجاع المراجعات",
        "revdelete-nooldid-title": "مراجعة هدف غير صحيحة",
-       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
+       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
        "revdelete-no-file": "الملف المحدد غير موجود.",
        "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
        "revdelete-show-file-submit": "نعم",
        "search-category": "(التصنيف $1)",
        "search-file-match": "(يطابق محتوى الملف)",
        "search-suggest": "أتقصد: $1",
+       "search-rewritten": "عرض النتائج ل$1. ابحث بدلا من ذلك عن $2.",
        "search-interwiki-caption": "المشاريع الشقيقة",
        "search-interwiki-default": "نتائح من $1:",
        "search-interwiki-more": "(المزيد)",
        "rows": "صفوف:",
        "columns": "أعمدة:",
        "searchresultshead": "بحث",
-       "stub-threshold": "الحد لتنسيق <a href=\"#\" class=\"stub\">وصلة البذرة</a>:",
+       "stub-threshold": "الحد لتنسيق وصلة البذرة ($1):",
+       "stub-threshold-sample-link": "عينة",
        "stub-threshold-disabled": "معطل",
        "recentchangesdays": "عدد الأيام المعروضة في أحدث التغييرات:",
        "recentchangesdays-max": "الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}",
        "badsig": "توقيع خام غير صحيح؛ تحقق من وسوم HTML.",
        "badsiglength": "توقيعك طويل جدا.\nيجب أن يكون أقل من $1 {{PLURAL:$1|حرف|حروف}}.",
        "yourgender": "كيف تفضل أن توصف؟",
-       "gender-unknown": "Ø£Ù\81ضÙ\84 Ø¹Ø¯Ù\85 Ø§Ù\84Ø¥Ù\81صاح",
+       "gender-unknown": "عÙ\86د Ø°Ù\83رÙ\83Ø\8c Ø§Ù\84برÙ\86اÙ\85ج Ø³Ù\8aستخدÙ\85 Ù\83Ù\84Ù\85ات Ù\85حاÙ\8aدة Ø§Ù\84Ù\86Ù\88ع Ù\85تÙ\89 Ù\85ا Ù\83اÙ\86 Ø°Ù\84Ù\83 Ù\85Ù\85Ù\83Ù\86ا",
        "gender-male": "هو يعدل صفحات الويكي",
        "gender-female": "هي تعدل صفحات الويكي",
        "prefs-help-gender": "ضبط هذا التفضيل اختياري.\nيستخدم البرنامج هذه القيمة لمخاطبتك ومخاطبة الآخرين عنك وفقا للصيغة النحوية الملائمة للجنس.\nستكون هذه المعلومة علنية.",
        "userrights-lookup-user": "أدِر مجموعات المستخدم",
        "userrights-user-editname": "أدخل اسم مستخدم:",
        "editusergroup": "عدل مجموعات المستخدم",
-       "editinguser": "تغيير صلاحيات {{GENDER:$1|المستخدم|المستخدمة}} '''[[User:$1|$1]]''' $2",
+       "editinguser": "تغيير صلاحيات {{GENDER:$1|المستخدم|المستخدمة}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "تعديل مجموعات المستخدم",
        "saveusergroups": "احفظ مجموعات المستخدم",
        "userrights-groupsmember": "عضو في:",
        "newpageletter": "ج‌",
        "boteditletter": "ب",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|لا مستخدمون يراقبون|مستخدم واحد يراقب|مستخدمان يراقبان|$1 مستخدمين يراقبون|$1 مستخدما يراقب|$1 مستخدم يراقب}}]",
-       "rc_categories": "حصر لتصنيفات (مفرقة برمز \"|\")",
-       "rc_categories_any": "أي",
+       "rc_categories": "حصر لتصنيفات (مفرقة برمز \"|\"):",
+       "rc_categories_any": "أي من المختار",
        "rc-change-size-new": "$1 {{PLURAL:$1|بايت|بايت}} بعد التغيير",
        "newsectionsummary": "/* $1 */ قسم جديد",
        "rc-enhanced-expand": "عرض التفاصيل",
        "upload-too-many-redirects": "احتوى المسار تحويلات كثيرة جدا",
        "upload-http-error": "صودف خطأ HTTP: $1",
        "upload-copy-upload-invalid-domain": "رفع النسخ غير متاح من هذا الموقع",
+       "upload-dialog-title": "رفع الملف",
+       "upload-dialog-error": "حدث خطأ",
+       "upload-dialog-warning": "حدث تنبيه",
+       "upload-dialog-button-cancel": "إلغاء",
+       "upload-dialog-button-done": "تم",
+       "upload-dialog-button-save": "احفظ",
+       "upload-dialog-button-upload": "رفع",
+       "upload-dialog-label-select-file": "اختر ملفا",
+       "upload-dialog-label-infoform-title": "التفاصيل",
+       "upload-dialog-label-infoform-name": "الاسم",
+       "upload-dialog-label-infoform-description": "الوصف",
+       "upload-dialog-label-usage-title": "الاستخدام",
+       "upload-dialog-label-usage-filename": "اسم الملف",
        "backend-fail-stream": "لا يمكن عرض الملف $1.",
        "backend-fail-backup": "لا يمكن صنع نسخة أحتياطية للملف $1.",
        "backend-fail-notexists": "الملف $1 غير موجود.",
        "linksearch-pat": "نمط البحث:",
        "linksearch-ns": "النطاق:",
        "linksearch-ok": "بحث",
-       "linksearch-text": "Wildcards مثل \"*.wikipedia.org\" يمكن استخدامها.\nتحتاج على الأقل إلى نطاق ذو مستوى أعلى، كمثال \"*.org\".<br />\n{{PLURAL:$2|البروتوكول المدعوم|البروتوكولان المدعومان|البروتوكولات المدعومة}}: <code>$1</code> (تتم إضافة http:// تلقائيا عند عدم تحديد أي بروتوكول).",
+       "linksearch-text": "Wildcards مثل \"*.wikipedia.org\" يمكن استخدامها.\nتحتاج على الأقل إلى نطاق ذو مستوى أعلى، كمثال \"*.org\".<br />\n{{PLURAL:$2|البروتوكول المدعوم|البروتوكولان المدعومان|البروتوكولات المدعومة}}: $1 (تتم إضافة http:// تلقائيا عند عدم تحديد أي بروتوكول).",
        "linksearch-line": "$1 موصولة من $2",
        "linksearch-error": "الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.",
        "listusersfrom": "اعرض المستخدمين ابتداء من:",
        "emailuser": "مراسلة المستخدم",
        "emailuser-title-target": "راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}",
        "emailuser-title-notarget": "مراسلة المستخدم",
-       "emailpage": "إرسال رسالة للمستخدم",
        "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\n'''يمكن أن يرى المرسل إليه عنوان بريدك الإلكتروني''' الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
        "defemailsubject": "رسالة {{SITENAME}} من المستخدم \"$1\"",
        "usermaildisabled": "بريد المستخدم الإلكتروني معطل",
        "emailccsubject": "نسخة من رسالتك إلى $1: $2",
        "emailsent": "أُرسل البريد الإلكتروني",
        "emailsenttext": "أُرسلت رسالتك الإلكترونية.",
-       "emailuserfooter": "هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة \"مراسلة المستخدم\" في {{SITENAME}}.",
+       "emailuserfooter": "هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة \"{{int:emailuser}}\" في {{SITENAME}}.",
        "usermessage-summary": "ترك رسالة نظام.",
        "usermessage-editor": "مراسل النظام",
        "watchlist": "قائمة مراقبتي",
        "watchlistanontext": "الرجاء $1 لعرض أو تعديل الصفحات في قائمة مراقبتك.",
        "watchnologin": "غير مسجل الدخول",
        "addwatch": "إضافة إلى قائمة المراقبة",
-       "addedwatchtext": "أضيفت الصفحة  \"[[:$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].\nالتغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.",
+       "addedwatchtext": "\"[[:$1]]\" وصفحة نقاشها أضيفتا إلى [[Special:Watchlist|قائمة مراقبتك]].",
        "addedwatchtext-short": "أضيفت صفحة \"$1\" إلى قائمة مراقبتك.",
        "removewatch": "إزالة من قائمة المراقبة",
-       "removedwatchtext": "أزيلت الصفحة \"[[:$1]]\" من [[Special:Watchlist|قائمة مراقبتك]].",
+       "removedwatchtext": "\"[[:$1]]\" وصفحة نقاشها أزيلتا من [[Special:Watchlist|قائمة مراقبتك]].",
        "removedwatchtext-short": "أزيلت صفحة \"$1\" من قائمة مراقبتك.",
        "watch": "راقب",
        "watchthispage": "راقب هذه الصفحة",
        "rollback-success": "استرجع تعديلات $1؛\nاسترجع حتى آخر نسخة بواسطة $2.",
        "sessionfailure-title": "فشل في الجلسة",
        "sessionfailure": "يبدو أنه هناك مشكلة في هذه جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك اضغط على مفتاح \"رجوع\" لتحميل الصفحة التي جئت منها، ثم حاول مرة أخرى.",
+       "changecontentmodel": "غير نموذج المحتوى لصفحة",
+       "changecontentmodel-legend": "غير نموذج المحتوى",
        "changecontentmodel-title-label": "عنوان الصفحة",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "changecontentmodel-reason-label": "السبب:",
+       "changecontentmodel-success-title": "نموذج المحتوى تم تغييره",
+       "changecontentmodel-success-text": "نوع المحتوى ل[[:$1]] تم تغييره.",
+       "changecontentmodel-cannot-convert": "المحتوى على [[:$1]] لا يمكن تحويله لنوع من $2.",
+       "changecontentmodel-nodirectediting": "نموذج المحتوى $1 لا يدعم التعديل المباشر",
+       "log-name-contentmodel": "سجل تغيير نموذج المحتوى",
+       "log-description-contentmodel": "الأحداث المرتبطة بنماذج المحتوى لصفحة",
        "logentry-contentmodel-change-revertlink": "استرجع",
        "logentry-contentmodel-change-revert": "استرجع",
        "protectlogpage": "سجل الحماية",
        "protect-locked-blocked": "لا يمكنك تغيير مستويات الحماية وأنت ممنوع.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-dblock": "لا يمكن تغيير مستويات الحماية بسبب غلق قاعدة البيانات حاليا.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-access": "لا يملك حسابك هذا صلاحية تغيير مستوى حماية الصفحة.\nالإعدادات الحالية للصفحة '''$1''' هي:",
-       "protect-cascadeon": "هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1||الصفحة التالية|الصفحتين التاليتين|الصفحات التالية}}، والتي بها خيار حماية الصفحات المدمجة فعال.\nلن يؤثر تغيير مستوى حماية هذه الصفحة على حماية الصفحات المدمجة.",
+       "protect-cascadeon": "هذه الصفحة محمية حاليا لكونها مضمنة في {{PLURAL:$1||الصفحة التالية|الصفحتين التاليتين|الصفحات التالية}}، والتي بها خيار حماية الصفحات المدمجة فعال.\nلن يؤثر تغيير مستوى حماية هذه الصفحة على حماية الصفحات المدمجة.",
        "protect-default": "اسمح لكل المستخدمين",
        "protect-fallback": "السماح فقط للمستخدمين ذوي الصلاحية \"$1\"",
        "protect-level-autoconfirmed": "السماح فقط للمستخدمين المؤكدين تلقائيا",
        "undeletepagetext": "حُذفت {{PLURAL:$1||الصفحة التالية|الصفحتان التاليتان|$1 الصفحات التالية|ال$1 صفحة التالية}} ولكنها مازالت في الأرشيف ويمكن استرجاعها.\nقد يمسح الأرشيف دوريا.",
        "undelete-fieldset-title": "استرجاع المراجعات",
        "undeleteextrahelp": "لاسترجاع تاريخ الصفحة كاملا، اترك جميع الصناديق فارغة واضغط '''''{{int:undeletebtn}}'''''..\nللاسترجاع بشكل انتقائي، ضع علامة في الصناديق أمام المراجعات التي تريد استرجاعها، واضغط '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Ù\84Ù\85 ØªØ¤Ø±Ø´Ù\81 Ø£Ù\8a Ù\85راجعة|أرشÙ\81ت Ù\85راجعة Ù\88احدة|أرشÙ\81ت Ù\85راجعتاÙ\86|أرشÙ\81ت $1 Ù\85راجعات|أرشفت $1 مراجعة}}",
+       "undeleterevisions": "{{PLURAL:$1|Ù\84Ù\85 ØªØ­Ø°Ù\81 Ø£Ù\8a Ù\85راجعة|حذÙ\81ت Ù\85راجعة Ù\88احدة|حذÙ\81ت Ù\85راجعتاÙ\86|حذÙ\81ت $1 Ù\85راجعات|حذفت $1 مراجعة}}",
        "undeletehistory": "لو استرجعت الصفحة، كل المراجعات سيتم استرجاعها إلى التاريخ.\nلو كان قد تم إنشاء صفحة جديدة بالاسم نفسه بعد الحذف، المراجعات المسترجعة ستظهر في التاريخ السابق.",
        "undeleterevdel": "الاسترجاع لن يتم إذا كان سينتج عنه أن تكون المراجعة أعلى الصفحة أو الملف محذوفة جزئيا.\nفي مثل هذه الحالات، يجب عليك إظهار أحدث المراجعات المحذوفة.",
        "undeletehistorynoadmin": "هذه الصفحة تم حذفها.\nالسبب للحذف معروض في الملخص بالأسفل، إلى جانب تفاصيل المستخدمين الذين قاموا بالتعديل على هذه الصفحة قبل حذفها.\nنص المراجعات المحذوفة هذه متوفر فقط للإداريين.",
        "sp-contributions-uploads": "مرفوعات",
        "sp-contributions-logs": "سجلات",
        "sp-contributions-talk": "نقاش",
-       "sp-contributions-userrights": "صلاحيات المستخدم",
+       "sp-contributions-userrights": "إدارة ØµÙ\84احÙ\8aات Ø§Ù\84Ù\85ستخدÙ\85",
        "sp-contributions-blocked-notice": "هذا المستخدم ممنوع حاليا.\nإن آخر مدخلة في سجل المنع موجودة أدناه كمرجع:",
        "sp-contributions-blocked-notice-anon": "عنوان الأيبي هذا ممنوع حاليا.\nآخر مدخلة لسجل المنع معروضة هنا كمرجع:",
        "sp-contributions-search": "بحث عن مساهمات",
        "istemplate": "مضمن",
        "isimage": "وصلة ملف",
        "whatlinkshere-prev": "{{PLURAL:$1|السابق|ال$1 السابقة}}",
-       "whatlinkshere-next": "{{PLURAL:$1|القادمة|ال$1 القادمة}}",
+       "whatlinkshere-next": "{{PLURAL:$1|التالية|ال$1 التالية}}",
        "whatlinkshere-links": "وصلات",
        "whatlinkshere-hideredirs": "$1 التحويلات",
        "whatlinkshere-hidetrans": "$1 التضمينات",
        "thumbnail_image-failure-limit": "هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.",
        "import": "استيراد صفحات",
        "importinterwiki": "استورد من ويكي أخرى",
-       "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
+       "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد من الويكيات الأخرى يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
        "import-interwiki-sourcewiki": "الويكي المصدر:",
        "import-interwiki-sourcepage": "الصفحة المصدر:",
        "import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
        "import-interwiki-templates": "ضمن كل القوالب",
        "import-interwiki-submit": "استيراد",
+       "import-mapping-default": "استورد للمواقع القياسية",
        "import-mapping-namespace": "استورد إلى نطاق:",
+       "import-mapping-subpage": "استورد كصفحات فرعية للصفحة التالية:",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "من فضلك صدر الملف من الويكي المصدر باستخدام [[Special:Export|أداة التصدير]].\nاحفظها على حاسوبك ثم ارفعها هنا.",
        "importcantopen": "لم يمكن فتح ملف الاستيراد",
        "importbadinterwiki": "وصلة إنترويكي سيئة",
        "importsuccess": "الاستيراد انتهى!",
-       "importnosources": "لم يتم تعريف مصادر للاستيراد عبر الويكي وعمليات رفع التاريخ المباشرة معطلة.",
+       "importnosources": "لا ويكيات للاستيراد منها تم تعريفها وعمليات رفع التاريخ المباشرة معطلة.",
        "importnofile": "لم يتم رفع ملف استيراد.",
        "importuploaderrorsize": "رفع ملف الاستيراد فشل.\nالملف أكبر من حجم الرفع المسموح.",
        "importuploaderrorpartial": "فشل رفع ملف الاستيراد. لم يتم رفع الملف إلا جزئياً.",
        "spam_reverting": "استرجاع آخر نسخة ليس بها وصلات إلى $1",
        "spam_blanking": "كل النسخ احتوت على وصلات ل $1، إفراغ",
        "spam_deleting": "جميع النسخ تحوي رابطا إلى $1، يتم الحذف",
-       "simpleantispam-label": "اختبار ضد السبام.\n'''لا''' تملأ هذا!",
+       "simpleantispam-label": "اختبار ضد السبام.\n<strong>لا</strong> تملأ هذا!",
        "pageinfo-title": "المعلومات عن «$1»",
        "pageinfo-not-current": "عذرا، لا يمكن عرض تلك المعلومات للنسخ القديمة.",
        "pageinfo-header-basic": "المعلومات الأساسية",
        "pageinfo-robot-index": "مسموحة",
        "pageinfo-robot-noindex": "غير مسموحة",
        "pageinfo-watchers": "عدد المراقبين",
+       "pageinfo-visiting-watchers": "عدد مراقبي الصفحة الذين زاروا التعديلات الأخيرة",
        "pageinfo-few-watchers": "أقل من {{PLURAL:$1||مراقب واحد|مراقبين اثنين|$1 مراقبين|$1 مراقباً|$1 مراقب}}",
        "pageinfo-redirects-name": "عدد التحويلات إلى هذه الصفحة",
        "pageinfo-subpages-name": "الصفحات الفرعية لهذه الصفحة",
        "tags-active-yes": "نعم",
        "tags-active-no": "لا",
        "tags-source-extension": "يعرفه امتداد",
+       "tags-source-manual": "تم تطبيقه يدويا بواسطة المستخدمين والبوتات.",
+       "tags-source-none": "لم يعد قيد الاستخدام",
        "tags-edit": "عدل",
        "tags-delete": "احذف",
        "tags-activate": "نشط",
        "tags-activate-not-found": "الوسم \"$1\" غير موجود.",
        "tags-activate-submit": "تفعيل",
        "tags-deactivate-title": "عطل الوسم",
+       "tags-deactivate-question": "أنت على وشك تعطيل الوسم \"$1\".",
        "tags-deactivate-reason": "سبب",
        "tags-deactivate-not-allowed": "من غير الممكن تعطيل الوسم \"$1\".",
        "tags-deactivate-submit": "عطل",
+       "tags-apply-not-allowed-one": "السوم \"$1\" غير مسموح أن يتم تطبيقه يدويا.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن يتم تطبيقها يدويا: $1",
+       "tags-update-no-permission": "أنت لا تمتلك السماح لإضافة أو إزالة وسوم التغيير من المراجعات أو مدخلات السجل الفردية.",
+       "tags-update-add-not-allowed-one": "الوسم \"$1\" غير مسموح أن تتم إضافته يدويا.",
+       "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إضافتها يدويا: $1",
        "tags-update-remove-not-allowed-one": "من غير المسموح بإزالة وسم \"$1\".",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إزالتها يدويا: $1",
        "tags-edit-title": "تعديل الوسوم",
        "tags-edit-manage-link": "التحكم بالوسوم",
+       "tags-edit-revision-selected": "{{PLURAL:$1|مراجعة مختارة|مراجعات مختارة}} من [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|حدث سجل مختار|أحداث سجل مختارة}}:",
+       "tags-edit-revision-legend": "أضف أو أزل الوسوم من {{PLURAL:$1|هذه المراجعة|كل $1 المراجعات}}",
        "tags-edit-existing-tags": "الوسوم الموجودة:",
        "tags-edit-existing-tags-none": "\"لا وسوم\"",
        "tags-edit-new-tags": "وسوم جديدة:",
        "tags-edit-chosen-placeholder": "اختر بعض الوسوم",
        "tags-edit-chosen-no-results": "لا وسوم مطابقة",
        "tags-edit-reason": "السبب:",
+       "tags-edit-revision-submit": "طبق التغييرات ل{{PLURAL:$1|هذه المراجعة|$1 مراجعات}}",
+       "tags-edit-logentry-submit": "طبق التغييرات ل{{PLURAL:$1|مدخلة السجل هذه|$1 مدخلات السجل}}",
        "tags-edit-success": "طبقت التغييرات بنجاح.",
        "tags-edit-failure": "التغييرات لم تطبق: $1",
        "tags-edit-nooldid-title": "مراجعة هدف غير صالحة",
+       "tags-edit-none-selected": "من فضلك اختر على الأقل وسما واحدا للإضافة أو الإزالة.",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
        "htmlform-cloner-create": "إضافة المزيد",
        "htmlform-cloner-delete": "إزالة",
        "htmlform-cloner-required": "مطلوب قيمة واحدة على الأقل.",
+       "htmlform-title-badnamespace": "[[:$1]] ليس في نطاق \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" ليس عنوان صفحة يمكن إنشاؤه",
+       "htmlform-title-not-exists": "[[:$1]] غير موجود.",
+       "htmlform-user-not-exists": "<strong>$1</strong> غير موجود",
+       "htmlform-user-not-valid": "اسم المستخدم <strong>$1</strong> غير صالح.",
        "sqlite-has-fts": "$1 بدعم البحث في كامل النص",
        "sqlite-no-fts": "$1 بدون دعم البحث في كامل النص",
        "logentry-delete-delete": "{{GENDER:$2|حذف|حذفت}} $1 صفحة $3",
        "revdelete-restricted": "طبق الضوابط لمديري النظام",
        "revdelete-unrestricted": "أزال الضوابط لمديري النظام",
        "logentry-block-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|رفع منع}} {{GENDER:$4|$3}}",
        "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|استورد}} $3 بواسطة رفع ملف",
        "logentry-import-interwiki": "$1 {{GENDER:$2|استورد|استوردت}} $3 من ويكي أخرى",
        "logentry-merge-merge": "{{GENDER:$2|دمج|دمجت}} $1 $3 إلى $4 (المراجعات حتى $5).",
        "logentry-move-move": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4",
        "feedback-cancel": "إلغاء",
        "feedback-close": "تم",
        "feedback-external-bug-report-button": "أرسل تقرير علة تقنية",
+       "feedback-dialog-title": "أرسل تغذية راجعة",
        "feedback-error-title": "خطأ",
        "feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
        "feedback-error2": "خطأ: فشل في تحرير",
        "mediastatistics-header-archive": "صيغ مضغوطة",
        "json-warn-trailing-comma": "تمت إزالة {{PLURAL:$1|فاصلة انتهائية واحدة|فاصلتين انتهائيتين|$1 فاصلات انتهائية|$1 فاصلة انتهائية}} من JSON",
        "json-error-unknown": "وقعت مشكلة مع JSON. رسالة الخطأ: $1",
+       "json-error-depth": "عمق الستاك الأقصى تم تجاوزه",
+       "json-error-state-mismatch": "JSON غير صحيح أو غير مهيأ",
        "json-error-ctrl-char": "خطأ في محرف التحكم، ربما نتيجة سوء ترميزه.",
        "json-error-syntax": "خطأ صياغة",
        "json-error-utf8": "خطأ في تشكيل محارف UTF-8، ربما نتيجة سوء ترميزها.",
        "special-characters-title-endash": "واصلة قصيرة",
        "special-characters-title-emdash": "واصلة طويلة",
        "special-characters-title-minus": "علامة الطرح",
+       "mw-widgets-dateinput-no-date": "لا تاريخ تم اختياره",
        "mw-widgets-titleinput-description-new-page": "الصفحة غير موجودة بعد",
        "mw-widgets-titleinput-description-redirect": "تحويل إلى $1"
 }
index 5e55cf6..36e80bf 100644 (file)
@@ -97,6 +97,7 @@
        "actions": "Femün",
        "namespaces": "Üytun ñi wellin",
        "variants": "Kaleyelu",
+       "navigation-heading": "Chewngen",
        "errorpagetitle": "Welulkan",
        "returnto": "Amutun $1 püle.",
        "tagline": "{{SITENAME}} mew",
        "articlepage": "Adkintun trokiñdungu wülngiñ",
        "talk": "Nütramkawün",
        "views": "Adngelün",
-       "toolbox": "Küdawpeyüm",
+       "toolbox": "Küdzawpeyüm",
        "userpage": "Adkintun kellufe ñi wülngiñ",
        "projectpage": "Adkintun zeumanzugu wülngiñ",
        "imagepage": "Adkintun ad wülngiñ",
        "createaccountreason": "Dungu:",
        "mailmypassword": "Amulün we nülawe werküwe mew",
        "loginlanguagelabel": "Cezugun: $1",
+       "pt-login": "Konkülen",
        "resetpass-submit-cancel": "Katrüntukun",
        "bold_sample": "Kurükünualu wirin",
        "bold_tip": "Kurükünualu wirin",
        "withoutinterwiki-submit": "Pegelpe",
        "nbytes": "$1 {{PLURAL:$1 byte}}",
        "nmembers": "$1 {{PLURAL:$1|koneltulu}}",
-       "nviews": "$1 {{PLURAL:$1|pen|pen}}",
        "prefixindex": "Kom wülngiñ engu wüne konkülelu nemül",
        "shortpages": "Pichi pakina",
        "usercreated": "{{GENDER:$3|Dewmangey}} $1, $2 mew",
        "tooltip-pt-login": "Feypingey tami Konküleal, welu mülelay mi femael",
        "tooltip-pt-logout": "Tripan",
        "tooltip-ca-talk": "Ngütramkawün wülgiñ ñi zungu mew",
-       "tooltip-ca-edit": "Kümeelaymi tüfachi wülngiñ. Elmekeaymi wüne pen petu eltukawam.",
+       "tooltip-ca-edit": "Elkünufinge tüfachi dungun.",
        "tooltip-ca-addsection": "Llitun we trokiñ",
        "tooltip-ca-viewsource": "Nürüfkünungey tüfachi wülngiñ. Kimaymi chew küpan chi wirin",
        "tooltip-ca-history": "Tüfachi wülngiñ ñi rupachi malün",
        "tag-filter": "[[Special:Tags|Tag]] ñi chaytuwe:",
        "tags-edit": "Wirin",
        "htmlform-selectorother-other": "Kakelu",
-       "rightsnone": "chemnorume"
+       "rightsnone": "chemnorume",
+       "searchsuggest-search": "Kintun"
 }
index 48225ef..3b89d8b 100644 (file)
        "resetpass-wrong-oldpass": "klmṫ s-srr ḫaliyya wlla mo'aqata ma ṣalḫa-ċ.\nymkn ṫkon bddalṫiha bĝda wlla ṫlbti klmṫ srr mo'qaṫa jdida.",
        "resetpass-temp-password": "mot de passe moaqata",
        "passwordreset": "ĝawd klmṫ s-srr",
-       "passwordreset-legend": "ĝawd klmṫ s-srr",
        "passwordreset-disabled": "maymkn-ċ ṫĝawd klmṫ s-srr f-had l-wiki.",
        "passwordreset-username": "smiṫ l-mosṫĥdim:",
        "passwordreset-email": "ĝonwan l-email:",
        "summary-preview": "Prévizualizasyon dyal l-moleĥĥaṣ:",
        "subject-preview": "moĝayanat l-moḍoĝ/l-ĝonwan:",
        "blockedtitle": "had lmostakhdim tbloka",
-       "blockedtext": "'''smiṫ l-mosṫĥdim wlla ĝonwan l-IP ṫaĝk rah ṫbloka.'''\n\nlli blokak howa $1.\ns-sabab lli ĝtah howa ''$2''.\n\n* bda l-blok: $8\n* ġa ystala: $6\n* lli mqṣod b-lblok: $7\n\nymkn lik ṫṫaṣl b-$1 wlla ċi [[{{MediaWiki:Grouppage-sysop}}|idari]] aĥor baċ ṫnaqċ l-blok.\nma ymkn-likċ ṫĥddm l-ĥaṣṣiya ṫaĝ '{{MediaWiki:emailpage}}' ġir ila konti ĥṫariṫi ċi ĝonwan dl-email is f-[[Special:Preferences|ṫfḍilaṫ l-ḫisab]] ṫaĝk o-ma konti-ċ mbloki mn l-ĥdma bih.\nĝonwan l-IP ṫaĝk daba howa $3, o-lmoĝrrif d-lblok howa #$5.\nmli ṫkṫb ċi talab ĥaṣṣk ṫĝti fih gaĝ had ṫ-ṫafaṣil lli l-foq.",
-       "autoblockedtext": "ĝonwan l-IP ṫaĝk rah ṫbloka ṫilqa'iyyan ḫqqaċ ĥdm bih ċi waḫd aĥor blokah $1.\ns-sabab lli ĝtah howa\n\n:''$2''\n\n* bda l-blok: $8\n* ġa ystala: $6\n* lli mqṣod b-lblok: $7\n\nymkn lik ṫṫaṣl b-$1 wlla ċi [[{{MediaWiki:Grouppage-sysop}}|idari]] aĥor baċ ṫnaqċ l-blok.\n\nĥaṣṣk ṫĝrf billa ma ymkn-likċ ṫĥddm l-ĥaṣṣiya ṫaĝ '{{MediaWiki:emailpage}}' ġir ila konti ĥṫariṫi ċi ĝonwan dl-email is f-[[Special:Preferences|ṫfḍilaṫ l-ḫisab]] ṫaĝk o-ma konti-ċ mbloki mn l-ĥdma bih.\n\nĝonwan l-IP ṫaĝk daba howa $3, o-lmoĝrrif d-lblok howa #$5.\nmli ṫkṫb ċi talab ĥaṣṣk ṫĝti fih gaĝ had ṫ-ṫafaṣil lli l-foq.",
+       "blockedtext": "'''smiṫ l-mosṫĥdim wlla ĝonwan l-IP ṫaĝk rah ṫbloka.'''\n\nlli blokak howa $1.\ns-sabab lli ĝtah howa ''$2''.\n\n* bda l-blok: $8\n* ġa ystala: $6\n* lli mqṣod b-lblok: $7\n\nymkn lik ṫṫaṣl b-$1 wlla ċi [[{{MediaWiki:Grouppage-sysop}}|idari]] aĥor baċ ṫnaqċ l-blok.\nma ymkn-likċ ṫĥddm l-ĥaṣṣiya ṫaĝ '{{int:emailuser}}' ġir ila konti ĥṫariṫi ċi ĝonwan dl-email is f-[[Special:Preferences|ṫfḍilaṫ l-ḫisab]] ṫaĝk o-ma konti-ċ mbloki mn l-ĥdma bih.\nĝonwan l-IP ṫaĝk daba howa $3, o-lmoĝrrif d-lblok howa #$5.\nmli ṫkṫb ċi talab ĥaṣṣk ṫĝti fih gaĝ had ṫ-ṫafaṣil lli l-foq.",
+       "autoblockedtext": "ĝonwan l-IP ṫaĝk rah ṫbloka ṫilqa'iyyan ḫqqaċ ĥdm bih ċi waḫd aĥor blokah $1.\ns-sabab lli ĝtah howa\n\n:''$2''\n\n* bda l-blok: $8\n* ġa ystala: $6\n* lli mqṣod b-lblok: $7\n\nymkn lik ṫṫaṣl b-$1 wlla ċi [[{{MediaWiki:Grouppage-sysop}}|idari]] aĥor baċ ṫnaqċ l-blok.\n\nĥaṣṣk ṫĝrf billa ma ymkn-likċ ṫĥddm l-ĥaṣṣiya ṫaĝ '{{int:emailuser}}' ġir ila konti ĥṫariṫi ċi ĝonwan dl-email is f-[[Special:Preferences|ṫfḍilaṫ l-ḫisab]] ṫaĝk o-ma konti-ċ mbloki mn l-ĥdma bih.\n\nĝonwan l-IP ṫaĝk daba howa $3, o-lmoĝrrif d-lblok howa #$5.\nmli ṫkṫb ċi talab ĥaṣṣk ṫĝti fih gaĝ had ṫ-ṫafaṣil lli l-foq.",
        "blockednoreason": "ta sabab mamaatich",
        "whitelistedittext": "khassk  $1 bach taadl sfahi",
        "confirmedittext": "ĥaṣṣk ṫ'kkd l-ĝonwan dl-email dialk qbl ma ṫĝddl ṣ-ṣfaḫi.\ndĥĥel o-'kked l-ĝonwan dl-email dialk fṫ-[[Special:Preferences|ṫfḍilaṫ]] dialk.",
        "nlinks": "$1 {{PLURAL:$1|l-wṣla|dl-wṣlaṫ}}",
        "nmembers": "$1 {{PLURAL:$1|Ĝoḍw|Aĝḍa'}}",
        "nrevisions": "$1 {{PLURAL:$1|l-ṃoṛajaĝa|dl-ṃoṛajaĝaṫ}}",
-       "nviews": "$1 {{PLURAL:$1|l-ṃoċahada|dl-ṃoċahadaṫ}}",
        "nimagelinks": "mosṫĥmal f-$1 {{PLURAL:$1|ṣ-ṣfḫa|dṣ-ṣfaḫi}}",
        "ntransclusions": "mosṫĥmal f-$1 {{PLURAL:$1|ṣ-ṣfḫa|dṣ-ṣfaḫi}}",
        "lonelypages": "sfahi itima",
        "listgrouprights-removegroup-self": "hyyed mn l-ḫisab ṫaĝi {{PLURAL:$2|mjmoĝṫ|mjmoĝaṫ}}: $1",
        "mailnologin": "Ma kayenċ l-ĝonwan dyal l-morasil",
        "emailuser": "Ṣifet imayl le had l-mosṫeĥdim",
-       "emailpage": "sift email lhad lmostkhdim",
        "defemailsubject": "Imayl dyal {{SITENAME}}",
        "usermaildisabled": "L-Mosṫeḫdim ma mĥeddemċ l-imayl dyalo.",
        "usermaildisabledtext": "Ma ymken lekċ ṫṣifet ċi imayl le l-mosṫeĥdimin l-ĥrin fe had l-wiki",
index 709e4c6..301dcc8 100644 (file)
@@ -36,7 +36,7 @@
        "tog-shownumberswatching": "بين عدد اليوزرز المراقبين",
        "tog-oldsig": "الامضا دلوقتى:",
        "tog-fancysig": "امضا خام (من غير لينك أوتوماتيك)",
-       "tog-uselivepreview": "استخدم البروفه السريعه (تجريبي)",
+       "tog-uselivepreview": "استخدم البروفه السريعه",
        "tog-forceeditsummary": "نبهنى عند تدخيل ملخص للتعديل  فاضي",
        "tog-watchlisthideown": "خبى التعديلات بتاعتى من لستة المراقبة",
        "tog-watchlisthidebots": "خبى التعديلات بتاعة البوت من لستة المراقبة",
        "hidden-category-category": "تصنيفات مستخبية",
        "category-subcat-count": "{{PLURAL:$2| التصنيف دا فيه  التصنيف الفرعى الجاى بس.|التصنيف دا فيه {{PLURAL:$1|تصنيف فرعى|$1 تصنيف فرعى}}، من إجمالى $2.}}",
        "category-subcat-count-limited": " التصنيف دا فيه {{PLURAL:$1|تصنيف فرعي|$1 تصنيف فرعي}} كدا.",
-       "category-article-count": "{{PLURAL:$2| التصنيف دا فيه  الصفحة دى بس.|تحت {{PLURAL:$1|ملف|$1 ملف}} فى  التصنيف دا ، من إجمالى $2.}}",
+       "category-article-count": "{{PLURAL:$2|التصنيف دا فيه الصفحه دى بس.|{{PLURAL:$1|الصفحه دى|$1 الصفحات دول}} فى التصنيف دا، من إجمالى $2.}}",
        "category-article-count-limited": "تحت {{PLURAL:$1|صفحة|$1 صفحة}} فى التصنيف الحالى.",
        "category-file-count": "{{PLURAL:$2| التصنيف دا  فيه الملف الجاى دا بس.|تحت {{PLURAL:$1|ملف|$1 ملف}} فى  التصنيف دا، من إجمالى $2.}}",
        "category-file-count-limited": "تحت {{PLURAL:$1|ملف|$1 ملف}} فى التصنيف الحالى.",
        "permalink": "لينك دايم",
        "print": "اطبع",
        "view": "شوف",
+       "view-foreign": "اعرض على $1",
        "edit": "تعديل",
+       "edit-local": "تعديل الوصف المحلى",
        "create": "إبتدى",
+       "create-local": "ضيف وصف محلى",
        "editthispage": "عدل الصفحه دى",
        "create-this-page": "أنشيء الصفحه دى",
        "delete": "مسح",
        "deletethispage": "امسح الصفحه دى",
        "undeletethispage": "استرجاع الصفحه دى",
        "undelete_short": "استرجاع {{PLURAL:$1|تعديل واحد|تعديلان|$1 تعديلات|$1 تعديل|$1 تعديلا}}",
-       "viewdeleted_short": "{{PLURAL:$1|تعديل واحد ملغى|تعديلين ملغيين|$1 تعديلات ملغية|$1 تعديل ملغى|$1 تعديل ملغى}}",
+       "viewdeleted_short": "عرض {{PLURAL:$1||تعديل واحد ملغى|تعديلين ملغيين|$1 تعديلات  ملغيه}}",
        "protect": "حمايه",
        "protect_change": "غيّر",
        "protectthispage": "احمى الصفحه دى",
        "otherlanguages": "بلغات تانيه",
        "redirectedfrom": "(تحويل من $1)",
        "redirectpagesub": "صفحة تحويل",
+       "redirectto": "تحويل ل",
        "lastmodifiedat": "الصفحه دى اتعدلت اخر مره فى $1,‏ $2.",
        "viewcount": "الصفحة دى اتدخل عليها{{PLURAL:$1|مرة واحدة|مرتين|$1 مرات|$1 مرة}}.",
        "protectedpage": "صفحه محميه",
        "jumptonavigation": "استكشاف",
        "jumptosearch": "تدوير",
        "view-pool-error": "متأسفين, السيرفرات عليها حمل كبير دلوقتى.\nفى يوزرات كتير قوى بيحاولو يشوفو الصفحه دى.\nلو سمحت تستنا شويه قبل ما تحاول تستعرض الصفحه دى من تانى.\n\n$1",
+       "generic-pool-error": "متأسفين, السيرفرات عليها حمل كبير دلوقتى.\nفى يوزرات كتير قوى بيحاولو يشوفو الصفحه دى.\nلو سمحت تستنا شويه قبل ما تحاول تستعرض الصفحه دى من تانى.",
        "pool-timeout": "انتهاء الانتظار للقفل",
        "pool-queuefull": "طابور الانتخاب مليان",
        "pool-errorunknown": "غلط مش معروف",
        "disclaimers": "تنازل عن مسئوليه",
        "disclaimerpage": "Project:تنازل عن مسئوليه عمومى",
        "edithelp": "مساعده فى التعديل",
+       "helppage-top-gethelp": "مساعده",
        "mainpage": "الصفحه الرئيسيه",
        "mainpage-description": "الصفحه الرئيسيه",
        "policy-url": "Project:سياسة",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|عندك}} $1 من {{PLURAL:${{PLURAL:$3|}}3|يوزر واحد|يوزر واحد|اتنين يوزر |$3 مستخدمين|$3 يوزر}} ($2).",
        "youhavenewmessagesmanyusers": "عندك $1 من يوزرات كتير  ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|رساله جديده|999=رسايل جديده}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|تعديل|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديل}}",
+       "newmessagesdifflinkplural": "أحدث {{PLURAL:$1|تغيير|999=تغييرات}}",
        "youhavenewmessagesmulti": "عندك ميسيدج جديدة فى $1",
        "editsection": "تعديل",
        "editold": "تعديل",
        "hidetoc": "تخبية",
        "collapsible-collapse": "خبى",
        "collapsible-expand": "اتوسع",
+       "confirmable-confirm": "انت متأكد{{GENDER:$1||ه}}؟",
+       "confirmable-yes": "ايوه",
+       "confirmable-no": "لا",
        "thisisdeleted": "عرض او استرجاع $1؟",
        "viewdeleted": "عرض $1؟",
        "restorelink": "{{PLURAL:$1|تعديل واحد ملغي|تعديلين ملغيين|$1 تعديلات ملغية|$1 تعديل ملغي|$1 تعديل ملغي}}",
        "readonly_lag": "قاعدة البيانات (الـ database) اتقفلت اوتوماتيكى علشان تقدر السيرڤرات الـ slave تلحق السيرڤر الـ master",
        "internalerror": "غلط جوّانى",
        "internalerror_info": "غلط جوّانى: $1",
+       "internalerror-fatal-exception": "استثناء مميت من النوع \"$1\"",
        "filecopyerror": "ما نفع ش  يتنسخ الفايل \"$1\" لـ \"$2\".",
        "filerenameerror": "ما نفع ش يتغير اسم الفايل \"$1\" لـ \"$2\".",
        "filedeleteerror": "ما نفع ش يتمسح الفايل \"$1\".",
        "actionthrottled": "العمليه دى اتزنقت",
        "actionthrottledtext": "علشان نمنع ال سبام ،أنت ممنوع تعمل  الفعل دا عدد كبير من المرات فى فترة زمنية قصيرة، و انت ا تجاوزت  الحد دا . لو سمحت تحاول مرة ثانية بعد دقائق.",
        "protectedpagetext": "الصفحة دى اتحمت من التعديل.",
-       "viewsourcetext": "ممكن تشوف وتنسخ مصدر  الصفحه دى:",
+       "viewsourcetext": "ممكن تشوف وتنسخ مصدر الصفحه دى",
        "protectedinterface": "الصفحة دى هى اللى بتوفر نص الواجهة بتاعة البرنامج،وهى مقفولة لمنع التخريب.\nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
-       "editinginterface": "'''تحذير''': أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. \nالتغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. \nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
-       "cascadeprotected": "الصفحة دى محمية من التعديل، بسبب انها مدمجة فى {{PLURAL:$1|الصفحة|الصفحات}} دي، اللى مستعمل فيها خاصية \"حماية الصفحات المدمجة\" :\n$2",
+       "editinginterface": "<strong>تحذير</strong> : أنت بتعدل صفحة بتستخدم فى الواجهة النصية  بتاعة البرنامج. \nالتغييرات فى الصفحة دى ها تأثر على مظهر واجهة اليوزر لليوزرز التانيين. \nعلشان إضافة أو تغيير الترجمات لجميع مشاريع الويكي،  لو سمحت روح على [//translatewiki.net/ translatewiki.net]، مشروع ترجمة ميدياويكى",
+       "cascadeprotected": "اÙ\84صÙ\81حة Ø¯Ù\89 Ù\85Ø­Ù\85Ù\8aØ© Ù\85Ù\86 Ø§Ù\84تعدÙ\8aÙ\84Ø\8c Ø¨Ø³Ø¨Ø¨ Ø§Ù\86Ù\87ا Ù\85دÙ\85جة Ù\81Ù\89 {{PLURAL:$1|اÙ\84صÙ\81حة|اÙ\84صÙ\81حتÙ\8aÙ\86|اÙ\84صÙ\81حات}} Ø¯Ù\8aØ\8c Ø§Ù\84Ù\84Ù\89 Ù\85ستعÙ\85Ù\84 Ù\81Ù\8aÙ\87ا Ø®Ø§ØµÙ\8aØ© \"Ø­Ù\85اÙ\8aØ© Ø§Ù\84صÙ\81حات Ø§Ù\84Ù\85دÙ\85جة\" :\n$2",
        "namespaceprotected": "ما عندكش صلاحية تعديل الصفحات  اللى فى نطاق '''$1'''.",
        "ns-specialprotected": "الصفحات المخصوصة مش ممكن تعديلها.",
        "titleprotected": "العنوان دا محمى من الإنشاء بـ[[User:$1|$1]]. السبب هو ''$2''.",
        "welcomecreation-msg": "اتفتحلك حساب.\nلو تحب ممكن تغير [[Special:Preferences|تفضيلاتك ف {{SITENAME}}]].",
        "yourname": "اليوزرنيم:",
        "userlogin-yourname": "اسم اليوزر",
+       "userlogin-yourname-ph": "إكتب اسم اليوزر بتاعك:",
        "createacct-another-username-ph": "إكتب اسم يوزر:",
        "yourpassword": "الباسوورد:",
+       "userlogin-yourpassword": "الباسورد:",
        "yourpasswordagain": "اكتب الباسورد تاني:",
+       "createacct-yourpasswordagain": "أكد كلمه السر",
        "remembermypassword": " (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا",
        "yourdomainname": "النطاق بتاعك:",
        "externaldberror": "يا إما فى حاجة غلط فى الدخول على قاعدة البيانات الخارجية أو انت مش مسموح لك تعمل تحديث لحسابك الخارجي.",
        "logout": "خروج",
        "userlogout": "خروج",
        "notloggedin": "انت مش مسجل دخولك",
+       "userlogin-noaccount": "معندكش حساب؟",
+       "userlogin-joinproject": "انضم ل {{SITENAME}}",
        "nologin": "معندكش حساب؟ '''$1'''.",
        "nologinlink": "افتح حساب",
        "createaccount": "افتح حساب",
        "gotaccount": "عندك حساب؟ '''$1'''.",
        "gotaccountlink": "دخول",
        "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
+       "userlogin-helplink2": "مساعده ف الدخول",
+       "createacct-email-ph": "أكتب عنوان الإيميل بتاعك",
        "createaccountmail": "استخدم باسورد مؤقته و إبعتها ع الايميل المحدد ده",
        "createaccountreason": "السبب:",
+       "createacct-reason": "سبب:",
+       "createacct-submit": "افتح حسابك",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|تعديل|تعديلات}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحه|صفحات}}",
        "badretype": "كلمتين السر اللى  كتبتهم مش  زى بعضهم",
        "userexists": "اسم اليوزر اللى كتبته بيستعمله يوزر غيرك.\nاكتت اسم يوزر تانى.",
        "loginerror": "غلط فى الدخول",
        "createaccount-text": "فى واحد فتح حساب باسم الايمل بتاعك على {{SITENAME}} ($4) بالاسم \"$2\"، وبباسورد \"$3\". لازم تسجل دخولك دلوقتى و تغير الباسورد بتاعتك.\n\nلو سمحت تتجاهل الرسالة دى اذا الحساب دا اتفتحلك بالغلط.",
        "login-throttled": "انت عملت  محاولات لوجين كتيره  ع الحساب ده.\nمن فضلك استنى $1 قبل المحاولة مرة تانيه.",
        "loginlanguagelabel": "اللغة: $1",
+       "pt-login": "دخول",
+       "pt-login-button": "دخول",
+       "pt-createaccount": "افتح حساب",
+       "pt-userlogout": "خروج",
        "changepassword": "غير الباسورد",
-       "resetpass_announce": "اتسجل دخولك دلوقتى بالكود اللى اتبعتلك فى الايميل. علشان تخلص عملية الدخول ،لازم تعملك باسورد جديدة هنا:",
+       "resetpass_announce": " علشان تخلص عملية  تسجيل الدخول ،لازم تعملك باسورد جديده:",
        "resetpass_text": "<!-- أضف نصا هنا -->",
        "resetpass_header": "غيّر الباسورد بتاعة الحساب",
        "oldpassword": "الباسورد القديمة:",
        "retypenew": "اكتب الباسورد الجديده تانى:",
        "resetpass_submit": "اظبط الباسورد و ادخل",
        "changepassword-success": "الباسورد بتاعتك اتغيرت بنجاح!",
+       "changepassword-throttled": "انت عملت  محاولات لوجين كتيره  ع الحساب ده.\nمن فضلك استنى $1 قبل المحاولة مرة تانيه.",
        "resetpass_forbidden": "مش ممكن تغيير الباسورد",
        "resetpass-no-info": "لازم تسجل دخولك علشان تقدر توصل للصفحة دى على طول.",
        "resetpass-submit-loggedin": "غير الباسورد",
        "preview": "بروفه",
        "showpreview": "عرض البروفه",
        "showdiff": "بيين التعديلات",
-       "anoneditwarning": "'''تحذير:''' انت ما عملتش لوجين.\nعنوان الاى  بى  بتاعك هايتسجل فى تاريخ الصفحه .",
+       "anoneditwarning": "<strong>تحذير:'</strong> انت ما عملتش لوجين. عنوان الاى  بى  بتاعك هايتسجل ف تاريخ الصفحه. لو  <strong>[$1 عملت لوجين ]</strong> او <strong>[$2 فتحت حساب ]</strong>,   اليوزرنيم بتاعك هايتسجل ف تاريخ الصفحه.",
        "missingsummary": "'''خد بالك:''' انت ما كتبتش ملخص للتعديل.\nلو دوست على سييڤ الصفحه مرة تانية التعديل بتاعك ح يتحفظ من غير ملخص.",
        "missingcommenttext": "لو سمحت اكتب تعليق تحت.",
        "missingcommentheader": "'''.خد بالك:''' انت ما كتبتش عنوان\\موضوع للتعليق دا\nلو دوست على {{int:savearticle}} مرة تانيه، تعليقك ح يتحفظ من غير عنوان.",
        "session_fail_preview_html": "'''ماقدرناش نعالج تعديلك بسبب ضياع بيانات الجلسة.'''\n\n''لأن {{SITENAME}} بها HTML هل الخام شغاله، البروفه مخفيه كاحتياط ضد هجمات الجافا سكريبت.''\n\n'''إذا كانت دى محاولة تعديل صادقه، من فضلك حاول مرة تانيه. إذا كانت لسه مش شغاله، حاول [[Special:UserLogout|تسجيل الخروج]] و تسجيل الدخول من جديد.'''",
        "token_suffix_mismatch": "'''تعديلك اترفض لأن عميلك غلط فى علامات الترقيم\nفى نص التعديل. التعديل اترفض علشان ما يبوظش نص المقالة.\nدا ساعات بيحصل لما تستعمل خدمة بروكسى مجهولة بايظة أساسها الويب.'''",
        "editing": "تعديل $1",
+       "creating": "إنشاء «$1»",
        "editingsection": "تعديل $1 (جزء)",
        "editingcomment": "تعديل $1 (قسم جديد)",
        "editconflict": "تضارب فى التحرير: $1",
        "semiprotectedpagewarning": "'''ملاحظه:''' الصفحه دى اتقفلت بطريقه تخلّى اليوزرات المتسجلين بس هما اللى يقدرو يعدّلوها.\nاخر سجل محطوط تحت علشان المراجعه:",
        "cascadeprotectedwarning": "<strong>تحذير: الصفحة دى اتقفلت بطريقة تخلى اليوزرز السيوبات بس هم اللى يقدرو يعدلوها، ودا علشان هى مدموجة فى {{PLURAL:$1|الصفحة|الصفحات}} التالية واللى اتعملها حمتية بخاصية \"حماية الصفحات المدموجة\":</strong>",
        "titleprotectedwarning": "'''تحذير: الصفحه دى اتحمت بطريقه تخلّى [[Special:ListGroupRights|حقوق متحدده]] لازم تحتاجها علشان تعمل الصفحه.'''\nاخر سجل محطوط تحت علشان المراجعه:",
-       "templatesused": "{{PLURAL:$1|القالب المستعمل |القوالب المستعمله }}ا فى الصفحه دى:",
+       "templatesused": "{{PLURAL:$1|القالب المستعمل |القوالب المستعمله }} ف الصفحه دى:",
        "templatesusedpreview": "{{PLURAL:$1|القالب المستعمل |القوالب المستعمله}} فى البروفه دى",
        "templatesusedsection": "{{PLURAL:$1|القالب|القوالب}} اللى بتستخدم فى القسم دا:",
        "template-protected": "(حمايه كامله)",
        "currentrev": "النسخه دلوقتى",
        "currentrev-asof": "المراجعة الحالية بتاريخ $1",
        "revisionasof": "تعديلات من $1",
-       "revision-info": "نسخه $1 بواسطة $2",
+       "revision-info": "نسخة $1 ل {{GENDER:$6|$2}}$7",
        "previousrevision": "←نسخه اقدم",
        "nextrevision": "نسخه احدث→",
        "currentrevisionlink": "النسخه دلوقتى",
        "revertmerge": "استرجاع الدمج",
        "mergelogpagetext": "فى تحت لستة بأحدث عمليات الدمج لتاريخ صفحة فى التانية.",
        "history-title": " «$1»: تاريخ التعديل",
+       "difference-title": "«$1»: الفرق بين النسختين",
        "difference-multipage": "(الفرق بين الصفحتين)",
        "lineno": "سطر $1:",
        "compareselectedversions": "قارن بين النسختين المختارتين",
        "showhideselectedversions": "عرض/تخبية المراجعات المختاره.",
        "editundo": "استرجاع",
+       "diff-multi-sameuser": "({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}}  بواسطة {{PLURAL:|يوزر واحد |يوزرات}}  مش معروضه)",
        "diff-multi-manyusers": "({{PLURAL:$1|نسخه واحده متوسطه|$1 نسخ متوسطه}} by {{PLURAL:$2|يوزر واحد |$2 يوزرات}}  مش معروضه)",
        "searchresults": "نتايج التدوير",
        "searchresults-title": "نتايج التدوير على \"$1\"",
        "shown-title": "اعرض $1 {{PLURAL:$1|نتيجه|نتايج}} فى كل صفحه",
        "viewprevnext": "شوف ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''فيه صفحه اسمها \"[[:$1]]\" على الويكى ده.''' {{PLURAL:$2|0=|بص كمان على نتايج البحث التانيه.}}",
-       "searchmenu-new": "'''ابتدى الصفحه \"[[:$1]]\" ع الويكى دا!''' {{PLURAL:$2|0=|بص كمان على الصفحه اللى لقيناها من بحثك.|بص كمان على نتايج البحث اللى لقيناها.}}",
+       "searchmenu-new": "<strong>ابتدى الصفحه \"[[:$1]]\" ع الويكى دا!</strong>  {{PLURAL:$2|0=|بص كمان على الصفحه اللى لقيناها من تدويرك.|بص كمان على نتايج التدوير.}}",
        "searchprofile-articles": "صفحات محتوى",
        "searchprofile-images": "مالتيميديا",
        "searchprofile-everything": "كل شىء",
        "searchrelated": "مرتبطه",
        "searchall": "الكل",
        "showingresults": "القائمة دى بتعرض {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} من أول  رقم '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|النتايج <strong>$1</strong> من <strong>$3</strong>|النتايج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
        "powersearch-legend": "تدوير متقدم",
        "powersearch-ns": "تدوير فى اسم المساحه:",
        "action-userrights-interwiki": "تعديل صلاحيات اليوزر لليوزرز فى الويكيات التانية",
        "action-siteadmin": "غلق أو رفع غلق قاعدة البيانات",
        "nchanges": "{{PLURAL:$1|تعديل|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديل}}",
+       "enhancedrc-history": "تاريخ",
        "recentchanges": "اخر التعديلات",
        "recentchanges-legend": "اختيارات اخر التعديلات",
        "recentchanges-summary": "تابع آخر التغييرات فى الويكى على الصفحة دى.",
        "recentchanges-label-minor": "ده تعديل صغير",
        "recentchanges-label-bot": "التعديل ده عمله بوت",
        "recentchanges-label-unpatrolled": "التعديل ده مإتراجعش لسه",
+       "recentchanges-legend-heading": "شرح",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بص كمان على [[Special:NewPages|قايمه الصفحات الجديده]])",
        "rcnotefrom": "دى التعديلات من '''$2''' (ل '''$1''' معروضه).",
        "rclistfrom": "اظهر التعديلات بدايه من $3 $2",
        "rcshowhideminor": "$1 تعديلات صغيره",
+       "rcshowhideminor-show": "اعرض",
+       "rcshowhideminor-hide": "تخبية",
        "rcshowhidebots": "$1 البوتات",
+       "rcshowhidebots-show": "عرض",
+       "rcshowhidebots-hide": "تخبية",
        "rcshowhideliu": "$1 اليوزرز المتسجلين",
+       "rcshowhideliu-hide": "تخبية",
        "rcshowhideanons": "$1 اليوزرز المجهولين",
+       "rcshowhideanons-show": "عرض",
+       "rcshowhideanons-hide": "تخبية",
        "rcshowhidepatr": "$1 التعديلات المتراجعه",
        "rcshowhidemine": "$1 تعديلاتى",
+       "rcshowhidemine-show": "اعرض",
+       "rcshowhidemine-hide": "تخبية",
        "rclinks": "بيين اخر $1 تعديل فى اخر $2 يوم، $3",
        "diff": "التغيير",
        "hist": "تاريخ",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1| يوزر مراقب|يوزر مراقب}}]",
        "rc_categories": "حصر لتصنيفات (مفصولة برمز \"|\")",
        "rc_categories_any": "أى",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بايت|بايتس}} بعد التغيير",
        "newsectionsummary": "/* $1 */ قسم جديد",
        "rc-enhanced-expand": "[اعرض التفاصيل]",
        "rc-enhanced-hide": "إخفاء التفاصيل",
        "unusedtemplateswlh": "وصلات  تانيه",
        "randompage": "صفحة عشوائيه",
        "randompage-nopages": "مافيش صفحات فى النطاق {{PLURAL:$2|namespace|namespaces}}: $1.",
+       "randomincategory-submit": "اذهب",
        "randomredirect": "تحويله عشوائيه",
        "randomredirect-nopages": "مافيش تحويلات فى النطاق\"$1\".",
        "statistics": "احصائيات",
        "nlinks": "{{PLURAL:$1|وصله واحده|وصلتين|$1 وصلات|$1 وصله}}",
        "nmembers": "$1 {{PLURAL:$1|عضو|اعضاء}}",
        "nrevisions": "{{PLURAL:$1|تعديل وحيد|تعديلين|$1 تعديلات|$1 تعديل|$1}}",
-       "nviews": "{{PLURAL:$1|مشاهدة واحدة|مشاهدتين|$1 مشاهدات|$1 مشاهدة}}",
        "specialpage-empty": "مافيش نتايج للتقرير دا.",
        "lonelypages": "صفحات يتيمه",
        "lonelypagestext": "الصفحات دى ماعندهاش لينكات أو تضمينات من الصفحات التانية فى {{SITENAME}}.",
        "suppress": "أوفرسايت",
        "booksources": "مصادر من كتب",
        "booksources-search-legend": "التدوير على مصادر الكتب",
+       "booksources-search": "تدوير",
        "booksources-text": "فى تحت لستة بوصلات لمواقع تانية بتبيع الكتب الجديدة والمستعملة، كمان ممكن تلاقى معلومات إضافية عن الكتب اللى يتدور عليها :",
        "booksources-invalid-isbn": "رقم الـ ISBN اللى كتبته شكله مش صحيح؛ اتإكد من الغلطات بتاعة النسخ من المصدر الاصلى.",
        "specialloguserlabel": "اليوزر:",
        "linksearch-pat": "نظام التدوير:",
        "linksearch-ns": "النطاق:",
        "linksearch-ok": "تدوير",
-       "linksearch-text": "الكروت الخاصه زى \"*.wikipedia.org\" ممكن تستخدم.\nمحتاجه على الاقل لدومين مستوى أعلى، زى \"*.org\".<br />\n{{PLURAL:$2|البروتوكول المدعوم|البروتوكولات المدعومه}}: <code>$1</code> (الافتراضى http:// لو ما اتحددش بروتوكول).",
+       "linksearch-text": "الكروت الخاصه زى \"*.wikipedia.org\" ممكن تستخدم.\nمحتاجه على الاقل لدومين مستوى أعلى، زى \"*.org\".<br />\n{{PLURAL:$2|البروتوكول المدعوم|البروتوكولات المدعومه}}: $1 (الافتراضى http:// لو ما اتحددش بروتوكول).",
        "linksearch-line": "$1 موصوله من $2",
        "linksearch-error": "الكروت الخاصة ممكن تبان بس  فى بداية اسم المضيف",
        "listusersfrom": "عرض اليوزرز من أول:",
        "mailnologin": "مافيش عنوان نبعت عليه",
        "mailnologintext": "لازم تعمل [[Special:UserLogin|تسجيل الدخول]] و تدخل ايميل صحيح فى صفحة [[Special:Preferences|التفضيلات]] علشان تقدر تبعت ايميلات لليوزرز التانيين.",
        "emailuser": "ابعت ايميل لليوزر دا",
-       "emailpage": "ابعت ايميل لليوزر ده",
        "emailpagetext": "ممكن تستعمل الاستمارة اللى تحت دى عشان تيعت ايميل {{GENDER:$1|لليوزر}} دا.\nعنوان الايميل اللى كتبته فى [[Special:Preferences|التفضيلات بتاعتك]] ح يظهر على انه عنوان الاستمارة، و بكدة اللى حيستقبله ح يقدر يرد على الايميل.",
        "defemailsubject": "ايميل {{SITENAME}} من اليوزر \"$1\"",
        "noemailtitle": "مافيش  عنوان ايميل",
        "delete-warning-toobig": "الصفحة دى ليها تاريخ تعديل كبير، أكتر من $1 {{PLURAL:$1|مراجعة|مراجعة}}.\nممكن مسحها يعمل اضطراب  فى عمليات قاعدة البيانات فى {{SITENAME}}؛\nاستمر بس خد بالك.",
        "rollback": "إرجع فى التعديلات",
        "rollbacklink": "ترجيع",
+       "rollbacklinkcount": "استرجع {{PLURAL:$1|لا تعديلات|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|تعديل}}",
        "rollbackfailed": "الترجيع ما نفعش",
        "cantrollback": "ماقدرناش نرجع فى التعديل؛ آخر مساهم هوه الوحيد اللى ساهم فى الصفحة دي.",
        "alreadyrolled": "ماقدرناش نرجع التعديل الاخير لـ [[:$1]] بتاع [[User:$2|$2]] ([[User talk:$2|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nفى واحد تانى عدل الصفحه او عمل استرجاع قبل كده.\n\nاخر تعديل للصفحه دى عمله [[User:$3|$3]] ([[User talk:$3|نقاش]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "tooltip-pt-mycontris": "ليستة تعديلاتك",
        "tooltip-pt-login": "يستحسن تسجل دخولك; لكن, ده مش اجبارى",
        "tooltip-pt-logout": "خروج",
+       "tooltip-pt-createaccount": "نشجعك على عمل حساب وتسجيل دخولك; لكنه مش  ضروري",
        "tooltip-ca-talk": "مناقشة صفحة الموضوع",
-       "tooltip-ca-edit": "ممكن تعدل الصفحه دى.\nبس لو سمحت استعمل زرار الپروڤه قبل ما تسييڤها.",
+       "tooltip-ca-edit": "عدل الصفحه دى",
        "tooltip-ca-addsection": "ابتدى قسم جديد",
        "tooltip-ca-viewsource": "الصفحه دى محميه.\nممكن تشوف مصدرها.",
        "tooltip-ca-history": "نسخ قديمه من الصفحه دى",
        "tooltip-ca-nstab-main": "اعرض صفحة المحتوى",
        "tooltip-ca-nstab-user": "اعرض صفحة اليوزر",
        "tooltip-ca-nstab-media": "اعرض صفحة الميديا",
-       "tooltip-ca-nstab-special": "دى صفحه مخصوصه, ما تقدر ش تعدل الصفحه نفسها",
+       "tooltip-ca-nstab-special": "دى صفحه مخصوصه, ما تقدرش تعدلها",
        "tooltip-ca-nstab-project": "اعرض صفحة المشروع",
        "tooltip-ca-nstab-image": "اعرض صفحة الفايل",
        "tooltip-ca-nstab-mediawiki": "اعرض رسالة النظام",
        "spambot_username": "تنظيف سبام ميدياويكى",
        "spam_reverting": "ترجيع آخر نسخة مافيهاش لينكات لـ $1",
        "spam_blanking": "كل النسخ فيها لينكات ل $1، فضيها",
-       "simpleantispam-label": "اختبار انتي-سبام.\n'''ماتعبيش''' دا!",
+       "simpleantispam-label": "اختبار انتيسبام.\nاكتب <strong>ماتكتبش</strong> دا!",
+       "pageinfo-toolboxlink": "معلومات عن الصفحه",
        "markaspatrolleddiff": "علم عليها انها متراجعة",
        "markaspatrolledtext": "علم على المقاله دى إنها متراجعة",
        "markedaspatrolled": "اتعلم عليها متراجعة",
        "file-nohires": "مافيش  ريزوليوشن اعلى متوفر.",
        "svg-long-desc": "ملف SVG، اساسا $1 × $2 بكسل، حجم الملف: $3",
        "show-big-image": "الصوره الاصليه",
+       "show-big-image-other": "{{PLURAL:$2||البعد التانى|البعدان التانيين|الأبعاد التانيه}}: $1.",
+       "show-big-image-size": "$1 × $2 بكسل",
        "file-info-gif-looped": "ملفوف",
        "file-info-gif-frames": "$1 {{PLURAL:$1|برواز|براويز}}",
        "newimages": "جاليرى الصور الجديده",
        "tags": "وسوم التغيير الصحيحة",
        "tag-filter": "فلتر [[Special:Tags|الوسم]]:",
        "tag-filter-submit": "فلتر",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمين|وسوم}}]]: $2)",
        "tags-title": "وسوم",
        "tags-intro": "الصفحه دى فيها ليستة الوسوم اللى ممكن البرنامج يعلم عى التعديل بيها، و معانيهم",
        "tags-tag": "اسم الوسم",
        "htmlform-submit": "تقديم",
        "htmlform-reset": "الرجوع فى التغييرات",
        "htmlform-selectorother-other": "تانيين",
+       "logentry-delete-delete": "{{GENDER:$2|مسح|مسحت}} $1 صفحة $3",
        "revdelete-restricted": "طبق التعليمات على السيسوبات",
        "revdelete-unrestricted": "شيل الضوابط من على السيسوبات",
+       "logentry-newusers-create": "تم فتح حساب {{GENDER:$2|اليوزر|اليوزره}} $1",
+       "logentry-upload-upload": " {{GENDER:$2|رفع|اترفعت}} $1 $3",
        "rightsnone": "(فاضى)",
        "revdelete-summary": "ملخص التعديل",
        "searchsuggest-search": "تدوير",
index 4563057..ec213a1 100644 (file)
        "jun": "জুন",
        "jul": "জুলাই",
        "aug": "আগষ্ট",
-       "sep": "ছেপ্টেম্বৰ:",
-       "oct": "অক্টোবৰ:",
+       "sep": "ছেপ্টেম্বৰ",
+       "oct": "অক্টোবৰ",
        "nov": "নৱেম্বৰ:",
-       "dec": "ডিচেম্বৰ:",
+       "dec": "ডিচেম্বৰ",
        "january-date": "জানুৱাৰী $1",
        "february-date": "ফেব্ৰুৱাৰী $1",
        "march-date": "মাৰ্চ $1",
        "hidden-category-category": "অদৃশ্য শ্ৰেণীসমূহ",
        "category-subcat-count": "{{PLURAL:$2|এই শ্ৰেণীত নিম্নলিখিত উপশ্ৰেণীসমূহ আছে। মুঠ $2টা উপশ্ৰেণীৰ ভিতৰত এই শ্ৰেণীত নিম্নলিখিত {{PLURAL:$1|এটা উপশ্ৰেণী|$1 টা উপশ্ৰেণী}} আছে।}}",
        "category-subcat-count-limited": "এই শ্ৰেণীত নিম্নলিখিত {{PLURAL:$1|টা উপশ্ৰেণী আছে|$1টা উপশ্ৰেণী আছে}}।",
-       "category-article-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল à¦¤à¦²à¦¤ à¦¦à¦¿à¦¯à¦¼à¦¾ à¦ªà§\83ষà§\8dঠাহà§\87 à¦\86à¦\9bà§\87। à¦®à§\81ঠ $2 à¦\96নৰ à¦­à¦¿à¦¤à§°à¦¤ à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦¤à¦²à§° {{PLURAL:$1|à¦\8fà¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87}}।}}",
+       "category-article-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল à¦¤à¦²à¦¤ à¦¦à§\87à¦\96à§\81à¦\93ৱা à¦ªà§\83ষà§\8dঠাহà§\87 à¦\86à¦\9bà§\87।| à¦®à§\81ঠ $2 à¦\9fাৰ à¦­à¦¿à¦¤à§°à¦¤ à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦¤à¦²à§° {{PLURAL:$1|à¦\8fà¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87|$1 à¦\9fা à¦ªà§\83ষà§\8dঠা à¦\86à¦\9bà§\87।}}}}",
        "category-article-count-limited": "এই {{PLURAL:$1|পৃষ্ঠা|$1 পৃষ্ঠাসমূহ}} সাম্প্ৰতিক শ্ৰেণীত আছে ।",
-       "category-file-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87বল তলত দিয়া ফাইলটোহে আছে। মুঠ $2টাৰ ভিতৰত এই শ্ৰেণীটোত তলৰ {{PLURAL:$1|এটা ফাইল|$1 টা ফাইল}} আছে।}}",
+       "category-file-count": "{{PLURAL:$2|à¦\8fà¦\87 à¦¶à§\8dৰà§\87ণà§\80à¦\9fà§\8bত à¦\95à§\87ৱল তলত দিয়া ফাইলটোহে আছে। মুঠ $2টাৰ ভিতৰত এই শ্ৰেণীটোত তলৰ {{PLURAL:$1|এটা ফাইল|$1 টা ফাইল}} আছে।}}",
        "category-file-count-limited": "তলৰ {{PLURAL:$1|ফাইলটো|$1 ফাইলসমূহ}} সাম্প্ৰতিক শ্ৰেণীত আছে।",
        "listingcontinuesabbrev": "আগলৈ",
        "index-category": "সূচীকৃত পৃষ্ঠাসমূহ",
        "readonly_lag": "তথ্যকোষ স্বয়ংক্ৰিয়ভাৱে বন্ধ হৈছে যাতে দ্বিতীয় শ্ৰেণীৰ তথ্যকোষৰ চাৰ্ভাৰ প্ৰধান তথ্যকোষৰ চাৰ্ভাৰৰ অৱস্থালৈ আহিব পাৰে ।",
        "internalerror": "আভ্যন্তৰীণ ত্ৰুটি",
        "internalerror_info": "আভ্যন্তৰীণ ত্ৰুটি: $1",
+       "internalerror-fatal-exception": " \"$1\" ধৰণৰ মাৰাত্মক ব্যতিক্ৰম",
        "filecopyerror": "\"$1\" ফাইলটো \"$2\"লৈ প্ৰতিলিপি কৰিব পৰা নগ’ল।",
        "filerenameerror": "\"$1\" ফাইলৰ নাম সলনি কৰি \"$2\" কৰিব পৰা নগ’ল ।",
        "filedeleteerror": "\"$1\" ফাইলতো বিলোপ কৰিব পৰা নগ’ল।",
        "directorycreateerror": "\"$1\" নিৰ্দেশিকা সৃষ্টি কৰিব পৰা নগ’ল।",
+       "directoryreadonlyerror": "নিৰ্দেশিকা \"$1\" কেৱল পাঠযোগ্য।",
+       "directorynotreadableerror": "নিৰ্দেশিকা \"$1\" পাঠযোগ্য নহয়।",
        "filenotfound": "\"$1\" নামৰ ফাইলটো বিচাৰি পোৱা নগ’ল।",
        "unexpected": "অনাকাংক্ষিত মূল্য: \"$1\"=\"$2\".",
        "formerror": "ত্ৰুটি: প্ৰপত্ৰখন জমা দিব পৰা নগ’ল",
        "badtitletext": "আপুনি বিচৰা পৃষ্ঠাটোৰ শিৰোনামা অযোগ্য, খালী বা ভুলকৈ জড়িত আন্তৰ্ভাষিক বা আন্তৰ্ৱিকি শিৰোনামা। ইয়াত এক বা ততোধিক বৰ্ণ আছে যাক শিৰোনামাত ব্যৱহাৰ কৰিব নোৱাৰি।",
        "title-invalid-empty": "অনুৰোধ কৰা পৃষ্ঠা খালি নাইবা কেৱল এটা নামস্থানৰ নামহে আছে।",
        "title-invalid-utf8": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনামত এটা অবৈধ UTF-8 শৃংখল আছে।",
-       "title-invalid-interwiki": "শিৰà§\8bনামত à¦\8fà¦\9fা à¦\86নà§\8dতà¦\83ৱিà¦\95ি à¦¸à¦\82যà§\8bà¦\97 à¦\86à¦\9bà§\87",
+       "title-invalid-interwiki": "à¦\85নà§\81ৰà§\8bধ à¦\95ৰা à¦¶à¦¿à§°à§\8bনামত à¦\8fà¦\9fা à¦\86নà§\8dতà¦\83ৱিà¦\95ি à¦¸à¦\82যà§\8bà¦\97 à¦\86à¦\9bà§\87 à¦¯à¦¿à¦\9fà§\8b à¦¶à¦¿à§°à§\8bনামত à¦¬à§\8dযৱহাৰ à¦\95ৰিব à¦¨à§\8bৱাৰি।",
        "title-invalid-talk-namespace": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনামে এটা আলোচনা পৃষ্ঠা সূচাইছে যিটো থাকিব নোৱাৰে।",
        "title-invalid-characters": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনামত অবৈধ চিহ্ন আছে: \"$1\"।",
        "title-invalid-magic-tilde": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনামত অবৈধ যাদুকৰী টাইল্ড শৃংখল আছে (<nowiki>~~~</nowiki>)।",
-       "title-invalid-too-long": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনাম অতি দীঘল। UTF-8 এন্‌ক'ডিঙত ই $1 বাইটতকৈ দীঘল হ'ব নালাগে।",
+       "title-invalid-too-long": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনাম অতি দীঘল। UTF-8 এন্‌ক'ডিঙত ই {PLURAL:$1|বাইট}}তকৈ দীঘল হ'ব নালাগে।",
        "title-invalid-leading-colon": "অনুৰোধ কৰা পৃষ্ঠাৰ শিৰোনামৰ আৰম্ভণিত এটা অবৈধ ক'ল'ন আছে।",
        "perfcached": "তলত দিয়া তথ্যখিনি আগতে জমা কৰি থোৱা (cached) আৰু সাম্প্ৰতিক নহ'ব পাৰে। এই তথ্যখিনিত সৰ্বোচ্চ {{PLURAL:$1|এটা ফলাফল|$1টা ফলাফল}} উপলব্ধ।",
        "perfcachedts": "তলত দিয়া তথ্য খিনি আগতে জমা কৰি থোৱা (cached) আৰু শেষবাৰৰ কাৰণে $1 ত নবীকৰণ কৰা হৈছিল। সৰ্বাধিক {{PLURAL:$4|এটা ফলাফল|$4 টা ফলাফল}} এই কেশ্বত পাব।",
        "actionthrottled": "কাৰ্য লেহেম কৰা হৈছে",
        "actionthrottledtext": "স্পাম ৰোধ কৰিবলৈ এই ক্ৰিয়াতো কম সময়ৰ ভিতৰত বহু বেছি বাৰ কৰাতো ৰোধ কৰা হৈছে, আৰু আপুনি ইতিমধ্যে সেই সীমা অতিক্ৰম কৰিলে।\nঅনুগ্ৰহ কৰি কিছু সময় পাছত চেষ্টা কৰক।",
        "protectedpagetext": "সম্পাদনা ৰোধ কৰিবলৈ এই পৃষ্ঠাটো সুৰক্ষিত কৰা হৈছে।",
-       "viewsourcetext": "à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ à¦\89à§\8eস à¦\9aাব à¦\86ৰà§\81 à¦¨à¦\95ল à¦\95ৰিব à¦ªà¦¾à§°à§\87",
-       "viewyourtext": "আপুনি '''আপোনাৰ সম্পাদনাসমূহ'''ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ নকল কৰিব পাৰে:",
+       "viewsourcetext": "à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8bৰ à¦\89à§\8eস à¦\9aাব à¦\86ৰà§\81 à¦ªà§\8dৰতিলিপি à¦\95ৰিব à¦ªà¦¾à§°à§\87।",
+       "viewyourtext": "আপুনি <strong>আপোনাৰ সম্পাদনাসমূহ</strong>ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ প্ৰতিলিপি কৰিব পাৰে।",
        "protectedinterface": "এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে।\nসকলো ৱিকিৰ বাবে অনুবাদ যোগ কৰিবলৈ বা সলাবলৈ অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক।",
        "editinginterface": "<strong>সাৱধানবাণী:</strong> আপুনি সম্পাদনা কৰি থকা পৃষ্ঠাটো এই ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয়।\nএই পৃষ্ঠাৰ সাল-সলনিয়ে এই ৱিকিত আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব।",
        "translateinterface": "সকলো ৱিকিৰ বাবে অনুবাদ যোগ বা সালসলনি কৰিবৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প //translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক।",
        "history-feed-description": "ৱিকিত উপলব্ধ এই পৃষ্ঠাৰ সংশোধন ইতিহাস",
        "history-feed-item-nocomment": "$1-য়ে $2",
        "history-feed-empty": "অনুৰোধ কৰা পৃষ্ঠাৰ কোনো অস্বিত্ব নাই।\nহয়তো ইয়াক বিলোপ কৰা হৈছে অথবা ইয়াৰ নাম সলনি কৰা হৈছে।\n[[Special:Search|সন্ধান]] ব্যৱহাৰ কৰি প্ৰাসংগিক পৃষ্ঠাসমূহ চাওক।",
+       "history-edit-tags": "নিৰ্বাচিত সংশোধনসমূহৰ টেগ্‌ সম্পাদনা কৰক",
        "rev-deleted-comment": "(সম্পাদনা সাৰাংশ আঁতৰোৱা হ'ল)",
        "rev-deleted-user": "(সদস্যনাম আঁতৰোৱা হ’ল)",
        "rev-deleted-event": "(ল'গ সবিশেষ আঁতৰোৱা হ'ল)",
        "newpageletter": "ন",
        "boteditletter": "ব",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|জন সদস্যই|জন সদস্যই}} এই পৃষ্ঠা নিৰীক্ষণ কৰিছে]",
-       "rc_categories": "à¦\85নà§\81à¦\9aà§\8dà¦\9bà§\87দৰ à¦¸à§\80মাবদà§\8dধতা (\"|\" à¦¦à¦¿ à¦ªà§\83থà¦\95 à¦\95ৰà¦\95)",
-       "rc_categories_any": "যিকোনো",
-       "rc-change-size-new": "সালসলনিৰ পিছত $1 {{PLURAL:$1|বাইট|বাইট}}",
+       "rc_categories": "শà§\8dৰà§\87ণà§\80সমà§\82হৰ à¦¸à§\80মাবদà§\8dধতা (\"|\" à¦¦à¦¿ à¦ªà§\83থà¦\95 à¦\95ৰà¦\95):",
+       "rc_categories_any": "বাà¦\9bনি à¦\95ৰাৰ à¦®à¦¾à¦\9cত à¦¯à¦¿à¦\95à§\8bনà§\8b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|বাইট}} যোগ দিয়া হ’ল",
        "newsectionsummary": "/* $1 */ নতুন অনুচ্ছেদ",
        "rc-enhanced-expand": "সবিশেষ দেখুৱাওক",
        "rc-enhanced-hide": "সবিশেষ  লুকুৱাওক",
        "upload-too-many-redirects": "এই URL টোত অতি বেছি পুনৰ্নিৰ্দেশনা আছে",
        "upload-http-error": "এটা HTTP ত্ৰুটিয়ে দেখা দিছে: $1",
        "upload-copy-upload-invalid-domain": "এই ডমেইনত কপী আপল'ড নাপাব।",
+       "upload-dialog-title": "ফাইল আপল’ড কৰক",
+       "upload-dialog-error": "এটা ত্ৰুটি পোৱা গৈছে",
+       "upload-dialog-warning": "এটা সতৰ্কবাণী পোৱা গৈছে",
+       "upload-dialog-button-cancel": "বাতিল কৰক",
+       "upload-dialog-button-done": "কৰা হ’ল",
+       "upload-dialog-button-save": "সাঁচি থওক",
+       "upload-dialog-button-upload": "আপল'ড",
+       "upload-dialog-label-select-file": "ফাইল নিৰ্বাচন কৰক",
+       "upload-dialog-label-infoform-title": "বিস্তাৰিত",
+       "upload-dialog-label-infoform-name": "নাম",
+       "upload-dialog-label-infoform-description": "বিৱৰণ",
+       "upload-dialog-label-usage-title": "ব্যৱহাৰ",
+       "upload-dialog-label-usage-filename": "ফাইলৰ নাম",
        "backend-fail-stream": "$1 ফাইলটো ষ্ট্ৰীম কৰিব পৰা নগ'ল।",
        "backend-fail-backup": "$1 ফাইলটো বেকআপ্‌ কৰিব পৰা নগ'ল।",
        "backend-fail-notexists": "$1 ফাইলটোৰ কোনো অস্তিত্ব নাই।",
        "randomincategory": "শ্ৰেণীৰ যিকোনো পৃষ্ঠা",
        "randomincategory-invalidcategory": "\"$1\" বৈধ শ্ৰেণী নাম নহয়।",
        "randomincategory-nopages": "[[:Category:$1|$1]] শ্ৰেণীত কোনো পৃষ্ঠা নাই।",
+       "randomincategory-category": "শ্ৰেণী:",
+       "randomincategory-legend": "শ্ৰেণীৰ যিকোনো পৃষ্ঠা",
+       "randomincategory-submit": "যাওক",
        "randomredirect": "অনিৰ্ধাৰিত পুননিৰ্দেশ",
        "randomredirect-nopages": "\"$1\" নামস্থানত কোনো পুননিৰ্দেশ নাই ।",
        "statistics": "পৰিসংখ্যা",
        "linksearch-pat": "সন্ধান আৰ্হি:",
        "linksearch-ns": "নামস্থান:",
        "linksearch-ok": "সন্ধান কৰক",
-       "linksearch-text": "ৱাইল্ডকাৰ্ডসমূহ যেনে \"*.wikipedia.org\" ব্যৱহাৰ কৰিব পাৰি।\nঅন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ \"*.org\"। <br />\nসমৰ্থিত {{PLURAL:$2|প্ৰ'ট'ক'ল|প্ৰ'ট'ক'লসমূহ}} : <code>$1</code> (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
+       "linksearch-text": "ৱাইল্ডকাৰ্ডসমূহ যেনে \"*.wikipedia.org\" ব্যৱহাৰ কৰিব পাৰি।\nঅন্তত এটা উচ্চ-স্তৰৰ ডমেইনৰ প্ৰয়োজন, উদাহৰণস্বৰূপ \"*.org\"। <br />\nসমৰ্থিত {{PLURAL:$2|প্ৰ'ট'ক'ল|প্ৰ'ট'ক'লসমূহ}} : $1 (কোনো প্ৰ'ট'ক'ল নিৰ্দিষ্ট নকৰিলে http:// সূচাব)।",
        "linksearch-line": "$2 পৰা $1 সংযোগ কৰা হৈছে",
        "linksearch-error": "ৱাইল্ডকাৰ্ড কেৱল হ'ষ্টনামৰ আৰম্ভণিতহে দেখা যাব ।",
        "listusersfrom": "ইয়াৰে আৰম্ভ হোৱা ব্যৱহাৰকাৰী সকল দেখুৱাওক:",
        "emailuser": "এই সদস্যজনলৈ ই-মেইল পঠিয়াওক",
        "emailuser-title-target": "{{GENDER:$1|সদস্যজনলৈ}} ইমেইল পঠিয়াওক",
        "emailuser-title-notarget": "ব্যৱহাৰকাৰী ই-পত্ৰ প্ৰেৰণ কৰক",
-       "emailpage": "ই-পত্ৰ ব্যৱহাৰকাৰী",
        "emailpagetext": "তলৰ প্ৰপত্ৰখন ব্যৱহাৰ কৰি আপুনি এই {{GENDER:$1|সদস্যজনলৈ}} ই-মেইল পঠাব পাৰে ।\nআপুনি [[Special:Preferences|আপোনাৰ সদস্য পছন্দসমূহ]]ত প্ৰৱেশ কৰা ই-মেইল ঠিকনাটো প্ৰেৰকৰ ঠিকনা হিছাপে দেখা যাব, যাতে মেইলৰ প্ৰাপকে আপোনাক উত্তৰ দিব পাৰে ।",
        "defemailsubject": "\"$1\" সদস্যৰ পৰা {{SITENAME}} ই-মেইল",
        "usermaildisabled": "ব্যৱহাৰকাৰীৰ ই-মেইল নিষ্ক্ৰিয়",
        "rollback-success": "$1 ৰ সম্পাদনাসমূহ পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিয়া হৈছে;\nপৃষ্ঠাটো $2 য়ে কৰা শেষ সংশোধনীলৈ ঘূৰাই নিয়া হৈছে ।",
        "sessionfailure-title": "ছেছন বিফল",
        "sessionfailure": "আপোনাৰ লগ-ইন ছেছনত সম্ভৱত: কোনো সমস্যা হৈছে;\nছেছন হাইজেকিং প্ৰতিৰোধ কৰিবলৈ এই কামটো বাতিল কৰা হৈছে ।\nঅনুগ্ৰহ কৰি আগৰ পৃষ্ঠালৈ ঘূৰি গৈ ৰিল’ড কৰি পুনৰ চেষ্টা কৰক ।",
+       "logentry-contentmodel-change-revert": "আগৰ অৱস্থালৈ ঘূৰি যাওক",
        "protectlogpage": "সুৰক্ষা সূচী",
        "protectlogtext": "পৃষ্ঠা সুৰক্ষাৰ সালসলনিসমূহৰ তালিকা তলত দিয়া হ’ল ।\nবৰ্তমান কাৰ্য্যৰত পৃষ্ঠা সুৰক্ষাসমূহৰ বাবে [[Special:ProtectedPages|সুৰক্ষিত পৃষ্ঠাৰ তালিকা]] চাওক ।",
        "protectedarticle": "সুৰক্ষিত \"[[$1]]\"",
        "sp-contributions-search": "বৰঙণিসমূহৰ কাৰণে সন্ধান কৰক",
        "sp-contributions-username": "আই.পি. ঠিকনা অথবা ব্যৱহাৰকৰ্তাৰ নাম:",
        "sp-contributions-toponly": "কেৱল সাম্প্ৰতিক সংস্কৰণৰ অন্তৰ্গত সম্পাদনাসমূহ দেখুৱাওক",
+       "sp-contributions-newonly": "কেৱল পৃষ্ঠা সৃষ্টি কৰা সম্পাদনাসমূহ দেখুৱাওক",
        "sp-contributions-submit": "সন্ধান কৰক",
        "whatlinkshere": "ইয়ালৈ থকা সংযোগসমূহ",
        "whatlinkshere-title": "\"$1\"লৈ সংযোজিত পৃষ্ঠাসমূহ",
        "tooltip-pt-logout": "প্ৰস্থান",
        "tooltip-pt-createaccount": "আপোনাক এটা একাউণ্ট সৃষ্টি কৰি প্ৰৱেশ কৰিবলৈ অনুৰোধ জনোৱা হৈছে, কিন্তু এয়া বাধ্যতামূলক নহয়",
        "tooltip-ca-talk": "সংশ্লিষ্ট প্ৰবন্ধ সম্পৰ্কীয় আলোচনা",
-       "tooltip-ca-edit": "à¦\86পà§\81নি à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\9fà§\8b à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦\95ৰিব à¦ªà¦¾à§°à§\87, à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি à¦¸à¦¾à¦²à¦¸à¦²à¦¨à¦¿ à¦¸à¦¾à¦\9aà§\80 à¦¥à§\8bৱাৰ à¦\86à¦\97তà§\87 à¦\96à¦\9aৰা à¦\9aাà¦\87 à¦²à¦¬",
+       "tooltip-ca-edit": "à¦\8fà¦\87 à¦ªà§\83ষà§\8dঠাà¦\96ন à¦¸à¦®à§\8dপাদনা à¦\95ৰà¦\95",
        "tooltip-ca-addsection": "নতুন অনুচ্ছেদ আৰম্ভ কৰক",
        "tooltip-ca-viewsource": "এই পৃষ্ঠাটো সুৰক্ষিত কৰা হৈছে, আপুনি ইয়াৰ উৎস চাব পাৰে।",
        "tooltip-ca-history": "এই পৃষ্ঠাৰ যোৱা সংস্কৰণসমূহ",
        "spam_reverting": "$1লৈ সংযোগ নথকা সৰ্বশেষ পুনৰীক্ষনলে উভতাই নিয়া হৈছে",
        "spam_blanking": "সকলো পুনৰীক্ষনৰ $1লৈ সংযোগ আছিল, ৰিক্ত কৰা হৈছে",
        "spam_deleting": "সকলো পুনৰীক্ষণৰ $1লৈ সংযোগ আছিল, বিলোপ কৰা হৈছে",
-       "simpleantispam-label": "এণ্টি-স্পাম পৰীক্ষা।\nএইখন পূৰণ '''নকৰিব'''!",
+       "simpleantispam-label": "এণ্টি-স্পাম পৰীক্ষা।\nএইখন পূৰণ <strong>নকৰিব</strong>!",
        "pageinfo-title": "\"$1\" ৰ তথ্য",
        "pageinfo-not-current": "ক্ষমা কৰিব, পুৰণা সংশোধনৰ বাবে এই তথ্য মুকলি কৰাটো সম্ভৱ নহয়।",
        "pageinfo-header-basic": "প্ৰাথমিক তথ্য",
        "exif-subjectarea": "বিষয়বস্তুৰ ক্ষেত্ৰফল",
        "exif-flashenergy": "ফ্লেছ শক্তি",
        "exif-focalplanexresolution": "X ফোকাচ তলৰ ৰিজলিউশ্যন",
-       "exif-focalplaneyresolution": "Y ফকাচ তলৰ ৰিজলিউশ্যন",
+       "exif-focalplaneyresolution": "Y ফ'কাচ তলৰ ৰিজলিউশ্যন",
        "exif-focalplaneresolutionunit": "ফ'কেল তল ৰিজলিউশ্যন একক",
        "exif-subjectlocation": "বিষয়বস্তুৰ স্থান",
        "exif-exposureindex": "উন্মুক্ত সূচী",
diff --git a/languages/i18n/ase.json b/languages/i18n/ase.json
new file mode 100644 (file)
index 0000000..fe87d88
--- /dev/null
@@ -0,0 +1,612 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Icemandeaf"
+               ]
+       },
+       "tog-underline": "M521x525S1ce10499x476S1ce48479x476S20a00491x510 M523x518S15a1a478x483S19201477x499S26506508x501 S38a00464x490",
+       "tog-hideminor": "M536x534S35610482x483S10601513x506S21600525x501S30a30488x489 M518x590S10609493x554S10621482x570S21100495x541S2df20474x526S30a00482x483 S38700463x496 M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M515x512S1f010486x488S2f900502x507 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "tog-hidepatrolled": "M536x534S35610482x483S10601513x506S21600525x501S30a30488x489 M518x590S10609493x554S10621482x570S21100495x541S2df20474x526S30a00482x483 S38700463x496 M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M537x524S10e50516x494S26a10463x476S26a00510x476S10e58469x494 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "tog-newpageshidepatrolled": "M518x560S15a16490x548S2880f453x527S20e00476x538S1821d488x535S30a00482x483 M518x558S15a37484x534S1f550490x541S20e00470x545S26502452x544S30a00482x483 M518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 S38700463x496 M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M537x524S10e50516x494S26a10463x476S26a00510x476S10e58469x494 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tog-extendwatchlist": "M518x534S14702496x489S1470a483x479S22704501x506S22700484x467S22a04501x519 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509 M521x531S10012491x516S15a18479x503S26620486x469 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 S38700463x496 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M518x521S10000483x491S2ef00500x479 M521x524S1f740501x509S1f748479x498S20e00503x494S22a00502x476 M536x534S35610482x483S10601513x506S21600525x501",
+       "tog-usenewrc": "L536x534S35610482x483S10601513x506S21600525x501S30a30488x489 L518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 R526x572S10e50511x542S26500510x524S10e58475x542S26510477x524S30a00482x483 R518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 S38700463x496 M514x533S19a20486x468S27106495x493 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M521x508S1f748479x493S1f740501x493",
+       "tog-showtoolbar": "M521x531S10012491x516S15a18479x503S26620486x469 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x521S15a18482x494S1c501493x480S20600496x506 M512x531S1ec27488x470S22b04491x501",
+       "tog-editondblclick": "M516x523S1c520485x495S26a00489x478 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tog-editsectiononrightclick": "M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M521x508S1f748479x493S1f740501x493 M512x518S12420489x488S22104500x482 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488 M525x528S11010508x501S11018476x501S2df1e475x473S2df06505x473",
+       "tog-watchcreations": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M531x566S20302492x532S2030a488x549S21100508x551S26900515x529S26910467x548S30a00482x483 S38700463x496 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M539x579S10e27506x534S10e09480x534S22a07495x565S22a17469x564S21b00531x528S21b00504x528S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchdefault": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchmoves": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M569x549S18520505x534S18528466x534S26626539x532S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchdeletion": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M536x577S1ea40482x556S1f540521x523S22a07506x549S2f700521x513S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchrollback": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M536x561S10043506x528S20500495x550S30a00482x483 M518x595S10004492x534S2b705493x571S30a00482x483 S38700463x496 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M514x514S15a01491x487S20500487x503 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-minordefault": "M520x525S15a18480x490S10a02483x476S23100494x508S20e00500x494 M536x514S26506521x499S11502472x498S20e00507x500S15a28465x487 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M515x512S1f010486x488S2f900502x507",
+       "tog-previewontop": "M521x531S10012491x516S15a18479x503S26620486x469 M538x612S2ff00482x483S10001513x517S2e305488x487S19a20510x547S27106518x572 M520x519S26504502x504S15a0a480x481S15a02493x487 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M522x534S10050501x467S10058484x467S23b34506x501S23b02501x515S23b3c479x501S23b1a479x515",
+       "tog-previewonfirst": "M521x531S10012491x516S15a18479x503S26620486x469 M538x612S2ff00482x483S10001513x517S2e305488x487S19a20510x547S27106518x572 M521x508S1f748479x493S1f740501x493 M519x514S1f548481x490S10002489x487 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "tog-enotifwatchlistpages": "M518x558S15a01492x531S20500488x547S30a00482x483 M526x572S10e50511x542S26500510x524S10e58475x542S26510477x524S30a00482x483 M518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 M532x561S18049468x526S18041507x526S20500486x550S20500504x550S30a00482x483 M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 M522x524S16d18479x476S10012492x486S26904498x506",
+       "tog-enotifusertalkpages": "M518x558S15a01492x531S20500488x547S30a00482x483 M525x570S15a56498x558S11520502x527S20e00488x544S26a02473x537S30a00482x483 M524x577S15a37480x534S10041487x547S20600502x547S30a00482x483 M518x558S15a37484x534S1f550490x541S20e00470x545S26502452x544S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 M522x524S16d18479x476S10012492x486S26904498x506",
+       "tog-enotifminoredits": "M529x562S15a37499x531S1f550505x538S20e00485x542S26a02468x535S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 M520x546S1f748478x531S1f740500x531S30a00482x483 M518x558S1f010482x534S2f900498x553S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 M514x533S19a20486x468S27106495x493 M522x524S16d18479x476S10012492x486S26904498x506",
+       "tog-enotifrevealaddr": "M538x522S18517516x486S1851f461x495S30a00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478 M529x567S16d18479x542S10012492x552S26b00502x528S30a00482x483 S38700463x496 M521x531S10012491x516S15a18479x503S26620486x469 M514x514S15a01491x487S20500487x503 M525x520S16d18475x495S10012488x505S26b00498x481",
+       "tog-shownumberswatching": "M521x531S10012491x516S15a18479x503S26620486x469 M535x536S20330516x521S20338470x521S22a10471x502S22a00517x502S14c30511x465S14c38465x465 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M537x524S10e50516x494S26a10463x476S26a00510x476S10e58469x494",
+       "tog-oldsig": "M535x520S19a00507x481S19a08465x481S22f14465x506S22f04509x506 M518x518S15a37483x483S11551491x493 S38a00464x490",
+       "tog-fancysig": "M518x518S15a37483x483S11551491x493 M514x533S19a20486x468S27106495x493 M513x654S18620491x450S19220492x483S14020478x506S19220492x540S1fb20493x563S14a20492x586S10620487x605S1fb20493x635 S38b00470x493 M520x525S15a18480x490S10a02483x476S23100494x508S20e00500x494 M521x525S1ce10499x476S1ce48479x476S20a00491x510 M532x518S17610516x502S17618469x502S26500517x483S26510470x483 S38b04470x493",
+       "tog-uselivepreview": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M515x553S1dc20486x447S19220494x481S10e20495x504S14a20494x538 M538x612S2ff00482x483S10001513x517S2e305488x487S19a20510x547S27106518x572",
+       "tog-forceeditsummary": "M543x522S30a00482x483S19200505x503S20600521x493 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 M555x568S14c40531x521S14c48447x537S26502516x534S26516469x552S20340496x534S20348488x551S30a00482x483 M531x564S17610515x548S17618468x548S26500516x529S26510469x529S30a00482x483 S38700463x496 M524x518S15a59476x482S15a51488x495S20600502x488 M535x525S1dc20511x475S1dc28466x475S22a00522x510S22a10466x510",
+       "tog-watchlisthideown": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M514x514S15a01491x487S20500487x503 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchlisthidebots": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M508x533S14720493x468S17620492x494S1fb20493x514  M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchlisthideminor": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M515x512S1f010486x488S2f900502x507 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchlisthideliu": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489   M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchlisthideanons": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489   M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-watchlisthidepatrolled": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M518x560S2035a492x545S10e50501x522S31500482x483   M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tog-ccmeonemails": "M536x561S10043506x528S20500495x550S30a00482x483 M521x568S16d18478x543S10012491x553S26900500x529S30a00482x483 M523x563S1f550474x548S2a208500x527S30a00482x483 M525x570S15a56498x558S11520502x527S20e00488x544S26a02473x537S30a00482x483 S38700463x496 M522x524S16d18479x476S10012492x486S26904498x506 M514x533S19a20486x468S27106495x493",
+       "tog-diffonly": "M559x512S15a57477x489S15a51501x489S26612441x490S26606529x488 M521x531S10012491x516S15a18479x503S26620486x469 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M531x518S15a06499x506S1d151506x482S20a10469x488 M523x520S15a1a496x480S2c600478x482S1f540501x496 M543x512S10021495x491S10029476x491S26506528x489S26512458x489",
+       "tog-showhiddencats": "M521x531S10012491x516S15a18479x503S26620486x469 M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487",
+       "tog-norollbackdiff": "M518x595S10004492x534S2b705493x571S30a00482x483 M532x588S14c30507x526S2a204509x560S2a21c471x560S14c38471x526S30a00482x483 S38700463x496 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M543x512S10021495x491S10029476x491S26506528x489S26512458x489",
+       "tog-useeditwarning": "M543x522S30a00482x483S19200505x503S20600521x493 M536x561S10043506x528S20500495x550S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 M518x558S15a37484x534S1f550490x541S20e00470x545S26502452x544S30a00482x483 M534x542S30a00482x483S26500520x505S20e00521x526S1f540493x518 M519x559S20600497x527S10e02487x544S20302480x534S30a00482x483 S38700463x496 M524x518S15a59476x482S15a51488x495S20600502x488 M535x525S1dc20511x475S1dc28466x475S22a00522x510S22a10466x510",
+       "tog-prefershttps": "M543x522S30a00482x483S19200505x503S20600521x493 M551x571S2a200510x530S20b00475x558S11530536x532S15a37475x533S11551483x543S30a00482x483 S38700463x496 M513x525S10000492x495S2ea06488x476 M527x522S15a56500x510S11520504x479S20e00490x496S26502473x495 M557x519S37600488x496S20307505x482S2030f474x482S2810a525x495S28112443x495 M545x527S1c510503x499S1c518472x499S2c500505x474S2c514455x473 M534x525S1ce10497x475S1ce18481x475S20a00491x510S26502519x491S26516467x491S2fb02497x489",
+       "underline-always": "M513x525S10000492x495S2ea06488x476",
+       "underline-never": "M524x533S15a50476x468S15a40477x506S24103492x482",
+       "sunday": "M534x530S2e508511x503S15d28473x471S15d20508x471S2e510467x503",
+       "monday": "M512x528S2e508489x501S18d00488x472",
+       "tuesday": "M512x525S2e508489x498S1fb00494x476",
+       "wednesday": "M512x531S2e508489x504S18600492x470",
+       "thursday": "M518x535S2e508495x508S1fb20498x465S11502483x489",
+       "friday": "M513x530S2e508490x503S1ce00487x470",
+       "saturday": "M512x523S2e508489x496S20300493x477",
+       "sun": "M513x530S2e508490x503S15d20487x471",
+       "mon": "M512x528S2e508489x501S18d00488x472",
+       "tue": "M512x525S2e508489x498S1fb00494x476",
+       "wed": "M512x531S2e508489x504S18600492x470",
+       "thu": "M518x524S2e508495x497S11502483x477",
+       "fri": "M513x530S2e508490x503S1ce00487x470",
+       "sat": "M512x523S2e508489x496S20300493x477",
+       "january": "M521x543S19220500x474S1f720495x498S11920494x517S2a20c479x457",
+       "february": "M511x538S1ce20489x463S14a20490x497S14720491x516",
+       "march": "M515x560S18d20495x440S1f720495x469S11a20500x487S16d20498x521S11502485x545",
+       "april": "M518x566S1f720492x435S14051483x451S11a20497x478S19220497x512S1dc20488x536",
+       "may_long": "M514x534S18d20488x467S1f720488x497S19a20486x514",
+       "june": "M521x559S19220500x458S2a20c479x441S11520500x480S11920494x513S14a20500x544",
+       "july": "M521x563S19220500x455S2a20c479x438S11520500x477S1dc20491x511S19a20493x543",
+       "august": "M515x534S1f720495x466S11520500x484S1f040486x519",
+       "september": "M516x540S20320498x461S14a20498x480S14051485x495S1fb20498x521",
+       "october": "M509x532S17620493x469S16d20492x489S1fb20494x513",
+       "november": "M511x540S11920490x461S17620495x491S10e20496x510",
+       "december": "M509x537S10120493x464S14a20494x498S16d20492x517",
+       "january-gen": "M521x543S19220500x474S1f720495x498S11920494x517S2a20c479x457",
+       "february-gen": "M511x538S1ce20489x463S14a20490x497S14720491x516",
+       "march-gen": "M515x560S18d20495x440S1f720495x469S11a20500x487S16d20498x521S11502485x545",
+       "april-gen": "M518x566S1f720492x435S14051483x451S11a20497x478S19220497x512S1dc20488x536",
+       "may-gen": "M514x534S18d20488x467S1f720488x497S19a20486x514",
+       "june-gen": "M521x559S19220500x458S2a20c479x441S11520500x480S11920494x513S14a20500x544",
+       "july-gen": "M521x563S19220500x455S2a20c479x438S11520500x477S1dc20491x511S19a20493x543",
+       "august-gen": "M515x534S1f720495x466S11520500x484S1f040486x519",
+       "september-gen": "M516x540S20320498x461S14a20498x480S14051485x495S1fb20498x521",
+       "october-gen": "M509x532S17620493x469S16d20492x489S1fb20494x513",
+       "november-gen": "M511x540S11920490x461S17620495x491S10e20496x510",
+       "december-gen": "M509x537S10120493x464S14a20494x498S16d20492x517",
+       "jan": "M521x543S19220500x474S1f720495x498S11920494x517S2a20c479x457",
+       "feb": "M511x538S1ce20489x463S14a20490x497S14720491x516",
+       "mar": "M515x560S18d20495x440S1f720495x469S11a20500x487S16d20498x521S11502485x545",
+       "apr": "M518x566S1f720492x435S14051483x451S11a20497x478S19220497x512S1dc20488x536",
+       "may": "M514x534S18d20488x467S1f720488x497S19a20486x514",
+       "jun": "M521x559S19220500x458S2a20c479x441S11520500x480S11920494x513S14a20500x544",
+       "jul": "M521x563S19220500x455S2a20c479x438S11520500x477S1dc20491x511S19a20493x543",
+       "aug": "M515x534S1f720495x466S11520500x484S1f040486x519",
+       "sep": "M516x540S20320498x461S14a20498x480S14051485x495S1fb20498x521",
+       "oct": "M509x532S17620493x469S16d20492x489S1fb20494x513",
+       "nov": "M511x540S11920490x461S17620495x491S10e20496x510",
+       "dec": "M509x537S10120493x464S14a20494x498S16d20492x517",
+       "january-date": "M521x543S19220500x474S1f720495x498S11920494x517S2a20c479x457 $1",
+       "february-date": "M511x538S1ce20489x463S14a20490x497S14720491x516 $1",
+       "march-date": "M515x560S18d20495x440S1f720495x469S11a20500x487S16d20498x521S11502485x545 $1",
+       "april-date": "M518x566S1f720492x435S14051483x451S11a20497x478S19220497x512S1dc20488x536 $1",
+       "may-date": "M514x534S18d20488x467S1f720488x497S19a20486x514 $1",
+       "june-date": "M521x559S19220500x458S2a20c479x441S11520500x480S11920494x513S14a20500x544 $1",
+       "july-date": "M521x563S19220500x455S2a20c479x438S11520500x477S1dc20491x511S19a20493x543 $1",
+       "august-date": "M515x534S1f720495x466S11520500x484S1f040486x519 $1",
+       "september-date": "M516x540S20320498x461S14a20498x480S14051485x495S1fb20498x521 $1",
+       "october-date": "M509x532S17620493x469S16d20492x489S1fb20494x513 $1",
+       "november-date": "M511x540S11920490x461S17620495x491S10e20496x510 $1",
+       "december-date": "M509x537S10120493x464S14a20494x498S16d20492x517 $1",
+       "pagecategories": "{{PLURAL:$1|M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487|M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487}}",
+       "category_header": "M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M525x528S11010508x501S11018476x501S2df1e475x473S2df06505x473 $1 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "subcategories": "M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487",
+       "category-media-header": "M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M525x528S11010508x501S11018476x501S2df1e475x473S2df06505x473 \"$1\" M523x564S15a20476x537S2ff00482x483S22b03490x519S16d10506x491S20500491x546 M526x527S14c20475x484S15a56476x515S2a400501x473 M565x520S10a11502x494S10a19471x494S21800502x480S21800481x480S26606535x501S26612436x502",
+       "category-empty": "<em>M508x525S10004493x475S22a04494x510 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M534x520S22a14475x505S19a00506x481S19a08467x481S22a04513x505 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M523x564S15a20476x537S2ff00482x483S22b03490x519S16d10506x491S20500491x546 M526x527S14c20475x484S15a56476x515S2a400501x473 M565x520S10a11502x494S10a19471x494S21800502x480S21800481x480S26606535x501S26612436x502 M532x518S17610516x502S17618469x502S26500517x483S26510470x483 S38800464x496</em>",
+       "hidden-categories": "{{PLURAL:$1|M529x533S2ff00482x482S1f711483x511S20600507x516 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487|M529x533S2ff00482x482S1f711483x511S20600507x516 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487}}",
+       "hidden-category-category": "M529x533S2ff00482x482S1f711483x511S20600507x516 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487",
+       "category-subcat-count": "{{PLURAL:$2|M508x525S10004493x475S22a04494x510 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 M518x521S10000483x491S2ef00500x479 M508x525S10004493x475S22a04494x510 M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 S38800464x496|M508x525S10004493x475S22a04494x510 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 {{PLURAL:$1|M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487|$1 M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487}} M530x529S10018470x471S10641507x501S26505486x480S21600500x494 $2 S38800464x496}}",
+       "category-subcat-count-limited": "M508x525S10004493x475S22a04494x510 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 {{PLURAL:$1|M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487|$1 M521x525S1f540506x476S1f548479x476S2880d497x505 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487}} S38800464x496",
+       "category-file-count-limited": "M508x525S10004493x475S22a04494x510 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 {{PLURAL:$1|$1 M520x523S14c19480x496S15a01497x497S20710483x477}} S38800464x496",
+       "listingcontinuesabbrev": "M521x526S1f750501x511S1f758480x511S26620493x474",
+       "categoryviewer-pagedlinks": "S38b00470x493 $1 S38b04470x493 S38b00470x493 $2 S38b04470x493",
+       "about": "M527x520S18518474x505S10012497x502S2ef00507x480",
+       "article": "M531x518S15a06499x506S1d151506x482S20a10469x488 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "newwindow": "S38b00470x493 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M535x525S1dc20511x475S1dc28466x475S22a00522x510S22a10466x510 S38b04470x493",
+       "cancel": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501",
+       "moredotdotdot": "M526x508S18510501x493S18518475x493",
+       "morenotlisted": "M519x539S14402488x485S1440a481x461S22b04503x509 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 S38800464x496",
+       "mypage": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "mytalk": "M522x522S15a37478x479S10041485x492S20600500x492",
+       "anontalk": "M522x522S15a37478x479S10041485x492S20600500x492 M536x521S2ff00482x483S10011515x491S28108515x461 M508x525S10004493x475S22a04494x510 M517x524S19220496x477S14051483x500 M534x519S1f70a475x499S1f702512x499S22f10466x481S20e00494x483S22f00509x481",
+       "navigation": "M523x527S1ce40501x472S1ce48478x472S28800510x505S28818479x505 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "and": "&#32;M543x512S14c02458x489S26506496x492S18500519x494",
+       "qbfind": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "qbbrowse": "M541x523S10e50504x493S10e58460x493S2920a510x477S2921a466x477",
+       "qbedit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "qbpageoptions": "M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "qbmyoptions": "M514x514S15a01491x487S20500487x503 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "faq": "M517x538S1ce20495x462S1f720491x496S1f051483x515",
+       "faqpage": "Project:M516x538S1ce20494x462S1f720490x496S1f051484x515",
+       "actions": "M531x526S16d51511x474S16d59470x474S26c02514x499S26c12473x499",
+       "namespaces": "M524x514S11541500x487S1154a477x490 M511x528S19220490x473S10120490x498",
+       "variants": "M566x517S10051501x483S10059469x495S24906530x498S24912434x483",
+       "navigation-heading": "M511x540S11920489x461S1f720490x491S10e20496x510 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518",
+       "errorpagetitle": "M518x526S2ff00482x483S19a00487x506",
+       "tagline": "M530x529S10018470x471S10641507x501S26505486x480S21600500x494 {{SITENAME}}",
+       "help": "M512x518S15a37489x495S1f540488x482",
+       "search": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "searchbutton": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "go": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "searcharticle": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "history": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M514x523S11541487x478S22f04489x509",
+       "history_short": "M514x523S11541487x478S22f04489x509",
+       "updatedmarker": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M557x536S36d00479x503S10001536x498S10009510x506S2b711518x476S2b700531x465 M521x517S10043491x483S20500479x506 M527x525S19241500x476S19249474x479S20e00496x494S22a04496x510 M525x524S2ff00482x483S10e00507x494S26500511x474",
+       "printableversion": "M521x513S15a37480x487S1f420492x498S22104505x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "permalink": "M525x521S1f550501x506S1f558476x506S26500510x487S26510477x487S2f900511x479S2f900479x479 M521x525S1ce10499x476S1ce48479x476S20a00491x510",
+       "print": "M521x513S15a37480x487S1f420492x498S22104505x489",
+       "view": "M525x524S2ff00482x483S10e00507x494S26500511x474",
+       "view-foreign": "M525x524S2ff00482x483S10e00507x494S26500511x474 $1",
+       "edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "edit-local": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x520S20348488x505S14c51483x481S21100505x505 M545x536S1ce40504x486S1ce48473x464S27100505x521S27114455x500",
+       "create": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501",
+       "create-local": "M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M518x520S20348488x505S14c51483x481S21100505x505 M545x536S1ce40504x486S1ce48473x464S27100505x521S27114455x500",
+       "editthispage": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "create-this-page": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "delete": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468",
+       "deletethispage": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "undeletethispage": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "undelete_short": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 {{PLURAL:$1|M508x515S10000493x485 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468|$1 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468}}",
+       "viewdeleted_short": "M525x524S2ff00482x483S10e00507x494S26500511x474 {{PLURAL:$1|M508x515S10000493x485 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468|$1 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468}}",
+       "protect": "M512x519S15a19488x482S15a11489x482S20600488x508",
+       "protect_change": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "protectthispage": "M512x519S15a19488x482S15a11489x482S20600488x508 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "unprotect": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M512x519S15a19488x482S15a11489x482S20600488x508",
+       "unprotectthispage": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M512x519S15a19488x482S15a11489x482S20600488x508",
+       "newpage": "M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "talkpage": "M522x522S15a37478x479S10041485x492S20600500x492 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "talkpagelinktext": "M522x522S15a37478x479S10041485x492S20600500x492",
+       "specialpage": "M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "articlepage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M531x518S15a06499x506S1d151506x482S20a10469x488 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "talk": "M522x522S15a37478x479S10041485x492S20600500x492",
+       "views": "M517x524S15a02484x477S15a20489x484S21100504x492S22a04504x509",
+       "toolbox": "M518x521S15a18482x494S1c501493x480S20600496x506 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "userpage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "projectpage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M539x530S14011508x506S15a07489x493S2b700507x480S19220488x472S2a20c461x470 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "imagepage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M520x523S14c19480x496S15a01497x497S20710483x477 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "mediawikipage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "templatepage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M510x522S15c10490x513S16d12490x495S22a04494x478 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "viewhelppage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M512x518S15a37489x495S1f540488x482 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "categorypage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "viewtalkpage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M522x522S15a37478x479S10041485x492S20600500x492",
+       "otherlanguages": "M525x524S2ff00482x483S10e00507x494S26500511x474 M525x518S1f550476x503S2a208502x482 M563x515S1dc50505x485S1dc58473x485S26606533x499S26612438x499",
+       "lastmodifiedat": "M530x530S15a30477x471S15a30512x471S2e508507x503S2e510470x503 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M536x533S35610482x482S10601513x505S21600525x500 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 $1 M515x518S10050485x488S15a56488x483 $2 S38800464x496",
+       "viewcount": "M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M524x539S14402493x485S1440a486x461S22b00508x509S22b10476x483 {{PLURAL:$1|M522x521S15a48479x488S10002492x506S20e00494x491S22a07504x479|$1 M522x518S10050490x488S15a56495x482S20500478x483}} S38800464x496",
+       "protectedpage": "M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M512x519S15a19488x482S15a11489x482S20600488x508",
+       "jumpto": "M521x534S10020506x495S10028479x504S2b700502x467S2b711479x478 S38a00464x490",
+       "jumptonavigation": "M523x527S1ce40501x472S1ce48478x472S28800510x505S28818479x505 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "jumptosearch": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "pool-errorunknown": "M536x518S2ff00482x483S15a11513x486S28108513x453 M518x526S2ff00482x483S19a00487x506",
+       "poolcounter-usage-error": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x526S2ff00482x483S19a00487x506 S38700463x496 $1",
+       "aboutsite": "M527x520S18518474x505S10012497x502S2ef00507x480 {{SITENAME}}",
+       "aboutpage": "Project:M527x520S18518474x505S10012497x502S2ef00507x480",
+       "currentevents": "M534x520S22a14475x505S19a00506x481S19a08467x481S22a04513x505 M529x530S10030511x500S10038476x500S2a200506x471S2a218472x471",
+       "currentevents-url": "Project:M534x520S22a14475x505S19a00506x481S19a08467x481S22a04513x505 M529x530S10030511x500S10038476x500S2a200506x471S2a218472x471",
+       "disclaimers": "M525x516S15a57475x484S20600503x485S15a51490x493",
+       "disclaimerpage": "Project:M547x514S15a41501x491S15a49477x491S2d610453x486S2d608518x486 M525x516S15a57475x484S20600503x485S15a51490x493",
+       "edithelp": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M512x518S15a37489x495S1f540488x482",
+       "helppage-top-gethelp": "M512x518S15a37489x495S1f540488x482",
+       "mainpage": "M519x514S1f548481x490S10002489x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "mainpage-description": "M519x514S1f548481x490S10002489x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "policy-url": "Project:M521x526S20500496x514S22a04508x507S15a18482x499S14250480x474",
+       "portal": "M524x535S15a11501x465S15a19476x465S2e112479x490S2e106501x491 M556x522S2d612445x502S2d60a533x502S14048468x477S14040504x477",
+       "portal-url": "Project:M524x535S15a11501x465S15a19476x465S2e112479x490S2e106501x491 M556x522S2d612445x502S2d60a533x502S14048468x477S14040504x477",
+       "privacy": "M529x533S2ff00482x482S1f711483x511S20600507x516 M521x526S20500496x514S22a04508x507S15a18482x499S14250480x474",
+       "privacypage": "Project:M529x533S2ff00482x482S1f711483x511S20600507x516 M521x526S20500496x514S22a04508x507S15a18482x499S14250480x474",
+       "badaccess": "M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M518x526S2ff00482x483S19a00487x506",
+       "badaccess-group0": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M547x525S18040516x510S18048454x510S26610466x475S26600520x475 M531x526S16d51511x474S16d59470x474S26c02514x499S26c12473x499 M508x523S10040493x493S26500493x477 M515x527S2b704501x473S15a18488x500S2b715486x473S15a10501x500 S38800464x496",
+       "ok": "M515x525S17620499x475S14020485x495",
+       "retrievedfrom": "M513x542S1ce50491x458S22a00492x492S14c50487x511 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 $1",
+       "youhavenewmessages": "{{PLURAL:$3|M508x523S10040493x493S26500493x477 M532x518S18049468x483S18041507x483S20500486x507S20500504x507}} $1 S38b00470x493 $2 S38b04470x493 S38800464x496",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|M508x523S10040493x493S26500493x477 M532x518S18049468x483S18041507x483S20500486x507S20500504x507}} $1 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 {{PLURAL:$3|M535x520S1f550465x505S2a208489x480S1f530511x505 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489|$3 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489}} S38b00470x493 $2 S38b04470x493 S38800464x496",
+       "youhavenewmessagesmanyusers": "M508x523S10040493x493S26500493x477 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 $1 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 M535x536S20300516x521S20308470x521S26500516x502S26510470x502S14c30511x465S14c38465x465 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 S38b00470x493 $2 S38b04470x493 S38800464x496",
+       "newmessageslinkplural": "{{PLURAL:$1|M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506}}",
+       "newmessagesdifflinkplural": "M536x534S35610482x483S10601513x506S21600525x501 {{PLURAL:$1|M521x532S10609498x496S10621487x512S21100500x483S2df20479x468}}",
+       "youhavenewmessagesmulti": "$1 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506",
+       "editsection": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "editold": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "viewsourceold": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
+       "editlink": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "viewsourcelink": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
+       "editsectionhint": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488 S38700463x496 $1",
+       "toc": "M531x518S15a06499x506S1d151506x482S20a10469x488",
+       "showtoc": "M521x531S10012491x516S15a18479x503S26620486x469",
+       "hidetoc": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "collapsible-collapse": "M518x534S14702496x490S1470a483x480S22700500x507S22704486x467S22a00502x519",
+       "collapsible-expand": "M518x534S14702496x489S1470a483x479S22704501x506S22700484x467S22a04501x519",
+       "confirmable-confirm": "{{GENDER:$1|M521x541S10010486x511S30a00482x483S26500507x517}} S38900464x493",
+       "confirmable-yes": "M509x519S20320493x481S22e04492x501",
+       "confirmable-no": "M516x513S13f20487x498S22104484x488",
+       "thisisdeleted": "M525x524S30a00482x483S26500511x474S10e00507x494 S38700463x496 M518x588S2b700490x527S18527495x561S30a00482x483 M531x554S15a39475x527S28802509x526S18250484x539S30a00482x483 $1 S38900464x493",
+       "viewdeleted": "$1 M525x524S30a00482x483S26500511x474S10e00507x494 S38900464x493",
+       "restorelink": "{{PLURAL:$1|M508x515S10000493x485 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468|$1 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468}}",
+       "feedlinks": "M524x533S14402493x486S1440a476x511S22f20488x468 S38700463x496",
+       "site-rss-feed": "$1 M511x537S11a20490x463S20320490x497S20320490x516 M524x533S14402493x486S1440a476x511S22f20488x468",
+       "site-atom-feed": "$1 M511x544S1f720490x457S1fb20496x476S17620495x499S18d20490x519 M524x533S14402493x486S1440a476x511S22f20488x468",
+       "page-rss-feed": "$1 M511x537S11a20490x463S20320490x497S20320490x516 M524x533S14402493x486S1440a476x511S22f20488x468",
+       "page-atom-feed": "$1 M511x544S1f720490x457S1fb20496x476S17620495x499S18d20490x519 M524x533S14402493x486S1440a476x511S22f20488x468",
+       "red-link-title": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 $1 M524x543S33500476x483S15a01471x520S2890a487x513",
+       "sort-descending": "M525x530S14c0a476x507S1dc40476x471S28801505x490",
+       "sort-ascending": "M525x530S14c0a476x507S1dc40476x471S28801505x490",
+       "nstab-main": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-user": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-media": "M513x560S18d20487x440S14a20492x469S10120492x488S19220492x522S1f720487x545 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-special": "M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-project": "M539x530S14011508x506S15a07489x493S2b700507x480S19220488x472S2a20c461x470 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-image": "M520x523S14c19480x496S15a01497x497S20710483x477",
+       "nstab-mediawiki": "M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506",
+       "nstab-template": "M510x522S15c10490x513S16d12490x495S22a04494x478",
+       "nstab-help": "M512x518S15a37489x495S1f540488x482 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "nstab-category": "M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487",
+       "nosuchaction": "M531x526S16d51511x474S16d59470x474S26c02514x499S26c12473x499 M524x543S33500476x483S15a01471x520S2890a487x513",
+       "nosuchspecialpage": "M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M524x543S33500476x483S15a01471x520S2890a487x513",
+       "error": "M518x526S2ff00482x483S19a00487x506",
+       "databaseerror": "M508x528S10120492x472S14720493x506 M518x526S2ff00482x483S19a00487x506",
+       "databaseerror-error": "M518x526S2ff00482x483S19a00487x506 S38700463x496 $1",
+       "missingarticle-diff": "S38b00470x493 M543x512S10021495x491S10029476x491S26506528x489S26512458x489 S38a00464x490 $1 S38700463x496 $2 S38b04470x493",
+       "internalerror": "M528x518S20710494x499S17644473x502S18512481x482 M518x526S2ff00482x483S19a00487x506",
+       "internalerror_info": "M528x518S20710494x499S17644473x502S18512481x482 M518x526S2ff00482x483S19a00487x506 S38700463x496 $1",
+       "filecopyerror": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M537x516S15a18463x484S18510512x500S26506494x500S15710473x490 M520x523S14c19480x496S15a01497x497S20710483x477 $1 M519x515S10050482x485S26506504x493 $2 S38800464x496",
+       "filerenameerror": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M524x514S11541500x487S1154a477x490 M520x523S14c19480x496S15a01497x497S20710483x477 $1 M519x515S10050482x485S26506504x493 $2 S38800464x496",
+       "filedeleteerror": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M520x523S14c19480x496S15a01497x497S20710483x477 $1 S38800464x496",
+       "filenotfound": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M513x542S1ce50491x458S22a00492x492S14c50487x511 M520x523S14c19480x496S15a01497x497S20710483x477 $1 S38800464x496",
+       "cannotdelete-title": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 $1",
+       "badtitle": "M518x566S24b04490x540S2ff00482x483S15a00494x509 M525x528S11010508x501S11018476x501S2df1e475x473S2df06505x473",
+       "viewsource": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
+       "viewsource-title": "M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530 M536x521S2ff00482x483S10011515x491S28108515x461 $1",
+       "viewsourcetext": "M518x584S10004492x534S22a04493x569S30a00482x483 M518x558S15a37484x534S1f550490x541S20e00470x545S26502452x544S30a00482x483 M518x615S16d20491x526S17620492x550S10120492x567S14a20493x600S30a00482x483 S38700463x496 M508x523S10040493x493S26500493x477 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M525x524S2ff00482x483S10e00507x494S26500511x474 S38700463x496 M537x516S15a18463x484S18510512x500S26506494x500S15710473x490 S38800464x496",
+       "mypreferencesprotected": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M507x523S15a28494x496S26500493x477 M525x542S1c507500x517S20600478x519S2ff00482x483 S38800464x496",
+       "ns-specialprotected": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 S38800464x496",
+       "exception-nologin": "M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "welcomeuser": "M513x524S2c604491x476S1821d488x507 $1 S38810463x495",
+       "welcomecreation-msg": "M507x523S15a28494x496S26500493x477 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 S38800464x496 M543x522S30a00482x483S19200505x503S20600521x493 M518x573S10040493x543S26500493x527S30a00482x483 M535x590S15038467x559S15030509x559S26514474x528S26504513x528S21600516x547S21600477x547S30a00482x483 S38700463x496 M508x523S10040493x493S26500493x477 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M507x523S15a28494x496S26500493x477 {{SITENAME}} [[Special:Preferences|M525x542S1c507500x517S20600478x519S2ff00482x483]] S38800464x496",
+       "yourname": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490 S38a00464x490",
+       "userlogin-yourname": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490",
+       "userlogin-yourname-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M507x523S15a28494x496S26500493x477 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490",
+       "createacct-another-username-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490",
+       "yourpassword": "M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 S38a00464x490",
+       "userlogin-yourpassword": "M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "userlogin-yourpassword-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M507x523S15a28494x496S26500493x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "createacct-yourpassword-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "yourpasswordagain": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499 S38a00464x490",
+       "createacct-yourpasswordagain": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499",
+       "createacct-yourpasswordagain-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M528x514S15a39472x487S28802506x486S18250481x499",
+       "remembermypassword": "M538x567S1f548504x543S1f520513x534S1f520513x481S22b04522x499S2ff00482x483 M514x514S15a01491x487S20500487x503 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M536x521S2ff00482x483S10011515x491S28108515x461 M508x525S10004493x475S22a04494x510 M523x528S14011492x504S15a00477x495S2b800483x473 S38b00470x493 M536x521S2ff00482x483S10011515x491S28108515x461 M519x530S18210496x475S18218482x471S20b00496x483S22b00495x500 $1 {{PLURAL:$1|M526x534S15a1a499x522S10010507x467S28903478x486S37706474x522S37700520x495}} S38b04470x493",
+       "userlogin-remembermypassword": "M521x526S1f750501x511S1f758480x511S26620493x474 M521x517S10043491x483S20500479x506 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "password-change-forbidden": "M518x584S10004492x534S22a04493x569S30a00482x483 M518x633S19220493x614S14020479x583S19220493x561S18620491x530S30a00482x483 S38700463x496 M508x523S10040493x493S26500493x477 M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 S38800464x496",
+       "login": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "nav-login-createaccount": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38700463x496 M538x518S2b700511x460S14410516x487S2ff00482x483 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "userlogin": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38700463x496 M538x518S2b700511x460S14410516x487S2ff00482x483 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "userloginnocreate": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "logout": "M538x518S2a208496x483S15a37462x483S11530523x487S11551470x493",
+       "userlogout": "M538x518S2a208496x483S15a37462x483S11530523x487S11551470x493",
+       "notloggedin": "M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "userlogin-noaccount": "M534x542S30a00482x483S26500520x505S20e00521x526S1f540493x518 M532x561S18049468x526S18041507x526S20500486x550S20500504x550S30a00482x483 M524x567S15a30488x539S1f750490x534S20500502x556S22a04511x545S30a00482x483 S38900464x493",
+       "userlogin-joinproject": "M522x524S16d48478x476S11541487x487S26501509x511 {{SITENAME}}",
+       "nologin": "M534x542S30a00482x483S26500520x505S20e00521x526S1f540493x518 M532x561S18049468x526S18041507x526S20500486x550S20500504x550S30a00482x483 M524x567S15a30488x539S1f750490x534S20500502x556S22a04511x545S30a00482x483 S38900464x493 $1 S38800464x496",
+       "nologinlink": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S269M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "createaccount": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "gotaccount": "M532x588S14c30507x526S2a204509x560S2a21c471x560S14c38471x526S30a00482x483 M532x561S18049468x526S18041507x526S20500486x550S20500504x550S30a00482x483 M524x567S15a30488x539S1f750490x534S20500502x556S22a04511x545S30a00482x483 S38900464x493 $1 S38800464x496",
+       "gotaccountlink": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "userlogin-resetlink": "M572x518S30a00482x483S1f502557x467S20e00522x477S26506538x476S15a02492x477 M518x574S15a28494x547S26500493x528S30a00482x483 M551x571S2a200510x530S20b00475x558S11530536x532S15a37475x533S11551483x543S30a00482x483 M538x522S18517516x486S1851f461x495S30a00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478 S38900464x493",
+       "userlogin-resetpassword-link": "M572x518S30a00482x483S1f502557x467S20e00522x477S26506538x476S15a02492x477 M518x574S15a28494x547S26500493x528S30a00482x483 M518x531S33b00482x483S30a00482x483S1f711482x509 M518x560S10018486x530S1f010489x530S30a00482x483 S38900464x493",
+       "userlogin-helplink2": "M512x518S15a37489x495S1f540488x482 M521x508S1f748479x493S1f740501x493 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "userlogin-loggedin": "M508x523S10040493x493S26500493x477 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M516x515S10050501x485S10058484x485 {{GENDER:$1|$1}} S38800464x496 M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M538x522S18517516x486S1851f461x495S2ff00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M543x512S10021495x491S10029476x491S26506528x489S26512458x489 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 S38800464x496",
+       "userlogin-createanother": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M535x520S1f550465x505S2a208489x480S1f530511x505 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "createacct-emailrequired": "M525x520S16d18475x495S10012488x505S26b00498x481 M534x519S1f70a475x499S1f702512x499S22f10466x481S20e00494x483S22f00509x481",
+       "createacct-emailoptional": "M525x520S16d18475x495S10012488x505S26b00498x481 M534x519S1f70a475x499S1f702512x499S22f10466x481S20e00494x483S22f00509x481 S38b00470x493 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M513x532S15a48488x468S10a40498x486S26524490x517 S38b04470x493",
+       "createacct-email-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M507x523S15a28494x496S26500493x477 M525x520S16d18475x495S10012488x505S26b00498x481 M534x519S1f70a475x499S1f702512x499S22f10466x481S20e00494x483S22f00509x481",
+       "createacct-another-email-ph": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M525x520S16d18475x495S10012488x505S26b00498x481 M534x519S1f70a475x499S1f702512x499S22f10466x481S20e00494x483S22f00509x481",
+       "createacct-realname": "M521x541S10010486x511S2ff00482x483S26500507x517 M524x514S11541500x487S1154a477x490 S38b00470x493 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M513x532S15a48488x468S10a40498x486S26524490x517 S38b04470x493",
+       "createaccountreason": "M547x518S30a00482x483S22124511x473S1c517522x483 S38900464x493",
+       "createacct-reason": "M547x518S30a00482x483S22124511x473S1c517522x483",
+       "createacct-reason-ph": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M535x520S1f550465x505S2a208489x480S1f530511x505 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M547x518S30a00482x483S22124511x473S1c517522x483 S38900464x493",
+       "createacct-submit": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M507x523S15a28494x496S26500493x477 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "createacct-another-submit": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M535x520S1f550465x505S2a208489x480S1f530511x505 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "createacct-benefit-heading": "M533x545S14250501x455S14258468x479S2eb00518x489S2eb4c470x513 M514x533S19a20486x468S27106495x493 M508x523S10040493x493S26500493x477 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 {{SITENAME}} S38800464x496",
+       "createacct-benefit-body1": "{{PLURAL:$1|M521x532S10609498x496S10621487x512S21100500x483S2df20479x468}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498|M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489}}",
+       "createacct-benefit-body3": "M536x534S35610482x483S10601513x506S21600525x501 {{PLURAL:$1|M523x524S15a40510x476S15a48478x476S22a04510x509S22a14478x509 M525x535S10610510x499S10618476x509S2b700505x466S2b711476x479|M533x545S14250501x455S14258468x479S2eb00518x489S2eb4c470x513 M525x535S10610510x499S10618476x509S2b700505x466S2b711476x479}}",
+       "badretype": "M518x560S10e00491x530S30a00482x483 M518x531S33b00482x483S30a00482x483S1f711482x509 M518x560S10018486x530S1f010489x530S30a00482x483 M518x573S10040493x543S26500493x527S30a00482x483 M534x573S14c50507x542S14c58468x542S22520502x527S22520464x527S30a00482x483 S38700463x496 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M529x522S14e0a471x492S14e02498x497S20700491x478",
+       "userexists": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 M532x518S18049468x483S18041507x483S20500486x507S20500504x507 S38800464x496 M515x515S15a01492x485S21100486x501 M515x543S26504493x492S1ce20493x513S1d120485x457 M543x512S10021495x491S10029476x491S26506528x489S26512458x489 M524x514S11541500x487S1154a477x490 S38800464x496",
+       "loginerror": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M518x526S2ff00482x483S19a00487x506",
+       "createacct-error": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M518x526S2ff00482x483S19a00487x506",
+       "createaccounterror": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 S38700463x496 $1",
+       "loginsuccesstitle": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M547x547S33500476x483S10011507x517S10019472x517S28111451x506S28109525x505",
+       "login-userblocked": "M508x525S10004493x475S22a04494x510 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M512x523S15a19488x500S15a11489x500S26520492x478 S38800464x496 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 S38800464x496",
+       "wrongpassword": "M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M517x522S1000a487x507S10041483x479 S38800464x496 M515x515S15a01492x485S21100486x501 M534x522S2d200508x499S2d211467x499S20320513x478S20328473x478 M528x514S15a39472x487S28802506x486S18250481x499 S38800464x496",
+       "accountcreated": "M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469",
+       "accountcreatedtext": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M536x521S2ff00482x483S10011515x491S28108515x461 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|M522x522S15a37478x479S10041485x492S20600500x492]]) M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 S38800464x496",
+       "loginlanguagelabel": "M567x516S1dc50505x485S1dc58473x485S26606537x500S26612434x500 S38700463x496 $1",
+       "pt-login": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "pt-login-button": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "pt-createaccount": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "pt-userlogout": "M538x518S2a208496x483S15a37462x483S11530523x487S11551470x493",
+       "changepassword": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "resetpass_header": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "resetpass_submit": "M525x520S15a1a476x508S1f540479x481S2c300499x490 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 S38700463x496 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "resetpass-submit-loggedin": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "resetpass-submit-cancel": "M515x538S15a0a486x463S10050500x467S2330b485x516S20e00491x501",
+       "passwordreset": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "passwordreset-username": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M524x514S11541500x487S1154a477x490 S38a00464x490",
+       "passwordreset-capture": "M525x524S30a00482x483S26500511x474S10e00507x494 M518x531S33b00482x483S30a00482x483S1f711482x509 M518x560S10018486x530S1f010489x530S30a00482x483 M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 M529x567S16d18479x542S10012492x552S26b00502x528S30a00482x483 S38900464x493",
+       "passwordreset-emailtitle": "M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M538x522S18517516x486S1851f461x495S2ff00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478 M536x521S2ff00482x483S10011515x491S28108515x461 {{SITENAME}}",
+       "bold_sample": "M531x518S32a00482x483S15410516x488 M516x515S10018484x485S1f010487x485",
+       "bold_tip": "M531x518S32a00482x483S15410516x488 M516x515S10018484x485S1f010487x485",
+       "italic_sample": "M516x515S10018484x485S1f010487x485 M537x516S15a17514x493S15a19474x493S26906504x486S26916464x485",
+       "italic_tip": "M516x515S10018484x485S1f010487x485 M537x516S15a17514x493S15a19474x493S26906504x486S26916464x485",
+       "media_tip": "M520x523S14c19480x496S15a01497x497S20710483x477 M521x525S1ce10499x476S1ce48479x476S20a00491x510",
+       "sig_tip": "M507x523S15a28494x496S26500493x477 M518x518S15a37483x483S11551491x493 M521x508S1f748479x493S1f740501x493 M522x518S10050490x488S15a56495x482S20500478x483 M518x516S20b00483x503S15a37495x486S20340491x485",
+       "summary": "M554x524S14c40530x477S14c48446x493S26502515x490S26516468x508S20340495x490S20348487x507 S38a00464x490",
+       "minoredit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M515x512S1f010486x488S2f900502x507",
+       "savearticle": "M519x513S10e02489x498S20302482x488 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "showpreview": "M525x524S2ff00482x483S10e00507x494S26500511x474 M538x612S2ff00482x483S10001513x517S2e305488x487S19a20510x547S27106518x572",
+       "showdiff": "M521x531S10012491x516S15a18479x503S26620486x469 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "loginreqtitle": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M513x532S15a48488x468S10a40498x486S26524490x517",
+       "loginreqlink": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "editing": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 $1",
+       "templatesused": "M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 {{PLURAL:$1|M510x522S15c10490x513S16d12490x495S22a04494x478}} S38a00464x490",
+       "template-protected": "S38b00470x493 M520x525S26f20480x476S20313489x493S20311490x504 S38b04470x493",
+       "nocreate-loggedin": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 S38800464x496",
+       "permissionserrors": "M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M518x526S2ff00482x483S19a00487x506",
+       "permissionserrorstext": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 {{PLURAL:$1|M547x518S30a00482x483S22124511x473S1c517522x483}} S38900464x493",
+       "permissionserrorstext-withaction": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 $2 {{PLURAL:$1|M547x518S30a00482x483S22124511x473S1c517522x483}} S38900464x493",
+       "log-fulllog": "M525x524S2ff00482x483S10e00507x494S26500511x474 M520x529S20e00493x504S20348493x486S15a51497x471S26503480x516 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "cantcreateaccounttitle": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "viewpagelogs": "M525x524S2ff00482x483S10e00507x494S26500511x474 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "currentrev-asof": "M521x524S1f740501x509S1f748479x498S20e00503x494S22a00502x476 M536x534S35610482x483S10601513x506S21600525x501 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M557x536S36d00479x503S10001536x498S10009510x506S2b711518x476S2b700531x465 $1",
+       "revisionasof": "M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509 M536x521S2ff00482x483S10011515x491S28108515x461 $1",
+       "cur": "M535x520S19a00507x481S19a08465x481S22f14465x506S22f04509x506",
+       "last": "M520x519S26504502x504S15a0a480x481S15a02493x487",
+       "history-feed-item-nocomment": "$1 S38700463x496 $2",
+       "revdel-restore": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M530x519S2ff00482x483S19200509x500 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M525x524S2ff00482x483S10e00507x494S26500511x474",
+       "mergelog": "M526x535S14c58481x478S14c50494x466S2d60d500x505S2d615475x513 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "revertmerge": "M547x522S14c58481x491S28912453x499S14c50494x479S2890a518x487",
+       "lineno": "M545x510S1ed28456x491S1ed20484x491S26606515x494 $1 S38a00464x490",
+       "editundo": "M520x527S15a0a488x473S10041499x478S2330b481x505S20e00487x489 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "searchresults": "M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "searchresults-title": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M519x539S14402488x485S1440a481x461S22b04503x509 M536x521S2ff00482x483S10011515x491S28108515x461 ''$1''",
+       "prevn": "M520x519S26504502x504S15a0a480x481S15a02493x487 {{PLURAL:$1|$1}}",
+       "nextn": "M520x520S2b700499x480S15a0a480x502S15a02493x508 {{PLURAL:$1|$1}}",
+       "prevn-title": "M520x519S26504502x504S15a0a480x481S15a02493x487 $1 {{PLURAL:$1|M513x542S1ce50491x458S22a00492x492S14c50487x511|M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509}}",
+       "nextn-title": "M520x520S2b700499x480S15a0a480x502S15a02493x508 $1 {{PLURAL:$1|M513x542S1ce50491x458S22a00492x492S14c50487x511|M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509}}",
+       "shown-title": "M521x531S10012491x516S15a18479x503S26620486x469 $1 {{PLURAL:$1|M513x542S1ce50491x458S22a00492x492S14c50487x511}} M516x529S1f548485x484S1f540501x472S20e00503x499S22a04503x514 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "viewprevnext": "M525x524S2ff00482x483S10e00507x494S26500511x474 S38b00470x493 $1 S38700463x496 $2 S38b04470x493 S38b00470x493 $3 S38b04470x493",
+       "searchmenu-new": "<strong>M538x518S2b700511x460S14410516x487S2ff00482x483 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 [[:$1]] M530x530S15a30477x471S15a30512x471S2e508507x503S2e510470x503 M518x552S19220497x533S14020483x502S19220497x480S18620495x449 S38800464x496</strong> {{PLURAL:$2|0=|M514x533S19a20486x468S27106495x493 M525x524S2ff00482x483S10e00507x494S26500511x474 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M507x523S15a28494x496S26500493x477 M546x525S2ff00482x483S16d10492x505S2e502519x502 M513x542S1ce50491x458S22a00492x492S14c50487x511 S38800464x496|M514x533S19a20486x468S27106495x493 M525x524S2ff00482x483S10e00507x494S26500511x474 M546x525S2ff00482x483S16d10492x505S2e502519x502 M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509 S38800464x496}}",
+       "searchprofile-articles": "M531x518S15a06499x506S1d151506x482S20a10469x488 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "searchprofile-everything": "M535x535S1f738481x466S1f730494x475S26503478x494S26515510x494S20e00495x492S26612484x508S15d38516x509S26606485x518S15d30465x509",
+       "searchprofile-advanced": "M546x525S18010516x510S18018454x510S22b00520x475S22b10466x475",
+       "searchprofile-articles-tooltip": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M544x518S2ff00482x483S15a41521x483S15a49456x483S26517480x469S26501507x469 $1",
+       "searchprofile-images-tooltip": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M520x523S14c19480x496S15a01497x497S20710483x477",
+       "searchprofile-everything-tooltip": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M531x518S15a06499x506S1d151506x482S20a10469x488 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 S38700463x496 M530x522S16d48470x496S18551481x485S20700491x507S28802508x478S22105477x485 M522x522S15a37478x479S10041485x492S20600500x492 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "search-result-size": "$1 S38b00470x493 {{PLURAL:$2|$2 M516x515S10018484x485S1f010487x485}} S38b04470x493",
+       "search-redirect": "S38b00470x493 M552x509S18520488x494S18528449x494S26626522x492 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 $1 S38b04470x493",
+       "search-suggest": "M518x581S10040492x551S26500499x528S30a00482x483 M531x522S15a48469x495S10e12478x503S2c300505x479S20600481x487 S38a00464x490 $1 S38900464x493",
+       "search-interwiki-more": "S38b00470x493 M526x508S18510501x493S18518475x493 S38b04470x493",
+       "searchall": "M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490",
+       "search-nonefound": "M513x542S1ce50491x458S22a00492x492S14c50487x511 M519x539S14402488x485S1440a481x461S22b04503x509 M529x522S14e0a471x492S14e02498x497S20700491x478 M546x525S2ff00482x483S16d10492x505S2e502519x502 M532x518S17610516x502S17618469x502S26500517x483S26510470x483 S38800464x496",
+       "mypreferences": "M525x542S1c507500x517S20600478x519S2ff00482x483",
+       "prefsnologintext2": "M551x571S2a200510x530S20b00475x558S11530536x532S15a37475x533S11551483x543S30a00482x483 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M507x523S15a28494x496S26500493x477 M525x542S1c507500x517S20600478x519S2ff00482x483 S38800464x496",
+       "prefs-resetpass": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485",
+       "searchresultshead": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "prefs-help-recentchangescount": "M508x525S10004493x475S22a04494x510 M524x526S18512485x490S17644477x510S28802502x475 M536x534S35610482x483S10601513x506S21600525x501 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 S38700463x496 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M514x523S11541487x478S22f04489x509 S38700463x496 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513 S38800464x496",
+       "timezonelegend": "M522x518S10050490x488S15a56495x482S20500478x483 M513x526S14c50489x474S2e732488x510 S38a00464x490",
+       "localtime": "M518x520S20348488x505S14c51483x481S21100505x505 M522x518S10050490x488S15a56495x482S20500478x483 S38a00464x490",
+       "prefs-searchoptions": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "prefs-registration": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M522x518S10050490x488S15a56495x482S20500478x483 S38a00464x490",
+       "yourrealname": "M521x541S10010486x511S2ff00482x483S26500507x517 M524x514S11541500x487S1154a477x490 S38700463x496",
+       "prefs-timeoffset": "M522x518S10050490x488S15a56495x482S20500478x483 M542x514S15a10512x487S15a18458x487S26506527x496S26516473x496",
+       "prefs-help-prefershttps": "M523x566S2b700502x526S15a0a483x548S15a02496x554S30a00482x483 M551x571S2a200510x530S20b00475x558S11530536x532S15a37475x533S11551483x543S30a00482x483 S38700463x496 M508x525S10004493x475S22a04494x510 M525x542S1c507500x517S20600478x519S2ff00482x483 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 S38800464x496",
+       "userrights-no-interwiki": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M525x518S1f550476x503S2a208502x482 M518x552S19220497x533S14020483x502S19220497x480S18620495x449 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x537S15a36487x509S21100486x492S2c600482x463S15a41495x514 S38800464x496",
+       "userrights-notallowed": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x537S15a36487x509S21100486x492S2c600482x463S15a41495x514 S38800464x496",
+       "right-createaccount": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "right-browsearchive": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "right-suppressionlog": "M525x524S2ff00482x483S10e00507x494S26500511x474 M528x531S33b00482x483S1f711482x509S20600506x518 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "right-viewmywatchlist": "M525x524S2ff00482x483S10e00507x494S26500511x474 M507x523S15a28494x496S26500493x477 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "right-viewmyprivateinfo": "M525x524S2ff00482x483S10e00507x494S26500511x474 M507x523S15a28494x496S26500493x477 M528x531S33b00482x483S1f711482x509S20600506x518 M538x522S18517516x486S1851f461x495S2ff00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478 S38b00470x493 M536x569S2ff00482x483S10011515x491S27106517x529S19a20488x540 M525x520S16d18475x495S10012488x505S26b00498x481 S38700463x496 M521x541S10010486x511S2ff00482x483S26500507x517 M524x514S11541500x487S1154a477x490 S38b04470x493",
+       "right-passwordreset": "M525x524S2ff00482x483S10e00507x494S26500511x474 M518x531S33b00482x483S1f711482x509 M516x515S10018484x485S1f010487x485 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M525x520S16d18475x495S10012488x505S26b00498x481",
+       "newuserlogpage": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M538x518S2b700511x460S14410516x487S2ff00482x483 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "rightslog": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x537S15a36487x509S21100486x492S2c600482x463S15a41495x514 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "action-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "action-createaccount": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M508x525S10004493x475S22a04494x510 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "action-history": "M525x524S2ff00482x483S10e00507x494S26500511x474 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M514x523S11541487x478S22f04489x509",
+       "action-deletedhistory": "M525x524S2ff00482x483S10e00507x494S26500511x474 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M514x523S11541487x478S22f04489x509",
+       "action-browsearchive": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "action-suppressionlog": "M525x524S2ff00482x483S10e00507x494S26500511x474 M508x525S10004493x475S22a04494x510 M528x531S33b00482x483S1f711482x509S20600506x518 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "action-viewmywatchlist": "M525x524S2ff00482x483S10e00507x494S26500511x474 M507x523S15a28494x496S26500493x477 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "enhancedrc-history": "M514x523S11541487x478S22f04489x509",
+       "recentchanges": "M536x533S35610482x482S10601513x505S21600525x500 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "recentchanges-label-newpage": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "recentchanges-label-minor": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M515x512S1f010486x488S2f900502x507",
+       "rcshowhideminor": "$1 M515x512S1f010486x488S2f900502x507 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "rcshowhideminor-hide": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "rcshowhidebots-show": "M521x531S10012491x516S15a18479x503S26620486x469",
+       "rcshowhideliu": "$1 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489",
+       "rcshowhideliu-hide": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "rcshowhideanons-hide": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "rcshowhidemine": "$1 M514x514S15a01491x487S20500487x503 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "rcshowhidemine-hide": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "diff": "M543x512S10021495x491S10029476x491S26506528x489S26512458x489",
+       "hist": "M514x523S11541487x478S22f04489x509",
+       "hide": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508",
+       "show": "M521x531S10012491x516S15a18479x503S26620486x469",
+       "minoreditletter": "M510x512S18d20490x487",
+       "newpageletter": "M510x513S11920489x487",
+       "boteditletter": "M507x511S14720493x489",
+       "rc-change-size-new": "M518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 M532x588S14c30507x526S2a204509x560S2a21c471x560S14c38471x526S30a00482x483 S38700463x496 $1 {{PLURAL:$1|M514x544S14720493x456S19a20486x482S1fb20493x506S14a20493x529|M514x554S14720493x447S19a20486x473S1fb20493x497S14a20493x520S20320493x539}}",
+       "recentchangeslinked-toolbox": "M521x525S1ce10499x476S1ce48479x476S20a00491x510 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "recentchangeslinked-page": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M524x514S11541500x487S1154a477x490 S38a00464x490",
+       "upload": "M535x526S10e27502x481S10e09476x481S22a07491x512S22a17465x511S21b00527x475S21b00500x475 M520x523S14c19480x496S15a01497x497S20710483x477",
+       "uploadnologin": "M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "uploadlogpage": "M535x526S10e27502x481S10e09476x481S22a07491x512S22a17465x511S21b00527x475S21b00500x475 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "filedesc": "M554x524S14c40530x477S14c48446x493S26502515x490S26516468x508S20340495x490S20348487x507",
+       "upload-file-error": "M528x518S20710494x499S17644473x502S18512481x482 M518x526S2ff00482x483S19a00487x506",
+       "license": "M525x524S1dc20501x476S1dc28475x476S20600490x513 S38a00464x490",
+       "license-header": "M525x524S1dc20501x476S1dc28475x476S20600490x513",
+       "listfiles-userdoesnotexist": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $1 M544x597S30122482x476S35f30495x509S26b04517x579S15a04524x547 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 S38800464x496",
+       "file-anchor-link": "M520x523S14c19480x496S15a01497x497S20710483x477",
+       "filehist": "M520x523S14c19480x496S15a01497x497S20710483x477 M514x523S11541487x478S22f04489x509",
+       "filehist-revert": "M527x539S10004512x461S1000c473x477S2b705513x498S2b714475x515S2fd04496x530",
+       "filehist-current": "M535x520S19a00507x481S19a08465x481S22f14465x506S22f04509x506",
+       "filehist-datetime": "M526x534S15a1a499x522S10010507x467S28903478x486S37706474x522S37700520x495 S38700463x496 M522x518S10050490x488S15a56495x482S20500478x483",
+       "filehist-thumb": "M515x512S1f010486x488S2f900502x507 M523x564S15a20476x537S2ff00482x483S22b03490x519S16d10506x491S20500491x546",
+       "filehist-thumbtext": "M515x512S1f010486x488S2f900502x507 M523x564S15a20476x537S2ff00482x483S22b03490x519S16d10506x491S20500491x546 M536x521S2ff00482x483S10011515x491S28108515x461 $1",
+       "filehist-user": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489",
+       "filehist-dimensions": "M529x516S19a20501x496S19a28471x496S20500487x485S20500502x485",
+       "filehist-comment": "M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506",
+       "imagelinks": "M520x523S14c19480x496S15a01497x497S20710483x477 M527x522S15a56500x510S11520504x479S20e00490x496S26502473x495 M517x520S10020502x483S2710e483x480",
+       "randompage": "M543x512S10021495x491S10029476x491S26506528x489S26512458x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "nbytes": "$1 {{PLURAL:$1|M514x543S14720494x458S19a20486x481S1fb20493x505S14a20493x528}}",
+       "protectedpages-timestamp": "M522x518S10050490x488S15a56495x482S20500478x483 M518x516S20b00483x503S15a37495x486S20340491x485",
+       "listusers-desc": "M525x530S14c0a476x507S1dc40476x471S28801505x490 M526x527S14c49474x500S10012489x503S2c300500x473S21300475x480 M521x508S1f748479x493S1f740501x493 M527x525S19241500x476S19249474x479S20e00496x494S22a04496x510",
+       "newpages": "M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "move": "M552x509S18520488x494S18528449x494S26626522x492",
+       "log": "M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "all-logs-page": "M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M547x514S15a41501x491S15a49477x491S2d610453x486S2d608518x486 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "showhideselectedlogentries": "M518x615S26504492x564S1ce20492x585S1d120484x529S30a00482x483 M520x599S15a37485x528S18550495x539S15a37485x572S15a51488x576S30a00482x483 M562x556S1ed28473x537S1ed20501x537S26606532x540S30a00482x483 S38700463x496 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M525x524S2ff00482x483S10e00507x494S26500511x474",
+       "allpagessubmit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "cachedspecial-refresh-now": "M525x524S2ff00482x483S10e00507x494S26500511x474 M536x534S35610482x483S10601513x506S21600525x501 S38800464x496",
+       "categories": "M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487",
+       "linksearch-ok": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "watchlist": "M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "mywatchlist": "M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "watchlistanontext": "M518x574S15a28494x547S26500493x528S30a00482x483 M526x572S10e50511x542S26500510x524S10e58475x542S26510477x524S30a00482x483 M518x610S14402482x556S1440a475x532S22b04497x580S30a00482x483 L525x524S30a00482x483S26500511x474S10e00507x494 S38700463x496 R518x589S10609492x553S10621481x569S21100494x540S2df20473x525S30a00482x483 S38700463x496 M515x515S15a01492x485S21100486x501 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38800464x496",
+       "watchnologin": "M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493",
+       "watch": "M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476",
+       "dellogpage": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "deletionlog": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M514x523S11541487x478S22f04489x509",
+       "rollbacklink": "M508x531S10004493x470S2b705494x507",
+       "protectlogpage": "M512x519S15a19488x482S15a11489x482S20600488x508 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "protectedarticle": "\"[[$1]]\" M512x519S15a19488x482S15a11489x482S20600488x508",
+       "protect-othertime": "M525x518S1f550476x503S2a208502x482 M522x518S10050490x488S15a56495x482S20500478x483 S38a00464x490",
+       "restriction-type": "M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 S38700463x496",
+       "undelete": "M525x524S2ff00482x483S10e00507x494S26500511x474 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "viewdeletedpage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "undeletelink": "M525x524S2ff00482x483S10e00507x494S26500511x474 S38700463x496 M512x531S2b700488x470S18527493x504 M528x514S15a39472x487S28802506x486S18250481x499",
+       "undeleteviewlink": "M525x524S2ff00482x483S10e00507x494S26500511x474",
+       "undelete-search-title": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "undelete-search-submit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "namespace": "M524x514S11541500x487S1154a477x490 M511x528S19220490x473S10120490x498 S38a00464x490",
+       "blanknamespace": "S38b00470x493 M529x544S2ff00482x483S20500519x504S18517503x517 S38b04470x493",
+       "mycontris": "M531x521S1f437507x491S22113512x480S22115469x480S1f43f472x491",
+       "contributions-userdoesnotexist": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $1 M544x597S30122482x476S35f30495x509S26b04517x579S15a04524x547 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 S38800464x496",
+       "sp-contributions-blocklog": "M512x523S15a19488x500S15a11489x500S26520492x478 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "sp-contributions-logs": "M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "sp-contributions-talk": "M522x522S15a37478x479S10041485x492S20600500x492",
+       "sp-contributions-submit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "whatlinkshere": "M521x525S1ce10499x476S1ce48479x476S20a00491x510 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "whatlinkshere-page": "M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 S38a00464x490",
+       "isimage": "M520x523S14c19480x496S15a01497x497S20710483x477 M521x525S1ce10499x476S1ce48479x476S20a00491x510",
+       "whatlinkshere-hideimages": "$1 M520x523S14c19480x496S15a01497x497S20710483x477 M521x525S1ce10499x476S1ce48479x476S20a00491x510",
+       "ipbcreateaccount": "M512x523S15a19488x500S15a11489x500S26520492x478 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "ipbother": "M525x518S1f550476x503S2a208502x482 M522x518S10050490x488S15a56495x482S20500478x483 S38a00464x490",
+       "ipboptions": "M515x533S15a18485x470S10e10498x467S2e800500x501:2 hours,M507x515S10000492x485 M526x534S15a1a499x522S10010507x467S28903478x486S37706474x522S37700520x495:1 day,M528x534S15a1a497x522S11e00505x467S28903476x486S37706472x522S37700518x495:3 days,M507x515S10000492x485 M528x518S15a36472x506S10050476x482S20e00498x499S26506513x498:1 week,M528x518S15a36472x506S10e50476x482S20e00498x499S26506513x498:2 weeks,M507x515S10000492x485 M519x527S10028482x474S10002489x477S22a04505x512S21100505x495:1 month,M518x529S10028483x482S11e02488x471S22a04504x514S21100504x497:3 months,M517x526S10028483x479S18702488x474S22a04503x511S21100503x494:6 months,M507x515S10000492x485 M522x518S20348479x503S20340487x489S2e734506x483:1 year,M525x521S1f550501x506S1f558476x506S26500510x487S26510477x487S2f900511x479S2f900479x479:infinite",
+       "ipblocklist": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 M512x523S15a19488x500S15a11489x500S26520492x478",
+       "blocklist-userblocks": "M546x533S15a56519x474S2ff00482x483S2c601516x507S1f740521x487S1f711484x508 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M512x523S15a19488x500S15a11489x500S26520492x478",
+       "blocklist-timestamp": "M522x518S10050490x488S15a56495x482S20500478x483 M518x516S20b00483x503S15a37495x486S20340491x485",
+       "ipblocklist-submit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "createaccountblock": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505",
+       "blocklink": "M512x522S15a19488x499S15a11489x499S26520492x477",
+       "unblocklink": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M512x522S15a19488x499S15a11489x499S26520492x477",
+       "change-blocklink": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M512x522S15a19488x499S15a11489x499S26520492x477",
+       "contribslink": "M512x521S1f437488x491S22113493x480",
+       "blocklogpage": "M512x523S15a19488x500S15a11489x500S26520492x478 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "block-log-flags-nocreate": "M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505",
+       "movenotallowed": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M552x509S18520488x494S18528449x494S26626522x492 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 S38800464x496",
+       "cant-move-category-page": "M508x523S10040493x493S26500493x477 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M531x528S15a40511x472S15a48478x472S2d200505x505S2d211470x505 M552x509S18520488x494S18528449x494S26626522x492 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 S38800464x496",
+       "movelogpage": "M552x509S18520488x494S18528449x494S26626522x492 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "revertmove": "M527x539S10004512x461S1000c473x477S2b705513x498S2b714475x515S2fd04496x530",
+       "allmessagesname": "M524x514S11541500x487S1154a477x490",
+       "thumbnail-more": "M556x528S1dc20506x472S1dc28470x472S22b05532x504S22b13444x504",
+       "thumbnail_error": "M527x521S10059473x479S10051497x479S20e00494x491S22a04493x506 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M515x512S1f010486x488S2f900502x507 M523x564S15a20476x537S2ff00482x483S22b03490x519S16d10506x491S20500491x546 M547x518S30a00482x483S22124511x473S1c517522x483 S38900464x493 $1",
+       "thumbnail_error_remote": "M518x526S2ff00482x483S19a00487x506 M523x533S1c148482x467S1c110497x472S20e00494x512S26a06509x506S26a12477x506 M530x529S10018470x471S10641507x501S26505486x480S21600500x494 $1 S38700463x496\n$2",
+       "importlogpage": "M534x518S1852f466x482S18527486x483S2d60c505x505 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "tooltip-pt-userpage": "M507x523S15a28494x496S26500493x477 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-pt-mytalk": "M507x523S15a28494x496S26500493x477 M522x522S15a37478x479S10041485x492S20600500x492 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-pt-preferences": "M507x523S15a28494x496S26500493x477 M525x542S1c507500x517S20600478x519S2ff00482x483",
+       "tooltip-pt-watchlist": "M524x555S15a37494x531S1f550500x538S20e00480x542S26502462x541S30a00482x483 M518x610S14402481x556S1440a474x532S22b04496x580S30a00482x483 M532x561S18049468x526S18041507x526S20500486x550S20500504x550S30a00482x483 M518x591S10609493x555S10621482x571S21100495x542S2df20474x527S30a00482x483 S38700463x496 M508x523S10040493x493S26500493x477 M526x524S10e50511x494S26500510x476S10e58475x494S26510477x476",
+       "tooltip-pt-mycontris": "M508x523S10040493x493S26500493x477 M531x521S1f437507x491S22113512x480S22115469x480S1f43f472x491 M519x539S14402488x485S1440a481x461S22b04503x509",
+       "tooltip-pt-login": "M532x519S18240508x504S18248469x504S26500512x482S26510475x482 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38700463x496 M538x517S10021495x496S10029476x496S2880a516x483S28812463x483 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M513x532S15a48488x468S10a40498x486S26524490x517",
+       "tooltip-pt-logout": "M538x518S2a208496x483S15a37462x483S11530523x487S11551470x493",
+       "tooltip-pt-createaccount": "M532x519S18240508x504S18248469x504S26500512x482S26510475x482 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38700463x496 M538x517S10021495x496S10029476x496S2880a516x483S28812463x483 M534x542S2ff00482x483S26500520x505S20e00521x526S1f540493x518 M513x532S15a48488x468S10a40498x486S26524490x517",
+       "tooltip-ca-talk": "M522x522S15a37478x479S10041485x492S20600500x492 M527x520S18518474x505S10012497x502S2ef00507x480 M531x518S15a06499x506S1d151506x482S20a10469x488 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-edit": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M508x525S10004493x475S22a04494x510 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-addsection": "M526x527S14c49474x500S10012489x503S2c300500x473S21300475x480 M532x517S15a16505x505S2880f468x484S20e00491x495S1821d503x492 M524x525S15a3a477x493S15a41478x476S2d60a501x505S21100506x488",
+       "tooltip-ca-viewsource": "M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498 M520x525S26f20480x476S20313489x493S20311490x504 S38800464x496 M508x523S10040493x493S26500493x477 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M525x524S2ff00482x483S10e00507x494S26500511x474 M509x545S16d20492x456S17620493x480S10120493x497S14a20494x530",
+       "tooltip-ca-history": "M541x523S36d00479x492S15a00528x477S26504527x508 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M536x521S2ff00482x483S10011515x491S28108515x461 M508x525S10004493x475S22a04494x510 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tooltip-ca-protect": "M512x519S15a19488x482S15a11489x482S20600488x508 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-delete": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-move": "M552x509S18520488x494S18528449x494S26626522x492 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tooltip-search": "M546x525S2ff00482x483S16d10492x505S2e502519x502 {{SITENAME}}",
+       "tooltip-search-fulltext": "M546x525S2ff00482x483S16d10492x505S2e502519x502 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M536x521S2ff00482x483S10011515x491S28108515x461 M529x522S14e0a471x492S14e02498x497S20700491x478",
+       "tooltip-p-logo": "M525x524S2ff00482x483S10e00507x494S26500511x474 M519x514S1f548481x490S10002489x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-n-mainpage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M519x514S1f548481x490S10002489x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-n-mainpage-description": "M525x524S2ff00482x483S10e00507x494S26500511x474 M519x514S1f548481x490S10002489x487 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-n-portal": "M527x520S18518474x505S10012497x502S2ef00507x480 M539x530S14011508x506S15a07489x493S2b700507x480S19220488x472S2a20c461x470 S38700463x496 M554x520S2711e446x480S27106539x480S14c31504x486S14c39468x486 M508x523S10040493x493S26500493x477 M525x517S20350510x483S20350476x483S22a04511x502S22a14478x502 M532x519S18240508x504S18248469x504S26500512x482S26510475x482 S38700463x496 M513x542S1ce50491x458S22a00492x492S14c50487x511 M537x522S18507516x486S1850f461x495S2ff00482x483S14c30513x436S14c38458x445S26500518x471S26510463x480 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510",
+       "tooltip-n-recentchanges": "M519x539S14402488x485S1440a481x461S22b04503x509 M536x521S2ff00482x483S10011515x491S28108515x461 M536x533S35610482x482S10601513x505S21600525x500 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "tooltip-n-randompage": "M525x524S2ff00482x483S10e00507x494S26500511x474 M543x512S10021495x491S10029476x491S26506528x489S26512458x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-n-help": "M521x532S15a37480x506S14c51494x506S22a00504x489S18551494x468 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510",
+       "tooltip-t-whatlinkshere": "M519x539S14402488x485S1440a481x461S22b04503x509 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M518x552S19220497x533S14020483x502S19220497x480S18620495x449 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489 M521x525S1ce10499x476S1ce48479x476S20a00491x510 M525x525S10004510x475S22a04511x510S1000c476x475S22a14477x510",
+       "tooltip-feed-atom": "M511x544S1f720490x457S1fb20496x476S17620495x499S18d20490x519 M524x533S14402493x486S1440a476x511S22f20488x468 M536x521S2ff00482x483S10011515x491S28108515x461 M508x525S10004493x475S22a04494x510 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tooltip-t-upload": "M535x526S10e27502x481S10e09476x481S22a07491x512S22a17465x511S21b00527x475S21b00500x475 M520x523S14c19480x496S15a01497x497S20710483x477",
+       "tooltip-t-specialpages": "M519x539S14402488x485S1440a481x461S22b04503x509 M536x521S2ff00482x483S10011515x491S28108515x461 M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490 M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tooltip-ca-nstab-main": "M525x524S2ff00482x483S10e00507x494S26500511x474 M531x518S15a06499x506S1d151506x482S20a10469x488 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-nstab-user": "M525x524S2ff00482x483S10e00507x494S26500511x474 M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-nstab-project": "M525x524S2ff00482x483S10e00507x494S26500511x474 M539x530S14011508x506S15a07489x493S2b700507x480S19220488x472S2a20c461x470 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-nstab-image": "M525x524S2ff00482x483S10e00507x494S26500511x474 M520x523S14c19480x496S15a01497x497S20710483x477 M531x512S15a37501x488S1f550507x495S20e00487x499S26502469x498",
+       "tooltip-ca-nstab-template": "M525x524S2ff00482x483S10e00507x494S26500511x474 M510x522S15c10490x513S16d12490x495S22a04494x478",
+       "tooltip-ca-nstab-category": "M525x524S2ff00482x483S10e00507x494S26500511x474 M544x514S16d10505x494S16d18478x494S2df06524x487S2df1e456x487 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "tooltip-minoredit": "M536x514S26506521x499S11502472x498S20e00507x500S15a28465x487 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M515x512S1f010486x488S2f900502x507",
+       "tooltip-save": "M519x513S10e02489x498S20302482x488 M507x523S15a28494x496S26500493x477 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468",
+       "tooltip-rollback": "M508x531S10004493x470S2b705494x507 M531x522S15a48469x495S10e12478x503S2c300505x479S20600481x487 M527x539S10004512x461S1000c473x477S2b705513x498S2b714475x515S2fd04496x530 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M520x519S26504502x504S15a0a480x481S15a02493x487 M521x508S1f748479x493S1f740501x493 M515x523S1c520485x495S26500491x478",
+       "tooltip-summary": "M535x523S14c50508x492S14c58469x492S22520503x477S22520465x477 M529x528S11541487x496S11549471x501S20e00503x488S26507516x473 M554x523S14c40530x476S14c48446x492S26502515x489S26516468x507S20340495x489S20348487x506",
+       "patrol-log-page": "M518x560S2035a492x545S10e50501x522S31500482x483 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "patrol-log-header": "M508x525S10004493x475S22a04494x510 M518x560S2035a492x545S10e50501x522S31500482x483 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "log-show-hide-tag": "$1 M519x514S15a28482x487S11502489x498 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "filedeleteerror-short": "M527x532S1ea40473x511S1f540512x478S22a07497x504S2f700512x468 M520x523S14c19480x496S15a01497x497S20710483x477 M518x526S2ff00482x483S19a00487x506 S38700463x496 $1",
+       "ilsubmit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "metadata": "M520x523S14c19480x496S15a01497x497S20710483x477 M538x522S18517516x486S1851f461x495S2ff00482x483S14c00513x436S14c08461x445S26a00511x469S26a10459x478",
+       "exif-exposureprogram-1": "M545x536S1ce40504x486S1ce48473x464S27100505x521S27114455x500",
+       "namespacesall": "M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490",
+       "monthsall": "M538x518S15a21515x483S15a07463x482S15a01466x483S2a20c493x490",
+       "confirm_purge_button": "M515x525S17620499x475S14020485x495",
+       "confirm-watch-button": "M515x525S17620499x475S14020485x495",
+       "confirm-unwatch-button": "M515x525S17620499x475S14020485x495",
+       "brackets": "S38b00470x493 $1 S38b04470x493",
+       "fileduplicatesearch-submit": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "specialpages": "M516x546S10008501x516S1ce51488x489S20800485x513S22b20494x454 M531x516S15a37501x485S1f550507x492S20e00487x496S26a02470x489",
+       "specialpages-group-login": "M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38700463x496 M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495",
+       "specialpages-group-changes": "M536x534S35610482x483S10601513x506S21600525x501 M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 S38700463x496 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "htmlform-cloner-create": "M527x524S18548473x482S18540497x486S2880f507x504S22104500x476 M526x508S18510501x493S18518475x493",
+       "logentry-newusers-newusers": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $1 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 {{GENDER:$2|M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501}}",
+       "logentry-newusers-create2": "$1 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 {{GENDER:$2|M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501}} M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $3",
+       "logentry-newusers-autocreate": "M526x522S15a56499x510S11520503x479S20e00489x496S26a02474x489 M518x517S15a30482x489S1f750484x484S20500496x506S22a04505x495 $1 M531x531S14c30506x469S2a204508x503S2a21c470x503S14c38470x469 {{GENDER:$2|M532x519S20302493x485S2030a489x502S21100509x504S26900516x482S26910468x501}} M520x525S15a18480x490S10a02483x476S23100494x508S20e00500x494",
+       "log-name-managetags": "M519x514S15a28482x487S11502489x498 M530x529S10640507x503S10648479x489S26c08503x484S26c18470x471 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "log-name-tag": "M519x514S15a28482x487S11502489x498 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513",
+       "feedback-error-title": "M518x526S2ff00482x483S19a00487x506",
+       "searchsuggest-search": "M546x525S2ff00482x483S16d10492x505S2e502519x502",
+       "api-error-mustbeloggedin": "M539x579S10e27506x534S10e09480x534S22a07495x565S22a17469x564S21b00531x528S21b00504x528S30a00482x483 M520x576S14c19480x549S15a01497x550S20710483x530S30a00482x483 S38700463x496 M516x519S10651485x482S22a04493x504 M538x521S2a200497x480S20b00462x508S11530523x482S15a37462x483S11551470x493 S38800464x496",
+       "api-error-unclassified": "M536x518S2ff00482x483S15a11513x486S28108513x453 M518x526S2ff00482x483S19a00487x506 M528x529S10030509x499S10038477x499S2a200505x472S2a218473x472",
+       "api-error-unknownerror": "M536x518S2ff00482x483S15a11513x486S28108513x453 M518x526S2ff00482x483S19a00487x506 S38700463x496 $1",
+       "expandtemplates": "M554x524S14c40530x477S14c48446x493S26506515x490S26512468x508S20340495x490S20348487x507 M510x522S15c10490x513S16d12490x495S22a04494x478",
+       "expand_templates_ok": "M515x525S17620499x475S14020485x495",
+       "log-name-pagelang": "M521x532S10609498x496S10621487x512S21100500x483S2df20479x468 M563x515S1dc50505x485S1dc58473x485S26606533x499S26612438x499 M518x536S15a37483x465S18550493x476S15a37483x509S15a51486x513"
+}
index 79b1fca..6a50141 100644 (file)
        "actionthrottled": "Aición llendada",
        "actionthrottledtext": "Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.\nPor favor vuelvi intentalo nunos minutos.",
        "protectedpagetext": "Esta páxina ta candada pa torgar ediciones y otres aiciones.",
-       "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina:",
-       "viewyourtext": "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
+       "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina.",
+       "viewyourtext": "Pues ver y copiar la fonte de <strong>les tos ediciones</strong> d'esta páxina.",
        "protectedinterface": "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.\nP'amestar o cambiar les traducciones de toles wikis, por favor usa [//translatewiki.net/translatewiki.net], el proyeutu de llocalización de MediaWiki.",
        "editinginterface": "<strong>Avisu:</strong> Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz del programa.\nLos cambeos nesta páxina afeutarán al aspeutu de la interfaz pa otros usuarios d'esta wiki.",
        "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
-       "cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta inxerta {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
+       "cascadeprotected": "Esta páxina ta protexida d'ediciones porque ta trescluída {{PLURAL:$1|na siguiente páxina, protexida|nes siguientes páxines, protexíes}} cola opción «en cascada» activada:\n$2",
        "namespaceprotected": "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
        "customcssprotected": "Nun tienes permisu pa editar esta páxina CSS porque contien preferencies personales d'otru usuariu.",
        "customjsprotected": "Nun tienes permisu pa editar esta páxina de JavaScript porque contien preferencies personales d'otru usuariu.",
        "createacct-benefit-body2": "{{PLURAL:$1|páxina|páxines}}",
        "createacct-benefit-body3": "{{PLURAL:$1|collaborador|collaboradores}} de recién",
        "badretype": "Les contraseñes qu'escribisti nun concuayen.",
+       "usernameinprogress": "Yá ta creándose una cuenta pa esti nome d'usuariu.\nEspera.",
        "userexists": "El nome d'usuariu conseñáu yá ta usándose.\nPor favor escueyi un nome diferente.",
        "loginerror": "Error d'aniciu de sesión",
        "createacct-error": "Error de creación de cuenta",
        "readonlywarning": "'''Avisu: La base de datos ta candada por mantenimientu, polo que nun vas poder guardar les tos ediciones nestos momentos.'''\nSeique habríes copiar y apegar el testu nun ficheru de testu y guardalu pa intentalo más sero.\n\nL'alministrador que la candó dio esta esplicación: $1",
        "protectedpagewarning": "'''Avisu: Esta páxina ta candada pa que sólo los alministradores puean editala.'''\nLa cabera entrada del rexistru s'ufre darréu pa referencia:",
        "semiprotectedpagewarning": "'''Nota:''' Esta páxina ta candada pa que nun puean editala namái que los usuarios rexistraos.\nLa cabera entrada del rexistru s'ufre darréu pa referencia:",
-       "cascadeprotectedwarning": "'''Avisu:''' Esta páxina ta candada pa que namái los alministradores puedan editala porque ta incluída {{PLURAL:$1|na siguiente páxina protexida|nes siguientes páxines protexíes}} en cascada:",
+       "cascadeprotectedwarning": "<strong>Avisu:</strong> Esta páxina ta candada pa que namái los alministradores puedan editala porque ta trescluída {{PLURAL:$1|na siguiente páxina protexida|nes siguientes páxines protexíes}} en cascada:",
        "titleprotectedwarning": "'''Avisu: Esta páxina ta candada pa que necesite [[Special:ListGroupRights|permisos especiales]] pa creala.'''\nLa cabera entrada del rexistru s'ufre darréu pa referencia:",
        "templatesused": "{{PLURAL:$1|Plantía usada|Plantíes usaes}} nesta páxina:",
        "templatesusedpreview": "{{PLURAL:$1|Plantía usada|Plantíes usaes}} nesta vista previa:",
        "search-category": "(categoría $1)",
        "search-file-match": "(casa col conteníu del ficheru)",
        "search-suggest": "Quixisti dicir: $1",
+       "search-rewritten": "Amosando los resultaos pa $1. O meyor, buscar $2.",
        "search-interwiki-caption": "Proyeutos hermanos",
        "search-interwiki-default": "Resultaos de $1:",
        "search-interwiki-more": "(más)",
        "rows": "Fileres:",
        "columns": "Columnes:",
        "searchresultshead": "Buscar",
-       "stub-threshold": "Llímite superior pa considerar como <a href=\"#\" class=\"stub\">enllaz a entamu</a> (bytes):",
+       "stub-threshold": "Llende superior pa dar formatu d'entamu a un enllaz ($1):",
+       "stub-threshold-sample-link": "exemplu",
        "stub-threshold-disabled": "Desactivao",
        "recentchangesdays": "Díes que s'amuesen nos cambios recientes:",
        "recentchangesdays-max": "(máximo $1 {{PLURAL:$1|día|díes}})",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuariu|ususarios}} vixilando]",
-       "rc_categories": "Llímite pa les categoríes (dixebrar con \"|\")",
-       "rc_categories_any": "Cualesquiera",
+       "rc_categories": "Llendar a les categoríes (dixebrar con \"|\"):",
+       "rc_categories_any": "Cualquiera de les esbillaes",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} dempués del cambiu",
        "newsectionsummary": "/* $1 */ nueva seición",
        "rc-enhanced-expand": "Amosar detalles",
        "upload-too-many-redirects": "La URL contenía demasiaes redireiciones",
        "upload-http-error": "Hebo un error HTTP: $1",
        "upload-copy-upload-invalid-domain": "La xubida de copies nun ta disponible dende esti dominiu.",
+       "upload-dialog-title": "Xubir ficheru",
+       "upload-dialog-error": "Hebo un error",
+       "upload-dialog-warning": "Hebo un avisu",
+       "upload-dialog-button-cancel": "Encaboxar",
+       "upload-dialog-button-done": "Fecho",
+       "upload-dialog-button-save": "Guardar",
+       "upload-dialog-button-upload": "Xubir",
+       "upload-dialog-label-select-file": "Seleiciona un ficheru",
+       "upload-dialog-label-infoform-title": "Detalles",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descripción",
+       "upload-dialog-label-usage-title": "Usu",
+       "upload-dialog-label-usage-filename": "Nome del ficheru",
        "backend-fail-stream": "Nun se pudo tresmitir el ficheru $1.",
        "backend-fail-backup": "Nun se pudo facer copia de seguridá del ficheru $1.",
        "backend-fail-notexists": "El ficheru $1 nun esiste.",
        "linksearch-pat": "Patrón de busca:",
        "linksearch-ns": "Espaciu de nomes:",
        "linksearch-ok": "Buscar",
-       "linksearch-text": "Se puen usar comodinos como \"*.wikipedia.org\".\nNecesita polo menos un dominiu de primer nivel, como \"*.org\".<br />\n{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: <code>$1</code> (el predetermináu ye http:// si nun se conseña dengún protocolu).",
+       "linksearch-text": "Se puen usar comodinos como \"*.wikipedia.org\".\nNecesita polo menos un dominiu de primer nivel, como \"*.org\".<br />\n{{PLURAL:$2|Protocolu almitíu|Protocolos almitíos}}: $1 (el predetermináu ye http:// si nun se conseña dengún protocolu).",
        "linksearch-line": "$1 enllaciáu dende $2",
        "linksearch-error": "Los comodinos namái puen apaecer al entamu del nome del güéspede.",
        "listusersfrom": "Amosar usuarios emprimando dende:",
        "emailuser": "Manda-y un corréu a esti usuariu",
        "emailuser-title-target": "Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}",
        "emailuser-title-notarget": "Unviar un corréu electrónicu a un usuariu",
-       "emailpage": "Envigar un corréu electrónicu a un usuariu",
        "emailpagetext": "Pues usar el formulariu de más abaxo pa unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}.\nLa direición de corréu electrónicu qu'especificasti nes [[Special:Preferences|tos preferencies d'usuariu]] va apaecer como la direición \"Dende\" del corréu, pa que'l que lo recibe seya quien a respondete direutamente a ti.",
        "defemailsubject": "Corréu electrónicu del usuariu «$1» de {{SITENAME}}",
        "usermaildisabled": "Corréu del usuariu desactiváu",
        "emailccsubject": "Copia del to mensaxe a $1: $2",
        "emailsent": "Corréu unviáu",
        "emailsenttext": "Unviose'l to mensaxe de corréu.",
-       "emailuserfooter": "Esti corréu electrónicu unviólu $1 a $2 per aciu de la función «{{int:emailpage}}» de {{SITENAME}}.",
+       "emailuserfooter": "Esti corréu electrónicu unviólu $1 a $2 per aciu de la función «{{int:emailuser}}» de {{SITENAME}}.",
        "usermessage-summary": "Dexar un mensaxe del sistema.",
        "usermessage-editor": "Mensaxería del sistema",
        "watchlist": "Llista de siguimientu",
        "watchlistanontext": "Por favor, anicia sesión pa ver o editar entraes de la to llista de siguimientu.",
        "watchnologin": "Non identificáu",
        "addwatch": "Amestar a la llista de siguimientu",
-       "addedwatchtext": "La páxina \"[[:$1]]\" s'amestó a la to [[Special:Watchlist|llista de llista de siguimientu]].\nLos cambeos futuros nesta páxina y na so páxina d'alderique asociada apaecerán allí.",
+       "addedwatchtext": "«[[:$1]]» y la so páxina d'alderique amestáronse a la to [[Special:Watchlist|llista de siguimientu]].",
        "addedwatchtext-short": "Amestóse la páxina «$1» a la to llista de siguimientu.",
        "removewatch": "Desaniciar de la llista de siguimientu",
-       "removedwatchtext": "La páxina \"[[:$1]]\" desanicióse de la [[Special:Watchlist|to llista de siguimientu]].",
+       "removedwatchtext": "«[[:$1]]» y la so páxina d'alderique desaniciáronse de la to [[Special:Watchlist|llista de siguimientu]].",
        "removedwatchtext-short": "Desanicióse la páxina «$1» de la to llista de siguimientu.",
        "watch": "Vixilar",
        "watchthispage": "Vixilar esta páxina",
        "changecontentmodel-success-title": "Cambióse'l modelu de conteníu",
        "changecontentmodel-success-text": "Cambióse'l tipu de conteníu de [[:$1]].",
        "changecontentmodel-cannot-convert": "El conteníu de [[:$1]] nun puede convertise a un tipu de $2.",
-       "changecontentmodel-title-cantexist": "Nun ye posible tener una páxina en $1.",
        "changecontentmodel-nodirectediting": "El modelu de conteníu $1 nun tien encontu pa edición direuta",
        "log-name-contentmodel": "Rexistru de cambios del modelu de conteníu",
        "log-description-contentmodel": "Socesos rellacionaos colos modelos de conteníu d'una páxina",
        "protect-locked-blocked": "Nun pues camudar los niveles de proteición mentes teas bloquiáu. Esta\nye la configuración actual de la páxina '''$1''':",
        "protect-locked-dblock": "Los niveles de proteición nun puen ser camudaos pol mor d'un candáu activu de\nla base de datos. Esta ye la configuración actual de la páxina '''$1''':",
        "protect-locked-access": "La to cuenta nun tien permisu pa camudar los niveles de proteición de páxina.\nEsta ye la configuración actual pa la páxina '''$1''':",
-       "protect-cascadeon": "Esta páxina ta protexida nestos momentos porque ta incluída {{PLURAL:$1|na siguiente páxina, que tien|nes siguientes páxines, que tienen}} activada la proteición en cascada.\nLos cambios nel nivel de proteición d'esta páxina nun afeutarán a la proteición en cascada.",
+       "protect-cascadeon": "Esta páxina ta protexida nestos momentos porque ta trescluída {{PLURAL:$1|na siguiente páxina, que tien|nes siguientes páxines, que tienen}} activada la proteición en cascada.\nLos cambios nel nivel de proteición d'esta páxina nun afeutarán a la proteición en cascada.",
        "protect-default": "Permitir tolos usuarios",
        "protect-fallback": "Permitir namái usuarios con permisu \"$1\"",
        "protect-level-autoconfirmed": "Permitir namái usuarios autoconfirmaos",
        "undeletepagetext": "{{PLURAL:$1|La siguiente páxina foi esborrada pero tovía ta nel archivu y pue ser restauráu|Les $1 páxines siguientes foron esborraes pero tovía tán nel archivu y puen ser restauraes}}. L'archivu pue ser purgáu periódicamente.",
        "undelete-fieldset-title": "Restaurar revisiones",
        "undeleteextrahelp": "Pa restaurar l'historial ensembre de la páxina, desmarca toles caxelles y calca en '''''{{int:undeletebtn}}'''''.\nPa realizar una restauración selectiva, seleiciona les caxelles de la revisión que quies restaurar y calca en '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revisión archivada|revisiones archivaes}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisión desaniciada|revisiones desaniciaes}}",
        "undeletehistory": "Si restaures la páxina, restauraránse toles revisiones al historial.\nSi se creó una páxina col mesmu nome dende que fuera esborrada, les revisiones restauraes van apaecer nel historial anterior.",
        "undeleterevdel": "Nun se fadrá la restauración si ésta provoca un esborráu parcial de la páxina cimera o de la revisión\ndel archivu. Nestos casos, tienes que desmarcar o amosar les revisiones esborraes más recién.",
        "undeletehistorynoadmin": "Esta páxina foi esborrada. El motivu del esborráu amuésase\nnel resume d'embaxo, amás de detalles de los usuarios qu'editaron esta páxina enantes\nde ser esborrada. El testu actual d'estes revisiones esborraes ta disponible namái pa los alministradores.",
        "spam_reverting": "Revirtiendo a la cabera versión que nun contien enllaces a $1",
        "spam_blanking": "Toles revisiones teníen enllaces a $1; dexando en blanco",
        "spam_deleting": "Toles revisiones teníen enllaces a $1, desaniciando",
-       "simpleantispam-label": "Comprobación anti-spam.\n¡'''NUN''' rellenes esto!",
+       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>Nun</strong> rellenes esto!",
        "pageinfo-title": "Información sobro \"$1\"",
        "pageinfo-not-current": "Sentimoslo, ye imposible dar esta información de les revisiones antigües.",
        "pageinfo-header-basic": "Información básica",
        "htmlform-cloner-create": "Amestar más",
        "htmlform-cloner-delete": "Desaniciar",
        "htmlform-cloner-required": "Necesítase polo menos un valor.",
+       "htmlform-title-badnamespace": "[[:$1]] nun ta nel espaciu de nomes \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "«$1» nun ye un títulu de páxina que pueda crease",
+       "htmlform-title-not-exists": "[[:$1]] nun esiste.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nun esiste.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nun ye un nome d'usuariu válidu.",
        "sqlite-has-fts": "$1 con sofitu pa busca de testu completu",
        "sqlite-no-fts": "$1 ensin sofitu pa busca de testu completu",
        "logentry-delete-delete": "$1 {{GENDER:$2|desanició}} la páxina $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|creó}} la cuenta d'usuariu $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|creó}} la cuenta d'usuariu $3 y la contraseña unvióse per corréu electrónicu",
        "logentry-newusers-autocreate": "La cuenta $1 {{GENDER:$2|creóse}} automáticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|treslladó}} les preferencies de protección de $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3 dende $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5",
        "special-characters-title-endash": "guión curtiu",
        "special-characters-title-emdash": "guión llargu",
        "special-characters-title-minus": "signu menos",
+       "mw-widgets-dateinput-no-date": "Nenguna data seleicionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la páxina inda nun esiste",
        "mw-widgets-titleinput-description-redirect": "redirixir a $1"
 }
index d5fe7a2..e00af38 100644 (file)
        "linksearch-pat": "खोजय खर्तीन पाठ:",
        "linksearch-ns": "नामस्थान:",
        "linksearch-ok": "खोजा जाय",
-       "linksearch-text": "\"*.wikipedia.org\" जैसन वाईल्ड-कार्ड्स प्रयोग कै सका जात है।\nकम-से-कम \".org\" जैसन कवनो top-level डोमेन कय आवश्यकता है।<br />\nस्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: <code>$1</code> (यदि कवनो प्रोटोकॉल ना दै जाए तव http:// कय प्रयोग कै सका जात है)",
+       "linksearch-text": "\"*.wikipedia.org\" जैसन वाईल्ड-कार्ड्स प्रयोग कै सका जात है।\nकम-से-कम \".org\" जैसन कवनो top-level डोमेन कय आवश्यकता है।<br />\nस्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: $1 (यदि कवनो प्रोटोकॉल ना दै जाए तव http:// कय प्रयोग कै सका जात है)",
        "linksearch-line": "$2 में से $1 जोडान है",
        "linksearch-error": "वाईल्डकार्ड्स होस्टनाम कय खालि शुरू में आइ सकत है।",
        "listusersfrom": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
index dcc2dbc..cca3b29 100644 (file)
        "passwordreset": "Parolu yenilə",
        "passwordreset-text-one": "Parolunuzu sıfırlamaq üçün bu formanı doldurun.",
        "passwordreset-text-many": "{{PLURAL:$1|Parolunuzu sıfırlamaq üçün sahələrdən birini doldurun.}}",
-       "passwordreset-legend": "Parolu yenilə",
        "passwordreset-disabled": "Yenidən qurulma parolu bu vikidə işləmir",
        "passwordreset-emaildisabled": "Bu wiki-dəki e-poçt özəllikləri bağlandı.",
        "passwordreset-username": "İstifadəçi adı:",
        "recentchangesdays-max": "Maksimum $1 {{PLURAL:$1|gün|gün}}",
        "recentchangescount": "Son dəyişikliklərdə başlıq sayı:",
        "prefs-help-recentchangescount": "Buraya yeni dəyişikliklər, səhifələrin və jurnalların tarixçəsi daxildir.",
-       "savedprefs": "Seçiminiz qeyd edildi.",
+       "savedprefs": "Seçiminiz qəbul edildi.",
        "timezonelegend": "Vaxt zonası:",
        "localtime": "Yerli vaxt:",
        "timezoneuseserverdefault": "Susmaya görə serverdən istifadə ($1)",
        "action-reupload": "Mövcud faylın yeni versiyasının yüklənməsi",
        "action-upload_by_url": "URL ünvanından bu faylı yükləmək",
        "action-writeapi": "API yazıdan istifadə",
-       "action-delete": "bu səhifəni sil",
+       "action-delete": "bu səhifəni silmək",
        "action-deleterevision": "bu yoxlamaı ləğv et",
        "action-deletedhistory": "səhifənin silinmə tarixinə baxmaq",
        "action-browsearchive": "Silinmiş səhifələri axtar",
        "fewestrevisions": "Az dəyişiklik edilmiş məqalələr",
        "nbytes": "$1 {{PLURAL:$1|bayt|bayt}}",
        "ncategories": "$1 {{PLURAL:$1|kateqoriya|kateqoriya}}",
-       "nlinks": "$1 {{PLURAL:$1|keçid|keçidlər}}",
+       "nlinks": "$1 {{PLURAL:$1|keçid|keçid}}",
        "nmembers": "$1 {{PLURAL:$1|üzv|üzv}}",
        "nrevisions": "$1 dəyişiklik",
-       "nviews": "$1 baxış",
        "nimagelinks": "$1 səhifədə istifadə olunmur",
        "ntransclusions": "$1 səhifədə istifadə olunur",
        "specialpage-empty": "Bu səhifə boşdur.",
        "listgrouprights-removegroup-self-all": "Bütün qrupları öz hesabından çıxara bilər",
        "mailnologin": "Ünvan yoxdur",
        "emailuser": "İstifadəçiyə e-məktub göndər",
-       "emailpage": "İstifadəçiyə e-məktub yolla",
        "defemailsubject": "\"$1\" adlı istifadəçidən {{SITENAME}} e-məktubu",
        "usermaildisabled": "İstifadəçi e-maili işləmir",
        "noemailtitle": "E-məktub ünvanı yoxdur",
        "emailmessage": "Mesaj:",
        "emailsend": "Göndər",
        "emailccme": "Məktubun surətini elektron ünvanıma göndər.",
-       "emailccsubject": " $1: $2-yə olan ismarıclarınızın surəti",
+       "emailccsubject": "$1 adlı istifadəçiyə olan ismarıcınızın surəti: $2",
        "emailsent": "E-məktub göndərildi",
        "emailsenttext": "E-məktub mesajınız göndərildi.",
        "usermessage-summary": "Sistem mesajı qoyun.",
        "deletereasonotherlist": "Digər səbəb",
        "deletereason-dropdown": "*Əsas silmə səbəbi\n** Müəllif istəyi\n** Müəllif hüququ pozuntusu\n** Vandalizm",
        "delete-edit-reasonlist": "Silmə səbəblərinin redaktəsi",
+       "delete-toobig": "Bu səhifə $1-dən artıq redaktə ilə çox böyük redaktə tarixçəsinə malikdir.\n\"{{SITENAME}}\" saytının fəaliyyətində problemlər yaratmamaq üçün bu cür səhifələrin silinməsi qadağandır.",
        "rollback": "əvvəlki halına qaytar",
        "rollbacklink": "əvvəlki halına qaytar",
        "rollbacklinkcount": "$1 {{PLURAL:$1|dəyişikliyi|dəyişikliyi}} geri qaytar",
        "blockipsuccesssub": "Bloklandı",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bloklanıb.<br />\nBlokları yoxlamaq üçün [[Special:BlockList|bloklama siyahısına]] baxın.",
        "ipb-blockingself": "Özünü bloklayacaqsınız.! Bunu etmək istədiyinizdən əminsinizmi?",
-       "ipb-confirmhideuser": "İstifadəçini bloklamaq və redaktə siyahısından onun adını silmək üzərəsiniz. Bunu etmək istədiyinizdən əminsinizmi?",
+       "ipb-confirmhideuser": "Siz \"istifadəçini gizlə\" bəndini aktiv edərək istifadəçini bloklamaq üzrəsiniz. Bu halda istifadəçinin adı bütün siyahılarda və qeydiyyat jurnallarında görünməyəcək. Bunu etmək istədiyinizdən əminsinizmi?",
        "ipb-edit-dropdown": "Bloklama səbəblərini redaktə et",
        "ipb-unblock-addr": "$1 üzərindəki blok götürüldü",
        "ipb-unblock": "Bloku götür",
        "blocklink": "blokla",
        "unblocklink": "bloklamanı kənarlaşdır",
        "change-blocklink": "bloklamanı dəyişdir",
-       "contribslink": "Köməklər",
+       "contribslink": "töhfələr",
        "emaillink": "e-məktub göndər",
        "autoblocker": "Avtomatik olaraq bloklanmısınız. Çünki, qısa müddət əvvəl sizin IP-ünvanınız \"[[User:$1|$1]]\" tərəfindən istifadə edilmişdir.\n$1 adlı istifadəçinin bloklanma səbəbi: \"$2\"",
        "blocklogpage": "Bloklama qeydləri",
index 6fcdcba..a5b4d78 100644 (file)
                        "아라",
                        "Koroğlu",
                        "Baloch Afghanistan",
-                       "Macofe"
+                       "Macofe",
+                       "Sadiqr",
+                       "Mjbmr",
+                       "Alp Er Tunqa"
                ]
        },
-       "tog-underline": "باغلانتیلارین آلتینی خطله:",
+       "tog-underline": "باغلانتیلارین آلتینی خطله:",
        "tog-hideminor": "سوْن دییشیکلیکلرده کیچیکلری گیزلت",
        "tog-hidepatrolled": "سوْن دییشیکلیکلرده نظارتلنمیش دَییشیکلیکلری گیزلت",
-       "tog-newpageshidepatrolled": "نظارتلنمیش صحیفه‌لری یئنی صحیفه‌لر لیستین‌دن گیزلت",
-       "tog-extendwatchlist": "گؤزله‌دیکلری، یالنیز یئنیلر اۆچون یوْخ، بۆتون دییشیکلیکلری گؤسترمک اۆچون، گئنیشلندیر.",
-       "tog-usenewrc": "دَییشیکلیکلری سون دَییشیکلیکلر صحیفه‌سینده ایزله‌دیکلر صحیفه‌سینده گروپ‌لا (جاوااسکریپت لازیم‌دیر)",
-       "tog-numberheadings": "باشلیقلاری اوْتوماتیک نۆمره‌له",
-       "tog-showtoolbar": "دÙ\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ú© Ø¢Ø±Ø§Ø¬-Ú\86Û\87بÙ\88غÙ\88Ù\86Ù\88 Ú¯Ø¤Ø³ØªØ±",
-       "tog-editondblclick": "صحیفه‌‌لری ایکی کیلیک‌ده دَییشدیر",
-       "tog-editsectiononrightclick": "بؤلوم‌لرین دَییشدیرمه‌سینی، باشلیقلارین اۆزرینده ساغ‌کلیک ائتمک‌له ایجازه وئر",
-       "tog-watchcreations": "ياراتدیغیم صحیفه‌‌لری و يۆکله‌دیگیم فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
-       "tog-watchdefault": "دَییشدیردیگیم صحیفه‌‌لری و فايل‌لاری، گؤزله‌دیکلریمه آرتیر",
-       "tog-watchmoves": "داشیدیغیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
-       "tog-watchdeletion": "سیلدیگیم صحیفه‌‌لری و فايل‌لاری گؤزله‌دیکلریمه آرتیر",
+       "tog-newpageshidepatrolled": "یوْخلانمیش صفحه‌لری یئنی صفحه‌لر لیستیندن گیزلت",
+       "tog-extendwatchlist": "ایزله‌دیک‌لری، یالنیز یئنی‌لر اۆچون یوْخ، بۆتون دییشیک‌لیک‌لری گؤرستمک اۆچون، گنیشلندیر.",
+       "tog-usenewrc": "دَییشیک‌لیک‌لری سوْن دَییشیک‌لیک‌لر صفحه‌سینده ایزله‌دیک‌لر صفحه‌سینده گروپ‌لا (جاوااسکریپت گرک‌دیر)",
+       "tog-numberheadings": "باشلیقلاری اوْتوماتیک نۆمره‌له",
+       "tog-showtoolbar": "دÙ\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ú© Ø¢Ø±Ø§Ø¬-Ú\86Û\87بÙ\88غÙ\88Ù\86Ù\88 Ú¯Ø¤Ø±Ø³Øª",
+       "tog-editondblclick": "صفحه‌‌لری ایکی کیلیک‌ده دَییشدیر",
+       "tog-editsectiononrightclick": "بؤلوم‌لرین دَییشدیرمه‌سینی، باشلیق‌لارین اۆستونده ساغ‌کلیک ائتمک‌‌له ایجازه وئر",
+       "tog-watchcreations": "ياراتدیغیم صفحه‌‌لری و يۆکله‌دیگیم فايل‌لاری، ایزله‌دیک‌لریمه آرتیر",
+       "tog-watchdefault": "دَییشدیردیگیم صفحه‌‌لری و فايل‌لاری، ایزله‌دیک‌لریمه آرتیر",
+       "tog-watchmoves": "داشیدیغیم صفحه‌‌لری و فايللاری ایزله‌دیکلریمه آرتیر",
+       "tog-watchdeletion": "سیلدیگیم صفحه‌‌لری و فايللاری ایزله‌دیکلریمه آرتیر",
        "tog-watchrollback": "قایتاریلمیش صفحه لری ایزلدیکلریمه آرتیر",
-       "tog-minordefault": "وارساییلان اوْلاراق، بۆتون دَییشدیر‌مه‌لری کیچیک کیمی نیشانلا",
-       "tog-previewontop": "اؤÙ\86â\80\8cگؤسترÛ\8cØ´Û\8cØ\8c Ù\8aازÙ\85اÙ\82 Ù\82Û\87تÙ\88سÙ\88Ù\86داÙ\86 Ù\82اباÙ\82 Ú¯Ø¤Ø³ØªØ±",
-       "tog-previewonfirst": "اÛ\8cÙ\84Ú© Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87â\80\8cدÙ\87 Ø§Ø¤Ù\86â\80\8cگؤسترÛ\8cØ´Û\8c Ú¯Ø¤Ø³ØªØ±",
-       "tog-enotifwatchlistpages": "گؤزله‌دیکلریم‌ده اولان بیر صحیفه یا فایل دَییشدیریلنده، منه ایمیل گؤندر",
+       "tog-minordefault": "دفالت اوْلاراق، بۆتون دَییشدیر‌مه‌لری کیچیک کیمی علامتله",
+       "tog-previewontop": "اؤÙ\86â\80\8cگؤسترÛ\8cØ´Û\8cØ\8c Ù\8aازÙ\85اÙ\82 Ù\82Û\87تÙ\88سÙ\88Ù\86داÙ\86 Ù\82اباÙ\82 Ú¯Ø¤Ø±Ø³Øª",
+       "tog-previewonfirst": "اÛ\8cÙ\84Ú© Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\85Ù\87â\80\8cدÙ\87 Ø§Ø¤Ù\86â\80\8cگؤسترÛ\8cØ´Û\8c Ú¯Ø¤Ø±Ø³Øª",
+       "tog-enotifwatchlistpages": "ایزله‌دیکلریم‌ده اولان بیر صفحه یا فایل دَییشدیریلن‌ده، منه ایمیل گؤندر",
        "tog-enotifusertalkpages": "دانیشیق صحیفه‌‌م دَییشدیریلنده منه ایمیل گؤندر",
        "tog-enotifminoredits": "صحیفه‌لرده و فایل‌لاردا کیچیک دَییشیکلیکلر اولسا دا منه ایمیل گؤندر",
        "tog-enotifrevealaddr": "منیم ایمیل آدرسیمی بیلدیریش ایمیل‌لرینده گؤستر",
        "tog-oldsig": "ایندی‌کی ایمضا:",
        "tog-fancysig": "ایمضانی ویکی-متن کیمی نظره آل (اوْتوماتیک باغلانتی‌سیز)",
        "tog-uselivepreview": "دیری اؤن‌گؤستریش ایشلت (تِست مرحله‌سینده)",
-       "tog-forceeditsummary": "دَییشیکلیک قیساسی بوش قالاندا منی بیلدیر",
-       "tog-watchlisthideown": "منیم دَییشیکلیکلریمی گؤزله‌دیکلردن گیزلت",
-       "tog-watchlisthidebots": "بوْت دَییشیکلیکلرینی گؤزله‌دیکلردن گیزلت",
-       "tog-watchlisthideminor": "کیچیک دَییشیکلیکلری گؤزله‌دیکلردن گیزلت",
-       "tog-watchlisthideliu": "Ú¯Û\8cرÙ\85Û\8cØ´ Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÛ\8cÙ\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84رÛ\8cÙ\86Û\8c Ú¯Ø¤Ø²Ù\84Ù\87â\80\8cدÛ\8cÚ©لردن گیزلت",
-       "tog-watchlisthideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÛ\8cÙ\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84رÛ\8cÙ\86Û\8c Ú¯Ø¤Ø²Ù\84Ù\87â\80\8cدÛ\8cÚ©لردن گیزلت",
+       "tog-forceeditsummary": "دَییشیکلیک قیساسی بوْش قالاندا منه بیلیندیر",
+       "tog-watchlisthideown": "منیم دَییشیک‌لیک‌لریمی ایزله‌دیک‌لردن گیزلت",
+       "tog-watchlisthidebots": "بوْت دَییشیک‌لیک‌لرینی ایزله‌دیک‌لردن گیزلت",
+       "tog-watchlisthideminor": "کیچیک دَییشیک‌لیک‌لری ایزله‌دیک‌لردن گیزلت",
+       "tog-watchlisthideliu": "Ú¯Û\8cرÙ\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84رÛ\8cÙ\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ©â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø§Û\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©â\80\8cلردن گیزلت",
+       "tog-watchlisthideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84رÛ\8cÙ\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ©â\80\8cÙ\84رÛ\8cÙ\86Û\8c Ø§Û\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©â\80\8cلردن گیزلت",
        "tog-watchlisthidepatrolled": "نظارتلنمیش دَییشیکلیکلری گؤزله‌دیکلردن گیزلت",
-       "tog-ccmeonemails": "Ø¢Û\8cرÛ\8c Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÙ\87 Ú¯Ø¤Ù\86دردÛ\8cÚ¯Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cÙ\84رÛ\8cÙ\86 Ú©Ù\88Ù\92Ù¾Û\8cÙ\84رÛ\8cÙ\86Û\8c Ù\85Ù\86Ù\87 Ú¯Ø¤Ù\86در",
-       "tog-diffonly": "مۇقاییسه‌لر آلیتندا صحیفه‌لرین ایچینده‌کیلرینی گؤسترمه",
-       "tog-showhiddencats": "Ú¯Û\8cزÙ\84Û\8c Ø¨Ø¤Ù\84Ù\85Ù\87â\80\8cÙ\84رÛ\8c Ú¯Ø¤Ø³ØªØ±",
-       "tog-norollbackdiff": "Ù\82اÛ\8cتاراÙ\86داÙ\86 Ø³Ù\88Ù\86را Ù\85Ù\88Ù\82اÛ\8cÛ\8cسÙ\87 Ú¯Ø¤Ø³ØªØ±مه",
-       "tog-useeditwarning": "دَییشدیرمه صحیفه‌سیندن چیخاندا، قئید ائدیلمه‌میش دَییشدیرمه اوْلسا، منه هشدار وئر",
+       "tog-ccmeonemails": "باشÙ\82ا Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84رÙ\87 Ú¯Ø¤Ù\86دردÛ\8cÚ¯Û\8cÙ\85 Ø§Û\8cÙ\85Û\8cÙ\84â\80\8cÙ\84رÛ\8cÙ\86 Ú©Ù\88Ù\92Ù¾Û\8câ\80\8cÙ\84رÛ\8cÙ\86Û\8c Ù\85Ù\86Ù\87 Ú¯Ø¤Ù\86در",
+       "tog-diffonly": "مقایسه‌لر آلیتندا صفحه‌لرین ایچینده‌کی‌لرینی گؤرستمه",
+       "tog-showhiddencats": "Ú¯Û\8cزÙ\84Û\8c Ø¨Ø¤Ù\84Ù\85Ù\87â\80\8cÙ\84رÛ\8c Ú¯Ø¤Ø±Ø³Øª",
+       "tog-norollbackdiff": "Ù\82اÛ\8cتاراÙ\86داÙ\86 Ø³Ù\88Ù\92Ù\86را Ù\85Ù\82اÛ\8cسÙ\87 Ú¯Ø¤Ø±Ø³Øªمه",
+       "tog-useeditwarning": "دَییشدیرمه صفحه‌سیندن چیخاندا، ذخیره اولونمامیش دَییشدیرمه اوْلسا، منه تذکر وئر",
        "tog-prefershttps": "هر زامان گیریش ائتمگه امن باغلانتی ایشلت",
        "underline-always": "هر زامان",
        "underline-never": "هئچ واخت",
@@ -86,7 +89,7 @@
        "june": "ژوئن",
        "july": "ژولای",
        "august": "آقوست",
-       "september": "سئپتامبر",
+       "september": "سپتامبر",
        "october": "اوْکتوبر",
        "november": "نوْوامبر",
        "december": "دئسامبر",
        "june-gen": "ژوئن",
        "july-gen": "جولای",
        "august-gen": "آقوست",
-       "september-gen": "سئپتامبر",
+       "september-gen": "سپتامبر",
        "october-gen": "اوکتوبر",
        "november-gen": "نووامبر",
        "december-gen": "دئسامبر",
        "jun": "ژوئن",
        "jul": "ژولای",
        "aug": "آقوست",
-       "sep": "سئپتامبر",
+       "sep": "سپتامبر",
        "oct": "اوْکتوبر",
        "nov": "نوْوامبر",
        "dec": "دئسامبر",
        "talk": "دانیشیق",
        "views": "گؤرونوشلر",
        "toolbox": "آراجلار",
-       "userpage": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c ØµØ­Û\8cÙ\81ه‌‌سینه باخ",
+       "userpage": "اÛ\8cØ´Ù\84دÙ\86 ØµÙ\81Ø­ه‌‌سینه باخ",
        "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "mediawikipage": "مئساژ صحیفه‌سینه باخ",
        "redirectedfrom": "($1-دن يوْل‌لاندیریلمیش)",
        "redirectpagesub": "یوْل‌لاندیرما صحیفه‌سی",
        "redirectto": "مسیزپرین دَییشیب:",
-       "lastmodifiedat": "بۇ صفحه‌‌ سوْن کز $1، $2 چاغیندا دَییشیلمیش‌دیر.",
+       "lastmodifiedat": "بۇ صفحه‌‌ سوْن دفعه $1، $2 تاریخینده دَییشیلمیشدیر.",
        "viewcount": "بۇ صحیفه {{PLURAL:$1|بیر|$1}} دفعه گؤرولوبدور.",
-       "protectedpage": "قوْرونموش صحیفه",
+       "protectedpage": "قوْرونموش صفحه",
        "jumpto": "آتیل:",
        "jumptonavigation": "دوْلانماق",
        "jumptosearch": "آختار",
        "nstab-image": "فایل",
        "nstab-mediawiki": "مئساژ",
        "nstab-template": "شابلون",
-       "nstab-help": "یاردیم صحیفه‌سی",
+       "nstab-help": "یاردیم صفحه‌سی",
        "nstab-category": "بؤلمه",
        "nosuchaction": "بئله چالیشما یوْخدور",
        "nosuchactiontext": "URL طرفیندن بیلینن ایش گئچرسیزدیر.\nURL-ی یانلیش یازمیش، یا یانلیش بیر باغلانتی ایله گلمیش، اوْلابیلرسیز.\nهم‌ده بۇ، {{SITENAME}} سایتی ایشلدن یازیلیمین خطاسینی گؤستره بیلر.",
        "no-null-revision": "\"$1\" صحیفه‌سی اوچون یئنی بوش بیر نوسخه یارادیلا بیلمه‌دی",
        "badtitle": "پیس باشلیق",
        "badtitletext": "آختاریلان صحیفه‌‌ آدی سهودیر و يا بوْشدور، يا دا دۆزگون اوْلمايان دیللر‌آراسی، ياخود ویکیلرآراسی کئچید ایستیفاده ائدیلیب. \nباشلیقلاردا ایستیفاده ائدیلمه‌سی قاداغان اوْلونان بیر و يا داها چوْخ سیمووْل ایستیفاده ائدیلمیش اوْلا بیلر.",
+       "title-invalid-empty": "آختاردیٛغیٛنیٛز صفحه‌‌نین آدیٛ بوْشدۇر و یا آدلارفضاسیٛندا یالنیٛز آدیٛ وار.",
+       "title-invalid-utf8": "ایسته‌نیلن صفحه‌نین آدیندا بیر یانلیش UTF-8 کاراکتِری وار.",
+       "title-invalid-interwiki": "آختاردیٛغیٛنیٛز صفحه‌ آدیٛیٛندا بیر ایستیفاده‌ اوْلۇنا بیلمه‌‌ین اینتئر ویکی باغلانتیٛسیٛ وار.",
+       "title-invalid-characters": "ایسته‌نیلن صفحه‌نین آدیندا، یانلیش کاراکتِرلر وار: «$1»",
        "perfcached": "بو بیلگی، کَش اولوب‌دور و اولا بیلر گونجل اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.",
        "perfcachedts": "بو بیلگی کَش اولوب‌دور، سون دفعه $1 واختیندا گونجلیب‌دیر. چوخو {{PLURAL:$4|بیر نتیجه|$4 نتیجه}} کَش‌ده‌دیر.",
        "querypage-no-updates": "بو یارپاق‌دا گونجل‌له‌مک ایندی باغلانیب‌دیر.\nبورداکی بیلگیلر یئنی‌لشمیه‌جکلر.",
        "actionthrottled": "سیزین چالیشمانیزین قاباغی آلیندی",
        "actionthrottledtext": "آنتی-ایسپام حرکت‌لری گؤره، بیر حرکتی قیسا بیر زامان آرالیغیندا چوخئتمه‌نیز انگللندی، و سیز حدی آشمیسینیز. لطفاً بیر نئچه دقیقه سونرا یئنی‌دن یوخلایین.",
        "protectedpagetext": "بو صحیفه دیَیشدیرمک و باشقا ایشلر اوچون باغلی‌دیر.",
-       "viewsourcetext": "سیز بو صحیفه‌نین مزمونونو گؤره و کؤچوره بیلرسینیز:",
-       "viewyourtext": "'''اؤز دَییشیکلیکلرینیز''' ین کودونو گؤروب و بو صحیفه‌یه کوپی ائده بیلرسینیز:",
+       "viewsourcetext": "سیز بو صفحه‌نین قایناغینی گؤروب و کؤچوره بیلرسینیز.",
+       "viewyourtext": "سیز بو صفحه‌ده <strong>اؤز دَییشیکلیکلرینیزین</strong> قایناغینی گؤروب و کوپی ائده بیلرسینیز.",
        "protectedinterface": "بو صحیفه‌ده پروقرام تأمیناتی اوچون سیستئم بیلگی‌لری وار و سوی-ایستیفاده‌نین قارشی‌سینی آلماق اوچون محافظه اولونما‌لی‌دیر.",
        "editinginterface": "<strong>دیقت:</strong> سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.",
        "translateinterface": "ترجومه و یا اونون دَییشدیرمک هامی ویکی لر اوچون [//translatewiki.net/ translatewiki.net]،مدیا ویکی نین یئرلری ائتمک پروژه سیندن ایستفاده ائدین",
        "welcomecreation-msg": "حسابینیز آچیلدی.\n[[Special:Preferences|{{SITENAME}}ترجیحلر]] دییشدیرمیی اونوتمایین.",
        "yourname": "ایستیفاده‌چی آدی:",
        "userlogin-yourname": "ایشلدن آدی",
-       "userlogin-yourname-ph": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدینیزی دَییشدیرین",
-       "createacct-another-username-ph": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Ø¯Ø§Ø®Û\8cÙ\84 Ø§Ø¦Ø¯ین",
+       "userlogin-yourname-ph": "اÛ\8cØ´Ù\84دÙ\86 آدینیزی دَییشدیرین",
+       "createacct-another-username-ph": "اÛ\8cØ´Ù\84دÙ\86 Ø¢Ø¯Û\8cÙ\86Û\8cزÛ\8c Ú¯Û\8cردÛ\8cرین",
        "yourpassword": "رمز:",
        "userlogin-yourpassword": "رمز",
-       "userlogin-yourpassword-ph": "رمزینیزی داخیل ائدین",
-       "createacct-yourpassword-ph": "بیر رمز داخیل ائدین",
+       "userlogin-yourpassword-ph": "رمزینیزی گیردیرن",
+       "createacct-yourpassword-ph": "بیر رمز گیردیرین",
        "yourpasswordagain": "رمزی یئنی‌دن یازین:",
        "createacct-yourpasswordagain": "رمزی دوغرولایین",
-       "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن داخیل ائدین",
+       "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن گیردیرن",
        "remembermypassword": "بو بیلگی‌سایاردا منیم گیریشیمی (چوخو $1 {{PLURAL:$1|گون}}ه قدر) یاددا ساخلا",
        "userlogin-remembermypassword": "منی ایچری‌ده ساخلا",
        "userlogin-signwithsecure": "آرخایین باغلانتی ایشلدین",
        "gotaccountlink": "گیریش",
        "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
        "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
-       "userlogin-helplink2": "یاردیم ایله گیریش",
+       "userlogin-helplink2": "کؤمک ایله گیریش",
        "userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
        "userlogin-createanother": "بیر باشقا حساب یارات",
        "createacct-emailrequired": "ایمیل آدرسی",
        "createacct-emailoptional": "ایمیل آدرسی (ایستگه باغلی)",
-       "createacct-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
-       "createacct-another-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
+       "createacct-email-ph": "ایمیل آدرسینیزی گیردیرن",
+       "createacct-another-email-ph": "ایمیل آدرسینیزی گیردیرن",
        "createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
        "createacct-realname": "دوغرو آد (ایستگه باغلی)",
        "createaccountreason": "نَدَن‌لیک:",
        "createacct-reason": "سبب",
        "createacct-reason-ph": "ندن سیز باشقا حساب یارادیرسینیز",
        "createacct-captcha": "امنیت یوخلاماسی",
-       "createacct-imgcaptcha-ph": "اوست‌ده‌کی گؤردوگونوز یازی‌نی داخیل ائدین",
+       "createacct-imgcaptcha-ph": "اوست‌ده‌کی گؤردوگونوز یازی‌نی گیردیرن",
        "createacct-submit": "حسابینیزی یارادین",
        "createacct-another-submit": "بیر باشقا حساب یارات",
        "createacct-benefit-heading": "{{SITENAME}} سیزین کیمی آدام‌لارین الی ایله یارانیب‌دیر.",
        "createacct-benefit-body1": "{{PLURAL:$1|دَییشیکلیک}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|صحیفه}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
        "createacct-benefit-body3": "سون {{PLURAL:$1|قاتیلان|قاتیلانلار}}",
        "badretype": "یازدیغینیز رمزلر بیر دئییل‌لر.",
        "userexists": "یازدیغینیز آد، اؤنجه‌دن ایشده‌دیر.\nلوطفاً باشقا بیر آد سئچین.",
        "passwordreset": "رمزی یئنی‌له",
        "passwordreset-text-one": "رمزینیزی صیفیرلاماق اوچون بو فورمو باشا چاتدیرین.",
        "passwordreset-text-many": "{{PLURAL:$1|رمزینیزی صیفیرلاماق اوچون، بیرینی دولدورون.}}",
-       "passwordreset-legend": "رمزی یئنی‌له",
        "passwordreset-disabled": "بو ویکی‌ده رمزی یئنی‌له‌مک باغلانیب‌دیر.",
        "passwordreset-emaildisabled": "ایمیل اؤزل‌لیکلری بو ویکی‌ده باغلانیب‌دیر.",
-       "passwordreset-username": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدی:",
+       "passwordreset-username": "اÛ\8cØ´Ù\84دÙ\86 آدی:",
        "passwordreset-domain": "دامنه:",
        "passwordreset-capture": "سون نتیجه ایمیل گؤستریلسین؟",
        "passwordreset-capture-help": "بو قوطویا علامت قویساز، (گئچیجی رمزی اولان) ایمیل ایستیفاده‌چی‌یه گؤندریلن کیمی بوردا سیزه گؤستریله‌جکدیر.",
        "changeemail-throttled": "سیز دفعه لرجه گیریش اوچون چالیشیب سیز.\nلوطفا یئنی دن چالیشمامیشدان اونجه $1 دوزوم ائدین.",
        "resettokens": "نیشانلی لاری یئنیلمه",
        "resettokens-no-tokens": "هئچ بیر نیشانلی یئنیلنمک اوچون یوخدور.",
-       "resettokens-legend": "نیشانلی لاری یئنیلمه",
        "resettokens-tokens": "نیشانلی:",
        "resettokens-token-label": "$1 (ایندیکی میقداری: $2)",
        "resettokens-watchlist-token": "نیشانلامیش یئمک وپی [[Special:Watchlist|ایزلنمیش سون دییشیک اولان صفحه لر]](اتم/آراس‌اس)",
        "storedversion": "قئید ائدیلمیش نوسخه",
        "nonunicodebrowser": "' 'دیققت: آختاریش برنامه نیز اویغون دئییل.\nصحیفه‌لری اعتبارلا دییشدیرمیینیزه ایجازه وئرمک اوچون: آسجیی اولمایان کاراکتئرلر دییشدیرمه قوتوسوندا اونالتیلیک کودلار اولا‌راق گؤرونه‌جک.' '",
        "editingold": "'دیققت! سیز بو صحیفه‌نین کؤهنه نوسخه سین دییشدیر ائدیرسینیز. مقالنی یادداشدا ساخلایاجاغینیز حالدا بو نوسخه سونرا ائدیلمیش هر بیر دییشیک‌لیک ایتیریله‌جک.'",
-       "yourdiff": "فرقلر",
+       "yourdiff": "فرقلر",
        "copyrightwarning": "خاهیش اولونور دقته آلاسینیز کی، {{SITENAME}}داکی بوتون فالیت‌لرینیز $2 لیسئنزیاسینا تابع اولدوغو حساب ائدیلیر (تفرروات اوچون باخ: $1). اگر یازدیق‌لارینیزین اساس‌لی شکیلده رئداکته ائدیلمه‌سینی و ایستنیلدیگی واخت باشقا یئره اؤتورولمه‌سینی ایستمیرسینیزسه، یازی‌لارینیزی بورادا درج ائتمیین.\n<br />\nسیز عینی زاماندا سؤز وئریرسینیز کی، بو یازی‌لاری سیز اؤزونوز یازمیسینیز و یا اونلاری هامییا آچیق موهیت‌دن یا دا بونا بنزر منبع‌دن کؤچورموسونوز.\n\n----\n\n</div> ایستیلئ=\"فونت-weight: بولد؛ فونت-سیزئ: 110%؛ جولور:رئد؛\">موللیف حقوق‌لاری ایله قورونموش هئچ بیر ایشی ایجازه‌سیز درج ائتمیین!</div>",
        "copyrightwarning2": "خاهیش ائدیریک، {{SITENAME}} سایتینا ائده‌جه‌یم بوتون روسوم دیگر عضو‌لر طرفین‌دن دوزئنلئنئبیلئجئغینی، دییش‌دیریله و یا سیلینئبیلئجئغینی خاتیرلایین. یازی‌لارینین مئرهامئتسیزجئ دئغیشتیریلی بیلمسینه راضی‌لیق گؤسترمیرسه بورا ایشتیراک ائتمیین. <br />\nآیریجا بو علاوه یازینی سیزین یازدیغینیزدان یا دا سربست کوپیالاما ایجازه‌سی وئرن بیر قایناق‌دان کوپیالادیغینیزی بیزه اؤهده‌لرینه ائتمکدسینیز (دئتال‌لار اوچون ایستیناد: $1).",
        "longpageerror": "خطا: داخیل متنین اوزون‌لوغو قبول ائدیله بیلر ان چوخ اوزونلوق اولان {{PLURAL:$2 | بیر کیلوبایت | $2 کیلوبایت}} دان چوخ‌دور و {{PLURAL:$1 | بیر کیلوبایت | $1 کیلوبایت}} بؤیوکلوگونده‌دیر.'\nدییشیک‌لیگی‌نین کایدئدیلئمئز.",
        "history-feed-item-nocomment": "$2-ده $1",
        "history-feed-empty": "ایسته‌دیگینیز صحیفه یوخدور.\nاولا بیلر کی بو ویکی‌دن سیلینیب یوخسا آدی دَییشیلیب‌دیر.\nایلگیلی یئنی صحیفه‌لری تاپماق اوچون [[Special:Search|بو ویکی‌ده آختارماغا چالیشین]].",
        "rev-deleted-comment": "(دَییشدیرمک قیساسی سیلیندی)",
-       "rev-deleted-user": "(اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدی سیلیندی)",
+       "rev-deleted-user": "(اÛ\8cØ´Ù\84دÙ\86 آدی سیلیندی)",
        "rev-deleted-event": "(قئيد سیلیندی)",
        "rev-deleted-user-contribs": "[ایستیفاده‌چی آدی و يا ای-پی اونوانی سیلیندی - ديَیشیکلیک چالیشمالاردان چیخاریلدی]",
        "rev-deleted-text-permission": "بو ديَیشیکلیک بو صحیفه‌دن '''سیلینیب دیر.'''",
        "history-title": "«$1»-ین گئچمیشی",
        "difference-title": "«$1» نوسخه‌لرینین آراسینداکی فرقلری",
        "difference-title-multipage": "«$1» و «$2» صحیفه‌لرین آراسینداکی فرقلر",
-       "difference-multipage": "(صحیفه‌لر آراسینداکی فرقلر)",
+       "difference-multipage": "(صفحه‌لر آراسینداکی فرق‌لر)",
        "lineno": "خط $1:",
        "compareselectedversions": "سئچیلمیش نوسخه‌لری قارشیلاشدیر",
        "showhideselectedversions": "سئچیلمیش نوسخه‌لری گؤستر/گیزلد",
        "datedefault": "سئچیم‌سیز",
        "prefs-labs": "آزماییشی اؤزل‌لیکلر",
        "prefs-user-pages": "ایستیفاده‌چی صحیفه‌لری",
-       "prefs-personal": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ù¾Ø±Ù\88Ù\81اÛ\8cÙ\84ی",
+       "prefs-personal": "اÛ\8cØ´Ù\84دÙ\86 Ù\88ئرÛ\8câ\80\8cÙ\84ری",
        "prefs-rc": "سون دَییشیکلیکلر",
        "prefs-watchlist": "ایزله‌دیکلر",
-       "prefs-editwatchlist": "اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ¯Û\8cÙ\85 ØµØ­Û\8cÙ\81ه‌‌لری دَییشدیر",
-       "prefs-editwatchlist-label": "هامی ایزلدیکلرینیزین دَییشدیرمه سی:",
+       "prefs-editwatchlist": "اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©Ù\84رÛ\8cÙ\85 ØµÙ\81Ø­ه‌‌لری دَییشدیر",
+       "prefs-editwatchlist-label": "بۆتون ایزله‌دیکلرینیزین دَییشدیرمه‌سی:",
        "prefs-editwatchlist-edit": "ایزلدیکلرینیزدن گورمک هابئله باشلیق لارین سیلمک",
        "prefs-editwatchlist-raw": "ایزله‌دیگیم خام لیستی دَییشدیر",
        "prefs-editwatchlist-clear": "ایزله دیگیم لیستی سیلمک",
-       "prefs-watchlist-days": "ایزله‌دیکلرده گؤستریلن گونلر",
+       "prefs-watchlist-days": "ایزله‌دیک‌لریمده گؤرسدیلن گۆن‌لر",
        "prefs-watchlist-days-max": "چوخو {{PLURAL:$1|بیر|$1}} گون",
-       "prefs-watchlist-edits": "گنیشلنمیش ایزله‌مه‌لرده گؤستریلن دَییشیکلیکلرین چوخو:",
+       "prefs-watchlist-edits": "گنیشلنمیش ایزله‌ دیک لرده گؤرسدیلن دَییشیک‌لیک‌لرین چوْخو:",
        "prefs-watchlist-edits-max": "چوخ سایی: ۱۰۰۰",
-       "prefs-watchlist-token": "ایزله‌دیکلر نیشانی:",
+       "prefs-watchlist-token": "ایزله‌دیک‌لر آدرسی:",
        "prefs-misc": "باشقا",
        "prefs-resetpass": "رمزی دَییشدیر",
        "prefs-changeemail": "ایمیل آدرسینی دَییشدیر",
        "prefs-setemail": "بیر ایمیل آدرسی وئر",
        "prefs-email": "ایمیل ترجیحلری",
        "prefs-rendering": "گؤرونوش",
-       "saveprefs": "قئید ائت",
+       "saveprefs": "ذخیره ائت",
        "restoreprefs": "بوتون ایلک ترجیح‌لری قایتار",
        "prefs-editing": "دَییشدیرمک‌ده",
        "rows": "سطرلر:",
-       "columns": "سوتونلار",
+       "columns": "سوتونلار",
        "searchresultshead": "آختار",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">کئچیدسیز لینکی</a> فورمات ائتمک اوچون حدود (بایت‌لارلا):",
+       "stub-threshold": "<a href=\"#\" class=\"stub\">باغلانتی‌سیز لینکی</a> دییشدیرمک اوچون حدود (بایت‌لارلا):",
        "stub-threshold-disabled": "چالیشمایان",
-       "recentchangesdays": "سÙ\88Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8cÙ\84ردÙ\87 Ú¯Ø¤Ø³ØªØ±Û\8cÙ\84Ù\86 Ú¯Ù\88Ù\86â\80\8cÙ\84رÛ\8cÙ\86 Ù\85Û\8cÙ\82دارÛ\8c:",
+       "recentchangesdays": "سÙ\88Ù\92Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©â\80\8câ\80\8cÙ\84ردÙ\87 Ú¯Ø¤Ø±Ø³Ø¯Û\8cÙ\84Ù\86 Ú¯Û\86Ù\86â\80\8cÙ\84ر:",
        "recentchangesdays-max": "ماکسیموم $1 {{PLURAL:$1|گون |گون}}",
-       "recentchangescount": "سÙ\88Ù\86 Ø¯Ù\8aÙ\8eÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©لرده باشلیق سايی:",
+       "recentchangescount": "سÙ\88Ù\92Ù\86 Ø¯Ù\8aÙ\8eÛ\8cØ´Û\8cÚ©â\80\8cÙ\84Û\8cÚ©â\80\8cلرده باشلیق سايی:",
        "prefs-help-recentchangescount": "بورایا یئنی دییشیک‌لیک‌لر، صحیفه‌لرین و ژورنال‌لارین تاریخچه‌سی داخیل‌دیر.",
        "prefs-help-watchlist-token2": "بو کیلید ایزلدیگیز لیستین وب تغذیه سی رمزی دیر.\nهر کیم اونا ال تاپسا ایزلدیکلرینیز لیستی اوخویا بیلر بئله لیکله اونا پایلاشمایین [[Special:ResetTokens|لازیم اولسا اونو دَییشدیرمک اوچون بورانی باسین]].",
        "savedprefs": "سئچیمینیز قئيد ائدیلدی.",
        "localtime": "یئرلی چاغ:",
        "timezoneuseserverdefault": "ویکی اؤن‌فرضینی ایشلد ($1)",
        "timezoneuseoffset": "باشقا (چاغ فرقینی بیلدیر)",
-       "servertime": "Ø®Û\8cدÙ\85تÚ\86Û\8c چاغی:",
+       "servertime": "سرÙ\88ر چاغی:",
        "guesstimezone": "براوزِردن دولدور",
        "timezoneregion-africa": "آفریقا",
        "timezoneregion-america": "آمریکا",
        "timezoneregion-europe": "اوروپا",
        "timezoneregion-indian": "هیند اوقیانوسو",
        "timezoneregion-pacific": "بؤیوک اوقیانوس",
-       "allowemail": "باشÙ\82ا Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84ردÙ\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¢Ù\84Ù\85اغÛ\8c Ø¢Ú\86",
+       "allowemail": "باشÙ\82ا Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84ردÙ\86 Ø§Û\8cÙ\85Û\8cÙ\84 Ø¢Ù\84Ù\85اغÛ\8c Ø¢Ú\86",
        "prefs-searchoptions": "آختار",
        "prefs-namespaces": "آدلار فضاسی:",
        "default": "فرض ائدیلن",
        "prefs-reset-intro": "ترجیحلرینیزی سایتین ایلک فرض ائدیلنلرینه دؤندرمک اوچون، بو صحیفه‌دن ایستیفاده ائده بیلرسینیز.\nبو ایش قایتاریلا بیلمز.",
        "prefs-emailconfirm-label": "ایمیل دوغرولاماسی:",
        "youremail": "ایمیل:",
-       "username": "{{GENDER:$1|اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدی}}:",
-       "prefs-memberingroups": "{{PLURAL:$1|بیر|$1}} قروپ {{GENDER:$2|عوضو}}و:",
-       "prefs-registration": "یازیلماق واختی:",
+       "username": "{{GENDER:$1|اÛ\8cØ´Ù\84دÙ\86 آدی}}:",
+       "prefs-memberingroups": "{{PLURAL:$1|بیر|$1}} گروه {{GENDER:$2|عوضو}}و:",
+       "prefs-registration": "آد یازدیرما تاریخی:",
        "yourrealname": "دوغرو آد:",
        "yourlanguage": "دیل:",
        "yourvariant": "دیل واریانتی:",
        "prefs-help-signature": "دانیشیق صحیفه‌لرینده یاخیشلار گرک «<nowiki>~~~~</nowiki>» ایله ایمضالانالار. بو نیشان اوتوماتیک‌جه سیزین آدینیز و تاریخه دؤنه‌جک‌دیر.",
        "badsig": "یانلیش خام ایمضا.\nاچ‌تی‌ام‌ال تگ‌لرینی یوخلایین.",
        "badsiglength": "ایمضانیز چوخ اوزون‌دور.\nاو گرک {{PLURAL:$1|بیر|$1}} حرف‌دن اوزون اولمایا.",
-       "yourgender": "ترجیح وئریرسیز نجور توصیف اولونسون؟",
+       "yourgender": "ترجیح وئریرسینیز نئجه توصیف اولونسون؟",
        "gender-unknown": "ترجیح وئریرم بیلیندیرمییم",
        "gender-male": "کیشی",
-       "gender-female": "قادین",
+       "gender-female": "خانیم",
        "prefs-help-gender": "بو ترجیح ایستگه باغلی‌دیر.\nبونون میقداری، سیزی باشقالارا دوزگون آدرس وئرمک اوچون ایشلنه‌جکدیر.\nبو بیلگی، عمومی اولاجاق‌دیر.",
        "email": "ایمیل",
        "prefs-help-realname": "اصلی آد ایختیاری دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
        "prefs-help-email": "ایمیل آدرسی ایستگه باغلی‌دیر، آنجاق رمزینیزی اونوتدوغونوز واخت، سیزه يئنی رمز گؤندرمگه گرکلی‌دیر.",
        "prefs-help-email-others": "سیز هم‌ده آیری ایستیفاده‌چیلره ایجازه وئره بیلرسیز، سیزین ایستیفاده‌چی یا دانیشیق صحیفه‌نیزده بیر باغلانتی ایله، سیزله ایلگی قورسونلار.\nآیری ایستیفاده‌چیلر سیزینله ایلگی قوراندا، سیزین ایمیل آدرسیز گؤستریلمه‌یه‌جک‌دیر.",
        "prefs-help-email-required": "ایمیل آدرس گرکلی‌دیر.",
-       "prefs-info": "اساس Ø¨Û\8cÙ\84Ú¯Û\8cÙ\84ر",
+       "prefs-info": "کؤک Ø¨Û\8cÙ\84Ú¯Û\8câ\80\8cÙ\84ر",
        "prefs-i18n": "اولوسلارآراسی‌لاشدیرما",
        "prefs-signature": "ایمضا",
        "prefs-dateformat": "تاریخ فورمتی",
-       "prefs-timeoffset": "ساعات قورشاغینین فرقی",
-       "prefs-advancedediting": "گنل تنظیم‌لر",
+       "prefs-timeoffset": "چاغ بؤلگه‌سینین فرقی",
+       "prefs-advancedediting": "عومومی تنظیملر",
        "prefs-editor": "دَییشدیرن",
        "prefs-preview": "اؤن‌گؤستریش",
        "prefs-advancedrc": "گلیشمیش سئچَنکلر",
        "prefs-advancedrendering": "گلیشمیش سئچَنکلر",
        "prefs-advancedsearchoptions": "گلیشمیش سئچَنکلر",
        "prefs-advancedwatchlist": "گلیشمیش سئچَنکلر",
-       "prefs-displayrc": "گؤرونتو سئچَنکلری",
-       "prefs-displaywatchlist": "گؤرونتو سئچَنکلری",
-       "prefs-tokenwatchlist": "سÛ\8cÙ\85Ú¯Ù\87",
-       "prefs-diffs": "فرقلر",
+       "prefs-displayrc": "عکس سئچَنکلری",
+       "prefs-displaywatchlist": "عکس سئچَنکلری",
+       "prefs-tokenwatchlist": "آدرس",
+       "prefs-diffs": "فرقلر",
        "prefs-help-prefershttps": "سیزین بو ترجیحینیزین اثری سیزین سونراکی گیریشینیز دن سونرا اولاجاق.",
        "prefswarning-warning": "ترجیحلرینیزه اولان دَییشیک لر هله آرتیریلمیب.\nایر بو صفحه نین \"$1\" اوستونه باسیلمامیشدان اونجه ترک ائتسز ترجیحلرینیز آرتیریلمییاجاق.",
        "prefs-tabs-navigation-hint": "ایپ اوجو : سیز ائلیه بیلرسیز ساغ و سول جهت نیما کیلید لریندن نیشانه نه نین دولانماسی نیشانه لر لیستینده ایستفاده ائده سیز.",
        "rightslogtext": "بو، ایستیفاده‌چی حاقلارینا اولان دَییشیکلیکلر سیاهی‌سی‌دیر.",
        "action-read": "بو صحیفه‌نی اوخو",
        "action-edit": "بو صحیفه‌نی دَییشدیر",
-       "action-createpage": "صحیفه یارات",
+       "action-createpage": "صفحه یارات",
        "action-createtalk": "دانیشیق صحیفه‌سی یاراد",
        "action-createaccount": "بو ایستیفاده‌چی حسابینی یاراد",
        "action-history": "بو صفحه نین گئچمیشین گور",
        "enhancedrc-history": "گئچمیش",
        "recentchanges": "سون دَییشیکلیکلر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
-       "recentchanges-summary": "بو صحیفه‌ده، بو ویکی‌ده وئریلن ان سون دَییشیکلیکلری ایزله‌یین.",
+       "recentchanges-summary": "بۇ صفحه‌ده، بۇ ویکیده وئریلن ان سوْن دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-noresult": "وئریلمیش دؤنم‌ده، بو معیارلارا تطبیق اولان دَییشدیرمه یوخدور.",
        "recentchanges-feed-description": "ویکی‌ده‌کی ان سون ديَیشیکلیک‌لری بو يايیم کانالیندان ایزله‌يین.",
        "recentchanges-label-newpage": "بو دییشیک یئنی بیر صفحه یاراتدی",
        "recentchanges-label-minor": "بو بیر کیچیک دَییشدیرمه‌دیر",
        "recentchanges-label-bot": "بو دییشیک بیر بوت طرفیندن ائدیلیب‌دیر",
        "recentchanges-label-unpatrolled": "بو دییشیکلیک هله گؤزدن گئچیریلمه‌ییب‌دیر",
-       "recentchanges-label-plusminus": "صحیفه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
-       "recentchanges-legend-heading": "'''ایختیصارلار:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هم‌ده [[Special:NewPages|یئنی صحیفه‌لرین لیستینه]] باخین)",
+       "recentchanges-label-plusminus": "صفحه‌نین اؤلچوسو بایت میقداری ایله تعیین ائدیلیر",
+       "recentchanges-legend-heading": "'''قیسالتمالار:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بیرده [[Special:NewPages|یئنی صفحه‌لرین لیستینه]] باخین)",
        "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "rcshowhideminor": "کیچیک دَییشیکلری $1",
        "rcshowhidebots": "بوتلاری $1",
        "rcshowhidebots-show": "گؤستر",
        "rcshowhidebots-hide": "گیزلت",
-       "rcshowhideliu": "Û\8cازÛ\8cÙ\84Ù\85Û\8cØ´ Ø§Û\8cستÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÛ\8c $1",
+       "rcshowhideliu": "Û\8cازÛ\8cÙ\84Ù\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84رÛ\8c $1",
        "rcshowhideliu-show": "گؤستر",
        "rcshowhideliu-hide": "گیزلت",
-       "rcshowhideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84رÛ\8c $1",
+       "rcshowhideanons": "تاÙ\86Û\8cÙ\86Ù\85اÙ\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84رÛ\8c $1",
        "rcshowhideanons-show": "گؤستر",
        "rcshowhideanons-hide": "گیزلت",
        "rcshowhidepatr": "نظارت ائدیلن دَییشیکلیکلری $1",
        "boteditletter": "ب",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|بیر|$1}} ایزله‌ین ایستیفاده‌چی]",
        "rc_categories": "بؤلمه‌لره محدودلاشدیر («|» ایله آییر)",
-       "rc_categories_any": "هر",
+       "rc_categories_any": "سئچیلمیشلرین هر بیریسی",
        "rc-change-size-new": "دَییشیکلیک‌دن سونرا {{PLURAL:|بیر|$1}} بایت",
        "newsectionsummary": "/* $1 */ یئنی بؤلمه",
        "rc-enhanced-expand": "تفصیل‌لری گؤستر",
        "listfiles_thumb": "کیچیک شکیل",
        "listfiles_date": "تاریخ",
        "listfiles_name": "آد",
-       "listfiles_user": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c",
+       "listfiles_user": "اÛ\8cØ´Ù\84دÙ\86",
        "listfiles_size": "اؤلچو",
        "listfiles_description": "شرح",
        "listfiles_count": "نوسخه‌لر",
        "imagelinks": "فايل ایشلدمه‌سی",
        "linkstoimage": "آشاغیداکی {{PLURAL:$1|صحیفه|$1 صحیفه‌لر}} بو فایلا {{PLURAL:$1|باغلانیر|باغلانیرلار}}",
        "linkstoimage-more": "بو فایلا {{PLURAL:$1|بیر|$1}}-دن چوخ صحیفه باغلانتی‌سی واردیر.\nآشاغیداکی لیست بو فایلا یالنیز ایلک $1 صحیفه باغلانتیسینی گؤستریر.\nبیر [[Special:WhatLinksHere/$2|بوتون لیست]] ده واردیر.",
-       "nolinkstoimage": "بو فایلا هئچ بیر صحیفه باغلانماییب.",
+       "nolinkstoimage": "بو فایلا هئچ بیر صفحه‌یه باغلانماییب.",
        "morelinkstoimage": "بو فایلا [[Special:WhatLinksHere/$1| داها چوخ علاقه‌لری]] باخ.",
        "linkstoimage-redirect": "$1 (فایل ایستیقامتلندیریلیر) $2",
        "duplicatesoffile": "بو {{PLURAL:$1 | فایل | $1 فایل}}، بو فایلین صورتی ([[Special:FileDuplicateSearch/$2|داها چوخ دئتال]]):",
        "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
        "randomincategory-category": "بؤلمه:",
        "randomincategory-legend": "بؤلمه‌ده راست‌گله صفحه",
+       "randomincategory-submit": "گئت",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "statistics": "آمارلار",
        "statistics-header-pages": "صحیفه آمارلاری",
        "statistics-header-edits": "دَییشمه آمارلاری",
-       "statistics-header-users": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آمارلاری",
+       "statistics-header-users": "اÛ\8cØ´Ù\84دÙ\86â\80\8cÙ\84ر آمارلاری",
        "statistics-header-hooks": "باشقا آمارلار",
        "statistics-articles": "مقاله‌لر",
        "statistics-pages": "صحیفه‌لر:",
        "nmembers": "{{PLURAL:$1|بیر|$1}} عوضو",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|عۆضو}}",
        "nrevisions": "{{PLURAL:$1|بیر|$1}} نوسخه",
-       "nviews": "{{PLURAL:$1|بیر|$1}} گؤرونوش",
        "nimagelinks": "$1 ده{{PLURAL:$1|صحیفه‌ده}}ایستیفاده اولونمور",
        "ntransclusions": "$1 ده{{PLURAL:$1|صحیفه‌ده}}ایستیفاده اولونور",
        "specialpage-empty": "بو صحیفه بوشدور",
        "protectedpages-noredirect": "یوْل‌لاندیرمالاری گیزلت",
        "protectedpagesempty": "حال-حاضردا بو پارامئتره اویغون هئچ بیر محافظه‌لی صحیفه یوخ‌دور",
        "protectedpages-timestamp": "واخت دامغاسی",
-       "protectedpages-page": "صحیفه",
+       "protectedpages-page": "صفحه",
        "protectedpages-expiry": "بیتمک تاریخی",
        "protectedpages-performer": "قوْرویان ایستیفاده‌چی",
        "protectedpages-params": "قوْروماق پارامئترلری",
        "protectedtitles": "محافظه‌لی باش‌لیق‌لار",
        "protectedtitles-summary": "بۇ صحیفه، ایندیکی یارانماق‌دان قوْرونان باشلیقلاری لیست ائدیر. ایندیکی قوْرونان موْجود اوْلان صحیفه‌لرین لیستینی گؤرمک اۆچون، [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]-ه باخین.",
        "protectedtitlesempty": "حال-حاضردا، بو پارامئترلری قورونان هئچ بیر موضوع یوخ‌دور.",
-       "listusers": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø³Û\8cÙ\8aاÙ\87Û\8cسی",
+       "listusers": "اÛ\8cØ´Ù\84دÙ\86 Ù\84Û\8cستی",
        "listusers-editsonly": "يالنیز دَییشدیرمه ائدن ایستیفاده‌چیلری گؤستر",
        "listusers-creationsort": "يارانما تاریخینه گؤره سیرالا",
        "listusers-desc": "آزالان سیرادا سیرالا",
        "usereditcount": "$1 {{PLURAL:$1|دَییشدیرمه}}",
        "usercreated": "$1 تاریخینده، ساعات $2-ده {{GENDER:$3|یارانیب‌دیر}}",
        "newpages": "يئنی صفحه‌لر",
-       "newpages-username": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c آدی:",
+       "newpages-username": "اÛ\8cØ´Ù\84دÙ\86 آدی:",
        "ancientpages": "ان اسکی صحیفه‌لر",
        "move": "آدینی دَییشدیر",
        "movethispage": "بو صحیفه‌‌نین آدینی ديَیشدیر",
        "linksearch-pat": "آختاریش اولگوسو:",
        "linksearch-ns": "آد فضاسی:",
        "linksearch-ok": "آختار",
-       "linksearch-text": "«*.wikipedia.org» کیمی نیشانلاری ایشلده بیلرسینیز.\nآزی بیر دنه «*.org» کیمی یوخاری دامنه لازیم‌دیر.<br />\nدستلکلنمیش {{PLURAL:$2|پروتوکول|پروتوکول‌لار}}: <code>$1</code> (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).",
+       "linksearch-text": "«*.wikipedia.org» کیمی نیشانلاری ایشلده بیلرسینیز.\nآزی بیر دنه «*.org» کیمی یوخاری دامنه لازیم‌دیر.<br />\nدستلکلنمیش {{PLURAL:$2|پروتوکول|پروتوکول‌لار}}: $1 (بوش بیراخیلسا، http:// نظرده آلیناجاقدیر).",
        "linksearch-line": "$1، $2-دن باغلانیب‌دیر",
        "linksearch-error": "نیشانلار یالنیز آدی اولینده گله بیلرلر.",
        "listusersfrom": "بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:",
        "activeusers-intro": "بوردا سون {{PLURAL:$1|بیر|$1}} گون‌ده بیر ایشلر گؤرن ایستیفاده‌چیلرین لیستی گؤستریلیر.",
        "activeusers-count": "سون {{PLURAL:$3|گون|$3 گون}}‌ده، {{PLURAL:$1|$1}} چالیشما",
        "activeusers-from": "بوندان باشلایاراق ایستیفاده‌چیلری گؤستر:",
-       "activeusers-hidebots": "بÙ\88تلاری گیزلت",
+       "activeusers-hidebots": "رÙ\88Ù\92باتâ\80\8cلاری گیزلت",
        "activeusers-hidesysops": "ایداره‌چیلری گیزلت",
-       "activeusers-noresult": "Ù\87ئÚ\86 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c تاپیلمادی.",
+       "activeusers-noresult": "Ù\87ئÚ\86 Ø§Û\8cØ´Ù\84دÙ\86 تاپیلمادی.",
        "listgrouprights": "ایستیفاده‌چی قروپ حاقلاری",
        "listgrouprights-summary": "آشاغیدا، بو ویکی‌ده تانیلان ایستیفاده‌چی گروپلاری و اونلارین حاقلاری گؤستریلیر.\nتک حاقلار اوچون ده، [[{{MediaWiki:Listgrouprights-helppage}}|آرتیق بیلگیلر]] اولا بیلر.",
        "listgrouprights-key": "یوْل گؤستری:\n* <span class=\"listgrouprights-granted\">وئریلمیش حاق</span>\n* <span class=\"listgrouprights-revoked\">قایتاریلمیش حاق</span>",
        "emailuser": "بو ایستیفاده‌چی‌یه ایمیل گؤندر",
        "emailuser-title-target": "بو {{GENDER:$1|ایستیفاده‌چی}}‌یه ایمیل گؤندر",
        "emailuser-title-notarget": "ایستیفاده‌چی‌یه ایمیل گؤندر",
-       "emailpage": "ایستیفاده‌چی‌یه ایمیل گؤندر",
        "emailpagetext": "آشغیداکی فورم‌دان، بو {{GENDER:$1|ایستیفاده‌چی}}‌یه ایمیل گؤندرمک اوچون ایستیفاده ائده بیلرسینیز.\n[[Special:Preferences|اؤز ترجیحلرینیز]]ده وئرن ایمیل آدرسی، بو ایمیلین \"From\" یئرینده گؤستریله‌جک‌دیر و بونا گؤره ایمیلی آلان سیزه موستقیم جاواب گؤندره بیلر.",
        "defemailsubject": "«$1» آدلی ایستیفاده‌چی‌دن، {{SITENAME}} ایمیلی",
        "usermaildisabled": "ایستیفاده‌چی ایمیلی باغلی‌دیر",
        "emailccsubject": "سیزین $1-ه مئساژینیزین کوپی‌سی: $2",
        "emailsent": "ایمیل گؤنده‌ریلدی",
        "emailsenttext": "ایمیل مئساژینیز گئنده‌ریلدی.",
-       "emailuserfooter": "بو ایمیل، {{SITENAME}}-ده «{{int:emailpage}}» ایمکانی ایله، $1-دن $2-ه گؤندریلیب‌دیر.",
+       "emailuserfooter": "بو ایمیل، {{SITENAME}}-ده «{{int:emailuser}}» ایمکانی ایله، $1-دن $2-ه گؤندریلیبدیر.",
        "usermessage-summary": "مئساژ گئنده‌ریلدی.",
        "usermessage-editor": "سیستِم مئساژ گؤندَرَنی",
        "watchlist": "ایزله‌دیکلر",
        "notvisiblerev": "باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب",
        "watchlist-details": "دانیشیق صفحه‌لرینی آیری سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.",
        "wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
-       "wlheader-showupdated": "سÙ\88Ù\86 Ú¯Ø¤Ø±Ù\88Ø´Ù\88Ù\86Ù\88زدÙ\86 Ø³Ù\88Ù\86را Ø§Ø¦Ø¯Û\8cÙ\84Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر '''Ù\82اÙ\84Û\8cÙ\86''' Ú¯Ø¤Ø³ØªØ±Û\8cÙ\84Û\8cبدÛ\8cÙ\84ر.",
+       "wlheader-showupdated": "سÙ\88Ù\86 Ú¯Ø¤Ø±Ù\88Ø´Ù\88Ù\86Ù\88زدÙ\86 Ø³Ù\88Ù\92Ù\86را Ø§Ø¦Ø¯Û\8cÙ\84Ù\86 Ø¯Û\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر '''Ù\82اÙ\84Û\8cÙ\86''' Ú¯Ø¤Ø±Ø³Ø¯Û\8cÙ\84Û\8cبâ\80\8cدÛ\8cر.",
        "wlnote": "آشاغیداکی {{PLURAL:$1|بیر ديَیشیک‌لیک|<strong>$1</strong> ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|<strong>$2</strong> ساعتدا}} ائدیلمیشدیر. $3، $4",
        "wlshowlast": "سون $1 ساعات $2 گون گؤستر",
        "watchlist-options": "ایزله‌دیکلر سئچمه‌لری",
        "watching": "ایزله‌نیلیر...",
        "unwatching": "ایزله‌مه...",
        "watcherrortext": "ایزلئمئ سیاهی‌سی ترجیحلرینیزی \"$1\" اوچون دییشدیررکن بیر خطا میدانا گلدی.",
-       "enotif_reset": "باخیلمیش بوتون صحیفه‌لری ایشاره‌له.",
+       "enotif_reset": "باخیلمیش بۆتون صفحه‌لری علامت‌له.",
        "enotif_impersonal_salutation": "{{SITENAME}} ایستیفاده‌چی‌سی",
        "enotif_subject_deleted": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله سیلینیب‌دیر",
        "enotif_subject_created": "{{SITENAME}} $1 صحیفه‌سی، {{gender:$2|$2}} ایله یارانیب‌دیر",
        "rollback-success": "$1 طرفین‌دن ائدیلمیش دییشدیر‌لر گئری قایتاریلدی؛ $2 طرفین‌دن یارادیلمیش سون وئرسیا برپا اولوندو.",
        "sessionfailure-title": "گیریش خطاسی",
        "sessionfailure": "گیریش اوتورومونوزلا ایلگی‌لی بیر سورون وار گیبی گؤرونویور؛\nبو ائیلئم، اوتوروم گاسپینا کارشی اؤنلئم اولاراک ایپتال ائدیلدی.\nلوتفن \"گئری\" گیدین و گئلدیغینیز سایفایی یئنی‌دئن یوکلئیین، سونرا تئکرار دئنئیین.",
+       "changecontentmodel-title-label": "صحیفه باشلیقی",
+       "changecontentmodel-reason-label": "ندن:",
+       "logentry-contentmodel-change-revertlink": "قایتار",
+       "logentry-contentmodel-change-revert": "قایتار",
        "protectlogpage": "قوروما قئیدلری",
        "protectlogtext": "آشاغی‌داکی، صحیفه قوروما‌لارینا دییشیک‌لیک‌لرین بیر سیاهی‌سی‌دیر.\nحال-حاضردا تطبیق اولونان صحیفه قوروما‌لاری اوچون [[Special:ProtectedPages| قوروما آلتینا آلینمیش صحیفه‌لر سیاهی‌سینا]] باخا بیلرسینیز.",
        "protectedarticle": "«[[$1]]» قوروندو",
        "undeleteviewlink": "باخ",
        "undeleteinvert": "سئچیلنی دؤندر",
        "undeletecomment": "ندن:",
-       "undeletedrevisions": "جمعی {{PLURAL:$1|1 دییش|$1 دییشدیر}} گئری قایتاریلدی.",
+       "undeletedrevisions": "جمعی {{PLURAL:$1|بیر دییش|$1 دییشدیر}} گئری قایتاریلدی.",
        "undeletedrevisions-files": "{{PLURAL:$1|1 نوسخه|$1 نوسخه}} و {{PLURAL:$2|1 فایل|$2 فایل}} برپا ائدیلدی",
        "undeletedfiles": "{{PLURAL:$1|1 فایل|$1 فایل}} برپا اولوندو",
        "cannotundelete": "برپا ائدیلمه اولمادی\n\n$1",
        "invert": "سئچیلنی دؤندر",
        "tooltip-invert": "بو قوتونی علامتله یین تا انتخاب اولان آد فضا سینین ایچری صحیفه لری دییشیک لیک لری(و اوبیری علامتلنمیش فضالار) گیزله نه آدی",
        "tooltip-whatlinkshere-invert": "سئچیلمیش آدفضاسیندان اولان باغلانتیلاری گیزلتمک اوچون بو قوتویا نیشان قویون.",
-       "namespace_association": "اÛ\8cÙ\84Ú¯Û\8cلی آدفضاسی",
+       "namespace_association": "باغلی آدفضاسی",
        "tooltip-namespace_association": "بو قوتونو علامت له ین یالنیز آد بحث فضاسی یا مرتبط اولان آد فضاسی ایله انتخاب اولا",
        "blanknamespace": "(آنا)",
-       "contributions": "{{GENDER:$1|اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c}} چالیشمالاری",
-       "contributions-title": "$1 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c چالیشمالاری",
+       "contributions": "{{GENDER:$1|اÛ\8cØ´Ù\84دÙ\86}} چالیشمالاری",
+       "contributions-title": "$1 Ø§Û\8cØ´Ù\84دÙ\86 چالیشمالاری",
        "mycontris": "چالیشمالار",
        "contribsub2": "{{GENDER:$3|$1}} اوچون ($2)",
        "contributions-userdoesnotexist": "«$1» ایشلدن حسابی ثبت اولونماییب‌دیر.",
        "sp-contributions-newbies-title": "یئنی حساب‌لار اوچون ایستیفاده‌چی فالیت‌لری",
        "sp-contributions-blocklog": "باغلاما قئیدلری",
        "sp-contributions-suppresslog": "باسدیریلمیش ایشلدن فعالیت‌لری",
-       "sp-contributions-deleted": "سÛ\8cÙ\84Û\8cÙ\86Ù\85Û\8cØ´ Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c چالیشمالاری",
+       "sp-contributions-deleted": "سÛ\8cÙ\84Û\8cÙ\86Ù\85Û\8cØ´ Ø§Û\8cØ´Ù\84دÙ\86 چالیشمالاری",
        "sp-contributions-uploads": "یوکله‌نَنلر",
        "sp-contributions-logs": "قئیدلر",
        "sp-contributions-talk": "دانیشیق",
        "ipbcreateaccount": "حساب آچمانی محدودلاش‌دیر",
        "ipbemailban": "ایستیفاده‌چی‌نین ایمیل گؤندرمه‌سینه مانع اول",
        "ipbenableautoblock": "مؤوجود اولان مانعه تؤرتمه‌لری گؤستر...",
-       "ipbsubmit": "بÙ\88 Ø§Û\8cستÛ\8cÙ\81ادÙ\87 Ú\86Û\8c نی باغلا",
+       "ipbsubmit": "بÙ\88 Ø§Û\8cØ´Ù\84دنی باغلا",
        "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",
        "ipbhidename": "ایستیفاده‌چی آدینی دییشدیر‌لرده و سیاهی‌لاردا گیزلت",
        "ipb-unblock-addr": "$1 آچیلدی",
        "ipb-unblock": "ایستیفاده چی نین یا دا آی پی نین آچیلماسی",
        "ipb-blocklist": "مؤوجود بلوکلاری گؤستر",
-       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ù\81عاÙ\84Û\8cتÙ\84ری",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} Ø§Û\8cØ´Ù\84دÙ\86 Ú\86اÙ\84Û\8cØ´Ù\85اÙ\84اری",
        "unblockip": "ایستیفاده‌چی‌نین باغلانماسین گؤتور",
        "unblockiptext": "اولجه‌دن باغلانمیش بیر ای پی عنوانینا و یا ایستیفاده‌چی آدینا یازما گئری وئرمک اوچون آشاغی‌داکی فورمادا ایستیفاده ائدین.",
        "ipusubmit": "بو بلوکو گؤتور",
        "tooltip-pt-logout": "چیخیش",
        "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
-       "tooltip-ca-edit": "سÛ\8cز Ø¨Ù\88 ØµÙ\81Ø­Ù\87â\80\8cÙ\86Û\8c Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\87 Ø¨Û\8cÙ\84رسÛ\8cÙ\86Û\8cز. Ù\84Ø·Ù\81اÙ\8b Ù\82ئÛ\8cد Ø§Ø¦ØªÙ\85Ù\87â\80\8cدÙ\86 Ù\82اباÙ\82 Ø§Ø¤Ù\86â\80\8cگؤسترÛ\8cØ´ Ø¯Ù\88Ú¯Ù\85Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø§Û\8cØ´Ù\84دÛ\8cÙ\86",
+       "tooltip-ca-edit": "بÛ\87 ØµÙ\81Ø­Ù\87â\80\8câ\80\8cÙ\86Û\8c Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cر",
        "tooltip-ca-addsection": "یئنی بؤلوم یارات",
        "tooltip-ca-viewsource": "بو صحیفه‌‌ قورونوب‌دور.\nاونون قایناغینا باخا بیلرسیز",
        "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
        "tooltip-t-print": "بو صفحه‌‌نین چاپ ائدیلن سۆرومو",
        "tooltip-t-permalink": "صفحه‌نین بو سۆرومونه دَییشیلمز باغلانتی",
        "tooltip-ca-nstab-main": "مقاله‌یه باخین",
-       "tooltip-ca-nstab-user": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c صفحه‌سینه باخ",
+       "tooltip-ca-nstab-user": "اÛ\8cØ´Ù\84دÙ\86 صفحه‌سینه باخ",
        "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-help": "یاردیم صفحه‌‌سی",
        "tooltip-ca-nstab-category": "بؤلمه صحیفه‌‌سینی گؤستر",
        "tooltip-minoredit": "بو دییشیگی کیچیک دییشیک کیمی قئید ائت",
        "tooltip-save": "ديَیشیکلیکلرینیزی قئيد ائدین",
        "previousdiff": "اسکی دَییشدیرمه",
        "nextdiff": "یئنی دَییشدیرمه",
        "mediawarning": "'''خبردارلیق: بو ​​فایل نوعو پیس نیت‌لی کودلار اولا بیلر.\nبونو ایشلتمک، سیستئمینیزی تهلوکه‌یه آتا بیلر.",
-       "imagemaxsize": "Ø´Ú©Û\8cÙ\84Û\8cÙ\86 Ù\85اکسÛ\8cÙ\85اÙ\84 ØªÙ\88تÙ\88Ù\85Ù\88:<br />(Ù\81اÛ\8cÙ\84Û\8cÙ\86 ØªØµÙ\88Û\8cرÛ\8c ØµØ­Û\8cÙ\81Ù\87â\80\8cÙ\84رÛ\8c Ø§Ù\88چون)'",
+       "imagemaxsize": "عکس Ù\85اکسÛ\8cÙ\85اÙ\84 ØªÙ\88تÙ\88Ù\85Ù\88:<br />(Ù\81اÛ\8cÙ\84Û\8cÙ\86 ØªØµÙ\88Û\8cرÛ\8c ØµÙ\81Ø­Ù\87â\80\8cÙ\84رÛ\8c Ø§Û\86چون)'",
        "thumbsize": "کیچیک اؤلچو:",
        "widthheightpage": "$1 × $2، $3 {{PLURAL:$3|صحیف|صحیفه‌لر}}",
        "file-info": "فایلین اؤلچوسو: $1، MIME تیپی: $2",
        "autosumm-newblank": "بوش صحفه یاراندی",
        "lag-warn-normal": "$1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌ده}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرولمه‌يه.",
        "lag-warn-high": "وئریلنلر بازاسی سونوجوسونداکی هددیندن آرتیق گئجیکمه‌دن گؤره، $1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌دن}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرونمئيئبیلیر.",
-       "watchlistedit-normal-title": "اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ¯Û\8cÙ\85 ØµØ­Û\8cÙ\81ه‌‌لری دَییشدیر",
+       "watchlistedit-normal-title": "اÛ\8cزÙ\84Ù\87â\80\8cدÛ\8cÚ©Ù\84رÛ\8cÙ\85 ØµÙ\81Ø­ه‌‌لری دَییشدیر",
        "watchlistedit-normal-legend": "ایزله‌مه سیياهیسیندان باشلیقلارین سیلینمه‌سی",
        "watchlistedit-normal-explain": "ایزله‌مه سیياهینیزدا باشلیقلار آشاغیدا گؤستریلمیشدیر. \nبیر باشلیغی چیخارماق اوچون، يانینداکی قوتوجوغو ایشارله‌يین و «{{int:Watchlistedit-normal-submit}}» دويمه‌سینی باسین. \n[[Special:EditWatchlist/raw|سطرلر سیياهیسینی]] ده تشکیل ائده بیلرسینیز",
        "watchlistedit-normal-submit": "باشلیقین سیلینمه‌سی",
        "watchlistedit-raw-done": "ایزله‌دیکلرینیز گونجل‌لندی.",
        "watchlistedit-raw-added": "{{PLURAL:$1|بیر|$1}} باشلیق آرلیریلدی:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|بیر|$1}} باشلیق چیخاریلدی:",
+       "watchlistedit-clear-legend": "ایزلدیکلریمین لیستین سیل",
        "watchlistedit-clear-titles": "باشلیق‌لار:",
+       "watchlisttools-clear": "ایزلدیکلریمین لیستین سیل",
        "watchlisttools-view": "ایلگیلی دَییشیکلیکلره باخین",
        "watchlisttools-edit": "ایزله‌دیکلره باخ و اونلاری دَییشدیر",
        "watchlisttools-raw": "چیی ایزله‌دیکلری دَییشدیر",
        "version-libraries": "نصب اولونموش کیتابخانا",
        "version-libraries-library": "کیتاب‌ائوی",
        "version-libraries-version": "نوسخه‌",
+       "version-libraries-authors": "یازارلار",
        "redirect": "فایل، ایستیفاده‌چی، صفحه یا نوسخه آی‌دی-سی ایله یول‌لاندیرما",
        "redirect-legend": "بیر فایل یا صحیفه‌یه یول‌لاندیرما",
        "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله) یا ایستیفاده‌چی صفحه‌سینه (ایستیفاده‌چی نومره آی‌دی-سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، یا [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "گئت",
        "redirect-lookup": "آختار:",
        "redirect-value": "دَگَر:",
-       "redirect-user": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c ID",
+       "redirect-user": "اÛ\8cØ´Ù\84دÙ\86 ID",
        "redirect-page": "صفحه کیملیگی",
        "redirect-revision": "صحیفه نوسخه‌سی",
        "redirect-file": "فایل آدی",
        "specialpages-group-wiki": "بیلگیلر و آلتلر",
        "specialpages-group-redirects": "خصوصی ایستیقامتلندیرمه صحیفه‌لری",
        "specialpages-group-spam": "هرزه یازماق آلت‌لری",
-       "blankpage": "بوش صحیفه",
+       "blankpage": "بوش صفحه",
        "intentionallyblankpage": "بو صحیفه خصوصیله بوش‌دور.",
        "external_image_whitelist": " #بو سطری اولدوغو کیمی بوراخین <pre>\n#دوزگون ایفاده (رِقولار اِکسپرِشِن) پارچالارینی (یالنیز // آراسیندا اولان قیسمی) آشاغی‌يا قویون\n#بونلار ائشیک‌ده‌کی عکسلرین آدرسلریله تطبیق اولاجاقلار\n#تطبیق اولانلار، عکس کیمی گؤستریله‌جکلر، اولمایانلارا یالنیز بیر باغلانتی گؤستریله‌جکدیر\n#بو # نیشانی ایله باشلایان سطرلر، شرح کیمی نظرده توتولاجاقلار\n#بو حرفلرین کیچیک/بؤیوک اولماغینا حساس دئییل\n\n#بوتون دوزگون ایفاده پارچالارینی، بو سطرین اوستونه قویون. بو سطری اولدوغو کیمی بوراخین</pre>",
        "tags": "مومکون دییشیک‌لیک ائتیکئت‌لری",
        "tags-active-no": "یوْخ",
        "tags-edit": "دَییشدیر",
        "tags-delete": "سیل",
+       "tags-activate": "ائتکینلشدیر",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
        "tags-create-submit": "یارات",
        "tags-edit-title": "اِتیکِتلری دَییشدیر",
        "tags-edit-reason": "ندن:",
        "tags-edit-nooldid-title": "گئچرسیز هدف نوسخه",
        "comparepages": "صحیفه‌لری قارشی‌لاش‌دیر",
-       "compare-page1": "صحیفه 1",
-       "compare-page2": "صحیفه 2",
+       "compare-page1": "صفحه 1",
+       "compare-page2": "صفحه ۲",
        "compare-rev1": "نوسخه ۱",
        "compare-rev2": "نوسخه ۲",
        "compare-submit": "قارشی‌لاش‌دیر",
        "htmlform-cloner-create": "چوْخراق آرتیر",
        "htmlform-cloner-delete": "سیل",
        "htmlform-cloner-required": "ان آزی بیر دیَر گرکلیدیر.",
+       "htmlform-title-badnamespace": "[[:$1]]، «{{ns:$2}}» آدفضاسیندا دئییل.",
+       "htmlform-title-not-creatable": "«$1» بیر یارانا بیلن صفحه آدی دئییل",
+       "htmlform-title-not-exists": "[[:$1]] یوخدور.",
+       "htmlform-user-not-exists": "<strong>$1</strong> یوخدور.",
+       "htmlform-user-not-valid": "<strong>$1</strong> بیر دوزگون ایشلدن آدی دئییل.",
        "sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
        "sqlite-no-fts": "$1 بوتون یازی آختارماماق‌لا",
        "logentry-delete-delete": "$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}",
        "pagelang-name": "صفحه",
        "pagelang-language": "دیل",
        "pagelang-select-lang": "دیل سئچمه‌سی",
+       "right-pagelang": "صفحه دیلینی دَییشدیر",
+       "action-pagelang": "صفحه دیلینی دَییشدیر",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ائتکین)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ائتکیسیز''')",
+       "mediastatistics": "مدیا آمارلاری",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1}} بایت ($2؛ ٪$3)",
+       "mediastatistics-table-mimetype": "MIME تیپی",
        "mediastatistics-table-count": "فایل‌لارین سایی",
        "mediastatistics-header-unknown": "بیلینمه‌ین",
        "mediastatistics-header-bitmap": "بیت‌مپ گؤرونتولر",
        "mediastatistics-header-audio": "سس",
        "mediastatistics-header-video": "ویدیولار",
        "mediastatistics-header-office": "دفتر",
+       "mediastatistics-header-text": "یازیلی",
        "headline-anchor-title": "بو بؤلومه باغلانتی",
        "special-characters-group-latin": "لاتین",
        "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
        "special-characters-group-khmer": "خمر",
        "special-characters-title-endash": "آرالیق خطی دی",
        "special-characters-title-emdash": "آرالیق خطی چکیلیب",
-       "special-characters-title-minus": "منفی علامتی"
+       "special-characters-title-minus": "منفی علامتی",
+       "mw-widgets-dateinput-no-date": "تاریخ سئچیلمه‌ییب",
+       "mw-widgets-titleinput-description-new-page": "صفحه هله‌لیک یوخدور",
+       "mw-widgets-titleinput-description-redirect": "$1-ه داشی"
 }
index 1a73a3b..d2f7c5b 100644 (file)
        "passwordreset": "Серһүҙҙе ташлатыу",
        "passwordreset-text-one": "Серһүҙегеҙҙе ташлар өсөн ош ҡалыпты тултырығыҙ.",
        "passwordreset-text-many": "{{PLURAL:$1|Серһүҙҙе ташлар өсөн яландарҙың береһен тултырығыҙ.}}",
-       "passwordreset-legend": "Серһүҙҙе ташлатыу",
        "passwordreset-disabled": "Был викила серһүҙҙе ташлатыу ғәмәлдә түгел",
        "passwordreset-emaildisabled": "Был викиҙа электрон почта функцияһы һүндерелгән.",
        "passwordreset-username": "Ҡулланыусы исеме:",
        "resettokens": "Токендарҙы ташларға",
        "resettokens-text": "Иҫәп яҙмағыҙ менән бәйләнгән ҡайһы бер шәхси мәғлүмәттәрегеҙгә инеүгә юл асыусы токендарҙы ташлай алаһығыҙ.\n\nЯңылыштан уларҙы берәйһе менән уртаҡлашҡан  йәки аккаунтығыҙ ваттырылған осраҡта быны эшләү мотлаҡ.",
        "resettokens-no-tokens": "Ташлар өсөн токендар юҡ.",
-       "resettokens-legend": "Токендарҙы ташларға",
        "resettokens-tokens": "Токендар:",
        "resettokens-token-label": "$1 (ағымдағы мәғәнә: $2)",
        "resettokens-watchlist-token": " [[Special:Watchlist|күҙәтеүҙәрегеҙ исемлегендә биттәрҙең үҙгәрештәре]] веб-каналы өсөн токен(Atom/RSS)",
        "nmembers": "$1 {{PLURAL:$1|объект}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|объект}}",
        "nrevisions": "$1 {{PLURAL:$1|1=өлгө|өлгө}}",
-       "nviews": "$1 {{PLURAL:$1|ҡарап сығыу}}",
        "nimagelinks": "$1 {{PLURAL:$1|биттә}} ҡулланыла",
        "ntransclusions": "$1 {{PLURAL:$1|биттә}} ҡулланыла",
        "specialpage-empty": "Был һорау өсөн һөҙөмтәләр юҡ.",
        "linksearch-pat": "Эҙләү өсөн ҡалып",
        "linksearch-ns": "Исемдәр арауығы:",
        "linksearch-ok": "Эҙләү",
-       "linksearch-text": "<code>*.wikipedia.org</code> һымаҡ төркөм билдәләрен ҡулланырға була.\nКәмендә өҫкө кимәл домен кәрәк, мәҫәлән, <code>*.org</code><br />\nМөмкин булған{{PLURAL:$2|1=протокол|протоколдар}}: <code>$1</code> (башҡа протокол өҫтәлмәһә, алдан бирелгәне индерелә http://).",
+       "linksearch-text": "<code>*.wikipedia.org</code> һымаҡ төркөм билдәләрен ҡулланырға була.\nКәмендә өҫкө кимәл домен кәрәк, мәҫәлән, <code>*.org</code><br />\nМөмкин булған{{PLURAL:$2|1=протокол|протоколдар}}: $1 (башҡа протокол өҫтәлмәһә, алдан бирелгәне индерелә http://).",
        "linksearch-line": "$1 адресына $2 битенән һылтанма яһалған",
        "linksearch-error": "Төркөм билдәләре URL адрестың башында ғына ҡулланыла ала.",
        "listusersfrom": "Ошондай хәрефтәрҙән башланған ҡатнашыусыларҙы күрһәтергә:",
index 8bfc90e..e86ae79 100644 (file)
        "nlinks": "{{PLURAL:$1|a Link|$1 Links}}",
        "nmembers": "{{PLURAL:$1|1 Eindrog|$1 Eindreg}}",
        "nrevisions": "{{PLURAL:$1|oah Beorwatung|$1 Beorwatungen}}",
-       "nviews": "{{PLURAL:$1|1 Åbfråg|$1 Åbfrång}}",
        "uncategorizedpages": "Néd kategorisirde Seiten",
        "uncategorizedcategories": "Néd kategorisirde Kategorien",
        "uncategorizedimages": "Néd kategorisirde Daatein",
        "linksearch-pat": "Suachmuster:",
        "linksearch-ns": "Nåmensraum:",
        "linksearch-ok": "Suacher",
-       "linksearch-text": "Dé Speziaalseiten do daméglicht d' Suach noch Seiten, in dénen bstimmte Weblinks enthoiden san. Dodabei kennern Blootzhoiter wia beispüsweis  <code>*.beispü.at</code> hergnummer wern. Es muass mindastens a Top-Level-Domain, z. Bsp. „*.org“. auhgeem wern. <br />Unterstytzde Protokói: <code>$1</code> (Dé bittscheh bei da Suachauhgob auhgeem.)",
+       "linksearch-text": "Dé Speziaalseiten do daméglicht d' Suach noch Seiten, in dénen bstimmte Weblinks enthoiden san. Dodabei kennern Blootzhoiter wia beispüsweis  <code>*.beispü.at</code> hergnummer wern. Es muass mindastens a Top-Level-Domain, z. Bsp. „*.org“. auhgeem wern. <br />Unterstytzde Protokói: $1 (Dé bittscheh bei da Suachauhgob auhgeem.)",
        "linksearch-line": "$1 is valinkt vo $2",
        "listusers-submit": "Zoag",
        "listusers-noresult": "Koane Benutzer gfunden.",
index 82a3c73..b280c97 100644 (file)
        "passwordreset": "نوکین پسوردء بلوٹ",
        "passwordreset-text-one": "پر وتی پسوردء واترء ائ فرمء پکا کن ات.",
        "passwordreset-text-many": "{{PLURAL:$1|اگان لوٹت ایمیلء گون موکتین پسوردء پر شما راهیگ ببیت، یکئ چه ائ جاگاهانء پر بکن ات.}}",
-       "passwordreset-legend": "نوکین پسوردء بلوٹ",
        "passwordreset-disabled": "پسوردء واتر کتن مان ائ ویکیء نافعال بیتگ انت.",
        "passwordreset-emaildisabled": "ایمیلء حالتان مان ائ ویکیء نافعال بیتگ انت.",
        "passwordreset-username": "کار زوروکی نام:",
        "resettokens": "پجاروکان(tokens)ی واتر",
        "resettokens-text": "شما توان ات پجاروکان(tokens) که دزرسیء اجازت پر شمئی وتیگین دیتا همگرنچ گون شمئی اکانتء دینت، واتر بکن ات.\nهما درگتء ائ کار بیت کنت که نامالومین شهسء شمئی اکانتء لاگین کتگ انت.",
        "resettokens-no-tokens": "هچ پجاروکء پر واترء ودی نبوت.",
-       "resettokens-legend": "پجاروکان(tokens)ی واتر",
        "resettokens-tokens": "پجاروکان(tokens):",
        "resettokens-token-label": "$1 (انیگین اندازگ: $2)",
        "resettokens-watchlist-token": "ویب فیدء پجاروک [[Special:Watchlist|پیجانی تغییرات که آهانء رهگر کن ات]] (اتم/آراس‌اس)",
        "linksearch-pat": "گردگ الگو:",
        "linksearch-ns": "نام فضا:",
        "linksearch-ok": "گردگ",
-       "linksearch-text": "تقریبانی په داب \"*.wikipedia.org\" شاید استفاده بیت.<br />\nداشتگین پروتوکل: <code>$1</code>",
+       "linksearch-text": "تقریبانی په داب \"*.wikipedia.org\" شاید استفاده بیت.<br />\nداشتگین پروتوکل: $1",
        "linksearch-line": "$1 لینک بوتت چه $2",
        "linksearch-error": "تقریبیان شاید فقط ته اول نام هاست جاه کاینت.",
        "listusersfrom": "پیشدار کابرانی که شروع بنت گون:",
index 4864fe5..308e1d7 100644 (file)
        "viewyourtext": "Saimong mahihiling asin makokopya an gikanan kan '''saimong mga pinagriliwat''' sa pahinang ini:",
        "protectedinterface": "An pahinang ini nagtatao nin panlaog-olay para sa software, asin protektado tangaring malikayan an abuso.\nSa pagdagdag or pagliwat nin mga dakit-taramon para sa bilog na wiki, gamita tabi an [//translatewiki.net/translatewiki.net], an MediaWiki sa proyektong lokalisasyon.",
        "editinginterface": "'''Patanid:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.\nAn mga pagbabago kaining pahina makaka-apekto sa hitsura kan pantahaw-olay nin paragamit para sa iba man na paragamit.\nPara sa mga pagdadakit-taramon, pakikonsidera man tabi an paggagamit kan [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], an MediaWiking lokalisasyon kan proyekto.",
-       "cascadeprotected": "Ining pahina pinagprotehiran gikan sa pagliliwat nin huli ta ini pinagbale sa minasunod na {{PLURAL:$1|pahina, na iyo ngani an|mga pahina, na iyo ngani an mga}} protektado kan pinagbukasang opsyon na \"pasurunod-sunudan\":\n$2",
+       "cascadeprotected": "Ining pahina pinagprotehiran gikan sa pagliliwat nin huli ta kabaling pinagbalyo sa minasunod na {{PLURAL:$1|pahina, na iyo ngani an|mga pahina, na iyo ngani an mga}} protektado na igwa nin \"pasurunod\" na opsyong pinagbuksan:\n$2",
        "namespaceprotected": "Ika mayong permiso sa pagliwat nin mga pahina sa <strong>$1</strong> na ngarang-espasyo.",
        "customcssprotected": "Ika mayong permiso sa pagliwat kaining pahinang CSS, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
        "customjsprotected": "Ika mayong permiso sa pagliwat kaining pahinang JavaScript, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
        "passwordreset": "Pakibago kan sekretong panlaog",
        "passwordreset-text-one": "Kumpletuhon ining porma sa pagliwat otro kan saimong pasa-taramon.",
        "passwordreset-text-many": "{{PLURAL:$1|Kaagi an saro sa mga kaaganan tanganing makaresibe nin sarong temporaryong pasa-taramon sa paagi kan e-surat.}}",
-       "passwordreset-legend": "Pakibago kan sekretong panlaog",
        "passwordreset-disabled": "An pagbago kan sekretong panlaog pinagpundo sa wiking ini.",
        "passwordreset-emaildisabled": "E-surat na mga estima pinag-uruntok sa wiking ini.",
        "passwordreset-username": "Paragamit-ngaran:",
        "resettokens": "Pakibaguha an mga paduos",
        "resettokens-text": "Ika makakapagbago kan ma paduos na magtutugot nin kalangkayan pasiring sa siyertong datos na pribado na asosyado sa saimong panindog digde.\n\nGibohon mo ini kun aksidente mong naipagheras sinda sa kiisay man o kun an saimong panindog kompromitido na.",
        "resettokens-no-tokens": "Mayo nin mga paduos na babaguhon.",
-       "resettokens-legend": "Pakibaguha an mga paduos",
        "resettokens-tokens": "Mga Paduos:",
        "resettokens-token-label": "$1 (na ngunyan na halaga: $2)",
        "resettokens-watchlist-token": "Paduos para sa hungitan nin web (Atom/RSS) kan [[Special:Watchlist|mga kaliwatan sa mga pahina nin saimong bantay-listahan]]",
        "preview": "Tànawón",
        "showpreview": "Ipahiling an patanaw",
        "showdiff": "Ipahiling an mga kaliwatan",
-       "anoneditwarning": "'''Patanid:''' Ika dae nakapaglaog. An saimong estada kan IP maisusurat sa laog kan historiya nin pagliliwat sa pahinang ini.",
+       "anoneditwarning": "<strong>Patanid:</strong> Ika dae nakalaog. An saimong estada kan IP mahihiling kan publiko kun ika makahimo nin arinman na mga pagliliwat. Kun ika <strong>[$1 naglaog]</strong> o <strong>[$2 magmukna nin panindog]</strong>, an saimong mga pagliliwat ipagpapanungod sa saimong ngaran-paragamit, kaiba an iba pang mga benepisyo.",
        "anonpreviewwarning": "Dae ka tabi nakalaog. An pagtatagama matala kan saimong IP address sa historya nin pagliwat sa pahinang ini.",
        "missingsummary": "<strong>Pagiromdom:</strong>Ika dae pa nakapagtao nin sumaryo sa pagliwat. Kun i-klik mo an \"{{int:savearticle}}\" giraray, an saimong pagliwat ipagtatagama na mayo kaiyan.",
        "missingcommenttext": "Pakikaag nin sarong komento sa ibaba.",
        "readonlywarning": "'''Patanid tabi: An datos-sarayan nakakandado para sa maintenance, kaya ika dae makakapagtagama kan saimong mga pinagriliwat sa ngunyan.'''\nIka mapuwedeng makakopya asin idukot an saimong teksto pasiring sa sarong sagunson kan teksto asin itagama ini sa bandang huri.\n\nAn administrador na iyo an nagkandado kaini naghayag kaining kapaliwanagan: $1",
        "protectedpagewarning": "'''Patanid tabi: Ining pahina pinagprotektaran tanganing an mga paragamit sana na igwang pribilihiyo bilang administrador an makakapagliwat kaini.'''\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
        "semiprotectedpagewarning": "'''Note:''' Ining pahina pinagprotektaran na tanganing an mga rehistradong mga paragamit sana an mapuwedeng makapagliwat kaini.\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
-       "cascadeprotectedwarning": "'''Patanid:''' Nakakandado an pahinang ini tangarig an mga parágamit na igwang pribilehyo nin sysop sana an pwedeng maghirá kaini, huli ta kabali ini sa mga kataratang protektado na {{PLURAL:$1|pahina|mga pahina}}:",
+       "cascadeprotectedwarning": "<strong>Patanid:</strong> Ining pahina pinagprotehiran na tanganing an mga paragamit na igwa nin pan-administrador na mga pribilihiyo an makakaliwat kaini nin huli ta ini kabaling pinagbalyo sa minasunod na protektadong pasurunod na {{PLURAL:$1|pahina|mga pahina}}:",
        "titleprotectedwarning": "'''Patanid tabi: Ining pahina pinagprotektaran na tanganing [[Special:ListGroupRights|espesipikong karapatan]] minakaipo tanganing magmukna kaini.'''\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
        "templatesused": "{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining pahina:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining patanaw:",
        "nmembers": "$1 {{PLURAL:$1|miyembro|mga miyembro}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|miyembro|mga miyembro}}",
        "nrevisions": "$1 {{PLURAL:$1|pagpakarhay|mga pagpakarhay}}",
-       "nviews": "$1 {{PLURAL:$1|hiling|mga hiling}}",
        "nimagelinks": "Ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}",
        "ntransclusions": "ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}",
        "specialpage-empty": "Mayong mga resulta para sa report na ini.",
        "linksearch-pat": "Pangarugan sa paghahanap:",
        "linksearch-ns": "Espasyong-ngaran:",
        "linksearch-ok": "Hanápon",
-       "linksearch-text": "Mga tsambang baraha arog baka kan \"*.wikipedia.org\" na puwedeng paggamiton.\nMinakaipo kisera halangkaw na kamugtakan nin kinasakupan, halimbawa \"*.org\".<br />\nSuportadong {{PLURAL:$2|protokol|mga protokol}}: <code>$1</code> (defaults to http:// kun mayong protokol na pinagkaag).",
+       "linksearch-text": "Mga tsambang baraha arog baka kan \"*.wikipedia.org\" na puwedeng paggamiton.\nMinakaipo nin kisera halangkaw na kamugtakan nin kinasakupan, halimbawa \"*.org\".<br />\nSuportadong {{PLURAL:$2|protokol|mga protokol}}: $1 (defaults to http:// kun mayong protokol na pinagkaag).",
        "linksearch-line": "$1 isinugpon gikan sa $2",
        "linksearch-error": "Mga pantsambang baraha mapuwedeng magluwas sana sa poon kan hostname.",
        "listusersfrom": "Ipahiling an mga paragamit poon sa:",
        "emailuser": "E-suratan ining paragamit",
        "emailuser-title-target": "E-surat kaining {{GENDER:$1|paragamit}}",
        "emailuser-title-notarget": "E-surat na paragamit",
-       "emailpage": "E-suratan an parágamit",
        "emailpagetext": "Ika makakagamit kan porma na yaon sa ibaba sa pagpadara nin mensahe na e-surat sa {{GENDER:$1|paragamit}}.\nAn e-surat na estada sa saimong pinaglaog sa [[Special:Preferences|saimong paragamit na mga kamuyahan]] ipapahiling bilang iyo an \"Gikan sa\" estada kan e-surat, kaya an resipiyente makakapagsimbag direkta mismo saimo.",
        "defemailsubject": "{{SITENAME}} e-surat gikan sa paragamit \"$1\"",
        "usermaildisabled": "Paragamit na e-surat pinagpundo",
        "protect-locked-blocked": "Dai mo pwedeng bâgohon an mga tangga kan proteksyon mientras na ika nababágat. Ini an mga presenteng pwesto kan páhina '''$1''':",
        "protect-locked-dblock": "Dai puedeng ibalyo an mga nibel kan proteksión ta may actibong kandado sa base nin datos.\nIni an mga puesta sa ngunyan kaining páhina '''$1''':",
        "protect-locked-access": "Mayong permiso an account mo na magbàgo kan tangga nin proteksyon.\nUya an ngonyan na mga pwesto kan pahinang '''$1''':",
-       "protect-cascadeon": "Pigproprotektaran ining pahina sa ngonyan ta sabay ini sa mga nasunod na {{PLURAL:$1|pahina, na may|mga pahina, na may}} proteksyong katarata na nakaandar. Pwede mong bàgohon an tangga nin proteksyon kaining pahina, pero mayò ning epekto sa proteksyong katarata.",
+       "protect-cascadeon": "Ining pahina presenteng pinagprotehiran nin huli ta kabaling pinagbalyo sa minasunod na {{PLURAL:$1|pahina, na iyo ngani an|mga pahina, na iyo ngani an mga}} protektado na igwa nin \"pasurunod\" na opsyong pinagbuksan.\nAn mga kaliwatan sa lebel kan proteksyon kaining pahina dae makapag-apektar sa pasurunod na proteksyon.",
        "protect-default": "Tuguti an gabos na mga paragamit",
        "protect-fallback": "Minatugot sana sa mga paragamit na igwang \"$1\" na permiso",
        "protect-level-autoconfirmed": "Minatugot sana sa awtokumpirmadong mga paragamit",
        "tooltip-pt-login": "Ika inaagyat na maglaog; alagad, bako tabi ining piriritan",
        "tooltip-pt-logout": "Magluwas",
        "tooltip-ca-talk": "Orolayan dapit sa laog kan pahina",
-       "tooltip-ca-edit": "Ika makakaliwat kaining pahina. Tabi man gamiton an pindutan nin patanaw bago itatagama",
+       "tooltip-ca-edit": "Liwata ining pahina",
        "tooltip-ca-addsection": "Magpoon nin sarong baguhon na seksyon",
        "tooltip-ca-viewsource": "Ining pahina protektado.\nIka makakatanaw kan pinaggikanan",
        "tooltip-ca-history": "Mga nakaaging rebisyon kaining pahina",
        "spam_reverting": "Mabalik sa huring bersion na mayong takod sa $1",
        "spam_blanking": "An gabos na mga pahirá na may takod sa $1, pigblablanko",
        "spam_deleting": "An gabos na mga rebisyon na igwang mga kasugpunan sa $1, pinupura",
-       "simpleantispam-label": "Rikisa nin Kontra-Ispam.\nGiboha na '''DAE''' paglaogan digde!",
+       "simpleantispam-label": "Rikisa nin Kontra-Ispam.\nGiboha na <strong>dae</strong> paglaogan ini!",
        "pageinfo-title": "Impormasyon para sa \"$1\"",
        "pageinfo-not-current": "Sori, imposible baya na maitao ining impormasyon para sa lumaon nang mga rebisyon.",
        "pageinfo-header-basic": "Panuntungang impormasyon",
        "htmlform-no": "Habó",
        "htmlform-yes": "Iyo",
        "htmlform-chosen-placeholder": "Magpili nin sarong opsyon",
+       "htmlform-title-not-creatable": "\"$1\" bako sarong maimumuknang titulo kan pahina",
+       "htmlform-title-not-exists": "[[:$1]] bakong eksistido.",
        "sqlite-has-fts": "$1 na igwang suporta sa kabilogang-teksto nin paghahanap",
        "sqlite-no-fts": "$1 na mayong suporta sa kabilogang-teksto nin paghahanap",
        "logentry-delete-delete": "$1 {{GENDER:$2|pinagpura na}} pahina $3",
        "expand_templates_remove_comments": "Tanggalon an mga komento",
        "expand_templates_remove_nowiki": "Pugulan an mga taktak na <nowiki> sa resulta",
        "expand_templates_generate_xml": "Ipahiling an panlunhay na kahoy nin XML",
-       "expand_templates_preview": "Patânaw"
+       "expand_templates_preview": "Patânaw",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index d267f2a..b776403 100644 (file)
        "actionthrottled": "Дзеяньне прытрыманае",
        "actionthrottledtext": "У межах барацьбы са спамам Вы абмежаваныя ў надта частым выкананьні гэтага дзеяньня за кароткі прамежак часу, і Вы перавысілі гэтае абмежаваньне. Калі ласка, паспрабуйце яшчэ раз празь некалькі хвілінаў.",
        "protectedpagetext": "Гэтая старонка была абароненая для прадухіленьня зьменаў ці іншых дзеяньняў.",
-       "viewsourcetext": "Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:",
-       "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст <strong>вашых рэдагаваньняў</strong> на гэтай старонцы:",
+       "viewsourcetext": "Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі.",
+       "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст <strong>вашых рэдагаваньняў</strong> на гэтай старонцы.",
        "protectedinterface": "Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.",
        "editinginterface": "<strong>Увага:</strong> Вы рэдагуеце старонку, якая ўтрымлівае тэкст інтэрфэйсу праграмнага забесьпячэньня.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.",
        "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, карыстайцеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|старонка|старонкі|старонак}}",
        "createacct-benefit-body3": "{{PLURAL:$1|удзельнік|удзельнікі|удзельнікаў}} за апошні час",
        "badretype": "Уведзеныя Вамі паролі не супадаюць.",
+       "usernameinprogress": "Стварэньне рахунку з гэтым імем удзельніка ўжо ідзе. Калі ласка, пачакайце.",
        "userexists": "Уведзенае Вамі імя ўдзельніка ўжо выкарыстоўваецца кімсьці іншым. \nКалі ласка, выберыце іншае імя.",
        "loginerror": "Памылка ўваходу",
        "createacct-error": "Памылка стварэньня рахунку",
        "searchprofile-advanced": "Пашыраны",
        "searchprofile-articles-tooltip": "Пошук у $1",
        "searchprofile-images-tooltip": "Пошук файлаў",
-       "searchprofile-everything-tooltip": "Шукаць усюды (уключна са старонкамі абмеркаваньня)",
+       "searchprofile-everything-tooltip": "Шукаць усюды (у тым ліку на старонках абмеркаваньня)",
        "searchprofile-advanced-tooltip": "Шукаць у дадатковых прасторах назваў",
        "search-result-size": "$1 ($2 {{PLURAL:$2|слова|словы|словаў}})",
        "search-result-category-size": "$1 {{PLURAL:$1|элемэнт|элемэнты|элемэнтаў}} ($2 {{PLURAL:$2|падкатэгорыя|падкатэгорыі|падкатэгорыяў}}, $3 {{PLURAL:|файл|файлы|файлаў}})",
        "search-category": "(катэгорыя $1)",
        "search-file-match": "(супадае зь зьмесьцівам файла)",
        "search-suggest": "Магчыма, вы мелі на ўвазе: $1",
+       "search-rewritten": "Паказаныя вынікі для $1. Замест гэтага шукаць $2.",
        "search-interwiki-caption": "Сумежныя праекты",
        "search-interwiki-default": "Вынікі з $1:",
        "search-interwiki-more": "(яшчэ)",
        "rows": "Радкоў:",
        "columns": "Слупкоў:",
        "searchresultshead": "Пошук",
-       "stub-threshold": "Максымальны памер старонкі для паказу спасылак <a href=\"#\" class=\"stub\">як на накід</a> (у байтах):",
+       "stub-threshold": "Максымальны памер старонкі для паказу спасылак як на накід ($1):",
+       "stub-threshold-sample-link": "прыклад",
        "stub-threshold-disabled": "Выключаны",
        "recentchangesdays": "Колькасьць дзён для паказу ў апошніх зьменах:",
        "recentchangesdays-max": "(максымальна $1 {{PLURAL:$1|дзень|дні|дзён}})",
        "right-minoredit": "пазначэньне рэдагаваньняў як дробныя",
        "right-move": "перанос старонак",
        "right-move-subpages": "перанос старонак разам зь іх падстаронкамі",
-       "right-move-rootuserpages": "Ð\9fеранос карэнных старонак удзельнікаў",
+       "right-move-rootuserpages": "перанос карэнных старонак удзельнікаў",
        "right-move-categorypages": "перанос старонак катэгорыяў",
        "right-movefile": "перайменаваньне файлаў",
        "right-suppressredirect": "не ствараць перанакіраваньне са старой назвы пасьля пераносу старонкі",
        "right-autoconfirmed": "ня дзейнічаюць абмежаваньні хуткасьці па IP",
        "right-bot": "лічыцца аўтаматычным працэсам",
        "right-nominornewtalk": "не паведамляць удзельнікам пра новыя паведамленьні на іх старонках гутарак, калі зробленыя там праўкі былі дробнымі",
-       "right-apihighlimits": "Ð\9cенш абмежаваньняў на выкананьне API-запытаў",
-       "right-writeapi": "выкарыстаньне API для запісаў",
+       "right-apihighlimits": "менш абмежаваньняў на выкананьне API-запытаў",
+       "right-writeapi": "выкарыстаньне API для запісу",
        "right-delete": "выдаленьне старонак",
        "right-bigdelete": "Выдаленьне старонак зь вялікімі гісторыямі",
-       "right-deletelogentry": "Ð\92ыдаленьне і аднаўленьне асобных запісаў журналу",
+       "right-deletelogentry": "выдаленьне і аднаўленьне асобных запісаў журналу",
        "right-deleterevision": "выдаленьне і аднаўленьне асобных вэрсіяў старонак",
        "right-deletedhistory": "прагляд выдаленай гісторыі старонак без доступу да выдаленага тэксту",
        "right-deletedtext": "прагляд выдаленага тэксту і зьменаў паміж выдаленымі вэрсіямі старонак",
        "recentchanges-noresult": "Зьмены, што пасуюць дадзенаму пэрыяду і крытэрам, ня знойдзеныя.",
        "recentchanges-feed-description": "Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} праз гэтую стужку.",
        "recentchanges-label-newpage": "Гэтым рэдагаваньнем была створаная новая старонка",
-       "recentchanges-label-minor": "Гэтае рэдагаваньне — дробнае",
+       "recentchanges-label-minor": "Гэта дробнае рэдагаваньне",
        "recentchanges-label-bot": "Гэтае рэдагаваньне зробленае робатам",
        "recentchanges-label-unpatrolled": "Гэтае рэдагаваньне яшчэ не было адпатруляванае",
        "recentchanges-label-plusminus": "Памер старонкі зьмяніўся на такую колькасьць байтаў",
        "newpageletter": "Н",
        "boteditletter": "р",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|назіральнік|назіральнікі|назіральнікаў}}]",
-       "rc_categories": "Абмежаваць катэгорыямі (разьдзяляйце знакам «|»)",
-       "rc_categories_any": "УÑ\81е",
+       "rc_categories": "Абмежаваць катэгорыямі (разьдзяляйце знакам «|»):",
+       "rc_categories_any": "Ð\9bÑ\8eбаÑ\8f Ð· Ð°Ð±Ñ\80анÑ\8bÑ\85",
        "rc-change-size-new": "$1 {{PLURAL:$1|байт|байты|байтаў}} пасьля зьмены",
        "newsectionsummary": "/* $1 */ новая сэкцыя",
        "rc-enhanced-expand": "Паказаць падрабязнасьці",
        "recentchangeslinked-feed": "Зьвязаныя праўкі",
        "recentchangeslinked-toolbox": "Зьвязаныя праўкі",
        "recentchangeslinked-title": "Зьвязаныя праўкі для «$1»",
-       "recentchangeslinked-summary": "Гэта сьпіс апошніх зьменаў старонак, на якія спасылаецца азначаная старонка (ці ўсіх старонак, якія належаць азначанай катэгорыі).\nСтаронкі з [[Special:Watchlist|Вашага сьпісу назіраньня]] пазначаныя '''тлустым шрыфтам'''.",
+       "recentchangeslinked-summary": "Гэта сьпіс апошніх зьменаў старонак, на якія спасылаецца азначаная старонка (ці ўсіх старонак, якія належаць азначанай катэгорыі).\nСтаронкі з [[Special:Watchlist|Вашага сьпісу назіраньня]] пазначаныя <strong>тоўстым шрыфтам</strong>.",
        "recentchangeslinked-page": "Назва старонкі:",
        "recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку",
        "upload": "Загрузіць файл",
        "upload-too-many-redirects": "URL-адрас утрымлівае зашмат перанакіраваньняў",
        "upload-http-error": "Узьнікла памылка HTTP: $1",
        "upload-copy-upload-invalid-domain": "Капіяваньне загрузак не дазволенае ў гэтым дамэне.",
+       "upload-dialog-title": "Загрузка файла",
+       "upload-dialog-error": "Адбылася памылка",
+       "upload-dialog-warning": "Зьявілася папярэджаньне",
+       "upload-dialog-button-cancel": "Адмяніць",
+       "upload-dialog-button-done": "Зроблена",
+       "upload-dialog-button-save": "Захаваць",
+       "upload-dialog-button-upload": "Загрузіць",
+       "upload-dialog-label-select-file": "Абраць файл",
+       "upload-dialog-label-infoform-title": "Падрабязнасьці",
+       "upload-dialog-label-infoform-name": "Назва",
+       "upload-dialog-label-infoform-description": "Апісаньне",
+       "upload-dialog-label-usage-title": "Выкарыстаньне",
+       "upload-dialog-label-usage-filename": "Назва файлу",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
        "booksources-text": "Ніжэй знаходзіцца сьпіс спасылак на іншыя сайты, якія прадаюць новыя і патрыманыя кнігі, і могуць таксама мець інфармацыю пра кнігі, якія Вы шукаеце:",
        "booksources-invalid-isbn": "Пададзены няслушны ISBN; праверце, магчыма ўзьніклі памылкі пры пераносе нумару з арыгінальнай крыніцы.",
        "specialloguserlabel": "Выканаўца:",
-       "speciallogtitlelabel": "Мэта (назва ці удзельнік):",
+       "speciallogtitlelabel": "Мэта (назва ці {{ns:user}}:імя_ўдзельніка для ўдзельніка):",
        "log": "Журналы падзеяў",
        "all-logs-page": "Усе публічныя журналы падзеяў",
        "alllogstext": "Сумесны паказ усіх журналаў падзеяў {{GRAMMAR:родны|{{SITENAME}}}}.\nВы можаце адфільтраваць вынікі па тыпе журналу, удзельніку ці старонцы.",
        "linksearch-pat": "Узор для пошуку:",
        "linksearch-ns": "Прастора назваў:",
        "linksearch-ok": "Шукаць",
-       "linksearch-text": "Можна ўжываць сымбалі падстаноўкі, напрыклад, «*.wikipedia.org».\nНеабходны дамэн першага ўзроўню, напрыклад, «*.org».<br />\n{{PLURAL:$2|1=Пратакол, які падтрымліваецца|Пратаколы, якія падтрымліваюцца}}: <code>$1</code> (дапомна http://, калі пратакол не пазначаны).",
+       "linksearch-text": "Можна ўжываць сымбалі падстаноўкі, напрыклад, «*.wikipedia.org».\nНеабходны дамэн першага ўзроўню, напрыклад, «*.org».<br />\n{{PLURAL:$2|1=Пратакол, які падтрымліваецца|Пратаколы, якія падтрымліваюцца}}: $1 (дапомна http://, калі пратакол не пазначаны).",
        "linksearch-line": "Спасылка на $1 з $2",
        "linksearch-error": "Сымбалі падстаноўкі могуць ужывацца толькі ў пачатку адрасоў.",
        "listusersfrom": "Паказаць удзельнікаў, пачынаючы з:",
        "emailuser": "Даслаць ліст",
        "emailuser-title-target": "Адправіць гэта па электроннай пошце {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}}",
        "emailuser-title-notarget": "Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце",
-       "emailpage": "Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце",
        "emailpagetext": "Вы можаце выкарыстаць форму ніжэй, каб даслаць {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}} ліст па электроннай пошце.\nАдрас электроннай пошты, які Вы пазначалі ў [[Special:Preferences|сваіх наладах]], будзе пазначаны ў полі ліста «Ад», і {{GENDER:$1|ўдзельнік|ўдзельніца}} зможа даслаць на гэты адрас адказ.",
        "defemailsubject": "Ліст з {{GRAMMAR:родны|{{SITENAME}}}} ад {{GENDER:$1|удзельніка|удзельніцы}} «$1»",
        "usermaildisabled": "Электронная пошта ўдзельніка адключаная",
        "emailccsubject": "Копія Вашага ліста да $1: $2",
        "emailsent": "Ліст адасланы",
        "emailsenttext": "Ваш ліст быў адасланы.",
-       "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailpage}}» {{GRAMMAR:родны|{{SITENAME}}}}.",
+       "emailuserfooter": "Гэты ліст быў дасланы {{GENDER:$2|ўдзельнікам|ўдзельніцай}} $1 да {{GENDER:$2|ўдзельніка|ўдзельніцы}} $2 з дапамогай функцыі «{{int:emailuser}}» {{GRAMMAR:родны|{{SITENAME}}}}.",
        "usermessage-summary": "Паведамленьне пра выхад з сыстэмы.",
        "usermessage-editor": "Дастаўка сыстэмных паведамленьняў",
        "watchlist": "Сьпіс назіраньня",
        "watchlistanontext": "Калі ласка, увайдзіце ў сыстэму, каб праглядаць альбо рэдагаваць сьпіс назіраньня.",
        "watchnologin": "Вы не ўвайшлі ў сыстэму",
        "addwatch": "Дадаць ў сьпіс назіраньня",
-       "addedwatchtext": "Старонка «[[:$1]]» была дададзеная да Вашага [[Special:Watchlist|сьпісу назіраньня]].\nНаступныя зьмены ў гэтай старонцы і зьвязанай зь ёю старонцы абмеркаваньняў будуць бачныя там.",
+       "addedwatchtext": "Старонка «[[:$1]]» і яе старонка абмеркаваньня былі дададзеная да Вашага [[Special:Watchlist|сьпісу назіраньня]].",
        "addedwatchtext-short": "Старонка «$1» была дададзеная ў ваш сьпіс назіраньня.",
        "removewatch": "Выдаліць са сьпісу назіраньня",
-       "removedwatchtext": "Старонка «[[:$1]]» была выдаленая з [[Special:Watchlist|Вашага сьпісу назіраньня]].",
+       "removedwatchtext": "Старонка «[[:$1]]» і яе старонка абмеркаваньня былі выдаленыя з Вашага [[Special:Watchlist|сьпісу назіраньня]].",
        "removedwatchtext-short": "Старонка «$1» была выдаленая з вашага сьпісу назіраньня.",
        "watch": "Назіраць",
        "watchthispage": "Назіраць за гэтай старонкай",
        "changecontentmodel": "Зьмена мадэлі зьместу старонкі",
        "changecontentmodel-legend": "Зьмена мадэлі зьместу",
        "changecontentmodel-title-label": "Назва старонкі",
+       "changecontentmodel-model-label": "Новая мадэль зьместу",
+       "changecontentmodel-reason-label": "Прычына:",
+       "changecontentmodel-success-title": "Мадэль зьместу была зьмененая",
+       "changecontentmodel-success-text": "Тып зьместу [[:$1]] быў зьменены.",
+       "changecontentmodel-cannot-convert": "Зьмест [[:$1]] ня можа быць ператвораны ў тып $2.",
+       "changecontentmodel-nodirectediting": "Мадэль зьместу $1 не падтрымлівае наўпроставае рэдагаваньне",
+       "log-name-contentmodel": "Журнал зьменаў мадэляў зьместу",
+       "log-description-contentmodel": "Падзеі, зьвязаныя з мадэлямі зьместу старонак",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мадэль зьместу старонкі $3 з «$4» на «$5»",
+       "logentry-contentmodel-change-revertlink": "адкаціць",
+       "logentry-contentmodel-change-revert": "адкат",
        "protectlogpage": "Журнал абаронаў",
        "protectlogtext": "Ніжэй пададзены сьпіс зьменаў абароны старонкі.\nГлядзіце [[Special:ProtectedPages|сьпіс абароненых старонак на цяперашні момант]].",
        "protectedarticle": "абароненая «[[$1]]»",
        "undeletepagetext": "{{PLURAL:$1|1=Наступная старонка была выдаленая, але яна знаходзіцца ў архіве і можа быць адноўленая|Наступныя старонкі былі выдаленыя, але яны знаходзяцца ў архіве і могуць быць адноўленыя}}.\nАрхіў пэрыядычна чысьціцца.",
        "undelete-fieldset-title": "Аднавіць вэрсіі",
        "undeleteextrahelp": "Для поўнага аднаўленьня гісторыі рэдагаваньня старонкі, пакіньце ўсе адзнакі нявызначнымі і націсьніце '''''{{int:undeletebtn}}'''''.\nДля частковага аднаўленьня, пазначце тыя вэрсіі старонкі, якія трэба аднавіць і націсьніце '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "У архіве $1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}}",
+       "undeleterevisions": "{{PLURAL:$1|Выдаленая|Выдаленыя}} $1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}}",
        "undeletehistory": "Калі Вы адновіце старонку, будуць адноўленыя ўсе яе вэрсіі разам з журналам падзеяў.\nКалі пасьля выдаленьня была створаная новая старонка з такой жа назвай, адноўленыя вэрсіі зьявяцца ў гісторыі перад новымі вэрсіямі.",
        "undeleterevdel": "Аднаўленьня не адбудзецца, калі ў яго выніку будзе выдаленая апошняя вэрсія старонкі ці файла.\nУ гэтым выпадку, Вам трэба зьняць адзнакі, ці паказаць апошнія выдаленыя вэрсіі.",
        "undeletehistorynoadmin": "Гэтая старонка была выдаленая.\nПрычына выдаленьня пададзена ніжэй, разам са зьвесткамі ўдзельніка, які рэдагаваў старонку перад выдаленьнем.\nТэкст выдаленай старонкі могуць глядзець толькі адміністратары.",
        "tooltip-ca-nstab-main": "Паказаць зьмест старонкі",
        "tooltip-ca-nstab-user": "Паказаць старонку ўдзельніка",
        "tooltip-ca-nstab-media": "Паказаць старонку мэдыяфайла",
-       "tooltip-ca-nstab-special": "Гэта спэцыяльная старонка, і Вы ня можаце яе рэдагаваць",
+       "tooltip-ca-nstab-special": "Гэта спэцыяльная старонка і яе нельга рэдагаваць",
        "tooltip-ca-nstab-project": "Паказаць старонку праекту",
        "tooltip-ca-nstab-image": "Паказаць старонку файла",
        "tooltip-ca-nstab-mediawiki": "Паказаць сыстэмнае паведамленьне",
        "tooltip-watchlistedit-raw-submit": "Абнавіць сьпіс назіраньня",
        "tooltip-recreate": "Аднавіць старонку, ня гледзячы на тое, што яна была выдаленая",
        "tooltip-upload": "Пачаць загрузку",
-       "tooltip-rollback": "«Ð\90дкаÑ\82» Ð²Ñ\8fÑ\80Ñ\82ае Ñ\80Ñ\8dдагаванÑ\8cнÑ\96 Ð¿Ð°Ð¿Ñ\8fÑ\80Ñ\8dднÑ\8fга Ñ\9eдзелÑ\8cнÑ\96ка Ð°Ð´Ð½Ñ\8bм ÐºÐ»Ñ\96кам.",
+       "tooltip-rollback": "«Ð\90дкаÑ\82» Ð¿Ñ\80Ñ\8bбÑ\96Ñ\80ае Ñ\80Ñ\8dдагаванÑ\8cнÑ\96 Ð°Ð¿Ð¾Ñ\88нÑ\8fга Ñ\9eдзелÑ\8cнÑ\96ка Ð°Ð´Ð½Ñ\8bм Ð½Ð°Ñ\86Ñ\96Ñ\81канÑ\8cнем",
        "tooltip-undo": "«Скасаваць» — скасоўвае гэтае рэдагаваньне і адкрывае акно рэдагаваньня ў рэжыме прагляду.\nДазваляе дадаваць прычыну адкату ў апісаньне зьменаў.",
        "tooltip-preferences-save": "Захаваць налады",
        "tooltip-summary": "Увядзіце кароткае апісаньне",
        "spam_reverting": "Адкат да апошняй вэрсіі без спасылак на $1",
        "spam_blanking": "Усе вэрсіі ўтрымліваюць спасылкі на $1, чыстка",
        "spam_deleting": "Усе вэрсіі ўтрымлівалі спасылкі на $1, выдаляем",
-       "simpleantispam-label": "Праверка анты-спаму.\n'''НЕ''' запаўняйце тут нічога!",
+       "simpleantispam-label": "Праверка анты-спаму.\n<strong>Не</strong> запаўняйце тут нічога!",
        "pageinfo-title": "Інфармацыя пра «$1»",
        "pageinfo-not-current": "Даруйце, мы ня можам падаць гэтыя зьвесткі для старых вэрсіяў.",
        "pageinfo-header-basic": "Асноўныя зьвесткі",
        "pageinfo-robot-index": "Дазволеная",
        "pageinfo-robot-noindex": "Не дазволеная",
        "pageinfo-watchers": "Колькасьць назіральнікаў і назіральніц",
+       "pageinfo-visiting-watchers": "Колькасьць удзельнікаў, якія назіраюць за старонкай і бачылі апошнія зьмены",
        "pageinfo-few-watchers": "Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}",
+       "pageinfo-few-visiting-watchers": "Могуць быць, а могуць ня быць удзельнікі, якія назіраюць за старонкай і бачылі апошнія зьмены",
        "pageinfo-redirects-name": "Перанакіраваньняў на гэтую старонку",
        "pageinfo-subpages-name": "Колькасьць падстаронак",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перанакіраваньне|перанакіраваньні|перанакіраваньняў}}; $3 {{PLURAL:$3|звычайная|звычайныя|звычайных}})",
        "metadata-help": "Гэты файл утрымлівае дадатковую інфармацыю, хутчэй за ўсё дададзеную зь лічбавай фотакамэры ці сканэра.\nКалі файл рэдагаваўся пасьля стварэньня, то частка зьвестак можа не адпавядаць зьмененаму файлу.",
        "metadata-expand": "Паказаць падрабязнасьці",
        "metadata-collapse": "Схаваць падрабязнасьці",
-       "metadata-fields": "Палі мэта-зьвестак выявы з гэтага сьпісу будуць паказаныя на старонцы выявы, калі табліца мэта-зьвестак будзе згорнутая.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Палі мэта-зьвестак выявы з гэтага сьпісу будуць паказаныя на старонцы выявы, калі табліца мэта-зьвестак будзе згорнутая. Іншыя будуць схаваныя па змоўчаньні.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Шырыня",
        "exif-imagelength": "Вышыня",
        "exif-bitspersample": "Глыбіня колеру",
        "blankpage": "Пустая старонка",
        "intentionallyblankpage": "Гэтая старонка наўмысна пакінутая пустой",
        "external_image_whitelist": " #Пакіньце гэты радок такім, які ён ёсьць<pre>\n#Зьмясьціце часткі рэгулярных выразаў (толькі частку якая знаходзіцца паміж //) ніжэй\n#Яны будуць суаднесеныя з URL-адрасамі вонкавых выяваў\n#Тыя, якія будуць пасаваць будуць паказвацца як выявы, астатнія толькі як спасылкі\n#Радкі, пазначаныя #, лічыцца камэнтарамі\n#Рэгістар сымбаляў ня ўлічваецца\n\n#Зьмясьціце ўсе часткі рэгулярных выразаў над гэтым радком. Сам радок пакіньце ў такім жа выглядзе</pre>",
-       "tags": "СлÑ\83Ñ\88нÑ\8bÑ\8f Ñ\82Ñ\8dгі зьменаў",
-       "tag-filter": "Фільтар [[Special:Tags|тэгаў]]:",
+       "tags": "Ð\94зейнÑ\8bÑ\8f Ð¼ÐµÑ\82кі зьменаў",
+       "tag-filter": "Фільтар [[Special:Tags|метак]]:",
        "tag-filter-submit": "Фільтар",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=ТÑ\8dг|ТÑ\8dгі}}]]: $2)",
-       "tags-title": "ТÑ\8dгі",
-       "tags-intro": "На гэтай старонцы знаходзіцца сьпіс тэгаў, якімі праграмнае забесьпячэньне можа пазначыць рэдагаваньне, і іх значэньне.",
-       "tags-tag": "Назва тэга",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Ð\9cеÑ\82ка|Ð\9cеÑ\82кі}}]]: $2)",
+       "tags-title": "Ð\9cеÑ\82кі",
+       "tags-intro": "На гэтай старонцы знаходзіцца сьпіс метак, якімі праграмнае забесьпячэньне можа пазначыць рэдагаваньне, і іх значэньне.",
+       "tags-tag": "Назва меткі",
        "tags-display-header": "Новыя запісы ў сьпісе зьменаў",
        "tags-description-header": "Поўнае апісаньне значэньня",
        "tags-source-header": "Крыніца",
        "tags-delete-too-many-uses": "Метка «$1» выкарыстаная ў больш чым $2 {{PLURAL:$2|вэрсіі|вэрсіях}}, адпаведна, яна ня можа быць выдаленая.",
        "tags-delete-warnings-after-delete": "Метка «$1» была пасьпяхова выдаленая, але {{PLURAL:$2|1=атрыманае наступнае папярэджаньне|атрыманыя наступныя папярэджаньні}}:",
        "tags-activate-title": "Актываваць метку",
+       "tags-activate-question": "Вы зьбіраецеся актываваць метку «$1».",
+       "tags-activate-reason": "Прычына:",
+       "tags-activate-not-allowed": "Немагчыма актываваць метку «$1».",
+       "tags-activate-not-found": "Метка «$1» не існуе.",
+       "tags-activate-submit": "Актываваць",
+       "tags-deactivate-title": "Дэактываваць метку",
+       "tags-deactivate-question": "Вы зьбіраецеся дэактываваць метку «$1».",
+       "tags-deactivate-reason": "Прычына:",
+       "tags-deactivate-not-allowed": "Немагчыма дэактываваць метку «$1».",
+       "tags-deactivate-submit": "Адключыць",
+       "tags-apply-no-permission": "Вы ня маеце права прымяняць меткі да вашых рэдагаваньняў.",
+       "tags-apply-not-allowed-one": "Метка «$1» ня можа быць прызначаная ўручную.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
+       "tags-update-no-permission": "Вы ня маеце права на дадаваньне ці выдаленьне метак зьменаў для асобных вэрсіяў ці запісаў журналаў.",
+       "tags-update-add-not-allowed-one": "Метка «$1» ня можа быць дададзеная ўручную.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|1=Наступную метку|Наступныя меткі}} нельга дадаваць уручную: $1",
+       "tags-update-remove-not-allowed-one": "Метка «$1» ня можа быць выдаленая.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|1=Наступная метка на можа быць выдаленая|Наступныя меткі ня могуць быць выдаленыя}} ўручную: $1",
+       "tags-edit-title": "Рэдагаваньне метак",
+       "tags-edit-manage-link": "Кіраваньне меткамі",
+       "tags-edit-revision-selected": "{{PLURAL:$1|1=Абраная вэрсія|Абраныя вэрсіі}} [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|1=Абраны запіс|Абраныя запісы}} журнала:",
+       "tags-edit-revision-legend": "Дадаць ці прыбраць меткі з {{PLURAL:$1|1=гэтай вэрсіі|усіх $1 вэрсіяў}}",
+       "tags-edit-logentry-legend": "Дадаць ці прыбраць меткі з {{PLURAL:$1|1=гэтага запісу|усіх $1 запісаў}} журналу",
+       "tags-edit-existing-tags": "Наяўныя меткі:",
+       "tags-edit-existing-tags-none": "«Няма»",
+       "tags-edit-new-tags": "Новыя меткі:",
+       "tags-edit-add": "Дадаць гэтыя меткі:",
+       "tags-edit-remove": "Выдаліць гэтыя меткі:",
+       "tags-edit-remove-all-tags": "(выдаліць усе меткі)",
+       "tags-edit-chosen-placeholder": "Абярыце меткі",
+       "tags-edit-chosen-no-results": "Адпаведныя меткі ня знойдзеныя",
        "comparepages": "Параўнаньне старонак",
        "compare-page1": "Старонка 1",
        "compare-page2": "Старонка 2",
        "htmlform-cloner-create": "Дадаць больш",
        "htmlform-cloner-delete": "Выдаліць",
        "htmlform-cloner-required": "Патрабуецца як мінімум яшчэ адно значэньне.",
+       "htmlform-user-not-exists": "<strong>$1</strong> не існуе.",
+       "htmlform-user-not-valid": "<strong>$1</strong> — некарэктнае імя карыстальніка.",
        "sqlite-has-fts": "$1 з падтрымкай поўнатэкстнага пошуку",
        "sqlite-no-fts": "$1 без падтрымкі поўнатэкстнага пошуку",
        "logentry-delete-delete": "$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3",
        "revdelete-uname-unhid": "імя ўдзельніка адкрытае",
        "revdelete-restricted": "ужыць абмежаваньні для адміністратараў",
        "revdelete-unrestricted": "зьнятыя абмежаваньні для адміністратараў",
+       "logentry-block-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|разблякаваў|разблякавала}} {{GENDER:$4|$3}}",
+       "logentry-suppress-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|аб’яднаў|аб’яднала}} $3 у $4 (вэрсіі да $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня",
        "special-characters-title-endash": "кароткі працяжнік",
        "special-characters-title-emdash": "доўгі працяжнік",
        "special-characters-title-minus": "мінус",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "старонка яшчэ не існуе"
 }
index 59edae7..61b60cb 100644 (file)
        "passwordreset": "Выслаць мне новы пароль",
        "passwordreset-text-one": "Запоўніце гэту форму, каб атрымаць часовы пароль па эл.пошце.",
        "passwordreset-text-many": "{{PLURAL:$1|Запоўніце адно з палёў, каб атрымаць тымчасовы пароль па электроннай пошце.}}",
-       "passwordreset-legend": "Пераўстанавіць пароль",
        "passwordreset-disabled": "Функцыя пераўсталёўкі пароля адключаная на гэтай вікі.",
        "passwordreset-emaildisabled": "Функцыі эл.пошты адключаны на гэтай Вікі.",
        "passwordreset-username": "Імя ўдзельніка:",
        "resettokens": "Скінуць токены",
        "resettokens-text": "Вы можаце пераўстанавіць токены, якія дазваляюць атрымліваць доступ да пэўных прыватных звестак, звязаных з вашым уліковым запісам.\n\nВы мусіце скінуць токены, калі выпадкова падзяліліся імі з кім-небудзь, ці ваш уліковы запіс быў скампраметаваны.",
        "resettokens-no-tokens": "Няма чаго скідваць.",
-       "resettokens-legend": "Скідванне токенаў",
        "resettokens-tokens": "Токены:",
        "resettokens-token-label": "$1 (актуальнае значэнне: $2)",
        "resettokens-watchlist-token": "Токен струменя (Atom/RSS) [[Special:Watchlist|зменаў старонак у вашым спісе назірання]]",
        "parser-template-loop-warning": "Цыклічнае ўключэнне шаблона: [[$1]]",
        "parser-template-recursion-depth-warning": "Вычарпаны ліміт глыбіні ўключэння шаблонаў ($1)",
        "language-converter-depth-warning": "Перавышана глыбіня моўнага канвертэра ($1)",
-       "node-count-exceeded-category": "СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ð¿ÐµÑ\80аÑ\81Ñ\8fгнÑ\83лÑ\96 ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c Ð²Ñ\83злоÑ\9e",
-       "node-count-exceeded-category-desc": "Ð\9dа Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ð¿ÐµÑ\80авÑ\8bÑ\88ана Ð¼Ð°ÐºÑ\81Ñ\96малÑ\8cнаÑ\8f ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c Ð²Ñ\83злоÑ\9e.",
-       "node-count-exceeded-warning": "СÑ\82аÑ\80онка Ð¿ÐµÑ\80аÑ\81Ñ\8fгнÑ\83ла ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c Ð²Ñ\83злоÑ\9e",
+       "node-count-exceeded-category": "СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ð¿ÐµÑ\80аÑ\81Ñ\8fгнÑ\83лÑ\96 ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c ÐºÑ\80опак",
+       "node-count-exceeded-category-desc": "Ð\9dа Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b Ð¿ÐµÑ\80авÑ\8bÑ\88ана Ð¼Ð°ÐºÑ\81Ñ\96малÑ\8cнаÑ\8f ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c ÐºÑ\80опак.",
+       "node-count-exceeded-warning": "СÑ\82аÑ\80онка Ð¿ÐµÑ\80аÑ\81Ñ\8fгнÑ\83ла ÐºÐ¾Ð»Ñ\8cкаÑ\81Ñ\86Ñ\8c ÐºÑ\80опак",
        "expansion-depth-exceeded-category": "Старонкі, якія перасягнулі глыбіню разгортвання",
        "expansion-depth-exceeded-category-desc": "На старонцы перасягнута максімальная глыбіня разгортвання.",
        "expansion-depth-exceeded-warning": "Старонка перасягнула глыбіню разгортвання",
        "nmembers": "$1 {{PLURAL:$1|складнік|складнікі|складнікаў}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|складнік|складнікі|складнік}}",
        "nrevisions": "$1 {{PLURAL:$1|версія|версіі|версій}}",
-       "nviews": "$1 {{PLURAL:$1|паказ|паказаў}}",
        "nimagelinks": "Выкарыстоўваецца на $1 {{PLURAL:$1|старонцы|старонках|старонках}}",
        "ntransclusions": "выкарыстоўваецца на $1 {{PLURAL:$1|старонцы|старонках|старонках}}",
        "specialpage-empty": "Няма вынікаў для гэтай справаздачы.",
        "linksearch-pat": "Што шукаецца:",
        "linksearch-ns": "Прастора назваў:",
        "linksearch-ok": "Знайсці",
-       "linksearch-text": "Можна выкарыстоўваць падстаноўныя сімвалы, напрыклад, <code>*.wikipedia.org</code>.\nНеабходзен прынамсі дамен верхняга ўзроўню, напрыклад <code>*.org</code><br />\n{{PLURAL:$2|Пратакол|Пратаколы}}, якія падтрымліваюцца: <code>$1</code> (прадвызначаны http:// калі пратакол не ўказаны)",
+       "linksearch-text": "Можна выкарыстоўваць падстаноўныя сімвалы, напрыклад, <code>*.wikipedia.org</code>.\nНеабходзен прынамсі дамен верхняга ўзроўню, напрыклад <code>*.org</code><br />\n{{PLURAL:$2|Пратакол|Пратаколы}}, якія падтрымліваюцца: $1 (прадвызначаны http:// калі пратакол не ўказаны)",
        "linksearch-line": "$1, на які спасылаецца $2",
        "linksearch-error": "Узоры можна ставіць толькі ў пачатак адрасу.",
        "listusersfrom": "Паказаць удзельнікаў, пачаўшы з:",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
        "limitreport-walltime": "Выкарыстанне рэальнага часу",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
-       "limitreport-ppvisitednodes": "Ð\9aолÑ\8cкаÑ\81Ñ\86Ñ\8c Ð²Ñ\83злоÑ\9e, наведаных прэпрацэсарам",
-       "limitreport-ppgeneratednodes": "Ð\9aолÑ\8cкаÑ\81Ñ\86Ñ\8c Ð²Ñ\83злоÑ\9e, створаных прэпрацэсарам",
+       "limitreport-ppvisitednodes": "Ð\9aолÑ\8cкаÑ\81Ñ\86Ñ\8c ÐºÑ\80опак, наведаных прэпрацэсарам",
+       "limitreport-ppgeneratednodes": "Ð\9aолÑ\8cкаÑ\81Ñ\86Ñ\8c ÐºÑ\80опак, створаных прэпрацэсарам",
        "limitreport-postexpandincludesize": "Памер уключэнняў па разгортванні",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байты|байтаў}}",
        "limitreport-templateargumentsize": "Памер аргументаў шаблона",
index a3d77f7..45d6601 100644 (file)
@@ -27,7 +27,8 @@
                        "Vodnokon4e",
                        "ShadeOfGrey",
                        "PetaRZ",
-                       "Macofe"
+                       "Macofe",
+                       "V111P"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "nouserspecified": "Необходимо е да се посочи потребителско име.",
        "login-userblocked": "Този потребител е блокиран. Влизането в системата не е позволено.",
        "wrongpassword": "Въведената парола е невалидна. Опитайте отново.",
-       "wrongpasswordempty": "Ð\92Ñ\8aведенаÑ\82а Ð¿Ð°Ñ\80ола Ðµ Ð¿Ñ\80азна. Опитайте отново.",
+       "wrongpasswordempty": "Ð\9dе Ðµ Ð²Ñ\8aведена Ð¿Ð°Ñ\80ола. Опитайте отново.",
        "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.",
        "password-name-match": "Паролата ви трябва да се различава от потребителското ви име.",
        "password-login-forbidden": "Използването на това потребителско име и парола е забранено.",
        "passwordreset": "Възстановяване на парола",
        "passwordreset-text-one": "Попълването на формуляра ще доведе до възстановяване на паролата.",
        "passwordreset-text-many": "{{PLURAL:$1|За получаване на временна парола по електронна поща е необходимо да попълните едно от полетата.}}",
-       "passwordreset-legend": "Възстановяване на парола",
        "passwordreset-disabled": "Възстановяването на паролата е изключено в това уики.",
        "passwordreset-emaildisabled": "Функцията за електронна поща е изключена в това уики.",
        "passwordreset-username": "Потребителско име:",
        "changeemail-throttled": "Направили сте твърде много опити за влизане в системата. \nМоля, изчакайте $1 преди следващия опит.",
        "resettokens": "Изчистване на маркерите",
        "resettokens-no-tokens": "Няма маркери за изчистване.",
-       "resettokens-legend": "Изчистване на маркерите",
        "resettokens-tokens": "Маркери:",
        "resettokens-token-label": "$1 (текуща стойност: $2)",
        "resettokens-watchlist-token": "Маркер за уеб хранилка (Atom/RSS) на [[Special:Watchlist|промени на страници от списъка Ви за наблюдение]]",
        "revdelete-show-file-confirm": "Необходимо е потвърждение, че желаете да прегледате изтритата версия на файла „<nowiki>$1</nowiki>“ от $2 $3.",
        "revdelete-show-file-submit": "Да",
        "logdelete-selected": "{{PLURAL:$1|Избрано събитие|Избрани събития}}:",
-       "revdelete-confirm": "Ð\9dеобÑ\85одимо Ðµ Ð´Ð° Ð¿Ð¾Ñ\82вÑ\8aÑ\80диÑ\82е, Ñ\87е Ð²елаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].",
+       "revdelete-confirm": "Ð\9dеобÑ\85одимо Ðµ Ð´Ð° Ð¿Ð¾Ñ\82вÑ\8aÑ\80диÑ\82е, Ñ\87е Ðелаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].",
        "revdelete-suppress-text": "Премахването трябва да се използва '''само''' при следните случаи:\n*Неподходяща или неприемлива лична информация\n*: ''домашни адреси и телефонни номера, номера за социално осигуряване и др.''",
        "revdelete-legend": "Задаване на ограничения:",
        "revdelete-hide-text": "Текст на версията",
        "randomincategory-nopages": "В категория [[:Category:$1|$1]] няма страници.",
        "randomincategory-category": "Категория:",
        "randomincategory-legend": "Случайна страница от категорията",
+       "randomincategory-submit": "Отваряне",
        "randomredirect": "Случайно пренасочване",
        "randomredirect-nopages": "В именно пространство „$1“ няма пренасочвания.",
        "statistics": "Статистика",
        "nmembers": "$1 {{PLURAL:$1|член|члена}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|член|члена}}",
        "nrevisions": "$1 {{PLURAL:$1|версия|версии}}",
-       "nviews": "$1 {{PLURAL:$1|преглед|прегледа}}",
        "nimagelinks": "Използва се в $1 {{PLURAL:$1|страница|страници}}",
        "ntransclusions": "използва се в $1 {{PLURAL:$1|страница|страници}}",
        "specialpage-empty": "Страницата е празна.",
        "linksearch-pat": "Търсене по:",
        "linksearch-ns": "Именно пространство:",
        "linksearch-ok": "Търсене",
-       "linksearch-text": "Възможна е употребата на заместващи знаци като: „*.wikipedia.org“.\nНеобходим е поне домейн от най-високо ниво, например „*.org“.<br />\n{{PLURAL:$2|Поддържан протокол|Поддържани протоколи}}: <code>$1</code> (ако не е посочено, по подразбиране се използва http:// ).",
+       "linksearch-text": "Възможна е употребата на заместващи знаци като: „*.wikipedia.org“.\nНеобходим е поне домейн от най-високо ниво, например „*.org“.<br />\n{{PLURAL:$2|Поддържан протокол|Поддържани протоколи}}: $1 (ако не е посочено, по подразбиране се използва http:// ).",
        "linksearch-line": "$1 с препратка от $2",
        "linksearch-error": "Заместващите знаци могат да стоят само в началото на името на хоста.",
        "listusersfrom": "Показване на потребителите, започвайки от:",
        "emailuser": "Писмо до потребителя",
        "emailuser-title-target": "Изпращане на е-писмо на този {{GENDER:$1|потребител}}",
        "emailuser-title-notarget": "Изпращане на е-писмо на потребител",
-       "emailpage": "Пращане писмо на потребител",
        "emailpagetext": "Можете да използвате формуляра по-долу, за да изпратите електронно писмо на {{GENDER:$1|този потребител}}.\nАдресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори директно.",
        "defemailsubject": "Писмо от потребител $1 в {{SITENAME}}",
        "usermaildisabled": "Потребителят не е разрешил да получава електронна поща",
        "viewdeletedpage": "Преглед на изтрити страници",
        "undeletepagetext": "{{PLURAL:$1|Следната страница беше изтрита, но все още се намира в архива и може да бъде възстановена|Следните $1 страници бяха изтрити, но все още се намират в архива и могат да бъдат възстановени}}. Архивът може да се почиства от време на време.",
        "undelete-fieldset-title": "Възстановяване на версии",
-       "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки тези версии на страницата, които трябва да бъдат въстановени, след което се натиска ''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки на тези версии на страницата, които трябва да бъдат възстановени, след което се натиска '''''{{int:undeletebtn}}'''''.",
        "undeleterevisions": "{{PLURAL:$1|Една версия беше архивирана|$1 версии бяха архивирани}}",
        "undeletehistory": "Ако възстановите страницата, всички версии ще бъдат върнати в историята.\nАко след изтриването е създадена страница със същото име, възстановените версии ще се появят като по-ранна история, а текущата версия на страницата няма да бъде заменена автоматично. Също така обърнете внимание, че ограниченията, приложени върху версиите, ще се загубят след възстановяването.",
        "undeleterevdel": "Възстановяването няма да бъде изпълнено, ако би довело до частично изтриване на актуалната версия. В такъв случай актуалната версия не трябва да бъде избирана или пък състоянието й трябва да бъде променено на нормална (нескрита) версия. Версиите на файлове, които нямате право да преглеждате, няма да бъдат възстановени.",
        "special-characters-group-khmer": "кхмерски",
        "special-characters-title-endash": "средно тире",
        "special-characters-title-emdash": "дълго тире",
-       "special-characters-title-minus": "знак минус"
+       "special-characters-title-minus": "знак минус",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ"
 }
index 8dc411f..cf12609 100644 (file)
        "categorypage": "دیستین تهری تاکدیمی",
        "viewtalkpage": "گپ تاکدیمی نشان داتین",
        "otherlanguages": "بی دیگه زبانانی تا",
-       "redirectedfrom": "(تغییرمسیر داتین شه $1)",
+       "redirectedfrom": "(گردینته بوته شه $1 ئا)",
        "redirectpagesub": "تاکدیمی تغییرمسیر داتین",
-       "redirectto": "تغییر مسیر بی:",
+       "redirectto": "گردینتین په:",
        "lastmodifiedat": "ای تاکدیم آخرین‌ وارا بی $1 سائت $2 تا تغییر بوته.",
        "viewcount": "شه ای تاکدیما کسی {{PLURAL:$1|یکوار|$1ور}} دیدن کورته.",
        "protectedpage": "قُلپ بوتگین تاکدیم",
        "no-null-revision": "پوچ ئین نخسه ئی جوڑ کورتینئ امکان  په  «$1» ئی تاکدیما موجود نه اینت",
        "badtitle": "خرابین ئنوان",
        "badtitletext": "شمی درخواستین ئنوان نا موتبر،خالی،یا میان زبانین یا میان ویکی ئین ئنوان و یا شه خرابین لینکی ات.\nممکن اینت که یک یا چینکه نویسگ داشته بیئت که نتوانن آوانا بی ئنوانی تا استفاده کنن.",
+       "title-invalid-empty": "تاکدیمئ عنوان که شما لۆٹیته ئیت خالی اینت یا فقط نامئ خالیگاه گوشته بوته.",
+       "title-invalid-utf8": "شمی موردي نظرین تاکدیمئ عنوان خرابین یونیکدین نویسگ داریت.",
+       "title-invalid-interwiki": "شمئ  لۆٹیته بوته ئین تاکدیم مانجین ویکی داریت که نتوانن شه آیی به عنوانانی تا پایده گ گێرن.",
+       "title-invalid-talk-namespace": "شمئ لۆٹیته بوته ئین عنوان په گپ ئی تاکدیما موجود نه اینت.",
+       "title-invalid-characters": "شمئ لۆٹیته بوته ئین تاکدیمئ عنوان «$1» ئی خرابین نویسگ داریت.",
+       "title-invalid-magic-tilde": "لۆٹیته بوته ئین تاکدیمئ عنوان بي اعتبارین جادوئین عبارتي داریت (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "شمئ لۆٹیته بوته ئین تاکدیمئ عنوان باز تچک اینت. نباید گیشتیر شه $1 {{PLURAL:$1|بایٹ|بایٹ}} یونیکدین نویسگ ئان بیت.",
+       "title-invalid-leading-colon": "شمئ لۆٹیته بوته ئین تاکدیم، به وتي اولسرا یک بي اعتبارین عنوانئ داریت.",
        "perfcached": "همراهی کنوکین دیتا شه نهانی ئین حافظهٔ ئا فراخوانی بوته و ممکن اینت کاملاً اپڈیٹ نه بوته. حداکثر {{PLURAL:$1|یک نتیجه| $1 نتیجه}} بي نهانی ئین حافظهٔ تا دسترس ئی وڈ اینت.",
        "perfcachedts": "همرای کنوکین دیتا شه نهانی ئین حافظه ئا فرخوانی بوته و آخرین وار  بئ  $1 ئی تا اپڈیٹ بوته. حداکثر {{PLURAL:$4|یک نتیجه|$4 نتیجه}} بئ نهانی ئین حافظه تا دسترس ئی وڈ اینت.",
        "querypage-no-updates": "ای تاکدیمی اپڈیٹ کورتین انون غیر فئال بوته.\nای تاکدیمی مئلومات ممکن اینت که نوک نه بوته انت.",
        "protectedinterface": "ای تاکدیم یک متنی ئا ارایه ئه کنت که ای ویکی ئی تا یک سافٹ ایرئ  په واسط بی کار زوروکانی مانجینا اینت و په دیمگیری ئا شه خرابکاری ئی  خاتیرا قُلپ بوته.\nپه اضافه کورتین یا تغیر داتین ترجمه په موچین ویکی ئان ، مهربانی بکنیت شه [//translatewiki.net/ translatewiki.net]، میڈیا ویکی ئی محلی کورتینی پروژه ئا ، استفاده بکنیت.",
        "editinginterface": "<strong>هشدار:</strong> تاکدیمی که ایڈیٹ ئه کنیت متنی ئا شامل ئه بیئت که بی ای کار زوروکئ واسط ئی سافت ایر تا به کار گیپته بوته.\nای تاکدیمی تغییر  منجر بئ کار زوروکئ واسط ئی  ظاهر ئین تغیر ای سافت ایر په دیگه کار زوروکان ئه بیئت.",
        "translateinterface": "په اضافه کورتین یا تغیر داتین ترجمه ئی په موچین ویکی ئان،مهربانی بکنیت شه [//translatewiki.net/ translatewiki.net]، مییڈیا ویکی  محلی کورتینی پروژه ئا، استفاده بکنیت.",
-       "cascadeprotected": "ای تاکدیم بئ ایڈیٹتانی مقابلا قُلپ بوته چونکه بی جهلگین قُلپ بوته ئین  {{PLURAL:$1|تاکدیم|تاکدیمانئ}} تا بئ {{PLURAL:$1|آوان|آوانئ}} تا «آپشاری» ئی گزینه انتخاب بوته:\n$2",
+       "cascadeprotected": "ای تاکدیم بئ ایڈیٹتانی مقابلا قُلپ بوته چونکه بی جهلگین قُلپ بوته ئین  {{PLURAL:$1|تاکدیم|تاکدیمانئ}} تا به {{PLURAL:$1|آوان|آوانئ}} تا «آپشارین» مینو انتخاب بوته:\n$2",
        "namespaceprotected": "شما '''$1''' ئی تاکدیمانئ فضای نامئ ایڈیٹ کورتین ئی اجازه ئا  نداریت.",
        "customcssprotected": "شما ای سی اس اس ئی تاکدیمئ ایڈیٹ ئی اجازه ئا نداریت، په خاتیریکه ایشی تا یک کار زوروکئ شخصی ئین تنظیمات هستنت.",
        "customjsprotected": "شما ای جاوااسکریپت ئی تاکدیمئ ایڈیٹ ئی اجازه ئا نداریت، په خاتیریکه ایشی تا یک کار زوروکئ شخصی ئین تنظیمات هستنت.",
        "noemail": "هیچ ایمیل ادرسئ په  «$1» کار زوروکا ثبت نه بوته.",
        "noemailcreate": "باید یک موتبرین ایمیل ادرسئ داخل بکنیت",
        "passwordsent": "نوکین چیهرگال بئ سبت بوته ئین ایمیل ادرس ئا په «$1» ئا دیم داته بوت.\nمهربانی بکنیت شه آیی گیپتین ئا پد لوگین به ییت.",
+       "blocked-mailpassword": "شمئ آی پي ادرس شه دستکاری کورتینا بلاک بوته، په ای خاطرا شه پاسوردا پایده گ زورته ئه نه کنیت شه سوءاستفاده ئی دیمگیري ئی خاطرا.",
        "mailerror": "خطا بی ایمیلی داتینی تا: $1",
        "emailauthenticated": "شمی ایمیلی ادرس بی $2 سائت $3  تا تصدیق ئه بیئت.",
        "emailnotauthenticated": "شمی ایمیلئ ادرس تا انون قبول نه بوته.\nایمیل په هیچ یک شه ویژه گی ئان دیم داته ئه نه بیئت.",
        "passwordreset": "پاک کورتین پاسوردئ",
        "passwordreset-text-one": "په پدا نادینتین ایمیلی پاسوردی خاتیرا ای فرم ئا پر کنیت.",
        "passwordreset-text-many": "{{PLURAL:$1|په موقتی ئین چیهرگال ئی گیپتین شه ایمیلئ راه ئا، یکی شه زمینه‌هان ئا پر کنیت.}}",
-       "passwordreset-legend": "پاک کورتین پاسوردئ",
        "passwordreset-disabled": "ای ویکی ئی تا پاسورد یا چیهرگالی پدا بیئر گردینتین غیر پئال اینت.",
        "passwordreset-emaildisabled": "ایمیلی گزینه بی ای یکی ئی تا پئال نه ونت.",
        "passwordreset-username": "کار زوروکین نام:",
        "changeemail-throttled": "شما بیخی باز وار په لوگین بوتینا کوشش کورته ایت.\nمهربانئ بکنیت دیم شه آیی که پدا کوشش بکنیت $1 صبر کنیت.",
        "resettokens": "بیئر گردینتین نشانگ ئانی",
        "resettokens-no-tokens": "هیچ نشانگ ئی په ریست کورتین ئا وجود نداریت.",
-       "resettokens-legend": "بیئر گردینتین نشانگ ئانی",
        "resettokens-tokens": "نشانگان:",
        "resettokens-token-label": "$1 (انونین اندازه گ: $2)",
        "resettokens-done": "بیئر گردینتین نشانگ ئان.",
        "missingcommenttext": "مهربانی بکنیت جهلگا توضیح دهیت.",
        "summary-preview": "دیم دیست ئی خلاصه:",
        "subject-preview": "موضو ئی دیم دیست/ئنوان:",
+       "previewerrortext": "وختیکه شوما په وتي تغیراني نشان داتینا کوشش ئه کورتێت، یک خطاي مانجینا آت.",
        "blockedtitle": "کار زوروک بسته بوته",
+       "blockedtext": "<strong>شمئ کارزورکین حساب یا آی پي ادرس بسته بوته.</strong>\n\nای بسته بوتین شه $1 ئی نیمگاه بوته.\nای نفر وتي دلیلا، ایرنگ گوشته: <em>$2</em>\n\n* بلاک یا بستین ئی شروع: $8\n* پاچ بوتین یا بلاک ئی الاسي: $6\n* هدفین بلاک بوته ئین کارزوروک: $7\n\nشوما توانێت که گۆ $1 یا گۆ [[{{MediaWiki:Grouppage-sysop}}|یک دیگرێن مدیري]] تماس بگیرێت و بئ ائ باره ئا هبر دهیت.\nتوجه کنیت که شما نه توانتیت شه  «ایمیل په ای کارزوروکا» استفاده بکنیت مگه ايکه یک معتبریندایمیل ادرسئ به وتي [[Special:Preferences|کارزوروکین حسابئ]] تا ثبت کورته به ئیت و هم  باید ای قابلیتئ امکان شه شوما گیپته مه بيت.\nشمئ انونین آی پي ادرس $3 و شمئ بلاک بوتینئ شماره $5 اینت.\nمهرباني بکنیت موچین مالوماتانا به وتئ درخواست ئانی تا ذکر بکنیت.",
        "blockednoreason": "دلیلی مشخص نه بوته",
        "whitelistedittext": "په مقاله ئانی ایڈیٹ ئا باید $1.",
        "nosuchsectiontitle": "ایرنگی بخشئ ودئ نه بوت",
        "note": "'''نکته:'''",
        "previewnote": "'''بئ هوش ئا داشته بیئت که ای په قت دیم اینت.'''\nشمی تغیرات تا انون زه خیره نه بوته انت!",
        "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
-       "editing": "بی ایڈ\tیٹ\t کورتینی حالا $1",
-       "creating": "بی جوڑ کورتینی حالا $1",
-       "editingsection": "بئ $1 ئی ایڈیٹ کورتینئ حالا (بخش)",
+       "editing": "به $1 ئی دستکاری کورتینێ حالا",
+       "creating": "$1 جۆڑ ئه بيت",
+       "editingsection": "به $1 ئی دستکاری کورتینێ حالا (چونڑ)",
        "editingcomment": "بئ $1 ئی ایڈیٹ کورتینئ حالا (نوکین بخش)",
        "editconflict": "هجومین ایڈیٹ: $1",
+       "explainconflict": "شه وختی که شما ای دیمێ دستکاری ئا شرو کورتێت یک دیگه نپری آیرا ٹگل دات.\nبُرزگین متنین جاگه شامل ئه بیت شه اي دیمێ رقم، به انونین حالتێ تا.\nشمێ ٹگل به متنێ جهلگا نشان داته بوته انت.\nشما باید وتي ٹگل ئانه گۆ انونین متنا لۆڑ کنیت.\nگو \"{{int:savearticle}}\" کيلی ئی پرنچیتین ئا <strong>تانا</strong> بُرزگین متني ئین متنێ جاگه ذخیره ئه بیت.",
        "yourtext": "شمی متن",
        "storedversion": "ذخیره بوته ئین نخسه",
+       "editingold": "'''توجه: شما به ای تاکدیمێ کهنگین نخسه ئی جۆڑ کورتينێ حالا هستیت.'''\nاگه ایشیرا ذخیره‌بکنیت ، هر تغییری که پدا شه ای نخسه ئا بوته انت شه بێن ئه رونت.",
        "yourdiff": "تفاوت‌هان",
+       "editpage-cannot-use-custom-model": "ای تاکدیمئ محتوائین موڈل نتوانت بدل بیت.",
        "templatesused": "{{PLURAL:$1|تراشوان|تراشوانان}} استفاده بوته انت بی ای تاکدیمئ تا:",
        "templatesusedpreview": "ای دیم دیست ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
        "templatesusedsection": "ای بخش ئی تا استفاده بوته ئین {{PLURAL:$1|تراشوان|تراشوانان}} :",
        "history-feed-description": "ای تاکدیمی ایڈیٹ ئی تاریخچه بئ ویکی ئی تا",
        "history-feed-item-nocomment": "$1 بی $2",
        "history-feed-empty": "لۆٹیته بوته ئین دیم موجود نه اینت.\nممکن اینت که شه ویکی ئی تا پاک بوته بیئت یا که نامی تغیر بوته.\nنوکین تاکدیمانا په مربوتین موریدان بئ ای ویکی ئی تا [[Special:Search|بگردیت]].",
+       "history-edit-tags": "اي نخسه ئانی ٹاپه ئانی دستکاری انتخاب بوته انت",
        "rev-deleted-comment": "(ایڈیٹ ئی خلاصه پاک بوت)",
        "rev-deleted-user": "(کار زوروکین نام پاک بوت)",
        "rev-deleted-event": "(سیاه چال ئی جزئیات پاک بوته انت)",
        "rev-deleted-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nممکن اینت آیی باره ها مئلومات بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
        "rev-suppressed-text-permission": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آی باره ئا مئلومات بئ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال] ئی تا موجود بیئت.",
        "rev-deleted-text-unhide": "ای دستکاری شه ای دیما '''پاک بوته'''.\nممکن اینت که آیی مربوتین مه لوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئانی سیاهه] ئی تا موجود به ینت.\nشما اگه لوتیته به ییت توانیت که [ای نخسه ئی $1 ئا بگیندیت ].",
+       "rev-suppressed-text-unhide": "ای دستکاری شه ای دیما '''اوشتارینته بوته'''.\nممکن اینت که آیی مربوتین ما لوماتانا به [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} اوشتارینته بوته ئانی لیست] ئی تا موجود به ینت.\nشما اگه لوتیته به ییت توانیت که [ای نخسه ئی $1 ئا بگیندیت ].",
        "rev-deleted-text-view": "ای ایڈیٹ شه ای تاکدیما '''پاک بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت آیی مربوتین مئلوماتانا بئ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} پاک بوته ئین سیاه چال ] تا ودئ بکنیت.",
+       "rev-suppressed-text-view": "ای دستکاری شه ای دیما '''خالی بوته بوته'''.\nشما توانیت آیرا بگیندیت؛ ممکن اینت که آی مربوتین مالوماتانا به [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} خالی بوته ئین] ئانی لیستئ تا موجود به ینت.",
        "rev-delundel": "نمایش/نهفتن",
        "rev-showdeleted": "نشان داتین",
        "revisiondelete": "پاک کورتین/نخسه ئی پدا جۆڑ کورتین",
        "searchprofile-everything-tooltip": "گشتین په موچین محتوا ئان (شاملئ گپ ئی تاکدیمان)",
        "searchprofile-advanced-tooltip": "گشتین بی فضای نام دلخواه",
        "search-result-size": "$1 ({{PLURAL:$2|یک کلیمه|$2 کلیمه}})",
-       "search-redirect": "(تغییرمسیر $1)",
+       "search-redirect": "($1 یي گردینتین)",
        "search-section": "(بخش $1)",
        "search-category": "(تهر  $1)",
        "search-file-match": "(فایلی محتوایی یکرنگی)",
        "right-createtalk": "گپ ئی تاکدیمی جوڑ\t کورتین",
        "right-createaccount": "کار زوروکئ حسابئ جوڑ\t کورتین",
        "right-minoredit": "نشانی کورتین ایڈیٹانی بئ ئنوان کم ئین",
-       "right-move": "تاکدیمی انتقال",
-       "right-move-subpages": "تاکدÛ\8cÙ\85اÙ\86ئ Ø§Ù\86تÙ\82اÙ\84 Ú¯Ù\88 Ø¢Ù\88اÙ\86 Ú¯Ù\88Ù\86Ú\88دÛ\8cÙ\85 Ø¦ان",
+       "right-move": "تاکدیمئ جابجا کورتین",
+       "right-move-subpages": "تاکدÛ\8cÙ\85اÙ\86ئ Ø¬Ø§Ø¨Ø¬Ø§Û\8cÙ\8a Ú¯Û\86 Ø¢Ù\88اÙ\86Ù\8a Ú¯Û\86Ù\86Ú\88دÛ\8cÙ\85ان",
        "right-move-rootuserpages": "کار زوروکین سرشاخه ئین تاکدیمانئ انتقال",
        "right-move-categorypages": "تهر تاکدیمئ انتکال",
        "right-movefile": "فایلی انتقال",
-       "right-suppressredirect": "تاکدÛ\8cÙ\85ئ Ø§Ù\86تÙ\82اÙ\84 Ø¨Û\8cدÙ\88Ù\86 Ø´Ù\87 Ø¯Û\8cÙ\85Û\8cÙ\86 Ù\86اÙ\85Û\8c ØªØºÛ\8cرÙ\85سÛ\8cر Ø¦Û\8c Ø¬Ù\88Ú\91 Ú©Ù\88رتÛ\8cÙ\86",
+       "right-suppressredirect": "تاکدÛ\8cÙ\85ئ Ø¬Ø§Ø¨Ø¬Ø§ Ú©Ù\88رتÛ\8cÙ\86 ØºÛ\8cر Ø´Ù\87 Ø¯Û\8cÙ\85Û\8cÙ\86 Ù\86اÙ\85ئ Ú¯Ø±Ø¯Û\8cÙ\86تÛ\8cÙ\86ا",
        "right-upload": "فایلی بُرز کورتین",
        "right-reupload": "پدا نیویشتین موجودین فایلئ",
        "right-reupload-own": "آ فایلی پدا بُرز کورتین که دیمتیرا هم شه هما کار زوروکی نیمگا یک وار بُرز بوتت",
        "upload-proto-error-text": "بُرز کورتین شه دوردستا به ادرس ئان که گو <code dir=ltr>http://</code> یا <code dir=ltr>ftp://</code>  ئی شرو بیئنت ضرورت داریت .",
        "upload-file-error": "داخلین خطا",
        "upload-misc-error": "نامئلومین خطا بی بُرزکورتینئ تا",
-       "upload-too-many-redirects": "انترنیتی ادرس به شه اندازه ئا تغیرمسیر داریت",
+       "upload-too-many-redirects": "ای انترنیتین ادرس شه اندازه ئا گیشتیر گردینته بوته ئین دیم داریت",
        "upload-http-error": "یک  اچ‌تی‌تی‌پی خطا رخ داته: $1",
        "upload-copy-upload-invalid-domain": "بُرز بوته فایلانی کاپی کورتین شه ای ڈومین ئا امکان نداریت.",
        "backend-fail-stream": "نه توانن $1 ئی فایلا دیم دهین.",
        "mimetype": "MIME ئی رکم:",
        "download": "ائیر کورتین",
        "unwatchedpages": "دیسته نه یوته ئین تاکدیمان",
-       "listredirects": "تغیرمسیر ئی تاکدیمانی لڑ",
+       "listredirects": "گردینته بوته ئین تاکدیمانی لڑلیست",
        "listduplicatedfiles": "موچین فایل ئانی لڑ ، لۆڑ گۆ تکراری ئان",
        "listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] داریت.",
        "unusedtemplates": "استفاده نه بوته ئین تراشوانان",
        "randomincategory-nopages": "هیچ تاکدیمی بئ  [[:Category:$1|$1]] ئی تهری تا موجود نه اینت.",
        "randomincategory-category": "تهر:",
        "randomincategory-legend": "تصادفین تاکدیم بئ تهرئی تا",
-       "randomredirect": "تغÛ\8cÛ\8cرÙ\85سÛ\8cر ØªØµØ§Ø¯Ù\81Û\8c",
+       "randomredirect": "بÛ\8e Ù\82ستÛ\8cÙ\86 Ú¯Ø±Ø¯Û\8cÙ\86تÛ\8cÙ\86",
        "randomredirect-nopages": "هیج تغیر مسیر بئ  «$1» ئی نامی فضای تا موجود نه اینت.",
        "statistics": "ارقام",
        "statistics-header-pages": "ای تاکدیمئ ارقام",
        "pageswithprop-submit": "برا",
        "pageswithprop-prophidden-long": "($1) ئی تچکین متنی چیهرین جزییات",
        "pageswithprop-prophidden-binary": "($1) ئی باینری چیهرین اندازگ ئی جزییات",
-       "doubleredirects": "دوتائین تغیرمسیرئان",
+       "doubleredirects": "ڈبل گردینتێن",
        "double-redirect-fixer": "تغیرمسیرئانی تئمیرکار",
        "brokenredirects": "خرابین تغیرمسیر",
        "brokenredirectstext": "جهلگین تغییرمسیرئان بئ یک ناموجودین دیمی لینک دارنت:",
        "newpages": "نوکین تاکدیم",
        "newpages-username": "کار زوروکین نام:",
        "ancientpages": "کهنگین تاکدیمان",
-       "move": "اÙ\86تÙ\82اÙ\84",
+       "move": "جابجاÛ\8cÙ\8a",
        "movethispage": "ای تاکدیمی انتقال",
        "notargettitle": "بی شه هدفا",
        "nopagetitle": "ایرنگی تاکدیمئ وجود نداریت",
        "editcomment": "ایڈیٹ ئی خلاصه ایش ات: «''$1''».",
        "rollback-success": "$1 ئی ایڈیٹ بیئرگردینته بوتنت؛\nتاکدیم بئ اخیرین ایڈیٹ شه $2 ئا بیئرگردینته بوت.",
        "sessionfailure-title": "کار زوروکئ نشست ئی خطا",
+       "changecontentmodel": "یک تاکدیمئ محتوائین رقمی دستکاری کورتین",
+       "changecontentmodel-legend": "محتوائین رقمئ گردینتین",
+       "changecontentmodel-title-label": "تاکدیمئ عنوان",
+       "changecontentmodel-model-label": "نۆکین محتوائي رقم",
+       "changecontentmodel-reason-label": "دلیل:",
+       "changecontentmodel-success-title": "محتوائین رقم تغیر کورت",
+       "changecontentmodel-success-text": "[[:$1]] ئی محتوائین رقم تغیر کورت",
+       "logentry-contentmodel-change-revertlink": "بیرگردینتین",
+       "logentry-contentmodel-change-revert": "بیرگردینتین",
        "protectlogpage": "سیاهگئ قُلپ",
        "protectedarticle": "«[[$1]]» ئا قُلپ کورت",
        "modifiedarticleprotection": "«[[$1]]» قُلپ ئی وزيیتا گردینت",
        "undelete-error-long": "بی پدا  جۆڑ کورتین ئی وختا خطا رخ دات:\n\n$1",
        "undelete-show-file-confirm": "آیا شما مطمئن وێت که لوٹیت یک پاک بوته ئین نخسه شه فایل \"<nowiki>$1</nowiki>\" مورخ $2 سائت $3 ئا بگیندیت؟",
        "undelete-show-file-submit": "هان",
-       "namespace": "نامی فضا:",
+       "namespace": "نامئ اؤرکجاه:",
        "invert": "انتخاب سرچپی بیئت",
        "tooltip-invert": "ای جئبه ئا ئلامت بجنیت تا که پزای نام تا ئین انتخاب بوته ئین تاکدیمانی تغیرات (و دیگرین ئلامت جته بوته ئین پزای نام ئان) چیهر به ینت",
        "namespace_association": "Associated namespace",
        "table_pager_empty": "هیچ نتیجه",
        "autosumm-blank": "تاکدیما خالی کورت",
        "autosumm-replace": "تاکدیمی جابجایی گۆ '$1'",
-       "autoredircomment": "جÙ\87ت Û\8cÛ\8c ØªØºÛ\8cر Ø¨Ø¦ [[$1]]",
+       "autoredircomment": "اÛ\8c ØªØ§Ú©Ø¯Û\8cÙ\85 Ø¨Ù\87 [[$1]] Ø¦Ø§ Ú¯Ø±Ø¯Û\8cÙ\86تÙ\87 Ø¨Ù\88ت",
        "autosumm-new": "نوکین دیمی گۆ «$1» ئا جۆڑ کورت",
        "autosumm-newblank": "خالی ئین دیمی جۆڑ بوت",
        "watchlistedit-normal-title": "دیدارلیست ئی ایڈیٹ کورتین",
        "version-libraries": "نصب بوته ئین کتابخانه",
        "version-libraries-library": "کتابجاه",
        "version-libraries-version": "نخسه",
-       "redirect-legend": "جابجا په یک پایل یا دیم ئی",
+       "redirect-legend": "گردینتین په یک پایل یا تاکدیمئ",
        "redirect-submit": "برا",
        "redirect-lookup": "گشتین:",
        "redirect-value": "اندازه گ:",
        "specialpages-group-pages": "تاکدیمانی لڑ\t لیست",
        "specialpages-group-pagetools": "تاکدیمانئ وسایلان",
        "specialpages-group-wiki": "دتا و وسایلان",
-       "specialpages-group-redirects": "مسیر ئی تغیری خاسین تاکدیمان",
+       "specialpages-group-redirects": "گردینۆکین خاسین تاکدیمان",
        "specialpages-group-spam": "سپم ئی وسایلان",
        "specialpages-group-developer": "توسه ئه دهوکین وسایلان",
        "blankpage": "خالی ئین دیم",
        "special-characters-group-khmer": "خمر",
        "special-characters-title-endash": "پاسیله خت",
        "special-characters-title-emdash": "تچکین پاسیله خت",
-       "special-characters-title-minus": "منپی نشانگ"
+       "special-characters-title-minus": "منپی نشانگ",
+       "mw-widgets-titleinput-description-redirect": "گردینتین به $1 یی تا"
 }
index f5189a1..acfd01c 100644 (file)
@@ -8,48 +8,48 @@
                        "SatyamMishra"
                ]
        },
-       "tog-underline": "लिà¤\82à¤\95 à¤\95à¥\87 à¤¨à¥\80à¤\9aà¥\87 à¤°à¥\87à¤\96ा",
-       "tog-hideminor": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤®à¤¾à¤®à¥\82लà¥\80 à¤¸à¤\82पादन à¤\9bà¥\81पाईं",
-       "tog-hidepatrolled": "हाल à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤®à¤¾à¤®à¥\82लà¥\80 à¤¸à¤\82पादन à¤\9bà¥\81पाईं",
-       "tog-newpageshidepatrolled": "नयà¤\95ा à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤ªà¥\83षà¥\8dà¤\95 à¤\95à¥\87 à¤\9bà¥\81पाà¤\81à¤\88",
-       "tog-extendwatchlist": "मातà¥\8dर à¤¹à¤¾à¤² à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\80 à¤¨à¤¾à¤¹à¥\80,बलà¥\8dà¤\95ि à¤¸à¤¬ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¦à¥\87à¤\96ावà¥\87 à¤\96ातिर à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤µिस्तारित करीं",
-       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤®à¥\87à¤\82 à¤\86 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनन à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\85नà¥\81सार à¤¸à¤®à¥\82ह में बांटी",
-       "tog-numberheadings": "सà¥\8dवयà¤\82-साà¤\82à¤\96à¥\8dयिà¤\95à¥\80 à¤¶à¤¿à¤°à¥\8dषà¤\95",
-       "tog-showtoolbar": "समà¥\8dपादन à¤\94à¤\9cारपà¤\9fà¥\8dà¤\9fà¥\80 à¤\95à¥\87 à¤¦à¤¿खावल जाव",
-       "tog-editondblclick": "दà¥\81à¤\88 à¤\95à¥\8dलिà¤\95 à¤ªà¤° à¤ªà¤¨à¥\8dना संपादन करीं",
-       "tog-editsectiononrightclick": "à¤\85नà¥\81भाà¤\97 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤° à¤¦à¤¾à¤¯à¤¾à¤\81 à¤\95à¥\8dलिà¤\95 à¤\95र à¤\85नà¥\81भाà¤\97 सम्पादित करीं",
-       "tog-watchcreations": "हमरा à¤¦à¥\8dवारा à¤¨à¤¿à¤°à¥\8dमित à¤ªà¥\83षà¥\8dठ à¤\86 à¤¹à¤®à¤°à¤¾ à¤¦à¥\8dवारा à¤²à¤¾à¤¦à¤² à¤«à¤¼à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchdefault": "हमरा द्वारा निर्मित पृष्ठ आ हमरा द्वारा लादल फ़ाइलन के हमार ध्यानसूची में जोड़ी",
-       "tog-watchmoves": "हमरा à¤¦à¥\8dवारा à¤¸à¥\8dथानाà¤\82तरित à¤ªà¥\83षà¥\8dठ à¤\86 à¤²à¤¾à¤¦à¤² à¤«à¤¾à¤\88ल à¤\95à¥\87 à¤¹à¤®à¤°à¤¾ à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchdeletion": "हमरा à¤¦à¥\8dवारा à¤®à¤¿à¤\9fावल à¤ªà¥\83षà¥\8dठ à¤«à¤¼à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80",
-       "tog-watchrollback": "हमरा à¤¦à¥\8dवारा à¤ªà¥\8dरतà¥\8dयापनà¥\8dन (रà¥\8bलबà¥\88à¤\95) à¤\95रल à¤\97à¤\87ल à¤ªà¤¨à¥\8dनन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़à¥\80à¤\82।",
-       "tog-minordefault": "सारा à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\9aिनà¥\8dहित à¤\95रà¥\80à¤\82",
-       "tog-previewontop": "समà¥\8dपादन à¤¬à¤\95à¥\8dसा à¤¸à¥\87 à¤ªà¤¹à¤¿à¤²à¥\87 à¤ªà¥\81रà¥\8dवदरà¥\8dशन à¤¦à¤¿à¤\96ाà¤\88à¤\82।",
-       "tog-previewonfirst": "पहिलà¤\95ा à¤¸à¤®à¥\8dपादन à¤ªà¤° à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¦à¥\87à¤\96à¥\80à¤\82",
-       "tog-enotifwatchlistpages": "हमार à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¦à¤°à¥\8dà¤\9c à¤\95à¥\8cनà¥\8b à¤­à¥\80 à¤ªà¤¨à¥\8dना à¤¯à¤¾ à¤«à¤¾à¤\88ल à¤®à¥\87à¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन होखला पर हमके ई-मेल करल जाव",
-       "tog-enotifusertalkpages": "यदि हमार वार्तालाप पन्ना पर कौनो परिवर्तन होखे त हमके ई मेल करल जाव",
-       "tog-enotifminoredits": "पनà¥\8dना à¤\86 à¤«à¤¾à¤\88ल à¤ªà¤° à¤\9bà¥\8bà¤\9fà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\88 मेल करल जाव",
-       "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई मेल पता दिखावल जाव",
-       "tog-shownumberswatching": "धà¥\8dयान रखे वालन सदस्यन के देखावल जाव",
+       "tog-underline": "à¤\95ड़à¥\80 à¤\85à¤\82डरलाà¤\87न à¤\95à¤\87ल:",
+       "tog-hideminor": "हाल à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤\82पादन à¤\9bिपाईं",
+       "tog-hidepatrolled": "हाल à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤¸à¤\82पादन à¤\9bिपाईं",
+       "tog-newpageshidepatrolled": "नया à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9cाà¤\81à¤\9aल à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 à¤\9bिपाà¤\88à¤\82",
+       "tog-extendwatchlist": "à¤\96ालà¥\80 à¤¹à¤¾à¤²à¥\87 à¤\95à¥\87 à¤¬à¤¦à¤²à¤¾à¤µ à¤¨à¤¾ à¤¬à¤¾à¤²à¥\81à¤\95, à¤¸à¤\97रà¥\80 à¤¬à¤¦à¤²à¤¾à¤µ à¤\95à¥\87 à¤¦à¥\87à¤\96ावà¥\87 à¤\96ातिर à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤\95à¥\87 à¤¬िस्तारित करीं",
+       "tog-usenewrc": "तà¥\81रà¤\82त à¤­à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ à¤®à¥\87à¤\82 à¤\86 à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤­à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ à¤¸à¤­ à¤\95à¥\87 à¤ªà¤¨à¥\8dना à¤\85नà¥\81सार à¤\9dà¥\81à¤\82ड में बांटी",
+       "tog-numberheadings": "हà¥\87डिà¤\82à¤\97 à¤\95à¥\87 à¤\91à¤\9fà¥\8b-नà¤\82बरिà¤\82à¤\97",
+       "tog-showtoolbar": "समà¥\8dपादन à¤\94à¤\9cारपà¤\9fà¥\8dà¤\9fà¥\80 à¤\95à¥\87 à¤¦à¥\87खावल जाव",
+       "tog-editondblclick": "दà¥\81à¤\87 à¤\95à¥\8dलिà¤\95 à¤ªà¤° à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 संपादन करीं",
+       "tog-editsectiononrightclick": "à¤\96à¤\82ड à¤\95à¥\80 à¤¹à¥\87डिà¤\82à¤\97 à¤ªà¤° à¤¦à¤¾à¤¯à¤¾à¤\81 à¤\95à¥\8dलिà¤\95 à¤\95à¤\87 à¤\95à¥\87 à¤\96à¤\82ड à¤\95à¥\87 सम्पादित करीं",
+       "tog-watchcreations": "हमार à¤¬à¤¨à¤¾à¤µà¤² à¤ªà¤¨à¥\8dना à¤\86 à¤¹à¤®à¤¾à¤° à¤\85पलà¥\8bड à¤\95à¤\87ल à¤«à¤¾à¤\87ल à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤°à¥\80 à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchdefault": "हम जौना पन्ना आ फाइलन के संपादित करीं उनहन के हमरी धियानसूची में जोड़ दिहल जाव",
+       "tog-watchmoves": "हमरा à¤¦à¥\8dवारा à¤¸à¥\8dथानाà¤\82तरित à¤ªà¤¨à¥\8dना à¤\86 à¤«à¤¾à¤\87लन à¤\95à¥\87 à¤¹à¤®à¤°à¤¾ à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchdeletion": "हमरा à¤¦à¥\8dवारा à¤¹à¤\9fावल à¤ªà¤¨à¥\8dना à¤\86 à¤«à¤¾à¤\87ल à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-watchrollback": "हमरा à¤¦à¥\8dवारा à¤°à¥\8bलबà¥\88à¤\95 à¤\95à¤\87ल à¤\97à¤\87ल à¤ªà¤¨à¥\8dना à¤¸à¤­ à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤\9cà¥\8bड़ à¤¦à¤¿à¤¹à¤² à¤\9cाव",
+       "tog-minordefault": "डिफालà¥\8dà¤\9f à¤°à¥\82प à¤¸à¥\87 à¤¸à¤\97रà¥\80 à¤¸à¤\82पादन à¤\95à¥\81ल à¤\95à¥\87 à¤\9bà¥\8bà¤\9f à¤¸à¤\82पादन à¤\95à¥\80 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\9aिनà¥\8dहित à¤\95à¤\87ल à¤\9cाव",
+       "tog-previewontop": "नमà¥\82ना (preview) à¤¸à¤\82पादन à¤¬à¤\95à¥\8dसा à¤¸à¥\87 à¤ªà¤¹à¤¿à¤²à¥\87 à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-previewonfirst": "पहिला à¤¸à¤\82पादन à¤ªà¤° à¤¨à¤®à¥\82ना à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-enotifwatchlistpages": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¦à¤°à¥\8dà¤\9c à¤\95à¥\8cनà¥\8b à¤­à¥\80 à¤ªà¤¨à¥\8dना à¤¯à¤¾ à¤«à¤¾à¤\87ल à¤®à¥\87à¤\82 à¤¬à¤¦à¤²à¤¾à¤µ होखला पर हमके ई-मेल करल जाव",
+       "tog-enotifusertalkpages": "यदि हमार वार्तालाप पन्ना पर कौनो परिवर्तन होखे त हमके ई-मेल करल जाव",
+       "tog-enotifminoredits": "पनà¥\8dना à¤\86 à¤«à¤¾à¤\87ल à¤ªà¤° à¤\9bà¥\8bà¤\9fà¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\88-मेल करल जाव",
+       "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई-मेल पता देखावल जाव",
+       "tog-shownumberswatching": "धियान रखे वालन सदस्यन के देखावल जाव",
        "tog-oldsig": "वर्तमान दसखत",
-       "tog-fancysig": "दसà¤\96त à¤\95à¥\87 à¤µà¤¿à¤\95à¥\80 à¤ªà¤¾à¤  à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\89पयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (बिना à¤¸à¥\8dवà¤\9aालित कड़ी के)",
-       "tog-uselivepreview": "लाà¤\87व à¤ªà¥\81रà¥\8dवालà¥\8bà¤\95न के प्रयोग करीं",
-       "tog-forceeditsummary": "यदि à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾ à¤¦à¤¿à¤¹à¤² à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤¸à¥\82à¤\9aित à¤\95रब",
+       "tog-fancysig": "दसà¤\96त à¤\95à¥\87 à¤µà¤¿à¤\95à¥\80 à¤ªà¤¾à¤  à¤\95à¥\87 à¤°à¥\81प à¤®à¥\87à¤\82 à¤\89पयà¥\8bà¤\97 à¤\95रà¥\80à¤\82 (बिना à¤\91à¤\9fà¥\8bमà¥\87à¤\9fिà¤\95 कड़ी के)",
+       "tog-uselivepreview": "लà¤\97ातार à¤\9aालà¥\82 à¤¨à¤®à¥\82ना à¤¦à¥\87à¤\96ावल (preview) के प्रयोग करीं",
+       "tog-forceeditsummary": "यदि à¤¸à¤\82पादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¨à¤¾ à¤¦à¤¿à¤¹à¤² à¤¹à¥\8bà¤\96à¥\87 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤¸à¥\82à¤\9aित à¤\95à¤\87ल à¤\9cाय",
        "tog-watchlisthideown": "हमरी धियानसूची से हमार खुद के संपादन छिपाईं",
-       "tog-watchlisthidebots": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\8bà¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन के छिपाईं",
-       "tog-watchlisthideminor": "हमार à¤§à¥\8dयान à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤\9bà¥\81पाà¤\88à¤\82",
-       "tog-watchlisthideliu": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤\82पादन à¤®à¤¤ à¤¦à¥\87à¤\96ाà¤\88à¤\82",
-       "tog-watchlisthideanons": "à¤\86à¤\87॰पà¥\80॰ à¤¸à¤¦à¤¸à¥\8dयन à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\87ल à¤\88मà¥\87ल à¤\95à¥\87 à¤\95à¥\89पà¥\80 à¤¹à¤®à¤°à¥\8b à¤\95à¥\87 à¤­à¥\87à¤\9cà¥\80à¤\82",
-       "tog-diffonly": "à¤\85वतरण à¤\95à¥\81ल à¤®à¥\87à¤\82 à¤\85नà¥\8dतर à¤¦à¥\87à¤\96ावत à¤¸à¤®à¤¯ à¤ªà¥\81रान à¤\85वतरण à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-showhiddencats": "à¤\9bà¥\81पल à¤¶à¥\8dरà¥\87णियन à¤\95à¥\87 à¤­à¥\80 à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-norollbackdiff": "सà¤\82पादन à¤µà¤¾à¤ªà¤¸ à¤²à¥\87ला à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤¨ à¤¦à¤¿à¤\96ाà¤\88à¤\82",
-       "tog-useeditwarning": "यदि à¤\95à¤\89नà¥\8b à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤\82पादन à¤\95रत à¤\98रà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87लà¥\87 à¤\9bà¥\8bड़ à¤¦à¤¿à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95à¤\87ल à¤\9cाय",
-       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श करीं त हमेशा सुरक्षित कनेक्शन के प्रयोग कइल जाय",
+       "tog-watchlisthidebots": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤¬à¥\89à¤\9f à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¬à¤¦à¤²à¤¾à¤µ के छिपाईं",
+       "tog-watchlisthideminor": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤¸à¥\87 à¤\9bà¥\8bà¤\9f à¤¬à¤¦à¤²à¤¾à¤µ à¤\95à¥\87 à¤\9bिपावल à¤\9cाव",
+       "tog-watchlisthideliu": "हमार à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97-à¤\87न à¤­à¤\87ल à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤¸à¤\82पादन à¤\9bिपावल à¤\9cाय",
+       "tog-watchlisthideanons": "à¤\86à¤\87॰पà¥\80॰ à¤¸à¤¦à¤¸à¥\8dयन à¤¦à¥\8dवारा à¤\95रल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¤¿à¤¯à¤¾à¤¨à¤¸à¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bिपावल à¤\9cाय",
+       "tog-watchlisthidepatrolled": "à¤\9cाà¤\81à¤\9aल à¤\97à¤\87ल à¤¸à¤®à¥\8dपादन à¤\95à¥\87 à¤¹à¤®à¤¾à¤° à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤®à¥\87à¤\82 à¤¸à¥\87 à¤\9bिपावल à¤\9cाय",
+       "tog-ccmeonemails": "हमरा à¤¦à¥\8dवारा à¤\85नà¥\8dय à¤¸à¤¦à¤¸à¥\8dयन à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\97à¤\87ल à¤\88मà¥\87ल à¤\95à¥\87 à¤\95à¥\89पà¥\80 à¤¹à¤®à¤°à¥\8b à¤\95à¥\87 à¤­à¥\87à¤\9cल à¤\9cाय",
+       "tog-diffonly": "à¤\85नà¥\8dतर à¤¦à¥\87à¤\96ावत à¤¸à¤®à¤¯ à¤\85à¤\82तर à¤\95à¥\80 à¤¨à¥\80à¤\9aà¥\87 à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤®à¤¤ à¤¦à¥\87à¤\96ावल à¤\9cाव।",
+       "tog-showhiddencats": "à¤\9bिपल à¤¶à¥\8dरà¥\87णियन à¤\95à¥\87 à¤­à¥\80 à¤¦à¥\87à¤\96ावल à¤\9cाय",
+       "tog-norollbackdiff": "सà¤\82पादन à¤°à¥\8bलबà¥\88à¤\95 à¤\95à¤\87ला à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤®à¤¤ à¤¦à¥\87à¤\96ावल à¤\9cाव",
+       "tog-useeditwarning": "à¤\9cà¥\8b à¤¹à¤® à¤\95à¥\8cनà¥\8bà¤\82 à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤\82पादन à¤\95रत à¤\98रà¥\80 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95à¥\87 à¤¬à¤¿à¤¨à¤¾ à¤¸à¤¹à¥\87à¤\9cलà¥\87 à¤\9bà¥\8bड़ à¤¦à¥\87à¤\88à¤\82 à¤¤ à¤¹à¤®à¤\95à¥\87 à¤\96बर à¤\95à¤\87ल à¤\9cाव",
+       "tog-prefershttps": "à¤\9cब à¤\96ाता à¤®à¥\87à¤\82 à¤²à¥\89à¤\97िन करीं त हमेशा सुरक्षित कनेक्शन के प्रयोग कइल जाय",
        "underline-always": "हमेशा",
        "underline-never": "कभी ना",
-       "underline-default": "जिल्द या ब्राउजर डिफॉल्ट",
+       "underline-default": "जिल्द (स्किन) या ब्राउसर डिफॉल्ट",
        "editfont-style": "सम्पादन क्षेत्र के फॉन्ट स्टाइल:",
        "editfont-default": "ब्राउजर डिफाल्ट",
        "editfont-monospace": "मोनोस्पेस्ड फोंट",
        "category-media-header": "\"$1\" श्रेणी में मीडिया",
        "category-empty": "''इ श्रेणी में इ समय कउनो पन्ना या मीडिया नइखे।''",
        "hidden-categories": "{{PLURAL:$1|छिपावल गइल श्रेणी|छिपावल गइल श्रेणी सब}}",
-       "hidden-category-category": "à¤\9bà¥\81पावल गइल श्रेणी",
+       "hidden-category-category": "à¤\9bिपावल गइल श्रेणी",
        "category-subcat-count": "{{PLURAL:$2|ए श्रेणी में खाली निम्नलिखित श्रेणी बा|ए श्रेणी में कुल $2 में से {{PLURAL:$1|उपश्रेणी|$1 उपश्रेणी सब}} बा।}}",
        "category-subcat-count-limited": "ए श्रेणी में निम्नलिखित {{PLURAL:$1|उपश्रेणी बा|$1 उपश्रेणी बाड़ीं।}}",
        "category-article-count": "{{PLURAL:$2|ए श्रेणी में मात्र निम्नलिखित पन्न बा।|इ श्रेणी में निम्नलिखित {{PLURAL:$1|पन्ना बा|$1 पन्ना बाड़े}}, कुल पन्ना $2}}",
        "category-file-count": "{{PLURAL:$2|ए श्रेणी में खाली निम्नलिखित फइल बा।|ए श्रेणी में निम्नलिखित कुल फ़ाइलं $2 {{PLURAL:$1|फाइल|$1फाइलं}} बाड़े}}",
        "category-file-count-limited": "वर्तमान में निम्नलिखित {{PLURAL:$1|पन्ना|$1 पन्नां}} इ श्रेणीं में बाड़े।",
        "listingcontinuesabbrev": "जारी...",
-       "index-category": "सà¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¥\83षà¥\8dठ",
-       "noindex-category": "à¤\85सà¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¥\83षà¥\8dठ",
-       "broken-file-category": "à¤\9fà¥\82à¤\9fल à¤«à¤¼à¤¾à¤\87ल à¤\95ड़ियन à¤µà¤¾à¤²à¤¾ à¤ªà¤¨à¥\8dना",
+       "index-category": "सà¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¤¨à¥\8dना",
+       "noindex-category": "बिना à¤¸à¥\82à¤\9aà¥\80बदà¥\8dध à¤ªà¤¨à¥\8dना",
+       "broken-file-category": "टूटल फाइल कड़ियन वाला पन्ना",
        "about": "बारे में",
        "article": "सामग्री पन्ना",
        "newwindow": "(नया विंडो में खोलीं)",
        "qbpageoptions": "ई पन्ना",
        "qbmyoptions": "हमार पन्ना",
        "faq": "साधारण सवाल",
-       "faqpage": "Project:साधारण सवाल",
-       "actions": "à¤\95à¥\8dरिया",
-       "namespaces": "नामस्थान",
+       "faqpage": "Project:à¤\85à¤\95à¥\8dसर à¤ªà¥\82à¤\9bल à¤\9cाà¤\8f à¤µà¤¾à¤²à¤¾ सवाल",
+       "actions": "à¤\95ारà¥\8dयवाहà¥\80",
+       "namespaces": "नाà¤\81वस्थान",
        "variants": "अउरी प्रकार",
        "navigation-heading": "नेविगेशन मेनु",
-       "errorpagetitle": "तà¥\8dरà¥\81à¤\9fी",
-       "returnto": "जाईं $1 पर।",
+       "errorpagetitle": "à¤\96राबी",
+       "returnto": "$1 पर लौट जाईं।",
        "tagline": "भोजपुरी {{SITENAME}} से",
        "help": "मदद",
        "search": "खोज",
        "personaltools": "व्यक्तिगत औजार",
        "articlepage": "सामग्री पन्ना देखीं",
        "talk": "बात-चीत",
-       "views": "राय",
+       "views": "à¤\95à¤\87सन à¤²à¤\89à¤\95à¥\80?",
        "toolbox": "औजार",
        "userpage": "प्रयोगकर्ता पन्ना देखीं",
        "projectpage": "परियोजना पन्ना देखीं",
        "imagepage": "फाइल पन्ना देखीं",
        "mediawikipage": "सन्देश पन्ना देखीं",
-       "templatepage": "à¤\96ाà¤\81à¤\9aा पन्ना देखीं",
+       "templatepage": "à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f पन्ना देखीं",
        "viewhelppage": "मदद पन्ना देखीं",
        "categorypage": "श्रेणी पन्ना देखीं",
        "viewtalkpage": "बात-चीत देखीं",
        "otherlanguages": "दुसरी भाषा में",
-       "redirectedfrom": "($1 à¤¦à¥\8dवारा अनुप्रेषित)",
-       "redirectpagesub": "पà¥\81न: à¤¨à¤¿à¤°à¥\8dदà¥\87शित पन्ना",
+       "redirectedfrom": "($1 à¤¸à¥\87 अनुप्रेषित)",
+       "redirectpagesub": "à¤\85नà¥\81पà¥\8dरà¥\87षण पन्ना",
        "redirectto": "अनुप्रेषित:",
        "lastmodifiedat": "$1 के $2 पर ए पन्ना पर अन्तिम बेर बदलाव भइल।",
        "viewcount": "ई पन्ना {{PLURAL:$1|एक|$1}} बार देखल गईल बा।",
        "page-rss-feed": "\"$1\" आर एस एस फिड",
        "page-atom-feed": "\"$1\" एटम फीड",
        "red-link-title": "$1 (पन्ना मौजूद नइखे)।",
-       "sort-descending": "à¤\85वरà¥\8bहà¥\80 क्रम में",
-       "sort-ascending": "à¤\86रà¥\8bहà¥\80 क्रम में",
+       "sort-descending": "à¤\89तरत क्रम में",
+       "sort-ascending": "à¤\9aढ़त क्रम में",
        "nstab-main": "पन्ना",
        "nstab-user": "सदस्य पन्ना",
-       "nstab-media": "मिडà¥\80या पन्ना",
+       "nstab-media": "मà¥\80डिया पन्ना",
        "nstab-special": "विशेष पन्ना",
        "nstab-project": "प्रोजेक्ट पन्ना",
        "nstab-image": "फाइल",
        "nstab-mediawiki": "सन्देश",
-       "nstab-template": "साà¤\81à¤\9aा",
+       "nstab-template": "à¤\9fà¥\87मà¥\8dपलà¥\87à¤\9f",
        "nstab-help": "मदद पन्ना",
        "nstab-category": "श्रेणी",
        "nosuchaction": "अईसन कौनो कार्रवाई नाहि",
        "no-null-revision": "पन्ना \"$1\" खातिर नया अशक्त संशोधन ना बन सकल",
        "badtitle": "खराब टाइटिल",
        "badtitletext": "रउआ द्वारा अनुरोधित शीर्षक अयोग्य, ख़ाली या गलत जुड़ल अंतर-भाषीय या अंतर-विकि शीर्षक बा।\nए में एक या एक से ढेर अइसन कॅरेक्टर हो सकत बा जवन शीर्षक में प्रयोग नइखे कइल जा सकत।",
+       "title-invalid-empty": "माँगल जा रहल पन्ना टाइटिल या त खाली बा या फिर खाली कौनों नाँवस्थान के नाँव भर दिहल गइल बाटे।",
+       "title-invalid-utf8": "माँगल जा रहल पन्ना टाइटिल में अइसन UTF-8 सीक्वेंस बा जेवन मान्य नइखे।",
+       "title-invalid-interwiki": "माँगल जा रहल पन्ना टाइटिल में इंटरविकि कड़ी बा जेवन टाइटिल में ना प्रयोग कइल जा सकत बा।",
+       "title-invalid-talk-namespace": "माँगल जा रहल पन्ना टाइटिल एगो अइसन वार्ता पन्ना के रेफर करत बा जेवना के होखल संभव नइखे।",
+       "title-invalid-characters": "माँगल जा रहल पन्ना टाइटिल में अमान्य अक्षर बा:\"$1\"।",
+       "title-invalid-relative": "टाइटिल के पाथ रिलेटिव (सापेक्षिक) बा। सापेक्षिक पन्ना टाइटिल (./, ../) मान्य नइखे, काहें से कि ई उपयोग करे वाला की ब्राउसर द्वारा लिहल जात समय अक्सरहा पहुँच से बाहर रहि जाला।",
+       "title-invalid-magic-tilde": "माँगल जा रहल पन्ना टाइटिल में अमान्य जादुई टिल्ड सीक्वेंस (<nowiki>~~~</nowiki>) बाटे।",
+       "title-invalid-too-long": "माँगल जा रहल पन्ना टाइटिल बहुत ढेर लंबा बा। ई UTF-8 की एनकोडिंग में $1 {{PLURAL:$1|बाइट|बाइट्स}} से ढेर ना होखे के चाहीं।",
+       "title-invalid-leading-colon": "माँगल जा रहल पन्ना टाइटिल में सुरुआते में अमान्य कोलन (:) बाटे।",
        "perfcached": "नीचे दिहल गइल डेटा कैशे मेमोरी से लिहल गइल बा, अतः हो सकता बा कि इ के पूर्ण अद्यतन ना भइल होखे। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजं}} उपलब्ध बाड़े।",
        "perfcachedts": "नीचे दिहल गइल डेटा कैशे मेमोरी से बा, आ एकर अंतिम अपडेट $1 के भइल रहल। कैश मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजां}} उपलब्ध बा।",
        "querypage-no-updates": "इ पृष्ठ के अपडेट करल अयोग्य बा। अभी अहिजा के डाटा के ताज़ा नइखे करल जा सकत।",
        "actionthrottled": "कार्य समाप्त कर दिहल गइल बा",
        "actionthrottledtext": "स्पैम के रोकथाम खातिर, इ क्रिया एतना कम समय में एक सीमा से अधिक बार करे के मना बा, आ रउआ इ सीमा के पार कर चुकल बानी।\nकृपया कुछ समय बाद पुन: यत्न करीं।",
        "protectedpagetext": "इ पन्ना संपादन आ अन्य कार्यं से बचाव खातिर सुरक्षित कर दिहल गइल बा।",
-       "viewsourcetext": "रउआ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
-       "viewyourtext": "रà¤\89à¤\86 à¤\87 à¤ªà¤¨à¥\8dना à¤®à¥\87à¤\82 ''à¤\86पन à¤¸à¤®à¥\8dपादन'' à¤\95à¥\87 à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\93à¤\95र à¤¨à¤\95ल à¤\89तार à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80:",
+       "viewsourcetext": "रउआ एह पन्ना के स्रोत देख सकत बानी आ एकर नकल उतार सकत बानी:",
+       "viewyourtext": "à¤\8fह à¤ªà¤¨à¥\8dना à¤ªà¤° <strong>राà¤\89र à¤\86पन à¤¸à¤\82पादन à¤¸à¤¬</strong>à¤\95à¥\87 à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\93à¤\95र à¤¨à¤\95ल à¤²à¥\87 à¤¸à¤\95त à¤¬à¤¾à¤¨à¥\80।",
        "protectedinterface": "इ पन्ना इ विकी के सॉफ़्टवेयर के इंटरफ़ेस पाठ्य के देवेला, आ इ के गलत प्रयोग से बचावे खातिर सुरक्षित कर दिहल गइल बा।\nसभन विकियन खातिर अनुवाद जोड़े या बदले खातिर कृपया मीडियाविकि के क्षेत्रीयकरण प्रकल्प [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
        "editinginterface": "<strong>चेतावनी:</strong> आप एगो अइसन पन्ना के बदल बदल रहल बानी जवन सॉफ़्टवेयर के इंटरफ़ेस पाठ प्रदान करेला। इ पृष्ठ के बदले से अन्य सदस्यवन के प्रदर्शित इंटरफ़ेस के शक्लोसूरत में बदलाव आई।",
        "translateinterface": "सभन विकियन खातिर अनुवाद जोड़े या बदले खातिर मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ translatewiki.net] के प्रयोग करीं।",
-       "cascadeprotected": "à¤\87 à¤ªà¤¨à¥\8dना à¤ªà¤° à¤¸à¤®à¥\8dपादन à¤\95रà¥\87 à¤\95à¥\87 à¤\85धिà¤\95ार à¤\96तà¥\8dम à¤\95र à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾ à¤\95ाहà¥\87 à¤\95ि à¤\87 à¤¨à¤¿à¤®à¥\8dन à¤®à¥\87à¤\82 à¤¶à¤¾à¤®à¤¿à¤² à¤¬à¤¾ {{PLURAL:$1|पनà¥\8dना, à¤\9cà¤\89न|पनà¥\8dनाà¤\82, à¤\9cà¤\89न}} \"वà¥\8dयापà¤\95\" à¤µà¤¿à¤\95लà¥\8dप à¤\95à¥\87 à¤\9aालà¥\82 à¤\95à¤\87ला à¤\95à¥\87 à¤¸à¤¾à¤¥ à¤¸à¥\81रà¤\95à¥\8dषित à¤\95र à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾:\n$2",
+       "cascadeprotected": "à¤\8f à¤ªà¤¨à¥\8dना à¤\95à¥\87 à¤¸à¤\82पादन à¤\95à¤\87ल à¤¸à¥\81रà¤\95à¥\8dषित à¤\95 à¤¦à¤¿à¤¹à¤² à¤\97à¤\87ल à¤¬à¤¾ à¤\95ाहà¥\87à¤\82 à¤\95ि à¤\88 {{PLURAL:$1|पनà¥\8dना à¤®à¥\87à¤\82, à¤\9cà¥\8cना à¤\95à¥\87|पनà¥\8dना à¤¸à¤¬ à¤®à¥\87à¤\82, à¤\9cिनà¥\8dहन à¤\95à¥\87}} \"à¤\95à¥\88सà¥\8dà¤\95à¥\87डिà¤\82à¤\97\" (बिसà¥\8dतारित) à¤¸à¥\81रà¤\95à¥\8dषा à¤\9aालà¥\82 à¤\95 à¤\95à¥\87 à¤¸à¥\81रà¤\95à¥\8dषित à¤\95à¤\87ल à¤\97à¤\87ल à¤¬à¤¾, à¤®à¥\87à¤\82 à¤¸à¤®à¤¾à¤\87ल à¤¬à¤¾à¤\9fà¥\87:\n$2",
        "namespaceprotected": "रउआ के '''$1''' नामस्थान के पन्नं में सम्पादन करे के अधिकार नइखे दिहल गइल।",
        "customcssprotected": "रउआ के इ CSS पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
        "customjsprotected": "रउआ इ जावास्क्रिप्ट पन्ना के संपादित करे के अनुमति नइखे, काहे कि इ में अन्य सदस्यं के व्यक्तिगत सेटिंग्स समाविष्ट बा।",
        "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}",
        "createacct-benefit-body3": "हाल के {{PLURAL:$1|योगदानकर्ता}}",
        "badretype": "रउआ जौन गुप्त शब्द डालत बानी उ नईखे मेल खात।",
+       "usernameinprogress": "एही सदस्यनाँव खातिर खाता खोले के काम पहिलहीं चालू बा।\nइंतजार करीं।",
        "userexists": "लिखल गईल सदस्य नाम पहिले से प्रयोग में बा। कृपया कौनो दोसर नाम चुनीं।",
        "loginerror": "खाता प्रवेश में त्रुटि",
        "createacct-error": "खाता निर्माण त्रुटि",
        "passwordreset": "गुप्तशब्द (पासवर्ड) रिसेट करीं",
        "passwordreset-text-one": "आपन गुप्तशब्द के पुनर्स्थापित करे खातिर इ फॉर्म भरीं।",
        "passwordreset-text-many": "{{PLURAL:$1|ईमेल द्वारा अस्थाई पासवर्ड पावे खातिर निम्न में से कउनो एगो स्थान भरीं।}}",
-       "passwordreset-legend": "गुप्तशब्द रिसेट करीं",
        "passwordreset-disabled": "इ विकी पर पासवर्ड पुनर्स्थापन अक्षम बा।",
        "passwordreset-emaildisabled": "इ विकि पर ई-मेल सुविधा अक्षम कर दिहल गईल बा।",
        "passwordreset-username": "प्रयोगकर्ता नाम",
        "resettokens": "टोकन रीसेट करीं",
        "resettokens-text": "जौन टोकन राउर खाता से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करेला, आप उ के अहिजा रीसेट कर सकत बानी।\n\nयदि रउआ ई के गलती से केहू के दिखा देले बानी या फिर राउर खाता हैक हो गईल बा त रउआ ई के रीसेट कर देवे के चाहीं।",
        "resettokens-no-tokens": "रीसेट करे खातिर कउनो टोकन नइखे।",
-       "resettokens-legend": "टोकन रीसेट करीं",
        "resettokens-tokens": "टोकन:",
        "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|आपके ध्यानसूची के पन्नन में बदलावसभ]] के वेब फ़ीड (Atom/RSS) हेतु टोकन",
        "watchthis": "धियानसूची में डालीं",
        "savearticle": "पन्ना सहेजीं",
        "preview": "पूर्वावलोकन",
-       "showpreview": "नमà¥\82ना à¤¦à¥\87à¤\96ाà¤\88ं",
-       "showdiff": "परिवरà¥\8dतन à¤¦à¥\87à¤\96ाà¤\88ं",
+       "showpreview": "à¤\9dलà¤\95 à¤¦à¥\87à¤\96à¥\80ं",
+       "showdiff": "बदलाव à¤¦à¥\87à¤\96à¥\80ं",
        "blankarticle": "<strong>चेतावनी:</strong> आप एगो खाली पन्ना के बनावे जा रहल बानी।\nयदि आप \"{{int:savearticle}}\" के फेर से दबायेब त पन्ना बिना कउनो सामग्री के बन जाई।",
        "anoneditwarning": "<strong>चेतावनी:</strong> रउआ आपन खाता में प्रवेश नइखीं कइले। अगर रउआ कौनों बदलाव करत बानी त राउर आईपी पता दर्ज होई। अगर रउआ <strong>[$1 लॉग इन]</strong> या <strong>[$2 नया खाता बनाइब]</strong> त, अउरी सुबिधा सब की संघे राउर संपादन के श्रेय भी राउर सदस्य-नाँव से जुड़ जाई!",
        "anonpreviewwarning": "''रउआ खाता में प्रवेश नईखीं भईल। सुरक्षित करेब त ई पन्ना के सम्पादन इतिहास पर राउर आई पी पता दर्ज हो जाई।\"",
        "userpage-userdoesnotexist-view": "सदस्य खाता \"$1\" पंजीकृत नईखे भईल।",
        "blocked-notice-logextract": "ई प्रयोगकर्ता के ई समय निष्क्रीय कर दिहल गईल बा।\nनविनतम नष्ट लौग प्रविष्टी उद्धरण खातिर निचे दिहल बा:",
        "clearyourcache": "'''ध्यान दिं:'''  पन्ना सुरक्षित कइला के बाद बदलाव देखे खातिर आपके आपन ब्राउज़र के कैश खाली करे के पड़ सकत बा।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबाते समय ''Shift'' (शिफ़्ट) दबा के रखीं, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबाईं (मैक पर ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबाईं (मैक पर ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाके ''Refresh'' (रिफ़्रेश) करीं या ''Ctrl-F5'' (कंट्रोल-F5) दबाईं\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसन्द) में कैश साफ़ करीं",
+       "usercssyoucanpreview": "<strong>टिप:</strong> आपन नया CSS के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।",
+       "userjsyoucanpreview": "<strong>टिप:</strong> आपन नया जावास्क्रिप्ट के टेस्ट करे खातिर सहेजे से पहिले \"{{int:showpreview}}\" बटन के प्रयोग करीं।",
+       "usercsspreview": "<strong>याद रहे की आप अपनी सदस्य CSS के खाली नमूना भर देखत बानी।\nई अबहिन ले सहेजल ना गइल बाटे।</strong>",
+       "userjspreview": "<strong>याद रहे की आप अपनी सदस्य जावास्क्रिप्ट के खाली टेस्ट करत बानी/नमूना देखत बानी।\nई अबहिन सहेजल ना गइल बाटे।</strong>",
+       "sitecsspreview": "<strong>याद रहे की आप ए CSS क खाली नमूना देखत बानी।\nई अबहिन ले सहेजल ना गइल बा!</strong>",
+       "sitejspreview": "<strong>याद रहे की आप ए जावास्क्रिप्ट कोड क खाली नमूना देखत बानी।\nई अबहिन ले सहेजल ना गइल बा!</strong>",
+       "userinvalidcssjstitle": "<strong>चेतावनी:</strong> कौनों skin \"$1\"नइखे।\nCustom .css आ .js पन्ना सभ छोटका अक्षर में टाइटिल इस्तेमाल करे लें जइसे की, {{ns:user}}:Foo/vector.css ना की {{ns:user}}:Foo/Vector.css।",
        "updated": "(अपडेट करल गईल)",
        "note": "'''सूचना:'''",
        "previewnote": "'''याद रखीं, इ एगो झलक मात्र हो।'''\nराउर बदलाव अभी तक सुरक्षित नईखे करल गईल!",
        "continue-editing": "संपादन क्षेत्र में जाईं",
+       "previewconflict": "ई नमूना ई देखावत बा की अगर रउआँ ए संपादन बक्सा में मौजूद पाठ के सहेजब त ऊ कइसन देखाई पड़ी।",
+       "session_fail_preview": "<strong>माफ करीं! एह सत्र के आँकड़ा के गायब हो गइला की कारण आपके संपादन के प्रॉसेस करे में हमनी के असमर्थ बाणी।</strong>\nदोबारा से कोसिस करीं।\nअगर तबो काम ना होखे तब [[Special:UserLogout|लॉग आउट करीं]] आ दोबारा लॉग इन कइ के कोसिस करी।",
+       "session_fail_preview_html": "<strong>माफ करीं! सत्र आँकड़ा के गायब होखला की कारन आपके संपादन सहेजल नइखे जा सकत।</strong>\n\n<em>चूँकि, {{SITENAME}} में मूल HTML सक्षम कइल बाटे, जावास्क्रिप्ट हमला से बचाव की खातिर नमूना देखावे के छिपावल गइल बा।</em>\n\n<strong>अगर ई एगो वैध संपादन बाटे तब एक बेर फिर से कोसिस करीं।</strong>\nअगर तबो पर काम नइखे हो पावत त [[Special:UserLogout|लॉग आउट करीं]] आ दुबारा लॉगिन क के कोसिस करीं।",
+       "token_suffix_mismatch": "<strong>राउर संपादन रिजेक्ट कइल जात बा काहें से की राउर क्लायंट संपादन टोकन में विराम चीन्हा सब से गड़बड़ क दिहले बा।</strong>\nपन्ना के पाठ के तहस-नहस होखे से बचावे खाती ई संपादन रिजेक्ट कइल गइल बा।\nकबो-कबो अइसन एहू दसा में हो सकेला जब आप खराबी-युक्त वेबआधारित बेनाम प्रॉक्सी सर्वर के इस्तेमाल करत होखीं।",
+       "edit_form_incomplete": "<strong>संपादन के कुछ हिस्सा सर्वर ले ना पहुँच पावल ह; दोहरा के चेक करीं की राउर संपादन बदलल न होखे आ एक बेर फिर से सहेजे के कोसिस करीं।</strong>",
        "editing": "$1 संपादन",
        "creating": "$1 बनावे जा रहल बानी",
        "editingsection": "$1 संपादन (खंड)",
        "editingcomment": "$1 सम्पादन (नया अनुभाग)",
        "editconflict": "संपादन अंतर्विरोध: $1",
+       "explainconflict": "आपकी संपादन शुरू कइला की बाद से केहू अउरी ए पन्ना में बदलाव क चुकल बाटे।\nऊपर के पाठ हिस्सा में लेख की पाठ के वर्तमान स्थिति देखावल जात बा।\nराउर संपादन नीचे की पाठ हिस्सा में देखावल गइल बा।\nरउआँ के आपन बदलाव एह पहिले से मौजूद पाठ में मिलावे के परी।\n<strong>खाली</strong> ऊपर की पाठ हिस्सा में लउकत पाठ सहेजल जाई अगर आप \"{{int:savearticle}}\" बटन दबाइब।",
        "yourtext": "राउर पाठ्य",
        "storedversion": "सुरक्षित करल गईल संशोधन",
+       "nonunicodebrowser": "<strong>चेतावनी: राउर ब्राउसर युनिकोड समर्थ नइखे।</strong>\nपन्ना सभ के सुरक्षित संपादित करे के एगो तरीका सुझावल जात बा: गैर-ASCII अक्षर सभ संपादन बॉक्स में हेक्साडेसिमल कोड की रूप में देखावल जाई।",
+       "editingold": "<strong>चेतावनी: रउआँ ए पन्ना क एगो पुरान अवतरण के संपादन करत बानी।</strong>\nअगर आप एकरा के सहेज देइब, त एकरी बाद के सगरी बदलाव गायब हो जाई।",
        "yourdiff": "अंतर",
-       "templatesused": "ए पन्ना पर इस्तेमाल {{PLURAL:$1|साँचा|साँचा कुल}}:",
-       "templatesusedpreview": "इ पुर्वावलोकन में प्रयुक्त {{PLURAL:$1|खाँचा|खाँचा कुल}}:",
+       "copyrightwarning": "ई नोट कर लीं की {{SITENAME}} पर राउर सगरी योगदान $2 की तहत रिलीज कइल मानल जाई (ढेर जानकारी खातिर $1 देखल जाय)।\nअगर रउआँ ई नइखीं चाहत की राउर लिखल चीज के केहू दूसर बेकति बे मोह-छोह के संपादित क दे या कहीं भी बाँट दे तब अइसन चीज इहाँ मत डालीं।<br />\nरउआँ इहो सकारत बानी आ वादा करत बानी की ई चीज रउआँ खुद लिखले बानी, या फिर पब्लिक पहुँच में मौजूद या कौनों अइसने फ्री स्रोत से नकल कइले बानी।\n<strong>कौनों भी कॉपीराइट वाली चीज बिना परमीशन के इहाँ कब्बो मत डालीं!</strong>",
+       "copyrightwarning2": "ई नोट कर लीं कि {{SITENAME}} पर सगरी योगदान के दुसरा योगदानकर्ता लोगन द्वारा संपादित कइल जा सकेला, बदलल या हटावल जा सकेला।\nअगर आप ई नइखीं चाहत की राउर लिखल चीज के केहू भी बे-मोहछोह के संपादित क दे, तब ए के इहाँ मत डालीं।<br />\nरउआँ इहो वादा करत बानी की आप ई खुद लिखले बानी या फिर पब्लिक पहुँच में मौजूद या अइसने कौनों फ्री स्रोत से नकल कइले बानी (ढेर जानकारी खातिर $1 देखीं)।\n<strong>बिना परमीशन के कॉपीराइट वाली चीज इहाँ कब्बो मत डालीं!</strong>",
+       "editpage-cannot-use-custom-model": "ए पन्ना के सामग्री के मॉडल के ना बदलल जा सकत बा।",
+       "longpageerror": "<strong>खराबी: आप जवन पाठ लिख के दिहले बानी ऊ {{PLURAL:$1|एक किलोबाइट|$1 किलोबाइट्स}} के बाटे, जेवन अधिकतम सीमा {{PLURAL:$2|एक किलोबाइट|$2 किलोबाइट्स}} से ढेर बा।</strong>\nई सहेजल ना जा सकेला।",
+       "readonlywarning": "<strong>चेतावनी: डेटाबेस ए समय मरम्मत खातिर लॉक कइल गइल बा, आ एही कारण आप तुरंते एही समय आपन सम्पादन ना सहेज पाइब।</strong>\nरउआँ अपनी पाठ (text) के कौनों पाठ फाइल (text file) में बाद खातिर सहेज के रख लीं।\n\nजे एडमिनिस्ट्रेटर एकरा के लॉक कइले बा ऊ नीचे लिखल कारण दिहले बा: $1",
+       "protectedpagewarning": "<strong>चेतावनी: ई पन्ना सुरक्षित कइल गइल बा जेवना से कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकत बा।</strong>\nप्रसंग बूझे खातिर सबसे नया लॉग एंट्री नीचे दिहल जात बा:",
+       "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना सुरक्षित कइल गइल बा कि एकरा के खाली रजिस्टर्ड सदस्य लोग संपादित क सकत बा।\nसभसे नया लॉग एंट्री नीचे प्रसंग बतावे खातिर दिहल जात बा:",
+       "cascadeprotectedwarning": "<strong>चेतावनी:</strong> ई पन्ना सुरक्षित क दिहल गइल बा कि एकरा के खाली प्रबंधक (Admin) विशेषाधिकार वाला सदस्य लोग संपादित क सकेला काहें से की ई नीचे दिहल बिस्तारित(कैस्केडिंग)-सुरक्षा वाला {{PLURAL:$1|पन्ना|पन्नवन}} में समाइल बाटे:",
+       "titleprotectedwarning": "<strong>चेतावनी: ई पन्ना सुरक्षित कइल गइल बा की एकरा के बनावे खातिर [[Special:ListGroupRights|विशेष अधिकार]] होखल जरूरी बा।</strong>\nसंदर्भ खातिर नीचे सबसे नया लॉग एंट्री दिहल जात बा:",
+       "templatesused": "ए पन्ना पर इस्तेमाल {{PLURAL:$1|टेम्पलेट|टेम्पलेट कुल}}:",
+       "templatesusedpreview": "इ पुर्वावलोकन में प्रयुक्त {{PLURAL:$1|टेम्पलेट|टेम्पलेट कुल}}:",
+       "templatesusedsection": "एह खण्ड में इस्तेमाल {{PLURAL:$1|टेम्पलेट|कुल}}:",
        "template-protected": "(सुरक्षित)",
        "template-semiprotected": "(कुछ-सुरक्षित)",
        "hiddencategories": "ई पन्ना {{PLURAL:$1|1 छिपल श्रेणी|$1 छिपल श्रेणीसभ}} के सदस्य बा:",
+       "nocreatetext": "{{SITENAME}} नया पन्ना बनावे पर रोक लगवले बा।\nपीछे जाईं आ पहिले से बनल पन्ना संपादित करीं या फिर [[Special:UserLogin|लॉगिन करीं या नया खाता बनाईं]]।",
        "nocreate-loggedin": "नया पन्ना बनावे रउआ अधिकार नइखे।",
        "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नइखे",
        "sectioneditnotsupported-text": "इ पन्ना पर अनुभाग सम्पादन समर्थित नइखे",
        "permissionserrors": "अनुमति त्रुटी",
        "permissionserrorstext": "निम्नलिखित {{PLURAL:$1|कारण|कारणन}} के चलते आपके अइसन करे के अनुमति नइखे:",
        "permissionserrorstext-withaction": "नीचे दिहल {{PLURAL:$1|कारण|कारणन}} से रउआँ के $2 के परमीशन नइखे:",
+       "recreate-moveddeleted-warn": "<strong>चेतावनी: रउआँ एगो अइसन पन्ना दुबारा बनावे जा रहल बानी जेवन पहिले हटावल जा चुकल बा</strong>\n\nआपके ई बिचार क लेवे के चाहीं की आगे संपादन कइल ठीक बा की ना।\n\nसुविधा खातिर, ए पन्ना के हटवले आ स्थानांतरण के लॉग नीचे दिहल जात बा:",
        "moveddeleted-notice": "ई पन्ना हटा दिहल गइल बा।\nसंदर्भ खातिर हटावे आ स्थानांतरण के लॉग नीचे दिहल जात बाटे।",
        "log-fulllog": "पूरा लॉग देखीं",
+       "edit-hook-aborted": "संपादन के हुक निरस्त क दिहलस।\nई कौनों कारन ना बतवलस।",
+       "edit-gone-missing": "पन्ना अपडेट ना हो पावल।\nबुझात बा कि ई हटा दिहल गइल बा।",
        "edit-conflict": "संपादन अंतर्विरोध",
+       "edit-no-change": "आपके सम्पादन पर धियान ना दिहल गइल काहें से की पाठ में कौनों बदलाव ना कइल गइल रहल।",
        "postedit-confirmation-created": "पन्ना बना दिहल गईल।",
+       "postedit-confirmation-restored": "पन्ना के दुबारा अस्थापित कइल गइल।",
        "postedit-confirmation-saved": "राउर सम्पादन सुरक्षित कर दिहल गईल।",
+       "edit-already-exists": "नया पन्ना ना बनावल जा सकत बा।\nई पहिलहीं से मौजूद बाटे।",
        "defaultmessagetext": "संदेश के डिफ़ॉल्ट पाठ्य",
+       "content-failed-to-parse": "$2 के सामग्री, $1 मॉडल खातिर पार्स (parse) ना हो पावल: $3",
        "invalid-content-data": "अवैध डाटा सामग्री",
+       "content-not-allowed-here": "\"$1\" सामग्री, पन्ना [[$2]] पर ना डालल जा सकेला।",
+       "editwarning-warning": "ए पन्ना के छोड़ के हटला पर आपके कइल बदलाव गायब हो जाई।\nअगर आप लॉगिन कइले बानी तब ए चेतावनी के अपनी सेटिंग में \"{{int:prefs-editing}}\" खंड में जा के बन्द क सकत बानीं।",
+       "editpage-notsupportedcontentformat-title": "सामग्री के फॉरमैट सपोर्टेड नइखे।",
+       "editpage-notsupportedcontentformat-text": "सामग्री फॉरमैट $1 के सामग्री मॉडल $2 सपोर्ट नइखे करत।",
        "content-model-wikitext": "विकीपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-model-css": "सी॰एस॰एस",
+       "content-json-empty-object": "खाली चीज (Empty object)",
+       "content-json-empty-array": "खाली अरे (Empty array)",
+       "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]], [[:$2]] के \"$3\" पैरामीटर खातिर एक से अधिका वैल्यू की संघे काल करत बाटे। दिहल गइल वैल्यू में से खाली सबसे आखिरी वैल्यू के प्रयोग कइल जाई।",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क के उपयोग करते हुए पन्नासभ",
+       "duplicate-args-category-desc": "पन्ना पर अइसन टेम्पलेट काल मौजूद बा जेवन डुप्लीकेट (दोहरा) आर्गुमेंट इस्तेमाल करत बाटे, जइसे की <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> या <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>चेतावनी:</strong> ई पन्ना बहुत ढेर सारा  खर्चीला पार्सर फंक्शन काल के इस्तेमाल करत बा।\n\nए पन्ना पर $2 {{PLURAL:$2|काल|काल कुल}} से कम संख्या में काल होखे के चाहीं, बाकी इहाँ ए समय {{PLURAL:$1|$1 काल बा|$1 काल कुल बाड़ी}}।",
+       "expensive-parserfunction-category": "बहुत ढेर खर्चीला पार्सर फंक्शन काल वाला पन्ना सभ",
        "post-expand-template-inclusion-warning": "'''चेतावनी:''' खाँचा जोड़े के सीमा पार हो चुकल बा।\nकुछ खाँचा ना जोड़ल जाई।",
        "post-expand-template-inclusion-category": "अइसन पृष्ठ जे पर साँचा जोडे के सीमा पार हो गइल बा",
+       "post-expand-template-argument-warning": "<strong>चेतावनी:</strong> ए पन्ना पर कम से कम एक ठो अइसन टेम्पलेट आर्गुमेंट बा जेवन बहुत बड़ खर्चीला साइज के बा।\nअइसन आर्गुमेंट के लोप कइ दिहल गइल बा।",
+       "post-expand-template-argument-category": "पन्ना जिनहन में लोप कइल गइल टेम्पलेट आर्गुमेंट बा",
+       "parser-template-loop-warning": "टेम्पलेट लूप पकड़ में आइल बा:[[$1]]",
+       "parser-template-recursion-depth-warning": "टेम्पलेट रिकरसन (recursion) के गहिराइ सीमा पार ($1)",
+       "language-converter-depth-warning": "भाषा बदलावक (language converter) के गहिराइ सीमा पार ($1)",
+       "node-count-exceeded-category": "पन्ना जहाँ नोड गिनती पार हो गइल बा",
+       "node-count-exceeded-category-desc": "पन्ना अधिकतम नोड गिनती (node count) के पार क गइल बा।",
+       "node-count-exceeded-warning": "पन्ना नोड गिनती (node count) के पार क गइल",
+       "expansion-depth-exceeded-category": "पन्ना जहाँ बिस्तार के गहिराई पार हो गइल बा",
+       "expansion-depth-exceeded-category-desc": "पन्ना अधिकतम बिस्तार गहिराई के पार क गइल बा।",
+       "expansion-depth-exceeded-warning": "पन्ना अधिकतम बिस्तार गहिराई के पार क गइल",
+       "parser-unstrip-loop-warning": "अनस्ट्रिप लूप पकड़ में आइल बा",
+       "parser-unstrip-recursion-limit": "अनस्ट्रिप रिकर्शन सीमा पार हो गइल ($1)",
+       "converter-manual-rule-error": "मैनुअल भाषा परिवर्तन नियम मब खराबी पकड़ल गइल",
+       "undo-success": "संपादन वापस कइल जा सकत बा।\nनीचे दिहल तुलना के चेक करीं आ पुष्टी करीं की आप इहे कइल चाहत बाड़ीं, ओकरा बाद बदलाव सहेज के संपादन वापसी के पूरा करीं।",
+       "undo-failure": "बीच में अउरी संपादन होखला की कारण ई संपादन वापस नइखे लिहल जा सकत।",
+       "undo-norev": "संपादन वापस नइखे लिहल जा सकत, काहें से की या त ई हइये नइखे या हटा दिहल गइल बाटे।",
+       "undo-nochange": "लागत बा की ई संपादन पहिलहीं वापस लिहल जा चुकल बाटे।",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|वार्ता]]) के द्वारा कइल $1 बदलाव के वापस कइल गइल",
+       "undo-summary-username-hidden": "एगो छिपल सदस्य द्वारा कइल बदलाव $1 वापस कइल गइल",
        "cantcreateaccounttitle": "खाता खुल नईखे सकत",
+       "cantcreateaccount-text": "एह आइपी पता (IP address)(<strong>$1</strong>) द्वारा नया खाता बनावे पर  [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण:<em>$2</em>",
+       "cantcreateaccount-range-text": "आइपी पता बिस्तार (IP address range) '''$1''' पर, जेवना में आपके आइपी ('''$4''') भी बा, नया खाता बनावे पर [[User:$3|$3]] द्वारा रोक लगावल गइल बा।\n\nएकरा खातिर $3 के दिहल कारण बा:''$2''",
        "viewpagelogs": "ए पन्ना खातिर लॉग कुल देखीं",
        "nohistory": "ए पन्ना के कौनों संपादन इतिहास नइखे",
        "currentrev": "सबसे नया बदलाव",
        "history-feed-description": "विकि पर इ पन्ना के संशोधन के इतिहास",
        "history-feed-item-nocomment": "$1 $2 पर",
        "history-feed-empty": "अनुरोध करल गईल पन्ना उपलब्ध नईखे। हो सकत बा उ के विकि पर से मिटा दिहल गईल होखे, आ चाहे उ के नाम बदल देवल गईल होखे।\nप्रासंगिक पन्ना के [[Special:Search|विकि पर खोजे के]] कोशिश करत रहीं।",
+       "history-edit-tags": "सेलेक्ट कइल बदलाव खातिर संपादन टैग",
        "rev-deleted-comment": "(सम्पादन सारांश हटावल गईल)",
        "rev-deleted-user": "(प्रयोगकर्ता के नाम मिटा दिहल गईल बा)",
        "rev-deleted-event": "(लॉग विवरण हटा दिहल गईल बा)",
        "rev-deleted-user-contribs": "[प्रयोगकर्ता नाम आ चाहे आइ पी पता हटा दिहल गईल बा - योगदान से सम्पादन छुप गईल बा]",
        "rev-deleted-text-permission": "ई पन्ना के संशोधन '''मिटा'''' दिहल गईल बा।\nमेटावल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} डिलेशन लॉग] में मिली।",
        "rev-suppressed-text-permission": "ए पन्ना के बदलाव<strong>दबा दिहल गइल बा</strong>।\nबिस्तृत जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दबावल चीज के लॉग] पर मिल जाई।",
+       "rev-deleted-text-unhide": "पन्ना पर क ई बदलाव <strong>हटा दिहल गइल बा</strong>।\nएकर डिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] में मिल सकेला।\nअभी भी आप [$1 ई बदलाव देख सकत बानी]  अगर आप आगे देखल चाहत होखीं।",
+       "rev-suppressed-text-unhide": "पन्ना पर के ई बदलाव <strong>ढाँप दिहल गइल बा</strong>।\nडिटेल में जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}  ढाँपले के लॉग] पर मिल सकत बा।\nआप अभी भी [$1 ई बदलाव देख सकत बानी] अगर आप आगे बढ़ल चाहीं।",
+       "rev-deleted-text-view": "पन्ना पर के ई बदलाव <strong>हटा दिहल गइल बा</strong>।\nआप एकरा के देख सकत बानी; डिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-text-view": "पन्ना पर के ई बदलाव <strong>ढाँप दिहल गइल बा</strong>।\nआप एकरा के देख सकत बानी;  डिटेल जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ढाँपले के लॉग] पर मिल सकत बा।",
+       "rev-deleted-no-diff": "रउआँ ई अंतर नइखीं देख सकत काहें से की ए बदलाव कुल में से कौनों बदलाव <strong>हटा दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-no-diff": "रउआँ ई अंतर नइखीं देख सकत काहें से की कौनों एगो बदलाव के <strong>हटा दिहल गइल बा</strong>।",
+       "rev-deleted-unhide-diff": "ए अंतर के कौनों एगो बदलाव One of the revisions of this diff has been <strong>हटा दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर बा।\nरउआँ [$1 ई अंतर देख सकत बानी] अगर आगे बढ़ल चाहीं।",
+       "rev-suppressed-unhide-diff": "ए अंतर में के कौनों बदलाव के <strong>ढाँप दिहल गइल</strong> बा।\nडिटेल जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ढाँपले के लॉग] पर बा।\nअभी भी आप ई अंतर [$1 देख सकत बानी] अगर आप आगे बढ़ल चाहीं।",
+       "rev-deleted-diff-view": "ए अंतर क कौनो एगो बदलाव <strong>हटा दिहल गइल</strong> बा।\nआप ई अंतर देख सकत बानी; डिटेल में जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटवले के लॉग] पर मिल सकत बा।",
+       "rev-suppressed-diff-view": "ए अंतर के कौनो एगो बदलाव <strong>ढाँप दिहल गइल</strong> बा।\nआप ई अंतर देख सकत बानी; डिटेल में जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}  ढाँपले की लॉग] पर बा।",
        "rev-delundel": "देखाईं/छिपाईं",
        "rev-showdeleted": "देखाईं",
+       "revisiondelete": "रिवीजन हटाईं/हटावल लौटाईं",
+       "revdelete-nooldid-title": "अमान्य टारगेट रिवीजन",
+       "revdelete-nooldid-text": "आप या त ए फंक्शन के लागू करे खातिर कौनो निश्चित टारगेट बदलाव नइखीं दिहले, या राउर बतावल बदलाव मौजूद नइखे, या फिर आप वर्तमान बदलाव के छिपावे के कोसिस करत बानी।",
+       "revdelete-no-file": "बतावल गइल फाइल मौजूद नइखे।",
+       "revdelete-show-file-confirm": "का सही में रउआँ फाइल \"<nowiki>$1</nowiki>\" के $2 के $3 बनल आ बाद में हटावल बदलाव देखल चाहत बानी?",
        "revdelete-show-file-submit": "जी",
+       "revdelete-selected-text": "[[:$2]] के {{PLURAL:$1|चुनल गइल बदलाव| चुनल गइल बदलाव सभ}}:",
+       "revdelete-selected-file": "[[:$2]] के {{PLURAL:$1|चुनल गइल फाइल वर्शन|चुनल गइल फाइल वर्शन सभ}}:",
+       "logdelete-selected": "{{PLURAL:$1|चुनल गइल लॉग घटना|चुनल गइल लॉग घटना सब}}:",
+       "revdelete-text-text": "हटावल गइल बदलाव पन्ना की इतिहास में जरूर लउकी बाकी ओकर सामग्री जनता खातिर पहुँच से बाहर रही।",
+       "revdelete-text-file": "हटावल फाइल वर्शन फाइल की इतिहास में जरूर लउकी बाकी ओकर सामग्री जनता की पहुँच से बाहर रही।",
+       "logdelete-text": "हटावल लॉग घटना सब लॉग की इतिहास में जरूर लउकी बाकी उन्हन के सामग्री जनता खातिर पहुँच से बाहर रही।",
+       "revdelete-text-others": "अगर अउरी अधिका प्रतिबंध ना सेट कइल जाव, त बाकी प्रबंधक लोग छिपावल सामग्री के देखे आ वापस ले आवे में सक्षम रही।",
+       "revdelete-confirm": "निश्चित रूप से बताईं की आप ई कइल चाहत बानी, आप एकर परिणाम बूझत बानी, आ आप ई उचित [[{{MediaWiki:Policy-url}}|नीति की अनुसार]] करत बानी।",
+       "revdelete-suppress-text": "ढाँपल (Suppression) <strong>खाली भर</strong> नीचे बतावल स्थिति में इस्तेमाल होखे के चाहीं:\n* potentially libelous information\n* inappropriate personal information\n*: <em>home addresses and telephone numbers, national identification numbers, etc.</em>",
+       "revdelete-legend": "देखाई दिहला पर प्रतिबन्ध सेट करीं",
        "revdelete-hide-text": "संशोधन पाठ्य",
        "revdelete-hide-image": "फाइल के सामग्री छुपाँईं",
+       "revdelete-hide-name": "टारगेट आ पैरामीटर छिपाईं",
        "revdelete-hide-comment": "सारांश सम्पादन",
        "revdelete-hide-user": "सम्पादक के सदस्यनाम/आइ॰पी पता",
+       "revdelete-hide-restricted": "डेटा के अउरी सदस्य सभ की साथै साथ प्रबंधक लोगन खातिर भी ढाँप दीं",
        "revdelete-radio-same": "(मत बदलीं)",
        "revdelete-radio-set": "छुपल",
        "revdelete-radio-unset": "दृश्यमान",
+       "revdelete-suppress": "डेटा के अउरी सदस्य आ प्रबंधक लोगन खातिर भी ढाँप दीं",
+       "revdelete-unsuppress": "दुबारा स्थापित बदलाव पर से प्रतिबन्ध हटाईं",
        "revdelete-log": "कारण:",
+       "revdelete-submit": "चुनल गइल {{PLURAL:$1|बदलाव|बदलाव कुल}} पर लागू करीं",
+       "revdelete-success": "बदलाव के देखाई पड़ले के सेटिंग अपडेट हो गइल",
+       "revdelete-failure": "बदलाव के देखाई पड़ले के सेटिंग अपडेट ना हो पावल:$1",
+       "logdelete-success": "लॉग के देखाई पड़ले के सेटिंग पूरा भइल।",
+       "logdelete-failure": "लॉग के देखाई पड़ले के सेटिंग पूरा ना भइल:$1",
        "revdel-restore": "दूश्यता बदलीं",
        "pagehist": "पन्ना के इतिहास",
        "deletedhist": "मिटावल इतिहास",
+       "revdelete-hide-current": "तारीख $2 के $1 बजे के बदलाव छिपावे में खराबी बा।\nई सबसे ताजा बदलाव बा। एकरा के ना छिपावल जा सकत बाटे।",
+       "revdelete-show-no-access": "तारीख $2, के $1 बजे के बदलाव देखावे में खराबी: ए चीज के \"प्रतिबंधित\" चिन्हित कइल गइल बा। आपकी लगे इहाँ ले के पहुँच नइखे।",
+       "revdelete-modify-no-access": "तारीख $2, समय $1, के चीज में बदलाव करे में खराबी बा: ई चीज \"प्रतिबंधित\" चिन्हित कइल गइल बा।\nआप की लगे इहाँ ले पहुँच नइखे।",
+       "revdelete-modify-missing": "आइटम ID $1 के बदलाव करे में खराबी: ई डेटाबेस से गायब बा!",
+       "revdelete-no-change": "<strong>चेतावनी:</strong> तारीख $2 के $1 बजे के ई आइटम पहिलहीं से ओही देखावे के सेटिंग वाला बाटे जवन माँगल जाता।",
        "revdelete-otherreason": "अन्य/अतिरिक्त कारण:",
        "revdelete-reasonotherlist": "अन्य कारण",
        "revdelete-edit-reasonlist": "हटावे के कारण बदलीं",
        "upload-proto-error": "गलत प्रोटोकाल",
        "upload-file-error": "इंटरनल खराबी",
        "upload-misc-error": "नामालूम अपलोड खराबी",
+       "upload-dialog-title": "फाइल अपलोड",
+       "upload-dialog-error": "कौनो खराबी आ गइल",
+       "upload-dialog-warning": "कौनो चेतावनी बा",
+       "upload-dialog-button-cancel": "कैंसिल",
+       "upload-dialog-button-done": "पूरा भइल",
+       "upload-dialog-button-save": "सहेजीं",
+       "upload-dialog-button-upload": "अपलोड",
+       "upload-dialog-label-select-file": "फाइल चुनीं",
+       "upload-dialog-label-infoform-title": "डिटेल जानकारी",
+       "upload-dialog-label-infoform-name": "नाँव",
+       "upload-dialog-label-infoform-description": "विवरण",
+       "upload-dialog-label-usage-title": "इस्तेमाल",
+       "upload-dialog-label-usage-filename": "फाइल नाँव",
+       "backend-fail-stream": "फाइल \"$1\" स्ट्रीम ना हो पावल।",
+       "backend-fail-backup": "फाइल \"$1\" के बैकअप ना हो पावल।",
+       "backend-fail-notexists": "फाइल $1 मौजूद नइखे।",
+       "backend-fail-hashes": "तुलना करे खातिर फाइल हैशेस ना मिल पावल।",
+       "backend-fail-notsame": "एगो नॉन-आइडेंटिकल (बिना-समानता) के फाइल पहिलहीं से \"$1\" पर मौजूद बा।",
+       "backend-fail-invalidpath": "\"$1\" एगो वैध भंडार पाथ नइखे।",
+       "backend-fail-delete": "फाइल \"$1\" के हटावल ना जा सकल।",
+       "backend-fail-describe": "फाइल \"$1\" खातिर मेटाडेटा ना बदलल जा सकल।",
        "backend-fail-alreadyexists": "फाइल $1 पहिले से मौजूद बाटे",
        "backend-fail-store": "फाइल $1 के $2 पर सहेजल ना जा सकल।",
        "backend-fail-copy": "फाइल $1 के $2 पर कॉपी ना कइल जा सकल।",
        "backend-fail-opentemp": "टेम्परेरी फाइल के ना खोलल जा सकल।",
        "backend-fail-writetemp": "टेम्परेरी फाइल में ना राइट कइल जा सकल।",
        "backend-fail-closetemp": "टेम्परेरी फाइल के बंद ना कइल जा सकल।",
+       "backend-fail-read": "\"$1\" के पढ़ल ना जा सकल।",
+       "backend-fail-create": "फाइल \"$1\" लिखल (राइट) ना जा सकल।",
        "license": "लाइसेंस जानकारी:",
        "license-header": "लाइसेंसिंग",
        "nolicense": "कौनों नइखे",
        "listfiles_thumb": "चिप्पी",
        "listfiles_date": "तिथि",
        "listfiles_name": "नाँव",
+       "listfiles_user": "सदस्य",
+       "listfiles_description": "विवरण",
+       "listfiles_count": "संस्करण",
+       "listfiles-latestversion": "वर्तमान संस्करण",
        "file-anchor-link": "फाइल",
        "filehist": "पन्ना के इतिहास",
        "filehist-help": "ओ समय ई फाइल कइसन लउके ई देखे खातिर कौनों तारीख/समय पर क्लिक करीं।",
        "randompage": "बेतरतीब पन्ना",
        "randomincategory": "श्रेणी में अनियमित पन्ना",
        "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कउनो पन्ना नइखे।",
+       "randomincategory-category": "श्रेणी:",
        "randomincategory-legend": "श्रेणी में अनियमित पन्ना",
-       "statistics": "तथ्यांकसभ",
-       "statistics-header-edits": "तथ्यांक सम्पादन",
-       "statistics-header-hooks": "अन्य तथ्यांक",
+       "randomincategory-submit": "जाईं",
+       "statistics": "सांख्यिकी",
+       "statistics-header-pages": "पन्ना सांख्यिकी",
+       "statistics-header-edits": "संपादन सांख्यिकी",
+       "statistics-header-users": "सदस्य सांख्यिकी",
+       "statistics-header-hooks": "अन्य सांख्यिकी",
+       "statistics-articles": "सामग्री पन्ना",
+       "statistics-pages": "पन्ना सभ",
+       "statistics-pages-desc": "विकि पर सगरी पन्ना, वार्ता पन्ना, अनुप्रेषण इत्यादि समेत।",
+       "statistics-files": "अपलोड कइल फाइल सभ",
+       "statistics-edits": "{{SITENAME}} सेट अप की बाद पन्ना संपादन संख्या",
+       "statistics-edits-average": "प्रति पन्ना औसत संपादन",
+       "statistics-users": "रजिस्टर्ड [[Special:ListUsers|सदस्य]]",
+       "statistics-users-active": "सक्रिय सदस्य",
+       "statistics-users-active-desc": "सदस्य लोग जे पछिला {{PLURAL:$1|दिन|$1 दिन}} में कौनों काम कइले बाटे",
        "pageswithprop": "पन्ना-गुण वाला पन्नासभ",
+       "pageswithprop-legend": "पन्ना प्रापर्टी वाला पन्ना सभ",
+       "pageswithprop-prop": "प्रापर्टी नाँव:",
+       "pageswithprop-submit": "जाईं",
        "doubleredirects": "दोहरा पुननिर्देशित पन्ना",
        "brokenredirects": "टूटल पुनर्निर्देशन पन्ना",
+       "brokenredirects-edit": "संपादन",
+       "brokenredirects-delete": "मिटाईं",
        "withoutinterwiki": "बिना अंतरविकि जोड़ वाला पन्ना",
+       "withoutinterwiki-summary": "ई पन्ना सभ कौनों दुसरा भाषा की वर्जन से नइखे जुड़ल।",
+       "withoutinterwiki-legend": "उपसर्ग",
+       "withoutinterwiki-submit": "देखाईं",
        "fewestrevisions": "सबसे कम संशोधन वाला पन्ना",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइट्स}}",
        "ncategories": "{{PLURAL:$1|श्रेणी|श्रेणीसभ}}",
+       "ninterwikis": "$1 {{PLURAL:$1|इंटरविकि|इंटरविकि सभ}}",
+       "nlinks": "$1 {{PLURAL:$1|कड़ी|कड़ी सभ}}",
+       "nmembers": "$1 {{PLURAL:$1|मेंबर|मेंबर सभ}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|मेंबर|मेंबर सभ}}",
+       "nrevisions": "$1 {{PLURAL:$1|रिवीजन|रिवीजन सभ}}",
+       "nimagelinks": "Used on $1 {{PLURAL:$1|पन्ना|पन्ना सभ}}",
+       "ntransclusions": "used on $1 {{PLURAL:$1|पन्ना|पन्ना सभ}}",
+       "specialpage-empty": "एह रिपोर्ट खातिर कौनों रिजल्ट नइखे",
        "lonelypages": "अनाथ पन्ना",
        "lonelypagestext": "ई पन्ना कुल कौनों दूसर पन्ना से नइखें जुड़ल न कौनों में ट्रांसक्लूड बाड़ें",
        "uncategorizedpages": "बिना श्रेणी के पन्ना",
        "wantedcategories": "श्रेणी चाहत बा",
        "wantedpages": "पन्ना चाहत बा",
        "wantedfiles": "जरुरत के फाईलसभ",
+       "wantedfiletext-nocat-noforeign": "ई फाइल सभ इस्तेमाल में बाटे बाकी मौजूद नइखे।",
        "wantedtemplates": "जरुरत के खाँचा",
+       "mostlinked": "सबसे ढेर पन्ना-जोड़ वाला",
        "mostlinkedcategories": "सबसे अधिक से जुड़ल श्रेणीसभ",
+       "mostlinkedtemplates": "सभसे ढेर ट्रांसक्लूजन वाला पन्ना",
        "mostcategories": "सबसे अधिक श्रेणी वाला पन्नाकुल",
+       "mostimages": "सभसे ढेर फाइल-जोड़ वाला",
+       "mostinterwikis": "सभसे ढेर इंटरविकि वाला पन्ना",
+       "mostrevisions": "सभसे ढेर रिवीजन वाला पन्ना सभ",
        "prefixindex": "उपसर्ग अनुसार पन्ना",
        "shortpages": "छोट पन्नासभ",
        "longpages": "लमहर पन्ना",
        "deadendpages": "मरल-खपल पन्ना",
        "protectedpages": "सुरक्षित पन्ना",
+       "protectedpages-noredirect": "अनुप्रेषण छिपाईं",
+       "protectedpagesempty": "कौनों पन्ना के सुरक्षा ए पैमान पर नइखे",
+       "protectedpages-timestamp": "टाइममोहर",
+       "protectedpages-page": "पन्ना",
+       "protectedpages-expiry": "एक्सपायर हो जाई",
+       "protectedpages-performer": "सदस्य सुरक्षा",
+       "protectedpages-params": "सुरक्षा पैमाना",
+       "protectedpages-reason": "कारण",
+       "protectedpages-unknown-timestamp": "नामालूम",
+       "protectedpages-unknown-performer": "नामालूम सदस्य",
        "protectedtitles": "सुरक्षित शीर्षक",
+       "protectedtitlesempty": "कौनों टाइटिल के सुरक्षा एह पैमान पर नइखे।",
        "listusers": "सदस्यसूची",
+       "listusers-editsonly": "उहे सदस्य देखाईं जे संपादन कइले होखे",
+       "listusers-creationsort": "बनवले की तारीख की हिसाब से सरियाईं",
+       "listusers-desc": "घटत क्रम से सरियाईं",
+       "usereditcount": "$1 {{PLURAL:$1|संपादन|संपादन सभ}}",
        "newpages": "नया पन्ना",
+       "newpages-username": "सदस्यनाँव:",
        "ancientpages": "सभन से पुरान पन्नासभ",
        "move": "स्थान्तरण",
        "movethispage": "ई पन्ना के स्थांतरण करीं",
+       "suppress": "ओवरसाइटर",
+       "apihelp": "एपीआइ (API) मदद",
        "apihelp-no-such-module": "मॉड्युल $1 ना मिलल।",
        "booksources": "किताबी स्रोत",
        "booksources-search-legend": "किताबी स्रोत के खोज",
        "booksources-search": "खोज",
        "log": "सगरी लॉग",
+       "allpages": "सगरी पन्ना",
+       "nextpage": "अगिला पन्ना ($1)",
+       "prevpage": "पछिला पन्ना ($1)",
+       "allpagesfrom": "पन्ना देखाई जे शुरू होत बा:",
+       "allpagesto": "पन्ना देखाईं जे खतम होत बा:",
        "allarticles": "सगरी पन्ना",
+       "allinnamespace": "सगरी पन्ना ($1 namespace)",
        "allpagessubmit": "जाईं",
        "allpagesprefix": "उपसर्ग के साथे पन्ना प्रदर्शन:",
+       "allpages-bad-ns": "{{SITENAME}} पर \"$1\" नामस्थान नइखे।",
+       "allpages-hide-redirects": "अनुप्रेषण छिपाईं",
+       "cachedspecial-viewing-cached-ttl": "आप कैश कइल वर्जन देखत बानी जेवन $1 ले पुरान हो सकत बा।",
+       "cachedspecial-refresh-now": "सभसे नया देखाईं।",
        "categories": "श्रेणीसभ",
        "activeusers": "सक्रिय सदस्यन के सूची",
        "listgrouprights": "सदस्य समूह अधिकारसभ",
        "trackingcategories": "नजर रखे वाला श्रेणीसभ",
+       "trackingcategories-msg": "निगरानी श्रेणी",
+       "trackingcategories-name": "संदेस नाँव",
        "emailuser": "ई प्रयोगकर्ता के ईमेल करीं",
        "watchlist": "ध्यानसूची",
        "mywatchlist": "धियानसूची",
        "rollbacklinkcount": "रोलबैक $1 {{PLURAL:$1|संपादन|संपादन सब}}",
        "protectlogpage": "सुरक्षा लॉग",
        "protectlogtext": "नीचे पन्ना सुरक्षा में भइल बदलावकुल के सूची बा।\nहाल में सुरक्षित पन्नन के सूची खातिर [[Special:ProtectedPages|सुरक्षित पन्नन के सूची]] देखीं।",
+       "restriction-move": "स्थानांतरण",
+       "restriction-create": "बनावे पर",
+       "restriction-upload": "अपलोड",
+       "restriction-level-sysop": "पुरा सुरक्षित",
+       "restriction-level-autoconfirmed": "आधा सुरक्षित",
+       "restriction-level-all": "कौनों लेवल",
+       "undelete": "हटावल पन्ना देखीं",
+       "undeletepage": "हटावल पन्ना देखीं आ वापिस ले आईं",
        "undeletelink": "देखीं/बहाल करीं",
        "namespace": "नामस्थान:",
        "invert": "चुनाव पलटीं",
        "export": "पन्ना निर्यात करीं",
        "thumbnail-more": "बढ़ाईं",
        "filemissing": "फाईल गायब",
+       "import": "पन्ना आयात करीं",
+       "importinterwiki": "दुसरा विकि से आयात करीं",
+       "import-interwiki-text": "आयात करे खातिर एगो विकि आ पन्ना टाइटिल चुनल जाय।\nअवतरण के तारीख आ सम्पादक लोगन के नांव सुरक्षित रखल जाई।\nदुसरा विकि कुल से सगरी आयात कुल के लॉग [[Special:Log/import|आयात लॉग]] पर मौजूद बा।",
+       "import-interwiki-sourcewiki": "विकि, जहाँ से आयात होखी:",
+       "import-interwiki-sourcepage": "पन्ना जौन आयत होखी:",
+       "import-interwiki-history": "सगरी इतिहास के सब अवतरण कॉपी करीं",
+       "import-interwiki-templates": "सगरी टेम्पलेट कुल भी शामिल करीं",
+       "import-interwiki-submit": "आयात",
+       "import-mapping-default": "डिफाल्ट स्थान पर आयात करीं",
+       "import-mapping-namespace": "एगो नाँवस्थान पर आयात करीं:",
+       "import-mapping-subpage": "ए पन्ना की उप-पन्ना की रूप में आयात करीं:",
+       "import-upload-filename": "फाइलनाँव:",
+       "import-comment": "टिप्पणी:",
+       "importstart": "पन्ना आयात कइल जाता...",
+       "import-revision-count": "$1 {{PLURAL:$1|रिवीजन|रिवीजन कुल}}",
+       "importnopages": "आयत करे खातिर कौनों पन्ना नइखे।",
        "imported-log-entries": "लावल गइल $1 {{PLURAL:$1|लॉग प्रविष्टि|लॉग प्रविष्टिसभ}}",
+       "importfailed": "आयात फेल हो गइल: <nowiki>$1</nowiki>",
+       "importunknownsource": "नामालूम आयात स्रोत प्रकार",
+       "importcantopen": "आयात फाइल के खोले में असमर्थ",
+       "importbadinterwiki": "खराब इंटरविकि कड़ी",
+       "importsuccess": "आयात पूरा भइल!",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनसभ}} लावल गइल",
        "tooltip-pt-userpage": "हमार सदस्य पन्ना",
        "tooltip-pt-mytalk": "हमार बातचीत पन्ना",
index fd06461..863182a 100644 (file)
        "resetpass-wrong-oldpass": "Katasunduk samantara atawa wayah ni kada sah.\nPian pinanya sudah barhasil maubah katasunduk Pian atawa maminta sabuting katasunduk samantara hanyar.",
        "resetpass-temp-password": "Katasunduk samantara:",
        "passwordreset": "Bulikakan setelan katasunduk",
-       "passwordreset-legend": "Bulikakan setelan katasunduk",
        "passwordreset-disabled": "Mambulikakan setelan katasunduk dipajahakan hagan wiki ngini.",
        "passwordreset-username": "Ngaran pamakai:",
        "passwordreset-domain": "Dumain:",
        "nlinks": "$1 {{PLURAL:$1|tautan|tautan}}",
        "nmembers": "$1 {{PLURAL:$1|angguta|angguta}}",
        "nrevisions": "$1 {{PLURAL:$1|ralatan|raralatan}}",
-       "nviews": "dilihat $1 {{PLURAL:$1|kali|kali}}",
        "nimagelinks": "Diguna'akan pada $1 {{PLURAL:$1|tungkaran|tutungkaran}}",
        "ntransclusions": "dipuruk pada $1 {{PLURAL:$1|tungkaran|tutungkaran}}",
        "specialpage-empty": "Kadada kulihan gasan lapuran ngini.",
        "linksearch-pat": "Gagai bapola:",
        "linksearch-ns": "Ruang-ngaran:",
        "linksearch-ok": "Gagai",
-       "linksearch-text": "Kartu liar nangkaya \"*.wikipedia.org\" hingkat diguna'akan.\nMamarlukan sadikitnya asa ranah tingkat atas, misalnya \"*.org\".<br />\nProtokol nang didukung: <code>$1</code> (jangan tambahakan dalam panggagaian Pian)",
+       "linksearch-text": "Kartu liar nangkaya \"*.wikipedia.org\" hingkat diguna'akan.\nMamarlukan sadikitnya asa ranah tingkat atas, misalnya \"*.org\".<br />\nProtokol nang didukung: $1 (jangan tambahakan dalam panggagaian Pian)",
        "linksearch-line": "$1 ditautakan matan $2",
        "linksearch-error": "Kartu-liar mancungul pintang awalan matan ngaranhost.",
        "listusersfrom": "Manampaiakan papamuruk mulai matan:",
index 242bfa7..e04beca 100644 (file)
        "actionthrottled": "কাজের গতি ধীরকরণ",
        "actionthrottledtext": "স্প্যাম-রোধী সমাধান হিসেবে এই কাজটি খুব কম সময়ে অনেক বেশিবার সম্পাদনা করার সীমা বেঁধে দেওয়া হয়েছে। আপনি সেই সীমা অতিক্রম করেছেন। অনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।",
        "protectedpagetext": "সম্পাদনা অথবা স্থানান্তর এড়াতে এ পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে।",
-       "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:",
-       "viewyourtext": "আপনি এই পাতায় <strong>আপনার সম্পাদনা</strong>দেখতে এবং অনুলিপি করতে পারেন:",
+       "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন",
+       "viewyourtext": "আপনি এই পাতায় <strong>আপনার সম্পাদনা</strong>দেখতে এবং অনুলিপি করতে পারেন",
        "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
        "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
        "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [//translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
-       "cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) \"প্রপাতাকার\" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:\n$2",
+       "cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত কারণ এটি নিম্নোক্ত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত, যা \"প্রপাতাকার\" বৈশিষ্ট্য সহযোগে সুরক্ষিত করা আছে:\n$2",
        "namespaceprotected": "'''$1''' নামস্থানে কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
        "customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "customjsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "myprivateinfoprotected": "আপনার ব্যক্তিগত তথ্য সম্পাদনা করতে আপনার অনুমতি নেই",
        "mypreferencesprotected": "আপনার পছন্দসমূহ সম্পাদনা করতে আপনার অনুমতি নেই",
        "ns-specialprotected": "{{ns:special}} নামস্থানে পাতাসমূহ সম্পাদনা করা যাবে না।",
-       "titleprotected": "[[User:$1|$1]]-কে এই শিরোনামের পাতা সৃষ্টি করতে বাধা দেয়া হচ্ছে। কারণ: ''$2''।",
+       "titleprotected": "[[User:$1|$1]] কর্তৃক এই শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত করা হয়েছে। কারণ: \"<em>$2</em>\"।",
        "filereadonlyerror": "\"$1\" ফাইলটিকে পরিবর্তন করা সম্ভব হচ্ছে না কারন \"$2\" ফাইল রিপোসিটোরি রিড-অনলি-মোডে আছে।\n\nএকজন প্রশাসক যিনি এটাকে লকড করেছেন তার যৌক্তিকতা দেওয়া হল: \"$3\"",
        "invalidtitle-knownnamespace": "অবৈধ শিরোনাম, যেখানে নামস্থান \"$2\" এবং লেখা হয়েছে \"$3\"",
        "invalidtitle-unknownnamespace": "অবৈধ শিরোনাম, যেখানে ব্যবহৃত হয়েছে অপরিচিত নামস্থান সংখ্যা $1 এবং লেখা হয়েছে \"$2\"",
        "createacct-benefit-body2": "{{PLURAL:$1|টি পাতা}}",
        "createacct-benefit-body3": "জন সাম্প্রতিক {{PLURAL:$1|অবদানকারী}}",
        "badretype": "আপনার প্রবেশ করানো পাসওয়ার্ডটি মিলছে না।",
+       "usernameinprogress": "এই ব্যবহারকারী নামের জন্য একটি অ্যাকাউন্ট তৈরি আগে থেকেই চলছে। দয়া করে অপেক্ষা করুন।",
        "userexists": "এই ব্যবহারকারী নামটি ইতমধ্যে ব্যবহার করা হয়েছে।\nঅনুগ্রহ করে অন্য নাম বেছে নিন।",
        "loginerror": "প্রবেশ করতে সমস্যা হয়েছে",
        "createacct-error": "অ্যাকাউন্ট তৈরি ত্রুটি",
        "readonlywarning": "'''সতর্কীকরণ: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।'''\nআপনি চাইলে লেখাটি কাট এবং পেষ্ট করে ভবিষ্যতের জন্য কোন টেক্সট ফাইলে সংরক্ষণ করতে পারেন।\n\nযে প্রশাসক এই ডাটাবেজটি অবরুদ্ধ করেছেন তিনি যা ব্যাখ্যা দিয়েছেন: $1",
        "protectedpagewarning": "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "semiprotectedpagewarning": "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি সম্পাদনা করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
-       "cascadeprotectedwarning": "'''সতর্কীকরণ:''' এই পাতাটি বন্ধ করা হয়েছে, যাতে কেবল প্রশাসকের ক্ষমতাবিশিষ্ট ব্যবহারকারীরা এটি সম্পাদনা করতে পারেন, কারণ এই পাতাটি নিচের প্রপাতাকারে সুরক্ষিত (cascade-protected) {{PLURAL:$1|টি পাতায়|টি পাতায়}} অন্তর্ভুক্ত আছে:",
+       "cascadeprotectedwarning": "<strong>সতর্কীকরণ:</strong> এই পাতাটি সুরক্ষিত, ফলে এটি শুধুমাত্র প্রশাসক অধিকারপ্রাপ্ত ব্যবহারকারীগণ সম্পাদনা করতে পারেন, কারণ এটি নিচের প্রপাতাকার-সুরক্ষিত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত আছে:",
        "titleprotectedwarning": "'''সতর্কীকরণ: এই পাতাটির ব্যবহার সীমিত করা হয়েছে, যাতে কেবলমাত্র [[Special:ListGroupRights|এই নির্দিষ্ট অনুমতিপ্রাপ্ত]] ব্যবহারকারী এটি তৈরি করতে পারেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "templatesused": "এই পাতায় ব্যবহৃত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}}:",
        "templatesusedpreview": "এই প্রাকদর্শনে ব্যবহৃত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}}:",
        "template-protected": "(সুরক্ষিত)",
        "template-semiprotected": "(অর্ধ-সুরক্ষিত)",
        "hiddencategories": "এই পাতাটি {{PLURAL:$1|১টি লুকায়িত বিষয়শ্রেণীর|$1টি লুকায়িত বিষয়শ্রেণীর}} সদস্য:",
+       "edittools": "<!-- সম্পাদনা এবং আপলোড ফরমের নীচে এখানের লেখা দেখানো হবে। -->",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।\nআপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।",
        "nocreate-loggedin": "নতুন পাতা তৈরিতে আপনাকে অনুমোতি দেওয়া হয়নি।",
        "search-category": "(বিষয়শ্রেণী $1)",
        "search-file-match": "(নথির বিষয়বস্তু মিলে যায়)",
        "search-suggest": "আপনি সম্ভবত বুঝাতে চাইছেন: $1",
+       "search-rewritten": "$1-এর জন্য ফলাফল দেখানো হচ্ছে। এর পরিবর্তে $2-এর জন্য অনুসন্ধান করুন।",
        "search-interwiki-caption": "সহপ্রকল্পসমূহ",
        "search-interwiki-default": "$1 থেকে ফলাফলসমূহ:",
        "search-interwiki-more": "(আরও)",
        "mypreferences": "পছন্দসমূহ",
        "prefs-edits": "সম্পাদনা সংখ্যা:",
        "prefsnologintext2": "আপনার পছন্দসমূহ পরিবর্তন করতে প্রবেশ করুন।",
-       "prefs-skin": "আবরণ (Skin)",
+       "prefs-skin": "আবরণ",
        "skin-preview": "প্রাকদর্শন",
        "datedefault": "কোন পছন্দ নেই",
        "prefs-labs": "পরীক্ষাগার বৈশিষ্টসমূহ",
        "newpageletter": "ন",
        "boteditletter": "ব",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|জন ব্যবহারকারী|জন ব্যবহারকারী}} এই পাতার উপর নজর রাখছেন]",
-       "rc_categories": "à¦\8fà¦\87 à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80à¦\97à§\81লিতà§\87 à¦¸à§\80মাবদà§\8dধ à¦\95রা à¦¹à§\8bà¦\95 (\"|\" à¦¦à¦¿à¦¯à¦¼à§\87 à¦\86লাদা à¦\95রà§\87 à¦²à¦¿à¦\96à§\81ন)",
-       "rc_categories_any": "যà§\87à¦\95à§\8bনà§\8b",
+       "rc_categories": "বিষয়শà§\8dরà§\87ণà§\80à¦\97à§\81লিতà§\87 à¦¸à§\80মা (\"|\" à¦¦à¦¿à¦¯à¦¼à§\87 à¦\86লাদা à¦\95রà§\81ন):",
+       "rc_categories_any": "à¦\9aয়নà§\87র à¦\9cনà§\8dয à¦¯à§\87à¦\95à§\8bনà§\8b à¦\95িà¦\9bà§\81",
        "rc-change-size-new": "পরিবর্তনের পর $1 {{PLURAL:$1|বাইট}}",
        "newsectionsummary": "/* $1 */ নতুন অনুচ্ছেদ",
        "rc-enhanced-expand": "বিস্তারিত দেখাও",
        "uploaddisabledtext": "ফাইল আপলোড নিষ্ক্রিয়।",
        "php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
        "uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
+       "uploaded-script-svg": "আপলোডকৃত SVG ফাইলে স্ক্রিপ্টযোগ্য উপাদান \"$1\" পাওয়া গেছে।",
        "uploaded-hostile-svg": "আপলোড করা SVG ফাইলের শৈলী উপাদানে অনিরাপদ সিএসএস পাওয়া গেছে।",
        "uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"$1\" রয়েছে",
        "uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
        "upload-too-many-redirects": "এই ইউআরএলটিতে অনেক বেশি পুনর্নির্দেশনা রয়েছে",
        "upload-http-error": "একটি এইচটিটিপি ত্রুটি দেখা দিয়েছে: $1",
        "upload-copy-upload-invalid-domain": "এই ডোমেইন থেকে আপলোড সম্ভব নয়।",
+       "upload-dialog-title": "ফাইল আপলোড করুন",
+       "upload-dialog-error": "একটি ত্রুটি দেখা দিয়েছে",
+       "upload-dialog-warning": "একটি সতর্কবার্তা দেখা দিয়েছে",
+       "upload-dialog-button-cancel": "বাতিল",
+       "upload-dialog-button-done": "সম্পন্ন",
+       "upload-dialog-button-save": "সংরক্ষণ",
+       "upload-dialog-button-upload": "আপলোড",
+       "upload-dialog-label-select-file": "ফাইল নির্বাচন করুন",
+       "upload-dialog-label-infoform-title": "বিস্তারিত",
+       "upload-dialog-label-infoform-name": "নাম",
+       "upload-dialog-label-infoform-description": "বিবরণ",
+       "upload-dialog-label-usage-title": "ব্যবহার",
+       "upload-dialog-label-usage-filename": "ফাইলের নাম",
        "backend-fail-stream": "\"$1\" ফাইলের স্ট্রিম দেখানো যাচ্ছে না।",
        "backend-fail-backup": "\"$1\" ফাইলের ব্যাকআপ তৈরী সম্ভব নয়।",
        "backend-fail-notexists": "\"$1\" নামের কোনো ফাইল নেই।",
        "linksearch-pat": "অনুসন্ধান প্যাটার্ন:",
        "linksearch-ns": "নামস্থান:",
        "linksearch-ok": "অনুসন্ধান",
-       "linksearch-text": "\"*.wikipedia.org\" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।\nনূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন \"*.org\".<br />\nযে সকল {{PLURAL:$2|প্রোটোকল|প্রোটোকলসমূহ}} সমর্থন করে: <code>$1</code> (প্রোটকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।",
+       "linksearch-text": "\"*.wikipedia.org\" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।\nনূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন \"*.org\"।<br />\nযে সকল {{PLURAL:$2|প্রোটোকল|প্রোটোকলসমূহ}} সমর্থন করে: $1 (প্রোটোকল উল্লেখ করা না হলে http:// ডিফল্ট হিসাবে ব্যবহৃত হবে)।",
        "linksearch-line": "$2 থেকে $1 এ লিংক করা হয়েছে",
        "linksearch-error": "হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।",
        "listusersfrom": "সেই সব ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:",
        "emailuser": "ইমেইল করো",
        "emailuser-title-target": "{{GENDER:$1|ব্যবহারকারীকে}} ইমেইল পাঠান",
        "emailuser-title-notarget": "ব্যবহারকারীকে ই-মেইল করুন",
-       "emailpage": "ব্যবহারকারীকে ই-মেইল করুন",
        "emailpagetext": "আপনি নিচের ফর্মটি ব্যবহার করে এই {{GENDER:$1|ব্যবহারকারীকে}} একটি ই-মেইল পাঠাতে পারেন।\nআপনি [[Special:Preferences|আপনার ব্যবহারকারী পছন্দে]] যে ই-মেইল ঠিকানাটি প্রবেশ করিয়েছেন সেটিকে ই-মেইলের ''প্রেরক'' হিসেবে দেখানো হবে, যেনো মেইলের প্রাপক আপনাকে উত্তর দিতে পারেন।",
        "defemailsubject": "{{SITENAME}} ব্যবহারকারী \"$1\" প্রেরিত ইমেইল",
        "usermaildisabled": "ব্যবহারকারী ই-মেইল নিস্ক্রিয়",
        "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2",
        "emailsent": "ই-মেইল প্রেরণ করা হয়েছে",
        "emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।",
-       "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailpage}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
+       "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailuser}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে $2-এর নিকট পাঠানো হয়েছে।",
        "usermessage-summary": "বাদবাকি সিস্টেম বার্তা",
        "usermessage-editor": "সিস্টেম ম্যাসেঞ্জার",
        "watchlist": "নজর তালিকা",
        "watchlistanontext": "আপনার নজরতালিকার আইটেমগুলি দেখতে বা সম্পাদনা করতে অনুগ্রহ করে প্রবেশ করুন।",
        "watchnologin": "আপনি এখনও লগ-ইন করেননি।",
        "addwatch": "নজরতালিকায় যোগ করো",
-       "addedwatchtext": "\"[[:$1]]\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনার [[Special:Watchlist|নà¦\9cরতালিà¦\95াতà§\87]] à¦¯à§\8bà¦\97 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nভবিষà§\8dযতà§\87 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾ à¦\93 à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¸à¦¾à¦¥à§\87 à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦¸à¦\82à¦\98à¦\9fিত à¦¯à¦¾à¦¬à¦¤à§\80য় à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\8fà¦\96ানà§\87 à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦¹à¦¬ে।",
+       "addedwatchtext": "\"[[:$1]]\" à¦\93 à¦\8fর à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনার [[Special:Watchlist|নà¦\9cরতালিà¦\95াতà§\87]] à¦¯à§\8bà¦\97 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bে।",
        "addedwatchtext-short": "\"$1\" পাতাটি আপনার নজরতালিকায় যোগ করা হয়েছে।",
        "removewatch": "নজরতালিকা থেকে অপসারণ",
-       "removedwatchtext": "\"[[:$1]]\" à¦ªà¦¾à¦¤à¦¾à¦\9fি [[Special:Watchlist|নà¦\9cর à¦¤à¦¾à¦²à¦¿à¦\95া]] à¦¥à§\87à¦\95à§\87 à¦\85পসারিত হয়েছে।",
+       "removedwatchtext": "\"[[:$1]]\" à¦\93 à¦\8fর à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনার [[Special:Watchlist|নà¦\9cরতালিà¦\95া]] à¦¥à§\87à¦\95à§\87 à¦¸à¦°à¦¾à¦¨à§\8b হয়েছে।",
        "removedwatchtext-short": "\"$1\" পাতাটি আপনার নজরতালিকা থেকে সরিয়ে নেয়া হয়েছে।",
        "watch": "নজর রাখুন",
        "watchthispage": "নজরে রাখুন",
        "rollback-success": "$1-এর সম্পাদনাগুলি পূর্বাবস্থায় ফিরিয়ে নেওয়া হয়েছে; $2-এর করা শেষ সংস্করণে পাতাটি ফেরত নেওয়া হয়েছে।",
        "sessionfailure-title": "সেশন পরিত্যক্ত",
        "sessionfailure": "আপনার লগ ইন সেশনে একটি সমস্যা হয়েছে বলে মনে হচ্ছে;\nসেশন হাইজ্যাক প্রতিরোধের উপায় হিসেবে এই কাজটি বাতিল করা হয়েছে।\nঅনুগ্রহ ব্রাউজারের \"back\" বোতাম চাপুন এবং যে পাতা থেকে এসেছিলেন, তা রিলোড করুন এবং আবার চেষ্টা করুন।",
+       "changecontentmodel-title-label": "পাতার শিরোনাম",
+       "changecontentmodel-model-label": "পাতার বিষয়বস্তুর প্রতিরূপ",
+       "changecontentmodel-reason-label": "কারণ:",
+       "changecontentmodel-success-title": "বিষয়বস্তুর প্রতিরূপ পরিবর্তিত হয়েছিলো",
+       "changecontentmodel-success-text": "[[:$1]]-এর বিষয়বস্তুর ধরণ পরিবর্তন হয়েছে।",
        "logentry-contentmodel-change": "$1 $3 পাতার বিষয়বস্তুর মডেল \"$4\" থেকে \"$5\"-এ {{GENDER:$2|পরিবর্তন করেছেন}}",
+       "logentry-contentmodel-change-revertlink": "প্রত্যাবর্তন",
+       "logentry-contentmodel-change-revert": "প্রত্যাবর্তন",
        "protectlogpage": "সুরক্ষা লগ",
        "protectlogtext": "নিচে সুরক্ষিত পাতার  একটি তালিকা দেয়া হল। \nবর্তমানে সক্রিয় পাতার সুরক্ষাগুলির তালিকা দেখতে [[Special:ProtectedPages|সুরক্ষিত পাতার তালিকা]] দেখুন।",
        "protectedarticle": "সুরক্ষিত \"[[$1]]\"",
        "undeletepagetext": "নিচের {{PLURAL:$1|পাতা মুছে ফেলা হয়েছে কিন্তু|$1 পাতাগুলি মুছে ফেলা হয়েছে কিন্তু}} এগুলি এখনও আর্কাইভে আছে ও পুনরুদ্ধার করা সম্ভব। আর্কাইভ পর্যায়ক্রমিকভাবে পরিস্কার করা হতে পারে।",
        "undelete-fieldset-title": "সংশোধন পুনরুদ্ধার",
        "undeleteextrahelp": "সম্পূর্ণ পাতাটি পুনরুদ্ধার করার জন্য সবগুলি টিকবাক্স অনির্বাচিত করুন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।\nনির্বাচিত পুনরুদ্ধারের জন্য যেসব সংশোধন পুনরুদ্ধার করতে চান, তার পাশের বাক্সে টিক দিন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।",
-       "undeleterevisions": "$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}} আর্কাইভে আছে",
+       "undeleterevisions": "$1{{PLURAL:$1|টি সংশোধন}} অপসারিত",
        "undeletehistory": "আপনি যদি পাতাটি পুনরুদ্ধার করেন, তবে সবগুলি সংশোধন ইতিহাসে ফিরিয়ে আনা হবে।\nযদি মুছে ফেলার পর একই নামে আরেকটি পাতা সৃষ্টি করা হয়ে থাকে, তবে পুনরুদ্ধারকৃত সংশোধনগুলি পূর্বের ইতিহাসে স্থান পাবে।",
        "undeleterevdel": "শীর্ষে অবস্থিত সংশোধনটি যদি আংশিক মুছে যায়, তবে মুছে ফেলা বাতিল করা যাবে না।\nএ ধরনের ক্ষেত্রে আপনাকে অবশ্যই নতুনতম মুছে ফেলা সংশোধনগুলি অনির্বাচিত করতে হবে।",
        "undeletehistorynoadmin": "এই পাতাটি মুছে ফেলা হয়েছে। মুছে ফেলার কারণ নিচের সারাংশে দেখানো হল। সেই সাথে মুছে ফেলার আগে যেসমস্ত ব্যবহারকারী পাতাটি সম্পাদনা করেছেন, তাদের সম্পর্কেও বিস্তারিত দেখানো হল। এই মুছে ফেলা সংশোধনগুলির বিষয়বস্তু  কেবল প্রশাসকদের কাছে লভ্য।",
        "namespace": "নামস্থান:",
        "invert": "বিপরীতক্রমে নির্বাচন",
        "tooltip-invert": "যে সকল নামস্থানের পাতাগুলোর পরিবর্তনসমূহর দেখতে চাচ্ছেন না সেগুলোর নামের পাশে টিক দিন",
+       "tooltip-whatlinkshere-invert": "নির্বাচিত নামস্থানের পাতা থেকে লিঙ্ক আড়াল করতে এই বাক্সে টিক দিন।",
        "namespace_association": "সংশ্লিষ্ট নামস্থান",
        "tooltip-namespace_association": "এখানে টিক দেয়ার মাধ্যমে সংশ্লিষ্ট নামস্থান এবং আলাপপাতাসমূহ অন্তর্ভুক্ত করছেন",
        "blanknamespace": "(প্রধান)",
        "whatlinkshere-next": "{{PLURAL:$1|পরবর্তী|পরবর্তী $1টি}}",
        "whatlinkshere-links": "← সংযোগগুলি",
        "whatlinkshere-hideredirs": "পুননির্দেশনা $1",
-       "whatlinkshere-hidetrans": "à¦\9fà§\8dরানà§\8dসà¦\95à§\8dলà§\81শন $1",
+       "whatlinkshere-hidetrans": "à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dতà¦\95রণ $1",
        "whatlinkshere-hidelinks": "সংযোগ $1",
        "whatlinkshere-hideimages": "$1 ফাইল সংযোগ",
        "whatlinkshere-filters": "ছাকনী",
        "tooltip-pt-logout": "প্রস্থান",
        "tooltip-pt-createaccount": "আপনাকে একটি অ্যাকাউন্ট তৈরি করে প্রবেশ করার পরামর্শ দেওয়া হচ্ছে; তবে এটা বাধ্যতামূলক নয়",
        "tooltip-ca-talk": "বিষয়বস্তু পাতা সম্পর্কে আলোচনা",
-       "tooltip-ca-edit": "à¦\86পনি à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾ à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন। à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦¸à¦\82রà¦\95à§\8dষণà§\87র à¦\86à¦\97à§\87 à¦ªà§\8dরাà¦\95দরà§\8dশন à¦\95রà§\81ন।",
+       "tooltip-ca-edit": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦®à§\8dপাদনা à¦\95রà§\81ন",
        "tooltip-ca-addsection": "নতুন অনুচ্ছেদ শুরু করুন",
        "tooltip-ca-viewsource": "এই পাতাটি সুরক্ষিত। আপনি পাতাটির উৎস দেখতে পারেন।",
        "tooltip-ca-history": "এই পাতার পুরনো সংস্করণগুলি",
        "spam_reverting": "$1-এর প্রতি কোন সংযোগ নেই, এমন সর্বশেষ সংস্করণে ফেরত নেওয়া হচ্ছে।",
        "spam_blanking": "$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন খালি করা হচ্ছে",
        "spam_deleting": "$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন অপসারণ করা হচ্ছে",
-       "simpleantispam-label": "এন্টি স্প্যাম যাচাই।\nএটা পূরণ করবেন '''না'''!",
+       "simpleantispam-label": "এন্টি-স্প্যাম যাচাই।\nএটা পূরণ করবেন <strong>না</strong>!",
        "pageinfo-title": "\"$1\" এর তথ্য",
        "pageinfo-not-current": "দুঃখিত, পুরাতন সংস্করণের জন্য এই তথ্য প্রদর্শন সম্ভব নয়।",
        "pageinfo-header-basic": "সাধারণ তথ্য",
        "pageinfo-robot-index": "অনুমোদিত",
        "pageinfo-robot-noindex": "অনুনমোদিন",
        "pageinfo-watchers": "পাতাটি প্রদর্শনের সংখ্যা",
+       "pageinfo-visiting-watchers": "পাতা পর্যবেক্ষকদের সংখ্যা যারা সাম্প্রতিক সম্পাদনাগুলি পরিদর্শন করেছেন",
        "pageinfo-few-watchers": "$1 জন {{PLURAL:$1|নজরকারীও}} কম",
+       "pageinfo-few-visiting-watchers": "সাম্প্রতিক সম্পাদনাগুলি সম্ভবত একজন নজরকারী পর্যবেক্ষক করেছেন বা করেনি",
        "pageinfo-redirects-name": "এই পাতায় পুননির্দেশনাসমূহের সংখ্যা",
        "pageinfo-subpages-name": "এই পাতার উপপাতাসমূহ",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|পুনর্নির্দেশ|পুনর্নির্দেশসমূহ}}; $3 {{PLURAL:$3|পুনর্নির্দেশ নেই|পুনর্নির্দেশ নেই}})",
        "autoredircomment": "[[$1]]-এ পুনর্নির্দেশ করা হল",
        "autosumm-new": "\"$1\" দিয়ে পাতা তৈরি",
        "autosumm-newblank": "খালি পাতা তৈরি হয়েছে",
-       "size-bytes": "$1 বাইট",
+       "size-bytes": "$1 {{PLURAL:$1|বাইট}}",
        "size-kilobytes": "$1 কিলোবাইট",
        "size-megabytes": "$1 মেগাবাইট",
        "size-gigabytes": "$1 গিগাবাইট",
+       "size-pixel": "$1 {{PLURAL:$1|পিক্সেল}}",
        "bitrate-kilobits": "$1 কেবিপিএস",
        "bitrate-megabits": "$1 এমবিপিএস",
        "bitrate-gigabits": "$1 জিবিপিএস",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])",
        "timezone-utc": "ইউটিসি",
        "duplicate-defaultsort": "' ' ' সাবধান: ' ' '  ডিফল্ট সাজানোর কীঃ \"$2\" পূর্বে ডিফল্ট সাজানোর কীঃ \"$1\" কে অগ্রাহ্য করে।",
+       "duplicate-displaytitle": "<strong>সতর্কীকরণ:</strong> প্রদর্শন শিরোনাম \"$2\" আগের প্রদর্শন শিরোনাম \"$1\" অগ্রাহ্য করবে।",
        "invalid-indicator-name": "<strong>ত্রুটি:</strong> পাতার অবস্থা নির্দেশক <code>name</code> অ্যাট্রিবিউট খালি হতে পারবে না।",
        "version": "সংস্করণ",
        "version-extensions": "ইন্সটলকৃত এক্সটেনশনসমূহ",
        "version-entrypoints": "শুরুর ইউআরএল",
        "version-entrypoints-header-entrypoint": "শুরু",
        "version-entrypoints-header-url": "ইউআরএল",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath নিবন্ধের পথ]",
        "version-libraries": "ইনস্টল লাইব্রেরি",
        "version-libraries-library": "লাইব্রেরী",
        "version-libraries-version": "সংস্করণ",
+       "version-libraries-license": "লাইসেন্স",
+       "version-libraries-description": "বিবরণ",
+       "version-libraries-authors": "লেখক",
        "redirect": "পাতা, ফাইল, ব্যবহারকরী, অথবা সংশোধন আইডি দ্বারা পুনঃনির্দেশ করা হয়েছে",
        "redirect-legend": "একটি ফাইল অথবা পাতায় পুনঃনির্দেশ করা হয়েছে",
        "redirect-summary": "এই বিশেষ পাতাটি একটি ফাইলে (ফাইলের নাম), একটি পাতায় (সংস্করণ আইডি বা পাতা আইডি), অথবা একটি ব্যবহারকরী পাতায় (সংখ্যায় লেখা ব্যবহারকারী আইডি) পুনঃনির্দেশিত হয়েছে। ব্যবহার:  [[{{#Special:Redirect}}/file/উদাহরণ.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], অথবা [[{{#Special:Redirect}}/user/101]]।",
        "tags-hitcount": "$1টি {{PLURAL:$1|পরিবর্তন}}",
        "tags-manage-no-permission": "আপনার ট্যাগ পরিবর্তন পরিচালনা করার অনুমতি নেই।",
        "tags-create-heading": "নতুন ট্যাগ তৈরি করুন",
+       "tags-create-explanation": "পূর্বনির্ধারিতরূপে, নব নির্মিত ট্যাগ ব্যবহারকারী এবং বট দ্বারা ব্যবহারের জন্য উপলব্ধ করা হবে।",
        "tags-create-tag-name": "ট্যাগের নাম:",
        "tags-create-reason": "কারণ:",
        "tags-create-submit": "তৈরি করুন",
        "tags-edit-logentry-selected": "{{PLURAL:$1|নির্বাচিত লগ ইভেন্ট}}:",
        "tags-edit-existing-tags": "বিদ্যমান ট্যাগ:",
        "tags-edit-new-tags": "নতুন ট্যাগ:",
+       "tags-edit-chosen-placeholder": "কিছু ট্যাগ নির্বাচন করুন",
+       "tags-edit-chosen-no-results": "কোন ট্যাগ মিল পাওয়া যায়নি",
        "tags-edit-reason": "কারণ:",
        "tags-edit-success": "পরিবর্তন সফলভাবে প্রয়োগ করা হয়েছে।",
        "tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1",
        "htmlform-cloner-create": "আরও যোগ করুন",
        "htmlform-cloner-delete": "অপসারণ",
        "htmlform-cloner-required": "অন্তত একটি মূল্য আবশ্যক।",
+       "htmlform-title-badnamespace": "[[:$1]] \"{{ns:$2}}\" নামস্থানে খুঁজে পাওয়া যায়নি।",
+       "htmlform-title-not-creatable": "\"$1\" সৃষ্টিযোগ্য পাতার শিরোনাম নয়",
+       "htmlform-title-not-exists": "[[:$1]]-এর অস্তিত্ব নেই।",
+       "htmlform-user-not-exists": "<strong>$1</strong>-এর অস্তিত্ব নেই।",
+       "htmlform-user-not-valid": "<strong>$1</strong> একটি বৈধ ব্যবহারকারীর নাম নয়।",
        "sqlite-has-fts": "$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন",
        "sqlite-no-fts": "$1 বাদে পূর্ণ টেক্সট সার্চ সমর্থন",
        "logentry-delete-delete": "$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে",
        "revdelete-unrestricted": "এই সীমাবদ্ধতা প্রশাসকের ক্ষেত্রে তুলে নাও",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}}-এর উপর থেকে বাধা তুলে {{GENDER:$2|নিয়েছেন}}",
+       "logentry-block-reblock": "$1 {{GENDER:$4|$3}}-এর জন্য বাধাদান সেটিং $5 সময়ের জন্য {{GENDER:$2|পরিবর্তন}} করেছেন $6",
+       "logentry-suppress-block": "$1 {{GENDER:$4|$3}} কে $5 মেয়াদের জন্য {{GENDER:$2|বাধাদান}} করেছেন $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$4|$3}}-এর জন্য বাধাদান সেটিং $5 সময়ের জন্য {{GENDER:$2|পরিবর্তন}} করেছেন $6",
        "logentry-import-upload": "$1 ফাইল আপলোড দ্বারা $3 {{GENDER:$2|আমদানি করেছেন}}",
        "logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
+       "logentry-merge-merge": "$1 $4-এ $3 {{GENDER:$2|একত্রীকরণ করেছেন}} ($5 তারিখের সংশোধন পর্যন্ত)",
        "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-newusers-create2": "$1 ব্যবহারকারী $3 নামের অ্যাকাউন্টটি {{GENDER:$2|তৈরী}} করেছেন",
        "logentry-newusers-byemail": "$1, $3 ব্যবহারকরী অ্যাকাউন্টটি {{GENDER:$2|তৈরী করেছেন}} এবং পাসওয়ার্ড ইমেইলের মাধ্যমে পাঠানো হয়েছে",
        "logentry-newusers-autocreate": "$1 অ্যাকাউন্টটি স্বয়ংক্রিয়ভাবে {{GENDER:$2|তৈরি}} হয়েছে",
+       "logentry-protect-move_prot": "$1 সুরক্ষা সেটিং $4 থেকে $3-এ {{GENDER:$2|সরিয়েছেন}}",
        "logentry-rights-rights": "$1 ব্যবহারকারী, $3 এর দলগত সদস্যপদ $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন",
        "logentry-rights-rights-legacy": "$1 দলের সদস্যপদ পরিবর্তন করেছেন {{GENDER:$2|changed}} এর জন্য $3",
        "logentry-rights-autopromote": "$1 সয়ংক্রিয়ভাবে $4 থেকে $5 এ {{GENDER:$2|উন্নীত}} হয়েছে",
        "feedback-close": "সম্পন্ন",
        "feedback-external-bug-report-button": "প্রযুক্তিগত কাজ ফাইল করুন",
        "feedback-dialog-title": "প্রতিক্রিয়া জমা দিন",
+       "feedback-dialog-intro": "আপনি আপনার প্রতিক্রিয়া জানাতে নীচের সহজ ফরম ব্যবহার করতে পারেন। আপনার মন্তব্য আপনার ব্যবহারকারী নামসহ, \"$1\" পাতায় যোগ করা হবে।",
        "feedback-error-title": "ত্রুটি",
        "feedback-error1": "ত্রুটি: এপিআই হতে অজানা ফলাফল এসেছে",
        "feedback-error2": "ত্রুটি: সম্পাদনা ব্যর্থ",
        "feedback-error3": "ত্রুটি: এপিআই হতে কোন সাড়া নেই",
+       "feedback-error4": "ত্রুটি: প্রতিক্রিয়ায় দেয়া শিরোনামে প্রকাশ অক্ষম",
        "feedback-message": "বার্তা:",
        "feedback-subject": "বিষয়:",
        "feedback-submit": "জমা দাও",
+       "feedback-terms": "আমি বুঝেছি যে আমার প্রতিক্রিয়ার পাশাপাশি আমার যথাযথ ব্রাউজার এবং অপারেটিং সিস্টেম সংস্করণের তথ্যসহ ব্যবহারকারী এজেন্ট সর্বজনীনভাবে ভাগ করা হবে।",
+       "feedback-termsofuse": "আমি ব্যবহারের শর্তাবলী অনুসারে প্রতিক্রিয়া জানাতে সম্মত।",
        "feedback-thanks": "ধন্যবাদ! আপনার প্রতিক্রিয়া \"[$2 $1]\" পাতায় পোস্ট করা হয়েছে।",
        "feedback-thanks-title": "আপনাকে ধন্যবাদ!",
        "feedback-useragent": "ব্যবহারকারী এজেন্ট:",
        "special-characters-title-endash": "en ড্যাশ",
        "special-characters-title-emdash": "em ড্যাশ",
        "special-characters-title-minus": "বিয়োগ চিহ্ন",
+       "mw-widgets-dateinput-no-date": "কোন তারিখ নির্বাচন করা হয়নি",
        "mw-widgets-titleinput-description-new-page": "পাতা এখনো বিদ্যমান নয়",
        "mw-widgets-titleinput-description-redirect": "$1-এ পুনঃনির্দেশিত"
 }
index c9da4e7..e7d76cf 100644 (file)
        "unprotectthispage": "Cheñch live gwareziñ ar bajenn-mañ",
        "newpage": "Pajenn nevez",
        "talkpage": "Pajenn gaozeal",
-       "talkpagelinktext": "Kaozeal",
+       "talkpagelinktext": "kaozeal",
        "specialpage": "Pajenn dibar",
        "personaltools": "Ostilhoù personel",
        "articlepage": "Sellet ouzh ar pennad",
        "rcshowhideminor": "$1 ar c'hemmoù dister",
        "rcshowhideminor-show": "Diskouez",
        "rcshowhideminor-hide": "Kuzhat",
-       "rcshowhidebots": "$1 ar robotoù",
+       "rcshowhidebots": "$1 ar botoù",
        "rcshowhidebots-show": "Diskouez",
        "rcshowhidebots-hide": "Kuzhat",
        "rcshowhideliu": "$1 an implijerien enrollet",
        "linksearch-pat": "Klask an droienn :",
        "linksearch-ns": "Esaouenn anv :",
        "linksearch-ok": "Klask",
-       "linksearch-text": "Gallout a reer implijout arouezennoù \"joker\" evel, da skouer, \"*.wikipedia.org\".\nRekis eo dezho un domani a-us da nebeutañ evel, da skouer, \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokoloù}} skoret : <code>$1</code> (defaults to http:// na lakait hini ebet eus ar re-se en ho klask).",
+       "linksearch-text": "Gallout a reer implijout arouezennoù \"joker\" evel, da skouer, \"*.wikipedia.org\".\nRekis eo dezho un domani a-us da nebeutañ evel, da skouer, \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokoloù}} skoret : $1 (defaults to http:// na lakait hini ebet eus ar re-se en ho klask).",
        "linksearch-line": "$1 gant ul liamm adal $2",
        "linksearch-error": "N'hall an arouezennoù joker bezañ implijet nemet e deroù anv domani an ostiz.",
        "listusersfrom": "Diskouez anv an implijerien adal :",
        "activeusers-intro": "Setu aze ur roll eus an implijerien zo bet oberiant mui pe vui e-pad an $1 {{PLURAL:$1|deiz|deiz}} diwezhañ.",
        "activeusers-count": "$1 {{PLURAL:$1|oberiadenn}} abaoe an {{PLURAL:$3|deiz|$3 deiz}} diwezhañ",
        "activeusers-from": "Diskouez an implijerien adal :",
-       "activeusers-hidebots": "Kuzhat ar robotoù",
+       "activeusers-hidebots": "Kuzhat ar botoù",
        "activeusers-hidesysops": "Kuzhat ar verourien",
        "activeusers-noresult": "N'eus bet kavet implijer ebet.",
        "listgrouprights": "Gwirioù ar strolladoù implijer",
        "emailuser": "Kas ur postel d'an implijer-mañ",
        "emailuser-title-target": "Kas ur postel d'an {{PLURAL:$1|an implijer-mañ|an implijerez-mañ}}",
        "emailuser-title-notarget": "Kas ur postel d'un implijer",
-       "emailpage": "Postel implijer",
        "emailpagetext": "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an {{GENDER:$1|implijer|implijerez}}-mañ.\nE maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi en ho [[Special:Preferences|Penndibaboù]], d'ar resever da c'hallout respont deoc'h war-eeun ma kar.",
        "defemailsubject": "Postel kaset eus {{SITENAME}} gant an implijer \"$1\"",
        "usermaildisabled": "Diweredekaet eo ar c'has posteloù etre an implijerien.",
        "namespace": "Esaouenn anv :",
        "invert": "Eilpennañ an dibab",
        "tooltip-invert": "Askañ ar voest-mañ da guzhat ar c'hemmoù er pajennoù stag ouzh an esaouenn anv diuzet (hag an esaouenn anv stag, m'emañ asket)",
-       "namespace_association": "Esaouennoù anv all da ouzhpennañ",
+       "namespace_association": "Esaouennoù anv liammet",
        "tooltip-namespace_association": "Askañ ar voest-mañ da lakaat ivez e-barzh ar gaozeadenn pe danvez an esaouenn anv liammet ouzh an esaouenn anv diuzet",
        "blanknamespace": "(Pennañ)",
        "contributions": "Degasadennoù an {{GENDER:$1|implijer|implijerez}}",
        "tooltip-pt-logout": "Digevreañ",
        "tooltip-pt-createaccount": "Erbedet eo deoc'h krouiñ ur gont ha kevreañ ; n'eo ket ret koulskoude.",
        "tooltip-ca-talk": "Kaozeadennoù diwar-benn ar pennad",
-       "tooltip-ca-edit": "Gallout a rit kemmañ ar bajenn-mañ. Implijit ar stokell Rakwelet a-raok enrollañ, mar plij.",
+       "tooltip-ca-edit": "Kemmañ ar bajenn-mañ.",
        "tooltip-ca-addsection": "Kregiñ gant ur rann nevez.",
        "tooltip-ca-viewsource": "Gwarezet eo ar bajenn-mañ. Gallout a rit gwelet an danvez anezhañ memes tra.",
        "tooltip-ca-history": "Stummoù kozh ar bajenn-mañ gant an aozerien anezhi.",
        "tooltip-ca-nstab-main": "Gwelet ar pennad",
        "tooltip-ca-nstab-user": "Gwelet ar bajenn implijer",
        "tooltip-ca-nstab-media": "Gwelet pajenn ar media",
-       "tooltip-ca-nstab-special": "Ur bajenn dibar eo homañ, n'oc'h ket evit kemmañ anezhi.",
+       "tooltip-ca-nstab-special": "Ur bajenn dibar eo homañ ha ne c'haller kemmañ anezhi.",
        "tooltip-ca-nstab-project": "Gwelet pajenn ar raktres",
        "tooltip-ca-nstab-image": "Gwelet pajenn deskrivañ ar bajenn-mañ",
        "tooltip-ca-nstab-mediawiki": "Gwelet kemenn ar reizhiad",
        "spam_reverting": "Distreiñ d'ar stumm diwezhañ hep liamm davet $1",
        "spam_blanking": "Diverkañ an holl stummoù enno liammoù davet $1",
        "spam_deleting": "An holl stummoù enno liammoù war-zu $1, o tiverkañ",
-       "simpleantispam-label": "Taol gwiriañ eneb-strob.\n'''Arabat''' merkañ tra pe dra amañ !",
+       "simpleantispam-label": "Taol gwiriañ eneb-strob.\n<trong>Arabat<strong> merkañ tra pe dra amañ !",
        "pageinfo-title": "Titouroù evit \"$1\"",
        "pageinfo-not-current": "Hon digarezit, ne c'haller ket reiñ an titouroù-mañ evit an adweloù kozh.",
        "pageinfo-header-basic": "Titouroù diazez",
index de5f247..f54fe35 100644 (file)
                        "Milicevic01",
                        "Macofe",
                        "Emir Mujadzic",
-                       "Srdjan m"
+                       "Srdjan m",
+                       "Semso98"
                ]
        },
        "tog-underline": "Podvuci veze:",
-       "tog-hideminor": "Sakrij male izmjene u spisku nedavnih izmjena",
+       "tog-hideminor": "Sakrij manje izmjene u spisku nedavnih izmjena",
        "tog-hidepatrolled": "Sakrij patrolirane izmjene u nedavnim promjenama",
        "tog-newpageshidepatrolled": "Sakrij patrolirane stranice sa spiska novih stranica",
        "tog-extendwatchlist": "Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih",
        "tog-usenewrc": "Grupiraj izmjene po stranicama sa nedavnih izmjena i praćenih članaka",
        "tog-numberheadings": "Automatski numeriši podnaslove",
        "tog-showtoolbar": "Prikaži traku s alatkama za uređivanje",
-       "tog-editondblclick": "Izmijeni stranice dvostrukim klikom",
-       "tog-editsectiononrightclick": "Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka",
+       "tog-editondblclick": "Uredi stranice dvostrukim klikom",
+       "tog-editsectiononrightclick": "Uključi uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka",
        "tog-watchcreations": "Dodaj stranice i datoteke koje napravim na moj spisak praćenih članaka",
        "tog-watchdefault": "Dodaj stranice i datoteke koje uređujem na moj spisak praćenih članaka",
        "tog-watchmoves": "Dodaj stranice i datoteke koje premjestim na moj spisak praćenih članaka",
        "tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na moj spisak praćenih članaka",
        "tog-watchrollback": "Sve stranice za koje sam izvršio povrat izmjena stavi na spisak praćenja",
-       "tog-minordefault": "Označi sve izmjene malim isprva",
-       "tog-previewontop": "Prikaži pretpregled prije polja za izmjenu a ne poslije",
+       "tog-minordefault": "Označi sve izmjene manjim isprva",
+       "tog-previewontop": "Prikaži pregled iznad okvira za uređivanje",
        "tog-previewonfirst": "Prikaži izgled pri prvoj izmjeni",
-       "tog-enotifwatchlistpages": "Pošalji mi e-mail kada se promijeni stranica ili datoteka sa mog spiska praćenih članaka",
+       "tog-enotifwatchlistpages": "Pošalji mi e-poštu kada se promijeni stranica ili datoteka sa mog spiska praćenih članaka",
        "tog-enotifusertalkpages": "Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor",
        "tog-enotifminoredits": "Također mi pošalji e-poštu za male izmjene na stranicama i datotekama",
        "tog-enotifrevealaddr": "Otkrij adresu moje e-pošte u porukama obavještenja",
        "tog-shownumberswatching": "Prikaži broj korisnika koji prate",
        "tog-oldsig": "Postojeći potpis:",
        "tog-fancysig": "Smatraj potpis kao wikitekst (bez automatskog linka)",
-       "tog-uselivepreview": "Koristite pregled uživo",
+       "tog-uselivepreview": "Koristi pregled uživo",
        "tog-forceeditsummary": "Opomeni me pri unosu praznog sažetka",
        "tog-watchlisthideown": "Sakrij moje izmjene sa spiska praćenih članaka",
        "tog-watchlisthidebots": "Sakrij izmjene botova sa spiska praćenih članaka",
-       "tog-watchlisthideminor": "Sakrij zanemarljive izmjene sa spiska mojih praćenja",
-       "tog-watchlisthideliu": "Sakrij promjene prijavljenih korisnika sa liste praćenja",
-       "tog-watchlisthideanons": "Sakrij promjene anonimnih korisnika sa liste praćenja",
+       "tog-watchlisthideminor": "Sakrij manje izmjene sa spiska praćenih članaka",
+       "tog-watchlisthideliu": "Sakrij izmjene prijavljenih korisnika sa spiska praćenih članaka",
+       "tog-watchlisthideanons": "Sakrij izmjene anonimnih korisnika sa spiska praćenih članaka",
        "tog-watchlisthidepatrolled": "Sakrij patrolirane izmjene sa spiska praćenja",
        "tog-ccmeonemails": "Pošalji mi kopije e-pošte koju pošaljem drugim korisnicima",
-       "tog-diffonly": "Ne prikazuj sadržaj stranice ispod prikaza razlika",
+       "tog-diffonly": "Ne prikazuj sadržaj stranice ispod razlika",
        "tog-showhiddencats": "Prikaži skrivene kategorije",
-       "tog-norollbackdiff": "Nakon vraćanja zanemari prikaz razlika",
-       "tog-useeditwarning": "Upozori me kada napustim stranicu za izmjene bez spašenih promjena",
+       "tog-norollbackdiff": "Izostavi razliku nakon vraćanja",
+       "tog-useeditwarning": "Upozori me kad napuštam stranicu za izmjene bez sačuvanih promjena",
        "tog-prefershttps": "Uvijek koristi sigurnu konekciju kada sam prijavljen.",
        "underline-always": "Uvijek",
        "underline-never": "Nikad",
-       "underline-default": "Po standardu izgleda ili preglednika",
-       "editfont-style": "Stil slova područja uređivanja:",
+       "underline-default": "Prema predodređenim postavkama teme ili preglednika",
+       "editfont-style": "Stil fonta u okviru za uređivanje:",
        "editfont-default": "Po postavkama preglednika",
        "editfont-monospace": "Slova sa jednostrukim razmakom",
        "editfont-sansserif": "Beserifni font",
        "about": "O",
        "article": "Članak",
        "newwindow": "(otvara se u novom prozoru)",
-       "cancel": "Poništite",
+       "cancel": "Odustani",
        "moredotdotdot": "Više...",
        "morenotlisted": "Ovaj spisak nije potpun.",
-       "mypage": "Korisnička stranica",
+       "mypage": "Stranica",
        "mytalk": "Razgovor",
        "anontalk": "Razgovor za ovu IP adresu",
        "navigation": "Navigacija",
        "and": "&#32;i",
        "qbfind": "Pronađite",
-       "qbbrowse": "Prelistajte",
+       "qbbrowse": "Potraži",
        "qbedit": "Uredi",
        "qbpageoptions": "Opcije stranice",
        "qbmyoptions": "Moje opcije",
        "variants": "Varijante",
        "navigation-heading": "Navigacija",
        "errorpagetitle": "Greška",
-       "returnto": "Povratak na $1.",
+       "returnto": "Nazad na $1.",
        "tagline": "Izvor: {{SITENAME}}",
        "help": "Pomoć",
        "search": "Pretraga",
        "history": "Historija stranice",
        "history_short": "Historija",
        "updatedmarker": "promjene od moje posljednje posjete",
-       "printableversion": "Prilagođeno štampanju",
+       "printableversion": "Za štampanje",
        "permalink": "Trajni link",
-       "print": "Štampa",
+       "print": "Štampaj",
        "view": "Pogled",
        "view-foreign": "Vidi na $1",
        "edit": "Uredi",
        "undeletethispage": "Povrati ovu stranicu",
        "undelete_short": "Vrati obrisanih {{PLURAL:$1|$1 izmjenu|$1 izmjene|$1 izmjena}}",
        "viewdeleted_short": "Pogledaj {{PLURAL:$1|jednu obrisanu izmjenu|$1 obrisane izmjene|$1 obrisanih izmjena}}",
-       "protect": "Zaštitite",
+       "protect": "Zaštiti",
        "protect_change": "promijeni",
        "protectthispage": "Zaštitite ovu stranicu",
        "unprotect": "Promijeni zaštitu",
-       "unprotectthispage": "Promijeni zaštitu za ovu stranicu",
+       "unprotectthispage": "Promijeni zaštitu ove stranice",
        "newpage": "Nova stranica",
        "talkpage": "Razgovor o stranici",
-       "talkpagelinktext": "Razgovor",
-       "specialpage": "Posebna Stranica",
+       "talkpagelinktext": "razgovor",
+       "specialpage": "Posebna stranica",
        "personaltools": "Lični alati",
        "articlepage": "Pogledaj članak",
        "talk": "Razgovor",
        "templatepage": "Pogledajte stranicu za šablone",
        "viewhelppage": "Pogledajte stranicu za pomoć",
        "categorypage": "Pogledaj stranicu kategorije",
-       "viewtalkpage": "Pogledaj raspravu",
-       "otherlanguages": "Na drugim jezicima",
+       "viewtalkpage": "Pogledaj razgovor",
+       "otherlanguages": "Drugi jezici",
        "redirectedfrom": "(Preusmjereno sa $1)",
-       "redirectpagesub": "Preusmjeri stranicu",
+       "redirectpagesub": "Preusmjerenje",
        "redirectto": "Preusmjerenje na:",
        "lastmodifiedat": "Ova stranica je posljednji put izmijenjena $2, $1",
        "viewcount": "Ovoj stranici je pristupljeno {{PLURAL:$1|$1 put|$1 puta}}.",
        "aboutpage": "Project:O_projektu_{{SITENAME}}",
        "copyright": "Sadržaj je dostupan pod licencom $1 osim ako je navedeno drugačije.",
        "copyrightpage": "{{ns:project}}:Autorska_prava",
-       "currentevents": "Trenutni događaji",
+       "currentevents": "Novosti",
        "currentevents-url": "Project:Novosti",
        "disclaimers": "Odricanje odgovornosti",
        "disclaimerpage": "Project:Uslovi korištenja, pravne napomene i odricanje odgovornosti",
        "mainpage": "Početna strana",
        "mainpage-description": "Početna strana",
        "policy-url": "Project:Pravila",
-       "portal": "Portal zajednice",
-       "portal-url": "Project:Portal zajednice",
+       "portal": "Vrata zajednice",
+       "portal-url": "Project:Vrata zajednice",
        "privacy": "Politika privatnosti",
        "privacypage": "Project:Pravila o anonimnosti",
        "badaccess": "Greška pri odobrenju",
        "versionrequired": "Potrebna je verzija $1 MediaWikija",
        "versionrequiredtext": "Potrebna je verzija $1 MediaWikija da bi se koristila ova strana. Pogledaj [[Special:Version|verziju]].",
        "ok": "U redu",
-       "retrievedfrom": "Dobavljeno iz \"$1\"",
+       "retrievedfrom": "Preuzeto iz \"$1\"",
        "youhavenewmessages": "Imate $1 ($2).",
        "youhavenewmessagesfromusers": "Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika}} ($2).",
        "youhavenewmessagesmanyusers": "Imate $1 od mnogo korisnika ($2).",
        "viewsourcelink": "pogledaj izvor",
        "editsectionhint": "Uredi sekciju: $1",
        "toc": "Sadržaj",
-       "showtoc": "pokaži",
+       "showtoc": "prikaži",
        "hidetoc": "sakrij",
        "collapsible-collapse": "sklopi",
        "collapsible-expand": "Proširi",
        "confirmable-confirm": "Da li {{GENDER:$1|ste}} sigurni?",
        "confirmable-yes": "Da",
        "confirmable-no": "Ne",
-       "thisisdeleted": "Pogledaj ili vrati $1?",
+       "thisisdeleted": "Pogledati ili vratiti $1?",
        "viewdeleted": "Pogledaj $1?",
        "restorelink": "{{PLURAL:$1|$1 izbrisana izmjena|$1 izbrisanih izmjena}}",
        "feedlinks": "Fid:",
        "red-link-title": "$1 (stranica ne postoji)",
        "sort-descending": "Poredaj opadajuće",
        "sort-ascending": "Poredaj rastuće",
-       "nstab-main": "Članak",
+       "nstab-main": "Stranica",
        "nstab-user": "Korisnička stranica",
        "nstab-media": "Mediji",
        "nstab-special": "Posebna stranica",
        "nstab-template": "Šablon",
        "nstab-help": "Pomoć",
        "nstab-category": "Kategorija",
-       "nosuchaction": "Nema takve akcije",
+       "nosuchaction": "Ova radnja ne postoji",
        "nosuchactiontext": "Akcija navedena u URL-u nije valjana.\nMožda ste pogriješili pri unosu URL-a ili ste slijedili pokvaren link.\nMoguće je i da je ovo greška u {{SITENAME}} softveru.",
        "nosuchspecialpage": "Nema takve posebne stranice",
-       "nospecialpagetext": "<strong>Tražili ste nevaljanu posebnu stranicu.</strong>\n\nSpisak valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nospecialpagetext": "<strong>Tražili ste neispravnu posebnu stranicu.</strong>\n\nSpisak ispravnih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Greška",
-       "databaseerror": "Greška u bazi",
+       "databaseerror": "Greška u bazi podataka",
        "databaseerror-text": "Došlo je do greške u upitu baze podataka. \nMožda je u pitanju softverska greška.",
        "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.",
        "databaseerror-query": "Upit: $1",
        "readonly_lag": "Baza podataka je zaključana dok se sekundarne baze podataka na serveru ne sastave sa glavnom.",
        "internalerror": "Unutrašnja greška",
        "internalerror_info": "Interna greška: $1",
+       "internalerror-fatal-exception": "Fatalna greška tipa \"$1\"",
        "filecopyerror": "Ne može se kopirati \"$1\" na \"$2\".",
        "filerenameerror": "Ne može se promjeniti ime datoteke \"$1\" u \"$2\".",
        "filedeleteerror": "Ne može se izbrisati datoteka \"$1\".",
        "title-invalid-interwiki": "Traženi naslov stranice sadrži interwiki link koji ne može biti korišten u naslovima.",
        "title-invalid-talk-namespace": "Vaš zatraženi naslov stranice se odnosi na stranicu za razgovor koja ne može postojati.",
        "title-invalid-characters": "Vaš zatraženi naslov stranice sadrži nevažeće znakove: \"$1\".",
+       "title-invalid-relative": "Naslov ima relativnu putanja. Relativni naslovi stranica (./, ../) nisu važeći jer će često biti nedostupni u pregledniku korisnika.",
+       "title-invalid-magic-tilde": "Zatraženi naslov stranice sadrži nevažeći slijed magičknog znaka tilda (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Zatraženi naziv stranice je predugačak. Ne smije biti duži od {{PLURAL:$1|bajta|bajtova}} u UTF-8 kodiranju.",
        "title-invalid-leading-colon": "Zahtjevani naslov stranice sadrži nevažeću dvotačku na početku.",
        "perfcached": "Sljedeći podaci su keširani i možda neće biti u potpunosti ažurirani. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata}}.",
        "perfcachedts": "Sljedeći podaci nalaze se u memoriji i posljednji put ažurirani su $1. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze ne moraju biti aktuelni.",
-       "viewsource": "Pogledaj izvor",
+       "viewsource": "Prikaži izvor",
        "viewsource-title": "Prikaz izvora stranice $1",
        "actionthrottled": "Akcija je usporena",
        "actionthrottledtext": "Kao anti-spam mjera, ograničene su vam izmjene u određenom vremenu, i trenutačno ste dostigli to ograničenje. Pokušajte ponovo poslije nekoliko minuta.",
        "protectedpagetext": "Ova stranica je zaključana da bi se spriječile izmjene.",
-       "viewsourcetext": "Možete vidjeti i kopirati izvorni tekst ove stranice:",
+       "viewsourcetext": "Možete vidjeti i kopirati izvorni kôd ove stranice.",
        "viewyourtext": "Možete da pogledate i kopirate izvor '''vaših izmjena''' na ovoj stranici:",
        "protectedinterface": "Ova stranica sadrži tekst korisničkog okruženja za softver na ovom wikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili izmjenili prijevode svih wikija, posjetite [//translatewiki.net/  translatewiki.net], projekat za lokalizaciju Mediawikija.",
        "editinginterface": "<strong>Upozorenje:</strong> Mijenjate stranicu koja sadrži aktivan tekst programa.\nPromjene na ovoj stranici dovode i do promjena za druge korisnike ovog wikija.\nZa dodavanje ili promjene prijevoda za sve wikije, molimo Vas koristite [//translatewiki.net/ translatewiki.net], projekt prijevoda za MediaWiki.",
        "translateinterface": "Za dodavanje ili promjenu prijevoda za sve wikije koristite [//translatewiki.net/ translatewiki.net], projekt za lokalizaciju MediaWikija.",
-       "cascadeprotected": "Uređivanje ove stranice zabranjeno je jer sadrži {{PLURAL:$1|stranicu zaštićenu|stranice zaštićene}} od uređivanja iz razloga:\n$2",
+       "cascadeprotected": "Uređivanje ove stranice zabranjeno je jer se koristi u {{PLURAL:$1|sljedećoj stranici, koja je zaštićena|sljedećim stranicama, koje su zaštićene}} prenosivom zaštitom:\n$2",
        "namespaceprotected": "Vi nemate dozvulu da mijenjate stranicu '''$1'''.",
        "customcssprotected": "Nemate dozvolu za mijenjanje ove CSS stranice jer sadrži osobne postavke nekog drugog korisnika.",
        "customjsprotected": "Nemate dozvolu za mijenjanje ove JavaScript stranice jer sadrži osobne postavke nekog drugog korisnika.",
        "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom \"$2\"",
        "exception-nologin": "Niste prijavljeni",
        "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.",
-       "exception-nologin-text-manual": "Molimo $1 da biste pristupili ovoj stranici ili radnji.",
+       "exception-nologin-text-manual": "Morate biti $1 da biste pristupili ovoj stranici ili radnji.",
        "virus-badscanner": "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
        "virus-scanfailed": "skeniranje nije uspjelo (code $1)",
        "virus-unknownscanner": "nepoznati anti-virus program:",
        "userlogin-yourpassword": "Lozinka",
        "userlogin-yourpassword-ph": "Unesite Vašu lozinku",
        "createacct-yourpassword-ph": "Unesite lozinku",
-       "yourpasswordagain": "Ponovite šifru:",
+       "yourpasswordagain": "Ponovo upišite šifru:",
        "createacct-yourpasswordagain": "Potvrdite lozinku",
        "createacct-yourpasswordagain-ph": "Unesite lozinku opet",
-       "remembermypassword": "Zapamti moju šifru na ovom računaru (najviše $1 {{PLURAL:$1|dan|dana|dana}})",
+       "remembermypassword": "Zapamti moju šifru na ovom pregledniku (najduže $1 {{PLURAL:$1|dan|dana}})",
        "userlogin-remembermypassword": "Ostavi me prijavljenog/-u",
        "userlogin-signwithsecure": "Koristite sigurnu konekciju",
        "yourdomainname": "Vaš domen:",
        "password-change-forbidden": "Ne možete da promjenite lozinku na ovom wikiju.",
        "externaldberror": "Došlo je do greške pri vanjskoj autorizaciji baze podataka ili vam nije dopušteno osvježavanje Vašeg vanjskog korisničkog računa.",
-       "login": "Prijavi se",
+       "login": "Prijavi me",
        "nav-login-createaccount": "Prijavi se / Registruj se",
        "userlogin": "Prijavi se / Registruj se",
        "userloginnocreate": "Prijavi se",
        "userlogin-noaccount": "Nemate korisnički račun?",
        "userlogin-joinproject": "Pridružite se {{GRAMMAR:dativ|{{SITENAME}}}}",
        "nologin": "Nemate korisničko ime? $1.",
-       "nologinlink": "Napravite nalog",
+       "nologinlink": "Otvorite račun",
        "createaccount": "Napravi korisnički račun",
        "gotaccount": "Već imate korisnički račun? $1.",
-       "gotaccountlink": "Prijavi se",
+       "gotaccountlink": "Prijavite se",
        "userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
        "userlogin-resetpassword-link": "Zaboravili ste lozinku?",
        "userlogin-helplink2": "Pomoć pri prijavljivanju",
        "createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
        "createacct-benefit-body3": "nedavnih {{PLURAL:$1|doprinosa}}",
        "badretype": "Šifre koje ste unijeli se ne poklapaju.",
-       "userexists": "Korisničko ime koje ste unijeli je već u upotrebi.\nMolimo Vas da izaberete drugo ime.",
+       "userexists": "Korisničko ime je već u upotrebi.\nIzaberite drugo.",
        "loginerror": "Greška pri prijavljivanju",
        "createacct-error": "Došlo je do greške pri otvaranju naloga",
        "createaccounterror": "Ne može se napraviti račun: $1",
-       "nocookiesnew": "Korisnički nalog je napravljen, ali niste prijavljeni. {{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili.  Vi ste onemogućili kolačiće na Vašem računaru. Molimo Vas da ih omogućite, a onda se prijavite sa svojim novim korisničkim imenom i šifrom.",
+       "nocookiesnew": "Korisnički nalog je napravljen, ali niste prijavljeni.\n{{SITENAME}} koristi kolačiće (cookies) da bi se korisnici prijavili.\nVi ste isključili kolačiće na Vašem računaru.\nMolimo Vas da ih uključite, a onda se prijavite sa svojim novim korisničkim imenom i šifrom.",
        "nocookieslogin": "{{SITENAME}} koristi kolačiće (''cookies'') da bi se korisnici prijavili.  Vi ste onemogućili kolačiće na Vašem kompjuteru.  Molimo Vas da ih omogućite i da pokušate ponovo sa prijavom.",
        "nocookiesfornew": "Korisnički račun nije napravljen, jer nismo mogli da potvrdimo njegov izvor.\nProvjerite da li su cookies omogućeni, ponovo učitajte ovu stranicu i pokušajte ponovo.",
        "noname": "Niste izabrali ispravno korisničko ime.",
        "nosuchusershort": "Ne postoji korisnik s imenom \"$1\".\nProvjerite jeste li dobro ukucali.",
        "nouserspecified": "Morate izabrati korisničko ime.",
        "login-userblocked": "Ovaj korisnik je blokiran. Prijava nije dopuštena.",
-       "wrongpassword": "Unijeli ste neispravnu šifru.\nMolimo Vas da pokušate ponovno.",
-       "wrongpasswordempty": "Šifra je bila prazna.\nMolimo Vas da pokušate ponovno.",
+       "wrongpassword": "Šifra koju ste unijeli je netačna.\nPokušate ponovno.",
+       "wrongpasswordempty": "Šifra koju ste unijeli je bila prazna.\nMolimo Vas da pokušate ponovno.",
        "passwordtooshort": "Šifra mora imati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
+       "passwordtoolong": "Šifre ne mogu biti duže od {{PLURAL:$1|jednog znaka|$1 znaka|$1 znakova}}.",
        "password-name-match": "Vaša šifra mora biti različita od Vašeg korisničkog imena.",
        "password-login-forbidden": "Korištenje ovih korisničkih imena i šifara je zabranjeo.",
        "mailmypassword": "Poništi lozinku",
-       "passwordremindertitle": "Nova privremena šifra za {{SITENAME}}",
+       "passwordremindertitle": "{{SITENAME}} - privremena šifra",
        "passwordremindertext": "Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}}  ($4). Privremena šifra za korisnika \"$2\" je napravljena i glasi \"$3\". Ako ste to željeli, sad treba da se prijavite i promjenite šifru.\nVaša privremena šifra će isteči za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše šifre i ne želite više da je promjenite, možete da ignorišete ovu poruku i da nastavite koristeći vašu staru šifru.",
        "noemail": "Ne postoji adresa e-pošte za korisnika \"$1\".",
        "noemailcreate": "Morate da navedete validnu e-mail adresu",
-       "passwordsent": "Nova šifra je poslata na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite pošto je primite.",
+       "passwordsent": "Nova šifra je poslata na adresu e-pošte korisnika \"$1\".\nMolimo Vas da se prijavite nakon što je primite.",
        "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.",
-       "eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.",
+       "eauthentsent": "Na navedenu adresu e-pošte poslana je poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.",
        "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
        "mailerror": "Greška pri slanju e-pošte: $1",
        "acct_creation_throttle_hit": "Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.\nKao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.",
        "php-mail-error-unknown": "Nepoznata greška u PHP funkciji mail()",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez navedene e-mail adrese.",
        "user-mail-no-body": "Pokušano slanje e-poruke s praznim ili nerazumno kratkim sadržajem.",
-       "changepassword": "Promijeni lozinku",
+       "changepassword": "Promijeni šifru",
        "resetpass_announce": "Da biste završili prijavu, morate postaviti novu šifru.",
        "resetpass_text": "<!-- Unesi tekst ovdje -->",
        "resetpass_header": "Obnovi šifru za račun",
        "oldpassword": "Stara šifra:",
        "newpassword": "Nova šifra:",
-       "retypenew": "Unesite ponovo novu šifru:",
+       "retypenew": "Ponovo upišite novu šifru:",
        "resetpass_submit": "Odredi šifru i prijavi se",
        "changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!",
        "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resetpass_forbidden": "Šifre ne mogu biti promjenjene",
-       "resetpass-no-info": "Morate biti prijavljeni da bi ste pristupili ovoj stranici direktno.",
+       "resetpass-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici direktno.",
        "resetpass-submit-loggedin": "Promijeni šifru",
        "resetpass-submit-cancel": "Odustani",
        "resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.",
        "passwordreset-emailsent": "Podsjetnik na lozinku poslan je na Vašu e-mail adresu.",
        "passwordreset-emailsent-capture": "Poslan je podsjetnik preko e-pošte (prikazano ispod).",
        "passwordreset-emailerror-capture": "E-poruka za resetiranje lozinke, prikazano ispod, poslana je, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspjelo: $1",
-       "changeemail": "Promijeni e-mail adresu",
-       "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju e-mail adresu. Morat ćete upisati svoj pasvord da potvrdite ovu promjenu.",
+       "changeemail": "Promjena e-adrese",
+       "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju adresu e-pošte, odnosno e-adresu. Morat ćete upisati svoju šifru kako biste potvrdili ovu promjenu.",
        "changeemail-no-info": "Morate biti prijavljeni za direktan pristup ovoj stranici.",
-       "changeemail-oldemail": "Trenutna e-mail adresa:",
-       "changeemail-newemail": "Nova e-mail adresa:",
+       "changeemail-oldemail": "Trenutna adresa e-pošte:",
+       "changeemail-newemail": "Nova adresa e-pošte:",
        "changeemail-none": "(ništa)",
-       "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
-       "changeemail-submit": "Promijeni e-mail",
+       "changeemail-password": "Vaša šifra za {{SITENAME}}:",
+       "changeemail-submit": "Promijeni adresu e-pošte",
        "changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resettokens": "Resetovanje žetona",
        "resettokens-text": "Možete ponovno postaviti tokene koji će vam omogućiti pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTrebali bi to učiniti ako ih mimo volje podijelite s nekim ili ako je vaš račun ugrožen.",
        "hr_tip": "Horizontalna linija (koristite oskudno)",
        "summary": "Sažetak:",
        "subject": "Tema/naslov:",
-       "minoredit": "Ovo je mala izmjena",
+       "minoredit": "Ovo je manja izmjena",
        "watchthis": "Prati ovu stranicu",
-       "savearticle": "Sačuvaj",
+       "savearticle": "Sačuvaj stranicu",
        "preview": "Pregled stranice",
        "showpreview": "Prikaži izgled",
        "showdiff": "Prikaži izmjene",
        "missingsummary": "'''Napomena:''' Niste unijeli sažetak izmjene.\nAko kliknete na Sačuvaj, Vaša izmjena će biti sačuvana bez sažetka.",
        "selfredirect": "<strong>Upozorenje:</strong> Preusmjerili ste stranicu na samu sebe.\nMožda ste naveli pogrešan cilj preusmjeravanja ili ste uređivali pogrešnu stranicu.\nAko ponovno kliknete \"{{int:savearticle}}\", ipak će nastati preusmjerenje.",
        "missingcommenttext": "Molimo unesite komentar ispod.",
-       "missingcommentheader": "'''Podsjetnik:''' Niste napisali temu/naslov za ovaj komentar.\nAko ponovo kliknete na ''{{int:savearticle}}'', Vaše izmjene će biti spašene bez teme/naslova.",
+       "missingcommentheader": "<strong>Podsjetnik:</strong> Niste napisali temu/naslov za ovaj komentar.\nAko ponovo kliknete na \"{{int:savearticle}}\", vaša izmjena će biti sačuvana bez teme/naslova.",
        "summary-preview": "Pregled sažetka:",
        "subject-preview": "Pregled tema/naslova:",
        "previewerrortext": "Dogodila se greška prilikom prikazivanja vaših izmjena.",
        "blockedtext": "'''Vaše korisničko ime ili IP-adresa je blokirana.'''\n\nBlokada izvršena od strane $1.\nDati razlog je sljedeći: ''$2''.\n\n*Početak blokade: $8\n*Kraj perioda blokade: $6\n*Ime blokiranog korisnika: $7\n\nMožete kontaktirati sa $1 ili nekim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorom]] da biste razgovarali o blokadi.\n\nNe možete koristiti opciju ''Pošalji e-mail korisniku'' osim ako niste unijeli e-mail adresu u [[Special:Preferences|Vaše postavke]].\nVaša trenutna IP-adresa je $3, a oznaka blokade je #$5.\nMolimo Vas da navedete gornje podatke pri zahtjevu za deblokadu.",
        "autoblockedtext": "Vaša IP-adresa automatski je blokirana jer ju je koristio drugi korisnik, a blokirao ju je $1.\nNaveden je sljedeći razlog:\n\n:''$2''\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Blokirani korisnik: $7\n\nMožete kontaktirati sa $1 ili nekim drugim iz grupe [[{{MediaWiki:Grouppage-sysop}}|administratora]] i zahtijevati da Vas deblokira.\n\nZapamtite da ne možete koristiti opciju \"pošalji e-mail ovom korisniku\" sve dok ne unesete validnu e-mail adresu pri registraciji u Vašim [[Special:Preferences|korisničkim postavkama]] i dok niste spriječeni (blokadom) da je koristite.\n\nVaša trenutna IP-adresa je $3, a ID blokade je $5.\nMolimo da navedete sve gore navedene detalje u zahtjevu za deblokadu.",
        "blockednoreason": "razlog nije naveden",
-       "whitelistedittext": "Da bi ste uređivali stranice, morate se $1.",
+       "whitelistedittext": "Morate biti $1 da biste uređivali stranice.",
        "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego počnete mijenjati stranice.\nMolimo da postavite i verifikujete Vašu e-mail adresu putem Vaših [[Special:Preferences|korisničkih opcija]].",
        "nosuchsectiontitle": "Ne mogu pronaći sekciju",
        "nosuchsectiontext": "Pokušali ste uređivati sekciju koja ne postoji.\nMožda je premještena ili obrisana dok ste pregledavali stranicu.",
-       "loginreqtitle": "Potrebno je prijavljivanje",
-       "loginreqlink": "prijavi se",
-       "loginreqpagetext": "Morate $1 da bi ste vidjeli druge strane.",
+       "loginreqtitle": "Potrebna je prijava",
+       "loginreqlink": "prijavljeni",
+       "loginreqpagetext": "Morate biti $1 da biste vidjeli druge stranice.",
        "accmailtitle": "Šifra poslana.",
        "accmailtext": "Nasumično odabrana šifra za [[User talk:$1|$1]] je poslata na adresu $2.\n\nŠifra/lozinka za ovaj novi račun može biti promijenjena na stranici ''[[Special:ChangePassword|izmjene šifre]]'' nakon prijave.",
        "newarticle": "(Novi)",
        "userinvalidcssjstitle": "'''Upozorenje:''' Ne postoji interfejs pod imenom \"$1\".\nNe 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": "'''Pažnja:'''",
-       "previewnote": "'''Ne zaboravite da je ovo samo pregled'''\nIzmjene stranice nisu još sačuvane!",
+       "previewnote": "<strong>Ne zaboravite da je ovo samo pregled.</strong>\nVaše izmjene još nisu sačuvane!",
        "continue-editing": "Idi na područje uređivanja",
        "previewconflict": "Ovaj pregled prikazuje kako će tekst u gornjem polju\nizgledati ako kliknete \"Sačuvaj članak\".",
-       "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.'''",
+       "session_fail_preview": "<strong>Izvinjavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi.\nMolimo pokušajte ponovno.\nAko i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.</strong>",
        "session_fail_preview_html": "'''Žao nam je! Nismo mogli da obradimo vašu izmjenu zbog gubitka podataka.'''\n\n''Zbog toga što {{SITENAME}} ima omogućen izvorni HTML, predpregled je sakriven kao predostrožnost protiv JavaScript napada.''\n\n'''Ako ste pokušali da napravite pravu izmjenu, molimo pokušajte ponovo. Ako i dalje ne radi, pokušajte da se [[Special:UserLogout|odjavite]] i ponovo prijavite.'''",
        "token_suffix_mismatch": "'''Vaša izmjena nije prihvaćena jer je Vaš web preglednik ubacio znakove interpunkcije u token uređivanja.\nIzmjena je odbačena da bi se spriječilo uništavanje teksta stranice.\nTo 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.'''",
        "creating": "Pravljenje stranice $1",
        "editingsection": "Uređujete $1 (dio)",
        "editingcomment": "Uređujete $1 (nova sekcija)",
-       "editconflict": "Vaše izmjene se nisu mogle sačuvati zbog sukoba uređivanja. Da li bi ste sukob {{GENDER:|mogli}} razriješiti ručno?",
+       "editconflict": "Sukob izmjena: $1",
        "explainconflict": "Neko drugi je promijenio ovu stranicu otkad ste je Vi počeli mijenjati.\nGornje tekstualno polje sadrži tekst stranice koji trenutno postoji.\nVaše izmjene prikazane su u donjem tekstu.\nMorat ćete unijeti svoje promjene u postojeći tekst.\n'''Samo''' tekst u gornjem tekstualnom polju bit će sačuvan kad\nkliknete \"{{int:savearticle}}\".",
        "yourtext": "Vaš tekst",
-       "storedversion": "Uskladištena verzija",
+       "storedversion": "Sačuvana verzija",
        "nonunicodebrowser": "'''UPOZORENJE: Vaš preglednik ne podržava Unicode zapis znakova.\nMolimo Vas promijenite ga prije sljedećeg uređivanja članaka. Znakovi koji nisu po ASCII standardu će se u prozoru za izmjene pojaviti kao heksadecimalni kodovi.'''",
        "editingold": "'''PAŽNJA:  Vi mijenjate stariju\nreviziju ove stranice.\nAko je snimite, sve promjene učinjene od ove revizije će biti izgubljene.'''",
        "yourdiff": "Razlike",
        "copyrightwarning": "Za sve priloge poslane na projekt {{SITENAME}} smatramo da su objavljeni pod $2 (konsultirajte $1 za detalje).\nAko ne želite da vaši članci budu podložni izmjenama i slobodnoj distribuciji i objavljivanju,\nnemojte ih slati ovdje. Također, slanje članka podrazumijeva i Vašu izjavu da ste ga napisali sami ili da ste ga kopirali iz izvora u javnom domenu ili sličnog slobodnog izvora.\n\n'''NEMOJTE SLATI RAD ZAŠTIĆEN AUTORSKIM PRAVIMA BEZ DOZVOLE AUTORA!'''",
        "copyrightwarning2": "Zapamtite da svi doprinosi na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.<br />\nTakođer nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja).\n'''NE ŠALJITE AUTORSKIM PRAVOM ZAŠTIĆENE TEKSTOVE BEZ DOZVOLE!'''",
+       "editpage-cannot-use-custom-model": "Model sadržaja ove stranice se ne može promijeniti.",
        "longpageerror": "'''Greška: Tekst, koji ste poslali, je dug {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je veće od maksimuma, koji iznosi {{PLURAL:$2|jedan kilobajt|$2 kilobajta}}.'''\nStranica ne može biti sačuvana.",
        "readonlywarning": "'''PAŽNJA: Baza je zaključana zbog održavanja, tako da nećete moći da sačuvate svoje izmjene za sada.'''\nMožda želite da kopirate i nalijepite tekst u tekst editor i sačuvate ga za kasnije.\n\nAdministrator koji je zaključao bazu je naveo slijedeće objašnjenje: $1",
        "protectedpagewarning": "'''PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa administratorskim privilegijama mogu da je mijenjaju.'''\nPosljednja stavka u zapisniku je prikazana ispod kao referenca:",
        "semiprotectedpagewarning": "'''Pažnja:''' Ova stranica je zaključana tako da je samo registrovani korisnici mogu uređivati.\nPosljednja stavka zapisnika je prikazana ispod kao referenca:",
-       "cascadeprotectedwarning": "'''Upozorenje:''' Ova stranica je zaključana tako da je samo administratori mogu mijenjati, jer je ona uključena u {{PLURAL:$1|ovu, lančanu povezanu, zaštićenu stranicu|sljedeće, lančano povezane, zaštićene stranice}}:",
+       "cascadeprotectedwarning": "<strong>Upozorenje:</strong> Ova stranica je zaključana tako da je samo administratori mogu mijenjati, jer je ona uključena u {{PLURAL:$1|ovu, lančanu povezanu, zaštićenu stranicu|sljedeće, prenosivo povezane, zaštićene stranice}}:",
        "titleprotectedwarning": "'''UPOZORENJE: Ova stranica je zaključana tako da su potrebna [[Special:ListGroupRights|posebna prava]] da se ona napravi.'''\nPosljednja stavka zapisnika je prikazana ispod kao referenca:",
        "templatesused": "{{PLURAL:$1|Šablon|Šabloni}} koji su upotrebljeni na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} prikazani u ovom pregledu:",
        "sectioneditnotsupported-text": "Uređivanje sekcije nije podržano na ovoj stranici.",
        "permissionserrors": "Greške pri odobrenju",
        "permissionserrorstext": "Nemate dopuštenje da to uradite, iz {{PLURAL:$1|slijedećeg razloga|slijedećih razloga}}:",
-       "permissionserrorstext-withaction": "Nemate dopuštenje da $2, iz {{PLURAL:$1|slijedećeg|slijedećih}} razloga:",
+       "permissionserrorstext-withaction": "Nemate dopuštenje da $2, iz {{PLURAL:$1|sljedećeg|sljedećih}} razloga:",
        "recreate-moveddeleted-warn": "'''Upozorenje: Postavljate stranicu koja je prethodno brisana.'''\n\nRazmotrite da li je nastavljanje uređivanja ove stranice u skladu s pravilima.\nOvdje je naveden zapisnik brisanja i premještanja s obrazloženjem:",
-       "moveddeleted-notice": "Ova stranica je obrisana.\nZapis brisanja i pomjeranja stranice je prikazan ispod kao referenca.",
+       "moveddeleted-notice": "Ova stranica je obrisana.\nZapisnik brisanja i premještanja stranice je prikazan ispod kao referenca.",
        "log-fulllog": "Vidi potpuni zapisnik",
        "edit-hook-aborted": "Izmjena je poništena putem interfejsa.\nNije ponuđeno nikakvo objašnjenje.",
        "edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazan objekat",
        "content-json-empty-array": "Prazan niz",
-       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] sa više od jedne vrijednosti za paramentar \"$3\". Bit će prikazana samo posljednja vrijednosti.",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] sa više od jedne vrijednosti za parametar \"$3\". Koristit će se samo posljednja navedena vrijednost.",
        "duplicate-args-category": "Stranice sa istim argumentima kod poziva šablona",
        "duplicate-args-category-desc": "Stranica sadrži pozive šablona koji koriste argumente dvojnike, kao što su <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ili <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.\n\nTrebalo bi imati manje od $2 {{PLURAL:$2|poziv|poziva}}, a sad ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "parser-unstrip-loop-warning": "Pronađena petlja",
        "parser-unstrip-recursion-limit": "Prekoračeno ograničenje rekurzije ($1)",
        "converter-manual-rule-error": "Pronađena je greška u pravilu za ručno pretvaranje jezika",
-       "undo-success": "Izmjena se može vratiti.\nMolimo da provjerite usporedbu ispod da budete sigurni da to želite učiniti, a zatim spremite promjene da bi ste završili vraćanje izmjene.",
-       "undo-failure": "Izmjene se ne mogu vratiti zbog konflikta sa izmjenama u međuvremenu.",
+       "undo-success": "Izmjena se može vratiti.\nMolimo da provjerite usporedbu ispod da budete sigurni da ovo želite uraditi, a zatim sačuvajte promjene da bi ste završili vraćanje izmjene.",
+       "undo-failure": "Izmjena se ne može vratiti zbog sukoba izmjena.",
        "undo-norev": "Izmjena se ne može vratiti jer ne postoji ranija ili je obrisana.",
        "undo-nochange": "Izgleda da je izmjena već vraćena.",
-       "undo-summary": "Vraćena izmjena $1 [[Special:Contributions/$2|korisnika $2]] ([[User talk:$2|razgovor]])",
+       "undo-summary": "Vraćena izmjena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
        "cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
        "cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
        "cantcreateaccount-range-text": "Pravljenje računa sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4'''), je blokirao korisnik [[User:$3|$3]].\n\nNavedeni razlog korisnika $3 je ''$2''",
-       "viewpagelogs": "Pogledaj protokol ove stranice",
+       "viewpagelogs": "Pogledaj zapisnike ove stranice",
        "nohistory": "Ne postoji historija izmjena za ovu stranicu.",
        "currentrev": "Trenutna revizija",
        "currentrev-asof": "Trenutna revizija na dan $1",
-       "revisionasof": "Revizija od $1",
+       "revisionasof": "Verzija od $1",
        "revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
-       "previousrevision": "←Starije izmjene",
+       "previousrevision": "← Starija izmjena",
        "nextrevision": "Novija izmjena →",
        "currentrevisionlink": "Trenutna verzija",
        "cur": "tren",
        "rev-deleted-diff-view": "Jedna od revizija u ovoj razlici je '''obrisana'''.\nVi možete vidjeti ovu razliku; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].",
        "rev-suppressed-diff-view": "Jedna od revizija u ovoj razlici je '''sakrivena'''.\nVi možete vidjeti ovu razliku; detalji se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku sakrivanja].",
        "rev-delundel": "pokaži/sakrij",
-       "rev-showdeleted": "Pokaži",
+       "rev-showdeleted": "prikaži",
        "revisiondelete": "Obriši/vrati revizije",
        "revdelete-nooldid-title": "Nije unesena tačna revizija",
-       "revdelete-nooldid-text": "Niste precizno odredili odredišnu reviziju/revizije da se izvrši ova funkcija, ili ta revizija nepostoji, ili pokušavate sakriti trenutnu reviziju.",
+       "revdelete-nooldid-text": "Niste odredili odredišnu verziju da se izvrši ova funkcija, ili ta verzija ne postoji, ili pokušavate sakriti trenutnu verziju.",
        "revdelete-no-file": "Navedena datoteka ne postoji.",
        "revdelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "revdelete-show-file-submit": "Da",
        "revdelete-concurrent-change": "Greška pri mijenjanju stavke od $2, $1: njen status je izmijenjen od strane nekog drugog dok ste je pokušavali mijenjati.\nMolimo provjerite zapise.",
        "revdelete-only-restricted": "Greška pri sakrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih opcija za uklanjanje.",
        "revdelete-reason-dropdown": "*Uobičajeni razlozi brisanja\n** Kršenje autorskih prava\n** Neprikladan komentar ili lični podac\n** Neprikladno korisničko ime\n** Uvredljivi podaci",
-       "revdelete-otherreason": "Ostali/dodatni razlog:",
+       "revdelete-otherreason": "Drugi/dodatni razlog:",
        "revdelete-reasonotherlist": "Ostali razlozi",
        "revdelete-edit-reasonlist": "Uredi razloge brisanja",
        "revdelete-offender": "Autor revizije:",
        "mergelog": "Zapisnik spajanja",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
-       "history-title": "Historija revizija \"$1\"",
-       "difference-title": "Razlike između revizija od \"$1\"",
+       "history-title": "Historija izmjena stranice \"$1\"",
+       "difference-title": "Razlike između verzija stranice \"$1\"",
        "difference-title-multipage": "Razlika između stranica \"$1\" i \"$2\"",
        "difference-multipage": "(Razlika između stranica)",
-       "lineno": "Linija $1:",
+       "lineno": "Red $1:",
        "compareselectedversions": "Uporedite označene verzije",
        "showhideselectedversions": "Pokaži/sakrij odabrane verzije",
-       "editundo": "ukloni ovu izmjenu",
+       "editundo": "vrati",
        "diff-empty": "(Nema razlike)",
        "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međurevizija|Nisu prikazane $1 međurevizije}} istog korisnika)",
+       "diff-multi-otherusers": "(Nije prikazana {{PLURAL:$1|jedna međuverzija|$1 međuverzija}} {{PLURAL:$2|drugog korisnika|$2 korisnika}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Jedna međurevizija|$1 međurevizije|$1 međurevizija}} od više od $2 {{PLURAL:$2|korisnika|korisnika}} {{PLURAL:$1|nije prikazana|nisu prikazane}})",
        "difference-missing-revision": "{{PLURAL:$2|Jedna izmjena|$2 izmjene}} od ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].",
        "searchresults": "Rezultati pretrage",
        "searchresults-title": "Rezultati pretrage za \"$1\"",
        "titlematches": "Naslov članka odgovara",
        "textmatches": "Tekst stranice odgovara",
-       "notextmatches": "Tekst članka ne odgovara",
+       "notextmatches": "Nijedan tekst stranice ne odgovara",
        "prevn": "{{PLURAL:$1|prethodni $1|prethodnih $1}}",
        "nextn": "{{PLURAL:$1|sljedeći $1|sljedećih $1}}",
        "prev-page": "prethodna stranica",
        "prevn-title": "{{PLURAL:$1|Prethodni $1 rezultat|Prethodna $1 rezultata|Prethodnih $1 rezultata}}",
        "nextn-title": "{{PLURAL:$1|Sljedeći $1 rezultat|Sljedeća $1 rezultata|Sljedećih $1 rezultata}}",
        "shown-title": "Pokaži $1 {{PLURAL:$1|rezultat|rezultata}} po stranici",
-       "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Postoji stranica pod nazivom \"[[:$1]]\" na ovoj wiki'''",
        "searchmenu-new": "<strong>Napravi stranicu \"[[:$1]]\" na ovoj wiki!</strong> {{PLURAL:$2|0=|Pogledajte također straniu pronađenu vašom pretragom.|Pogledajte također i vaše rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sadržaja",
        "search-relatedarticle": "Povezano",
        "searchrelated": "povezano",
        "searchall": "sve",
-       "showingresults": "Dolje {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
+       "showingresults": "Dolje {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano '''$1''' rezultata}} počev od #<strong>$2</strong>.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-togglelabel": "Označi:",
        "powersearch-toggleall": "Sve",
        "powersearch-togglenone": "Ništa",
+       "powersearch-remember": "Zapamti izbor za buduće pretrage",
        "search-external": "Vanjska pretraga",
-       "searchdisabled": "<p>Izvinjavamo se!  Puno pretraga teksta je privremeno onemogućena.  U međuvremenu, možete koristiti Google za pretragu.  Indeks može biti stariji.",
+       "searchdisabled": "Pretraga na stranici {{SITENAME}} je onemogućena.\nU međuvremenu možete tražiti preko Googlea.\nUpamtite da ispisi stranice {{SITENAME}} mogu biti zastarjeli.",
        "search-error": "Desila se greška prilikom pretraživanja: $1",
        "preferences": "Postavke",
        "mypreferences": "Postavke",
        "prefs-edits": "Broj izmjena:",
-       "prefs-skin": "Koža",
+       "prefsnologintext2": "Prijavite se da biste sačuvali postavke.",
+       "prefs-skin": "Tema",
        "skin-preview": "Pregled",
        "datedefault": "Nije bitno",
        "prefs-labs": "Eksperimentalne mogućnosti",
        "prefs-editwatchlist-raw": "Napredno uređivanje spiska praćenja",
        "prefs-editwatchlist-clear": "Očisti spisak praćenja",
        "prefs-watchlist-days": "Broj dana za prikaz u spisku praćenja:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|dan|dana}}",
+       "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Najveći broj izmjena za prikaz u proširenom spisku praćenja:",
        "prefs-watchlist-edits-max": "Najveći broj: 1000",
-       "prefs-watchlist-token": "Token spiska za praćenje:",
+       "prefs-watchlist-token": "Žeton praćenih članaka:",
        "prefs-misc": "Ostala podešavanja",
        "prefs-resetpass": "Promijeni šifru",
-       "prefs-changeemail": "Promijeni e-mail adresu",
+       "prefs-changeemail": "Promijeni adresu e-pošte",
        "prefs-setemail": "Postavite e-mail adresu",
-       "prefs-email": "E-mail opcije",
+       "prefs-email": "Opcije e-pošte",
        "prefs-rendering": "Izgled",
        "saveprefs": "Sačuvaj",
-       "restoreprefs": "Vrati sve pretpostavljene postavke (u svim sekcijama)",
+       "restoreprefs": "Vrati sve postavke na podrazumijevane (u svim odjeljcima)",
        "prefs-editing": "Uređivanje",
-       "rows": "Redova",
-       "columns": "Kolona",
-       "searchresultshead": "Podešavanja rezultata pretrage",
+       "rows": "Redova:",
+       "columns": "Kolona:",
+       "searchresultshead": "Pretraga",
        "stub-threshold": "Formatiranje <a href=\"#\" class=\"stub\">linkova stranica u začetku</a> (bajtova):",
-       "stub-threshold-disabled": "Isključen/a",
+       "stub-threshold-disabled": "Isključeno",
        "recentchangesdays": "Broj dana za prikaz u nedavnim izmjenama:",
-       "recentchangesdays-max": "(najviše $1 {{PLURAL:$1|dan|dana}})",
-       "recentchangescount": "Broj uređivanja za prikaz po pretpostavkama:",
-       "prefs-help-recentchangescount": "Ovo uključuje nedavne izmjene, historije stranice i zapise.",
+       "recentchangesdays-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
+       "recentchangescount": "Broj izmjena na nedavnim izmjenama:",
+       "prefs-help-recentchangescount": "Ovo uključuje nedavne izmjene, historije stranice i zapisnike.",
        "prefs-help-watchlist-token2": "Ovo je tajni ključ sažetka vašeg spiska izmjena. Ko god da ga zna, moći će ga čitati. Ne dijelite ga ni s kim. Ako je potrebno, [[Special:ResetTokens|možete ga ponovo postaviti]].",
        "savedprefs": "Vaše postavke su sačuvane.",
        "timezonelegend": "Vremenska zona:",
        "prefs-files": "Datoteke",
        "prefs-custom-css": "Prilagođeni CSS",
        "prefs-custom-js": "Prilagođeni JavaScript",
-       "prefs-common-css-js": "Dijeljeni CSS/JS za sve kože:",
+       "prefs-common-css-js": "Dijeljeni CSS/JavaScript za sve teme:",
        "prefs-reset-intro": "Možete koristiti ovu stranicu da poništite Vaše postavke na ovom sajtu na pretpostavljene vrijednosti.\nOvo se ne može vratiti unazad.",
-       "prefs-emailconfirm-label": "E-mail potvrda:",
-       "youremail": "E-mail:",
+       "prefs-emailconfirm-label": "Potvrda e-pošte:",
+       "youremail": "Adresa e-pošte:",
        "username": "{{GENDER:$1|Korisničko}} ime:",
        "prefs-memberingroups": "{{GENDER:$2|Korisnik|Korisnica}} je član {{PLURAL:$1|grupe|grupâ}}:",
        "prefs-registration": "Vrijeme registracije:",
        "yourlanguage": "Jezik:",
        "yourvariant": "Varijanta jezika:",
        "prefs-help-variant": "Vaša preferirana varijanta ili pravopis za prikaz sadržaja stranica na ovoj wiki.",
-       "yournick": "Nadimak (za potpise):",
+       "yournick": "Novi potpis:",
        "prefs-help-signature": "Komentari na stranicama za razgovor trebaju biti potpisani sa \"<nowiki>~~~~</nowiki>\" koje će biti pretvoreno u vaš potpis i vrijeme.",
        "badsig": "Loš sirovi potpis.\nProvjerite HTML tagove.",
        "badsiglength": "Vaš potpis je predug.\nMora biti manji od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
        "yourgender": "Kako želite da se predstavite?",
-       "gender-unknown": "Ne previše detaljno",
+       "gender-unknown": "Kad vas spominje, softver će pokušati koristiti srednji rod kad god je to moguće",
        "gender-male": "On uređuje wiki stranice",
        "gender-female": "Ona uređuje wiki stranice",
-       "prefs-help-gender": "Postavljanje ovih podešavanja je optionalno: Softver koristi ove vrijednosti za vaše naslovljanje i ispravke gramatičkog roda u porukama softvera. Ova informacija bit će javna.",
+       "prefs-help-gender": "Postavljanje ovih podešavanja nije obavezno.\nSoftver koristi ove vrijednosti za vaše naslovljanje i ispravke gramatičkog roda u porukama softvera. Ova će informacija biti javna.",
        "email": "E-mail",
        "prefs-help-realname": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje vašem radu.",
-       "prefs-help-email": "E-mail adresa je opcionalna, ali je potrebna jer omogućava da Vam se pošalje nova šifra u slučaju da je izgubite ili zaboravite.",
-       "prefs-help-email-others": "Također možete da odaberete da vas drugi kontaktiraju putem vaše korisničke stranice ili stranice za razgovor bez otkrivanja vašeg identiteta.",
+       "prefs-help-email": "Adresa e-pošte nije obavezna, ali je potrebna u slučaju ponovnog postavljanja šifre, ako je zaboravite.",
+       "prefs-help-email-others": "Također možete dopustiti drugim korisnicima da vas kontaktiraju preko linka na lijevoj strani vaše stranice ili stranice za razgovor.\nVaša adresa e-pošte neće biti prikazana drugim korisnicima koji vas kontaktiraju.",
        "prefs-help-email-required": "Neophodno je navesti e-mail adresu.",
        "prefs-info": "Osnovne informacije",
-       "prefs-i18n": "Internacionalizacije",
+       "prefs-i18n": "Internacionalizacija",
        "prefs-signature": "Potpis",
        "prefs-dateformat": "Format datuma",
        "prefs-timeoffset": "Vremenska razlika",
        "prefs-advancedediting": "Opće opcije",
-       "prefs-editor": "Urednik",
-       "prefs-preview": "Prethodni pregled",
+       "prefs-editor": "Uređivač",
+       "prefs-preview": "Pregled",
        "prefs-advancedrc": "Napredne opcije",
        "prefs-advancedrendering": "Napredne opcije",
        "prefs-advancedsearchoptions": "Napredne opcije",
        "prefs-diffs": "Razlike",
        "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.",
        "prefswarning-warning": "Napravili ste promjene u vašim postavkama koje još uvijek nisu sačuvane. Ako napustite ovu stranicu bez da pritisnete na \"$1\", postavke neće biti ažurirane.",
+       "prefs-tabs-navigation-hint": "Savjet: Možete koristiti tipke sa lijevom i desnom strelicom za kretanje kroz kartice.",
        "email-address-validity-valid": "Izgleda valjano",
        "email-address-validity-invalid": "Neophodna valjana adresa!",
        "userrights": "Postavke korisničkih prava",
        "userrights-lookup-user": "Menadžment korisničkih grupa",
-       "userrights-user-editname": "Unesi korisničko ime:",
+       "userrights-user-editname": "Upišite korisničko ime:",
        "editusergroup": "Uredi korisničke grupe",
        "editinguser": "Mijenjate korisnička prava korisnika <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Uredi korisničke grupe",
        "group-user-member": "{{GENDER:$1|korisnik|korisnica}}",
        "group-autoconfirmed-member": "Potvrđeni korisnik",
        "group-bot-member": "bot",
-       "group-sysop-member": "Administrator",
-       "group-bureaucrat-member": "Birokrat",
+       "group-sysop-member": "{{GENDER:$1|administrator|administratorica}}",
+       "group-bureaucrat-member": "{{GENDER:$1|birokrat|birokratica}}",
        "group-suppress-member": "Nadzornik",
        "grouppage-user": "{{ns:project}}:Korisnici",
        "grouppage-autoconfirmed": "{{ns:project}}:Potvrđeni korisnici",
        "right-protect": "Promjena nivoa zaštite i uređivanje kaskadno zaštićenih stranica",
        "right-editprotected": "Uređivanje stranice zaštićenih kao \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Uređivanje stranica zaštićenih kao  \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Uređivanje modela sadržaja stranice",
        "right-editinterface": "Uređivanje korisničkog interfejsa",
        "right-editusercssjs": "Uređivanje CSS i JS datoteka drugih korisnika",
        "right-editusercss": "Uređivanje CSS datoteka drugih korisnika",
        "right-passwordreset": "Pogledaj e-mailove za obnavljanje šifre",
        "right-managechangetags": "Napravi i briši [[Special:Tags|oznake]] iz baze podataka",
        "right-applychangetags": "Primijeni [[Special:Tags|oznake]] na nečije izmjene",
+       "right-changetags": "Dodavanje ili uklanjanje raznih [[Special:Tags|oznaka]] na pojedinačnim verzijama i unosima zapisnika",
        "newuserlogpage": "Zapisnik novih korisnika",
        "newuserlogpagetext": "Ovo je zapis o registraciji novih korisnika.",
        "rightslog": "Zapisnik korisničkih prava",
-       "rightslogtext": "Ovo je zapis promjena korisničkih prava.",
+       "rightslogtext": "Ovo je zapisnik promjena korisničkih prava.",
        "action-read": "čitate ovu stranicu",
        "action-edit": "uređujete ovu stranicu",
        "action-createpage": "napravite stranicu",
        "action-viewmywatchlist": "pogledajte svoj spisak praćenih stranica",
        "action-viewmyprivateinfo": "pogledajte svoje privatne informacije",
        "action-editmyprivateinfo": "uredite svoje privatne podatke",
+       "action-editcontentmodel": "uredi model sadržaja stranice",
        "action-managechangetags": "napravite i uklonite oznake iz baze podataka",
+       "action-applychangetags": "dodate oznake uz vaše izmjene",
+       "action-changetags": "dodate ili uklonite razne oznake na pojedinačnim verzijama i unosima u zapisnicima",
        "nchanges": "$1 {{PLURAL:$1|promjena|promjene|promjena}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmjena od Vaše posljedne posjete}}",
        "enhancedrc-history": "historija",
        "recentchanges-summary": "Na ovoj stranici možete pratiti nedavne izmjene.",
        "recentchanges-noresult": "U zadanom vremenu nema promjena za zadane kriterije.",
        "recentchanges-feed-description": "Na ovoj stranici možete pratiti nedavne izmjene.",
-       "recentchanges-label-newpage": "Ovom izmjenom pravi se nova stranica",
-       "recentchanges-label-minor": "Ovo je mala izmjena",
-       "recentchanges-label-bot": "Ovu izmjenu napravio je bot",
+       "recentchanges-label-newpage": "Nova stranica",
+       "recentchanges-label-minor": "Manja izmjena",
+       "recentchanges-label-bot": "Izmjenu napravio bot",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
-       "recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
+       "recentchanges-label-plusminus": "Promjena veličine stranice u bajtovima",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (također pogledajte [[Special:NewPages|spisak novih stranica]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove izmjene počev od $3 $2",
-       "rcshowhideminor": "$1 male izmjene",
-       "rcshowhideminor-show": "Pokaži",
+       "rcshowhideminor": "$1 manje izmjene",
+       "rcshowhideminor-show": "Prikaži",
        "rcshowhideminor-hide": "Sakrij",
        "rcshowhidebots": "$1 botove",
-       "rcshowhidebots-show": "Pokaži",
+       "rcshowhidebots-show": "Prikaži",
        "rcshowhidebots-hide": "Sakrij",
-       "rcshowhideliu": "$1 registrovanih korisnika",
-       "rcshowhideliu-show": "Pokaži",
+       "rcshowhideliu": "$1 registrovane korisnike",
+       "rcshowhideliu-show": "Prikaži",
        "rcshowhideliu-hide": "Sakrij",
        "rcshowhideanons": "$1 anonimne korisnike",
-       "rcshowhideanons-show": "Pokaži",
+       "rcshowhideanons-show": "Prikaži",
        "rcshowhideanons-hide": "Sakrij",
        "rcshowhidepatr": "$1 patrolirane izmjene",
-       "rcshowhidepatr-show": "Pokaži",
+       "rcshowhidepatr-show": "Prikaži",
        "rcshowhidepatr-hide": "Sakrij",
        "rcshowhidemine": "$1 moje izmjene",
-       "rcshowhidemine-show": "Pokaži",
+       "rcshowhidemine-show": "Prikaži",
        "rcshowhidemine-hide": "Sakrij",
-       "rclinks": "Prikaži najskorijih $1 izmjena u posljednjih $2 dana<br />$3",
+       "rclinks": "Prikaži posljednjih $1 izmjena u posljednjih $2 dana<br />$3",
        "diff": "razl",
        "hist": "hist",
        "hide": "Sakrij",
-       "show": "Pokaži",
+       "show": "Prikaži",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "rc_categories": "Ograniči na kategorije (razdvojene sa \"|\")",
        "rc_categories_any": "Sve",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajta|bajtova}} poslije izmjene",
-       "newsectionsummary": "/* $1 */ nova sekcija",
+       "newsectionsummary": "/* $1 */ novi odjeljak",
        "rc-enhanced-expand": "Pokaži detalje",
        "rc-enhanced-hide": "Sakrij detalje",
        "rc-old-title": "prvobitno kreirano kao \"$1\"",
        "recentchangeslinked-to": "Pokaži promjene stranica koji su povezane sa datom stranicom",
        "upload": "Postavi datoteku",
        "uploadbtn": "Postavi datoteku",
-       "reuploaddesc": "Vratite se na upitnik za slanje.",
+       "reuploaddesc": "Vrati me na formular za postavljanje datoteka.",
        "upload-tryagain": "Pošaljite izmijenjeni opis datoteke",
        "uploadnologin": "Niste prijavljeni",
-       "uploadnologintext": "Morate biti $1 da bi ste slali datoteke.",
+       "uploadnologintext": "Morate biti $1 kako biste postavljali datoteke.",
        "upload_directory_missing": "Folder za postavljanje ($1) nedostaje i webserver ga ne može napraviti.",
        "upload_directory_read_only": "Folder za postavljanje ($1) na webserveru je postavljen samo za čitanje.",
        "uploaderror": "Greška pri slanju",
        "upload-recreate-warning": "<strong>Upozorenje: Datoteka s tim imenom je obrisana ili premještena.</strong>\nZapisnik brisanja i premještanja za ovu stranicu dostupan je ovdje:",
        "uploadtext": "Koristite formu ispod za postavljanje datoteka.\nDa bi ste vidjeli ili pretražili ranije postavljene datoteke, pogledajte [[Special:FileList|spisak postavljenih datoteka]], ponovna postavljanja su također zapisana u [[Special:Log/upload|zapisnik postavljanja]], a brisanja u [[Special:Log/delete|zapisnik brisanja]].\n\nDa bi ste prikazali datoteku na stranici, koristite link na jedan od slijedećih načina:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.jpg]]</nowiki></code>''' da upotrijebite potpunu veziju datoteke\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datoteka.png|200px|thumb|lijevo|opis slike]]</nowiki></code>''' da upotrijebite smanjeni prikaz širine 200 piksela unutar okvira, s lijevim poravnanjem i ''opisom slike''.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datoteka.ogg]]</nowiki></code>''' za direkno povezivanje datoteke bez njenog prikazivanja",
-       "upload-permitted": "Podržane vrste datoteka: $1.",
-       "upload-preferred": "Preferirane vrste datoteka: $1.",
-       "upload-prohibited": "Zabranjene vrste datoteka: $1.",
+       "upload-permitted": "{{PLURAL:$2|Podržana vrsta|Podržane vrste}} datoteka: $1.",
+       "upload-preferred": "{{PLURAL:$2|Preferirana vrsta|Preferirane vrste}} datoteka: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Zabranjena vrsta|Zabranjene vrste}} datoteka: $1.",
        "uploadlogpage": "Zapisnik postavljanja",
        "uploadlogpagetext": "Ispod je spisak nedavno postavljenih datoteka.\nZa vizualni pregled datoteka, [[Special:NewFiles|pogledajte galeriju novih slika]].",
        "filename": "Ime datoteke",
        "tmp-create-error": "Nije moguće napraviti privremenu datoteku.",
        "tmp-write-error": "Greška pri pisanju privremene datoteke.",
        "large-file": "Preporučeno je da datoteke nisu veće od $1;\nOva datoteka je velika $2.",
-       "largefileserver": "Ova datoteka je veća nego što server dopušta.",
+       "largefileserver": "Ova datoteka je veća nego što je dozvoljeno u postavkama servera.",
        "emptyfile": "Datoteka koju ste poslali je prazna. Ovo je moguće zbog greške u imenu datoteke. Molimo Vas da provjerite da li stvarno želite da pošaljete ovu datoteku.",
        "windows-nonascii-filename": "Ova wiki ne podržava imena datoteka sa posebnim znacima.",
        "fileexists": "Datoteka sa ovim imenom već postoji, molimo Vas provjerite <strong>[[:$1]]</strong> ako {{GENDER:|niste}} sigurni da je želite promjeniti.\n[[$1|thumb]]",
        "fileexists-shared-forbidden": "Datoteka s ovim imenom već postoji u zajedničkoj ostavi. Molimo Vas da se vratite i pošaljete ovu datoteku pod novim imenom. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Ova datoteka je dvojnik {{PLURAL:$1|slijedećoj datoteci|slijedećim datotekama}}:",
        "file-deleted-duplicate": "Datoteka koje je identična ovoj datoteci ([[:$1]]) je ranije bila obrisana. Trebate provjeriti historiju brisanja te datoteke prije nego što nastavite sa njenim ponovnim postavljanjem.",
-       "uploadwarning": "Upozorenje pri slanju",
+       "file-deleted-duplicate-notitle": "Datoteka identična ovoj prethodno je obrisana i ime joj je sakriveno.\nTrebali biste pitati nekog ko može vidjeti podatke skrivenih datoteka da pregleda situaciju prije nego što ponovo postavite datoteku.",
+       "uploadwarning": "Upozorenje pri postavljanju",
        "uploadwarning-text": "Molimo izmijeniti opis datoteke ispod i pokušajte kasnije.",
        "savefile": "Sačuvaj datoteku",
        "uploaddisabled": "Slanje fajlova je isključeno",
        "uploaddisabledtext": "Postavljanje datoteka je onemogućeno.",
        "php-uploaddisabledtext": "Postavljanje datoteka preko PHP je onemogućeno. Molimo provjerite postavku file_uploads.",
        "uploadscripted": "Ova datoteka sadrži HTML ili skriptni kod koji može izazvati grešku kod internet preglednika.",
+       "upload-scripted-pi-callback": "Datoteka koja sadrži instrukcije za obradu XML stilskog oblika se ne može postaviti.",
+       "uploaded-script-svg": "Pronađen skriptni element \"$1\" u postavljenoj SVG datoteci.",
+       "uploaded-hostile-svg": "Pronađen nesiguran CSS u stilskom elementu postavljene SVG datoteke.",
+       "uploaded-event-handler-on-svg": "Nije dozvoljeno postavljanje atributa koji kontroliraju događaje <code>$1=\"$2\"</code> u SVG datotekama.",
+       "uploaded-href-attribute-svg": "href atributi <code>&lt;$1 $2=\"$3\"&gt;</code> sa nelokalnom metom (npr. http://, javascript:, etc) nisu dozvoljeni u SVG datotekama.",
+       "uploaded-href-unsafe-target-svg": "Pronađen href sa nesigurnom metom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
+       "uploaded-animate-svg": "Pronađena \"animate\" oznaka koja možda mijenja href koristeći se \"from\" atributom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
+       "uploaded-setting-event-handler-svg": "Postavljanje kontrole događaja je blokirano, pronađeno <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
+       "uploaded-setting-href-svg": "Blokirano je korištenje \"set\" oznake kako bi se dodao \"href\" atribut glavnom elementu.",
+       "uploaded-wrong-setting-svg": "Blokirano je korištenje oznake \"set\" kako bi se dodao atribut udaljenoj/podatkovnoj/skriptnoj meti. Pronađeno <code>&lt;set to=\"$1\"&gt;</code> u postavljenoj SVG datoteci.",
+       "uploaded-setting-handler-svg": "SVG datoteka koja koristi atribut \"handler\" sa udaljenom/podatkovnoj/skriptnom vrijednosti je blokirana. Pronađeno <code>$1=\"$2\"</code> u postavljenoj SVG datoteci.",
+       "uploaded-remote-url-svg": "SVG datoteka koja postavlja stilski atribut koristeći se vanjskim linkom je blokiranja. Pronađeno <code>$1=\"$2\"</code> u postavljenoj SVG datoteci.",
+       "uploaded-image-filter-svg": "Pronađen slikovni filter sa URLom: <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
+       "uploadscriptednamespace": "Ova SVG datoteka sadrži pogrešan imenski prostor \"$1\".",
+       "uploadinvalidxml": "Nije moguće raščlaniti XML postavljene datoteke.",
        "uploadvirus": "Datoteka sadrži virus!  Detalji:  $1",
        "uploadjava": "Datoteka je ZIP datoteka koja sadrži Java .class datoteku.\nPostavljanje Java datoteka nije dopušteno, jer one mogu prouzrokovati da se zaobiđu sigurnosne zabrane.",
        "upload-source": "Izvorna datoteka",
        "backend-fail-notsame": "Već postoji različita datoteka $1.",
        "backend-fail-invalidpath": "$1 nije valjana putanja za skladištenje.",
        "backend-fail-delete": "Ne može se izbrisati datoteka $1.",
+       "backend-fail-describe": "Ne mogu promijeniti metapodatke za datoteku \"$1\".",
        "backend-fail-alreadyexists": "Datoteka $1 već postoji.",
        "backend-fail-store": "Ne može se spremiti datoteka $1 na $2.",
        "backend-fail-copy": "Nije uspjelo kopiranje datoteke \"$1\" u \"$2\".",
        "backend-fail-closetemp": "Ne mogu zatvoriti privremenu datoteku.",
        "backend-fail-read": "Ne mogu čitati datoteku $1.",
        "backend-fail-create": "Ne mogu napraviti datoteku $1.",
+       "backend-fail-maxsize": "Ne mogu zapisati datoteku \"$1\" jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.",
        "backend-fail-readonly": "Skladišna osnova \"$1\" je trenutno samo za čitanje. Navedeni razlog je: \"$2\"",
        "backend-fail-synced": "Datoteka \"$1\" je u nekonzistentnom stanju u internom skladištu",
        "backend-fail-connect": "Ne mogu se povezati sa pozadinskim spremištem \"$1\".",
        "backend-fail-internal": "Došlo je do nepoznate greške u skladišnoj osnovi \"$1\".",
        "backend-fail-contenttype": "Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smjestim u \"$1\".",
        "backend-fail-batchsize": "Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|datotečne operacije|datotečne operacije|datotečnih operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.",
+       "backend-fail-usable": "Ne mogu pročitati ili zapisati datoteku \"$1\" jer nemate odgovarajuća prava ili folderi/sadržioci ne postoje.",
+       "filejournal-fail-dbconnect": "Ne mogu se povezati s novinarskom bazom podataka za skladišnu osnovu \"$1\".",
+       "filejournal-fail-dbquery": "Ne mogu ažurirati novinarsku bazu za skladišnu osnovu \"$1\".",
        "lockmanager-notlocked": "Ne mogu otključati \"$1\"; nije zaključan.",
        "lockmanager-fail-closelock": "Ne mogu zatvoriti \"lock\"-datoteku za \"$1\".",
        "lockmanager-fail-deletelock": "Ne mogu obrisati \"lock\"-datoteku za \"$1\".",
        "lockmanager-fail-releaselock": "Ne mogu osloboditi katanac za „$1“.",
        "lockmanager-fail-db-bucket": "Ne mogu da kontaktiram s dovoljno \"lock\"-baza u kanti $1.",
        "lockmanager-fail-db-release": "Ne mogu osloboditi katance u bazi $1.",
+       "lockmanager-fail-svr-acquire": "Ne mogu dobiti katance na serveru $1.",
        "lockmanager-fail-svr-release": "Ne mogu se otključati katanci na serveru file $1.",
        "zip-file-open-error": "Desila se greška pri otvaranju datoteke za provjere ZIP-a.",
        "zip-wrong-format": "Navedena datoteka nije bila ZIP datoteka.",
        "upload-curl-error28-text": "Stranici je potrebno previše vremena za odgovor.\nMolimo provjerite da li je stranica postavljena, malo pričekajte i pokušajte ponovno.\nMožda možete pokušati kada bude manje opterećenje.",
        "license": "Licenca:",
        "license-header": "Licenciranje",
-       "nolicense": "Ništa nije odabrano",
+       "nolicense": "Nijedna nije izabrana",
        "licenses-edit": "Uredi izbor licenci",
        "license-nopreview": "(Pregled nije dostupan)",
        "upload_source_url": "(vaša izabrana datoteka od validnih, javno dostupnih URL-a)",
        "listfiles_size": "Veličina",
        "listfiles_description": "Opis",
        "listfiles_count": "Verzije",
+       "listfiles-show-all": "Obuhvati stare verzije slika",
        "listfiles-latestversion": "Trenutna verzija",
        "listfiles-latestversion-yes": "Da",
        "listfiles-latestversion-no": "Ne",
        "imagelinks": "Upotreba datoteke",
        "linkstoimage": "{{PLURAL:$1|Slijedeća stranica koristi|Slijedećih $1 stranica koriste}} ovu sliku:",
        "linkstoimage-more": "Više od $1 {{PLURAL:$1|datoteke|datoteka}} povezano je s ovom datotekom.\nSljedeći spisak pokazuje samo {{PLURAL:$1|prvu stranicu povezanu|prve $1 stranice povezane|prvih $1 stranica povezanih}} s ovom datotekom.\nOvdje je dostupan [[Special:WhatLinksHere/$2|potpuni spisak]].",
-       "nolinkstoimage": "Nema stranica koje koriste ovu sliku.",
+       "nolinkstoimage": "Nema stranica koje koriste ovu datoteku.",
        "morelinkstoimage": "Vidi [[Special:WhatLinksHere/$1|ostale linkove]] prema ovoj datoteci.",
        "linkstoimage-redirect": "$1 (preusmjerenje datoteke) $2",
        "duplicatesoffile": "{{PLURAL:$1|Slijedeća datoteka je dvojnik|Slijedeće $1 datoteke su dvojnici}} ove datoteke ([[Special:FileDuplicateSearch/$2|detaljnije]]):",
        "filedelete-success-old": "Verzija datoteke '''[[Media:$1|$1]]''' od $3, $2 je obrisana.",
        "filedelete-nofile": "'''$1''' ne postoji.",
        "filedelete-nofile-old": "Ne postoji arhivirana verzija '''$1''' sa navedenim atributima.",
-       "filedelete-otherreason": "Ostali/dodatni razlozi:",
+       "filedelete-otherreason": "Drugi/dodatni razlog:",
        "filedelete-reason-otherlist": "Ostali razlozi",
        "filedelete-reason-dropdown": "*Uobičajeni razlozi brisanja\n** Kršenje autorskih prava\n** Datoteka dvojnik",
        "filedelete-edit-reasonlist": "Uredi razloge brisanja",
        "download": "učitaj",
        "unwatchedpages": "Nepraćene stranice",
        "listredirects": "Spisak preusmjerenja",
+       "listduplicatedfiles": "Spisak duplih datoteka",
+       "listduplicatedfiles-summary": "Ovo je spisak datoteka koje su duplikat nekih drugih datoteka. Prikazane su samo lokalne datoteke.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|jedan duplikat|$2 duplikata}}]].",
        "unusedtemplates": "Nekorišteni šabloni",
        "unusedtemplatestext": "Ova stranica prikazuje sve stranice u imenskom prostoru {{ns:template}} koji se ne koriste.\nPrije brisanja provjerite da li druge stranice vode na te šablone.",
        "unusedtemplateswlh": "ostali linkovi",
        "pageswithprop-text": "Ova stranica prikazuje stranice koje imaju određeno svojstvo.",
        "pageswithprop-prop": "Naziv svojstva:",
        "pageswithprop-submit": "Idi",
+       "pageswithprop-prophidden-long": "sakriveno dugo tekstualno svojstvo ($1)",
+       "pageswithprop-prophidden-binary": "sakriveno dugo binarno svojstvo ($1)",
        "doubleredirects": "Dvostruka preusmjerenja",
        "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.\nSvaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje \"pravi\" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.\n<del>Precrtane</del> stavke su riješene.",
        "double-redirect-fixed-move": "[[$1]] je premješten.\nAutomatski je ažuriran i sada preusmjerava na [[$2]].",
        "double-redirect-fixed-maintenance": "Automatsko ospravljanje dvostrukih preusmjerenja sa [[$1]] na [[$2]] je posao održavanja.",
        "double-redirect-fixer": "Popravljač preusmjerenja",
        "brokenredirects": "Pokvarena preusmjerenja",
-       "brokenredirectstext": "Slijedeća preusmjerenja vode na nepostojeće stranice:",
+       "brokenredirectstext": "Sljedeća preusmjerenja vode na nepostojeće stranice:",
        "brokenredirects-edit": "uredi",
        "brokenredirects-delete": "obriši",
        "withoutinterwiki": "Članci bez interwiki linkova",
        "withoutinterwiki-summary": "Slijedeće stranice nemaju linkove prema verzijama na drugim jezicima.",
        "withoutinterwiki-legend": "Prefiks",
-       "withoutinterwiki-submit": "Pokaži",
+       "withoutinterwiki-submit": "Prikaži",
        "fewestrevisions": "Stranice sa najmanje izmjena",
        "nbytes": "$1 {{PLURAL:$1|bajt|bajtova}}",
        "ncategories": "$1 {{PLURAL:$1|kategorija|kategorije}}",
        "ninterwikis": "$1 {{PLURAL:$1|međujezična veza|međujezične veze}}",
        "nlinks": "$1 {{PLURAL:$1|veza|veze}}",
        "nmembers": "$1 {{PLURAL:$1|član|članova}}",
-       "nrevisions": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|član|člana|članova}}",
+       "nrevisions": "$1 {{PLURAL:$1|verzija|verzije|verzija}}",
        "nimagelinks": "Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "ntransclusions": "koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
-       "specialpage-empty": "Nepostoje rezultati za ovaj izvještaj.",
-       "lonelypages": "Siročići",
+       "specialpage-empty": "Nema rezultata za ovaj izvještaj.",
+       "lonelypages": "Siročad",
        "lonelypagestext": "Slijedeće stranice nemaju linkove na ostalim stranicama na ovoj {{SITENAME}}.",
        "uncategorizedpages": "Nekategorisane stranice",
        "uncategorizedcategories": "Nekategorisane kategorije",
        "uncategorizedimages": "Slike bez kategorije",
        "uncategorizedtemplates": "Šabloni bez kategorije",
        "unusedcategories": "Neiskorištene kategorije",
-       "unusedimages": "Neupotrebljene slike",
+       "unusedimages": "Nekorištene slike",
        "wantedcategories": "Tražene kategorije",
-       "wantedpages": "Tražene stranice",
+       "wantedpages": "Najpotrebnije stranice",
+       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza ka njima. Na spisku se ne nalaze stranice do kojih vode preusmjerenja. Za spisak nepostojećih stranica na koje su povezana preumsjerenja, pogledajte [[{{#special:BrokenRedirects}}|spisak pokvarenih preusmerenja]].",
        "wantedpages-badtitle": "Nevaljan naslov u setu rezultata: $1",
        "wantedfiles": "Tražene datoteke",
        "wantedfiletext-cat": "Sljedeće datoteke se koriste, ali ne postoje. Datoteke iz drugih baza mogu biti navedene iako ne postoje. Takve datoteke će biti <del>izbrisane</del> sa spiska. Pored toga, stranice koje sadrže nepostojeće datoteke se nalaze u [[:$1]].",
+       "wantedfiletext-cat-noforeign": "Sljedeće datoteke se koriste, ali ne postoje. Dodatno, stranice koje ugrađuju datoteke koje ne postoje prikazane su u [[:$1]].",
        "wantedfiletext-nocat": "Sljedeće datoteke se koriste, ali ne postoje. Datoteke iz drugih baza mogu biti navedene iako ne postoje. Takve datoteke će biti <del>izbrisane</del> sa spiska.",
+       "wantedfiletext-nocat-noforeign": "Sljedeće datoteke se koriste, ali ne postoje.",
        "wantedtemplates": "Potrebni šabloni",
        "mostlinked": "Članci sa najviše linkova",
        "mostlinkedcategories": "Kategorije sa najviše linkova",
        "mostlinkedtemplates": "Najviše uključene stranice",
        "mostcategories": "Članci sa najviše kategorija",
-       "mostimages": "Najviše linkovane slike",
+       "mostimages": "Datoteke s najviše veza",
+       "mostinterwikis": "Stranice sa najviše međuwikija",
        "mostrevisions": "Članci sa najviše izmjena",
        "prefixindex": "Sve stranice sa prefiksom",
        "prefixindex-namespace": "Sve stranice s predmetkom (imenski prostor $1)",
+       "prefixindex-strip": "Sakrij prefiks u spisku",
        "shortpages": "Kratke stranice",
        "longpages": "Dugačke stranice",
-       "deadendpages": "Stranice bez internih veza",
+       "deadendpages": "Stranice bez unutrašnjih veza",
        "deadendpagestext": "Slijedeće stranice nisu povezane s drugim stranicama na {{SITENAME}}.",
        "protectedpages": "Zaštićene stranice",
        "protectedpages-indef": "Samo neograničena zaštićenja",
+       "protectedpages-summary": "Na ovoj stranici se nalazi spisak trenutno zaštićenih stranica. Za spisak zaštićenih naslova vidi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Samo prenosive zaštite",
        "protectedpages-noredirect": "Sakrij preusmjerenja",
        "protectedpagesempty": "Trenutno nijedna stranica nije zaštićena ovim parametrima.",
        "ancientpages": "Najstarije stranice",
        "move": "Premjesti",
        "movethispage": "Premjesti ovu stranicu",
-       "unusedimagestext": "Slijedeće datoteke postoje ali nisu uključene ni u jednu stranicu.\nMolimo obratite pažnju da druge web stranice mogu biti povezane s datotekom putem direktnog URLa, tako da i pored toga mogu biti prikazane ovdje pored aktivne upotrebe.",
+       "unusedimagestext": "Slijedeće datoteke postoje ali nisu uključene ni u jednu stranicu.\nMolimo obratite pažnju da druge web stranice mogu biti povezane s datotekom putem direktnog URL-a, tako da i pored toga mogu biti prikazane ovdje pored aktivne upotrebe.",
        "unusedcategoriestext": "Sljedeće stranice kategorija postoje iako ih nijedan drugi članak ili kategorija ne koriste.",
        "notargettitle": "Nema cilja",
        "notargettext": "Niste naveli ciljnu stranicu ili korisnika\nna kome bi se izvela ova funkcija.",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "apihelp": "API pomoć",
        "apihelp-no-such-module": "Modul \"$1\" nije pronađen.",
-       "booksources": "Štampani izvori",
+       "booksources": "Književni izvori",
        "booksources-search-legend": "Traži književne izvore",
        "booksources-search": "Traži",
        "booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
        "logempty": "Nema zatraženih članaka u zapisniku.",
        "log-title-wildcard": "Traži naslove koji počinju ovim tekstom",
        "showhideselectedlogentries": "Pokaži/sakrij izabrane zapise u evidenciji",
+       "log-edit-tags": "Uredi oznake izabranih zapisničkih unosa",
        "allpages": "Sve stranice",
-       "nextpage": "Sljedeća strana ($1)",
+       "nextpage": "Sljedeća stranica ($1)",
        "prevpage": "Prethodna stranica ($1)",
        "allpagesfrom": "Prikaži stranice počev od:",
        "allpagesto": "Prikaži stranice koje završavaju na:",
-       "allarticles": "Svi članci",
+       "allarticles": "Sve stranice",
        "allinnamespace": "Sve stranice (imenski prostor $1)",
        "allpagessubmit": "Idi",
        "allpagesprefix": "Prikaži stranice sa prefiksom:",
        "linksearch-pat": "Šema traženja:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Traži",
-       "linksearch-text": "Mogu se koristiti općeniti izrazi poput \"*.wikipedia.org\".\nPotrebna je najmanje osnovna domena, naprimjer \"*.org.\"<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http:// ako nijedan protokol nije naveden).",
-       "linksearch-line": "$1 je povezan od $2",
-       "linksearch-error": "Džokeri se mogu pojavljivati samo na početku naziva servera.",
+       "linksearch-text": "Mogu se koristiti općeniti izrazi poput \"*.wikipedia.org\".\nPotrebna je najmanje osnovna domena, naprimjer \"*.org.\"<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: $1 (default je http:// ako nijedan protokol nije naveden).",
+       "linksearch-line": "$1 vodi sa $2",
+       "linksearch-error": "Džokeri se mogu pojavljivati samo na početku adrese.",
        "listusersfrom": "Prikaži korisnike koji počinju sa:",
-       "listusers-submit": "Pokaži",
+       "listusers-submit": "Prikaži",
        "listusers-noresult": "Nije pronađen korisnik.",
        "listusers-blocked": "(blokiran)",
        "activeusers": "Spisak aktivnih korisnika",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
        "listgrouprights-namespaceprotection-restrictedto": "Prava kojima se dozvoljava korisniku da uređuje",
        "trackingcategories": "Praćenje kategorija",
+       "trackingcategories-summary": "Ova stranica prikazuje prateće kategorije koje MediaWiki softver automatski popunjava. Njihovi nazivi se mogu promijeniti izmjenom odgovarajućih sistemskih poruka u imenskom prostoru {{ns:8}}.",
        "trackingcategories-msg": "Praćenje kategorije",
        "trackingcategories-name": "Ime poruke",
        "trackingcategories-desc": "Kriterij uključenja kategorije",
+       "noindex-category-desc": "Roboti ne indeksiraju stranicu jer u sebi ima magičnu riječ <code><nowiki>__NOINDEX__</nowiki></code>, te je u imenskom prostoru u kome ta oznaka nije dozvoljena.",
+       "index-category-desc": "Stranica ima u sebi <code><nowiki>__INDEX__</nowiki></code> (te se nalazi u imenskom prostoru gdje je ta oznaka dozvoljena) pa je, samim tim, roboti indeksiraju.",
+       "post-expand-template-inclusion-category-desc": "Veličina stranice prelazi <code>$wgMaxArticleSize</code> nakon proširenja svih šablona, te zbog toga neki šabloni nisu prošireni.",
+       "post-expand-template-argument-category-desc": "Veličina stranice prelazi <code>$wgMaxArticleSize</code> nakon proširenja defincije šablona (nešto što je u trima vitičastim zagradama, poput <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "Stranica koristi previše ekspenzivnih parserskih funkcija (poput <code>#ifexist</code>). Pogledajte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Stranica sadrži pokvareni link ka datoteci (link koji se nadovezuje na nepostojeću datoteku).",
+       "hidden-category-category-desc": "Kategorija u sebi sadrži <code><nowiki>__HIDDENCAT__</nowiki></code> te se samim tim ne prikazuju u odjeljku za kategoriju na stranicama.",
        "trackingcategories-nodesc": "Opis nije dostupan.",
        "trackingcategories-disabled": "Kategorija je onemogućena",
        "mailnologin": "Nema adrese za slanje",
        "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]\nda biste slali e-poštu drugim korisnicima.",
-       "emailuser": "Pošalji e-poštu ovom korisniku",
+       "emailuser": "Pošalji e-poštu",
        "emailuser-title-target": "Pošalji e-poruku {{GENDER:$1|korisniku|korisnici|korisniku}}",
        "emailuser-title-notarget": "Pošalji e-mail korisniku",
-       "emailpage": "Pošalji e-mail korisniku",
-       "emailpagetext": "Možete korisiti formu ispod za slanje e-mail poruka {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku}}.\nE-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.",
+       "emailpagetext": "Možete korisiti obrazac ispod za slanje poruke e-poštom {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku}}.\nAdresa e-pošte koju ste unijeli u [[Special:Preferences|svojim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.",
        "defemailsubject": "{{SITENAME}} e-pošta od {{GENDER:$1|korisnika|korisnice|korisnika}} $1",
        "usermaildisabled": "Korisnički e-mail onemogućen",
        "usermaildisabledtext": "Ne možete poslati e-mail drugim korisnicima na ovoj wiki",
        "emailtarget": "Unesite korisnika za primanje e-mailova",
        "emailusername": "Korisničko ime:",
        "emailusernamesubmit": "Pošalji",
-       "email-legend": "Slanje e-maila drugom {{SITENAME}} korisniku",
+       "email-legend": "Slanje e-poruke drugom {{SITENAME}} korisniku",
        "emailfrom": "Od:",
        "emailto": "Za:",
-       "emailsubject": "Tema:",
+       "emailsubject": "Naslov:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi kopiju moje poruke.",
+       "emailccme": "Pošalji mi kopiju moje poruke e-poštom.",
        "emailccsubject": "Kopiraj Vašu poruku za $1: $2",
        "emailsent": "Poruka poslata",
        "emailsenttext": "Vaša poruka je poslata e-poštom.",
-       "emailuserfooter": "Ovaj e-mail je poslao $1 korisniku $2 putem funkcije \"Pošalji e-mail korisniku\" sa {{SITENAME}}.",
+       "emailuserfooter": "Ovaj e-mail je poslao $1 korisniku $2 putem funkcije \"{{int:emailuser}}\" sa {{SITENAME}}.",
        "usermessage-summary": "Ostavljanje sistemske poruke.",
        "usermessage-editor": "Sistem za poruke",
-       "watchlist": "Praćeni članci",
-       "mywatchlist": "Praćeni članci",
+       "watchlist": "Spisak praćenja",
+       "mywatchlist": "Spisak praćenja",
        "watchlistfor2": "Za $1 $2",
        "nowatchlist": "Nemate ništa na svom spisku praćenih članaka.",
-       "watchlistanontext": "Molimo logujte se da vidite ili uredite stavke na Vašem spisku praćenja.",
+       "watchlistanontext": "Morate biti prijavljeni kako biste vidjeli ili uređivali svoj spisak praćenih članaka.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak praćenja",
        "addedwatchtext": "Stranica \"[[:$1]]\" je dodata vašem [[Special:Watchlist|spisku praćenih članaka]]. \nBuduće promjene ove stranice i njoj pridružene stranice za razgovor će biti navedene ovdje.",
        "removedwatchtext-short": "Stranica \"$1\" je uklonjena sa vašeg spiska praćenja.",
        "watch": "Prati članak",
        "watchthispage": "Prati ovu stranicu",
-       "unwatch": "Ukinite praćenje",
+       "unwatch": "Prestani pratiti",
        "unwatchthispage": "Ukinite praćenje",
        "notanarticle": "Nije članak",
        "notvisiblerev": "Revizija je obrisana",
        "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica }} na vašem spisku praćenja, ne računajući posebno stranice za razgovor.",
-       "wlheader-enotif": "Obavještavanje e-poštom je omogućeno.",
-       "wlheader-showupdated": "Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
+       "wlheader-enotif": "Uključeno je obavještenje e-poštom.",
+       "wlheader-showupdated": "Stranice koje su izmijenjene otkad ste ih posljednji put posjetili su prikazane <strong>podebljanim slovima</strong>.",
        "wlnote": "Ispod {{PLURAL:$1|je najskorija izmjena|su <strong>$1</strong> najskorije izmjene|<strong>$1</strong> najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Opcije spiska praćenja",
        "watching": "Pratim...",
        "unwatching": "Ne pratim...",
        "watcherrortext": "Desila se greška pri promjeni postavki vašeg spiska praćenja za \"$1\".",
-       "enotif_reset": "Označi sve strane kao posjećene",
+       "enotif_reset": "Označi sve stranice kao posjećene",
        "enotif_impersonal_salutation": "{{SITENAME}} korisnik",
        "enotif_subject_deleted": "{{gender:$2|Korisnik|Korisnica}} $2 {{gender:$2|obrisao|obrisala}} je stranicu $1 projekta {{SITENAME}}",
        "enotif_subject_created": "{{gender:$2|Korisnik|Korisnica}} $2 {{gender:$2|napravio|napravila}} je stranicu $1 projekta {{SITENAME}}",
        "changed": "promijenjena",
        "deletepage": "Obrišite stranicu",
        "confirm": "Potvrdite",
-       "excontent": "sadržaj je bio: '$1'",
-       "excontentauthor": "sadržaj je bio: '$1' (i jedini korisnik koji je mijenjao bio je '[[Special:Contributions/$2|$2]]')",
-       "exbeforeblank": "sadržaj prije brisanja je bio: '$1'",
+       "excontent": "sadržaj je bio: \"$1\"",
+       "excontentauthor": "sadržaj je bio: \"$1\" (a jedini urednik \"[[Special:Contributions/$2|$2]]\")",
+       "exbeforeblank": "sadržaj prije brisanja je bio: \"$1\"",
        "delete-confirm": "Brisanje \"$1\"",
        "delete-legend": "Obriši",
        "historywarning": "<strong>Upozorenje</strong>: Stranica koju želite da obrišete ima historiju sa otprilike $1 {{PLURAL:$1|revizijom|revizije|revizija}}:",
        "confirmdeletetext": "Brisanjem ćete obrisati stranicu ili sliku zajedno sa historijom iz baze podataka, ali će se iste moći vratiti kasnije.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu sa [[{{MediaWiki:Policy-url}}|pravilima]].",
-       "actioncomplete": "Akcija završena",
+       "actioncomplete": "Radnja je izvršena",
        "actionfailed": "Akcija nije uspjela",
-       "deletedtext": "Članak \"$1\" je obrisan.\nPogledajte $2 za zapisnik nedavnih brisanja.",
+       "deletedtext": "Stranica \"$1\" je obrisana.\nPogledajte $2 za zapisnik nedavnih brisanja.",
        "dellogpage": "Zapisnik brisanja",
-       "dellogpagetext": "Ispod je spisak najskorijih brisanja.",
+       "dellogpagetext": "Ispod je spisak nedavno obrisanih stavki.",
        "deletionlog": "zapisnik brisanja",
-       "reverted": "Vraćeno na prijašnju reviziju",
+       "reverted": "Vraćeno na raniju verziju",
        "deletecomment": "Razlog:",
-       "deleteotherreason": "Ostali/dodatni razlozi:",
+       "deleteotherreason": "Drugi/dodatni razlog:",
        "deletereasonotherlist": "Ostali razlozi",
        "deletereason-dropdown": "*Uobičajeni razlozi brisanja\n** Spam\n** Vandalizam\n** Kršenje autorskih prava\n** Zahtjev autora\n** Pokvareno preusmjerenje",
        "delete-edit-reasonlist": "Uredi razloge brisanja",
        "deleteprotected": "Ne možete obrisati ovu stranicu jer je zaštićena.",
        "deleting-backlinks-warning": "'''Upozorenje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge stranice]] sadrže link ili vode na stranicu koju brišete.",
        "rollback": "Vrati izmjene",
-       "rollbacklink": "vrati",
+       "rollbacklink": "ukloni",
        "rollbacklinkcount": "vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}",
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}",
-       "rollbackfailed": "Vraćanje nije uspjelo",
-       "cantrollback": "Ne može se vratiti izmjena; posljednji autor je ujedno i jedini.",
+       "rollbackfailed": "Neuspešno vraćanje",
+       "cantrollback": "Ne mogu vratiti izmjenu;\nposljednji autor je ujedno i jedini.",
        "alreadyrolled": "Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko je već izmijenio ili vratio članak na prethodnu provjerenu verziju.\n\nPosljednju izmjenu napravio je korisnik [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Sažetak izmjene je bio: \"''$1''\".",
        "revertpage": "Vraćene izmjene korisnika [[Special:Contributions/$2|$2]] ([[User talk:$2|razgovor]]) na posljednju izmjenu koju je napravio [[User:$1|$1]]",
        "rollback-success": "Poništene izmjene korisnika $1;\nvraćeno na posljednju verziju koju je sačuvao $2.",
        "sessionfailure-title": "Greška u sesiji",
        "sessionfailure": "Izgleda da postoji problem sa vašom sesijom; ova akcija je otkazana kao prevencija protiv napadanja sesija. Kliknite \"back\" (''nazad'') i osvježite stranicu sa koje ste došli, i opet pokušajte.",
+       "changecontentmodel": "Promijeni model sadržaja stranice",
+       "changecontentmodel-legend": "Promijeni model sadržaja",
+       "changecontentmodel-title-label": "Naslov stranice",
+       "changecontentmodel-model-label": "Novi model sadržaja",
+       "changecontentmodel-reason-label": "Razlog:",
+       "changecontentmodel-success-title": "Model sadržaja je promijenjen",
+       "changecontentmodel-success-text": "Model sadržaja stranice [[:$1]] je promijenjen.",
+       "changecontentmodel-cannot-convert": "Model sadržaja stranice [[:$1]] se ne može pretvoriti u vrstu $2.",
+       "changecontentmodel-nodirectediting": "Model sadržaja $1 ne podržava izravno uređivanje",
+       "log-name-contentmodel": "Zapisnik promjene modela sadržaja",
+       "log-description-contentmodel": "Događaji koji su povezani s modelom sadržaja stranice",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|promijenio|promijenila}} je model sadržaja stranice $3 iz \"$4\" u \"$5\"",
+       "logentry-contentmodel-change-revertlink": "vrati",
+       "logentry-contentmodel-change-revert": "vrati",
        "protectlogpage": "Zapisnik zaključavanja",
-       "protectlogtext": "Ispod je spisak promjena zaštićenja stranice.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za pregled trenutno operativnih zaštita stranica.",
-       "protectedarticle": "stranica \"[[$1]]\" je zaštićena",
-       "modifiedarticleprotection": "promijenjen stepen zaštite za \"[[$1]]\"",
-       "unprotectedarticle": "uklonjena zaštita za \"[[$1]]\"",
+       "protectlogtext": "Ispod je spisak promjena zaštićenja stranice.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za pregled trenutno zaštićenih stranica.",
+       "protectedarticle": "{{GENDER:|zaštitio|zaštitila}} je stranicu \"[[$1]]\"",
+       "modifiedarticleprotection": "{{GENDER:|promijenio|promijenila}} je stepen zaštite stranice \"[[$1]]\"",
+       "unprotectedarticle": "uklonjena zaštita sa stranice \"[[$1]]\"",
        "movedarticleprotection": "podešavanja zaštite premještena sa \"[[$2]]\" na \"[[$1]]\"",
-       "protect-title": "Zaštićuje se \"$1\"",
+       "protect-title": "Mijenjate nivo zašite za \"$1\"",
        "protect-title-notallowed": "Pregled stepena zaštite za \"$1\"",
        "prot_1movedto2": "članak [[$1]] premješten na [[$2]]",
        "protect-badnamespace-title": "Nezaštitljiv imenski prostor",
        "protect-badnamespace-text": "Stranice u ovom imenskom prostoru ne mogu se zaštititi.",
        "protect-norestrictiontypes-text": "Ova stranica se ne može zaštititi jer nema dostupnih oblika ograničenja.",
        "protect-norestrictiontypes-title": "Nezaštitljiva strana",
-       "protect-legend": "Potvrdite zaštitu",
+       "protect-legend": "Potvrda zaštite",
        "protectcomment": "Razlog:",
        "protectexpiry": "Ističe:",
        "protect_expiry_invalid": "Upisani vremenski rok nije valjan.",
        "protect_expiry_old": "Upisani vremenski rok je u prošlosti.",
        "protect-unchain-permissions": "Otključaj daljnje opcije zaštite",
-       "protect-text": "Ovdje možete gledati i izmjeniti level zaštite za stranicu '''$1'''.",
+       "protect-text": "Ovdje možete pregledati i promijeniti nivo zaštite za stranicu <strong>$1</strong>.",
        "protect-locked-blocked": "Ne možete promijeniti nivo zaštite dok ste blokirani.\nOvo su trenutne postavke za stranicu '''$1''':",
        "protect-locked-dblock": "Nivoi zaštite ne mogu se mijenjati jer je aktivna baza podataka zaključana.\nTrenutna postavka za stranicu '''$1''' jest:",
        "protect-locked-access": "Nemate ovlasti za mijenjanje stepena zaštite.\nSlijede trenutne postavke stranice '''$1''':",
-       "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju|stranice, koje imaju}} uključenu prenosnu zaštitu.\nPromijene stepena zaštite ove stranice neće uticati na prenosnu zaštitu.",
-       "protect-default": "Dopusti svim korisnicima",
+       "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju}} uključenu prenosivu zaštitu.\nPromjene stepena zaštite ove stranice neće utjecati na prenosnu zaštitu.",
+       "protect-default": "Dopušteno svim korisnicima",
        "protect-fallback": "Dozvolite samo korisnicima sa \"$1\" ovlastima/privilegijama",
-       "protect-level-autoconfirmed": "Dopustite samo automatski potvrđenim korisnicima",
-       "protect-level-sysop": "Dozvoli samo administratorima",
+       "protect-level-autoconfirmed": "Dopušteno samo automatski potvrđenim korisnicima",
+       "protect-level-sysop": "Dopušteno samo administratorima",
        "protect-summary-cascade": "prenosna zaštita",
        "protect-expiring": "ističe $1 (UTC)",
        "protect-expiring-local": "ističe $1",
        "protect-expiry-indefinite": "neograničeno",
-       "protect-cascade": "Zaštiti sve stranice koje su uključene u ovu (kaskadna zaštita)",
+       "protect-cascade": "Zaštiti sve stranice koje su uključene u ovu (prenosiva zaštita)",
        "protect-cantedit": "Ne možete mijenjati nivo zaštite ove stranice, jer nemate prava da je uređujete.",
-       "protect-othertime": "Ostali period:",
-       "protect-othertime-op": "ostali period",
+       "protect-othertime": "Drugo vrijeme:",
+       "protect-othertime-op": "drugo vrijeme",
        "protect-existing-expiry": "Postojeće vrijeme isticanja: $3, $2",
-       "protect-otherreason": "Ostali/dodatni razlozi:",
+       "protect-existing-expiry-infinity": "Postojeće vrijeme isteka: trajno",
+       "protect-otherreason": "Drugi/dodatni razlog:",
        "protect-otherreason-op": "Ostali razlozi",
        "protect-dropdown": "*Uobičajeni razlozi zaštite\n** Prekomjerni vandalizam\n** Prekomjerno spamovanje\n** Ne produktivni rat izmjena\n** Stranica velikog prometa",
-       "protect-edit-reasonlist": "Uredi razloge zaštićavanja",
-       "protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite",
+       "protect-edit-reasonlist": "Uredi razloge zaštićivanja",
+       "protect-expiry-options": "1 sat:1 hour,1 dan:1 day,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "restriction-type": "Dopuštenje:",
        "restriction-level": "Stepen ograničenja:",
        "minimum-size": "Najmanja veličina",
        "maximum-size": "Najveća veličina:",
        "pagesize": "(bajta)",
-       "restriction-edit": "Uredi",
+       "restriction-edit": "Uređivanje",
        "restriction-move": "Premještanje",
        "restriction-create": "Napravi",
        "restriction-upload": "Postavljanje",
        "restriction-level-sysop": "potpuno zaštićeno",
        "restriction-level-autoconfirmed": "poluzaštićeno",
        "restriction-level-all": "svi nivoi",
-       "undelete": "Pogledaj izbrisane stranice",
-       "undeletepage": "Pogledaj i vrati izbrisane stranice",
+       "undelete": "Pregled obrisanih stranica",
+       "undeletepage": "Pregled i vraćanje obrisanih stranica",
        "undeletepagetitle": "'''Sljedeći sadržaj prikazuje obrisane revizije od [[:$1|$1]]'''.",
-       "viewdeletedpage": "Pogledaj izbrisane stranice",
+       "viewdeletedpage": "Pregled obrisanih stranica",
        "undeletepagetext": "{{PLURAL:$1|Slijedeća $1 stranica je obrisana|Slijedeće $1 stranice su obrisane|Slijedećih $1 je obrisano}} ali su još uvijek u arhivi i mogu biti vraćene.\nArhiva moše biti periodično čišćena.",
        "undelete-fieldset-title": "Vraćanje revizija",
-       "undeleteextrahelp": "Da vratite cijelu historiju članka, ostavite sve kutijice neoznačene i kliknite '''''{{int:undeletebtn}}'''''.\nDa bi izvršili selektivno vraćanje, odaberite kutijice koje odgovaraju revizijama koje želite vratiti, i kliknite '''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "Da biste vratili cijelu historiju stranice, ostavite sve kućice neoznačene i kliknite na <strong><em>{{int:undeletebtn}}</em></strong>.\nDa biste vratili određene stranice, izaberite verzije koje želite vratiti i kliknite na <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "{{PLURAL:$1|$1 revizija arhivirana|$1 revizije arhivirane|$1 revizija arhivirano}}",
-       "undeletehistory": "Ako vratite stranicu, sve će revizije biti vraćene u njenu historiju.\nAko je nova stranica istog imena napravljena od brisanja, vraćene revizije pojavit će se u njenoj ranijoj historiji.",
+       "undeletehistory": "Ako vratite stranicu, sve će verzije biti vraćene u njenu historiju.\nAko je u međuvremenu napravljena nova verzija s istim nazivom, vraćene verzije će se pojaviti njenoj ranijoj historiji.",
        "undeleterevdel": "Vraćanje obrisanog se neće izvršiti ako bi rezultiralo da zaglavlje stranice ili revizija datoteke bude djelimično obrisano.\nU takvim slučajevima, morate ukloniti označene ili otkriti sakrivene najskorije obrisane revizije.",
-       "undeletehistorynoadmin": "Ova stranica je izbrisana.  Ispod se nalazi dio historije brisanja i historija revizija izbrisane stranice.  Tekst izbrisane stranice je vidljiv samo korisnicima koji su administratori.",
+       "undeletehistorynoadmin": "Ova stranica je obrisana.\nRazlog za brisanje se nalazi ispod, zajedno s detaljima o korisniku koji je mijenjao stranicu prije brisanja.\nTekst obrisanih verzija dostupan je samo administratorima.",
        "undelete-revision": "Obrisana revizija stranice $1 (dana $4, u $5) od strane $3:",
        "undeleterevision-missing": "Nepoznata ili nedostajuća revizija.\nMožda ste unijeli pogrešan link, ili je revizija vraćena ili uklonjena iz arhive.",
        "undelete-nodiff": "Nije pronađena ranija revizija.",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Izmijeni odabir",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 revizija vraćena|$1 revizije vraćene|$1 revizija vraćeno}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revizija|$1 revizije|$1 revizija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
+       "undeletedrevisions": "{{PLURAL:$1|$1 verzija vraćena|$1 verzije vraćene|$1 verzija vraćeno}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 verzija|$1 verzije|$1 verzija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
        "undeletedfiles": "{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}",
        "cannotundelete": "Vraćanje nije uspjelo:\n$1",
        "undeletedpage": "'''$1 je vraćena'''\n\nProvjerite [[Special:Log/delete|zapis brisanja]] za zapise najskorijih brisanja i vraćanja.",
        "undelete-error-long": "Desile su se pogreške pri vraćanju datoteke:\n\n$1",
        "undelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "undelete-show-file-submit": "Da",
-       "namespace": "Vrsta članka:",
+       "namespace": "Imenski prostor:",
        "invert": "Sve osim odabranog",
        "tooltip-invert": "Označite ovu kutiju za sakrivanje promjena na stranicama u odabranom imenskom prostoru (i povezanim imenskim prostorima ako je označeno)",
+       "tooltip-whatlinkshere-invert": "Označite ovu kutiju za sakrivanje linkova sa stranica u izabranom imenskom prostoru.",
        "namespace_association": "Povezan imenski prostor",
        "tooltip-namespace_association": "Označite ovu kutiju da također uključite razgovor ili imenski prostor teme koja je povezana sa odabranim imenskim prostorom",
        "blanknamespace": "(Glavno)",
        "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}",
        "contributions-title": "Doprinosi korisnika $1",
-       "mycontris": "Doprinos",
+       "mycontris": "Doprinosi",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
        "sp-contributions-newbies": "Prikaži samo doprinose novih korisnika",
        "sp-contributions-newbies-sub": "Za nove korisnike",
        "sp-contributions-newbies-title": "Doprinosi novih korisnika",
-       "sp-contributions-blocklog": "Evidencija blokiranja",
+       "sp-contributions-blocklog": "zapisnik blokiranja",
+       "sp-contributions-suppresslog": "obrisani doprinosi korisnika",
        "sp-contributions-deleted": "obrisani doprinosi korisnika",
        "sp-contributions-uploads": "postavljanja",
        "sp-contributions-logs": "zapisnici",
        "sp-contributions-userrights": "postavke korisničkih prava",
        "sp-contributions-blocked-notice": "Ovaj korisnik je trenutno blokiran. Posljednje stavke zapisnika blokiranja možete pogledati ispod:",
        "sp-contributions-blocked-notice-anon": "Ova IP adresa je trenutno blokirana.\nPosljednje stavke zapisnika blokiranja možete pogledati ispod:",
-       "sp-contributions-search": "Pretraga doprinosa",
+       "sp-contributions-search": "Pretraži doprinose",
        "sp-contributions-username": "IP adresa ili korisničko ime:",
        "sp-contributions-toponly": "Prikaži samo izmjene koje su posljednje revizije",
+       "sp-contributions-newonly": "Prikaži samo izmjene kojima su napravljene nove stranice",
        "sp-contributions-submit": "Traži",
-       "whatlinkshere": "Šta je povezano ovdje",
+       "whatlinkshere": "Šta vodi ovamo",
        "whatlinkshere-title": "Stranice koje vode na \"$1\"",
        "whatlinkshere-page": "Stranica:",
        "linkshere": "Sljedeći članci vode na '''[[:$1]]''':",
-       "nolinkshere": "Nema linkova na '''[[:$1]]'''.",
-       "nolinkshere-ns": "Nijedna stranica nije povezana sa '''[[:$1]]''' u odabranom imenskom prostoru.",
-       "isredirect": "preusmjerivač",
-       "istemplate": "kao šablon",
+       "nolinkshere": "Nijedna stranica nije povezana sa <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Nijedna stranica nije povezana sa <strong>[[:$1]]</strong> u izabranom imenskom prostoru.",
+       "isredirect": "preusmjerenje",
+       "istemplate": "šablon",
        "isimage": "veza na datoteku",
        "whatlinkshere-prev": "{{PLURAL:$1|prethodni|prethodna|prethodnih}} $1",
        "whatlinkshere-next": "{{PLURAL:$1|sljedeći|sljedeća|sljedećih}} $1",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi blokiranja\n**Netačne informacije\n**Uklanjanje sadržaja stranica\n**Postavljanje spam vanjskih linkova\n**Ubacivanje gluposti/grafita\n**Osobni napadi (ili napadačko ponašanje)\n**Čarapare (zloupotreba više korisničkih računa)\n**Neprihvatljivo korisničko ime",
        "ipb-hardblock": "Onemogući prijavljene korisnike da uređuju sa ove IP adrese",
-       "ipbcreateaccount": "Onemogući pravljenje računa",
+       "ipbcreateaccount": "Spriječi pravljenje računa",
        "ipbemailban": "Onemogući korisnika da šalje e-mail",
        "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu koju je koristio ovaj korisnik i sve druge IP-adrese s kojih je pokušao uređivati",
-       "ipbsubmit": "Blokirajte ovog korisnika",
-       "ipbother": "Ostali period:",
-       "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,zauvijek:infinite",
+       "ipbsubmit": "Blokiraj ovog korisnika",
+       "ipbother": "Drugo vrijeme:",
+       "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "ipbhidename": "Sakrij korisničko ime iz uređivanja i spiskova",
        "ipbwatchuser": "Prati korisničku stranicu i stranicu za razgovor ovog korisnika",
        "ipb-disableusertalk": "Onemogući ovog korisnika da uređuje svoju stranicu za razgovor dok je blokiran",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />\nPogledajte [[Special:BlockList|spisak blokiranja]] za pregled blokiranja.",
        "ipb-blockingself": "Ovom akcijom ćete blokirati sebe! Da li ste sigurni da to želite?",
        "ipb-confirmhideuser": "Upravo ćete blokirati korisnika s uključenom opcijom \"Sakrij korisnika\". Ovim će korisničko ime biti sakriveno u svim spiskovima i stavkama zapisnika. Jeste li sigurni da to želite?",
+       "ipb-confirmaction": "Ako ste sigurni da želite nastaviti, kliknite na \"{{int:ipb-confirm}}\" polje na dnu stranice.",
        "ipb-edit-dropdown": "Uredi razloge blokiranja",
        "ipb-unblock-addr": "Deblokiraj $1",
        "ipb-unblock": "Deblokiraj korisničko ime ili IP adresu",
        "unblockip": "Odblokiraj korisnika",
        "unblockiptext": "Upotrebite donji upitnik da bi ste vratili\npravo pisanja ranije blokiranoj IP adresi\nili korisničkom imenu.",
        "ipusubmit": "Ukloni ovu blokadu",
-       "unblocked": "[[User:$1|$1]] je deblokiran",
+       "unblocked": "[[User:$1|$1]] je deblokiran.",
        "unblocked-range": "$1 je deblokiran",
        "unblocked-id": "Blokada ID oznake $1 je uklonjena",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] je deblokiran.",
        "blocklist": "Blokirani korisnici",
        "ipblocklist": "Blokirani korisnici",
        "ipblocklist-legend": "Traži blokiranog korisnika",
        "ipblocklist-submit": "Traži",
        "ipblocklist-localblock": "Lokalna blokada",
        "ipblocklist-otherblocks": "Ostale {{PLURAL:$1|blokada|blokade}}",
-       "infiniteblock": "nije ograničena",
+       "infiniteblock": "beskonačno",
        "expiringblock": "ističe dana $1 u $2",
        "anononlyblock": "samo anonimni korisnici",
        "noautoblockblock": "automatsko blokiranje onemogućeno",
-       "createaccountblock": "blokirano pravljenje računa",
-       "emailblock": "e-mail blokiran",
+       "createaccountblock": "onemogućeno pravljenje računa",
+       "emailblock": "blokirana e-pošta",
        "blocklist-nousertalk": "ne može uređivati vlastitu stranicu za razgovor",
        "ipblocklist-empty": "Spisak blokiranja je prazan.",
        "ipblocklist-no-results": "Tražena IP adresa ili korisničko ime nisu blokirani.",
-       "blocklink": "blokirajte",
+       "blocklink": "blokiraj",
        "unblocklink": "deblokiraj",
        "change-blocklink": "promijeni blokadu",
        "contribslink": "doprinosi",
        "blocklogtext": "Ispod je spisak blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu ispisane ispod.\nPogledajte [[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",
+       "block-log-flags-nocreate": "onemogućeno pravljenje računa",
        "block-log-flags-noautoblock": "automatsko blokiranje onemogućeno",
-       "block-log-flags-noemail": "e-mail je blokiran",
+       "block-log-flags-noemail": "e-pošta blokirana",
        "block-log-flags-nousertalk": "ne može uređivati vlastitu stranicu za razgovor",
-       "block-log-flags-angry-autoblock": "omogućeno napredno autoblokiranje",
+       "block-log-flags-angry-autoblock": "uključeno poboljšano automatsko blokiranje",
        "block-log-flags-hiddenname": "korisničko ime sakriveno",
        "range_block_disabled": "Administratorska mogućnost da blokira grupe je isključena.",
-       "ipb_expiry_invalid": "Pogrešno vrijeme trajanja.",
+       "ipb_expiry_invalid": "Neispravno vrijeme isteka.",
        "ipb_expiry_temp": "Sakrivene blokade korisničkih imena moraju biti stalne.",
        "ipb_hide_invalid": "Ne može se onemogućiti ovaj račun; on ima više od {{PLURAL:$1|jedne izmjene|$1 izmjena}}.",
        "ipb_already_blocked": "\"$1\" je već blokiran",
        "ipb-needreblock": "$1 je već blokiran. Da li želite promijeniti postavke?",
        "ipb-otherblocks-header": "Ostale {{PLURAL:$1|blokada|blokade}}",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
-       "ipb_cant_unblock": "Greška: Blokada sa ID oznakom $1 nije pronađena.\nMožda je već deblokirana.",
+       "ipb_cant_unblock": "Greška: Blokirani ID $1 nije pronađen. Možda je korisnik već deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može se deblokirati.\nMeđutim, možda je blokirana kao dio bloka $2, koji se ne može deblokirati.",
        "ip_range_invalid": "Netačan raspon IP adresa.",
        "ip_range_toolarge": "Nisu dopuštene blokade veće od /$1.",
-       "proxyblocker": "Bloker proksija",
-       "proxyblockreason": "Vaša IP adresa je blokirana jer je ona otvoreni proksi.  Molimo vas da kontaktirate vašeg davatelja internetskih usluga (Internet Service Provider-a) ili tehničku podršku i obavijestite ih o ovom ozbiljnom sigurnosnom problemu.",
+       "proxyblocker": "Zaštita od proxya",
+       "proxyblockreason": "Vaša IP adresa je blokirana jer je ona otvoreni proxy.\nMolimo vas da kontaktirate vašeg davatelja internetskih usluga ili tehničku podršku i obavijestite ih o ovom ozbiljnom sigurnosnom problemu.",
        "sorbsreason": "Vaša IP adresa je prikazana kao otvoreni proxy u DNSBL koji koristi {{SITENAME}}.",
        "sorbs_create_account_reason": "Vaša IP adresa je prikazana kao otvoreni proxy u DNSBL korišten od {{SITENAME}}.\nNe možete napraviti račun",
+       "xffblockreason": "Blokirana je vaša ili IP adresa proxy servera koga koristite, koja se nalazi u zaglavlju X-Forwarded-For. Razlog za blokiranje je bio: $1",
        "cant-see-hidden-user": "Korisnik kojeg pokušavate blokirati je već blokiran i sakriven. Pošto nemate prava hideuser (sakrivanje korisnika), ne možete vidjeti ni urediti korisnikovu blokadu.",
        "ipbblocked": "Ne možete blokirati ili deblokirati druge korisnike, jer ste i sami blokirani",
        "ipbnounblockself": "Nije Vam dopušteno da deblokirate samog sebe",
        "movepagetalktext": "Odgovarajuća stranica za razgovor, ako postoji, automatski će biti premještena istovremeno '''osim ako:'''\n*premještate stranicu preko imenskih prostora\n*neprazna stranica za razgovor već postoji pod novim imenom\n*odčekirate donju kutiju.\n\nU tim slučajevima morat ćete ručno premjestiti ili prekopirati stranicu ako to želite.",
        "movearticle": "Premjesti stranicu:",
        "moveuserpage-warning": "'''Upozorenje:''' Premještate korisničku stranicu. Molimo da zapamtite da će se samo stranica premjestiti a korisnik se ''neće'' preimenovati.",
+       "movecategorypage-warning": "<strong>Upozorenje:</strong> Premještate stranicu kategorije. Imajte na umu da će samo stranica biti premještena i da sve stranice u staroj kategoriji <em>neće</em> biti ponovo kategorirane u novu kategoriju.",
        "movenologintext": "Morate biti registrovani korisnik i [[Special:UserLogin|prijavljeni]] da biste premjestili stranicu.",
        "movenotallowed": "Nemate dopuštenje za premještanje stranica.",
        "movenotallowedfile": "Nemate dopuštenja da premještanje datoteke.",
        "cant-move-user-page": "Nemate dopuštenje da premještate korisničke stranice (bez podstranica).",
        "cant-move-to-user-page": "Nemate dopuštenje da premjestite stranicu na korisničku stranicu (osim na korisničku podstranicu).",
+       "cant-move-category-page": "Nemate dopuštene da premještate stranice kategorija.",
+       "cant-move-to-category-page": "Nemate dopuštenje da premjestite stranicu na stranicu kategorije.",
        "newtitle": "Novi naslov",
        "move-watch": "Prati ovu stranicu",
        "movepagebtn": "Premjesti stranicu",
        "movenosubpage": "Ova stranica nema podstranica.",
        "movereason": "Razlog:",
        "revertmove": "vrati",
-       "delete_and_move": "Brisanje i premještanje",
-       "delete_and_move_text": "==Brisanje neophodno==\nOdredišna stranica \"[[:$1]]\" već postoji.\nDa li je želite obrisati kako bi ste mogli izvršiti premještanje?",
+       "delete_and_move": "Obriši i premjesti",
+       "delete_and_move_text": "==Potebno brisanje==\nOdredišna stranica \"[[:$1]]\" već postoji.\nDa li je želite obrisati kako bi ste mogli izvršiti premještanje?",
        "delete_and_move_confirm": "Da, obriši stranicu",
        "delete_and_move_reason": "Obrisano da bi se napravio prostor za premještanje iz \"[[$1]]\"",
        "selfmove": "Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.",
        "immobile-target-namespace-iw": "Međuwiki link nije ispravno odredište premještanja stranice.",
        "immobile-source-page": "Ova stranica se ne može premještati.",
        "immobile-target-page": "Ne može se premjestiti na taj odredišni naslov.",
+       "bad-target-model": "Željeno odredište koristi drugačiji model sadržaja. Ne mogu pretvoriti iz $1 u $2.",
        "imagenocrossnamespace": "Ne može se premjestiti datoteka u nedatotečni imenski prostor",
        "nonfile-cannot-move-to-file": "Ne mogu se premjestiti podaci u datotečni imenski prostor",
        "imagetypemismatch": "Ekstenzija nove datoteke ne odgovara njenom tipu",
        "allmessages-language": "Jezik:",
        "allmessages-filter-submit": "Idi",
        "allmessages-filter-translate": "Prevedi",
-       "thumbnail-more": "uvećajte",
+       "thumbnail-more": "Povećaj",
        "filemissing": "Nedostaje datoteka",
        "thumbnail_error": "Greška pri pravljenju umanjene slike: $1",
        "thumbnail_error_remote": "Poruka o grešci iz $1:\n$2",
        "thumbnail-temp-create": "Ne mogu da napravim privremenu smanjenu sliku",
        "thumbnail-dest-create": "Ne mogu da sačuvam smanjenu sliku (\"thumbnail\") na destinaciju",
        "thumbnail_invalid_params": "Pogrešne postavke smanjenog prikaza",
+       "thumbnail_toobigimagearea": "Datoteka sa dimenzijama većim od $1",
        "thumbnail_dest_directory": "Ne može se napraviti odredišni folder",
        "thumbnail_image-type": "Tip slike nije podržan",
        "thumbnail_gd-library": "Nekompletna konfiguracija GD biblioteke: nedostaje funkcija $1",
        "thumbnail_image-missing": "Datoteka ne dostaje: $1",
+       "thumbnail_image-failure-limit": "Bilo je previše nedavnih greška ($1 ili više) pri pravljenju umanjene slike. Ponovo pokušajte kasnije.",
        "import": "Uvoz stranica",
        "importinterwiki": "Uvezeno sa druge wiki",
-       "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizija i imena autora će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu uvoza]].",
+       "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi i imena autora verzija će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisniku uvoza]].",
+       "import-interwiki-sourcewiki": "Izvorna wiki:",
+       "import-interwiki-sourcepage": "Izvorna stranica:",
        "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvoz",
+       "import-mapping-default": "Uvezi u predodređena mjesta",
+       "import-mapping-namespace": "Uvezi u imenski prostor:",
+       "import-mapping-subpage": "Uvezi kao podstranice sljedeće stranice:",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].\nSačuvajte je na Vašem računaru i pošaljite ovdje.",
        "importcantopen": "Ne može se otvoriti uvozna datoteka",
        "importbadinterwiki": "Loš interwiki link",
        "importsuccess": "Uspješno ste uvezli stranicu!",
-       "importnosources": "Nije definisan međuwiki izvor za uvoz i direktna postavljanja historije su onemogućena.",
+       "importnosources": "Nije definisan međuwiki izvor za uvoz i direktna postavljanja historije su isključena.",
        "importnofile": "Uvozna datoteka nije postavljena.",
        "importuploaderrorsize": "Postavljanje uvozne datoteke nije uspjelo.\nDatoteka je veća nego što je dopušteno.",
        "importuploaderrorpartial": "Postavljanje uvozne datoteke nije uspjelo.\nDatoteka je samo djelimično postavljena.",
        "import-error-interwiki": "Stranica \"$1\" nije uvezena jer je njen naziv rezerviran za vanjsko povezivanje (interwiki).",
        "import-error-special": "Stranica \"$1\" nije uvezena jer pripada posebnom imenskom prostoru koje ne prihvata stranice.",
        "import-error-invalid": "Stranica \"$1\" nije uvezena jer je naziv pod kojim treba biti uvezena nije valjan na ovoj wiki.",
+       "import-error-unserialize": "Verzija $2 stranice $1 ne može biti pročitana, odnosno uvezena. Zapisano je da verzija koristi $3 tip sadržaja u $4 formatu.",
+       "import-error-bad-location": "Verzija $2 koja koristi model sadržaja $3 ne može se postaviti na stranicu \"$1\" ovog wikija, jer taj model sadržaja nije podržan na toj stranici.",
        "import-options-wrong": "{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Navedena osnovna stranica ima neispravan naslov.",
        "import-rootpage-nosubpage": "Imenski prostor \"$1\" osnovne stranice ne dozvoljava podstranice.",
        "javascripttest": "Testiranje JavaScript-e",
        "javascripttest-pagetext-noframework": "Ova stranica je određena za pokretanje JavaScript testova.",
        "javascripttest-pagetext-unknownframework": "Nepoznat radni okvir testiranja\"$1\".",
+       "javascripttest-pagetext-unknownaction": "Nepoznata radnja \"$1\".",
        "javascripttest-pagetext-frameworks": "Molimo Vas izaberite jednu od sljedećih testnih okvira: $1",
        "javascripttest-pagetext-skins": "Izaberite s kojom temom želite da pokrenete probu:",
        "javascripttest-qunit-intro": "Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.",
        "tooltip-pt-mytalk": "Vaša stranica za razgovor",
        "tooltip-pt-anontalk": "Razgovor o doprinosu sa ove IP adrese",
        "tooltip-pt-preferences": "Vaše postavke",
-       "tooltip-pt-watchlist": "Spisak članaka koje pratite.",
-       "tooltip-pt-mycontris": "Spisak vašeg doprinosa",
+       "tooltip-pt-watchlist": "Spisak stranica koje pratite",
+       "tooltip-pt-mycontris": "Spisak vaših doprinosa",
        "tooltip-pt-login": "Predlažemo da se prijavite, ali nije obvezno.",
        "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
        "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno",
        "tooltip-ca-history": "Prethodne verzije ove stranice.",
        "tooltip-ca-protect": "Zaštitite stranicu od budućih izmjena",
        "tooltip-ca-unprotect": "Promijeni zaštitu za ovu stranicu",
-       "tooltip-ca-delete": "Izbrišite ovu stranicu",
+       "tooltip-ca-delete": "Obrišite ovu stranicu",
        "tooltip-ca-undelete": "Vratite izmjene koje su načinjene prije brisanja stranice",
        "tooltip-ca-move": "Premjesti ovu stranicu",
        "tooltip-ca-watch": "Dodajte stranicu u listu praćnih članaka",
-       "tooltip-ca-unwatch": "Izbrišite stranicu sa liste praćnih članaka",
+       "tooltip-ca-unwatch": "Ukloni ovu stranicu sa spiska praćenih članaka",
        "tooltip-search": "Pretraži projekat {{SITENAME}}",
        "tooltip-search-go": "Idi na stranicu s tačno ovim imenom ako postoji",
        "tooltip-search-fulltext": "Pretražite stranice s ovim tekstom",
        "tooltip-t-upload": "Postavi slike i druge medije",
        "tooltip-t-specialpages": "Spisak svih posebnih stranica",
        "tooltip-t-print": "Verzija ove stranice za štampanje",
-       "tooltip-t-permalink": "Stalni link ove verzije stranice",
-       "tooltip-ca-nstab-main": "Pogledajte sadržaj članka",
+       "tooltip-t-permalink": "Trajni link ove verzije stranice",
+       "tooltip-ca-nstab-main": "Pogledajte stranicu sa sadržajem",
        "tooltip-ca-nstab-user": "Pogledajte korisničku stranicu",
        "tooltip-ca-nstab-media": "Pogledajte medija fajl",
-       "tooltip-ca-nstab-special": "Ovo je specijalna stranica i zato je ne možete uređivati",
+       "tooltip-ca-nstab-special": "Ovo je posebna stranica. Ne možete je uređivati.",
        "tooltip-ca-nstab-project": "Pogledajte projekat stranicu",
        "tooltip-ca-nstab-image": "Pogledajte stranicu slike",
        "tooltip-ca-nstab-mediawiki": "Pogledajte sistemsku poruku",
        "tooltip-ca-nstab-template": "Pogledajte šablon",
        "tooltip-ca-nstab-help": "Pogledajte stranicu za pomoć",
        "tooltip-ca-nstab-category": "Pogledajte stranicu kategorije",
-       "tooltip-minoredit": "Naznačite da se radi o maloj izmjeni",
-       "tooltip-save": "Sačuvajte Vaše izmjene",
-       "tooltip-preview": "Pregledajte Vaše izmjene; molimo Vas da koristite ovo prije nego što sačuvate stranicu!",
-       "tooltip-diff": "Prikaži moje izmjene u tekstu.",
-       "tooltip-compareselectedversions": "Pogledajte pazlike između dvije selektovane verzije ove stranice.",
-       "tooltip-watch": "Dodajte ovu stranicu na Vaš spisak praćenih članaka",
+       "tooltip-minoredit": "Označi kao manju izmjenu",
+       "tooltip-save": "Sačuvaj moje izmjene",
+       "tooltip-preview": "Pregledajte svoje izmjene. Preporučeno pri bilo kakvom uređivanju!",
+       "tooltip-diff": "Prikaži moje izmjene u tekstu",
+       "tooltip-compareselectedversions": "Uporedi razliku između dvije izabrane verzije ove stranice",
+       "tooltip-watch": "Dodaj ovu stranicu na svoj spisak praćenih članaka",
        "tooltip-watchlistedit-normal-submit": "Ukloni naslove",
        "tooltip-watchlistedit-raw-submit": "Ažuriraj spisak praćenja",
        "tooltip-recreate": "Ponovno pravljenje stranice iako je već brisana",
        "nocredits": "Autori ove stranice nisu navedeni.",
        "spamprotectiontitle": "Filter za zaštitu od neželjenih poruka",
        "spamprotectiontext": "Strana koju želite da sačuvate je blokirana od strane filtera za neželjene poruke.\nOvo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.",
-       "spamprotectionmatch": "Sljedeći tekst aktivirao je naš filter za neželjene poruke: $1",
+       "spamprotectionmatch": "Sljedeći tekst je aktivirao naš filter za neželjene poruke: $1",
        "spambot_username": "MediaWiki čišćenje spama",
        "spam_reverting": "Vraćanje na posljednju verziju koja ne sadrži linkove ka $1",
        "spam_blanking": "Sve revizije koje sadrže linkove ka $1, očisti",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
        "pageinfo-watchers": "Broj pratitelja stranice",
+       "pageinfo-visiting-watchers": "Broj korisnika koji prate ovu stranica i koji su je posjetili zbog najnovijih izmjena",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
+       "pageinfo-few-visiting-watchers": "Moguće je da postoji korisnik koji prati i posjećuje nedavne izmjene",
        "pageinfo-redirects-name": "Broj preusmjeravanja na ovu stranicu",
        "pageinfo-subpages-name": "Podstranice ove stranice",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|preusmjerenje|preusmjerenja}}; $3 {{PLURAL:$3|nepreusmjerenje|nepreusmjerenja}})",
        "pageinfo-redirectsto-info": "Informacije",
        "pageinfo-contentpage": "Broji se kao stranica sa sadržajem",
        "pageinfo-contentpage-yes": "Da",
+       "pageinfo-protect-cascading": "Prenosiva zaštita počinje od ove stranice",
        "pageinfo-protect-cascading-yes": "Da",
+       "pageinfo-protect-cascading-from": "Prenosiva zaštita počinje od",
        "pageinfo-category-info": "Informacije o kategoriji",
        "pageinfo-category-total": "Ukupan broj članova",
        "pageinfo-category-pages": "Broj stranica",
        "patrol-log-page": "Zapisnik patroliranja",
        "patrol-log-header": "Ovdje se nalazi zapis patroliranih revizija.",
        "log-show-hide-patrol": "$1 zapis patroliranja",
+       "log-show-hide-tag": "$1 zapisnik oznaka",
        "deletedrevision": "Obrisana stara revizija $1",
        "filedeleteerror-short": "Greška pri brisanju datoteke: $1",
        "filedeleteerror-long": "Desile su se greške pri brisanju datoteke:\n\n$1",
        "file-info-size": "$1 × $2 piksela, veličina datoteke: $3, MIME tip: $4",
        "file-info-size-pages": "$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}",
        "file-nohires": "Veća rezolucija nije dostupna.",
-       "svg-long-desc": "SVG fajl, dozvoljeno $1 × $2 piksela, veličina fajla: $3",
+       "svg-long-desc": "SVG datoteka, nominalno $1 × $2 piksela, veličina datoteke: $3",
        "svg-long-desc-animated": "Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina datoteke: $3",
        "svg-long-error": "Nevaljana SVG datoteka: $1",
        "show-big-image": "Izvorna datoteka",
        "file-no-thumb-animation-gif": "'''Napomena: Zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće biti animirane.'''",
        "newimages": "Galerija novih slika",
        "imagelisttext": "Ispod je spisak od '''$1''' {{PLURAL:$1|datoteke|datoteke|datoteka}} poredanih $2.",
-       "newimages-summary": "Ova specijalna stranica prikazuje posljednje postavljene datoteke.",
+       "newimages-summary": "Ova posebna stranica prikazuje nedavno postavljene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ili dio imena):",
        "newimages-showbots": "Pokaži datoteke koje su poslali botovi",
-       "noimages": "Ništa za prikazati.",
+       "noimages": "Nema ništa.",
        "ilsubmit": "Traži",
        "bydate": "po datumu",
        "sp-newimages-showfrom": "Prikaz novih datoteka počev od $2, $1",
        "confirmemail_oncreate": "Kod za potvrđivanje Vam je poslat na Vašu e-mail adresu.\nTaj kod nije neophodan za prijavljivanje, ali Vam ne potreban kako bi ste omogućili funkcije wikija zasnovane na e-mailu.",
        "confirmemail_sendfailed": "{{SITENAME}} Vam ne može poslati poštu za potvrđivanje. Provjerite adresu zbog nepravilnih karaktera.\n\nPovratna pošta: $1",
        "confirmemail_invalid": "Netačan kod za potvrdu. Moguće je da je kod istekao.",
-       "confirmemail_needlogin": "Morate $1 da bi ste potvrdili Vašu e-mail adresu.",
+       "confirmemail_needlogin": "Morate biti $1 da biste potvrdili adresu vaše e-pošte.",
        "confirmemail_success": "Adresa vaše e-pošte je potvrđena. Možete sad da se prijavite i uživate u viki.",
        "confirmemail_loggedin": "Adresa Vaše e-pošte je potvrđena.",
        "confirmemail_subject": "{{SITENAME}} – adresa e-pošte za potvrđivanje",
        "img-lang-go": "Idi",
        "ascending_abbrev": "rast",
        "descending_abbrev": "opad",
-       "table_pager_next": "Slijedeća stranica",
+       "table_pager_next": "Sljedeća stranica",
        "table_pager_prev": "Prethodna stranica",
        "table_pager_first": "Prva stranica",
        "table_pager_last": "Posljednja stranica",
-       "table_pager_limit": "Pokaži $1 stavki po stranici",
+       "table_pager_limit": "Prikaži $1 stavki po stranici",
        "table_pager_limit_label": "Stavke po stranici:",
        "table_pager_limit_submit": "Idi",
-       "table_pager_empty": "Bez rezultata",
-       "autosumm-blank": "Uklanjanje sadržaja stranice",
-       "autosumm-replace": "Zamjena stranice sa '$1'",
+       "table_pager_empty": "Nema rezultata",
+       "autosumm-blank": "Uklonjen cjelokupan sadržaj stranice",
+       "autosumm-replace": "Zamijenjen sadržaj stranice sa \"$1\"",
        "autoredircomment": "Preusmjereno na [[$1]]",
-       "autosumm-new": "Napravljena stranica sa '$1'",
+       "autosumm-new": "Nova stranica: $1",
        "autosumm-newblank": "Napravljena prazna stranica",
        "size-bytes": "$1 B",
        "size-kilobytes": "$1 KB",
        "watchlistedit-clear-titles": "Naslovi:",
        "watchlistedit-clear-submit": "Isprazni spisak nadgledanja (Ovo je trajno!)",
        "watchlistedit-clear-done": "Vaš spisak praćenja je očišćen.",
-       "watchlisttools-clear": "Očisti spisak nadgledanja",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
+       "watchlistedit-too-many": "Ima previše stranica za prikaz ovdje.",
+       "watchlisttools-clear": "Očisti spisak praćenja",
        "watchlisttools-view": "Pogledaj srodne izmjene",
        "watchlisttools-edit": "Pogledaj i uredi spisak praćenja",
        "watchlisttools-raw": "Uredi spisak praćenja u okviru za uređivanje",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
        "timezone-utc": "KSV",
        "duplicate-defaultsort": "Upozorenje: Postavljeni ključ sortiranja \"$2\" zamjenjuje raniji ključ \"$1\".",
+       "duplicate-displaytitle": "<strong>Upozorenje:</strong> Prikazivani naslov \"$2\" poništava prethodni naslov \"$1\".",
+       "invalid-indicator-name": "<strong>Greška:</strong> <code>Imena</code> pokazatelja stanja strance ne smiju biti prazna.",
        "version": "Verzija",
        "version-extensions": "Instalirana proširenja (ekstenzije)",
        "version-skins": "Instalirane kože",
        "version-license": "Licenca",
        "version-ext-license": "Licenca",
        "version-ext-colheader-name": "Proširenje",
-       "version-skin-colheader-name": "Izgled",
+       "version-skin-colheader-name": "Tema",
        "version-ext-colheader-version": "Verzija",
        "version-ext-colheader-license": "Licenca",
        "version-ext-colheader-description": "Opis",
        "version-ext-colheader-credits": "Autori",
        "version-license-title": "Licenca za $1",
+       "version-license-not-found": "Za ovo proširenje nije pronađena informacija o licenci.",
+       "version-credits-title": "Zasluge za $1",
+       "version-credits-not-found": "Za ovo proširenje nisu pronađene informacije o zaslugama.",
        "version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
        "version-poweredby-others": "ostali",
+       "version-poweredby-translators": "translatewiki.net prevodioci",
        "version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
        "version-license-info": "Mediawiki je slobodni softver; možete ga redistribuirati i(li) mijenjati pod uvjetima opće javne GNU licence kao što je objavljeno od strane \"Free Software Foundationa\", bilo u verziji 2 licence ili (po Vašoj volji) nekoj od kasnijih verzija.\n\nMediawiki se distribuira u nadi da će biti korisna, ali BEZ IKAKVIH GARANCIJA, čak i bez ikakvih posrednih garancija o KOMERCIJALNOSTI ili DOSTUPNOSTI ZA ODREĐENU SVRHU. Pogledajte opću javnu GNU licencu za više detalja.\n\nTrebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU opće javne GNU licence] zajedno s ovim programom. Ako niste, pišite \"Free Software Foundationu\" na adresu: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ili je pročitajte [//www.gnu.org/licenses/old-licenses/gpl-2.0.html ovdje].",
        "version-software": "Instalirani softver",
        "version-entrypoints": "URL Adrese ulazne tačke",
        "version-entrypoints-header-entrypoint": "Ulazna tačka",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Instalirane biblioteke",
+       "version-libraries-library": "Biblioteka",
        "version-libraries-version": "Verzija",
+       "version-libraries-license": "Licenca",
+       "version-libraries-description": "Opis",
+       "version-libraries-authors": "Autori",
+       "redirect": "Preusmjerenje na datoteku, korisnika, stranicu ili oznaku izmjene",
+       "redirect-legend": "Preusmjeri na datoteku ili stranicu",
+       "redirect-summary": "Ova posebna stranica preusmjerava na datoteku (datog imena), stranicu (date oznake izmjene) ili korisničku stranicu (datog numeričkog identifikatora korisnika). Oznake se koriste na sljedeći način: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] ili [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Idi",
+       "redirect-lookup": "Tip vrijednosti:",
        "redirect-value": "Vrijednost:",
        "redirect-user": "Korisnički ID",
        "redirect-page": "ID stranice",
        "redirect-revision": "Verzija stranice",
        "redirect-file": "Naziv datoteke",
        "redirect-not-exists": "Vrijednost nije pronađena",
-       "fileduplicatesearch": "Pretraga za duplim datotekama",
+       "fileduplicatesearch": "Pretraga duplikata",
        "fileduplicatesearch-summary": "Pretraga za duplim datotekama na bazi njihove haš vrijednosti.",
        "fileduplicatesearch-legend": "Pretraga za dvojnicima",
        "fileduplicatesearch-filename": "Ime datoteke:",
        "tags-source-header": "Izvor",
        "tags-active-header": "Aktivna?",
        "tags-hitcount-header": "Označene izmjene",
+       "tags-actions-header": "Radnje",
        "tags-active-yes": "Da",
        "tags-active-no": "Ne",
        "tags-source-extension": "Definirano preko proširenja",
+       "tags-source-manual": "Ručno postavili korisnici ili botovi",
        "tags-source-none": "Više se ne koristi",
        "tags-edit": "uređivanje",
        "tags-delete": "izbriši",
        "tags-hitcount": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
        "tags-manage-no-permission": "Nemate pravo upravljati promjenama oznaka.",
        "tags-create-heading": "Napravi novu oznaku",
+       "tags-create-explanation": "Predoređeno je da će korisnici i botovi moći koristiti novonapravljene oznake.",
        "tags-create-tag-name": "Naziv oznake:",
        "tags-create-reason": "Razlog:",
        "tags-create-submit": "Napravi",
        "tags-create-no-name": "Morate navesti ime oznake.",
+       "tags-create-invalid-chars": "Nazivi oznaka ne smiju sadržavati zareze (<code>,</code>) ni kose crte (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Nazivi oznaka ne smiju sadržavati znakove koje se ne mogu koristiti u naslovima stranica.",
        "tags-create-already-exists": "Oznaka \"$1\" već postoji.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Dogodila se sljedeća greška|Dogodile su se sljedeće greške}} pri stvaranju oznake \"$1\":",
+       "tags-create-warnings-below": "Želite li nastaviti stvaranje oznake?",
        "tags-delete-title": "Izbriši oznaku",
+       "tags-delete-explanation-initial": "Brišete oznaku \"$1\" iz baze podataka.",
+       "tags-delete-explanation-in-use": "Bit će obrisana sa {{PLURAL:$2|$2 verzije ili unosa u zapisniku|svih $2 verzija i/ili unosa u zapisniku}} na kojima se trenutno koristi.",
+       "tags-delete-explanation-warning": "Ova radnja se <strong>ne može povratiti</strong> te se <strong>ne može poništiti</strong>. Ovo ne mogu uraditi čak ni administratori baze podataka. Budite sigurni da je ovo oznaka koju želite obrisati.",
+       "tags-delete-explanation-active": "<strong>Oznaka \"$1\" je i dalje aktivna te će se nastaviti primjenjivati u budućnosti.</strong> Kako biste ovo spriječili, otiđite na mjesto (ili mjesta) na kojima je postavljeno da se oznaka postavlja, te je tamo isključite.",
        "tags-delete-reason": "Razlog:",
+       "tags-delete-submit": "Nepovratno obriši ovu oznaku",
+       "tags-delete-not-allowed": "Oznake koje su definirane proširenjem se ne mogu obrisati ukoliko to proširenje isključivo ne dopušta.",
        "tags-delete-not-found": "Oznaka \"$1\" ne postoji.",
+       "tags-delete-too-many-uses": "Oznaka \"$1\" je primjenjena na više od {{PLURAL:$2|revizija|revizijǎ}}, što znači da se ne može obrisati.",
+       "tags-delete-warnings-after-delete": "Oznaka \"$1\" uspješno je obrisana. Međutim, došlo je do {{PLURAL:$2|sljedećeg upozorenja|sljedećih upozorenja}}:",
+       "tags-activate-title": "Aktiviraj oznaku",
+       "tags-activate-question": "Aktivirate oznaku \"$1\".",
        "tags-activate-reason": "Razlog:",
+       "tags-activate-not-allowed": "Nije moguće aktivirati oznaku \"$1\".",
        "tags-activate-not-found": "Oznaka \"$1\" ne postoji.",
-       "comparepages": "Usporedi stranice",
+       "tags-activate-submit": "Aktiviraj",
+       "tags-deactivate-title": "Deaktiviraj oznaku",
+       "tags-deactivate-question": "Deaktivirate oznaku \"$1\".",
+       "tags-deactivate-reason": "Razlog:",
+       "tags-deactivate-not-allowed": "Nije moguće deaktivirati oznaku \"$1\".",
+       "tags-deactivate-submit": "Deaktiviraj",
+       "tags-apply-no-permission": "Nemate dopuštenja da dodate izmjenske oznake zajedno s vašim promjenama.",
+       "tags-apply-not-allowed-one": "Oznaka \"$1\" se ne može ručno dodati.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|Sljedeća oznaka ne dozvoljava da se ručno doda|Sljedeće oznake ne dozvoljavaju da se ručno dodaju}}: $1",
+       "tags-update-no-permission": "Nemate dopuštenje da dodate ili uklonite izmjenske oznake sa zasebnih verzija ili zapisničkih unosa.",
+       "tags-update-add-not-allowed-one": "Oznaka \"$1\" se ne može ručno dodati.",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Sljedeća oznaka ne dozvoljava da se ručno doda|Sljedeće oznake ne dozvoljavaju da se ručno dodaju}}: $1",
+       "tags-update-remove-not-allowed-one": "Oznaka \"$1\" se ne može ručno ukloniti.",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Sljedeća oznaka ne dozvoljava da se ručno ukloni|Sljedeće oznake ne dozvoljavaju da se ručno uklone}}: $1",
+       "tags-edit-title": "Uredi oznake",
+       "tags-edit-manage-link": "Upravljaj oznakama",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Izabrana verzija|Izabrane verzije}} od [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Izabran unos zapisnika|Izabrani unosi zapisnika}}:",
+       "tags-edit-revision-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove verzije|svih $1 verzija}}",
+       "tags-edit-logentry-legend": "Dodaj ili ukloni oznake sa {{PLURAL:$1|ove zapisničke stavke|svih $1 zapisničkih stavki}}",
+       "tags-edit-existing-tags": "Postojeće oznake:",
+       "tags-edit-existing-tags-none": "\"Nema\"",
+       "tags-edit-new-tags": "Nove oznake:",
+       "tags-edit-add": "Dodaj ove oznake:",
+       "tags-edit-remove": "Ukloni ove oznake:",
+       "tags-edit-remove-all-tags": "(ukloni sve oznake)",
+       "tags-edit-chosen-placeholder": "Izaberi neke oznake",
+       "tags-edit-chosen-no-results": "Odgovarajuće oznake nisu pronađene",
+       "tags-edit-reason": "Razlog:",
+       "tags-edit-revision-submit": "Primijeni izmjene {{PLURAL:$1|ovoj verziji|svim $1 verzijama}}",
+       "tags-edit-logentry-submit": "Primijeni izmjene {{PLURAL:$1|ovom zapisničkom unosu|svim $1 zapisničkim unosima}}",
+       "tags-edit-success": "Izmjene su uspješno primijenjene.",
+       "tags-edit-failure": "Nije bilo moguće primijeniti izmjene:\n$1",
+       "tags-edit-nooldid-title": "Neispravna odredišna verzija",
+       "tags-edit-nooldid-text": "Niste izabrali odredišnu verziju na koju treba primijeniti ovu funkciju, ili odredišna verzija na postoji.",
+       "tags-edit-none-selected": "Izaberite bar jednu oznaku koju treba dodati ili ukloniti.",
+       "comparepages": "Uporedi stranice",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "compare-rev1": "Ispravljanje 1",
        "compare-rev2": "Ispravljanje 2",
-       "compare-submit": "Usporedi",
+       "compare-submit": "Uporedi",
        "compare-invalid-title": "Naslov koji ste unijeli je nevaljan.",
        "compare-title-not-exists": "Naslov koji ste naveli ne postoji.",
        "compare-revision-not-exists": "Izmjena koji ste naveli ne postoji.",
        "dberr-problems": "Žao nam je! Ova stranica ima određene tehničke poteškoće.",
        "dberr-again": "Pokušajte pričekati par minuta i zatim osvježiti.",
-       "dberr-info": "(ne može se spojiti server baze podataka: $1)",
+       "dberr-info": "(ne može se pristupiti bazi podataka: $1)",
+       "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
        "dberr-usegoogle": "U međuvremenu, možete pokušati pretraživanje putem Google.",
        "dberr-outofdate": "Zapamtite da njihovi indeksi našeg sadržaja ne moraju uvijek biti ažurni.",
        "dberr-cachederror": "Sljedeći tekst je keširana kopija zahtijevane stranice, koja možda nije potpuno ažurirana.",
        "htmlform-chosen-placeholder": "Izaberite opciju",
        "htmlform-cloner-create": "Dodaj još",
        "htmlform-cloner-delete": "Ukloni",
+       "htmlform-cloner-required": "Potrebna je barem jedna vrijednost.",
+       "htmlform-title-badnamespace": "[[:$1]] nije u imenskom prostoru \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "Stranica \"$1\" se ne može napraviti",
+       "htmlform-title-not-exists": "[[:$1]] ne postoji.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ne postoji.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nije ispravno korisničko ime.",
        "sqlite-has-fts": "$1 sa podrškom pretrage cijelog teksta",
        "sqlite-no-fts": "$1 bez podrške pretrage cijelog teksta",
        "logentry-delete-delete": "$1 {{GENDER:$2|obrisao|obrisala}} je stranicu $3",
        "revdelete-restricted": "primijenjena ograničenja za administratore",
        "revdelete-unrestricted": "uklonjena ograničenja za administratore",
        "logentry-block-block": "$1 {{GENDER:$2|blokirao|blokirala}} je {{GENDER:$4|$3}} sa vremenom isticanja blokade od $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|deblokirao|deblokirala}} je {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|promijenio|promijenila}} je postavke za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blokirao|blokirala}} je {{GENDER:$4|$3}} sa vremenom isticanja blokade od $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|promijenio|promijenila}} je postavke za blokiranje {{GENDER:$4|korisnika|korisnice}} {{GENDER:$4|$3}} u trajanju od $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 postavljanjem datoteke",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|uvezao|uvezla}} je $3 s drugog wikija",
+       "logentry-merge-merge": "$1 {{GENDER:$2|spojio|spojila}} je $3 u $4 (sve do izmjene $5)",
        "logentry-move-move": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4 bez ostavljanja preusmjerenja",
        "logentry-move-move_redir": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4 preko preusmjeravanja",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|premjestio|premjestila}} je stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja",
        "logentry-patrol-patrol": "$1 je {{GENDER:$2|označio|označila}} izmjenu $4 stranice $3 pregledanim",
-       "logentry-patrol-patrol-auto": "$1 je automatski {{GENDER:$2|označio|označila}} izmjenu $4 stranice $3 pregledanim",
+       "logentry-patrol-patrol-auto": "$1 automatski je {{GENDER:$2|označio|označila}} verziju $4 stranice $3 pregledanom",
        "logentry-newusers-newusers": "Korisnički račun $1 je {{GENDER:$2|napravljen}}",
        "logentry-newusers-create": "Korisnički račun $1 je {{GENDER:$2|napravljen}}",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|napravio|napravila}} korisnički račun $3",
        "logentry-newusers-byemail": "Korisnički račun $3 je {{GENDER:$2|napravio|napravila}} $1 i lozinka/šifra je poslana putem e-maila",
-       "logentry-newusers-autocreate": "Korisnički račun $1 je automatski {{GENDER:$2|napravljen}}",
-       "logentry-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
+       "logentry-newusers-autocreate": "Korisnički račun $1 automatski je {{GENDER:$2|napravljen}}",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|premjestio|premjestila}} je postavke zaštite sa $4 na $3",
+       "logentry-rights-rights": "$1 {{GENDER:$2|promijenio|promijenila}} je članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$1|je automatski promijenjeno članstvo|su automatski promijenjena članstva}} iz $4 u $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|postavio|postavila}} je $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|postavio|postavila}} је novu verziju $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|postavio|postavila}} је $3",
        "log-name-managetags": "Zapisnik upravljanja oznaka",
+       "log-description-managetags": "Ovaj zapisnik sadrži spisak izmjena u vezi [[Special:Tags|oznaka]]. Zapisnik sadrži samo radnje izvršene od strane administratora; unosi za oznake napravljene ili obrisane od strane wiki softvera se ne nalaze u ovom zapisniku.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|napravio|napravila}} je oznaku \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|obrisao|obrisala}} je oznaku \"$4\" (uklonjena je iz $5 {{PLURAL:$5|izmjene ili zapisnika|izmjena i/ili zapisnikǎ}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|aktivirao|aktivirala}} je oznaku \"$4\" za upotrebu od strane korisnika i botova",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|deaktivirao|deaktivirala}} je oznaku \"$4\" za upotrebu od strane korisnika i botova",
        "log-name-tag": "Zapisnik oznaka",
+       "log-description-tag": "Ova stranica prikazaju kad su korisnici dodali ili ukonili [[Special:Tags|oznake]] s pojedinih verzija ili zapisničkih unosa. Zapisnik ne prikazuje označavačke radnje ako su se dogodile prilikom uređivanja, brisanja ili slične radnje.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|dodao|dodala}} je {{PLURAL:$7|oznaku|oznaka}} $6 verziji $4 stranice $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|dodao|dodala}} je {{PLURAL:$7|oznaku|oznaka}} $6 verziji $5 zapisničkog unosa $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|uklonio|uklonila}} je {{PLURAL:$9|oznaku|oznake}} $8 sa verzije $4 stranice $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|uklonio|uklonila}} je {{PLURAL:$9|oznaku|oznake}} $8 sa zapisničkog unosa $5 stranice $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|ažurirao|ažurirala}} je oznake na verziji $4 strane $3 ({{PLURAL:$7|dodano}} $6; {{PLURAL:$9|uklonjeno}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|ažurirao|ažurirala}} je oznake na zapisničkom unosu $5 strane $3 ({{PLURAL:$7|dodano}} $6; {{PLURAL:$9|uklonjeno}} $8)",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak",
        "feedback-adding": "Dodajem povratne informacije na stranicu...",
        "feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem, molimo [$1 prijavite \"bug\" (grešku)].\nInače, možete ispuniti jednostavan obrazac ispod. Vaš komentar bit će dodan na stranicu \"[$3 $2]\" zajedno s Vašim korisničkim imenom.",
        "feedback-cancel": "Odustani",
        "feedback-close": "Završeno",
+       "feedback-external-bug-report-button": "Podnesi tehnički zadatak",
        "feedback-dialog-title": "Pošalji povratne informacije",
+       "feedback-dialog-intro": "Možete koristiti jednostavni formular ispod kako biste poslali povratne informacije. Vaš komentar će biti dodan stranici \"$1\" zajedno s vašim korisničkim imenom.",
        "feedback-error-title": "Greška",
        "feedback-error1": "Greška: Neprepoznati rezultat od API",
        "feedback-error2": "Greška: Uređivanje nije uspjelo",
        "feedback-error3": "Greška: Nema odgovora od API",
+       "feedback-error4": "Greška: Ne može se postaviti na dati naslov",
        "feedback-message": "Poruka:",
        "feedback-subject": "Tema:",
        "feedback-submit": "Pošalji",
+       "feedback-terms": "Shvatam da moje korisničko agentske informacije sadrže tačne informacije o pregledniku i verziji operativnog sistema i da će javno biti podijeljene zajedno s mojim povratnim informacijama.",
+       "feedback-termsofuse": "Slažem se da ću pružati povratne informacije u skladu s Uslovima korištenja.",
        "feedback-thanks": "Hvala! Vaša povratna informacija postavljena je na stranicu \"[$2 $1]\".",
        "feedback-thanks-title": "Hvala!",
+       "feedback-useragent": "Korisnički agent:",
        "searchsuggest-search": "Traži",
        "searchsuggest-containing": "sadrži...",
        "api-error-badaccess-groups": "Nemate ovlasti da postavljate datoteke na ovoj wiki.",
        "api-error-overwrite": "Pisanje preko postojeće datoteke nije dopušteno.",
        "api-error-stashfailed": "Unutrašnja greška: server nije mogao da spremi privremenu datoteku.",
        "api-error-publishfailed": "Unutrašnja greška: Server nije uspio objaviti privremenu datoteku.",
+       "api-error-stasherror": "Dogodila se greška pri postavljaju datoteke u skladište.",
+       "api-error-stashedfilenotfound": "Skladištena datoteka nije pronađena pri pokušaju postavljanja iste iz skladišta.",
+       "api-error-stashpathinvalid": "Putanja na kojoj je trebala biti skladištena datoteka je neispravna.",
+       "api-error-stashfilestorage": "Dogodila se greška pri postavljaju datoteke u skladište.",
+       "api-error-stashzerolength": "Server nije mogao skladištiti datoteku jer joj je veličina iznosila 0.",
+       "api-error-stashnotloggedin": "Morate biti prijavljeni kako biste sačuvali datoteke u skladište postavljanja.",
+       "api-error-stashwrongowner": "Datoteka kojoj ste pokušali pristupiti u skladištu ne pripada vama.",
+       "api-error-stashnosuchfilekey": "Datotečni ključ kome ste pokušali pristupiti u skladištu ne pripada vama.",
        "api-error-timeout": "Server nije odgovorio unutar očekivanog vremena.",
        "api-error-unclassified": "Desila se nepoznata greška",
        "api-error-unknown-code": "Nepoznata greška: \"$1\"",
        "duration-centuries": "$1 {{PLURAL:$1|vijek|vijeka|vijekova}}",
        "duration-millennia": "$1 {{PLURAL:$1|milenij|milenija}}",
        "rotate-comment": "Slika rotirana za $1 {{PLURAL:$1|stepen|stepeni}} u smjeru kazaljke na satu",
+       "limitreport-title": "Podaci profiliranja analizatora:",
        "limitreport-cputime": "Vrijeme korištenja CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
        "limitreport-walltime": "Korištenje u realnom vremenu",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
+       "limitreport-ppvisitednodes": "Broj predprocesiranih posjećenih nodova",
+       "limitreport-ppgeneratednodes": "Broj predprocesiranih generiranih nodova",
+       "limitreport-postexpandincludesize": "Nakon proširenja navedi i veličinu",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
+       "limitreport-templateargumentsize": "Veličina stavke šablona",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
+       "limitreport-expansiondepth": "Najveća dubina proširenja",
+       "limitreport-expensivefunctioncount": "Broj funkcije ekspenzivnog analizatora",
        "expandtemplates": "Proširi šablone",
        "expand_templates_intro": "Ova posebna stranica uzima neki tekst i proširuje sve šablone u njemu rekurzivno.\nOna također proširuje parserske funkcije poput\n<code><nowiki>{{</nowiki>#language:…}}</code> i varijable poput\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. U principu proširuje gotovo sve između dvostrukih zagrada.",
        "expand_templates_title": "Naslov konteksta, za {{FULLPAGENAME}} itd.:",
-       "expand_templates_input": "Tekst unosa:",
+       "expand_templates_input": "Unos:",
        "expand_templates_output": "Rezultat",
        "expand_templates_xml_output": "XML izlaz",
+       "expand_templates_html_output": "Sirov HTML prikaz",
        "expand_templates_ok": "U redu",
        "expand_templates_remove_comments": "Ukloni komentare",
        "expand_templates_remove_nowiki": "Onemogući oznake <nowiki> u rezultatima",
        "expand_templates_generate_xml": "Prikaži XML stablo parsera",
        "expand_templates_generate_rawhtml": "Pokaži izvorni HTML",
        "expand_templates_preview": "Pregled",
+       "expand_templates_preview_fail_html": "<em>Pošto stranica {{SITENAME}} ima uključen sirov HTML prikaz, te je bilo gubitka u podacima sesije, pregled je sakriven kao mjera predostrožnosti protiv JavaScript napada.</em>\n\n<strong>Ako je ovo ispravan pokušaj pretpregleda, molim da ponovo pokušate.</strong>\nAko i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]], pa ponovo prijaviti.",
+       "expand_templates_preview_fail_html_anon": "<em>Pošto stranica {{SITENAME}} ima uključen sirov HTML prikaz, a vi se niste prijavili, pregled je sakriven kao mjera predostrožnosti protiv JavaScript napada.</em>\n\n<strong>Ako je ovo ispravan pokušaj pretpregleda, molim da se [[Special:UserLogin|prijavite]] i pokušate ponovo.</strong>",
+       "pagelanguage": "Odabir jezika stranice",
        "pagelang-name": "Stranica",
        "pagelang-language": "Jezik",
        "pagelang-use-default": "Koristi podrazumijevani jezik",
        "pagelang-select-lang": "Izaberi jezik",
+       "right-pagelang": "promjena jezika stranice",
+       "action-pagelang": "promijenite jezik stranice",
        "log-name-pagelang": "Zapisnik promjene jezika",
+       "log-description-pagelang": "Ovo je zapisnik promjena jezika stranica.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|promijenio|promijenila}} je jezik stranice $3 iz $4 u $5.",
+       "default-skin-not-found": "Ups! Nije dostupna predodređena tema vašeg wikija, koja je definirana u <code dir=\"ltr\">$wgDefaultSkin</code> kao <code>$1</code>.\n\nVaša instalacija sadrži {{PLURAL:$4|sljedeću temu|sljedeće teme}}. Pogledajte [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priručnik: Podešavanje tema] za više informacija o tome kako {{PLURAL:$4|je uključiti|ih uključiti i izabrati predodređenu}}.\n\n$2\n\n; Ako ste upravo instalirali MediaWiki:\n: Vjerovatno ste je instalirali sa gita ili sa izvornog koda koristeći se nekom drugom metodom. Ovo je za očekivati. Pokušajte instalirati neku temu sa [https://www.mediawiki.org/wiki/Category:All_skins kataloga tema] tako što ćete:\n:* Preuzeti [https://www.mediawiki.org/wiki/Download tarball instalacijsku datoteku] koji sadrži nekoliko tema i proširenja. Možete prekopirati folder <code>skins/</code> iz nje.\n:* Preuzeti zasebne instalacijske tarball datoteke sa stranice [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]. \n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Koristiti Git kako biste preuzeli teme].\n: Ako ste MediaWiki razvijatelj, ovo ne bi trebalo utjecati na vaše git skladište.\n\n; Ako ste upravo nadogradili MediaWiki:\n: MediaWiki 1.24 i više verzije više ne automatski uključuju instalirane teme (pogledajte [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priručni: Automatski traženje tema]). Možete prekopirati {{PLURAL:$5|sljedeći red kǒda|sljedeće redove kǒda}} u datoteku <code>LocalSettings.php</code> kako biste uključili {{PLURAL:$5|odgovarajuću instaliranu temu|sve instalirane teme}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Ako ste upravo promijenili datoteku <code>LocalSettings.php</code>:\n: Provjerite jeste li napravili grešku pri unosu naziva tema.",
+       "default-skin-not-found-no-skins": "Ups! Nije dostupna predodređena tema vašeg wikija, koja je definirana u <code dir=\"ltr\">$wgDefaultSkin</code> kao <code>$1</code>.\n\nNemate instaliranih tema.\n\n; Ako ste upravo nadogradili MediaWiki:\n: Vjerovatno ste je instalirali sa gita ili sa izvornog koda koristeći se nekom drugom metodom. Ovo je za očekivati. MediaWiki 1.24 i više ne sadržavaju teme u glavnom skladištu. Pokušajte instalirati neku temu sa [https://www.mediawiki.org/wiki/Category:All_skins kataloga tema] tako što ćete:\n:* Preuzeti [https://www.mediawiki.org/wiki/Download tarball instalacijsku datoteku] koji sadrži nekoliko tema i proširenja. Možete prekopirati folder <code>skins/</code> iz nje.\n:* Preuzeti zasebne instalacijske tarball datoteke sa stranice [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]. \n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Koristiti Git kako biste preuzeli teme].\n: Ako ste MediaWiki razvijatelj, ovo ne bi trebalo utjecati na vaše git skladište.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (uključena)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (isključena)",
+       "mediastatistics": "Statistika datoteka",
+       "mediastatistics-summary": "Statistike o tipovima poslanih datoteka. Ovdje su uračunate samo najnovije verzije datoteka. Stare ili obrisane verzije nisu uračunate.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bajt|$1 bajt|$1 bajtova}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME tip",
+       "mediastatistics-table-extensions": "Moguća proširenja",
        "mediastatistics-table-count": "Broj datoteka",
        "mediastatistics-table-totalbytes": "Kombinirana veličina",
        "mediastatistics-header-unknown": "Nepoznato",
+       "mediastatistics-header-bitmap": "Bitmap slike",
        "mediastatistics-header-drawing": "Crteži (vektorske slike)",
        "mediastatistics-header-audio": "Zvuk",
        "mediastatistics-header-video": "Videa",
        "mediastatistics-header-text": "Tekstualno",
        "mediastatistics-header-executable": "Izvršni",
        "mediastatistics-header-archive": "Kompresovani formati",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|prateća tačka uklonjena je|pratećih tački uklonjeno je}} iz JSON-a",
+       "json-error-unknown": "Dogodio se problem s JSON-om. Greška: $1",
+       "json-error-depth": "Prekoračena je maksimalna dubina",
+       "json-error-state-mismatch": "Nevažeći ili pokvareni JSON",
+       "json-error-ctrl-char": "Greška kontrolnog simbola, moguće je da je neispravno enkodiran",
        "json-error-syntax": "Sintaksna greška",
+       "json-error-utf8": "Pokvareni UTF-8 znaci, moguće je da su neispravno enkodirani",
+       "json-error-recursion": "Jedna ili više rekurzivnih referenci u iznosu koga treba enkodirati",
+       "json-error-inf-or-nan": "Jedna ili više NAN ili INF vrijednosti u iznosu koga treba enkodirati",
+       "json-error-unsupported-type": "Data je vrijednost vrste koja se ne može enkodirati",
+       "headline-anchor-title": "Veza do ovog odjeljka",
        "special-characters-group-latin": "Latinica",
        "special-characters-group-latinextended": "Prošireni latinski",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-greek": "Grčki",
        "special-characters-group-cyrillic": "Ćirilica",
        "special-characters-group-arabic": "Arapski",
+       "special-characters-group-arabicextended": "Prošireni arapski",
        "special-characters-group-persian": "Perzijski",
        "special-characters-group-hebrew": "Hebrejski",
        "special-characters-group-bangla": "Bangladeški",
+       "special-characters-group-tamil": "Tamilski",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
        "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Tajlandski",
        "special-characters-group-lao": "Laoški",
-       "special-characters-group-khmer": "Kmerski"
+       "special-characters-group-khmer": "Kmerski",
+       "special-characters-title-endash": "crtica",
+       "special-characters-title-emdash": "duga crta",
+       "special-characters-title-minus": "minus",
+       "mw-widgets-titleinput-description-new-page": "stranica još ne postoji",
+       "mw-widgets-titleinput-description-redirect": "preusmjerava na $1"
 }
index bb14cfc..87c29a5 100644 (file)
@@ -48,7 +48,9 @@
                        "Macofe",
                        "Gerardduenas",
                        "Medol",
-                       "Xavier Dengra"
+                       "Xavier Dengra",
+                       "Pginer",
+                       "Eduardo Martinez"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "badtitletext": "El títol de la pàgina que heu introduït no és correcte, és en blanc o conté un enllaç trencat amb un altre projecte. També podria contenir algun caràcter no acceptat als títols de pàgina.",
        "title-invalid-empty": "El títol de la pàgina sol·licitada és buit o només conté el nom d’un espai de noms.",
        "title-invalid-utf8": "El títol de la pàgina sol·licitada conté una seqüència UTF-8 no vàlida.",
-       "title-invalid-interwiki": "El títol conté un enllaç interwiki",
+       "title-invalid-interwiki": "El títol de la pàgina sol·licitada conté un enllaç interwiki que no pot ser utilitzat en títols.",
        "title-invalid-talk-namespace": "El títol de la pàgina sol·licitada fa referència a una pàgina de discussió impossible.",
        "title-invalid-characters": "El títol de la pàgina sol·licitada conté caràcters no vàlids: «$1».",
        "title-invalid-relative": "El títol conté un camí relatiu. Els títols relatius (./, ../) no són vàlids perquè els navegadors web sovint no poden arribar-hi.",
        "actionthrottled": "Acció limitada",
        "actionthrottledtext": "Com a mesura per a prevenir la propaganda indiscriminada (spam), no podeu fer aquesta acció tantes vegades en un període de temps tan curt. Torneu-ho a intentar d'ací uns minuts.",
        "protectedpagetext": "S'ha protegit la pàgina per evitar-hi modificacions.",
-       "viewsourcetext": "Podeu visualitzar i copiar el codi font d’aquesta pàgina:",
-       "viewyourtext": "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
+       "viewsourcetext": "Podeu veure i copiar el codi font d’aquesta pàgina.",
+       "viewyourtext": "Vostè pot veure i copiar la font de <strong>les teves modificacions</strong> d'aquesta pàgina.",
        "protectedinterface": "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.\nPer afegir o canviar les traduccions per a tots els wikis, feu servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "editinginterface": "'''Avís:''' esteu editant una pàgina que s'utilitza per proporcionar text d'interfície per al programari. Els canvis que es facin a la pàgina afectaran l'aparença de la interfície d'altres usuaris del wiki.",
        "translateinterface": "Per afegir o canviar traduccions per a tots els wikis, utilitzeu [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgines}}",
        "createacct-benefit-body3": "{{PLURAL:$1|col·laborador recent|col·laboradors recents}}",
        "badretype": "Les contrasenyes que heu introduït no coincideixen.",
+       "usernameinprogress": "La creació d'un compte per a aquest usuari ja està en curs. Espereu.",
        "userexists": "El nom que heu entrat ja és en ús.\nEscolliu-ne un de diferent.",
        "loginerror": "Error d'inici de sessió",
        "createacct-error": "Error de creació de compte",
        "yourdiff": "Diferències",
        "copyrightwarning": "Si us plau, tingueu en compte que totes les contribucions per al projecte {{SITENAME}} es consideren com a publicades sota els termes de la llicència $2 (vegeu-ne més detalls a $1). Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.<br />\nA més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o bé de fonts en el domini públic o recursos lliures similars. Heu de saber que aquest '''no''' és el cas de la majoria de pàgines que hi ha a Internet.\n'''No feu servir textos amb drets d'autor sense permís!'''",
        "copyrightwarning2": "Si us plau, tingueu en compte que totes les contribucions al projecte {{SITENAME}} poden ser corregides, alterades o esborrades per altres usuaris. Si no desitgeu la modificació i distribució lliure dels vostres escrits sense el vostre consentiment, no els poseu ací.<br />\nA més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o bé de fonts en el domini públic o altres recursos lliures similars (consulteu $1 per a més detalls).\n'''No feu servir textos amb drets d'autor sense permís!'''",
+       "editpage-cannot-use-custom-model": "El model de contingut d'aquesta pàgina no pot ser canviat.",
        "longpageerror": "'''Error: El text que heu introduït és {{PLURAL:$1|d'un kilobyte|de $1 kilobytes}} i sobrepassa el màxim permès de {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''\nNo es pot desar.",
        "readonlywarning": "'''Avís: La base de dades està tancada per manteniment, de manera que no podreu desar els canvis ara mateix.'''\nÉs possible que vulgueu copiar i enganxar el text en un arxiu de text i desar-ho més tard.\n\nL'administrador que l'ha bloquejada ha donat la següent explicació: $1",
        "protectedpagewarning": "'''ATENCIÓ: Aquesta pàgina està bloquejada i només els usuaris amb drets d'administrador la poden modificar.\nA continuació es mostra la darrera entrada del registre com a referència:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objecte buit",
        "content-json-empty-array": "Matriu buida",
+       "duplicate-args-warning": "<strong>Avís:</strong> [[:$1]] crida [[:$2]] amb més d'un valor pel paràmetre «$3». Només s'utilitzarà el darrer valor proporcionat.",
        "duplicate-args-category": "Pàgines amb arguments duplicats en utilització de plantilles",
        "duplicate-args-category-desc": "La pàgina conté crides a plantilles que fan servir duplicats d'arguments, com ara <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.\n\nActualment n'hi ha {{PLURAL:$1|$1|$1}} i, com a molt, {{PLURAL:$2|hauria|haurien}} de ser $2.",
        "columns": "Columnes",
        "searchresultshead": "Preferències de la cerca",
        "stub-threshold": "Límit per a formatar l'enllaç com <a href=\"#\" class=\"stub\">esborrany</a> (en octets):",
+       "stub-threshold-sample-link": "mostra",
        "stub-threshold-disabled": "Inhabilitat",
        "recentchangesdays": "Dies a mostrar en els canvis recents:",
        "recentchangesdays-max": "(màxim $1 {{PLURAL:$1|dia|dies}})",
        "badsig": "La signatura que heu inserit no és vàlida; verifiqueu les etiquetes HTML que heu emprat.",
        "badsiglength": "La signatura és massa llarga.\nHa de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.",
        "yourgender": "Sexe:",
-       "gender-unknown": "No especificat",
+       "gender-unknown": "En esmentar-vos, el software utilitzarà paraules de gènere neutre, sempre que sigui possible",
        "gender-male": "Masculí",
        "gender-female": "Femení",
        "prefs-help-gender": "Opcional: s'usa perquè el programari se us adreci amb missatges amb el gènere adient. Aquesta informació serà pública.",
        "userrights-lookup-user": "Gestiona els grups d'usuari",
        "userrights-user-editname": "Introduïu un nom d'usuari:",
        "editusergroup": "Edita els grups d'usuaris",
-       "editinguser": "Modificació dels permisos de {{GENDER:$1|l’usuari|la usuària}} '''[[User:$1|$1]]''' $2",
+       "editinguser": "Modificació dels permisos de {{GENDER:$1|l'usuari|la usuària}} <strong>[[User:$1|$1]]</strong>$2",
        "userrights-editusergroup": "Edita els grups d'usuaris",
        "saveusergroups": "Desa els grups d'usuari",
        "userrights-groupsmember": "Membre de:",
        "boteditletter": "b",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|Un usuari vigila|$1 usuaris vigilen}} aquesta pàgina]",
-       "rc_categories": "Limita a les categories (separades amb \"|\")",
-       "rc_categories_any": "Qualsevol",
+       "rc_categories": "Limita a les categories (separades amb «|»):",
+       "rc_categories_any": "Qualsevol de les triades",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} després del canvi",
        "newsectionsummary": "/* $1 */ secció nova",
        "uploaddisabledtext": "S'ha inhabilitat la càrrega de fitxers.",
        "php-uploaddisabledtext": "La càrrega de fitxer està desactivada al PHP. Comproveu les opcions del fitxer file_uploads.",
        "uploadscripted": "Aquest fitxer conté codi HTML o de seqüències que pot ser interpretat equivocadament per un navegador.",
+       "upload-scripted-pi-callback": "No es poden carregar arxius que continguin instruccions de processament de pàgines d'estil XML",
        "uploadscriptednamespace": "Aquest fitxer SVG conté un espai de noms \"$1\" no autoritzat",
        "uploadinvalidxml": "No s'ha pogut analitzar l'XML del fitxer carregat.",
        "uploadvirus": "El fitxer conté un virus! Detalls: $1",
        "upload-too-many-redirects": "La URL conté massa redireccions",
        "upload-http-error": "Ha ocorregut un error HTTP: $1",
        "upload-copy-upload-invalid-domain": "Les càrregues de còpia no són disponibles des d'aquest domini.",
+       "upload-dialog-title": "Carrega un fitxer",
+       "upload-dialog-error": "S’ha produït un error",
+       "upload-dialog-warning": "S'ha produït un avís",
+       "upload-dialog-button-cancel": "Cancel·la",
+       "upload-dialog-button-done": "Fet",
+       "upload-dialog-button-save": "Desa",
+       "upload-dialog-button-upload": "Carrega",
+       "upload-dialog-label-select-file": "Seleccioneu fitxer",
+       "upload-dialog-label-infoform-title": "Detalls",
+       "upload-dialog-label-infoform-name": "Nom",
+       "upload-dialog-label-infoform-description": "Descripció",
+       "upload-dialog-label-usage-title": "Ús",
+       "upload-dialog-label-usage-filename": "Nom del fitxer",
        "backend-fail-stream": "No s'ha pogut transmetre el fitxer $1.",
        "backend-fail-backup": "No s'ha pogut fer una còpia de seguretat del fitxer $1.",
        "backend-fail-notexists": "El fitxer $1 no existeix.",
        "linksearch-pat": "Patró de cerca:",
        "linksearch-ns": "Espai de noms:",
        "linksearch-ok": "Cerca",
-       "linksearch-text": "Es poden utilitzar caràcters comodí com \"*.wikipedia.org\".\nEs necessita com a mínim un domini de primer nivell, per exemple \"*.org\".<br />\n{{PLURAL:$2|Protocol admès|Protocols admesos}}: <code>$1</code> (http:// per defecte si no se n'especifica cap).",
+       "linksearch-text": "Es poden utilitzar caràcters comodí com \"*.wikipedia.org\".\nEs necessita com a mínim un domini de primer nivell, per exemple \"*.org\".<br />\n{{PLURAL:$2|Protocol admès|Protocols admesos}}: $1 (http:// per defecte si no se n'especifica cap).",
        "linksearch-line": "$1 enllaçat a $2",
        "linksearch-error": "Els caràcters comodí només poden aparèixer a l'inici de l'url.",
        "listusersfrom": "Mostra usuaris començant per:",
        "emailuser": "Envia un missatge de correu electrònic a aquest usuari",
        "emailuser-title-target": "Envia un missatge electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}",
        "emailuser-title-notarget": "Enviar un correu electrònic a un usuari",
-       "emailpage": "Correu electrònic a usuari",
        "emailpagetext": "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}.\nL'adreça electrònica que vau indicar a [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.",
        "defemailsubject": "Correu electrònic de l'usuari \"$1\" de {{SITENAME}}",
        "usermaildisabled": "Correu electrònic d'usuaris deshabilitat",
        "emailccsubject": "Còpia del vostre missatge a $1: $2",
        "emailsent": "Correu electrònic enviat",
        "emailsenttext": "S'ha enviat el vostre correu electrònic.",
-       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «{{int:emailpage}}» de {{SITENAME}}.",
+       "emailuserfooter": "Aquest missatge de correu electrònic l'ha enviat $1 a $2 amb la funció «{{int:emailuser}}» de {{SITENAME}}.",
        "usermessage-summary": "Deixant missatges de sistema.",
        "usermessage-editor": "Missatger del sistema",
        "watchlist": "Llista de seguiment",
        "rollback-success": "Edicions revertides de $1; s'ha canviat a la darrera versió de $2.",
        "sessionfailure-title": "Error de sessió",
        "sessionfailure": "S'ha produït un error amb la vostra sessió. S'ha anul·lat aquesta acció en prevenció de pirateig de sessió. Premeu «Torna», recarregueu la pàgina des d'on veniu i torneu-ho a intentar.",
+       "changecontentmodel": "Canvia el model de contingut d'una pàgina",
+       "changecontentmodel-legend": "Canvia el model de contingut",
+       "changecontentmodel-title-label": "Títol de la pàgina",
+       "changecontentmodel-model-label": "Nou model de contingut",
+       "changecontentmodel-reason-label": "Motiu:",
+       "changecontentmodel-success-title": "S'ha canviat el model de contingut",
+       "changecontentmodel-success-text": "S'ha canviat el tipus de contingut de [[:$1]].",
+       "changecontentmodel-cannot-convert": "El contingut a [[:$1]] no es pot convertir a un tipus de $2.",
+       "changecontentmodel-nodirectediting": "El model de contingut $1 no permet l'edició directa",
+       "log-name-contentmodel": "Registre de canvis del model de contingut",
+       "log-description-contentmodel": "Esdeveniments relacionats amb els models de contingut d'una pàgina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|ha canviat}} el model de contingut de la pàgina $3 de «$4» a «$5»",
+       "logentry-contentmodel-change-revertlink": "reverteix",
+       "logentry-contentmodel-change-revert": "reverteix",
        "protectlogpage": "Registre de protecció",
        "protectlogtext": "A continuació es mostra un registre amb els canvis de protecció de pàgines.\nVegeu la [[Special:ProtectedPages|llista de pàgines protegides]] per a la llista de les pàgines que actualment tenen alguna protecció.",
        "protectedarticle": "ha protegit «[[$1]]»",
        "undeletepage": "Mostra i restaura pàgines esborrades",
        "undeletepagetitle": "'''A continuació teniu revisions eliminades de [[:$1]]'''.",
        "viewdeletedpage": "Visualitza les pàgines eliminades",
-       "undeletepagetext": "S'ha eliminat {{PLURAL:|la pàgina $1, però encara és a l'arxiu i pot ser restaurada|les pàgines $1, però encara són a l'arxiu i poden ser restaurades}}. Es Pot netejar l'arxiu periòdicament.",
+       "undeletepagetext": "{{PLURAL:|S'ha eliminat la pàgina següent, però encara és a l'arxiu i pot ser restaurada|S'han eliminat les $1 pàgines següents, però encara són a l'arxiu i poden ser restaurades}}.\nL'arxiu pot ser netejat periòdicament.",
        "undelete-fieldset-title": "Restaura revisions",
        "undeleteextrahelp": "Per a restaurar l'historial sencer de la pàgina, deixeu totes les caselles sense seleccionar i feu clic a '''''{{int:undeletebtn}}'''''.\nPer a realitzar una restauració selectiva, marqueu les caselles que corresponguin a les revisions que voleu recuperar, i feu clic a '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Una revisió arxivada|$1 revisions arxivades}}",
+       "undeleterevisions": "{{PLURAL:$1|Una revisió suprimida|$1 revisions suprimides}}",
        "undeletehistory": "Si restaureu la pàgina, totes les revisions seran restaurades a l'historial.\n\nSi s'hagués creat una nova pàgina amb el mateix nom d'ençà que la vàreu esborrar, les versions restaurades apareixeran abans a l'historial.",
        "undeleterevdel": "No es revertirà l'eliminació si això provoca la supressió parcial de la pàgina superior.\n\nEn aqueixos casos, heu de desmarcar o mostrar les revisions eliminades més noves.",
        "undeletehistorynoadmin": "S'ha eliminat la pàgina. El motiu es mostra\nal resum a continuació, juntament amb detalls dels usuaris que l'havien editat abans de la seua eliminació. El text de les revisions eliminades només és accessible als administradors.",
        "sp-contributions-blocked-notice-anon": "En aquests moments, aquesta adreça IP es troba blocada.\nPer més detalls, la última entrada del registre es mostra a continuació:",
        "sp-contributions-search": "Cerca les contribucions",
        "sp-contributions-username": "Adreça IP o nom d'usuari:",
-       "sp-contributions-toponly": "Mostra només revisions superiors",
+       "sp-contributions-toponly": "Mostra només les darreres revisions",
        "sp-contributions-newonly": "Mostra només modificacions que són creacions de pàgina",
        "sp-contributions-submit": "Cerca",
        "whatlinkshere": "Què hi enllaça",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
        "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
-       "tooltip-ca-edit": "Podeu modificar aquesta pàgina. Si us plau, previsualitzeu-la abans de desar-la",
+       "tooltip-ca-edit": "Modifica aquesta pàgina",
        "tooltip-ca-addsection": "Comença una nova secció",
        "tooltip-ca-viewsource": "Aquesta pàgina està protegida.\nPodeu veure'n el codi font.",
        "tooltip-ca-history": "Versions antigues d'aquesta pàgina",
        "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina",
        "tooltip-ca-nstab-user": "Vegeu la pàgina d'usuari",
        "tooltip-ca-nstab-media": "Vegeu la pàgina de l'element multimèdia",
-       "tooltip-ca-nstab-special": "Aquesta és una pàgina especial, no podeu modificar-la",
+       "tooltip-ca-nstab-special": "Aquesta és una pàgina especial i no pot modificar-se",
        "tooltip-ca-nstab-project": "Vegeu la pàgina del projecte",
        "tooltip-ca-nstab-image": "Visualitza la pàgina del fitxer",
        "tooltip-ca-nstab-mediawiki": "Vegeu el missatge de sistema",
        "pageinfo-robot-index": "Permès",
        "pageinfo-robot-noindex": "No permès",
        "pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
+       "pageinfo-visiting-watchers": "Nombre de vigilants de la pàgina que han visitat els canvis recents",
        "pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
        "pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
        "pageinfo-redirects-value": "$1",
        "tags-edit-reason": "Motiu:",
        "tags-edit-success": "S’han aplicat els canvis correctament.",
        "tags-edit-failure": "No s’han pogut aplicar els canvis:\n$1",
+       "tags-edit-nooldid-title": "Revisió de l'objectiu no vàlida",
        "tags-edit-none-selected": "Seleccioneu com a mínim una etiqueta per afegir o suprimir.",
        "comparepages": "Comparar pàgines",
        "compare-page1": "Pàgina 1",
        "htmlform-cloner-create": "Afegeix més",
        "htmlform-cloner-delete": "Suprimeix",
        "htmlform-cloner-required": "Cal com a mínim un valor.",
+       "htmlform-title-badnamespace": "[[:$1]] no es troba en l'espai de noms \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" és un títol de pàgina no editable",
+       "htmlform-title-not-exists": "[[:$1]] no existeix.",
+       "htmlform-user-not-exists": "<strong>$1</strong> no existeix.",
+       "htmlform-user-not-valid": "<strong>$1</strong> no és nom d'usuari vàlid.",
        "sqlite-has-fts": "$1, amb suport de búsqueda de text íntegre",
        "sqlite-no-fts": "$1, sense supor de búsqueda de text íntegre",
        "logentry-delete-delete": "$1 {{GENDER:$2|ha esborrat}} la pàgina $3",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "guió curt",
        "special-characters-title-emdash": "guió llarg",
-       "special-characters-title-minus": "signe menys"
+       "special-characters-title-minus": "signe menys",
+       "mw-widgets-dateinput-no-date": "No s'ha seleccionat cap data",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-new-page": "la pàgina no existeix encara",
+       "mw-widgets-titleinput-description-redirect": "redirigeix a $1"
 }
index b7c7ca6..e35509e 100644 (file)
        "gotaccount": "已經有賬戶了?'''$1'''。",
        "gotaccountlink": "躒入",
        "userlogin-resetlink": "躒入其資料𣍐記去是伓是?",
-       "userlogin-resetpassword-link": "å¯\86ç \81𣍐記?",
+       "userlogin-resetpassword-link": "å¯\86碼𣍐記?",
        "userlogin-helplink2": "對手汝躒入",
        "userlogin-loggedin": "汝已經使$1躒入過了。\n儷是卜想挈其他用戶來躒入,起動汝使下底其表格來躒入。",
        "userlogin-createanother": "新建另外蜀萆賬號",
        "resetpass-temp-password": "臨時密碼:",
        "passwordreset": "重置密碼",
        "passwordreset-text-one": "完成茲隻表單,通過電批寄臨時密碼其方法來重新設定汝其密碼。",
-       "passwordreset-legend": "重置密碼",
        "passwordreset-username": "用戶名:",
        "passwordreset-domain": "域名:",
        "passwordreset-email": "電批地址:",
        "deletedcontributions-title": "乞刪唻其用戶貢獻",
        "linksearch-ok": "尋討",
        "linksearch-line": "$1是趁$2𡅏鏈接過其",
-       "emailuser": "寄電子郵件乞茲隻用戶",
+       "emailuser": "寄電乞茲隻用戶",
        "emailpage": "寄電子郵件乞用戶",
        "defemailsubject": "{{SITENAME}}其用戶「$1」寄來其批",
        "noemailtitle": "無電批地址",
        "invert": "反選",
        "blanknamespace": "(主要)",
        "contributions": "{{GENDER:$1|User}}用戶貢獻",
-       "contributions-title": "ç\94¨æ\88¶å°\8d$1å\85¶è²¢ç\8d»",
+       "contributions-title": "$1å\85¶ç\94¨æ\88¶è²¢ç\8d»",
        "mycontris": "我其貢獻",
        "uctop": "(當前)",
        "month": "趁月(共更早):",
index 37bf386..1a37493 100644 (file)
@@ -8,14 +8,15 @@
                        "Sasan700",
                        "Умар",
                        "아라",
-                       "Kaganer"
+                       "Kaganer",
+                       "Исмаил Садуев"
                ]
        },
        "tog-underline": "КӀел сиз хьакха хьажорган:",
        "tog-hideminor": "Къайладаха кигийра нисдарш оц могӀама керла хийцамехь",
        "tog-hidepatrolled": "Къайладаха гӀаролладина нисдарш оц могӀама керла нисдаршкахь",
        "tog-newpageshidepatrolled": "Къайлаяха гӀароллайина агӀонаш оьцу могӀама керла агӀонашкахь",
-       "tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а хийцамаш чубогӀуш, тӀехьаббина боцурш а",
+       "tog-extendwatchlist": "Шорбина тӀехьажарна могӀам, ша беригге а, хийцамаш чубогӀуш, тӀехьаббина боцурш а",
        "tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
        "tog-numberheadings": "Ша шех хlитто терахь корташна",
        "tog-showtoolbar": "Гайта лакхара гӀирсийн панель тадарш дечу хенахь",
        "undeletethispage": "ХӀара агӀо меттахӀоттор",
        "undelete_short": "МеттахӀоттайé $1 {{PLURAL:$1|нисйинарг|нисйинарш}}",
        "viewdeleted_short": "{{PLURAL:$1|$1 ДӀадаьккхина нийсдаре|$1 ДӀадаьхна нийсдарше}} хьажар",
-       "protect": "Ð\93lаÑ\80олла Ð´Ã©",
+       "protect": "Ð\9bаÑ\80Ñ\8aÑ\8fÑ\80",
        "protect_change": "хийца",
-       "protectthispage": "Ð\93lаÑ\80олла Ð´Ã© Ñ\85lокÑ\85Ñ\83 Ð°Ð³lон",
+       "protectthispage": "Ð\9bаÑ\80Ñ\8aе Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о",
        "unprotect": "ГӀароллех къаста",
        "unprotectthispage": "ГӀароллех къаста",
-       "newpage": "Керла агӀо",
-       "talkpage": "Дийцаре йила хӀара агӀо",
+       "newpage": "Керла агӀонаш",
+       "talkpage": "Ð\94ийÑ\86аÑ\80е Ð¹Ð¸Ð»Ð»Ð° Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о",
        "talkpagelinktext": "Дийцаре",
        "specialpage": "Белхан агӀо",
        "personaltools": "Долахь болу гӀирсаш",
        "youhavenewmessagesfromusers": "Хьуна кхачанна $1 {{PLURAL:$3|1=$3 декъашхочунгара|$3 декъашхошкара}} ($2).",
        "youhavenewmessagesmanyusers": "Хьона еъна $1 дукху декъашхошкар ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|керла хаам|999=керла хаамаш}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|Ñ\82Ó\80аÑ\8cÑ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86ам|999=Ñ\82Ó\80аÑ\8cхьара бина хийцамаш}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86ам|999=Ñ\82Ó\80аÑ\8cÑ\85хьара бина хийцамаш}}",
        "youhavenewmessagesmulti": "Хьуна кхаьчна керла хаам оцу $1",
        "editsection": "нисъе",
        "editold": "нисъе",
        "viewdeleted": "Хьожий $1?",
        "restorelink": "{{PLURAL:$1|1=$1 дӀадаьккхина нийсдар|$1 дӀадяхна нийсдарш}}",
        "feedlinks": "Тайпанехь:",
-       "feed-invalid": "Тайпан нийсадоцу талол оцу куьгтаlорна.",
+       "feed-invalid": "Тайпан нийса доцу талол оцу куьгтаlорна.",
        "feed-unavailable": "Хаитарца йолу асанаш тlекхочучехь яц",
        "site-rss-feed": "$1 — RSS-аса",
        "site-atom-feed": "$1 — Atom-аса",
        "laggedslavemode": "Тергам бе: агӀона чохь керла йаьхинарш ца хила мега.",
        "readonly": "Блоктоьхна дӀайаздар хаамийн бухе",
        "enterlockreason": "Билгалде блоктохаран бахьана а, и чекх йолу хан а.",
-       "readonlytext": "АгӀонаш тӀетохар а кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
+       "readonlytext": "АгӀонаш тӀетохар а, кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
        "missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажорг дӀаяьккхина елахь я хийцам бина тиша хьажоргца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
        "missingarticle-rev": "(верси № $1)",
        "missingarticle-diff": "(башхалла: $1, $2)",
        "viewsource-title": "Агӏона $1 дуьххьарлера йозане хьажар",
        "actionthrottled": "Сиххалин доза тохар",
        "actionthrottledtext": "Спам цахилийта хӀара дешдерг кӀезиг хенахь дукху ца дайта дихкина ду. Дехар до массийта минот яьлча гӀорта.",
-       "protectedpagetext": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð´Ó\80акÑ\8aоÑ\8cвлина Ñ\8e Ñ\82адаÑ\80Ñ\88 Ñ\86а Ð´айта.",
+       "protectedpagetext": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина Ñ\8e Ñ\85ийÑ\86амаÑ\88 Ñ\86а Ð±айта.",
        "viewsourcetext": "Хьоьга далундерг хьажар а дезахь хlокху агlон чура йоза хьаэцар:",
-       "viewyourtext": "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а цуна копи ян а:",
+       "viewyourtext": "Хьан йиш ю '''хьой нисдинчу''' дӀадолалун йозе хьажа а, цуна копи ян а:",
        "protectedinterface": "ХӀокху агӀона чохь интерфейсан программа латторан хаам бу. Зулам ца дайта цуна хийцам бан куьйгалхошна бен цало.\nХӀокху хааман гоч тӀетоха я хийца лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net]",
        "editinginterface": "<strong>Тергам бе:</strong> Ахьа таеш ю интерфейсан йоза долу агӀо программин латторан.\nЦуна бина хийцам хьокху Википедин кхечу декъашхошна гур бу.",
        "translateinterface": "ХӀокху хааман гоч тӀетоха я хийца дехар до лелае локализацин сайт MediaWiki [//translatewiki.net/ translatewiki.net].",
-       "cascadeprotected": "Ð\90гÓ\80о Ñ\85ийÑ\86ам Ñ\86а Ð±Ð°Ð¹Ñ\82а Ð³Ó\80оÑ\80алла Ð´ина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
+       "cascadeprotected": "Ð\90гÓ\80о Ñ\85ийÑ\86ам Ñ\86а Ð±Ð°Ð¹Ñ\82а Ð»Ð°Ñ\80йина ю {{PLURAL:$1|хӀокху агӀона|хӀокху агӀонийн}} юкъа йогӀуш хилар бахьнехь:\n$2",
        "namespaceprotected": "ХӀан бакъо яц анна цӀерш чохь тадарш да «$1».",
        "customcssprotected": "Хьан бакъо яц хӀара CSS-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "customjsprotected": "Хьан бакъо яц хӀара JavaScript-агӀо тая, иза кхечу декъашхочун гӀерс болу дера.",
        "wrongpasswordempty": "Дехар до, язъе еса йоцу пароль.",
        "passwordtooshort": "Пароль хилла еза $1 {{PLURAL:$1|символ|символаш}} йолуш.",
        "password-name-match": "Язъен пароль декъашхочун дӀаяздарал башха хила еза.",
-       "password-login-forbidden": "Иштта декъашхочун цӀе а пароль а лелаян цамаго.",
+       "password-login-forbidden": "Иштта декъашхочун цӀе а, пароль а лелаян цамаго.",
        "mailmypassword": "Пароль кхоссар",
        "passwordremindertitle": "Декъашхочун {{grammar:genitive|{{SITENAME}}}}  пароль дагайаийтар",
        "passwordremindertext": "Цхьам (ахь хила мега IP-адрес $1 тӀера) керла пароль кхоллар дехна {{grammar:genitive|{{SITENAME}}}} ($4) чохь. Декъашхочун $2\nкхоьллина керла хана пароль: $3. Иза дехар ахь динехь,\nсистемин чугӀой хийца пароль.\nХьан керла пароль белх беш хира ю $5 {{PLURAL:$5|дийнахь}}.\n\nХьой дехар дийна дацахь хӀума маде Ӏад бита хӀара хаам.",
        "storedversion": "Ӏалашйина верси",
        "editingold": "'''ДӀахьедар. Ахьа таеш ю хӀокху агӀона шира елла верси.'''\nАгӀо Ӏалаш йинчул тӀехьа хьалхо бина хийцамаш дӀабяра бу.",
        "yourdiff": "Башхаллаш",
-       "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцушсанна оцу лицензи хьоляхь $2 (хьаж. $1).\nНагахь хьо лууш вацахь хьай йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИшта чӀагӀо йой ахьа, айхьа далош долучуьн хьо куьг да ву аьлла, я хьаэцна цхьан\nхьостера, хийцам ба а дӀаса даржада а чулацам болуш.<br />\n'''МАТОХИЙШ БАКЪО ЙОЦУ ГӀИРСАШ КХУ ЧУ, КУЬГ ДЕ БАКЪО ЛАР ЙЕШ ЙОЛУ!'''",
+       "copyrightwarning": "Тергаме хьажа, массо яззаман чутухуш долу йозан хийцам хьажарехь бу, арахоьцуш санна оцу лицензи хьолехь.\nНагахь хьо лууш вацахь хьайн йозанаш маьрша даржа а кхечаьрга хийцам байта, мадаха уьш кху чу.<br />\nИштта чӀагӀо йой ахьа, айхьа далош долучуьнна хьо куьг да ву аьлла, я хьаэцна цхьан\nхьостера, хийцам ба а дӀаса даржада а чулацам болуш.<br />\n'''МА-КХИССА БАКЪО ЙОЦУ ГӀИРСАШ КХУ ЧУ, КУЬЙГАЛХОЧУЬННА БАКЪО ЛАРЪЕШ ЙОЛУ!'''",
        "readonlywarning": "'''ДӀАХЬЕДО. ГӀирса бух блоктоьхна оьшуш долучу хьаштан, цундера хӀинц хьоьга дӀа ца йазло хийцам.\nХила мега, ахьа Ӏалаш дан дезаш хьайн йоза, юха тӀаьхьо леладан иза йоза.'''\n\nКуьйгалхочо блоктоьхна гӀирса бух, цо битина кхетош хӀара хаам: $1",
-       "protectedpagewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедаÑ\80. Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð³Ó\80аÑ\80олла Ð´ина ю хийцам цабайта, иза хийца я нисъян а бакъо йолуш куьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тӀаьххьара бина болу хийцамна тептар чура:",
-       "semiprotectedpagewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедо.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð³Ó\80аÑ\80олла Ð¹Ð¸Ð½Ð° Ñ\8e; Ð´Ó\80абазбинаÑ\87Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ð±Ðµ Ñ\86Ó\80е Ñ\85ийÑ\86алÑ\83Ñ\88 Ñ\8fÑ\86.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ñ\82епÑ\82аÑ\80о Ð±Ð°Ð»Ð¸Ð¹Ð½Ð° Ñ\82Ó\80аÑ\8cхьаралера дӀаязбина хаам:",
+       "protectedpagewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедаÑ\80. Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина ю хийцам цабайта, иза хийца я нисъян а бакъо йолуш куьйгалла лелош болу декъашхой бе бац.'''\nЛахахьа гойту хаамаш тӀаьххьара бина болу хийцамна тептар чура:",
+       "semiprotectedpagewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедо.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина Ñ\8e; Ð´Ó\80абазбинаÑ\87Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ð±Ðµ Ñ\86Ó\80е Ñ\85ийÑ\86алÑ\83Ñ\88 Ñ\8fÑ\86.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ñ\82епÑ\82аÑ\80о Ð±Ð°Ð»Ð¸Ð¹Ð½Ð° Ñ\82Ó\80аÑ\8cÑ\85хьаралера дӀаязбина хаам:",
        "cascadeprotectedwarning": "<div id=\"cascadeprotectedwarning\" style=\"border:1px solid #ee0; padding:10px; background:#ffa; margin-bottom:1em\">[[file:Padlock.svg|left|25px|ДовгӀа|link=]]\nХӀара агӀо тада бакъо йолуш [[Project:Куьйгалхой|куьйгалхой]] бу, хӀунда аьлча и агӀо латийна кхечу агӀонашца хӀоттделлачу гӀаролле:</div>",
        "templatesused": "{{PLURAL:$1|1=Кеп, лелош ю|Кепаш, лелош ю}} хӀокху агӀон башхонца:",
        "templatesusedpreview": "{{PLURAL:$1|1=Кеп, лелошдолу|Кепаш, лелойлу}} оцу хьалх хьожучу агӀонца:",
        "templatesusedsection": "ХӀокху декъан чохь {{PLURAL:$1|1=лелош йолу кеп|лелош йолу кепаш}}:",
        "template-protected": "(гlароллийца)",
-       "template-semiprotected": "(дÑ\83Ñ\8cззина Ð´Ð¾Ñ\86Ñ\83Ñ\88 Ð³lаÑ\80олла)",
+       "template-semiprotected": "(дÑ\83Ñ\8cззина Ð´Ð¾Ñ\86Ñ\83Ñ\88 Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80)",
        "hiddencategories": "ХӀара агӀо чуйогӀуш ю оцу $1 {{PLURAL:$1|1=къайлаха категори чу|къайлаха категореш чу}}:",
        "edittools": "<!-- Кхузе буха диллина йоза гуш хир ду редоккхуче бухахь а хlума чуйоккхуче бухахь. -->",
        "nocreate-loggedin": "Хьан бакъо яц керла агӀонаш кхолла.",
        "permissionserrorstext": "Хьан бакъо яц кхочуш хилийта хийцам оцу {{PLURAL:$1|1=шолгlа бахьанца|шолгlа бахьанашца}}:",
        "permissionserrorstext-withaction": "Хьан бакъо яц хlумда «'''$2'''» оцу {{PLURAL:$1|1=шолгlа бахьанца|шолгlа бахьанашца}}:",
        "recreate-moveddeleted-warn": "'''Тидам бе. Ахьа кхуллуш ю, хьалхо дӀаяьккхина йолу агӀо.'''\n\nХьажа, билгалла оьши хьуна хӀара агӀо юха кхолла.\nЛахахь далина ду дӀаяхарш тӀяхь долу тептарш а хӀокх агӀона цӀе хийцарш а.",
-       "moveddeleted-notice": "Ð\98за Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fÑ\8cккÑ\85ина Ñ\8fÑ\80а.\nХаийÑ\82аÑ\80на Ð»Ð°Ñ\85аÑ\85Ñ\8cа Ð³Ð¾Ð¹Ñ\82Ñ\83, Ñ\86Ñ\83Ñ\8cнÑ\86а Ð´Ð¾Ð»Ñ\83 Ð´Ó\80аÑ\8fздаÑ\80Ñ\88 ÐºÑ\85Ñ\83 Ñ\82епÑ\82аÑ\80 Ñ\87Ñ\83Ñ\80а Ð´Ó\80аÑ\8fÑ\85аÑ\80Ñ\88 Ð° цӀе хийцарш а.",
+       "moveddeleted-notice": "Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð´Ó\80аÑ\8fÑ\8cккÑ\85ина Ñ\8fÑ\80а.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ð³Ð¾Ð¹Ñ\82Ñ\83 Ñ\85Ó\80аÑ\80а Ð´Ó\80аккÑ\85аÑ\80Ñ\88 Ð°, цӀе хийцарш а.",
        "log-fulllog": "Хьажа деригге тептаре",
        "edit-hook-aborted": "Нисдар юхадаьккхина тӀехьожучо.\nХӀу бахьана ду билгал дина дац.",
        "edit-gone-missing": "АгӀо карлаяккха цатарло.\nИза дӀаяьккхина хила мега.",
        "undo-summary": "Юхадаьккхина {{GENDER:$2|декъашхочун}} [[Special:Contributions/$2|$2]] ([[User talk:$2|дийц.]]) нисдар $1",
        "undo-summary-username-hidden": "Юхадаьккхина декъашхочун нисдарш $1, цунна цӀе дӀахьулйина",
        "cantcreateaccounttitle": "Декъашхочун дӀаяздар кхолла йиш яц",
-       "viewpagelogs": "Гайта хlокху агlонан тептар",
+       "viewpagelogs": "Гайта хӀокху агӀонан тептар",
        "nohistory": "ХӀокху агӀона хийцамаш бина хила бац.",
        "currentrev": "Карара верси",
        "currentrev-asof": "Карара верси $1",
        "mergehistory-submit": "Цхьаьнатоха нисдарш",
        "mergehistory-empty": "Цхьаьнатоха нисдарш цакарий.",
        "mergehistory-success": "$3 {{PLURAL:$3|нисдар|нисдарш}} [[:$1]] чура кхиамца {{PLURAL:$3|дехьа даьккхина|дехьа дехна}} [[:$2]] чу.",
-       "mergehistory-fail": "АгӀонийн истореш вовшахтоха цаделира, дехар до агӀона параметаршка а хене а хьажа.",
+       "mergehistory-fail": "АгӀонийн истореш вовшахтоха цаделира, дехар до агӀона параметаршка а, хене а хьажа.",
        "mergehistory-no-source": "Коьрта агӀо «$1» яц.",
        "mergehistory-no-destination": "Ӏалашон агӀо «$1» яц.",
        "mergehistory-invalid-source": "Хьостан нийса корта хила еза.",
        "diff-empty": "(башхалла яц)",
        "diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
        "diff-multi-otherusers": "(ца {{PLURAL:$1|гайтина юккъера верси|гайтина юккъера версеш}} {{PLURAL:$2|кхин цхьан декъашхочун|$2 декъашхойн}})",
-       "diff-multi-manyusers": "({{PLURAL:$1|гайÑ\82ина Ñ\8fÑ\86 $1 Ñ\8eккÑ\8aеÑ\80а Ð²ÐµÑ\80Ñ\81и, Ð¹Ð¸Ð½Ð°|не Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ\8b $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
+       "diff-multi-manyusers": "({{PLURAL:$1|гайÑ\82ина Ñ\8fÑ\86 $1 Ñ\8eккÑ\8aеÑ\80а Ð²ÐµÑ\80Ñ\81и, Ð¹Ð¸Ð½Ð°|гайÑ\82ина Ñ\8fÑ\86 $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
        "searchresults": "Карийнарш",
        "searchresults-title": "Лахар «$1»",
        "titlematches": "АгӀонийн цӀерш цхьаьнанисялар",
        "search-category": "(категори $1)",
        "search-file-match": "(файлан чулацаме тера хилар)",
        "search-suggest": "Хила мега ахьа лоьхарг: $1",
+       "search-rewritten": "Гайтина карийнарш $1. Цуна метта лаха $2.",
        "search-interwiki-caption": "Гергара проекташ",
        "search-interwiki-default": "$1 хилам:",
        "search-interwiki-more": "(кхин)",
        "yourlanguage": "Мотт:",
        "yourvariant": "Метта башхо:",
        "yournick": "Керла куьгтаӀор:",
-       "prefs-help-signature": "Дийцаре агӀонаш чохь къуьгтаӀо деза символшца «<nowiki>~~~~</nowiki>», цара гойтур ду хьан къуьгтаӀор а хан а.",
+       "prefs-help-signature": "Дийцаре агӀонаш чохь къуьгтаӀо деза символшца «<nowiki>~~~~</nowiki>», цара гойтур ду хьан къуьгтаӀор а, хан а.",
        "badsiglength": "ТӀех деха куьг.\nКуьйган $1 {{PLURAL:$1|символ}} дукха хила цамега.",
        "yourgender": "Стен-боьршалла",
        "gender-unknown": "хӀоттийна яц",
        "right-writeapi": "дӀаяздеш лелойо API",
        "right-delete": "агӀонаш дӀаяхар",
        "right-bigdelete": "еха хийцаман истори йолу агӀонаш дӀаяхар",
-       "right-deletelogentry": "тептар чура билгала дӀаяздарш дӀадахар а меттахӀиттадар а.",
-       "right-deleterevision": "агӀонийн билгала версеш дӀаяхар а меттахӀиттаяр а",
+       "right-deletelogentry": "тептар чура билгала дӀаяздарш дӀадахар а, меттахӀиттадар а.",
+       "right-deleterevision": "агӀонийн билгала версеш дӀаяхар а, меттахӀиттаяр а",
        "right-deletedhistory": "дӀаяьхна агӀонийн исторега хьажар дӀадаьккхина йоза тӀекхочехь доцуш",
-       "right-deletedtext": "дӀадаьккхина йозане а хийцамашка а хьажар агӀонийн дӀаяьхна версин юккъахь",
+       "right-deletedtext": "дӀадаьккхина йозане а, хийцамашка а хьажар агӀонийн дӀаяьхна версин юккъахь",
        "right-browsearchive": "дӀаяхна агӀонаш лахар",
        "right-undelete": "АгӀонаш меттахӀоттор",
        "right-suppressrevision": "куьйгалхойх хьулйина йолу агӀонийн версеш меттахӀиттаяр а хьажар а",
        "right-suppressionlog": "долара тептаршка хьажар",
        "right-block": "кхечу декъашхошка тадарш ца дайта дехкар хӀоттор",
        "right-blockemail": "Цамагдо декъашхошка хааман кехаташ кхехьийта",
-       "right-hideuser": "декъашхочун цӀе а и лечкъо а цамагор",
-       "right-ipblock-exempt": "IP блоктохаршна чекхбовлар, диапазонийн шаблоктохаршна а блоктохаршна а",
+       "right-hideuser": "декъашхочун цӀе а, и лечкъо а цамагор",
+       "right-ipblock-exempt": "IP блоктохаршна чекхбовлар, диапазонийн шаблоктохаршна а, блоктохаршна а",
        "right-proxyunbannable": "проксен автоматически блоктохаран чекхбовлар",
        "right-unblockself": "ша шин блокдӀаяккхар",
-       "right-protect": "АгӀона гӀоралла хийцар а гӀоралла дина агӀо нисяр а",
-       "right-editprotected": "«{{int:protect-level-sysop}}» Ð±Ð°Ñ\85Ñ\8cанÑ\86а Ð³Ó\80оÑ\80алла Ð´Ð¸Ð½Ð° Ð°Ð³Ó\80онаÑ\88 Ð½Ð¸Ñ\81яр",
-       "right-editsemiprotected": "«{{int:protect-level-autoconfirmed}}» Ð±Ð°Ñ\85Ñ\8cанÑ\86а Ð³Ó\80оÑ\80алла Ð´Ð¸Ð½Ð° Ð°Ð³Ó\80онаÑ\88 Ð½Ð¸Ñ\81яр",
+       "right-protect": "АгӀо ларъяран хийцар а, ларйина агӀо нисяр а",
+       "right-editprotected": "«{{int:protect-level-sysop}}» Ð±Ð°Ñ\85Ñ\8cанÑ\86а Ð»Ð°Ñ\80йина Ð°Ð³Ó\80онаÑ\88 Ð½Ð¸Ñ\81Ñ\8aяр",
+       "right-editsemiprotected": "«{{int:protect-level-autoconfirmed}}» Ð±Ð°Ñ\85Ñ\8cанÑ\86а Ð»Ð°Ñ\80йина Ð°Ð³Ó\80онаÑ\88 Ð½Ð¸Ñ\81Ñ\8aяр",
        "right-editinterface": "лелош йолу интерфейсан хийцам бар",
-       "right-editusercssjs": "кхечу декъашхойн CSS- а JS- а файлаш нисяр",
+       "right-editusercssjs": "кхечу декъашхойн CSS- а, JS- а файлаш нисяр",
        "right-editusercss": "кхечу декъашхойн CSS-файлаш нсяр",
        "right-edituserjs": "кхечу декъашхойн JavaScript-файлаш нисяр",
        "right-editmyusercss": "Декъашхочун CSS файлаш таяр",
        "right-mergehistory": "агӀонаш вовшахтохар",
        "right-userrights": "декъашхойн массо бакъонаш хийцар",
        "right-userrights-interwiki": "кхечу вики сайташкара декъашхойн бакъонаш хийцар",
-       "right-siteadmin": "хаамийн гуламан блоктохар а блокдӀаяккхар а",
+       "right-siteadmin": "хаамийн гуламан блоктохар а, блокдӀаяккхар а",
        "right-override-export-depth": "агӀонаш экспорт ян, 5 кхаччалц къорга агӀонаш цхьан",
        "right-sendemail": "кхечу декъашхошка электронан хаамаш кхехьийта",
        "right-passwordreset": "пароль хийцарца электроннан хаамашка хьажар",
-       "right-managechangetags": "Хаамийн базан чохь [[Special:Tags|билгалонаш]] кхолла а дӀаяха а",
+       "right-managechangetags": "Хаамийн базан чохь [[Special:Tags|билгалонаш]] кхолла а, дӀаяха а",
        "newuserlogpage": "Декъашхой дӀабазбина тептар",
        "newuserlogpagetext": "Дукху хан йоцуш дӀабазбелла декъашхойн могӀам",
        "rightslog": "Декъашхочун бакъона тéптар",
        "action-deletedhistory": "хӀокху агӀона дӀаяккхинцу исторега хьажар",
        "action-browsearchive": "ДӀаяхна агӀонаш лахар",
        "action-undelete": "хӀара агӀо меттахӀоттор",
-       "action-suppressrevision": "хӀокху къайлаха йолу агӀон версеш хьажар а меттахӀоттор а",
+       "action-suppressrevision": "хӀокху къайлаха йолу агӀон версеш хьажар а, меттахӀоттор а",
        "action-suppressionlog": "хӀокху долара тептаре хьажар",
        "action-block": "хӀокху декъашхошка тадарш ца дайта дехкар хӀоттор",
        "action-protect": "хӀокху агӀона гӀоралин хьал хийцар",
        "action-viewmywatchlist": "шен тергаме могӀане хьажар",
        "action-viewmyprivateinfo": "хьан долара хааме хьажар",
        "action-editmyprivateinfo": "хьан долара хаам табар",
-       "action-managechangetags": "хаамийн базан чохь билгалонаш кхоллар а дӀаяхар а",
+       "action-managechangetags": "хаамийн базан чохь билгалонаш кхоллар а, дӀаяхар а",
        "nchanges": "$1 {{PLURAL:$1|хийцам}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тӀеххьара чудаларца}}",
        "enhancedrc-history": "истори",
        "recentchanges": "Керла нисдарш",
        "recentchanges-legend": "Керлачу хийцамийн нисдарш",
-       "recentchanges-summary": "Лахахь гайтина хене хьаьжжина Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
+       "recentchanges-summary": "Ð\9bаÑ\85аÑ\85Ñ\8c Ð³Ð°Ð¹Ñ\82ина Ñ\85ене Ñ\85Ñ\8cаÑ\8cжжина Ð\92икипедин Ð°Ð³Ó\80онаÑ\88каÑ\85Ñ\8c Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ð±Ð¸Ð½Ð° Ñ\85ийÑ\86амаÑ\88",
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
-       "recentchanges-feed-description": "Тергам бе тlаьхьара вики хийцаман хlокху ларца.",
+       "recentchanges-feed-description": "Тергам бе тӀаьххьара вики хийцаман хӀокху ларца.",
        "recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
-       "recentchanges-label-minor": "Хlара нисдинарг къастийна жимо долушсан",
+       "recentchanges-label-minor": "ХӀара пайда боцу хийцам бу",
        "recentchanges-label-bot": "ХӀара нисдар бото дина",
        "recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
        "recentchanges-label-plusminus": "байташкахь барам хийцар",
        "file-exists-duplicate": "ХӀара файл лахарчу {{PLURAL:$1|1=файлан|файлийн}} дубликат ю:",
        "file-deleted-duplicate": "Иштта файл ([[:$1]]) хӀинцале дӀаяьккхина хилла. Дехар до, юху файл чуяккхале файл дӀаяккхаран историга хьажа.",
        "uploadwarning": "ДӀахьедар",
-       "uploadwarning-text": "Дехар до, лахара файлах лаьцнарг хийца а дай юху а гӀорта файл чуяккха.",
+       "uploadwarning-text": "Дехар до, лахара файлах лаьцнарг хийца а, дай юху а гӀорта файл чуяккха.",
        "savefile": "ДӀаязъе файл",
        "uploaddisabled": "Чуяккхар магийна дац",
        "copyuploaddisabled": "URL тӀера чуяккхар дӀадайина ду.",
        "pageswithprop-prophidden-binary": "шалха маьӀна долу хӀума хьулйина ($1)",
        "doubleredirects": "Шалха дIасахьажийнарш",
        "doubleredirectstext": "ХӀокху агӀонехь ю дӀасахьажорашан тӀе хьажийна йолу дӀасахьажораш.\n<del>ТӀехула сиз хаькхна </del>нисйина чарна.",
-       "double-redirect-fixed-move": "АгӀон [[$1]] цӀе хийцина, хӀинца иза дӀахьажийна оцу [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] агӀонан цӀе хийцина.\nХӀинца иза авто-карлаяьккхина а [[$2]] агӀона тӀехьажийна.",
        "double-redirect-fixed-maintenance": "Шалха дӀасахьажинарг нисъяр [[$1]] → [[$2]].",
        "double-redirect-fixer": "ДӀасахьажинарш нисерг",
-       "brokenredirects": "ДIахаьдна долу дIасахьажораш",
+       "brokenredirects": "ДIадаьхна долу дIасахьажораш",
        "brokenredirectstext": "Лахара дӀасахьажийнарш ю йоцучу агӀонийн тӀе хьажийна:",
        "brokenredirects-edit": "нисъе",
        "brokenredirects-delete": "дӀаяккха",
        "shortpages": "Боца яззамаш",
        "longpages": "Беха яззамаш",
        "deadendpages": "Дика йоцу агӀонаш",
-       "protectedpages": "ГIаролла дина агӀонаш",
-       "protectedpages-indef": "Хан йоцуш гӀоралла динарш бен",
-       "protectedpages-cascade": "Чахчарин гӀоралла бен",
+       "protectedpages": "Ларйина агӀонаш",
+       "protectedpages-indef": "Хан йоцуш ларйинарш бен",
+       "protectedpages-summary": "ХӀокху агӀонгахь гойтуш ю йолуш йолу ларйина агӀонаш. ЦӀерш ларйина агӀонашка хьажа [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Чахчарин ларъяр бен",
        "protectedpages-noredirect": "Къайлаяха дӀасахьажийнарш",
        "protectedpages-timestamp": "Терахь/хан",
        "protectedpages-page": "АгӀо",
        "protectedpages-reason": "Бахьана",
        "protectedpages-unknown-timestamp": "Хууш дац",
        "protectedpages-unknown-performer": "Хууш доцу декъашхо",
-       "protectedtitles": "ГӀаролла дина цӀерш",
+       "protectedtitles": "Ларйина цӀерш",
+       "protectedtitles-summary": "ХӀокху агӀонгахь гойтуш ю ца кхоллийта ларйина цӀерш. ХӀинца ларйина агӀонашка хьажа [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "listusers": "Декъашхойн могӀам",
        "listusers-editsonly": "Цхаъ мукъане а хийцам бина декъашхой гайта",
        "listusers-creationsort": "Кхоьллина хене хьаьжжина нисъяр",
        "speciallogtitlelabel": "Ӏалашо (цӀе я декъашхо):",
        "log": "Тéптарш",
        "all-logs-page": "Дерриге тӀекхочучехь долу тептарш",
-       "alllogstext": "Ð\9cаÑ\81Ñ\81о Ñ\82éпÑ\82аÑ\80 могӀам. {{SITENAME}}.\nШуьга харжалур бу хилам оцу тептаре хьаьжжина, декъашхочун цӀе (дӀаяздар диц а цадеш) я цо хьейина агӀонаш (ишта дӀаяздар а диц цадеш).",
+       "alllogstext": "Ð\9cаÑ\81Ñ\81о Ñ\8eкÑ\8aаÑ\80а Ð¶Ñ\83Ñ\80лийн могӀам. {{SITENAME}}.\nШуьга харжалур бу хилам оцу тептаре хьаьжжина, декъашхочун цӀе (дӀаяздар диц а цадеш) я цо хьейина агӀонаш (ишта дӀаяздар а диц цадеш).",
        "logempty": "Тептарш чохь хӀокху агӀона дӀаяздарш дац.",
        "log-title-wildcard": "ХӀокху символашца болалуш болу кортанаш карабе",
        "showhideselectedlogentries": "Гайта/къайлаяха хаьржина башхонаш",
        "linksearch-pat": "Лехарна кеп:",
        "linksearch-ns": "ЦӀерийн ана:",
        "linksearch-ok": "Лахар",
-       "linksearch-text": "Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.\nЛакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />\nЛовш йолу {{PLURAL:$2|1=протокол|протоколаш}}: <code>$1</code> (Iад йитарца http://, протокол бакъалла язъен яцахь).",
+       "linksearch-text": "Лело мега хӀоттош йолу символаш, масала, <code>*.wikipedia.org</code>.\nЛакхара даржан домен мукъа хила еза , масала<code>*.org</code><br />\nЛовш йолу {{PLURAL:$2|1=протокол|протоколаш}}: $1 (Iад йитарца http://, протокол бакъалла язъен яцахь).",
        "linksearch-line": "$2 — хьажорг кху $1",
        "listusersfrom": "Гучé баха декъашхой, болалуш болу тӀера:",
        "listusers-submit": "Гайта",
        "emailuser": "Декъашхочун хааман кехат",
        "emailuser-title-target": "{{GENDER:$1|декъашхочунга}} электронан хаам базбар",
        "emailuser-title-notarget": "Декъашхочунга кехат яздар",
-       "emailpage": "Декъашхочунга кехат яздар",
        "emailpagetext": "ХӀокху агӀона гӀоьнца йиш ю {{GENDER:$1|декъашхочун}} электронан почте хаам бахьийта.\nХьоьга жоп лур ду ахьа [[Special:Preferences|хьайн гӀирса чу]] дӀаяздина долу адрес тӀе.",
        "defemailsubject": "Хаам {{grammar:genitive|{{SITENAME}}}} чура бу",
        "usermaildisabled": "Декъашхочун электронан пошт дӀаяйина ю",
        "removedwatchtext": "АгӀо «[[:$1]]» дӀаяьккхина яра хьан [[Special:Watchlist|тергаме могӀанан юкъар]].",
        "removedwatchtext-short": "«$1» агӀо хьан тергаман магӀам чура дӀаяьккхина.",
        "watch": "Тидам бе",
-       "watchthispage": "Тергам бé хlокху агlон",
+       "watchthispage": "Тергам бé хӀокху агӀона",
        "unwatch": "Тергамах къаста",
        "unwatchthispage": "ДӀадаккха терго яр",
-       "notanarticle": "Ð\91аÑ\86 Ñ\8fззам",
+       "notanarticle": "Яззам Ð±Ð°Ñ\86",
        "notvisiblerev": "Верси дӀаяьккхина хила",
        "watchlist-details": "Хьан тергаме могӀанца $1 {{PLURAL:$1|агӀо}} ю, дийцаре агӀонаш йоцуш.",
        "wlheader-enotif": "Электронан почте хаамаш байтар латина ду.",
        "changecontentmodel-reason-label": "Бахьана:",
        "logentry-contentmodel-change-revertlink": "юхаяккха",
        "logentry-contentmodel-change-revert": "Юхаяккха",
-       "protectlogpage": "Ð\93lаÑ\80олли тептар",
-       "protectlogtext": "Лахахь гойту агӀона гӀоралла дарна бина хийцамаш чохь болу тептар.\nХьа кхин йиш ю [[Special:ProtectedPages|хӀинца гӀоралла дина йолу агӀонийн могӀаме хьажа]].",
-       "protectedarticle": "гlаÑ\80олла Ð´Ð¸Ð½Ð° Ð°Ð³lо «[[$1]]»",
-       "modifiedarticleprotection": "агlонан гlаролли локхалла хийцина «[[$1]]»",
-       "unprotectedarticle": "ГӀоролла дӀадаьстина «[[$1]]»",
-       "movedarticleprotection": "«[[$2]]» Ð°Ð³Ó\80она Ñ\82Ó\80еÑ\80а Ð³Ó\80аÑ\80олла «[[$1]]» агӀона тӀе даьккхина",
-       "protect-title": "Ð\93Ó\80оÑ\80алла Ñ\85Ó\80оÑ\82Ñ\82ор: «$1»",
+       "protectlogpage": "Ð\9bаÑ\80Ñ\8fÑ\80ан тептар",
+       "protectlogtext": "Лахахь гойту агӀо лаъръяран хийцамаш чохь болу тептар.\nХьа кхин йиш ю [[Special:ProtectedPages|хӀинца ларйина йолу агӀонийн могӀаме хьажа]].",
+       "protectedarticle": "Ð\9bаÑ\80йина Ð°Ð³Ó\80о «[[$1]]»",
+       "modifiedarticleprotection": "«[[$1]]» агӀонан ларяран локхалла хийцина",
+       "unprotectedarticle": "«[[$1]]» ларъяр дӀадаьстина",
+       "movedarticleprotection": "«[[$2]]» Ð°Ð³Ó\80она Ñ\82Ó\80еÑ\80а Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80 «[[$1]]» агӀона тӀе даьккхина",
+       "protect-title": "Ð\9bаÑ\80Ñ\8aÑ\8fр: «$1»",
        "protect-title-notallowed": "ГӀораллин бараме хьажар «$1»",
        "prot_1movedto2": "«[[$1]]» цӀе хийцина → «[[$2]]»",
        "protect-badnamespace-title": "ГӀораладан цалуш йолу цӀерийн ана",
        "protect-badnamespace-text": "ХӀокху цӀерийн меттигехь йолу агӀонашна гӀараладан цало.",
        "protect-norestrictiontypes-title": "ГӀараладан цалуш йолу агӀо",
-       "protect-legend": "Ð\91акÑ\8aде Ð³Ó\80оÑ\80алла Ð´Ð°р",
+       "protect-legend": "Ð\91акÑ\8aде Ð°Ð³Ó\80о Ð»Ð°Ñ\80Ñ\8aÑ\8fр",
        "protectcomment": "Бахьана:",
        "protectexpiry": "Чекхйолу:",
-       "protect_expiry_invalid": "Ð\9dийÑ\81а Ð¹Ð¾Ñ\86Ñ\83 Ñ\85ан Ð³lаÑ\80олла Ð´lайаларехь.",
+       "protect_expiry_invalid": "Ð\9dийÑ\81а Ð¹Ð¾Ñ\86Ñ\83 Ñ\85ан Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80 Ð´Ó\80айаларехь.",
        "protect_expiry_old": "Хан чаккхе — хьалхалера.",
-       "protect-unchain-permissions": "СÑ\85Ñ\8cабелла ÐºÑ\85ин Ð³Ó\80оÑ\80Ñ\80алин гӀирс",
+       "protect-unchain-permissions": "СÑ\85Ñ\8cабелла ÐºÑ\85ин Ð»Ð°Ñ\8aÑ\80Ñ\8aÑ\8fÑ\80ан гӀирс",
        "protect-text": "Кхузéхь хьо хьажало хийцалуш гӀароллин локхалла оцу агӀонашна '''$1'''.",
        "protect-locked-access": "Хьан дӀаяздаран тоъал бакъо яц гӀароллийн локхаллéхь агӀон хийцам бá. ДӀадоьлху хӀоттийнарш агӀонна '''$1''':",
-       "protect-cascadeon": "Хlара агlо гlароллийца ю, хlунд аьлча иза латийна {{PLURAL:$1|1=лахахьа гойтучу агlонца, цуьнца хlоттийна|лахахьа гойтучу агlоншца, цаьрца хlоттийна}} чахчарийца гlаролла. Хьога хийцалур ю гlаролли локхалла хlокху агlон, амма оцо хийцам бийра бац чахчарехь йолучу гlароллийна.",
-       "protect-default": "Ð\93lаÑ\80олла Ð¹оцуш",
+       "protect-cascadeon": "ХӀара агӀо хӀинца ларйина ю, хӀунда аьлча иза латийна {{PLURAL:$1|1=лахахьа гойтучу агӀонца, цуьнца хӀоттийна|лахахьа гойтучу агӀоншца, цаьрца хӀоттийна}} чахчарийца ларяър. Хьога хийцалур ду ларяран локхалла хӀокху агӀон, амма оцо хийцам бийра бац чахчарехь йолучу ларярна.",
+       "protect-default": "Ð\9bаÑ\80Ñ\8aÑ\8fÑ\80 Ð´оцуш",
        "protect-fallback": "Бакъо оьшу «$1»",
-       "protect-level-autoconfirmed": "Ð\93lаÑ\80олла Ð´Ã© Ð¾Ñ\86Ñ\83 ÐºÐµÑ\80ла Ð° Ð´lабазбина Ð±Ð¾Ñ\86Ñ\83Ñ\87Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85ойÑ\85",
-       "protect-level-sysop": "Ð\9aÑ\83Ñ\8cйгалÑ\85оÑ\88на Ð±Ã© Ñ\86амагдо",
+       "protect-level-autoconfirmed": "Ð\9cагийна Ð°Ð²Ñ\82о-Ñ\82Ó\80елаÑ\8cÑ\86на Ð±Ð¾Ð»Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88на",
+       "protect-level-sysop": "Ð\9cагийна ÐºÑ\83Ñ\8cйгалÑ\85оÑ\88на",
        "protect-summary-cascade": "чахчареца",
        "protect-expiring": "чакхйолу $1 (UTC)",
        "protect-expiring-local": "чекхйолу $1",
        "protect-expiry-indefinite": "хан чаккхе йоцуш",
-       "protect-cascade": "Ð\93Ó\80аÑ\80олла Ð¹Ã© Ð°Ð³Ó\80онаÑ\88, Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онÑ\86а Ñ\85Ó\80оÑ\82Ñ\82айеллаÑ\80Ñ\88 (Ñ\87аÑ\85Ñ\87аÑ\80é Ð³Ó\80аÑ\80олла)",
+       "protect-cascade": "Ð\90гÓ\80онаÑ\88 Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80, Ñ\85Ó\80окÑ\85Ñ\83 Ð°Ð³Ó\80онÑ\86а Ñ\85Ó\80оÑ\82Ñ\82айеллаÑ\80Ñ\88 (Ñ\87аÑ\85Ñ\87аÑ\80é Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80)",
        "protect-cantedit": "Хьéга хийцам цабало хӀокху агӀон гlаролли локхалан, хӀуд аьлча хьан бакъо яц оцунна тадар дан.",
        "protect-othertime": "Кхин хан:",
        "protect-othertime-op": "кхин хан",
        "protect-existing-expiry-infinity": "Карара чекхйолу хан: чаккхе йоцу",
        "protect-otherreason": "Кхин бахьана/тӀетохар:",
        "protect-otherreason-op": "Кхин бахьана",
-       "protect-dropdown": "* Ð\93Ó\80оÑ\80алла Ð´Ð°Ñ\80на Ð±Ð°Ñ\8cÑ\85Ñ\8cаÑ\88 \n** Ñ\81иÑ\85\81иÑ\85а Ð·Ñ\83лам Ð´Ð°Ñ\80 \n** Ð´Ñ\83ккÑ\85а Ñ\81пам Ñ\85илаÑ\80\n** Ð½Ð¸Ñ\81даÑ\80ийн Ñ\82Ó\80ом \n** Ð³Ó\80аÑ\80аÑ\8fлл агӀо",
+       "protect-dropdown": "* Ð\9bаÑ\8aÑ\80Ñ\8aÑ\8fÑ\80ан Ð±Ð°Ñ\85Ñ\8cанаÑ\88 \n** Ñ\81иÑ\85\81иÑ\85а Ð·Ñ\83лам Ð´Ð°Ñ\80 \n** Ð´Ñ\83ккÑ\85а Ñ\81пам Ñ\85илаÑ\80\n** Ð½Ð¸Ñ\81даÑ\80ийн Ñ\82Ó\80ом \n** Ð³Ó\80аÑ\80аÑ\8fÑ\8cлла агӀо",
        "protect-edit-reasonlist": "Бахьанин могӀам нисбар",
        "protect-expiry-options": "1 сахьт:1 hour,1 де:1 day,1 кӀиран:1 week,2 кӀиран:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шо:1 year,цlкъа:infinite",
        "restriction-type": "Бакъонаш:",
        "restriction-move": "ЦӀе хийцар",
        "restriction-create": "Кхоллар",
        "restriction-upload": "Чуйолуш",
-       "restriction-level-sysop": "дуьззина гӀоралла",
-       "restriction-level-autoconfirmed": "дÑ\83Ñ\8cззина Ð´Ð¾Ñ\86Ñ\83Ñ\88 Ð³Ó\80аÑ\80олла",
+       "restriction-level-sysop": "юьззина ларъяр",
+       "restriction-level-autoconfirmed": "дÑ\83Ñ\8cззина Ð´Ð¾Ñ\86Ñ\83Ñ\88 Ð»Ð°Ñ\80даÑ\80",
        "restriction-level-all": "массо барам",
        "undelete": "ДӀаяьхна агӀонашка хьажар",
-       "undeletepage": "ДӀаяьхна агӀонашка хьажар а меттахӀоттор а",
+       "undeletepage": "ДӀаяьхна агӀонашка хьажар а, меттахӀоттор а",
        "undeletepagetitle": "'''Лахахь гайтина хӀокху [[:$1]] агӀона дӀаяхина версеш'''.",
        "viewdeletedpage": "ДӀаяьхна йолу агӀонашка хьажар",
        "undelete-fieldset-title": "МеттахӀоттае версеш",
        "undeleteinvert": "Къастае массо",
        "undeletecomment": "Бахьана:",
        "undeletedrevisions": "{{PLURAL:$1|меттахӀоьттина}} $1 {{PLURAL:$1|хийцам}}",
-       "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а $2 {{PLURAL:$2|файл}} а",
+       "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а, $2 {{PLURAL:$2|файл}} а",
        "undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
        "cannotundelete": "ГӀалат меттахӀоттайина:\n$1",
        "undeletedpage": "'''МеттахӀоттайина агӀо «$1».'''\n\nДӀадяхнарш долу могӀане [[Special:Log/delete|тéптаре хьажа]].",
        "ipbsubmit": "Блоктоха хӀокху декъашхочун/адресна",
        "ipbother": "Кхин хан:",
        "ipboptions": "2 сахьат:2 hours,1 де:1 day,3 де:3 days,1 кlиран:1 week,2 кlиран:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шо:1 year,цӀкъа:infinite",
-       "ipbhidename": "Нисдарийн а могӀаман а чура декъашхочун цӀе хьул йе",
-       "ipbwatchuser": "ТӀетоха тергаме могӀам юкъа цуьнан долахь йолу агӀо а цуьнан дийцаре агӀо а",
+       "ipbhidename": "Нисдарийн а, могӀаман а чура декъашхочун цӀе хьул йе",
+       "ipbwatchuser": "ТӀетоха тергаме могӀам юкъа цуьнан долахь йолу агӀо а, цуьнан дийцаре агӀо а",
        "ipb-disableusertalk": "Цамагдо шин дийцаре агӀо та я блоктоьхна хан чекхъяллалц",
        "ipb-change-block": "Юхаблоктоха декъашхочун оьцу хийцамашца",
        "ipb-confirm": "Бакъде блоктохар",
        "articleexists": "ХӀарасанна цӀе йолу агӀо йолуш ю йа ахьа гойтуш йолу цӀе магош яц.\nДехар до, харжа кхин цӀе.",
        "movetalk": "Цуьнца йогӀуш йолу дийцаре агӀон цӀе хийцар",
        "move-subpages": "ЦӀерш хийца бухара агӀонийн ($1 кхаччалц)",
-       "move-talk-subpages": "ЦӀе хийца бухара агӀонийн а агӀонийн дийцаре а ($1  кхаччалц)",
+       "move-talk-subpages": "ЦӀе хийца бухара агӀонийн а, агӀонийн дийцаре а ($1  кхаччалц)",
        "movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
        "movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
        "movelogpage": "ЦӀерш хийцаран тептар",
        "imageinvalidfilename": "Файлан цӀе гӀалате ю",
        "fix-double-redirects": "Хьалхара цӀе йолу дӀасахьажорг нисъян",
        "move-leave-redirect": "Ӏадйита дӀасахьажораг",
-       "protectedpagemovewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедаÑ\80.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð³Ó\80аÑ\80олла Ð¹Ð¸Ð½Ð° Ñ\8e; Ñ\86Ó\80е Ñ\85ийÑ\86а Ñ\8f Ð½Ð¸Ñ\81йа а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
-       "semiprotectedpagemovewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедо.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð³Ó\80аÑ\80олла Ð¹Ð¸Ð½Ð° Ñ\8e; Ð´Ó\80абазбинаÑ\87Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ð±Ðµ Ñ\86Ó\80е Ñ\85ийÑ\86алÑ\83Ñ\88 Ñ\8fÑ\86.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ñ\82епÑ\82аÑ\80о Ð±Ð°Ð»Ð¸Ð¹Ð½Ð° Ñ\82Ó\80аÑ\8cхьаралера дӀаязбина хаам:",
+       "protectedpagemovewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедаÑ\80.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина Ñ\8e; Ñ\86Ó\80е Ñ\85ийÑ\86а Ñ\8f Ð½Ð¸Ñ\81Ñ\8aÑ\8fн а бакъо йолуш куьйгалхой бе бац.\nЛахахьа тептаро балийна тӀаьхьаралера дӀаязбина хаам:",
+       "semiprotectedpagemovewarning": "'''Ð\94Ó\80аÑ\85Ñ\8cедо.''' Ð¥Ó\80аÑ\80а Ð°Ð³Ó\80о Ð»Ð°Ñ\80йина Ñ\8e; Ð´Ó\80абазбинаÑ\87Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\88ка Ð±Ðµ Ñ\86Ó\80е Ñ\85ийÑ\86алÑ\83Ñ\88 Ñ\8fÑ\86.\nÐ\9bаÑ\85аÑ\85Ñ\8cа Ñ\82епÑ\82аÑ\80о Ð±Ð°Ð»Ð¸Ð¹Ð½Ð° Ñ\82Ó\80аÑ\8cÑ\85хьаралера дӀаязбина хаам:",
        "move-over-sharedrepo": "== Файл йолуш ю ==\nВикигулам чохь йолуш ю [[:$1]]. ХӀокху файлан цӀе хийцича Викигулам чуьраниг дӀакъовлу.",
        "export": "АгӀонаш араяхар",
        "exporttext": "Шуьга далур ду кхечу меттера чудахарш, йоза а хийцаме тептарш билгалла йолу агӀонаш я гулдина йолу агӀонаш хӀокху XML барамца, юха тӀаьхьа чура [[Special:Import|хьаэцалурдолш]] кхечу вики-хьалхен, болх беш йолу хӀокху MediaWiki гӀирсаца.\n\nКхечу меттера яззамаш чуяха, чу язъе цӀе тадечу метте, цхьа могӀан цӀе могӀаршкахь, юха харжа лаьий шуна кхечу меттигера чуяха массо яззамашна истори хийцамбарш я тӀаьххьарлера яззаман верси.\n\nШуьга кхи далундерг, лелаеш йолу адресан хьажорг кхечу меттера чудаха тӀаьххьарлерачу версин яззамаш. Масала оцу яззаман [[{{MediaWiki:Mainpage}}]] хӀара хира ю хьажорг [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
        "tooltip-ca-talk": "Дийцаре агlон чулацам",
        "tooltip-ca-edit": "Тае хӀара агӀо",
        "tooltip-ca-addsection": "Кхолла керла дакъа",
-       "tooltip-ca-viewsource": "Хlара агlо хийцам цабайта гароллехь ю, хьоьга далундерг хьажар а дезахь чура йоза хьаэцар",
-       "tooltip-ca-history": "Хlокху агlон хийцамаш болу тептар",
-       "tooltip-ca-protect": "Ð\93lаÑ\80олла Ð´Ã© Ñ\85lокÑ\85Ñ\83 Ð°Ð³lон Ñ\85ийÑ\86ам цабайта",
+       "tooltip-ca-viewsource": "ХӀара агӀо ларъеш ю, хийцамаш ца-байта, амма хьо хьажа а, копи яккхан а мегар ду",
+       "tooltip-ca-history": "ХӀокху агӀона хийцамаш болу тептар",
+       "tooltip-ca-protect": "Ð\9bаÑ\80Ñ\8aе Ð°Ð³Ó\80о Ñ\85ийÑ\86амаÑ\88 цабайта",
        "tooltip-ca-unprotect": "Дlадаккха хlокху агlонна долу гаролла",
        "tooltip-ca-delete": "ДӀаяккха хӀара агӀо",
        "tooltip-ca-move": "АгӀон цӀе хийца",
        "tooltip-n-randompage": "Хьажа цахууш нисйеллачу агlоне",
        "tooltip-n-help": "ГӀоде меттиг",
        "tooltip-t-whatlinkshere": "Массо агӀон могӀам, хӀокху агӀонтӀе хьажийна йолу",
-       "tooltip-t-recentchangeslinked": "Тlаьхьарлера хийцамаш хlокху агlонашкахь, мичхьа хьажийна хlара агlо",
-       "tooltip-feed-rss": "Хьагайтар оцу RSS цани хlокху агlон",
+       "tooltip-t-recentchangeslinked": "ТӀаьххьарлера хийцамаш хӀокху агӀонашкахь, хьажийна хӀара агӀо болу",
+       "tooltip-feed-rss": "ХӀокху агӀона трансляци RSS-рца",
        "tooltip-feed-atom": "Хьагайтар оцу Atom цани хlокху агlон",
        "tooltip-t-contributions": "ХӀокху декъашхочо хийцина йолу агӀонийн могӀам",
        "tooltip-t-emailuser": "ДӀабахьийта хаам оцу декъашхона",
        "tooltip-t-upload": "Чуйаха файлаш",
        "tooltip-t-specialpages": "Белхан агӀонанийн могӀам",
-       "tooltip-t-print": "Хlокху агlонна зорба туху башхо",
+       "tooltip-t-print": "ХӀокху агӀонна зорба туху башхо",
        "tooltip-t-permalink": "Даима йолу хьажорг хӀокху башха агӀонна",
        "tooltip-ca-nstab-main": "Яззамна чулацам",
        "tooltip-ca-nstab-user": "ХӀора декъашхочун долахь йолу агӀо ю",
        "pageinfo-not-current": "Шира версийн оьцу хааме хьажа таро яц.",
        "pageinfo-header-basic": "Коьрта хаам",
        "pageinfo-header-edits": "Хийцаман истори",
-       "pageinfo-header-restrictions": "Ð\90гÓ\80она Ð³Ó\80оÑ\80алла Ð´Ð°р",
+       "pageinfo-header-restrictions": "Ð\90гÓ\80она Ð»Ð°Ñ\80Ñ\8aÑ\8fр",
        "pageinfo-header-properties": "АгӀона билгало",
        "pageinfo-display-title": "Гушболу корта",
        "pageinfo-default-sort": "Къасторан догӀа Ӏад йитарца",
        "pageinfo-redirectsto-info": "Хаам",
        "pageinfo-contentpage": "Лорурго чулацаме гойту агӀо",
        "pageinfo-contentpage-yes": "ХӀаъ",
-       "pageinfo-protect-cascading": "ЧаÑ\85Ñ\87аÑ\80ин Ð³Ó\80оÑ\80алла кхузара",
+       "pageinfo-protect-cascading": "ЧаÑ\85Ñ\87аÑ\80ин Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80 кхузара",
        "pageinfo-protect-cascading-yes": "ХӀаъ",
-       "pageinfo-protect-cascading-from": "ЧаÑ\85Ñ\87аÑ\80ин Ð³Ó\80оÑ\80алла тӀера",
+       "pageinfo-protect-cascading-from": "ЧаÑ\85Ñ\87аÑ\80ин Ð»Ð°Ñ\80Ñ\8aÑ\8fÑ\80 тӀера",
        "pageinfo-category-info": "Категорех лаьцна хаам",
        "pageinfo-category-pages": "АгӀонийн дукхалла",
        "pageinfo-category-subcats": "Бухара категорийн дукхалла",
        "exif-orientation": "Суьртан хьал",
        "exif-samplesperpixel": "Беснийн компонентийн дукхалла",
        "exif-planarconfiguration": "Организацин хаамийн некъ",
-       "exif-ycbcrsubsampling": "Барамийн компонент Y а C а",
-       "exif-ycbcrpositioning": "Y а C а компонентин листаран кеп",
+       "exif-ycbcrsubsampling": "Барамийн компонент Y а, C а",
+       "exif-ycbcrpositioning": "Y а, C а компонентин листаран кеп",
        "exif-xresolution": "Шоралла",
        "exif-yresolution": "Локхалла",
        "exif-stripoffsets": "Суьртийн хаамаш болу меттиг",
        "exif-jpeginterchangeformatlength": "Сизан хааман барам preview",
        "exif-whitepoint": "Къайн тӀадаман бос",
        "exif-primarychromaticities": "Коьрта беснийн бос",
-       "exif-referenceblackwhite": "Ӏаьржа а къай а тӀадамийн меттиг",
+       "exif-referenceblackwhite": "Ӏаьржа а, къай а тӀадамийн меттиг",
        "exif-datetime": "Файлан хийцам бина терахь а, хан а",
        "exif-imagedescription": "Суьртан цӏе",
        "exif-make": "Камера арахоьцург",
        "exif-usercomment": "Кхин тӀе къамел",
        "exif-relatedsoundfile": "Къамелан аьзнийн файл",
        "exif-datetimeoriginal": "Дуьххьарлера терахь а хан",
-       "exif-datetimedigitized": "Оцифровк йина терахь а хан а",
+       "exif-datetimedigitized": "Оцифровк йина терахь а, хан а",
        "exif-subsectime": "Файлан хийцам баран хан секундашкахь",
        "exif-subsectimeoriginal": "Оригинал хенан секундан дакъа",
        "exif-subsectimedigitized": "Терахьийн хенан секундан дакъа",
        "exif-gpsdop-poor": "Во ($1)",
        "exif-objectcycle-a": "Ӏуьранна бен",
        "exif-objectcycle-p": "Суьйранна бен",
-       "exif-objectcycle-b": "Ӏуьранна а суьйранна а",
+       "exif-objectcycle-b": "Ӏуьранна а, суьйранна а",
        "exif-gpsdirection-t": "бакъалла",
        "exif-gpsdirection-m": "магнитан",
        "exif-ycbcrpositioning-1": "Юкъйина",
        "exif-dc-type": "Медиан тайп",
        "exif-rating-rejected": "ДӀайайина",
        "exif-isospeedratings-overflow": "65535 дукха",
-       "exif-iimcategory-ace": "Исбаьхьалла, культура а синкъерам а",
-       "exif-iimcategory-clj": "Зулам дар а Ӏедал а",
-       "exif-iimcategory-dis": "Ирча бохам а авари а",
-       "exif-iimcategory-fin": "Экономика а бизнес а",
+       "exif-iimcategory-ace": "Исбаьхьалла, культура а, синкъерам а",
+       "exif-iimcategory-clj": "Зулам дар а, Ӏедал а",
+       "exif-iimcategory-dis": "Ирча бохам а, авари а",
+       "exif-iimcategory-fin": "Экономика а, бизнес а",
        "exif-iimcategory-edu": "Дешна хилар",
        "exif-iimcategory-lab": "Къинхьегам",
-       "exif-iimcategory-rel": "Дин а тешар а",
-       "exif-iimcategory-sci": "Ӏилма а техника а",
+       "exif-iimcategory-rel": "Дин а, тешар а",
+       "exif-iimcategory-sci": "Ӏилма а, техника а",
        "exif-iimcategory-soi": "Социалан хаттарш",
        "exif-iimcategory-wea": "Хенан хӀоттам",
        "exif-urgency-normal": "Диканиг ($1)",
        "autosumm-blank": "Агӏон чулацам дӏабяккхина",
        "autosumm-replace": "АгӀона чуьраниг хийцина → «$1»",
        "autoredircomment": "[[$1]] тӀе хьажийна",
-       "autosumm-new": "Керла агlо: «$1»",
+       "autosumm-new": "Керла агӀо: «$1»",
        "autosumm-newblank": "Кхоьллина еса агӀо",
        "lag-warn-normal": "{{PLURAL:$1|$1 Секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
        "lag-warn-high": "Сервераш синхронизаци еш тӀехьайисарна, {{PLURAL:$1|$1 секунд}} хьалха бина хийцамаш хӀокху могӀамехь гуш ца хилла мега.",
        "specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
        "specialpages-group-pages": "АгӀонийн могӀанаш",
        "specialpages-group-pagetools": "ГӀирсаш агӀонашна",
-       "specialpages-group-wiki": "Хаамаш а гӀирсаш а",
+       "specialpages-group-wiki": "Хаамаш а, гӀирсаш а",
        "specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
        "specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
        "blankpage": "Еса агӀо",
        "tags-deactivate": "дӀаяйа",
        "tags-hitcount": "$1 {{PLURAL:$1|хийцам}}",
        "tags-create-heading": "Кхолла керла билгало",
-       "tags-create-explanation": "Юха кхоьллина билгалонаш декъашхошна а боташна а Ӏад йтарца тӀекхочуш хира ю.",
+       "tags-create-explanation": "Юха кхоьллина билгалонаш декъашхошна а, боташна а Ӏад йтарца тӀекхочуш хира ю.",
        "tags-create-tag-name": "Билгалонна цӀе:",
        "tags-create-reason": "Бахьана:",
        "tags-create-submit": "Кхолла",
        "logentry-merge-merge": "$1 {{GENDER:$2|вовшахтоьхна}} $3 $4 чохь ($5 кхаччалц версеш)",
        "logentry-move-move": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажорг цаюьтуш",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ан Ñ\82Ó\80охул",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|Ñ\86Ó\80е Ñ\85ийÑ\86ина}} $3 â\86\92 $4 Ð´Ó\80аÑ\81аÑ\85Ñ\8cажоÑ\80ан Ñ\82Ó\80ехул",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|цӀе хийцина}} $3 → $4 дӀасахьажорган тӀехул а, дӀасахьажорг цаюьтуш а",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|хьаьжина}}  агӀона $3 $4 версега",
        "logentry-patrol-patrol-auto": "$1 автоматически {{GENDER:$2|хьаьжина}} $3 агӀона версега $4",
index d7b6e7a..f467f8f 100644 (file)
@@ -15,7 +15,8 @@
                        "아라",
                        "Serwan",
                        "Ebraminio",
-                       "Macofe"
+                       "Macofe",
+                       "Pirehelokan"
                ]
        },
        "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
        "view-pool-error": "ببورە، لەم کاتەدا ڕاژەکارەکان زیادەباریان لە سەرە.\nژمارەیەکی زۆر لە بەکارھێنەران ھاوکات ھەوڵی دیتنی ئەم پەڕەیان داوە.\nتکایە پێش ھەوڵی دووبارە بۆ دیتنی ئەم پەڕە، نەختێک بوەستە.\n\n$1",
        "pool-timeout": "لەکات دەرچوون ڕوویدا لەکاتی چاوەڕوانکردنی داخستندا",
        "pool-errorunknown": "هەڵەی نەزانراو",
-       "aboutsite": "سÛ\95بارÛ\95ت Ø¨Û\95 {{SITENAME}}",
+       "aboutsite": "دÛ\95ربارÛ\95Û\8c {{SITENAME}}",
        "aboutpage": "Project:سەبارەت",
        "copyright": "ناوەرۆک لە ژێر $1 لەبەردەستدایە، مەگەر بێجگە لەمە وترابێ.",
        "copyrightpage": "{{ns:project}}:مافەکانی لەبەرگرتنەوە",
        "disclaimers": "نابەرپرسییەکان",
        "disclaimerpage": "Project:بەرپرسنەبوون",
        "edithelp": "ڕێنوێنیی دەستکاریکردن",
+       "helppage-top-gethelp": "یارمەتی",
        "mainpage": "دەستپێک",
        "mainpage-description": "دەستپێک",
        "policy-url": "Project: سیاسەت",
        "resetpass-wrong-oldpass": "تێپەڕوشەی ھەنووکەیی یان تێپەڕوشەی کاتی ھەڵەیە.\nوا دیارە تێپەڕوشەکەت بە سەرکەوتوویی گۆڕدراوە یان داوای تێپەڕوشەیەکی نوێت کردووە.",
        "resetpass-temp-password": "تێپەڕوشەی کاتی:",
        "passwordreset": "ڕێکخستنەوەی تێپەڕوشە",
-       "passwordreset-legend": "دووبارە ڕێکخستنەوەی تێپەڕوشە",
        "passwordreset-username": "ناوی بەکارھێنەری:",
        "passwordreset-domain": "پاوان:",
        "passwordreset-capture": "بینینی ئیمەیڵی ئەنجام؟",
        "notextmatches": "لە دەقی نووسراوەکان دا نەبینرا",
        "prevn": "{{PLURAL:$1|$1}}ی پێشوو",
        "nextn": "{{PLURAL:$1|$1}}ی دواتر",
+       "prev-page": "پەڕەی پێشوو",
+       "next-page": "پەڕەی دواتر",
        "prevn-title": "$1 {{PLURAL:$1|ئەنجامی|ئەنجامی}} پێشو",
        "nextn-title": "$1 {{PLURAL:$1|ئەنجامی|ئەنجامی}} دواتر",
        "shown-title": "لە هەر پەڕەیەک $1 {{PLURAL:$1|ئەنجام|ئەنجام}} نیشان‌ بدە",
        "prefs-personal": "پرۆفایلی بەکارھێنەر",
        "prefs-rc": "دوایین گۆڕانکارییەکان",
        "prefs-watchlist": "پێرستی چاودێری",
+       "prefs-editwatchlist": "دە‌ستکاری لیستی چاودێری",
+       "prefs-editwatchlist-label": "دەستکاری لیستی چاودێرییەکەت بکە",
+       "prefs-editwatchlist-edit": "ناونیشانەکانی نێو لیستی چاودێرییەکەت ببینە و بسڕەوە",
+       "prefs-editwatchlist-clear": "لیستی چاودێرییەکەت پاک بکەرەوە",
        "prefs-watchlist-days": "ژمارەی ڕۆژەکان بۆ نیشاندان لە لیستی چاودێری:",
        "prefs-watchlist-days-max": "ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}}",
        "prefs-watchlist-edits": "ئەوپەڕی ژمارەی گۆڕانکارییەکان بۆ نیشاندان لە لیستی چاودێریی پەرەپێدراو:",
        "prefs-displaywatchlist": "ھەڵبژاردەکانی نیشاندان",
        "prefs-tokenwatchlist": "نیشانە",
        "prefs-diffs": "جیاوازییەکان",
+       "prefs-help-prefershttps": "بەکارخستنی ئەم تایبەتمەندییە کاریگەری لەسەر چوونەژوورەوەی داھاتووت دروست دەکات",
        "email-address-validity-valid": "ناونیشانی ئیمەیل دروست وە بەر چاو دێت",
        "email-address-validity-invalid": "ناونیشانێکی دروستی ئیمەیل بنووسە",
        "userrights": "بەڕێوەبردنی مافەکانی بەکارھێنەر",
        "userrights-lookup-user": "بەڕێوەبردنی گرووپەکانی بەکارھێنەر",
        "userrights-user-editname": "ناوی بەکارهێنەرێک بنووسە:",
        "editusergroup": "گرووپەکانی بەکارھێنەر دەستکاری بکە",
-       "editinguser": "گۆڕینی مافەکانی بەکارهێنەر '''[[User:$1|$1]]''' $2",
+       "editinguser": "گۆڕینی مافەکانی بەکارهێنەر {{GENDER:$1|بەکارھێنەر}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "دەستکاریی گرووپەکانی بەکارهێنەر",
        "saveusergroups": "گرووپەکانی بەکارھێنەر پاشەکەوت بکە",
        "userrights-groupsmember": "ئەندامە لە:",
        "right-browsearchive": "گەڕانی پەڕە سڕاوەکان",
        "right-undelete": "ھێنانەوەی پەڕەیەک",
        "right-suppressrevision": "بینین، شاردنەوە و ھێنانەوەی پێداچوونەوە تایبەتەکانی پەڕەکان لە لایەن ھەر بەکارھێنەرێکەوە",
+       "right-viewsuppressed": "پێداچوونەوە شاراوەکانی ھەر بەکارھێنەرێک پیشانبدە",
        "right-suppressionlog": "دیتنی لۆگە نھێنییەکان",
        "right-block": "بەربەستنی بەکارھێنەرانی تر لە دەستکاریکردن",
        "right-blockemail": "بەربەستنی بەکارھێنەرێک لە ناردنی ئیمەیل",
        "action-createpage": "دروستکردنی پەڕەکان",
        "action-createtalk": "دروستکردنی پەڕەکانی وتووێژ",
        "action-createaccount": "درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە",
+       "action-history": "مێژووی ئەم پەڕەیە ببینە",
        "action-minoredit": "نیشان‌کردنی ئەم دەستکاریە وەک بچووک",
        "action-move": "گواستنەوەی ئەم پەڕەیە",
        "action-move-subpages": "گواستنەوەی ئەم پەڕەیە و ژێرپەڕەکانی",
        "action-move-rootuserpages": "گواستنەوەی بنەرەتی پەڕەکانی بەکارھێنەر",
+       "action-move-categorypages": "پەڕەکانی پۆل بگوازەرەوە",
        "action-movefile": "ئەم پەڕگەیە بگوازەوە",
        "action-upload": "ئەم پەڕەیە بار بکە",
        "action-reupload": "سەرنووسینی ئەم پەڕگە وا هەیە",
        "action-sendemail": "ناردنی ئیمەیلەکان",
        "action-editmywatchlist": "دیتنی پێرستی چاودێریت",
        "action-viewmywatchlist": "دیتنی پێرستی چاودێریت",
+       "action-viewmyprivateinfo": "زانیارییە تایبەتییەکانت ببینە",
+       "action-editmyprivateinfo": "دەستکاری زانیارییە تایبەتییەکانت بکە",
        "nchanges": "$1 {{PLURAL:$1|گۆڕانکاری}}",
        "enhancedrc-history": "مێژوو",
        "recentchanges": "دوایین گۆڕانکارییەکان",
        "hide": "بشارەوە",
        "show": "نیشان بدە",
        "minoreditletter": "ب",
-       "newpageletter": "نوێ",
+       "newpageletter": "ن",
        "boteditletter": "بۆت",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|بەکارھێنەر}}ی چاودێر]",
        "rc_categories": "بەرتەسک‌کردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
        "uploaderror": "ھەڵە لە بارکردن دا",
        "upload-recreate-warning": "'''ھۆشیار بە: پەرگەیەک بەو ناوەوە سڕاوەتەوە یان گوێزاوەتەوە.'''\n\nلۆگی سڕینەوە یان گواستنەوەی ئەم پەڕە لێرە لەبەردەستدایە:",
        "uploadtext": "فۆرمی خوارەوە بەکاربێنە بۆ بارکردنی پەڕگەکان.\nبۆ بینینی و گەڕان لەو پەڕگانەی پێشتر بار کراون، بڕۆ بۆ [[Special:FileList|لیستی پەڕگە بارکراوەکان]]، ھەروەھا [[Special:Log/upload|ڕەشنووسی بارکردنەکان]] و [[Special:Log/delete|ڕەشنووسی سڕینەوەکان]].\n\nبۆ بەکارھێنانی پەڕگەیەک لە پەڕەیەکدا، بەستەرێک بە یەکێک لەم شێوازانەی خوارەوە بە کار بێنە:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' بۆ بەکارهێنانی وەشانی تەواوی پەڕگە\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|دەقی جێگر]]</nowiki></code>''' بۆ بەکارهێنانی نمایشێکی بە پانتایی ٢٠٠ پیکسەڵ لە چوارچێوەیەک لە لای چەپەوە بە «دەقی جێگر» وەک شرۆڤە\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' بۆ بەستەرپێدان بە پەڕگەکە بێ نیشاندانی خودی پەڕگەکە",
-       "upload-permitted": "جۆرە پەڕگە ڕێگەپێدراوەکان: $1.",
+       "upload-permitted": "جۆرە پەڕگە ڕێگەپێدراوەکان {{PLURAL:$2|type|types}}: $1.",
        "upload-preferred": "جۆرە پەڕگانەی بە باشتر دەزانرێن: $1.",
        "upload-prohibited": "جۆرە پەڕگانەی قەدەغە کراون: $1.",
        "uploadlogpage": "لۆگی بارکردن",
        "listfiles_size": "قەبارە",
        "listfiles_description": "وەسف",
        "listfiles_count": "وەشانەکان",
+       "listfiles-latestversion": "وەشانی ئێستا",
+       "listfiles-latestversion-yes": "بەڵێ",
+       "listfiles-latestversion-no": "نەخێر",
        "file-anchor-link": "پەڕگە",
        "filehist": "مێژووی پەڕگە",
        "filehist-help": "کرتە بکە لەسەر یەکێک لە ڕێکەوت/کاتەکان بۆ بینینی پەڕگەکە بەو شێوەی لەو کاتەدا بووە.",
        "randompage": "پەڕەی ھەڕەمەکی",
        "randompage-nopages": "هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.",
        "randomincategory": "پەڕەیەک بە ھەڵکەوت لە پۆلدا",
+       "randomincategory-submit": "بڕۆ",
        "randomredirect": "ڕەوانەکەری ھەڕەمەکی",
        "randomredirect-nopages": "لە ناوبۆشایی \"$1\" هیچ ڕەوانکەرێک نییە.",
        "statistics": "ئامارەکان",
        "nlinks": "$1 {{PLURAL:$1|بەستەر|بەستەر}}",
        "nmembers": "$1 {{PLURAL:$1|ئەندام|ئەندام}}",
        "nrevisions": "$1 {{PLURAL:$1|پیاچوونەوە|پیاچوونەوە}}",
-       "nviews": "$1 جار {{PLURAL:$1|بینراو|بینراو}}",
        "specialpage-empty": "ئەنجامێک بۆ ئەم ڕاپۆرتە نییە.",
        "lonelypages": "پەڕە ھەتیوەکان",
        "lonelypagestext": "پەڕەکانی خوارەوە لە پەڕەکانی تری {{SITENAME}}ەوە لینکیان بۆ نەدراوە و نەھێنراونەتە نێو ھیچ پەڕەیەکی تر.",
        "linksearch-pat": "گەڕان بۆ نواندن:",
        "linksearch-ns": "بۆشاییی ناو:",
        "linksearch-ok": "گەڕان",
-       "linksearch-text": "Wildcardی وەک \"*.wikipedia.org\" بەکاردێت.\nلانی کەم پێویستی بە پاوانێکی ئاست-بان ھەیە، بۆ نموونە «*.org» .<br />\nپرۆتۆکۆلە پشتیوانی لێکراوەکان: <code>$1</code> (ھیچ کام لەمانە بە گەڕانەکەت زێدە مەکە).",
+       "linksearch-text": "Wildcardی وەک \"*.wikipedia.org\" بەکاردێت.\nلانی کەم پێویستی بە پاوانێکی ئاست-بان ھەیە، بۆ نموونە «*.org» .<br />\nپرۆتۆکۆلە پشتیوانی لێکراوەکان: $1 (ھیچ کام لەمانە بە گەڕانەکەت زێدە مەکە).",
        "linksearch-line": "$1 بەستەرپێ‌دراو لە $2",
        "listusersfrom": "نیشاندانی بەکارھێنەران بە دەستپێکردن لە:",
        "listusers-submit": "نیشانیبدە",
        "emailuser": "ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە",
        "emailuser-title-target": "ئیمەیلی ئەم {{GENDER:$1|بەکارھێنەر}}ە",
        "emailuser-title-notarget": "ئیمەیل بۆ بەکارھێنەر",
-       "emailpage": "ئیمەیل بۆ بەکارھێنەر",
        "emailpagetext": "دەتوانی لەم فۆرمەی ژێرەوە بۆ ناردنی ئیمەیلێک بۆ ئەم {{GENDER:$1|بەکارھێنەر}}ە کەڵک وەربگریت.\nئەو ناونیشانە ئیمەیلە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر‌یتدا]] نووسیوتە، لە ناونیشانی «لەلایەن»ی (From) ئیمەیلەکەدا نیشان دەدرێت، کە وایە بەکارھێنەری وەرگر دەتوانێ ڕاستەوخۆ وەڵامت بداتەوە.",
        "defemailsubject": "ئیمەیلی {{SITENAME}} لە بەکارھێنەر «$1»ەوە",
        "usermaildisabled": "ئیمەیڵی بەکارهێنەر لەکاردانیە",
        "revertpage-nouser": "دەستکارییەکانی بەکارھێنەرێکی شاڕدراوە بۆ دوایین پێداچوونەوەی {{GENDER:$1|[[User:$1|$1]]}} گەڕێنرایەوە.",
        "rollback-success": "دەستکارییەکانی $1 وەرگێرایەوە؛<br />\nگۆڕدرا بۆ دوایین پێداچوونەوەی $2.",
        "sessionfailure": "لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت.\nئەم کردەوە هەڵوەشێندرایەوە بۆ بەرگری لە دزینی دراوەکانی دانیشتن.\nتکایە بگەڕێوە بۆ پەڕەی پێشوو و نوێی بکەوە، ئینجا دیسان تاقیی بکەوە.",
+       "changecontentmodel-title-label": "سەردێڕی پەڕە",
+       "changecontentmodel-reason-label": "هۆکار:",
        "protectlogpage": "لۆگی پاراستن",
        "protectlogtext": "لە ژێرەوە پێرستێک لە گۆڕانکارییەکانی پەڕە پارێزراوەکان دەبینی.\nبۆ پێرستی ئەو پەڕانەی ئێستا پاراستنیان لە ئارادایە بڕوانە [[Special:ProtectedPages|پێرستی پەڕە پارێزراوەکان]].",
        "protectedarticle": "«[[$1]]»ی پاراست",
        "sp-contributions-toponly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دوایین پێداچوونەوەن",
        "sp-contributions-newonly": "تەنیا ئەو دەستکارییانە نیشان بدە کە دروستکردنی پەڕەن",
        "sp-contributions-submit": "بگەڕێ",
-       "whatlinkshere": "پەیوەندیدار بە ئێرەوە",
+       "whatlinkshere": "بەستەرەکان بە ئێرەوە",
        "whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
        "whatlinkshere-page": "پەڕە:",
        "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
        "tooltip-pt-login": "پێشنیارت پێدەکرێ بچیتە ژوورەوە؛ ھەرچەندە زۆرت لێناکرێ",
        "tooltip-pt-logout": "دەرچوون",
        "tooltip-ca-talk": "لێدوان دەربارەی ناوەڕۆکی پەرە",
-       "tooltip-ca-edit": "دÛ\95تÙ\88اÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ø¨Ú©Û\95Û\8cت. ØªÚ©Ø§Û\8cÛ\95 Ù¾Û\8eØ´ Ù¾Ø§Ø´Û\95Ú©Û\95Ù\88تکردÙ\86 Ø¯Ù\88Ú¯Ù\85Û\95Û\8c Ù¾Û\8eشبÛ\8cÙ\86Û\8cÙ\86 Ø¨Û\95کاربÛ\8eÙ\86Û\95.",
+       "tooltip-ca-edit": "دÛ\95ستکارÛ\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ø¨Ú©Û\95â\80\8c",
        "tooltip-ca-addsection": "بەشێکی نوێ دەست پێ بکە",
        "tooltip-ca-viewsource": "ئەم پەڕەیە پارێزراوە.\nئەتوانی سەرچاوەکەی ببینیت",
        "tooltip-ca-history": "وەشانەکانی پێشووی ئەم پەڕەیە",
        "pageinfo-robot-index": "ڕێ پێدراو",
        "pageinfo-robot-noindex": "ڕێ پێنەدراوه",
        "pageinfo-watchers": "ژمارەی چاودێرانی پەڕە",
+       "pageinfo-visiting-watchers": "ژمارەی ئەو بینەرانە کە دوایین دەستکارییەکانیان چاو پێکەوتووە.",
        "pageinfo-few-watchers": "کەمتر لە $1 {{PLURAL:$1|چاودێر}}",
        "pageinfo-redirects-name": "ژمارەی ڕەوانەکەرەکان بۆ ئەم پەڕەیە",
        "pageinfo-subpages-name": "ژێرپەڕەکانی ئەم پەڕەیە",
        "version-software-product": "بەرهەم",
        "version-software-version": "وەشان",
        "version-entrypoints-header-url": "ناونیشانی ئینتەرنێتی",
+       "version-libraries-license": "مۆڵەت",
+       "version-libraries-description": "وەسف",
+       "version-libraries-authors": "نووسەر",
        "redirect": "ڕەوانەکەر بە پێی پەڕگە، بەکارھێنەر، پەڕە یان پێناسەی پێداچوونەوە",
        "redirect-legend": "ڕەوانەکەر بۆ پەڕگە یان پەڕەیەک",
        "redirect-summary": "ئەم پەڕە تایبەتە ڕەوانە دەکرێ بۆ پەڕگەیەک (ناوی پەڕگەکە)، پەڕەیەک (پێناسەی پێداچوونەوەیەک یان پێناسەی پەڕە) یان پەڕەیەکی بەکارھێنەر (پێناسەیەکی  ژمارەیی بەکارھێنەر). بەکارھێنان: [[{{#Special:Redirect}}/file/Example.jpg]]، [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]] یان [[{{#Special:Redirect}}/user/101]].",
        "htmlform-selectorother-other": "دیکە",
        "htmlform-no": "نا",
        "htmlform-yes": "بەڵێ",
+       "htmlform-title-not-creatable": "پەڕە بە سەردێڕی \"$1\" دروست ناکرێت",
+       "htmlform-title-not-exists": "[[$1]] بوونی نیە.",
        "logentry-delete-delete": "$1 پەڕەی $3ی {{GENDER:$2|سڕییەوە}}",
        "logentry-delete-restore": "$1 پەڕەی $3ی {{GENDER:$2|ھێنایەوە}}",
        "logentry-delete-revision": "$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی {{GENDER:$2|گۆڕیی}}: $4",
index c8828d1..29d0707 100644 (file)
        "last": "сонъки",
        "page_first": "ильк",
        "page_last": "сонъки",
-       "histlegend": "Фаркъ сайланувы: Тенъештирмеге истеген эки версиянъызны сайлап '''{{int:compare-submit}}''' дёгмесине басынъыз.<br />\nАнълатмалар: '''({{int:cur}})''' = шимдики версиянен арасындаки фаркъ, '''({{int:last}})''' = эвельки версиянен арасындаки фаркъ, '''{{int:minoreditletter}}''' = кичик денъиштирме.",
+       "histlegend": "Фаркъ сайланувы: тенъештириледжек эки версияны сайлап '''{{int:compare-submit}}''' дёгмесине басынъыз.<br />\nАнълатмалар: '''({{int:cur}})''' = шимдики версиянен арасындаки фаркъ, '''({{int:last}})''' = эвельки версиянен арасындаки фаркъ, '''{{int:minoreditletter}}''' = кичик денъиштирме.",
        "history-fieldset-title": "Кечмишке бакъув",
        "history-show-deleted": "Тек ёкъ этильгенлер",
-       "histfirst": "Энъ эски",
-       "histlast": "Энъ янъы",
+       "histfirst": "энъ эски",
+       "histlast": "энъ янъы",
        "historysize": "({{PLURAL:$1|1=1 байт|$1 байт}})",
        "historyempty": "(бош)",
        "history-feed-title": "Денъиштирмелер тарихы",
        "revertmerge": "Айыр",
        "mergelogpagetext": "Саифелернинъ кечмиш версияларынынъ бир-бирлеринен энъ сонъки бирлештирильмелери ашагъыдаки джедвельде косьтерильген.",
        "history-title": "\"$1\" саифесининъ денъиштирмелер тарихы",
+       "difference-title": "«$1» саифесининъ версиялары арасындаки фаркъ",
+       "difference-title-multipage": "«$1» иле «$2» саифелери арасындаки фаркъ",
        "difference-multipage": "(Саифелер арасындаки фаркъ)",
        "lineno": "$1 сатыр:",
        "compareselectedversions": "Сайлангъан версияларны тенъештир",
        "showhideselectedversions": "Сайлангъан версияларны косьтер/гизле",
        "editundo": "лягъу эт",
+       "diff-empty": "(фаркъ ёкъ)",
        "diff-multi-manyusers": "($2-ден зияде {{PLURAL:$2|1=къулланыджы|къулланыджы}}нынъ япкъан {{PLURAL:$1|1=бир ара версиясы|$1 ара версиясы}} косьтерильмей)",
        "searchresults": "Къыдырув нетиджелери",
        "searchresults-title": "«$1» ичюн къыдырув нетиджелери",
        "notextmatches": "Ич бир саифеде тапыламады",
        "prevn": "эвельки {{PLURAL:$1|$1}}",
        "nextn": "сонъраки {{PLURAL:$1|$1}}",
+       "prev-page": "эвельки саифе",
+       "next-page": "сонъраки саифе",
        "prevn-title": "Эвельки $1 {{PLURAL:$1|1=нетидже|нетидже}}",
        "nextn-title": "Сонъраки $1 {{PLURAL:$1|1=нетидже|нетидже}}",
        "shown-title": "Саифе башына $1 {{PLURAL:$1|1=нетидже|нетидже}} косьтер",
        "nlinks": "{{PLURAL:$1|1=1 багъланты|$1 багъланты}}",
        "nmembers": "{{PLURAL:$1|1=1 аза|$1 аза}}",
        "nrevisions": "{{PLURAL:$1|1=1 версия|$1 версия}}",
-       "nviews": "{{PLURAL:$1|1=1 корюнюв|$1 корюнюв}}",
        "specialpage-empty": "Бу соратма ичюн ич нетидже ёкъ.",
        "lonelypages": "Озюне ич багъланты олмагъан саифелер",
        "lonelypagestext": "Ашагъыдаки саифелерге {{SITENAME}} сайтындаки дигер саифелерден багъланты берильмеген, ондан да гъайры мезкюр саифелер дигер саиферлрге кирсетильмеген.",
        "mailnologin": "Мектюп ёлланаджакъ адреси ёкътыр",
        "mailnologintext": "Дигер къулланыджыларгъа электрон мектюплер ёллап олмакъ ичюн [[Special:UserLogin|отурым ачмалысынъыз]] ве [[Special:Preferences|сазламаларынъызда]] мевджут олгъан e-mail адресининъ саиби олмалысынъыз.",
        "emailuser": "Къулланыджыгъа мектюп",
-       "emailpage": "Къулланыджыгъа электрон мектюп ёлла",
        "emailpagetext": "Ашагъыдаки форманы толдурып бу къулланыджыгъа мектюп ёллап олурсынъыз.\n[[Special:Preferences|Озь сазламаларынъызда]] язгъан электрон адресинъиз мектюпнинъ «Кимден» сатырында языладжакъ, бунынъ ичюн мектюп алыджы догърудан-догъру сизинъ адресинъизге джевап ёллап олур.",
        "defemailsubject": "{{SITENAME}} e-mail",
        "noemailtitle": "E-mail адреси ёкътыр",
index 47e30dd..2cccdc1 100644 (file)
        "last": "soñki",
        "page_first": "ilk",
        "page_last": "soñki",
-       "histlegend": "Farq saylanuvı: Teñeştirmege istegen eki versiyañıznı saylap '''{{int:compare-submit}}''' dögmesine basıñız.<br />\nAñlatmalar: '''({{int:cur}})''' = şimdiki versiyanen arasındaki farq, '''({{int:last}})''' = evelki versiyanen arasındaki farq, '''{{int:minoreditletter}}''' = kiçik deñiştirme.",
+       "histlegend": "Farq saylanuvı: teñeştirilecek eki versiyanı saylap '''{{int:compare-submit}}''' dögmesine basıñız.<br />\nAñlatmalar: '''({{int:cur}})''' = şimdiki versiyanen arasındaki farq, '''({{int:last}})''' = evelki versiyanen arasındaki farq, '''{{int:minoreditletter}}''' = kiçik deñiştirme.",
        "history-fieldset-title": "Keçmişke baquv",
        "history-show-deleted": "Tek yoq etilgenler",
-       "histfirst": "Eñ eski",
-       "histlast": "Eñ yañı",
+       "histfirst": "eñ eski",
+       "histlast": "eñ yañı",
        "historysize": "({{PLURAL:$1|1 bayt|$1 bayt}})",
        "historyempty": "(boş)",
-       "history-feed-title": "Deñiştirmeler tarihı",
-       "history-feed-description": "Vikide bu saifeniñ deñiştirmeler tarihı",
+       "history-feed-title": "Deñiştirüv tarihı",
+       "history-feed-description": "Vikide bu saifeni deñiştirüv tarihı",
        "history-feed-item-nocomment": "$2 üstünde $1",
        "history-feed-empty": "İstenilgen saife yoq.\nO yoq eilgen ya da adı deñiştirilgen ola bile.\nVikide bu saifege oşağan saifelerni [[Special:Search|tapıp baqıñız]].",
        "rev-deleted-comment": "(deñiştirmeniñ tarifi yoq etildi)",
        "revdel-restore": "körünüvni deñiştir",
        "revertmerge": "Ayır",
        "mergelogpagetext": "Saifelerniñ keçmiş versiyalarınıñ bir-birlerinen eñ soñki birleştirilmeleri aşağıdaki cedvelde kösterilgen.",
-       "history-title": "\"$1\" saifesiniñ deñiştirmeler tarihı",
+       "history-title": "“$1” saifesini deñiştirüv tarihı",
+       "difference-title": "“$1” saifesiniñ versiyaları arasındaki farq",
+       "difference-title-multipage": "“$1” ile “$2” saifeleri arasındaki farq",
        "difference-multipage": "(Saifeler arasındaki farq)",
        "lineno": "$1 satır:",
        "compareselectedversions": "Saylanğan versiyalarnı teñeştir",
        "showhideselectedversions": "Saylanğan versiyalarnı köster/gizle",
        "editundo": "lâğu et",
+       "diff-empty": "(farq yoq)",
        "diff-multi-manyusers": "($2-den ziyade {{PLURAL:$2|qullanıcı|qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)",
        "searchresults": "Qıdıruv neticeleri",
-       "searchresults-title": "\"$1\" içün qıdıruv neticeleri",
+       "searchresults-title": "“$1” içün qıdıruv neticeleri",
        "titlematches": "Saife adı bir kele",
        "textmatches": "Saife metni bir kele",
        "notextmatches": "İç bir saifede tapılamadı",
        "prevn": "evelki {{PLURAL:$1|$1}}",
        "nextn": "soñraki {{PLURAL:$1|$1}}",
+       "prev-page": "evelki saife",
+       "next-page": "soñraki saife",
        "prevn-title": "Evelki $1 {{PLURAL:$1|netice|netice}}",
        "nextn-title": "Soñraki $1 {{PLURAL:$1|netice|netice}}",
        "shown-title": "Saife başına $1 {{PLURAL:$1|netice|netice}} köster",
        "nlinks": "{{PLURAL:$1|1 bağlantı|$1 bağlantı}}",
        "nmembers": "{{PLURAL:$1|1 aza|$1 aza}}",
        "nrevisions": "{{PLURAL:$1|1 versiya|$1 versiya}}",
-       "nviews": "{{PLURAL:$1|1 körünüv|$1 körünüv}}",
        "specialpage-empty": "Bu soratma içün iç netice yoq.",
        "lonelypages": "Özüne iç bağlantı olmağan saifeler",
        "lonelypagestext": "Aşağıdaki saifelerge {{SITENAME}} saytındaki diger saifelerden bağlantı berilmegen, ondan da ğayrı mezkür saifeler diger saiferlrge kirsetilmegen.",
        "mailnologin": "Mektüp yollanacaq adresi yoqtır",
        "mailnologintext": "Diger qullanıcılarğa elektron mektüpler yollap olmaq içün [[Special:UserLogin|oturım açmalısıñız]] ve [[Special:Preferences|sazlamalarıñızda]] mevcut olğan e-mail adresiniñ saibi olmalısıñız.",
        "emailuser": "Qullanıcığa mektüp",
-       "emailpage": "Qullanıcığa elektron mektüp yolla",
        "emailpagetext": "Aşağıdaki formanı toldurıp bu qullanıcığa mektüp yollap olursıñız.\n[[Special:Preferences|Öz sazlamalarıñızda]] yazğan elektron adresiñiz mektüpniñ \"Kimden\" satırında yazılacaq, bunıñ içün mektüp alıcı doğrudan-doğru siziñ adresiñizge cevap yollap olur.",
        "defemailsubject": "{{SITENAME}} e-mail",
        "noemailtitle": "E-mail adresi yoqtır",
index 2c88d50..9c1c3a4 100644 (file)
        "actionthrottled": "Akce byla pozastavena",
        "actionthrottledtext": "Vzhledem k protispamovým opatřením nemůžete požadovanou akci provádět příliš častokrát v krátké době.\nZkuste to znovu za několik minut.",
        "protectedpagetext": "Tato stránka byla zamčena, aby se předešlo jejímu editování.",
-       "viewsourcetext": "Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:",
-       "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód <strong>vašich změn</strong> této stránky:",
+       "viewsourcetext": "Můžete si prohlédnout a zkopírovat zdrojový kód této stránky.",
+       "viewyourtext": "Můžete si prohlédnout a zkopírovat zdrojový kód <strong>vašich změn</strong> této stránky.",
        "protectedinterface": "Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.\nPro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
        "editinginterface": "<strong>Upozornění:</strong> Editujete stránku, která definuje texty rozhraní.\nZměny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.",
        "translateinterface": "Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
-       "cascadeprotected": "Tato stránka je zamčena, neboť je vložena do {{PLURAL:$1|následující stránky, zamčené|následujících stránek, zamčených|následujících stránek, zamčených}} kaskádovým zámkem:\n$2",
+       "cascadeprotected": "Tato stránka je zamčena, neboť je vložena na {{PLURAL:$1|následující stránku, zamčenou|následující stránky, zamčené}} kaskádovým zámkem:\n$2",
        "namespaceprotected": "Nemáte povoleno editovat stránky ve jmenném prostoru '''$1'''.",
        "customcssprotected": "Nemáte povoleno editovat tuto stránku s CSS, protože obsahuje osobní nastavení jiného uživatele.",
        "customjsprotected": "Nemáte povoleno editovat tuto stránku s JavaScriptem, protože obsahuje osobní nastavení jiného uživatele.",
        "createacct-benefit-body2": "{{PLURAL:$1|stránka|stránky|stránek}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nedávný přispěvatel|nedávní přispěvatelé|nedávných přispěvatelů}}",
        "badretype": "Vámi napsaná hesla nesouhlasí.",
+       "usernameinprogress": "Vytváření účtu tohoto uživatele již probíhá. Čekejte prosím.",
        "userexists": "Zadané uživatelské jméno se již používá.\nZvolte si prosím jiné jméno.",
        "loginerror": "Chyba při přihlašování",
        "createacct-error": "Chyba při zakládání účtu",
        "readonlywarning": "<strong>Varování: Databáze byla uzamčena kvůli údržbě, takže momentálně nebudete moci uložit své změny.</strong>\nMůžete si okopírovat text do souboru a uložit si ho na později.\n\nSprávce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
        "protectedpagewarning": "'''Varování: Tato stránka byla zamčena, takže ji mohou editovat pouze správci.'''\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
        "semiprotectedpagewarning": "'''Poznámka:''' Tato stránka byla zamčena, takže ji mohou editovat pouze registrovaní uživatelé.\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
-       "cascadeprotectedwarning": "'''Varování:''' Tato stránka byla zamčena, takže ji mohou editovat pouze správci. Je vložena na následující, kaskádním zámkem  {{PLURAL:$1|zamčenou, stránku|zamčené, stránky|zamčené, stránky}}:",
+       "cascadeprotectedwarning": "<strong>Varování:</strong> Tato stránka byla zamčena, takže ji mohou editovat pouze správci, protože je vložena na následující, kaskádovým zámkem {{PLURAL:$1|zamčenou, stránku|zamčené, stránky}}:",
        "titleprotectedwarning": "'''Varování: Tato stránka byla uzamčena, takže k jejímu založení jsou potřeba [[Special:ListGroupRights|zvláštní oprávnění]].'''\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
        "templatesused": "{{PLURAL:$1|Šablona použitá|Šablony použité}} na této stránce:",
        "templatesusedpreview": "{{PLURAL:$1|Šablona použitá|Šablony použité}} v tomto náhledu:",
        "search-category": "(kategorie $1)",
        "search-file-match": "(odpovídá obsahu souboru)",
        "search-suggest": "Mysleli jste: $1",
+       "search-rewritten": "Zobrazeny výsledky pro $1. Místo toho hledat $2.",
        "search-interwiki-caption": "Sesterské projekty",
        "search-interwiki-default": "Výsledky z $1:",
        "search-interwiki-more": "(více)",
        "rows": "Řádky",
        "columns": "Sloupce",
        "searchresultshead": "Vyhledávání",
-       "stub-threshold": "Limit pro formátování odkazu jako <a href=\"#\" class=\"stub\">pahýl</a> (v bajtech):",
+       "stub-threshold": "Limit pro formátování odkazu jako pahýl ($1):",
+       "stub-threshold-sample-link": "příklad",
        "stub-threshold-disabled": "Vypnuto",
        "recentchangesdays": "Počet dní zobrazených v posledních změnách:",
        "recentchangesdays-max": "Maximálně $1 {{PLURAL:$1|den|dny|dní}}",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|sledující uživatel|sledující uživatelé|sledujících uživatelů}}]",
-       "rc_categories": "Omezit na kategorie (oddělené „|“)",
-       "rc_categories_any": "Všechny",
+       "rc_categories": "Omezit na kategorie (oddělené „|“):",
+       "rc_categories_any": "Jakákoli z vybraných",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajty|bajtů}} po změně",
        "newsectionsummary": "Nová sekce /* $1 */",
        "rc-enhanced-expand": "Zobrazit detaily",
        "upload-too-many-redirects": "URL obsahovalo příliš mnoho přesměrování",
        "upload-http-error": "Došlo k chybě HTTP: $1",
        "upload-copy-upload-invalid-domain": "Načítání kopírováním není dostupné z této domény.",
+       "upload-dialog-title": "Načtení souboru",
+       "upload-dialog-error": "Došlo k chybě",
+       "upload-dialog-button-cancel": "Storno",
+       "upload-dialog-button-done": "Hotovo",
+       "upload-dialog-button-save": "Uložit",
+       "upload-dialog-button-upload": "Načíst",
+       "upload-dialog-label-usage-filename": "Jméno souboru",
        "backend-fail-stream": "Soubor $1 nelze streamovat.",
        "backend-fail-backup": "Soubor $1 nelze zazálohovat.",
        "backend-fail-notexists": "Soubor $1 neexistuje.",
        "booksources-text": "Níže je seznam odkazů na servery prodávající knihy, nebo které mohou mít další informace o knihách, které hledáte.",
        "booksources-invalid-isbn": "Zadané ISBN se zdá být neplatné. Zkontrolujte jej s originálním zdrojem.",
        "specialloguserlabel": "Původce:",
-       "speciallogtitlelabel": "Cíl (název nebo uživatel):",
+       "speciallogtitlelabel": "Cíl (název nebo {{ns:user}}:Jméno pro uživatele):",
        "log": "Protokolovací záznamy",
        "all-logs-page": "Všechny veřejné záznamy",
        "alllogstext": "Společné zobrazení všech dostupných protokolovacích záznamů pro {{grammar:4sg|{{SITENAME}}}}.\nZobrazení můžete zúžit výběrem typu záznamu, uživatelského jména (záleží na velikosti písmen) nebo dotčené stránky (také záleží na velikosti písmen).",
        "linksearch-pat": "Vyhledávací vzor:",
        "linksearch-ns": "Jmenný prostor:",
        "linksearch-ok": "Hledat",
-       "linksearch-text": "Lze používat zástupné znaky, např. „*.wikipedia.org“.\nPovinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br />\n{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: <code>$1</code> (pokud není protokol uveden, použije se http://).",
+       "linksearch-text": "Lze používat zástupné znaky, např. „*.wikipedia.org“.\nPovinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br />\n{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: $1 (pokud není protokol uveden, použije se http://).",
        "linksearch-line": "$2 odkazuje na $1",
        "linksearch-error": "Zástupné znaky lze použít jen na začátku doménového jména.",
        "listusersfrom": "Zobrazit uživatele počínaje od:",
        "emailuser": "Poslat e-mail",
        "emailuser-title-target": "Poslat e-mail {{GENDER:$1|tomuto uživateli|této uživatelce}}",
        "emailuser-title-notarget": "Poslat e-mail uživateli",
-       "emailpage": "Poslat e-mail",
        "emailpagetext": "Pomocí níže zobrazeného formuláře můžete {{GENDER:$1|tomuto uživateli|této uživatelce}} poslat zprávu e-mailem.\nE-mailová adresa, kterou máte uvedenu v [[Special:Preferences|nastavení]], se objeví jako adresa odesílatele pošty, aby vám adresát mohl odpovědět přímo.",
        "defemailsubject": "E-mail z {{grammar:2sg|{{SITENAME}}}} od {{gender:$1|uživatele|uživatelky|uživatele}} „$1“",
        "usermaildisabled": "Posílání e-mailů je vypnuto",
        "emailccsubject": "Kopie Vaší zprávy pro uživatele $1: $2",
        "emailsent": "E-mail odeslán",
        "emailsenttext": "Váš e-mail byl odeslán.",
-       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailpage}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2.",
+       "emailuserfooter": "Tento e-mail byl odeslán z {{grammar:2sg|{{SITENAME}}}} pomocí funkce „{{int:emailuser}}“; {{GENDER:$1|odeslal ho uživatel|odeslala ho uživatelka}} $1 {{GENDER:$2|uživateli|uživatelce}} $2.",
        "usermessage-summary": "Doručena zpráva od systému.",
        "usermessage-editor": "Systémový poslíček",
        "watchlist": "Sledované stránky",
        "watchlistanontext": "Pro prohlížení či úpravu seznamu sledovaných stránek se musíte přihlásit.",
        "watchnologin": "Nejste přihlášen(a)",
        "addwatch": "Přidat do sledovaných stránek",
-       "addedwatchtext": "Stránka „[[:$1]]“ byla přidána mezi stránky, které sledujete.\nVe [[Special:Watchlist|sledovaných stránkách]] se tak budou objevovat budoucí změny této stránky a přidružené diskuse.",
+       "addedwatchtext": "Stránka „[[:$1]]“ a její diskusní stránka byly přidány mezi [[Special:Watchlist|stránky, které sledujete]].",
        "addedwatchtext-short": "Stránka „$1“ byla přidána mezi stránky, které sledujete.",
        "removewatch": "Vyřadit ze sledovaných stránek",
-       "removedwatchtext": "Stránka „[[:$1]]“ byla vyřazena z vašeho [[Special:Watchlist|seznamu sledovaných stránek]].",
+       "removedwatchtext": "Stránka „[[:$1]]“ a její diskusní stránka byly vyřazeny z vašeho [[Special:Watchlist|seznamu sledovaných stránek]].",
        "removedwatchtext-short": "Stránka „$1“ byla vyřazena z vašeho seznamu sledovaných stránek.",
        "watch": "Sledovat",
        "watchthispage": "Sledovat tuto stránku",
        "changecontentmodel-success-title": "Model obsahu byl změněn",
        "changecontentmodel-success-text": "Model obsahu stránky [[:$1]] byl změněn.",
        "changecontentmodel-cannot-convert": "Obsah stránky [[:$1]] nelze zkonvertovat na typ $2.",
-       "changecontentmodel-title-cantexist": "Pod názvem $1 nemůže být stránka.",
        "changecontentmodel-nodirectediting": "Model obsahu $1 nepodporuje přímou editaci",
        "log-name-contentmodel": "Kniha změny modelů obsahu",
        "log-description-contentmodel": "Události týkající se modelů obsahu stránek",
        "undeletepagetext": "{{PLURAL:$1|Následující stránka byla smazána, ale je dosud v archivu, takže je možno ji obnovit|Následující $1 stránky byly smazány, ale jsou dosud v archivu, takže je možno je obnovit|Následujících $1 stránek bylo smazáno, ale jsou dosud v archivu, takže je možno je obnovit}}.\nArchiv může být pravidelně vyprazdňován.",
        "undelete-fieldset-title": "Obnovit revize",
        "undeleteextrahelp": "Pokud chcete obnovit kompletní historii stránky, ponechte všechny čtverečky nezaškrtnuté a klikněte na '''''{{int:undeletebtn}}'''''.\nPro částečné obnovení zaškrtněte čtverečky u obnovovaných revizí a klikněte na '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|verze je archivována|verze jsou archivovány|verzí je archivováno}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|smazaná verze|smazané verze|smazaných verzí}}",
        "undeletehistory": "Pokud stránku obnovíte, budou  v historii obnoveny všechny verze. Pokud byla vytvořena nová stránka se stejným jménem jako smazaná, obnovené verze se zapíší na starší místo v historii novější stránky.",
        "undeleterevdel": "Obnovení nebude provedeno, pokud by vedlo k částečnému odstranění aktuální verze stránky. V takovém případě musíte odznačit nebo odkrýt nejnovější smazanou verzi.",
        "undeletehistorynoadmin": "Tato stránka byla smazána. Důvod smazání je uveden níže, spolu s informacemi o uživatelích, kteří tuto stránku před smazáním editovali. Samotný text stránky je dostupný pouze správcům.",
        "spam_reverting": "Revert na poslední verzi neobsahující odkazy na $1",
        "spam_blanking": "Všechny verze obsahovaly odkazy na $1, vyprázdněno",
        "spam_deleting": "Všechny verze obsahovaly odkazy na $1, smazáno",
-       "simpleantispam-label": "Antispamová kontrola.\n'''NEVYPLŇUJTE''' následující!",
+       "simpleantispam-label": "Antispamová kontrola.\n<strong>NEVYPLŇUJTE</strong> následující!",
        "pageinfo-title": "Informace o stránce „$1“",
        "pageinfo-not-current": "Informace bohužel nelze zobrazit pro starší verze.",
        "pageinfo-header-basic": "Základní údaje",
        "htmlform-cloner-create": "Přidat další",
        "htmlform-cloner-delete": "Odstranit",
        "htmlform-cloner-required": "Je povinná nejméně jedna hodnota.",
+       "htmlform-title-badnamespace": "Stránka [[:$1]] není ve jmenném prostoru „{{ns:$2}}“.",
+       "htmlform-title-not-creatable": "Pod názvem „$1“ nelze vytvořit stránku",
+       "htmlform-title-not-exists": "Stránka [[:$1]] neexistuje.",
+       "htmlform-user-not-exists": "Uživatel <strong>$1</strong> neexistuje.",
+       "htmlform-user-not-valid": "<strong>$1</strong> není platné uživatelské jméno.",
        "sqlite-has-fts": "$1 s podporou plnotextového vyhledávání",
        "sqlite-no-fts": "$1 bez podpory plnotextového vyhledávání",
        "logentry-delete-delete": "$1 {{GENDER:$2|smazal|smazala}} stránku $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|založil|založila}} uživatelský účet $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|založil|založila}} uživatelský účet $3, heslo bylo posláno e-mailem",
        "logentry-newusers-autocreate": "Automaticky byl {{GENDER:$2|založen}} účet $1",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|přesunul|přesunula}} nastavení zámků ze stránky $4 na stránku $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5",
        "special-characters-title-endash": "krátká pomlčka",
        "special-characters-title-emdash": "dlouhá pomlčka",
        "special-characters-title-minus": "znaménko minus",
+       "mw-widgets-dateinput-no-date": "Nevybráno žádné datum",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "stránka zatím neexistuje",
        "mw-widgets-titleinput-description-redirect": "přesměrování na $1"
 }
index 144fcbe..241494e 100644 (file)
@@ -6,7 +6,8 @@
                        "Svetko",
                        "Wolliger Mensch",
                        "ОйЛ",
-                       "아라"
+                       "아라",
+                       "Илья Драконов"
                ]
        },
        "tog-oldsig": "нꙑнѣшьн҄ь аѵтографъ :",
        "minoreditletter": "м҃л",
        "newpageletter": "н҃в",
        "boteditletter": "а҃ѵ",
+       "rc_categories_any": "Любы из выбраных",
        "rc-change-size-new": "$1 {{PLURAL:$1|баитъ|баита|баитъ}} послѣди мѣнꙑ",
        "rc-old-title": "напрьва страница створѥна ꙗко ⁖ $1 ⁖",
        "recentchangeslinked": "съвѧꙁанꙑ страницѧ",
        "protectedarticle": "⁖ [[$1]] ⁖ ꙁабранѥна ѥстъ",
        "prot_1movedto2": "⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ",
        "protectcomment": "какъ съмꙑслъ :",
+       "protect-cascadeon": "Эта страница защищена от редактирования {{PLURAL:$1|page, which has|pages, which have}}.",
        "protect-level-sysop": "толико съмотритєлє",
        "protect-othertime": "ино врѣмѧ :",
        "protect-othertime-op": "ино врѣмѧ",
index 8f3d87b..dba2662 100644 (file)
        "category-subcat-count": "{{PLURAL:$2|Ку категоринче çак айри категори пур.|$2-ран(-рен,-тан,-тен) {{PLURAL:$1|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă|$1 айри категорине кăтартнă}}.}}",
        "category-subcat-count-limited": "Ку категоринче {{PLURAL:$1|$1 айри категори|$1 айри категори|$1 айри категори}}.",
        "category-article-count": "{{PLURAL:$2|1=Ку категоринче пĕр страница кăна.|Ку категорири $2 страницăран $1 кăтартнă.}}",
-       "category-article-count-limited": "Ку категоринче $1 страница.",
+       "category-article-count-limited": "Ку категоринче {{PLURAL:$1|страница|$1 страницăсем}}.",
        "category-file-count": "{{PLURAL:$2|1=Ку категоринче пĕр файл кăна.|Ку категоринчи $2 файлтан $1 кăтартнă.}}",
-       "category-file-count-limited": "Ку категоринче $1 файл.",
+       "category-file-count-limited": "Ку категоринче {{PLURAL:$1|файл|$1 файлсем}}.",
        "listingcontinuesabbrev": "(малалли)",
-       "about": "Ä\82нланÑ\82аÑ\80кÄ\83Ñ\87",
+       "about": "Ä\82нланÑ\82аÑ\80ни",
        "article": "Статья",
        "newwindow": "(çĕнĕ чӳречере)",
        "cancel": "Пăрахăçла",
        "disclaimers": "Яваплăха тивĕçтерменни",
        "disclaimerpage": "Project:Яваплăха тивĕçтерменни",
        "edithelp": "Улшăнусене кĕртме пулăшакан пулăшу",
+       "helppage-top-gethelp": "Пулăшу",
        "mainpage": "Тĕп страницă",
        "mainpage-description": "Тĕп страницă",
        "policy-url": "Project:Йĕркесем",
        "hidetoc": "кӑтартмалла мар",
        "thisisdeleted": "$1 пăхса каялла тавăрмалла-и?",
        "viewdeleted": "$1 пăхар-и?",
-       "restorelink": "$1 кăларса пăрахнă тӳрлетĕве",
+       "restorelink": "{{PLURAL:$1|кăларса пăрахнă тӳрлетнине|$1 кăларса пăрахнă тӳрлетнисене}}",
        "feedlinks": "Çапла кур:",
        "feed-invalid": "Çырăнмашкăн ку канал тĕсĕ каймасть.",
        "feed-unavailable": "{{SITENAME}} сайтри синдикаци хăйăвĕсем тупăнмарĕç",
        "unexpected": "Тĕрĕс мар пĕлтерĕш: «$1»=«$2».",
        "formerror": "Йăнăш: формăри даннăйсене леçме май çук",
        "badarticleerror": "Çак страницăра эсир ку ĕçĕ тăваймастăр.",
-       "cannotdelete": "Эсир кăтартнă страницăна е файла кăларса пăрахаймастпăр. Ăна, тен, урăххи кăларса пăрахнă?",
+       "cannotdelete": "Эсир кăтартнă страницăна е файла \"$1\" кăларса пăрахаймастпăр.\nĂна, тен, урăххи кăларса пăрахнă.",
        "badtitle": "Ку ят килĕшмест",
        "badtitletext": "Эсир кăтартнă статья ячĕ тĕрĕс мар, пушă, е чĕлхе хушшинчипе интервики ячĕ тĕрĕс мар. Ятра усă курма юраман паллăсене çырнинче пулма пултарать.",
        "perfcached": "Ку даннăйсене кэшран илнĕ, çавна май унта юлашки улшăнусем палăрмасăр пултараççĕ. A maximum of {{PLURAL:$1|1=one result is|$1 results are}} available in the cache.",
        "yourpassword": "Вăрттăн сăмах:",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
        "remembermypassword": "Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})",
-       "yourdomainname": "Сирĕн домен",
+       "yourdomainname": "Сирĕн доменă:",
        "login": "Кĕрĕр",
        "nav-login-createaccount": "Сайта кĕр / регистрацилен",
        "userlogin": "Кĕр / аккаунт ту",
        "blocked-mailpassword": "Ку IP-адреслисене статьясене тӳрлетме чарнă. Вăрттăн сăмаха аса илмелли функципе те усă кураймăр.",
        "mailerror": "Çыру яраймарăмăр, йăнăш тухрĕ: $1",
        "acct_creation_throttle_hit": "Сирĕн $1 хутшăнакан пур ĕнтĕ, урăх кĕртейместĕр.",
-       "emailauthenticated": "Сирĕн электронлă адреса çирĕплетнĕ $1.",
+       "emailauthenticated": "Сирĕн электронлă адреса çирĕплетнĕ $2 $3.",
        "emailconfirmlink": "Хăвăр эл. почтăн адресне çирĕплетĕр",
        "accountcreated": "Сире хутшăнакансем шутне кĕртрĕмĕр",
        "accountcreatedtext": "Хутшăнакансем шутне $1 ятлă çĕнĕ хутшăнакана кĕртрĕмĕр.",
        "accmailtitle": "Пароле леçрĕмĕр.",
        "accmailtext": "$1 вăрттăн сăмахне кунта леçрĕмĕр: $2.",
        "newarticle": "(Çĕнни)",
-       "newarticletext": "Ссылка урлă эсир халлĕхе çук статья çине куçрăр.\nÇĕнĕ статьяна кĕртес тесен аяларах вырнаçнă чӳречере текста çырăр.\n(тĕплĕнрех пĕлес тесен [[Help:Пулăшу|пулăшу страниципе] паллашăр).\nЕнчен те эсир кунта йăнăшпа лекнĕ пулсан — сирĕн браузерăн «Каялла» кнопка çине пусăр.",
+       "newarticletext": "Ссылка урлă эсир халлĕхе çук статья çине куçрăр.\nÇĕнĕ статьяна кĕртес тесен аяларах вырнаçнă чӳречере текста çырăр.\n(тĕплĕнрех пĕлес тесен [$1 пулăшу страниципе] паллашăр).\nЕнчен те эсир кунта йăнăшпа лекнĕ пулсан — сирĕн браузерăн <strong>Каялла</strong> кнопка çине пусăр.",
        "usercsspreview": "'''Ан манăр, эсир сирĕн css файл епле пулассине çеç куратăр, ăна халлĕхе çырса хуман!'''",
        "userjspreview": "'''Астăвăр, ку сирĕн javascript-файлăн малтанхи курăмĕ кăна, ăна хальлĕхе çырса хуман!'''",
        "updated": "(Çĕнелнĕ)",
        "expensive-parserfunction-category": "Кунта эсир чылай ресурс ыйтакан функцисемпе нумай ĕçлекен страницăсене куратăр",
        "post-expand-template-argument-category": "Шаблон аргуменчĕсене сиктерсе хăварнă страницăсем",
        "undo-norev": "Ку тӳрлетĕве пăрахăçлама май çук — вăл е пулман та, е ăна кăларса пăрахнă.",
-       "undo-summary": "$1 хутшăнакан [[Special:Contributions/$2|$2]] ([[User_talk:$2|сӳтсе яв]]) кĕртнĕ № улшăнăва тавăрнă",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|сӳтсе яв]]) $1 улăштарнине тавăрчĕ",
        "cantcreateaccounttitle": "Хутшăнакана кĕртме май çук",
        "viewpagelogs": "Ку страницăн журналĕсене пăхмалли",
        "nohistory": "Ку страницăн улшăнусен журналĕ çук.",
        "yourvariant": "Чĕлхе варианчĕ",
        "yournick": "Сирĕн ят (алă пусма усă курăнĕ):",
        "badsig": "Алă пуснинче йăнăш пур. HTML тэгĕсене тĕрĕслĕр.",
-       "badsiglength": "Ð\90лÄ\83 Ð¿Ñ\83Ñ\81ни Ñ\8bÑ\82ла Ð²Ä\83Ñ\80Ä\83м, $1 Ñ\81имволÑ\82ан ÐºÄ\95Ñ\81кеÑ\80еÑ\85 Ð¿Ñ\83лмалла.",
+       "badsiglength": "СиÑ\80Ä\95н Ð°Ð»Ä\83 Ð¿Ñ\83Ñ\81ни Ñ\8bÑ\82лаÑ\88и Ð²Ä\83Ñ\80Ä\83м.\nÐ\92Ä\83л {{PLURAL:$1|Ñ\81имвол|Ñ\81имволÑ\81енÑ\87ен}} Ð²Ä\83Ñ\80Ä\83мÑ\80аÑ\85 Ð¿Ñ\83лмалла Ð¼Ð°Ñ\80.",
        "email": "Эл. почта",
        "prefs-help-email": "Электронлă почта (вăл кирлисем шутне кĕмест пулин те) ытти хутшăнакансене сирĕнпе ун урлă çыхăнма май парать. Çыхăну тытнă вăхăтра ыттисем сирĕн адреса пĕлеймеççĕ.",
        "prefs-help-email-required": "Электронлă почтăн адресне кăтартмалла.",
        "prefs-editor": "Редактор",
        "userrights": "Хутшăнакансен прависемпе ĕçлесси",
        "userrights-lookup-user": "Хутшăнакансен ушкăнĕсемпе ĕçлесси",
-       "userrights-user-editname": "Ð¥Ñ\83Ñ\82Ñ\88Ä\83накан Ñ\8fÑ\82не ÐºÄ\83Ñ\82аÑ\80Ñ\82Ä\83р:",
-       "editinguser": "тӳрлетни '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])",
+       "userrights-user-editname": "Ð¥Ñ\83Ñ\82Ñ\88Ä\83накан Ñ\8fÑ\82не ÐºÄ\95Ñ\80Ñ\82Ä\95р:",
+       "editinguser": "{{GENDER:$1|хутшăнакан}} правине улăштарни <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Хутшăнакансен ушкăнĕсене улăштар",
        "saveusergroups": "Хутшăнаканăн ушкăнĕсем астуса юл",
        "userrights-groupsmember": "Çак ушкăнсене кĕрет:",
        "upload": "Файла кĕртесси",
        "uploadbtn": "Файла кĕрт",
        "uploadnologin": "Эсир сайта кĕмен.",
-       "uploadnologintext": "Файла ÐºÄ\95Ñ\80Ñ\82еÑ\81 Ñ\83мÄ\95н Ñ\81иÑ\80Ä\95н Ð¼Ð°Ð»Ñ\82ан [[Special:UserLogin|Ñ\81айÑ\82а ÐºÄ\95мелле]].",
+       "uploadnologintext": "СиÑ\80Ä\95н $1 Ñ\84айлÑ\81ем ÐºÄ\95Ñ\80Ñ\82еÑ\81 Ñ\82еÑ\81ен.",
        "uploaderror": "Файла кĕртне чухне йăнăш пулчĕ",
        "uploadlogpage": "Файлсене кĕртнине кăтартакан журнал",
        "uploadlogpagetext": "Аяларах эсир юлашкинчен кĕртнĕ файлсене куратăр.\nПур çĕрте те сервер вăхăтне (Гринвич тăрăх, UTC) кăтартнă.",
        "prefixindex": "Сăмах пуçламăшĕсен кăтартмăшĕ",
        "shortpages": "Кĕске статьясем",
        "longpages": "Вăрăм страницăсем",
-       "deadendpages": "Ниăçта та урăх ертмен страницăсем",
+       "deadendpages": "Нимĕнпе те çыхăнман страницăсем",
        "protectedpages": "Хӳтĕленĕ страницăсем",
        "protectedtitles": "Юраман ятсем",
        "listusers": "Хутшăнакансен списокĕ",
        "linksearch-ok": "Шырамалли",
        "listusers-submit": "Кăтарт",
        "listusers-noresult": "Хутшăнакансем тупăнмарĕç.",
+       "activeusers-hidesysops": "Администраторĕсене пытар",
        "listgrouprights-group": "Ушкăн",
        "listgrouprights-helppage": "Help:Ушкăн прависем",
+       "listgrouprights-members": "(хутшăнакансен списокĕ)",
        "emailuser": "Хутшăнакана çыру яр... (Письмо участнику)",
        "noemailtitle": "Электронлă почта адресĕ çук",
        "noemailtext": "Ку хутшăнакан электронлă адресне кăтартман е ытти хутшăнакансенчен çыру илесшĕн мар.",
        "emailccme": "Çыру копине ман пата ямалла",
        "emailsent": "Çырăва леçрĕмĕр",
        "emailsenttext": "Сирĕн электронлă çырăва леçрĕмĕр.",
-       "watchlist": "Ð\9fÄ\83Ñ\85Ñ\81а Ñ\82Ä\83Ñ\80акан Ñ\81Ñ\82Ñ\80аниÑ\86Ä\83Ñ\81ем Ñ\8fÑ\82-йÑ\8bÑ\88ĕ",
+       "watchlist": "Ð\9fÄ\83Ñ\85Ñ\81а Ñ\82Ä\83Ñ\80акан Ñ\81Ñ\82Ñ\80аниÑ\86Ä\83Ñ\81ен Ñ\81пиÑ\81окĕ",
        "mywatchlist": "Сăнаса тăракан списокĕ",
        "watchlistfor2": "$1 валли $2",
        "nowatchlist": "Эсир пăхса тăракан страницăсен списокĕ пушă.",
        "restriction-edit": "Тӳрлет",
        "undelete": "Кăларса пăрахнă страницăсене пăх",
        "viewdeletedpage": "Кăларса пăрахнă страницăсене пăх",
-       "undeleterevisions": "Архивра пурĕ $1 верси",
+       "undeleterevisions": "$1 {{PLURAL:$1|верси|версисене}} пăса утнă",
        "undeletebtn": "Каялла тавăр!",
        "undeleteviewlink": "пăх",
-       "undeletedrevisions": "$1 кăларса пăрахнă тӳрлетӳсене каялла тавăрнă",
+       "undeletedrevisions": "{{PLURAL:$1|1 улăштарни|$1 улăштарнисене}} тавăрнă.",
+       "undeletedfiles": "{{PLURAL:$1|1 файл|$1 файлсене}} тавăрнă",
        "undelete-search-box": "Кăларса пăрахнă страницăсен хушшинчи шырав",
        "undelete-search-submit": "Шыра",
        "blanknamespace": "(Тĕп)",
        "contributions": "{{GENDER:$1|Усă куракан}} ӳсĕмĕсем",
        "contributions-title": "Усă куракан $1 хушни",
-       "mycontris": "Ӳсĕм",
+       "mycontris": "Хушни",
        "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
        "uctop": "(хальхи)",
        "month": "Уйăхран (тата маларах):",
        "whatlinkshere-links": "← каçăсем",
        "whatlinkshere-hideredirs": "куçарнисене $1",
        "whatlinkshere-filters": "Аласем",
-       "blockip": "Хăтшăнакана ĕçлеме чар",
+       "blockip": "{{GENDER:$1|хутшăнакана}} чар",
        "ipaddressorusername": "IP адрес е усă куракан ят:",
        "ipbreason": "Сăлтавĕ",
        "ipbother": "Урăх вăхăт:",
        "pagemovedsub": "Куçарас ĕç тĕрĕс иртрĕ",
        "articleexists": "Ку ятлă статья е пур, е ун пек ят пама юрамасть.\nТархасшăн, статьяна урăх ят парăр.",
        "movetalk": "Статьяна сӳтсе явнă страницăн ятне те улăштармалла",
-       "movelogpage": "СÑ\82аÑ\82Ñ\8cÑ\8fÑ\81ен Ñ\8fÑ\82не Ñ\83лÄ\83Ñ\88Ñ\82аÑ\80нине ÐºÄ\83Ñ\82аÑ\80Ñ\82акан Ð¶Ñ\83Ñ\80нал",
+       "movelogpage": "ЯÑ\82не Ñ\83лÄ\83Ñ\88Ñ\82аÑ\80нин Ð»Ð¾Ð³Ä\95",
        "movereason": "Сăлтавĕ",
        "delete_and_move": "Кăларса пăрахса куçарасси",
        "delete_and_move_text": "==Кăларса пăрахмалла==\n[[:$1|«$1»]] ятлă страница пур. Урăх ят парас тесе ăна кăларса пăрахмалла-и?",
        "delete_and_move_confirm": "Ку страницăна чăнах та кăларса пăрахмалла",
-       "delete_and_move_reason": "УÑ\80Ä\83Ñ\85 Ñ\8fÑ\82 Ð¿Ð°Ð¼Ð°Ñ\88кÄ\83н ÐºÄ\83лаÑ\80Ñ\81а Ð¿Ð°Ñ\80аÑ\85нÄ\83",
+       "delete_and_move_reason": "ЯÑ\82не Ñ\83лÄ\83Ñ\88Ñ\82аÑ\80ма ÐºÄ\83лаÑ\80Ñ\81а Ð¿Ä\83Ñ\80аÑ\85нÄ\83 \"[[$1]]\"",
        "export": "Статьясен экспорчĕ",
        "export-submit": "Экспортла",
        "export-addcat": "Хуш",
        "tooltip-save": "Тӳрлетӳсене астуса хăвармалла",
        "tooltip-watch": "Çак страницăна пăхса тăмаллисем шутне хуш",
        "tooltip-summary": "Кĕскĕн ăнлантарса парăр",
-       "anonymous": "{{GRAMMAR:genitive|{{SITENAME}}}} анонимлă хутшăнакансем",
+       "anonymous": "Паллă мар {{PLURAL:$1|хутшăнакан|хутшăнакансем}} {{SITENAME}}",
        "siteuser": "{{SITENAME}} усă куракан $1",
        "lastmodifiedatby": "Ку страницăна юлашки хут $2, $1 вăхăтра $3 улăштарнă.",
        "othercontribs": "$1 ĕçĕ çинче никĕсленнĕ.",
        "noimages": "Ӳкерчĕксем çук.",
        "ilsubmit": "Шырамалла",
        "bydate": "дата тăрăх",
+       "yesterday-at": "Ĕнер $1",
        "metadata": "Метаданнăйсем:",
        "exif-exifversion": "Exif версийĕ",
        "exif-flashpixversion": "Ĕçлеме пултаракан FlashPix версийĕ",
        "table_pager_limit": "Страница çинче $1 кăтарт",
        "table_pager_limit_submit": "Ту",
        "table_pager_empty": "Тупăнмарĕ",
-       "autosumm-blank": "Статьяна тĕппипех кăларса пăрахнă",
+       "autosumm-blank": "Статьяна йăлтах пушатрĕ",
        "autosumm-replace": "Страницăн ăшлăхне «$1» çине улăштарнă",
        "autoredircomment": "[[$1]] çине куçарни",
        "autosumm-new": "Çĕнĕ страница \"$1\"",
        "specialpages-group-media": "Медиа-материалсемпе тултарăшсем",
        "specialpages-group-users": "Хутшăнакансем тата правасем",
        "specialpages-group-highuse": "Нумай усă куракан страницăсем",
+       "compare-submit": "Танлаштар",
        "htmlform-selectorother-other": "Урăххи",
        "htmlform-no": "Çук",
+       "logentry-delete-delete": "$1 $3 страница {{GENDER:$2|пăсса утрĕ}}",
        "logentry-move-move": "$1 страницă {{GENDER:$2|ятне улăштарчĕ}} $3 - $4",
        "rightsnone": "(çук)",
        "feedback-back": "Каялла",
index 0ee2be7..20b5624 100644 (file)
        "linksearch-pat": "Patrwm chwilio:",
        "linksearch-ns": "Parth:",
        "linksearch-ok": "Chwilio",
-       "linksearch-text": "Gellir defnyddio cardiau gwyllt megis \"*.wikipedia.org\".\nMae angen parth lefel-uchaf o leiaf, er enghraifft \"*.org\".<br />\n{{PLURAL:$2|Protocol|Protocol|Protocoliau}} sy'n cael eu cynnal: <code>$1</code> (yn neidio i http:// os na roddir protocol o gwbl).",
+       "linksearch-text": "Gellir defnyddio cardiau gwyllt megis \"*.wikipedia.org\".\nMae angen parth lefel-uchaf o leiaf, er enghraifft \"*.org\".<br />\n{{PLURAL:$2|Protocol|Protocol|Protocoliau}} sy'n cael eu cynnal: $1 (yn neidio i http:// os na roddir protocol o gwbl).",
        "linksearch-line": "Mae cysylltiad i gael i $1 oddi wrth $2",
        "linksearch-error": "Dim ond ar ddechrau enw'r gwesteiwr y gallwch osod cardiau gwyllt.",
        "listusersfrom": "Dangos y defnyddwyr gan ddechrau â:",
        "special-characters-group-khmer": "Chmereg",
        "special-characters-title-endash": "heiffen en",
        "special-characters-title-emdash": "heiffen em",
-       "special-characters-title-minus": "arwydd minws"
+       "special-characters-title-minus": "arwydd minws",
+       "mw-widgets-dateinput-placeholder-day": "BBBB-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "BBBB-MM"
 }
index cc2c9a5..ee33863 100644 (file)
        "passwordreset": "Nulstil adgangskode",
        "passwordreset-text-one": "Udfyld denne formular for at nulstille din adgangskode.",
        "passwordreset-text-many": "{{PLURAL:$1|Udfyld et af felterne for at modtage en midlertidig adgangskode via e-mail.}}",
-       "passwordreset-legend": "Nulstil adgangskode",
        "passwordreset-disabled": "Nulstilling af adgangskode er slået fra på denne wiki.",
        "passwordreset-emaildisabled": "E-mailfunktioner er slået fra på denne wiki.",
        "passwordreset-username": "Brugernavn:",
        "resettokens": "Nulstil nøgler",
        "resettokens-text": "Du kan nulstille nøgler, som giver adgang til visse private data i forbindelse med din konto her.\n\nDu bør gøre det, hvis du ved et uheld deler dem med nogen, eller hvis din konto er blevet kompromitteret.",
        "resettokens-no-tokens": "Der er ingen nøgler at nulstille.",
-       "resettokens-legend": "Nulstil nøgler",
        "resettokens-tokens": "Nøgler:",
        "resettokens-token-label": "$1 (aktuel værdi: $2)",
        "resettokens-watchlist-token": "Nøgle for web-feed (Atom/RSS) af [[Special:Watchlist|ændringer af sider på din overvågningsliste]]",
        "randomincategory-nopages": "Der er ingen sider i [[:Category:$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Tilfældig side i en given kategori",
+       "randomincategory-submit": "Udfør",
        "randomredirect": "Tilfældige henvisninger",
        "randomredirect-nopages": "Der er ingen omdirigeringer i navnerummet $1.",
        "statistics": "Statistik",
        "nmembers": "$1 {{PLURAL:$1|medlem|medlemmer}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|medlem|medlemmer}}",
        "nrevisions": "{{PLURAL:$1|1 ændring|$1 ændringer}}",
-       "nviews": "{{PLURAL:$1|1 visning|$1 visninger}}",
        "nimagelinks": "Brugt på $1 {{PLURAL:$1|side|sider}}",
        "ntransclusions": "brugt på $1 {{PLURAL:$1|side|sider}}",
        "specialpage-empty": "Der er ingen resultater at vise.",
        "linksearch-pat": "Søg efter links til:",
        "linksearch-ns": "Navnerum:",
        "linksearch-ok": "Søg",
-       "linksearch-text": "Wildcards som \"*.wikipedia.org\" kan benyttes.\nDer skal som minimum angives et topniveau-domæne som f. eks. \"*.org\".<br />\n{{PLURAL:$2|Understøttet protokol|Understøttede protokoller}}: <code>$1</code> (bruger automatisk http:// hvis der ikke er angivet nogen protokol).",
+       "linksearch-text": "Wildcards som \"*.wikipedia.org\" kan benyttes.\nDer skal som minimum angives et topniveau-domæne som f. eks. \"*.org\".<br />\n{{PLURAL:$2|Understøttet protokol|Understøttede protokoller}}: $1 (bruger automatisk http:// hvis der ikke er angivet nogen protokol).",
        "linksearch-line": "$2 linker til $1",
        "linksearch-error": "Wildcards må kun benyttes i starten af hostnavnet.",
        "listusersfrom": "Vis brugere fra:",
        "emailuser": "E-mail til denne bruger",
        "emailuser-title-target": "Send e-mail til denne {{GENDER:$1|bruger}}",
        "emailuser-title-notarget": "Send e-mail til en bruger",
-       "emailpage": "E-mail til bruger",
        "emailpagetext": "Du kan bruge formularen nedenfor til at sende en e-mail til denne {{GENDER:$1|bruger}}.\nDen e-mailadresse, du har angivet i [[Special:Preferences|dine indstillinger]], vil dukke op i \"fra\"-feltet på e-mailen, så modtageren kan svare dig.",
        "defemailsubject": "{{SITENAME}}-e-mail fra brugeren \"$1\"",
        "usermaildisabled": "Bruger-e-mail deaktiveret",
        "emailccsubject": "Kopi af din besked til $1: $2",
        "emailsent": "E-mail sendt",
        "emailsenttext": "Din e-mail er blevet sendt.",
-       "emailuserfooter": "Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen \"{{int:emailpage}}\" på {{SITENAME}}.",
+       "emailuserfooter": "Denne e-mail er sendt af $1 til $2 ved hjælp af funktionen \"{{int:emailuser}}\" på {{SITENAME}}.",
        "usermessage-summary": "Efterlader system besked.",
        "usermessage-editor": "System messenger",
        "watchlist": "Overvågningsliste",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tankestreg",
        "special-characters-title-emdash": "lang tankestreg",
-       "special-characters-title-minus": "minustegn"
+       "special-characters-title-minus": "minustegn",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index 6314a70..8dc362c 100644 (file)
        "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed Ihrer Beobachtungsliste.\nJeder, der ihn kennt, kann Ihre Beobachtungsliste lesen. Teilen Sie ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|können Sie ihn zurücksetzen]].",
        "savedprefs": "Ihre Einstellungen wurden gespeichert.",
        "prefs-reset-intro": "Sie können diese Seite verwenden, um die Einstellungen auf die Standards zurückzusetzen.\nDies kann nicht mehr rückgängig gemacht werden.",
-       "yourgender": "Welches Geschlecht haben Sie?",
        "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um Sie anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
        "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann Ihr bürgerlicher Name Ihren Beiträgen zugeordnet werden.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
index eb9d933..c61e5f4 100644 (file)
                        "Brackenheim",
                        "Robby",
                        "Andreasburmeister",
-                       "Tiin"
+                       "Tiin",
+                       "Freddy2001",
+                       "Luke081515",
+                       "J. 'mach' wust"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "tog-hideminor": "Kleine Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-hidepatrolled": "Kontrollierte Änderungen in den „Letzten Änderungen“ ausblenden",
        "tog-newpageshidepatrolled": "Kontrollierte Seiten bei den „Neuen Seiten“ ausblenden",
-       "tog-extendwatchlist": "In der Beobachtungsliste alle Änderungen anzeigen, nicht nur die aktuellsten",
+       "tog-extendwatchlist": "In der Beobachtungsliste alle und nicht nur die aktuellsten Änderungen anzeigen",
        "tog-usenewrc": "Änderungen auf „Letzte Änderungen“ und der Beobachtungsliste nach Seite gruppieren",
        "tog-numberheadings": "Überschriften automatisch nummerieren",
        "tog-showtoolbar": "Bearbeiten-Werkzeugleiste anzeigen",
        "actionthrottled": "Aktionsanzahl limitiert",
        "actionthrottledtext": "Im Rahmen einer Anti-Spam-Maßnahme kann diese Aktion in einem kurzen Zeitabstand nur begrenzt oft ausgeführt werden. Diese Grenze hast du überschritten.\nBitte versuche es in ein paar Minuten erneut.",
        "protectedpagetext": "Diese Seite wurde geschützt, um Bearbeitungen sowie andere Aktionen zu verhindern.",
-       "viewsourcetext": "Du kannst den Quelltext dieser Seite betrachten und kopieren:",
-       "viewyourtext": "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
+       "viewsourcetext": "Du kannst den Quelltext dieser Seite betrachten und kopieren.",
+       "viewyourtext": "Du kannst den Quelltext <strong>deiner Bearbeitung</strong> dieser Seite betrachten und kopieren.",
        "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
        "editinginterface": "<strong>Warnung:</strong> Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.",
        "translateinterface": "Um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern, verwende bitte [//translatewiki.net/ translatewiki.net], das MediaWiki-Lokalisierungsprojekt.",
        "createacct-captcha": "Sicherheitsprüfung",
        "createacct-imgcaptcha-ph": "Gib den Text ein, den du oben siehst.",
        "createacct-submit": "Benutzerkonto erstellen",
-       "createacct-another-submit": "Anderes Benutzerkonto erstellen",
+       "createacct-another-submit": "Benutzerkonto erstellen",
        "createacct-benefit-heading": "{{SITENAME}} wird von Menschen wie dir geschaffen.",
        "createacct-benefit-body1": "{{PLURAL:$1|Bearbeitung|Bearbeitungen}}",
        "createacct-benefit-body2": "{{PLURAL:$1|Seite|Seiten}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktiver Autor|aktive Autoren}}",
        "badretype": "Die beiden Passwörter stimmen nicht überein.",
+       "usernameinprogress": "Eine Benutzerkontenerstellung für diesen Benutzernamen ist bereits in Bearbeitung.\nBitte warten.",
        "userexists": "Dieser Benutzername ist schon vergeben.\nBitte wähle einen anderen.",
        "loginerror": "Fehler bei der Anmeldung",
        "createacct-error": "Fehler beim Erstellen des Benutzerkontos",
        "nosuchuser": "Der Benutzername „$1“ existiert nicht.\nÜberprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|lege ein neues Benutzerkonto an]].",
        "nosuchusershort": "Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfe die Schreibweise.",
        "nouserspecified": "Bitte gib einen Benutzernamen an.",
-       "login-userblocked": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist gesperrt. Die Anmeldung ist nicht erlaubt.",
+       "login-userblocked": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist gesperrt. Die Anmeldung ist nicht erlaubt.",
        "wrongpassword": "Das Passwort ist falsch. Bitte versuche es erneut.",
        "wrongpasswordempty": "Es wurde kein Passwort eingegeben. Bitte versuche es erneut.",
        "passwordtooshort": "Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.",
        "password-name-match": "Dein Passwort muss sich von deinem Benutzernamen unterscheiden.",
        "password-login-forbidden": "Die Verwendung dieses Benutzernamens und Passwortes ist nicht erlaubt.",
        "mailmypassword": "Passwort zurücksetzen",
-       "passwordremindertitle": "Neues Passwort für dein {{SITENAME}}-Benutzerkonto",
+       "passwordremindertitle": "Neues temporäres Passwort für dein {{SITENAME}}-Benutzerkonto",
        "passwordremindertext": "Jemand mit der IP-Adresse $1, wahrscheinlich du selbst, hat ein neues Passwort für die Anmeldung bei {{SITENAME}} ($4) angefordert.\n\nDas automatisch generierte Passwort für Benutzer „$2“ lautet nun: $3\n\nFalls du dies wirklich gewünscht hast, solltest du dich jetzt anmelden und das Passwort ändern.\nDas neue Passwort ist {{PLURAL:$5|1 Tag|$5 Tage}} gültig.\n\nBitte ignoriere diese E-Mail, falls du sie nicht selbst angefordert hast. Das alte Passwort bleibt weiterhin gültig.",
-       "noemail": "{{GENDER:$1|Benutzer|Benutzerin|Benutzer}} „$1“ hat keine E-Mail-Adresse angegeben.",
+       "noemail": "{{GENDER:$1|Benutzer|Benutzerin}} „$1“ hat keine E-Mail-Adresse angegeben.",
        "noemailcreate": "Du musst eine gültige E-Mail-Adresse angeben.",
        "passwordsent": "Ein neues, temporäres Passwort wurde an die E-Mail-Adresse von Benutzer „$1“ gesandt.\nBitte melde dich damit an, sobald du es erhalten hast. Das alte Passwort bleibt weiterhin gültig.",
        "blocked-mailpassword": "Die von dir verwendete IP-Adresse ist für das Ändern von Seiten gesperrt. Um einen Missbrauch zu verhindern, wurde die Möglichkeit zur Anforderung eines neuen Passwortes ebenfalls gesperrt.",
        "resetpass-expired-soft": "Dein Passwort ist abgelaufen und muss zurückgesetzt werden. Bitte wähle jetzt ein neues Passwort aus oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.",
        "resetpass-validity-soft": "Dein Passwort ist nicht gültig: $1\n\nBitte wähle jetzt ein neues Passwort oder klicke auf „{{int:resetpass-submit-cancel}}“, um es später zurückzusetzen.",
        "passwordreset": "Passwort zurücksetzen",
-       "passwordreset-text-one": "Fülle dieses Formular aus, um dein Passwort zurückzusetzen.",
+       "passwordreset-text-one": "Fülle dieses Formular aus, um ein temporäres Passwort per E-Mail zu erhalten.",
        "passwordreset-text-many": "{{PLURAL:$1|Füll eines der Felder aus, um ein temporäres Passwort per E-Mail zugesandt zu bekommen.}}",
        "passwordreset-disabled": "Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.",
        "passwordreset-emaildisabled": "Die E-Mail-Funktionen wurden auf diesem Wiki deaktiviert.",
        "anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
        "missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
        "selfredirect": "<strong>Warnung:</strong> Du leitest auf diese Seite selbst weiter.\nDu hast vermutlich das falsche Weiterleitungsziel angegeben oder du bearbeitest die falsche Seite.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Weiterleitung dennoch erstellt.",
-       "missingcommenttext": "Dein Abschnitt enthält keinen Text.",
+       "missingcommenttext": "Bitte gib unten einen Kommentar ein.",
        "missingcommentheader": "'''Achtung:''' Du hast kein Betreff/Überschrift eingegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Bearbeitung ohne Überschrift gespeichert.",
        "summary-preview": "Vorschau der Zusammenfassungszeile:",
        "subject-preview": "Vorschau der Zusammenfassungszeile:",
        "missing-revision": "Die Version $1 der Seite namens „{{FULLPAGENAME}}“ ist nicht vorhanden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] einsehbar.",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
        "userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
-       "blocked-notice-logextract": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist zurzeit gesperrt.\nZur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:",
+       "blocked-notice-logextract": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist zurzeit gesperrt.\nZur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:",
        "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
        "usercssyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues CSS vor dem Speichern zu testen.",
        "userjsyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues JavaScript vor dem Speichern zu testen.",
        "readonlywarning": "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass deine Änderungen derzeit nicht gespeichert werden können.\nSichere den Text bitte lokal auf deinem Computer und versuche zu einem späteren Zeitpunkt, die Änderungen zu übertragen.'''\n\nGrund für die Sperre: $1",
        "protectedpagewarning": "'''Achtung: Diese Seite wurde geschützt. Nur Benutzer mit Administratorrechten können die Seite bearbeiten.'''\nZur Information folgt der aktuelle Logbucheintrag:",
        "semiprotectedpagewarning": "'''Halbsperrung:''' Die Seite wurde so geschützt, dass nur registrierte Benutzer diese ändern können.\nZur Information folgt der aktuelle Logbucheintrag:",
-       "cascadeprotectedwarning": "'''Achtung:''' Diese Seite wurde so geschützt, dass sie nur durch Benutzer mit Administratorrechten bearbeitet werden kann. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:",
+       "cascadeprotectedwarning": "<strong>Achtung:</strong> Diese Seite wurde so geschützt, dass sie nur durch Benutzer mit Administratorrechten bearbeitet werden kann. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:",
        "titleprotectedwarning": "'''Achtung: Die Seitenerstellung wurde so geschützt, dass nur Benutzer mit [[Special:ListGroupRights|speziellen Rechten]] diese Seite erstellen können.'''\nZur Information folgt der aktuelle Logbucheintrag:",
        "templatesused": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} auf dieser Seite verwendet:",
        "templatesusedpreview": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} von dieser Seitenvorschau verwendet:",
        "search-category": "(Kategorie $1)",
        "search-file-match": "(treffende Dateiinhalte)",
        "search-suggest": "Meintest du „$1“?",
+       "search-rewritten": "Es werden die Ergebnisse für $1 angezeigt. Stattdessen nach $2 suchen.",
        "search-interwiki-caption": "Schwesterprojekte",
        "search-interwiki-default": "Ergebnisse von $1:",
        "search-interwiki-more": "(weitere)",
        "rows": "Zeilen:",
        "columns": "Spalten:",
        "searchresultshead": "Suche",
-       "stub-threshold": "Linkformatierung <a href=\"#\" class=\"stub\">kleiner Seiten</a> (in Bytes):",
+       "stub-threshold": "Linkformatierung kleiner Seiten ($1):",
+       "stub-threshold-sample-link": "Beispiel",
        "stub-threshold-disabled": "Deaktiviert",
        "recentchangesdays": "Anzahl der standardmäßig einbezogenen Tage:",
        "recentchangesdays-max": "Maximal $1 {{PLURAL:$1|Tag|Tage}}",
        "prefs-help-signature": "Beiträge auf Diskussionsseiten sollten mit „<nowiki>~~~~</nowiki>“ signiert werden, was dann in die Signatur mit Zeitstempel umgewandelt wird.",
        "badsig": "Die Syntax der Signatur ist ungültig; bitte HTML überprüfen.",
        "badsiglength": "Die Signatur darf maximal $1 {{PLURAL:$1|Zeichen}} lang sein.",
-       "yourgender": "Welches Geschlecht hast du?",
-       "gender-unknown": "Beim Erwähnen deiner Person verwendet die Software geschlechtsneutrale Wörter, sofern möglich",
-       "gender-male": "Ich bin männlich",
-       "gender-female": "Ich bin weiblich",
-       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
+       "yourgender": "Form der Anrede",
+       "gender-unknown": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw.",
+       "gender-male": "„Der Benutzer“, „seine Diskussion“, „er bearbeitet“ usw. (männlich)",
+       "gender-female": "„Die Benutzerin“, „ihre Diskussion“, „sie bearbeitet“ usw. (weiblich)",
+       "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich mit dem zutreffenden grammatikalischen Geschlecht anzureden oder gegenüber anderen zu erwähnen.\nDiese Information ist öffentlich zugänglich.",
        "email": "E-Mail",
        "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|beobachtender|beobachtende}} Benutzer]",
        "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit „|“):",
-       "rc_categories_any": "Alle",
+       "rc_categories_any": "Beliebige der ausgewählten",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} nach der Änderung",
        "newsectionsummary": "Neuer Abschnitt /* $1 */",
        "upload-too-many-redirects": "Die URL beinhaltete zu viele Weiterleitungen",
        "upload-http-error": "Ein HTTP-Fehler ist aufgetreten: $1",
        "upload-copy-upload-invalid-domain": "Als Kopie hochladbare Dateien sind über diese Domain nicht verfügbar.",
+       "upload-dialog-title": "Datei hochladen",
+       "upload-dialog-error": "Es ist ein Fehler aufgetreten",
+       "upload-dialog-warning": "Es ist eine Warnung aufgetreten",
+       "upload-dialog-button-cancel": "Abbrechen",
+       "upload-dialog-button-done": "Schließen",
+       "upload-dialog-button-save": "Speichern",
+       "upload-dialog-button-upload": "Hochladen",
+       "upload-dialog-label-select-file": "Datei auswählen",
+       "upload-dialog-label-infoform-title": "Einzelheiten",
+       "upload-dialog-label-infoform-name": "Name",
+       "upload-dialog-label-infoform-description": "Beschreibung",
+       "upload-dialog-label-usage-title": "Verwendung",
+       "upload-dialog-label-usage-filename": "Dateiname",
        "backend-fail-stream": "Die Datei $1 konnte nicht übertragen werden.",
        "backend-fail-backup": "Die Datei $1 konnte nicht gesichert werden.",
        "backend-fail-notexists": "Die Datei $1 ist nicht vorhanden.",
        "booksources-text": "Dies ist eine Liste mit Links zu Internetseiten, die neue und gebrauchte Bücher verkaufen. Dort kann es auch weitere Informationen über die Bücher geben. {{SITENAME}} ist mit keinem dieser Anbieter geschäftlich verbunden.",
        "booksources-invalid-isbn": "Vermutlich ist die ISBN ungültig.\nBitte prüfe, ob sie korrekt von der Quelle übertragen wurde.",
        "specialloguserlabel": "Ausführender Benutzer:",
-       "speciallogtitlelabel": "Ziel (Titel oder Benutzer):",
+       "speciallogtitlelabel": "Ziel (Titel oder {{ns:user}}:Benutzername für einen Benutzer):",
        "log": "Logbücher",
        "all-logs-page": "Alle öffentlichen Logbücher",
        "alllogstext": "Dies ist die kombinierte Anzeige aller in {{SITENAME}} geführten Logbücher.\nDie Ausgabe kann durch die Auswahl des Logbuchtyps, des Benutzers oder des Seitentitels eingeschränkt werden (Groß-/Kleinschreibung muss beachtet werden).",
        "linksearch-pat": "Suchmuster:",
        "linksearch-ns": "Namensraum:",
        "linksearch-ok": "Suchen",
-       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“. angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)",
+       "linksearch-text": "Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter, wie beispielsweise <code>*.beispiel.de</code>, benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“, angegeben werden. <br />{{PLURAL:$2|Unterstütztes Protokoll|Unterstützte Protokolle}}: $1 (Standard ist http, falls kein Protokoll angegeben ist.)",
        "linksearch-line": "$1 ist verlinkt von $2",
        "linksearch-error": "Wildcards können nur am Anfang der URL verwendet werden.",
        "listusersfrom": "Zeige Benutzer ab:",
        "listgrouprights-namespaceprotection-namespace": "Namensraum",
        "listgrouprights-namespaceprotection-restrictedto": "Rechte, die dem Benutzer die Bearbeitung erlauben",
        "trackingcategories": "Tracking-Kategorien",
-       "trackingcategories-summary": "Diese Seite listet Tracking-Kategorien auf, die von der MediaWiki-Software automatisch eingepflegt werden. Ihre Namen können durch Änderung der entsprechenden Systemnachrichten im {{ns:8}}-Namensraum angepasst werden.",
+       "trackingcategories-summary": "Diese Seite listet Tracking-Kategorien auf, die von der MediaWiki-Software automatisch gefüllt werden. Ihre Namen können durch Änderung der entsprechenden Systemnachrichten im {{ns:8}}-Namensraum angepasst werden.",
        "trackingcategories-msg": "Tracking-Kategorie",
        "trackingcategories-name": "Name der Nachricht",
        "trackingcategories-desc": "Kategorieeinbindungskriterien",
        "noindex-category-desc": "Die Seite wird nicht von Bots indexiert, da sie das magische Wort <code><nowiki>__NOINDEX__</nowiki></code> enthält und sich in einem Namensraum befindet, wo dieses Flag erlaubt ist.",
-       "index-category-desc": "Die Seite enthält ein <code><nowiki>__INDEX__</nowiki></code> und befindet sich in einem Namensraum, in dem dieses Flag nicht erlaubt ist und wird daher von Bots ausnahmsweise indexiert.",
+       "index-category-desc": "Die Seite enthält ein <code><nowiki>__INDEX__</nowiki></code> und befindet sich in einem Namensraum, in dem dieses Flag erlaubt ist. Daher wird sie ausnahmsweise von Bots indiziert.",
        "post-expand-template-inclusion-category-desc": "Die Seitengröße ist nach dem Expandieren aller Vorlagen größer als <code>$wgMaxArticleSize</code>, so dass einige Vorlagen nicht expandiert wurden.",
        "post-expand-template-argument-category-desc": "Die Seite ist nach dem Expandieren eines Vorlagenargumentes größer als <code>$wgMaxArticleSize</code> (etwas in dreifachen Klammern, wie <code>{{{Foo}}}</code>).",
        "expensive-parserfunction-category-desc": "Die Seite verwendet zu viele aufwändige Parserfunktionen (wie <code>#ifexist</code>). Siehe das [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Benutzerhandbuch].",
        "emailuser": "E-Mail an diesen Benutzer",
        "emailuser-title-target": "E-Mail an {{GENDER:$1|diesen Benutzer|diese Benutzerin}} senden",
        "emailuser-title-notarget": "E-Mail an Benutzer",
-       "emailpage": "E-Mail an Benutzer",
        "emailpagetext": "Du kannst {{GENDER:$1|dem Benutzer|der Benutzerin}} mit dem unten stehenden Formular eine E-Mail senden.\nAls Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit {{GENDER:$1|der Benutzer|die Benutzerin}} dir direkt antworten kann.",
        "defemailsubject": "{{SITENAME}} – E-Mail von Benutzer „$1“",
        "usermaildisabled": "E-Mail-Empfang deaktiviert",
        "emailccsubject": "Kopie deiner Nachricht an $1: $2",
        "emailsent": "E-Mail verschickt",
        "emailsenttext": "Deine E-Mail wurde verschickt.",
-       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „$2“ durch die Funktion „{{int:emailpage}}“ bei {{SITENAME}} gesendet.",
+       "emailuserfooter": "Diese E-Mail wurde von „$1“ an „$2“ durch die Funktion „{{int:emailuser}}“ bei {{SITENAME}} gesendet.",
        "usermessage-summary": "Systemnachricht gespeichert.",
        "usermessage-editor": "System-Messenger",
        "usermessage-template": "MediaWiki:Benutzernachricht",
        "watchlistanontext": "Du musst dich anmelden, um deine Beobachtungsliste sehen oder Einträge auf ihr bearbeiten zu können.",
        "watchnologin": "Du bist nicht angemeldet",
        "addwatch": "Zur Beobachtungsliste hinzufügen",
-       "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\nSpätere Änderungen an dieser Seite und der zugehörigen Diskussionsseite werden dort gelistet.",
+       "addedwatchtext": "„[[:$1]]“ und die Diskussionsseite wurden zu deiner [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.",
        "addedwatchtext-short": "Die Seite „$1“ wurde zu deiner Beobachtungsliste hinzugefügt.",
        "removewatch": "Von der Beobachtungsliste entfernen",
-       "removedwatchtext": "Die Seite „[[:$1]]“ wurde von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
+       "removedwatchtext": "„[[:$1]]“ und die Diskussionsseite wurden von deiner [[Special:Watchlist|Beobachtungsliste]] entfernt.",
        "removedwatchtext-short": "Die Seite „$1“ wurde von deiner Beobachtungsliste entfernt.",
        "watch": "Beobachten",
        "watchthispage": "Seite beobachten",
        "enotif_body_intro_restored": "Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} wiederhergestellt. Siehe $3 für deren aktuelle Version.",
        "enotif_body_intro_changed": "Die {{SITENAME}}-Seite $1 wurde am $PAGEEDITDATE von {{GENDER:$2|$2}} geändert. Siehe $3 für deren aktuelle Version.",
        "enotif_lastvisited": "Alle Änderungen auf einen Blick: $1",
-       "enotif_lastdiff": "Siehe $1 nach dieser Änderung.",
+       "enotif_lastdiff": "Siehe $1 für diese Änderung.",
        "enotif_anon_editor": "Anonymer Benutzer $1",
        "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden dir so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis du die Seite wieder angemeldet besucht hast. Auf deiner Beobachtungsliste kannst du alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nDein freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuche {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen deiner Beobachtungsliste anzupassen, besuche {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm die Seite von deiner Beobachtungsliste herunterzunehmen, besuche $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: $HELPPAGE",
        "created": "erstellt",
        "changecontentmodel-success-title": "Das Inhaltsmodell wurde geändert",
        "changecontentmodel-success-text": "Der Inhaltstyp von [[:$1]] wurde geändert.",
        "changecontentmodel-cannot-convert": "Der Inhalt von [[:$1]] kann nicht zum Typ $2 konvertiert werden.",
-       "changecontentmodel-title-cantexist": "Auf $1 ist keine Seite möglich.",
        "changecontentmodel-nodirectediting": "Das Inhaltsmodell „$1“ unterstützt keine direkten Bearbeitungen",
        "log-name-contentmodel": "Inhaltsmodell-Änderungs-Logbuch",
        "log-description-contentmodel": "Ereignisse bezüglich den Inhaltsmodellen einer Seite",
        "undeletepagetext": "Die {{PLURAL:$1|folgende Seite wurde gelöscht und kann|folgenden $1 Seiten wurden gelöscht und können}} von Administratoren wiederhergestellt werden:",
        "undelete-fieldset-title": "Wiederherstellen",
        "undeleteextrahelp": "* Um die Seite mitsamt aller Versionen wiederherzustellen, wähle keine Version aus, gib eine Begründung an und klicke dann auf „{{int:undeletebtn}}“.\n* Um lediglich bestimmte Versionen der Seite wiederherzustellen, wähle die betreffenden Versionen einzeln aus, gib eine Begründung an und klicke dann auf „{{int:undeletebtn}}“.",
-       "undeleterevisions": "{{PLURAL:$1|1 Version|$1 Versionen}} archiviert",
+       "undeleterevisions": "{{PLURAL:$1|Eine Version|$1 Versionen}} gelöscht",
        "undeletehistory": "Wenn du diese Seite wiederherstellst, werden auch alle alten Versionen wiederhergestellt.\nWenn seit der Löschung eine neue Seite gleichen Namens erstellt wurde, werden die wiederhergestellten Versionen chronologisch in die Versionsgeschichte eingeordnet.",
        "undeleterevdel": "Die Wiederherstellung wird nicht durchgeführt, wenn die aktuellste Version versteckt ist oder versteckte Teile enthält.\nIn diesem Fall darf die aktuellste Version nicht markiert werden oder ihr Status muss auf den einer normalen Version geändert werden.",
        "undeletehistorynoadmin": "Diese Seite wurde gelöscht. Der Löschgrund ist in der Zusammenfassung angegeben,\ngenauso wie Details zum letzten Benutzer, der diese Seite vor der Löschung bearbeitet hat.\nDer aktuelle Text der gelöschten Seite ist nur Administratoren zugänglich.",
        "sp-contributions-logs": "Logbücher",
        "sp-contributions-talk": "Diskussion",
        "sp-contributions-userrights": "Benutzerrechte­verwaltung",
-       "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
+       "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
        "sp-contributions-blocked-notice-anon": "Diese IP-Adresse ist zurzeit gesperrt.\nZur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:",
        "sp-contributions-search": "Suche nach Benutzerbeiträgen",
        "sp-contributions-username": "IP-Adresse oder Benutzername:",
        "emaillink": "E-Mail senden",
        "autoblocker": "Automatische Sperre, da du eine gemeinsame IP-Adresse mit [[User:$1|$1]] benutzt.\nGrund der Benutzersperre: „$2“",
        "blocklogpage": "Benutzersperr-Logbuch",
-       "blocklog-showlog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt. Es folgt der Eintrag aus dem Benutzersperr-Logbuch:",
-       "blocklog-showsuppresslog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} wurde schon früher gesperrt und versteckt.\nEs folgt der Eintrag aus dem Unterdrückungs-Logbuch:",
+       "blocklog-showlog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} wurde schon früher gesperrt. Es folgt der Eintrag aus dem Benutzersperr-Logbuch:",
+       "blocklog-showsuppresslog": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} wurde schon früher gesperrt und versteckt.\nEs folgt der Eintrag aus dem Unterdrückungs-Logbuch:",
        "blocklogentry": "sperrte „[[$1]]“ für den Zeitraum: $2 $3",
        "reblock-logentry": "änderte die Sperre von „[[$1]]“ für den Zeitraum: $2 $3",
        "blocklogtext": "Dies ist das Logbuch über Sperrungen und Entsperrungen von Benutzern und IP-Adressen.\nAutomatisch gesperrte IP-Adressen werden nicht erfasst.\nSiehe die [[Special:BlockList|Liste der gesperrten IP-Adressen und Benutzernamen]] für alle aktiven Sperren.",
        "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse von der aus du Änderungen durchführst",
        "tooltip-pt-mytalk": "Deine Diskussionsseite",
        "tooltip-pt-anontalk": "Diskussion über Änderungen von dieser IP-Adresse",
-       "tooltip-pt-preferences": "Eigene Einstellungen",
-       "tooltip-pt-watchlist": "Liste der beobachteten Seiten",
+       "tooltip-pt-preferences": "Deine Einstellungen",
+       "tooltip-pt-watchlist": "Liste der von dir beobachteten Seiten",
        "tooltip-pt-mycontris": "Liste eigener Beiträge",
        "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.",
        "tooltip-pt-logout": "Abmelden",
        "tooltip-ca-nstab-main": "Seiteninhalt anzeigen",
        "tooltip-ca-nstab-user": "Benutzerseite anzeigen",
        "tooltip-ca-nstab-media": "Mediendateienseite anzeigen",
-       "tooltip-ca-nstab-special": "Dies ist eine Spezialseite. Sie kann nicht bearbeitet werden.",
+       "tooltip-ca-nstab-special": "Dies ist eine Spezialseite und kann nicht bearbeitet werden.",
        "tooltip-ca-nstab-project": "Portalseite anzeigen",
        "tooltip-ca-nstab-image": "Dateiseite anzeigen",
        "tooltip-ca-nstab-mediawiki": "MediaWiki-Systemtext anzeigen",
        "group-sysop.js": "/* Das folgende JavaScript wird nur für Administratoren geladen. */",
        "group-bureaucrat.js": "/* Das folgende JavaScript wird nur für Bürokraten geladen. */",
        "anonymous": "{{PLURAL:$1|Unangemeldeter Benutzer|Unangemeldete Benutzer}} auf {{SITENAME}}",
-       "siteuser": "{{SITENAME}}-{{GENDER:$2|Benutzer|Benutzerin|Benutzer}} $1",
+       "siteuser": "{{SITENAME}}-{{GENDER:$2|Benutzer|Benutzerin}} $1",
        "anonuser": "Anonymer {{SITENAME}}-Benutzer $1",
        "lastmodifiedatby": "Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 geändert.",
        "othercontribs": "Basierend auf der Arbeit von $1.",
        "spam_reverting": "Letzte Version ohne Links zu $1 wiederhergestellt.",
        "spam_blanking": "Alle Versionen mit einem Link zu $1 wurden bereinigt.",
        "spam_deleting": "Alle Versionen mit einem Link zu $1 wurden gelöscht.",
-       "simpleantispam-label": "Spamschutzprüfung.\nHier <strong>NICHTS</strong> eintragen!",
+       "simpleantispam-label": "Spamschutzprüfung.\nHier <strong>nichts</strong> eintragen!",
        "pageinfo-title": "Informationen zu „$1“",
        "pageinfo-not-current": "Diese Information kann leider nicht für alte Versionen zur Verfügung gestellt werden.",
        "pageinfo-header-basic": "Basisinformationen",
        "specialpages-group-spam": "Spam-Werkzeuge",
        "specialpages-group-developer": "Entwicklerwerkzeuge",
        "blankpage": "Leere Seite",
-       "intentionallyblankpage": "Diese Seite ist absichtlich ohne Inhalt. Sie wird für Benchmarks verwendet.",
+       "intentionallyblankpage": "Diese Seite enthält absichtlich keinen Inhalt.",
        "external_image_whitelist": " #Diese Zeile nicht verändern.<pre>\n#Untenstehend können Fragmente regulärer Ausdrücke (der Teil zwischen den //) eingegeben werden.\n#Diese werden mit den URLs von Bildern aus externen Quellen verglichen.\n#Ein positiver Vergleich führt zur Anzeige des Bildes, andernfalls wird das Bild nur als Link angezeigt.\n#Zeilen, die mit einem # beginnen, werden als Kommentar behandelt.\n#Es wird nicht zwischen Groß- und Kleinschreibung unterschieden.\n\n#Fragmente regulärer Ausdrücke nach dieser Zeile eintragen. Diese Zeile nicht verändern.</pre>",
        "tags": "Gültige Änderungsmarkierungen",
        "tag-filter": "[[Special:Tags|Markierungs]]-Filter:",
        "htmlform-cloner-create": "Weitere hinzufügen",
        "htmlform-cloner-delete": "Entfernen",
        "htmlform-cloner-required": "Es ist mindestens ein Wert erforderlich.",
+       "htmlform-title-badnamespace": "[[:$1]] ist nicht im Namensraum „{{ns:$2}}“.",
+       "htmlform-title-not-creatable": "„$1“ ist kein erstellbarer Seitentitel",
+       "htmlform-title-not-exists": "[[:$1]] ist nicht vorhanden.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ist nicht vorhanden.",
+       "htmlform-user-not-valid": "<strong>$1</strong> ist kein gültiger Benutzername.",
        "sqlite-has-fts": "Version $1 mit Unterstützung für die Volltextsuche",
        "sqlite-no-fts": "Version $1 ohne Unterstützung für die Volltextsuche",
        "logentry-delete-delete": "$1 {{GENDER:$2|löschte}} Seite $3",
        "logentry-newusers-create2": "Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}}",
        "logentry-newusers-byemail": "Benutzerkonto $3 wurde von $1 {{GENDER:$2|erstellt}} und das Passwort wurde per E-Mail zugesandt",
        "logentry-newusers-autocreate": "Benutzerkonto $1 wurde automatisch {{GENDER:$2|erstellt}}",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|verschob}} die Schutzeinstellungen von $4 nach $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3 von $4 zu $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3",
        "logentry-rights-autopromote": "$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}",
        "special-characters-title-endash": "Halbgeviertstrich",
        "special-characters-title-emdash": "Geviertstrich",
        "special-characters-title-minus": "Minus",
+       "mw-widgets-dateinput-no-date": "Kein Datum ausgewählt",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Seite ist noch nicht vorhanden",
        "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1"
 }
index fc0c9ec..445e27c 100644 (file)
        "passwordreset": "Parola reset ke",
        "passwordreset-text-one": "Na form de parola reset kerdış temamiye",
        "passwordreset-text-many": "{{PLURAL:$1|Qande parola yana e-posta reset kerdışi cayanra taynın pırkeri.}}",
-       "passwordreset-legend": "Parola reset ke",
        "passwordreset-disabled": "Parola reset kerdış ena viki sera qefılneyayo.",
        "passwordreset-emaildisabled": "Na wikid hısusiyeté e-posta dewera vıcyayé",
        "passwordreset-username": "Nameyê karberi:",
        "resettokens": "Nışanan reset ke",
        "resettokens-text": "Şıma tiya de hesabê şıma ra elaqedar tayê kılitê icazetê cıresayışê melumati şenê sıfır kerê.\n\nŞıma be ğeletiye ra ke nê kerdê vıla ya zi hesabê şıma de xırabiye ke esta, naye bıkerê.",
        "resettokens-no-tokens": "Nışanê reseti çıniyê",
-       "resettokens-legend": "Nışanan reset ke",
        "resettokens-tokens": "Nışani:",
        "resettokens-token-label": "$1 (weziyeto nıkaên: $2)",
        "resettokens-watchlist-token": "Web Feed rê nışan (Atom/RSS)ê [[Special:Watchlist|vêreno perranê lista şımawa seyrkerdışi]]",
        "randomincategory": "Ğoseri pera kategoriya",
        "randomincategory-invalidcategory": "\"$1\" yew nameyê kategoriya vêrdiye niyo.",
        "randomincategory-nopages": "Kategori da [[:Category:$1|$1]] de qet  per çıniya.",
+       "randomincategory-submit": "Şo",
        "randomredirect": "Serçarnayışo rastameye",
        "randomredirect-nopages": "Cayê nameyê \"$1\" de serşıkıtışi çıniyê.",
        "statistics": "İstatistiki",
        "nmembers": "$1 {{PLURAL:$1|eza|ezayan}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$1|eza|ezayan}}",
        "nrevisions": "$1 {{PLURAL:$1|vurnayış|vurnayışi}}",
-       "nviews": "$1 {{PLURAL:$1|vênayış|vênayışi}}",
        "nimagelinks": "$1 {{PLURAL:$1|pele de|pelan de}} gureyeno",
        "ntransclusions": "$1 {{PLURAL:$1|pele de|pelan de}} gureyeno",
        "specialpage-empty": "Seba na rapore netice çıniyo.",
        "linksearch-pat": "bıgêr motif:",
        "linksearch-ns": "Heruna namey:",
        "linksearch-ok": "Cı geyre",
-       "linksearch-text": "Jokeri ê zey \"*.wikipedia.org\"i benê ke bıgureniyê.\nTewr senık yew sewiya serêna cayê tesiri lazıma, mesela \"*.org\".<br />\nQeydeyê {{PLURAL:$2|protoqol|protoqoli}}:destegbiyayey: <code>$1</code> (qet yew qeydeyo hesabiyaye http:// ke name nêbiyo).",
+       "linksearch-text": "Jokeri ê zey \"*.wikipedia.org\"i benê ke bıgureniyê.\nTewr senık yew sewiya serêna cayê tesiri lazıma, mesela \"*.org\".<br />\nQeydeyê {{PLURAL:$2|protoqol|protoqoli}}:destegbiyayey: $1 (qet yew qeydeyo hesabiyaye http:// ke name nêbiyo).",
        "linksearch-line": "$1, $2 ra link biya",
        "linksearch-error": "jokeri têna nameyê makina ya serekini de aseni/eseni.",
        "listusersfrom": "karber ê ke pey ıney detpêkeni ramocın:",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tira kılme",
        "special-characters-title-emdash": "tira derge",
-       "special-characters-title-minus": "işaretê kemiye"
+       "special-characters-title-minus": "işaretê kemiye",
+       "mw-widgets-dateinput-placeholder-day": "SSSS-AA-RR",
+       "mw-widgets-dateinput-placeholder-month": "SSSS-AA"
 }
index feab412..b7b1cb8 100644 (file)
        "passwordreset": "Gronidło slědk stajiś",
        "passwordreset-text-one": "Wupołni toś ten formular, aby swójo gronidło anulěrował.",
        "passwordreset-text-many": "{{PLURAL:$1|Wupołni jadne z pólow, aby nachylne gronidło pśez e-mail dostał.}}",
-       "passwordreset-legend": "Gronidło slědk stajiś",
        "passwordreset-disabled": "Slědkstajenja gronidłow su se znjemóžnili na toś tom wikiju.",
        "passwordreset-emaildisabled": "E-mailowe funkcije su se na toś tom wikiju znjemóžnili.",
        "passwordreset-username": "Wužywarske mě:",
        "resettokens": "Tokeny slědk stajiś",
        "resettokens-text": "Móžoš tokeny slědk stajiś, kótarež dowóluju pśistup na wěste priwatne daty, kótarež su z twójim kontom zwězane.\n\nTy by dejał to cyniś, jolic sy je zmylnje z někim źělił abo jolic twóje konto jo se nadpadało.",
        "resettokens-no-tokens": "Tokeny za slědkstajenje njejsu.",
-       "resettokens-legend": "Tokeny slědk stajiś",
        "resettokens-tokens": "Tokeny:",
        "resettokens-token-label": "$1 (aktualna gódnota: $2)",
        "resettokens-watchlist-token": "Token za webkanal (Atom/RSS) [[Special:Watchlist|změnow na bokach w twójich woglědowankach]]",
        "randomincategory": "Pśipadny bok w kategoriji",
        "randomincategory-invalidcategory": "\"$1\" njejo płaśiwe kategorijowe mě.",
        "randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žedne boki njejsu.",
+       "randomincategory-submit": "W pórěźe",
        "randomredirect": "Pśipadne dalejpósrědnjenje",
        "randomredirect-nopages": "W mjenjowem rumje \"$1\" njejsu dalejpósrědnjenja.",
        "statistics": "Statistika",
        "nmembers": "$1 {{PLURAL:$1|zapis|zapisa|zapise}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|cłon|cłonka|cłonki|cłonkow}}",
        "nrevisions": "$1 {{PLURAL:$1|wobźěłanje|wobźěłani|wobźěłanja}}",
-       "nviews": "$1 {{PLURAL:$1|wótpšašanje|wótpšašani|wótpšašanja}}",
        "nimagelinks": "Wužywa se na $1 {{PLURAL:$1|boku|bokoma|bokach|bokach}}",
        "ntransclusions": "wužywa se na $1 {{PLURAL:$1|boku|bokoma|bokach|bokach}}",
        "specialpage-empty": "Toś ten bok njewopśimjejo tuchylu žedne zapise.",
        "linksearch-pat": "Pytański muster:",
        "linksearch-ns": "Mjenjowy rum:",
        "linksearch-ok": "Pytaś",
-       "linksearch-text": "Jo móžno zastupne znamuška kaž \"*.wikipedia.org\" wužywaś. \nJo nanejmjenjej głowna domena trěbna, na pśikład \"*.org\"<br />\n{{PLURAL:$2|Pódpěrany protokol|Pódpěranej protokola|Pódpěrane protokole}}: <code>$1</code> (standard jo http://, jolic žeden protokol njejo pódany).",
+       "linksearch-text": "Jo móžno zastupne znamuška kaž \"*.wikipedia.org\" wužywaś. \nJo nanejmjenjej głowna domena trěbna, na pśikład \"*.org\"<br />\n{{PLURAL:$2|Pódpěrany protokol|Pódpěranej protokola|Pódpěrane protokole}}: $1 (standard jo http://, jolic žeden protokol njejo pódany).",
        "linksearch-line": "$1 wótkazany z $2",
        "linksearch-error": "Zasupne znamješko daju se jano na zachopjeńku URL wužywaś.",
        "listusersfrom": "Pokaž wužywarjow wót:",
index e9fca76..df6515d 100644 (file)
        "nstab-help": "सहायता पानो",
        "nstab-category": "श्रेणी",
        "nosuchaction": "यसो काम हैन",
-       "nosuchactiontext": "URL à¤²à¥\87 à¤\96à¥\81लाà¤\8fà¤\95à¥\8b à¤\95ाम à¤®à¤¾à¤¨à¥\8dय à¤\9bà¥\88न à¥¤\nतमà¥\81लà¥\87 URL à¤\97लत à¤\9fाà¤\87पà¤\97रà¥\87à¤\95ा à¤¹à¥\8c , à¤µà¤¾ à¤\97लत à¤²à¤¿à¤\82à¤\95à¤\95 à¤ªà¤\9bाडà¥\80 à¤²à¤¾à¤\97à¥\87à¤\95ा à¤¹à¥\81नसà¤\95à¥\8dदà¥\87हà¥\8c à¥¤\nयà¥\88{{SITENAME}}लà¥\87 à¤¸à¤«à¥\8dà¤\9fवà¥\87यरमà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\97लà¥\8dति à¤¦à¥\87à¤\96ायाà¤\95à¥\8b à¤ªà¤¨à¤¿ हुनसक्छ ।",
+       "nosuchactiontext": "URL à¤²à¥\87 à¤\96à¥\81लाà¤\8fà¤\95à¥\8b à¤\95ाम à¤®à¤¾à¤¨à¥\8dय à¤\9bà¥\88न à¥¤\nतमà¥\80लà¥\87 URL à¤\97लत à¤\9fाà¤\87पà¤\97रà¥\87à¤\95ा à¤¹à¥\8c , à¤µà¤¾ à¤\97लत à¤²à¤¿à¤\82à¤\95à¤\95 à¤ªà¤\9bाडà¥\80 à¤²à¤¾à¤\97à¥\87à¤\95ा à¤¹à¥\81नसà¤\95à¥\8dदà¥\87हà¥\8c à¥¤\nयà¥\8b {{SITENAME}}लà¥\87 à¤¸à¤«à¥\8dà¤\9fवà¥\87यरमà¥\80 à¤­à¤¯à¤¾à¤\95à¥\8b à¤\97लà¥\8dति à¤¦à¥\87à¤\96ायाà¤\95à¥\8b à¤²à¥\88 हुनसक्छ ।",
        "nosuchspecialpage": "तसो विशेष पानो छैन",
        "nospecialpagetext": "<strong>तमीले अनुरोध गर्याको विशेष पानो अमान्य छ ।</strong>\n\nमान्य पानाहरूको सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
        "error": "त्रुटी",
        "viewsource": "स्रोत हेर",
        "viewsource-title": " $1 को स्रोत हेर",
        "actionthrottled": "कार्य रोकिईयो",
+       "actionthrottledtext": "स्पामको रोकथामको लागि , तमीलाई यो कार्य नापै समयमी मैथै पटक गद्दाबठे सिमित गरियाको छ, र तमीले आफ्नो सिमा पार गरिसक्याछौ ।\nकृपया केही मिनेट पछि पुन: प्रयास गर  ।",
        "viewyourtext": "यै पानामी रह्याका '''तमरा सम्पादनहरू''' हेद्द या प्रतिलिपी गद्द सक्द्या हौ :",
+       "editinginterface": "<strong>चेतावनी:</strong> तमी यै पानालाई सम्पादन गद्द लाग्याछौ, जनले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गरन्छ।\nयै पानामी गरियाको परिवर्तनले यै विकिमी अरु प्रयोगकर्तानको इन्टरफेसको प्रदर्शनमी प्रभाव पडन्छ ।",
        "namespaceprotected": "तमलाई '''$1'''  नेमस्पेसमी रह्याका पानाहरू सम्पादन गद्या अनुमति छैन ।",
+       "customcssprotected": "तमलाई यो  पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "customjsprotected": "तमलाई यो जाभास्कृप्ट पानो सम्पादन गद्दे अनुमति छैन, किनकी यैमी कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन अद्दु नाइँ सकिनो।",
+       "titleprotected": "[[User:$1|$1]]द्वारा ये शीर्षक निर्माणहुनबठे जोगाइया छ।\nकारण \"<em>$2</em>\" हो ।",
+       "filereadonlyerror": "फाइल \"$1\" लाई परिवर्तन अद्दु नाइँ सकिनो क्याईकि फाइल भण्डार  \"$2\" केवल पढ्ने स्थिति (read-only mode)मी छ।\n\nयेलाई सुरक्षित गर्ने प्रवन्धकले  यो कारण दियाकाछन् : ''$3''।",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
        "virus-scanfailed": "जँचाई असफल(कोड $1)",
        "virus-unknownscanner": "थानभया एन्टीभाइरस:",
        "logouttext": "<strong>तमी अहिल बाहिर निस्क्याका  छौ।</strong>\n\nयाद राख्या तमीले ब्राउजरको क्याच खालि नगर्यासम्म कुनै पानाहरूमी तमी अझैं प्रवेश गरिरख्याको धेकाउन सक्छ।",
        "welcomeuser": "$1स्वागत छ!",
+       "welcomecreation-msg": "तमरो खाता तयार भयो । \nतमले चाहेको खण्डमी {{SITENAME}} [[Special:Preferences|रोजाइहरू]] परिवर्तन गद्द सक्द्याहौ ।",
        "yourname": "प्रयोगकर्ता नाम:",
        "userlogin-yourname": "प्रयोगकर्ता नाम",
        "userlogin-yourname-ph": "तमरो प्रयोगकर्तानाम लेख",
        "userlogin-resetlink": "प्रवेश सम्बन्धी विवरणहरू बिसरया भयो?",
        "userlogin-resetpassword-link": "पासवर्ड भुलिगया?",
        "userlogin-helplink2": "प्रवेश गद्दलाई सहयोग",
+       "userlogin-loggedin": "तमी {{GENDER:$1|$1}}को रूपमी प्रवेश (लग इन) भइ सक्यौ ।\nअर्को प्रयोगकर्ताको रूपमी प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर ।",
        "userlogin-createanother": "दोसरो खाता खोल",
        "createacct-emailrequired": "इमेल ठेगाना",
        "createacct-emailoptional": "इमेल ठेगाना (ऐच्छिक)",
        "createacct-benefit-body2": "{{PLURAL:$1|पाना|पानाहरू}}",
        "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदानकर्ता|योगदानकर्ताहरू}}",
        "badretype": "तमले दिया पासवर्ड मिल्लो नाइँ।",
+       "userexists": "तमीले प्रविष्ट गर्याको प्रयोगकर्ता नाम पैल्ली बठे प्रयोगमी छ ।\nकृपया फरक नाम छान ।",
        "loginerror": "प्रवेश गल्ती",
        "createacct-error": "खाता बनाउँन्ज्या गल्ती",
        "createaccounterror": "खाता बनाउन सकिएन: $1",
+       "noname": "तमीले सही प्रयोगकर्ता नाम दिएनौ।",
        "loginsuccesstitle": "प्रवेश सफल",
        "loginsuccess": "'''तमले {{SITENAME}}मी  \"$1\" को रुपमी प्रवेश गरया छौ।'''",
        "nouserspecified": "प्रयोगकर्ता नाम दिनु अनिवार्य छ।",
        "mailmypassword": "पासवर्ड पूर्वनिर्धारित गर",
        "passwordremindertitle": "{{SITENAME}}का लागि नयाँ अस्थायी पासवर्ड",
+       "passwordremindertext": "कसैले (सायद तमी, IP ठेगाना $1 बाट), {{SITENAME}}($4) को लागि नौलो पासवर्ड अनुरोध गर्या छ । प्रयोगकर्ता \"$2\" को लागि नौलो अस्थायी पासवर्ड \"$3\"तयार पारिया छ । यदि यो तमरो इच्छामी भयाको भया अहिले तमीले लगइन गरीबर नौलो पासवर्ड छान्नु पड्ड्या हुन्छ ।\nतमरो अस्थायी पासवर्ड  {{PLURAL:$5|एक दिन|$5 दिनहरू पछि}} अमान्य हुन्याछ ।\n\nयदि कोही अरुले नै अनुरोध गर्याको हो भण्या , या तमीले आफ्नो पासवर्ड सम्झ्यौ भण्या, अथवा\nत्यैलाई परिवर्तन गर्न चाहन्नौ भण्या, तमीले यो सन्देसको वेवास्ता गद्दसक्द्याहौ र पुरानै पासवर्ड प्रयोग गरिरहन सक्द्याहौ ।",
+       "blocked-mailpassword": "तमरो IP ठेगानालाई सम्पादन गद्द बठे रोक लगायाको छ, र त्यसैले दुरुपयोग रोक्दाको लागि प्रवेसशब्द पुनर्लाभ प्रक्रिया प्रयोग गद्या अनुमति छैन ।",
        "mailerror": " चिठी :$1 पठाउँदा गल्ती भयो",
+       "noemailprefs": "निम्न सुविधाहरू राम्डरी काम गद्दको लागि तमरो रोजाईमी आफ्नो ई-मेल ठेगाना खुलाओ ।",
        "emailconfirmlink": "तमरो ई-मेल ठेगाना पक्का गर",
+       "cannotchangeemail": "यै विकिमी तमरो खातासँग सम्बन्धित इमेल ठेगाना परिवर्तन गद्द नाइ सकिंदो ।",
        "emaildisabled": "ये साइटले इमेलहरू पठाउन सक्दैन।",
        "accountcreated": "खाता खोलिईयो",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]])$1 प्रयोगकर्ताको लागि खाता खोलिइया छ ।",
        "createaccount-title": "{{SITENAME}}कोलागि खाता खोल्ने काम",
+       "createaccount-text": "कसैले तमरो इमेल ठेगानालाई {{SITENAME}} ($4) मी \"$2\" नामको खाता बनायाको छ, जैको पासवर्ड \"$3\" छ ।\nअब तमी तुरुन्त लगइन गरिबर आफ्नो पासवर्डशब्द परिवर्तन गर ।\nयदी यो खाता गल्तिले खोलियाको रहेछ भण्या तम यै सन्देशलाई बेवास्ता गद्द सक्द्याहौ ।",
+       "login-migrated-generic": "तमरो खाता स्थानान्तरण भयाको छ, र तमरो प्रयोगकर्ता नाम यै विकिमी नाइथि ।",
        "loginlanguagelabel": "भाषा: $1",
+       "createacct-another-realname-tip": "वास्तविक नाम ऐच्छिक हो ।\nतमले यो खुलायौ भण्या तमरो काममी प्रयोगकर्ता श्रेय दिनका निउती यैको प्रयोग गरिन्या छ ।",
        "pt-login": "प्रवेश (लग ईन)",
        "pt-login-button": "प्रवेश",
        "pt-createaccount": "नयाँ खाता खोल",
        "resetpass-no-info": "ये पाना सिधाई हेद्दाई तमले प्रवेश गद्दु पडून्छ ।",
        "resetpass-submit-loggedin": "पासवर्ड परिवर्तन गर",
        "resetpass-submit-cancel": "रद्द",
+       "resetpass-temp-emailed": "तम अस्थाई इमेल कोडले लगइन गर्याछौ ।\nप्रवेश सफल पाड्डका लागि, तमीले यहाँ एक नौलो पासवर्ड राख्नु पड्डेछ:",
        "resetpass-temp-password": "अस्थाइ पासवर्ड",
        "resetpass-abort-generic": "एक्सटेन्सनले पासवर्ड परिवर्तनलाई बन्द गराईया छ ।",
+       "resetpass-expired": "तमरो पासवर्ड पूरानो भयाकोछ । कृपया लग इन गद्दाकिलाइ नौलो पासवर्ड राख ।",
        "passwordreset": "पासवर्ड पूर्वनिर्धारित गर",
        "passwordreset-username": "प्रयोगकर्ता-नाम:",
        "passwordreset-domain": "डोमेन",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: $1\nअस्थाई पासवर्ड: $2",
        "passwordreset-emailsent": "पासवर्ड परिवर्तनका लागि इमेल पठाइया छ।",
        "changeemail": "इमेल ठेगाना बदेल",
+       "changeemail-text": "आफ्नो इमेल ठेगाना परिवर्तन गद्द यो फारम भर । यैलाई पुष्टि गद्द तमीले आफ्नो पासवर्ड हाल्नु पडन्छ।",
        "changeemail-oldemail": "अईलको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "changeemail-none": "(के लै नाइँ)",
        "showdiff": "परिवर्तन धेकाउन्या",
        "blankarticle": "<strong>चेतावनी:</strong> तम एक खालि पानाको निर्माण गद्द लाग्याछौ ।\nयदि तमले \"{{int:savearticle}}\" लाई पुनः थिच्यौ भण्या पानो बिना कुनै सामग्री नै निर्मित गरिन्याछ ।",
        "anoneditwarning": "<strong>चेतावनी:</strong> तमले प्रवेश अरेको नाइथिन । तमरो आइपि ठेगाना पाना सम्पादन इतिहासमि दर्ता गरिन्या छ र यो सब्बैले हेद्द सक्कान । यदि तमलाईँ <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउन्या] गर्याभण्या तमबठे गरियाको सम्पादन तमरो प्रयोगकर्तानाममि जोडिन्याछ ।",
+       "missingsummary": "'''यादगर्या :''' तमीले सम्पादन सारांश दियाका छैनौ ।\nयदि तमीले \"{{int:savearticle}}\"  थिच्यौ भण्या , सारांश बिना नै सङ्ग्रहित गरिन्या छ ।",
        "selfredirect": "<strong>चेतावनी:</strong> तम यै पानालाई आफुमी पुनः निर्देशित गद्द लाग्याछौ ।\nहुनसक्छ तम अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गद्द लाग्याछौ, वा गलत पानाको सम्पादन गद्द लाग्याछौ ।\nतम पुनः एकपल्ट \"{{int:savearticle}}\" क्लिक गद्दाछौ, पुनः निर्देशित तसै लै बनाइन्याछ।",
+       "missingcommentheader": "'''याद गर :''' तमीले टिप्पणीमी विषय /शीर्ष पंक्ति  दियाका छैनौ ।\nतमीले फेरि \"{{int:savearticle}}\"  थिच्यौ भण्या , तमरो सम्पादन यसै रुपमी संग्रहित हुन्याछ ।",
        "summary-preview": "सारांश पूर्वालोकन:",
        "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
+       "previewerrortext": "तमरो परिवर्तनको पूर्वावलोकन बनाउन खोज्दा समस्या आयाको छ ।",
        "blockedtitle": "प्रयोककर्तालाई रोक लगाइया छ",
-       "blockedtext": "'''तमरो प्रयोगकर्ता नाम या IP ठेगानालाई रोक लगाइएको छ ।'''\n\nरोक लगाउने  $1.\nरोक लगाउनाको कारण ''$2''.\n\n* रोक सुरू हुने : $8\n* रोक सकिने: $6\n* रोकबाट लक्षित: $7\n\nतमले  $1 वा और कोइ  [[{{MediaWiki:Grouppage-sysop}}|administrator]] सँग रोकको बारेमी छलफल गर्न सम्पर्क गर्न सकुन्छौ ।\nतमले  'प्रयोगकर्तालाई इ-मेल गर्ने ' सुविधा मान्य इमेल ठेगाना [[Special:Preferences|account preferences]] मी नखुलाए सम्म प्रयोगगर्न पाउनुहुन्या छैन र येको प्रयोग गर्नबठे रोक लगाइया छैन ।\nतमरो IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तमरा प्रश्नमी सबै जानकारी खुलाया ।",
+       "blockedtext": "'''तमरो प्रयोगकर्ता नाम या IP ठेगानालाई रोक लगाइएको छ ।'''\n\nरोक लगाउने  $1.\nरोक लगाउनाको कारण ''$2''.\n\n* रोक सुरू हुने : $8\n* रोक सकिने: $6\n* रोकबाट लक्षित: $7\n\nतमले  $1 वा और कोइ  [[{{MediaWiki:Grouppage-sysop}}|प्रवन्धक]] सँग रोकको बारेमी छलफल गर्न सम्पर्क गद्द सकुन्छौ ।\nतमले  'प्रयोगकर्तालाई इ-मेल गर्ने ' सुविधा मान्य इमेल ठेगाना [[Special:Preferences|रोजाइहरू]] मी नखुलाए सम्म प्रयोगगर्न पाउनुहुन्या छैन र यैको प्रयोग गर्नबठे रोक लगाइया छैन ।\nतमरो IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तमरा प्रश्नमी सबै जानकारी खुलाया ।",
+       "autoblockedtext": "तमरो IP ठेगानामी रोक लगाइयाकोछ किन भण्या यो अर्को प्रयोगकर्ताले प्रयोग गर्याको थ्यो, जैलाई $1ले रोक लगायाका थ्या । \nरोक लगाउनाको कारण:\n:''$2''  \n\n* रोकावट सुरु: $8\n* रोकावट सकिन्या: $6\n* रोकावटको प्रयोजन: $7\n\nतम $1 सित सम्पर्क गर्न सकन्छौ अथवा कुनै [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]]सँग रोकबारे चर्चा गर्न सकन्छौ ।\n\nध्यान दिया कि तमले यै प्रयोगकर्ताकी लेखा ई-मेलको प्रयोग तबसम्म गद्द नाइसक्दा जबसम्म तमरो [[Special:Preferences|रोजाई]] दर्ता गद्दाइनौ वा यो ई-मेलको प्रयोगमी रोक लगाइयाको हुँदैन । \n\nतमरो वर्तमान IP ठेगाना हो- $3, अनि रोक लगाइयाको ID हो- #$5.\nकृपया कुनै बेला सोधनी गद्दु पड्या उपर्युक्त विवरण दर्शाया ।",
        "blockednoreason": "कारण दिइईया नाइँथिन",
        "whitelistedittext": "पाना सम्पादन गर्न तमले $1 गद्दु पडन्छ।",
        "nosuchsectiontext": "तमले तसो खण्डको सम्पादन गद्या प्रयास गर्यौ जो अस्तित्वमी छैन।\nयैको नाम बदलियाको अथवा मेटाइयाको हुनुपडन्छ जब तमी यै पानालाई हेद्द लाग्याका छियौ ।",
        "loginreqtitle": "प्रवेशगर्नु जरुरी छ।",
        "loginreqlink": "प्रवेश (लग ईन)",
-       "loginreqpagetext": "à¤\85रà¥\81 à¤ªà¥\83षà¥\8dठहà¥\87रà¥\8dन तमले $1 गद्दु पडन्छ ।",
+       "loginreqpagetext": "à¤\85रà¥\81 à¤ªà¤¾à¤¨à¤¾ à¤¹à¥\87दà¥\8dद तमले $1 गद्दु पडन्छ ।",
        "accmailtitle": "पासवर्ड पठाइयो",
        "newarticle": "(नयाँ)",
-       "newarticletext": "तमलà¥\87 à¤\90लसमà¥\8dम à¤¨à¤­à¤¯à¤¾à¤\95ा à¤ªà¤¾à¤¨à¤¾à¤\95à¥\8b à¤²à¤¿à¤\82à¤\99à¥\8dà¤\95 à¤ªà¤¹à¤¿à¤²à¥\8dयाà¤\89नà¥\81 à¤­à¤¯à¤¾à¤\95à¥\8b à¤\9b।\nयà¥\8b à¤ªà¤¾à¤¨à¥\8b à¤¬à¤¨à¥\8cनाà¤\96à¥\80 à¤¤à¤²à¥\8dतिरà¤\95à¥\8b à¤\95à¥\8bषà¥\8dठमा à¤\9fाà¤\87प à¤\97रिदिय à¥¤(à¤\94र à¤\9cाणà¥\8dणाà¤\96à¥\80लà¥\87à¤\96ा [$1 help page] à¤¹à¥\87रिदिय )।\nताखाइ सुधिसार आइपुग्या हौ भण्या, ब्राउजरको  '''back''' बटन थिचिहाल ।",
+       "newarticletext": "तमलà¥\87 à¤\85हिलसमà¥\8dम à¤¨à¤­à¤¯à¤¾à¤\95ा à¤ªà¤¾à¤¨à¤¾à¤\95à¥\8b à¤²à¤¿à¤\82à¤\99à¥\8dà¤\95 à¤ªà¤¹à¤¿à¤²à¥\8dयायाà¤\95ा à¤\9bà¥\8c à¥¤\nयà¥\8b à¤ªà¤¾à¤¨à¥\8b à¤¬à¤¨à¥\8cनाà¤\96à¥\80 à¤¤à¤²à¥\8dतिरà¤\95à¥\8b à¤\95à¥\8bषà¥\8dठमà¥\80 à¤\9fाà¤\87प à¤\97रि à¥¤ (à¤\94र à¤\9cाणà¥\8dणाà¤\96à¥\80लà¥\87à¤\96ा [$1 help page] à¤¹à¥\87र )।\nताखाइ सुधिसार आइपुग्या हौ भण्या, ब्राउजरको  '''back''' बटन थिचिहाल ।",
        "anontalkpagetext": "----''यो कुरडी पानो अज्ञात प्रयोगकर्ताको हो जनले अहिलसम्म खाता बनायाकै छैन, अथवा जनले यै पानाको उपयोग गर्दैन।\nयस कारण हामीले उनलाई उनरो आइ पी (IP) ठेगानाले चिन्न सकन्छौ। \nयस्तो आइ पी (IP) ठेगाना धेरै प्रयोगकर्तानको साझा हुनसकन्छ ।\nयदि तमी अज्ञात प्रयोगकर्ता हौ र तमलाई अचाहिँदो टिप्पणी भयाको अनुभव गद्दा छौ भण्या भविष्यमी अन्य अज्ञात प्रयोगकर्तासँगको भ्रमबाट बाँच्न कृपया [[Special:UserLogin/signup|खाता खोल]] अथवा [[Special:UserLogin|प्रवेश गर]] ''",
        "noarticletext": "यै लेखमी अहिल क्यै पन पाठ नाइथी  ।\nतमले और पृष्ठमी\n[[Special:Search/{{PAGENAME}}|यस पृष्ठको शीर्षककी लेखा खोज]] गद्द सकन्छौ ।\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} पाना सम्बन्धित ढड्डामी खोज],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  यै पानालाई सम्पादन गद्या]</span>.",
        "noarticletext-nopermission": "यै लेखमी अहिल केइ पन पाठ नाइथी  ।\nतमले और पानामी\n[[Special:Search/{{PAGENAME}}|यै पानाको शीर्षककी लेखा खोज]] गद्द सकन्छौ ।\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} पाना सम्बन्धित ढड्डामी खोज्न],\nवा [{{fullurl:{{FULLPAGENAME}}|action=edit}}  यै पानालाई सम्पादन गद्द] सकन्छौ</span>.",
        "currentrevisionlink": "अहिलको पुनरावलोकन",
        "cur": "वर्तमान पाना लिङ्क इतिहास",
        "next": "दोसरो",
-       "last": "पल्लिको",
+       "last": "पà¥\88लà¥\8dलिà¤\95à¥\8b",
        "page_first": "पैल्लो",
        "page_last": "छाड्डीबारको",
        "histlegend": "अन्तर चयन:संशोधनहरूको तुलनाको लागि रेडियो बाकसमी क्लिक गरिबर इण्टर गर अथवा तल दियाको बटनमी थिच <br />\nलिजेंड: (चालू): '''({{int:cur}})''' = अवतरणको बीचमी अन्तर, '''({{int:last}})''' = पैल्लीका अवतरणको बीचमी अन्तर, '''{{int:minoreditletter}}''' = नानो परिवर्तन।",
        "revdel-restore": "दृष्टि परिवर्तन गर्न्या",
        "pagehist": "पाना इतिहास",
        "deletedhist": "मेटाईया इतिहास",
-       "revdelete-concurrent-change": " $2, $1 मिति गरियाको वस्तु परिवर्तन गद्द सकिएन: यसको स्थितीले तमीले परिवर्तन गर्नलाग्दे बेला कोहीअरुले नै परिवर्तन गर्याजसो धेकाउँछ\nकृपया लगहरू हेर्न सकन्छौ ।",
+       "revdelete-concurrent-change": " $2, $1 मिति गरियाको वस्तु परिवर्तन गद्द सकिएन: यैको स्थितीले तमीले परिवर्तन गर्नलाग्दे बेला कोहीअरुले नै परिवर्तन गर्याजसो धेकाउँछ\nकृपया लगहरू हेर्न सकन्छौ ।",
+       "revdelete-only-restricted": "$2, $1 मिति भयाको वस्तु लुकाउँदा त्रुटी भया छ:तमीले वस्तुहरूलाई प्रवन्धकहरूको दृष्टीबठे दमन गद्द सक्दाइनौ अझ कुनै पनि अरु दृष्टी विकल्पहरू नछानीकन।",
        "revdelete-otherreason": "और/थप कारण:",
        "revdelete-reasonotherlist": "और कारण",
        "revdelete-edit-reasonlist": "मेट्ने कार्यहरु सम्पादन गर्ने",
        "search-section": "(खण्ड $1)",
        "search-category": "(श्रेणी $1)",
        "search-file-match": "(भेटिईया फाइल सामाग्री)",
-       "search-suggest": "à¤\95à¥\8dया à¤¤à¤®à¤°à¥\8b à¤\96à¥\8bà¤\9cाà¤\88 : $1 à¤¹à¥\8b?",
+       "search-suggest": "à¤\95ाहà¥\80à¤\82 à¤¤à¤®à¤²à¥\87 à¤\96à¥\8bà¤\9cà¥\8dयाà¤\95à¥\8b : $1 à¤¤ à¤¹à¥\8bà¤\87न ?",
        "search-interwiki-caption": "बैना आयोजना",
        "search-interwiki-default": "$1बठेका नतिजाहरू:",
        "search-interwiki-more": "(आजी)",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कोइ लै होइनन",
+       "powersearch-remember": "चयन गर्याकोलाई भविष्यमी गरिन्या खोजहरूमी सम्झन्या",
        "search-external": "भाइरका खोज",
+       "searchdisabled": "{{SITENAME}} खोज निस्क्रिय पारियाको छ ।\nअहिल तमी गूगलद्वारा खोज्न सकन्छौ ।\nयाद गर्या उनीहरूको {{SITENAME}}को सूची सामग्री पुरानो भयाको हुनसकन्छ ।",
        "preferences": "मेरी रोजाई",
        "mypreferences": "मेरी रोजाई",
        "prefs-edits": "सम्पादन संख्या:",
        "timezoneregion-australia": "अष्ट्रेलिया",
        "timezoneregion-indian": "हिन्द महासागर",
        "prefs-files": "फाइलहरू",
+       "prefs-help-signature": "कुरडी पानाका टिप्पणीहरू \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपडन्छ ,त्यो पछि तमरो दस्तखत र समयरेखामी रुपान्तरित हुनेछ ।",
+       "badsiglength": "तमरो दस्तखत मैथै लामो छ।\nयो $1 {{PLURAL:$1|अक्षर|अक्षरहरू}} भन्दा लामो हुनु हुँदैन ।",
+       "prefs-help-realname": "वास्तविक नाम ऐच्छिक हो ।\nतमीले खुलायौ भण्या तमरो कामको श्रेय दिनको लेखा यैको प्रयोग गरिन्या छ ।",
+       "prefs-help-prefershttps": "यो रोजाई तमरो अर्को  लग इन बठे लागु हुन्याछ ।",
+       "userrights-unchangeable-col": "तमीले परिवर्तन गद्द नसक्ने समूहहरू",
+       "userrights-conflict": "प्रयोगकर्ताको अधिकार परिवर्तनमी मतभेद भयो ! कृपया तमरो परिवर्तन पुनरावलोकन तथा पुष्टि गर ।",
+       "userrights-removed-self": "तमीले सफलतापूर्वक आफ्नो अधिकारहरूलाई मेटायौ । त्यै कारण तमी अब यो पानो हेद्द नाइसक्दा ।",
        "group-user": "प्रयोगकर्ताहरू",
        "group-autoconfirmed": "स्वत स्थापित प्रयोगकर्ताहरू",
        "right-move-subpages": "तिनीहरूको उपपाना सहित पानाको नाम बदल्ने",
        "action-move-subpages": "यै पानाको रे यैका उपपानाको नाम बदल्न्या",
        "action-unwatchedpages": "कसैले ध्यान नराख्याका पाननको सूची हेद्या",
        "action-userrights-interwiki": "अन्य विकिका प्रयोगकर्तानको प्रयोगकर्ता अधिकार सम्पादन गद्या",
+       "action-applychangetags": "तमरो परिवर्तनसँगै ट्यागहरू लागु गर्न्या",
        "enhancedrc-history": "इतिहास",
        "recentchanges": "नौला फेरबदली",
        "recentchanges-legend": "अच्यालैका परिवर्तन विकल्पहरू",
        "newpageletter": "नौ",
        "boteditletter": "बो",
        "rc_categories": "श्रेणीहरूमी सीमित (\"|\" ले छुट्याओ)",
-       "rc-change-size-new": "फेरबदलपाछा $1 {{PLURAL:$1|बाइट|बाइट}}",
+       "rc-change-size-new": "$1 {{PLURAL:$1|बाइट|बाइटस}}फेरबदलपाछा",
        "recentchangeslinked": "सम्बन्धित फेरबदल",
        "recentchangeslinked-toolbox": "सम्बन्धित फेरबदल",
        "recentchangeslinked-title": "\"$1\" सित सम्बन्धित परिवर्तन",
        "upload-recreate-warning": "'''चेतावनी: त्यस नाममी रह्याका फाइलहरू सारियाको या हटायाको छ।'''\n\nयै पानाको सारियाको र हटायाको लग तमरो सहजताको लागि दियाको छ।",
        "filedesc": "सारांश:",
        "large-file": "यो सिफारिस गर्याछकि फाइलहरूको आकार $1 भन्दा ठूला हुनु हुँदैन;\nयै फाइलको आकार $2 छ ।",
+       "emptyfile": "तमीले अपलोड गर्याको फाइल रित्तो छ ।\nयो फाइल नाम गलत राख्याका कारणले भयाको हुनसकन्छ\nयो फाइल साँच्चै अपलोड गद्दे कुरडीमी निश्चित होइजाओ ।",
        "fileexists": "यै नामको फाइल पैल्ली नैं छ, यदि तम परिवर्तन गद्या कुरडीमू सुनिश्चित छैनौ भण्या कृपया <strong>[[:$1]]</strong> जाँच गर।\n[[$1|thumb]]",
        "filewasdeleted": "यै नामको एक फाइल पहिली पनि अपलोड गरिबर पछि हटाई सकियाको छ।\nपुनः अपलोड गद्दु पूर्व तम $1 लाई निक्करी जाँच गर ।",
+       "upload-dialog-title": "चित्र अपलोड गर",
+       "upload-dialog-error": "गल्ती भयो",
+       "upload-dialog-warning": "सूचना हुनु",
+       "upload-dialog-button-cancel": "रद्द",
+       "upload-dialog-button-done": "सकियो",
+       "upload-dialog-button-save": "सङ्ग्रह गद्या",
+       "upload-dialog-button-upload": "अपलोड",
+       "upload-dialog-label-select-file": "फाइल छान",
+       "upload-dialog-label-infoform-title": "विवरण",
+       "upload-dialog-label-infoform-name": "नाऊ",
+       "upload-dialog-label-infoform-description": "बेलिविस्तार",
+       "upload-dialog-label-usage-title": "रिती",
+       "upload-dialog-label-usage-filename": "फाइल नाउ",
        "uploadstash-nofiles": "तमरा कोइ पनि स्टाश गर्याका फाइलहरू नाइथिन् ।",
+       "uploadstash-badtoken": "त्यो कार्य असफलभयो , सायद तमरो सम्पादन अधिकार समाप्त भयो । पुन: प्रयास गर ।",
        "uploadstash-refresh": "फाइलहरूको सूची ताजा गर्न्या",
        "license-header": "कोइ केइ नाइथिन",
        "listfiles-summary": "यै खास पानाले अपलोड गर्याका सबै फाइलहरू धेकाउन्छ ।",
        "imagelinks": "फाइलको प्रयोगहरु",
        "linkstoimage": "यै चित्रमी निम्न{{PLURAL:$1|पाना जोडिनान{{PLURAL:$1|}}|$1 पानाहरू जोडिनान्}}:",
        "nolinkstoimage": "यो चित्रसित लिंकभयाकि कोइ पाना नाइथी",
+       "morelinkstoimage": "यै फाइलको [[Special:WhatLinksHere/$1|थप लिंकहरू]] हेर ।",
        "sharedupload-desc-here": "यो फाइल $1 बठे हो र और  परियोजनाहरू बठे पन प्रयोग गद्द सकिन्याछ । \nताखाइ यैको [$2 फ़ाइल विवरण पानो]मि रयाका विवरण तल्तिर दियाको छ।",
        "upload-disallowed-here": "तमलाई यो फाइल अधिलेखन गद्द नाइसक्का ।",
+       "filedelete-intro-old": "तमी <strong>[[Media:$1|$1]]</strong> को संस्करणलाई [$4 $3, $2] हुन्या गरि मेट्ट लाग्याछौ ।",
        "filedelete-maintenance": "रखरखाव चलिरह्याको हुनाले अस्थायी रुपमी फाइलहरू मेट्ट्या र मेट्याकोलाई पुनर्बहाली गर्न निष्क्रिय गरियाकोछ।",
        "mimesearch-summary": "MIME-प्रकार अनुसार फाइलहरू खोज्न यै पानाको प्रयोग गद्द सकिन्याछ ।\nइनपुट: फाइलको प्रकार/उपप्रकार, उदा. <code>image/jpeg</code>।",
        "randompage": "कोइ एक लेख",
        "statistics-users-active": "सक्रिय प्रयोगकर्ताहरू",
        "statistics-users-active-desc": "प्रयोगकर्ताहरू जो {{PLURAL:$1|बितेको एक दिन|बितेका $1 दिनहरू}} बठे सक्रिय छन्",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइटहरू}}",
+       "nlinks": "$1 {{PLURAL:$1|लिंक|लिंकहरू}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}",
        "ntransclusions": "$1 {{PLURAL:$1पानामी प्रयोग भयाको|पनाहरूमी प्रयोग भयाका}}",
        "uncategorizedimages": "श्रेणीकरण नभयाका फाइलहरू",
        "newpages": "नयाँ पानाहरू",
        "move": "नाम बदल",
        "movethispage": "पानाको नाम बदल्न्या",
+       "notargettext": "यै कार्यका लेखाई तमीले कुनै लक्षित पानो वा प्रयोगकर्ता निर्दिष्ट गर्याको छैनौ ।",
+       "nopagetext": "तमीले खुलायाको गन्तव्य पानो अस्तित्वमी  छैन।",
        "pager-older-n": "{{PLURAL:$1|पुरानो १|पुरानो $1}}",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्या",
        "booksources-search": "खोज अर",
+       "booksources-text": "तल दियाको सूची नौला तथा पूराना किताब बेच्न्या लगायत तमीले खोज्याका किताबका बारेमी थप जानकारी भयाका अन्य साइटका लिंकहरू हुन् ।",
        "log": "लगहरू",
        "all-logs-page": "सब्बै सार्वजनिक लगहरू",
        "allarticles": "सब्बै लेखहरू",
        "emailpagetext": "तल दियाको फार्मले तमी यै {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्द्या हौ । तमीले जो ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता रोजाईहरू]]मी दियाका छियौ त्यो यै इमेललाई \"पठाउने\" को रूपमी आउन्याछ, अतः प्राप्तकर्ता तमीलाई सिधै जवाफ दिनसक्द्याछ ।",
        "usermaildisabledtext": "यै विकिमी तम और प्रयोगकर्तानलाई ई-मेल पठाउन नाइसक्दा",
        "mywatchlist": "मेरो ध्यान सूची",
+       "nowatchlist": "तमरो ध्यान सूचीमी कोइ लै सामाग्री नाइथिन् ।",
+       "watchlistanontext": "कृपया तमरो ध्यान सूची हेद्द या सम्पादन गद्द कीलाइ लगइन गर ।",
+       "addedwatchtext-short": "\"$1\" पानो तमरो ध्यान सूचीमी जोडियाको छ ।",
+       "removedwatchtext": "\"[[:$1]]\" नामको पानो [[Special:Watchlist|तमरो ध्यान सूची]]बठे हटायाको छ।",
        "watch": "ध्यान राख",
        "watchthispage": "यै पानाको ध्यान राख",
        "unwatch": "ध्यान हटाओ",
        "unwatchthispage": "ध्यान हटाओ",
        "notanarticle": "सामाग्री छैन",
+       "watchlist-details": "तमरो ध्यान सूचीमी रहेका {{PLURAL:$1|$1 पाना|$1 पानाहरू}} कुरडी पाना गनियाका छैनन्।",
        "enotif_reset": "सब्बै पानाहरू हेर्याको भनी चिनो लाउन्या",
        "enotif_body": "प्रिय $WATCHINGUSERNAME,\n\n\n{{SITENAME}}को पाना $PAGETITLE  $PAGEEDITDATE का दिन $PAGEEDITOR द्वारा $CHANGEDORCREATED, \nअहिलको संशोधनको निउती हेर  $PAGETITLE_URL ।\n\n$NEWPAGE\n\nसम्पादकको सारांश: $PAGESUMMARY $PAGEMINOREDIT\n\nसम्पादकसित सम्पर्क राख:\nमेल: $PAGEEDITOR_EMAIL\nविकि: $PAGEEDITOR_WIKI\n\nतमी यै पानामी नगयासम्म अब उसो कुनै परिवर्तन भयाका खण्डमी कुनै सूचना दिन्याछैन ।\nतमरा सम्पूर्ण ध्यान सूचीका पानानको लागि तमीले सूचना पताकालाई ध्यान सूचीमी पुनर्बहाली गद्द सक्द्या हौ । \n\n             तमरो मित्र {{SITENAME}} सूचना प्रणाली\n--\nइमेल सूचना व्यवस्था परिवर्तन गद्द, जाओ\n{{canonicalurl:{{#special:Preferences}}}}\n\nध्यान सूची व्यवस्थित गर्न, जाओ\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nध्यान सूची मेट्न, जाओ\n$UNWATCHURL\n\nप्रतिक्रिया र अन्य सहयोगका निउती:\n$HELPPAGE",
        "confirmdeletetext": "तमी यो पानो र यैको इतिहास मेट्ट लाग्याछौ । कृपया पुष्टि गर कि [[{{MediaWiki:Policy-url}}|नियम]] मुताबिक तम मेट्ट लाग्याछौ।",
        "dellogpage": "मेटाइयाको लग",
        "delete-toobig": "यै पानाको सम्पादन इतिहास भौतै र  $1 {{PLURAL:$1|पुनरावलोक|पुनरावलोकहरू}}भन्दा बढी रह्याको छ।\n {{SITENAME}}मी दुर्घटनाको कारणले गडबडी आउनसक्द्या कुरडीलाई रोक्न यसा पानाहरूलाई मेट्नबठे निषेध गरियाको छ ।",
+       "deleteprotected": "यै पानालाई सुरक्षित गर्याकोले तमी यैलाई मेटाउन सक्दाइनौ ।",
        "rollback": "सम्पादनहरू उल्टाउन्या",
        "rollbacklink": "पैल्लिका रुपमि फर्काउन्या",
        "rollbacklinkcount": "रोल्ब्याक $1 {{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
        "isimage": "फाइल लिङ्क",
        "whatlinkshere-prev": "{{PLURAL:$1|पैलो|पैलो $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
-       "whatlinkshere-links": "â\86\90 à¤²à¤¿à¤\82à¤\95हरà¥\81",
+       "whatlinkshere-links": "â\86\90 à¤²à¤¿à¤\82à¤\95हरà¥\82",
        "whatlinkshere-hideredirs": "$1 अनुप्रेषित हुन्छ",
        "whatlinkshere-hidetrans": "$1 पारदर्शन",
        "whatlinkshere-hidelinks": "$1 लिङ्कहरु",
+       "whatlinkshere-hideimages": "$1 फाइल लिंकहरू",
        "whatlinkshere-filters": "छानियाका",
        "ipbreason-dropdown": "* ब्लक गर्नुका समान्य कारणहरू\n** झूटो सूचना दियाको\n** पानानबठे सामाग्रीहरू हटायाको\n** बाहिरी जालक्षेत्र (sites)सित नचाहिंदो लिङ्क गर्याको \n** पानानमी बकवास/गाली-गलौच हाल्याको\n** भै धेकाउने व्यवहार/उत्पीडन (सताउने कार्य) गर्याको\n** धेरै गलत खाताहरू बनायाको\n** प्रयोगकर्ता नाम अस्वीकार्य",
        "ipboptions": "२ घण्टाहरू:2 hours,१ दिन :1 day,३ दिनहरू:3 days,१ हप्ता:1 week,२ हप्ताहरू:2 weeks,१ महिना:1 month,३ महिनाहरू:3 months,६ महिनाहरू:6 months,१ वर्ष:1 year,अनगिन्ती:infinite",
        "blocklink": "रोक्न्या",
        "contribslink": "योगदानहरू",
        "block-log-flags-anononly": "नाम नभयाका प्रयोकर्ताहरू मात्र",
+       "proxyblockreason": "तमरो IP ठेगानामी रोक लगायाको छ किनकी यो खुला प्रोक्सी हो ।\nकृपया तमरो इन्टरनेट सेवा प्रदायक या प्राविधिक सहायतासँग सम्पर्क गरीबर यै सुरक्षा समस्याका बारेमी जानकारी गराओ ।",
+       "sorbsreason": "तमरो IP ठेगाना खुल्ला प्रोक्सीको रुपमी  DNSBL मा सूचीकरण गरिएको छ यैलाई{{SITENAME}}ले प्रयोगमी ल्यायाको छ।",
+       "sorbs_create_account_reason": "तमरो IP ठेगाना खुल्ला प्रोक्सीको रुपमी  DNSBL मी सूचीकरण गरियाको छ यैलाई{{SITENAME}}ले प्रयोगमी ल्यायाको छ ।\nतम खाता खोल्न नाइसक्दा ।",
        "xffblockreason": "एउटा आइपि ठेगाना जुन X-Forwarded-For हेडरमी रह्याको छ, या त तमरो हो वा त्यै प्रक्सी सर्भरको हो जैको प्रयोग तमी गद्दा छौ रे यै माथि प्रतिबन्ध लगाइयाको छ । वास्तविक कारण थ्यो:$1",
+       "cant-see-hidden-user": "तमीले ब्लक गद्द खोज्याको प्रयोगकर्ता पहिले नै ब्लक गरि लुकाइ सक्याको छ ।\nतमीसँग hideuser अधिकार नभयाकोले यैलाई हेद्द या सम्पादन गद्द सक्दाइनौ ।",
        "ipbblocked": "तमी अरु प्रयोगकर्तानहरूलाई ब्लक गर्न वा उनीहरूको ब्लक खोल्न नाइसक्दा किनभने तमी आफै ब्लक भयाका छौ ।",
+       "ipbnounblockself": "तमी आफुलाई आफै अनब्लक गद्द नाइ सक्दा ।",
        "lockdbtext": "डेटाबेसमी ताला लगाउनाले सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो रौजाईमी परिवर्तन, आफ्नो ध्यानसूचीमी सम्पादन, र अन्य वस्तु जैको लागि डेटाबेसमी परिवर्तन गरें हुन्छ, त्यैबठे वन्चित हुन्याछ । कृपया यो सुनिश्चित गर कि तम यो गर्न चाहन्छौ, र तम रक्षण पश्चात ताला खोल्न्या हौ ।",
        "movepagetext-noredirectfixer": "तल दियाको फारमले पानाको नाम परिवर्तन गद्याछ, उइको सबै इतिहास पनि नयाँ नामले धेकिन्याछ ।\nपुरानो शीर्षक नयाँ नाममी अनुप्रेषण गद्याछ ।\nमूल शीर्षक तर्फ लिएर जान्या सबै अनुप्रेषणहरूलाई तम स्वचालित रूपले परिवर्तन गद्द सक्द्या हौ ।\nयदि तम यसो नाइ गद्या भया कृपया [[Special:DoubleRedirects|दोहोरो]] पुनर्निर्देशन वा [[Special:BrokenRedirects|टुटेको पुनर्निर्देशन]]का लागि पक्कै जाँच गर ।\nलिङ्क आफ्नो स्थानमै रहोस्, यो सुनिश्चित गर्ने जिम्मेवारी तमरो हो ।\n\nयदि नयाँ शीर्षकको लेख पहिले देखि छ भण्या नाम परिवर्तन '''हुन''' सक्दैन । तर यदि नयाँ शीर्षक भयाको लेख खाली छ अथवा कतै अन्य स्थानमी अनुप्रेषित गद्दैछ र साथै उइको पुरानो संस्करण छैन भण्या त्यैको नाम परिवर्तन हुन्याछ ।\nयैको अभिप्राय यो हो कि यदि तमीबठे गल्ती भयाको छ भण्या तम फेरी पुरानो नाममी यस पानालाई सार्न सक्द्याछौ, र साथै तम कुनै पहिली बठे रह्याको पानाको सट्टा यो स्थानान्तरण गद्द सक्द्या हौन ।\n\n<strong>चेतावनी!<strong>\nयदि पानो खासै लोकप्रिय छ भण्या त्यैको लागि यो एउटा ठुलो र अकस्मात परिवर्तन हुन सक्छ;\nअगाडी बढ्नु भन्ना पहिली तमी यैको नतिजासँग परिचित भयाकाछौ ।",
+       "movenologintext": "पानाको नाम बदल्नको लागि तमी दर्ता गरियाको र [[Special:UserLogin|लगइन गर्याको]] प्रयोगकर्ता हुनुपडन्छ ।",
        "cant-move-user-page": "तमसँग प्रयोगकर्ता पानाहरू साद्या अनुमती नाइथिन् (सहपानाहरू बाहेक)",
        "cant-move-to-user-page": "तमसँग पानाहरूलाई प्रयोगकर्ता पानामी साद्या अनुमती नाइथिन् (प्रयोगकर्ता सहपृष्ठहरूमी बाहेक)",
+       "cant-move-category-page": "तमलाईं श्रेणीको पानाहरू साद्य अनुमति छैन ।",
+       "cant-move-to-category-page": "कुनै श्रेणी पानामी साद्दको लागी तमलाई अनुमति छैन ।",
+       "cantmove-titleprotected": "तमी यै ठौरमी पानो साद्द सक्दाइनौ, किनकी यो नौलो शिर्षकलाई सिर्जना हुनबठे जगाइयाको छ",
        "move-subpages": "उप पानाहरू सार्न्या($1 सम्मको)",
        "move-talk-subpages": "कुरडी पानाको सह-पानाहरू साद्य($1 सम्मको )",
        "movepage-max-pages": "अधिकतम $1 {{PLURAL:$1|पाना|पानाहरू}}को नाम बदलि सकियाको छ र अरु स्वत: नाम बदलिन्या छैन ।",
        "thumbnail-more": "ठूलो बनौन्या",
        "import-interwiki-history": "यै पामैकोलागि सबै इतिहास संशोधनहरू प्रतिलिपि गद्या",
        "import-noarticle": "आयात गद्दाकी लाई पानाहरू नाइथिन्",
+       "import-error-edit": "तमलाई सम्पादन गद्या अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
+       "import-error-create": "तमलाई नयाँ बनाउने अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो",
        "tooltip-pt-userpage": "तमरो प्रयोगकर्ता पानो",
-       "tooltip-pt-mytalk": "तमरो कुरणिकानी पानो",
+       "tooltip-pt-anonuserpage": "तमी जो IP ठेगानाको रुपमी सम्पादन गद्दै छौ , त्यैको प्रयोगकर्ता पानो निम्न छ :",
+       "tooltip-pt-mytalk": "तमरो कुरडीकानी पानो",
        "tooltip-pt-preferences": "तमरा अभिरुचिहरू",
        "tooltip-pt-watchlist": "पृष्ठहरूको सूची जैका फेरबदलहरुलाई तमले पहरा गरिराखेका छौ ।",
        "tooltip-pt-mycontris": "तमरो योगदानको सूची",
        "tooltip-pt-logout": "बाहिर निस्कन्या (लग आउट)",
        "tooltip-pt-createaccount": "तमलाई खाता बनौन लै लग इन अद्द हम हौसला अद्दाउ; काइकि, यो अनिवार्य नाइथी भण्या ।",
        "tooltip-ca-talk": "सामाग्री पृष्ठबारेमी छलफल",
-       "tooltip-ca-edit": "तम à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\85दà¥\8dद à¤¸à¤\95नà¥\8dà¤\9bà¥\8c à¥¤ à¤\95à¥\83पया à¤¸à¤\99à¥\8dà¤\97à¥\8dरह â\80\8dà¤\97दà¥\8dद à¤\85à¤\97ाडà¥\80 à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¬à¤\9fन à¤ªà¥\8dरयà¥\8bà¤\97 à¤\85रिदिय à¥¤",
+       "tooltip-ca-edit": "यà¥\87 à¤ªà¤¾à¤¨à¤¾ à¤¸à¤®à¥\8dपादन à¤\97र",
        "tooltip-ca-addsection": "नयाँ खण्ड सुरु अरिदिय",
        "tooltip-ca-viewsource": "यो पानो सुरक्षित अरियाको छ। यैको श्रोत हेद्द सकन्छौ ।",
        "tooltip-ca-history": "यै पृष्ठका पैल्लिका पुनरावलोकनहरु",
        "tooltip-t-permalink": "पृष्ठको यो पुनरावलोकनकि लेखा स्थाई लिङ्क",
        "tooltip-ca-nstab-main": "सामाग्री पानो हेरिदिय",
        "tooltip-ca-nstab-user": "प्रयोगकर्ता पानो हेरिदिय",
-       "tooltip-ca-nstab-special": "यो खास पानो हो , तमलाईँ आफै सम्पादन गद्द सकन्छौ",
+       "tooltip-ca-nstab-special": "यो खास पानो हो ,तमी यैलाई आफै सम्पादन गद्द सक्दाइन",
        "tooltip-ca-nstab-project": "आयोजना पानो हेरिदिय",
        "tooltip-ca-nstab-image": "चित्र पानो हेर",
        "tooltip-ca-nstab-template": "टेम्प्लेट(नमूना) हेरिदिय",
        "tooltip-summary": "नानो सारांश हालिदिय",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
        "anonusers": "{{SITENAME}} का नाम नभयाका {{PLURAL:$2| प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
-       "simpleantispam-label": "à¤\90नà¥\8dà¤\9fà¥\80-सà¥\8dपà¥\8dयाम à¤\9cाà¤\81à¤\9a।\nयà¥\88लाà¤\88 <strong>नहà¥\80à¤\82</strong> भद्य्या!",
+       "simpleantispam-label": "à¤\90नà¥\8dà¤\9fà¥\80-सà¥\8dपà¥\8dयाम à¤\9cाà¤\81à¤\9a।\nयà¥\88लाà¤\88 <strong>नाà¤\87à¤\81</strong> भद्य्या!",
        "pageinfo-toolboxlink": "यै पानाको जाणकारी",
        "rcpatroldisabled": "अहिलका परिवर्तनहरू गस्ती निष्क्रिय पार्याको छ ।",
        "rcpatroldisabledtext": "अहिलका परिवर्तनहरू गस्ती गुण अहिलको लागि निष्कृय पारियाको छ ।",
+       "markedaspatrollederror-noautopatrol": "तमी आफ्नै सम्पादनलाई गस्ती गरियाको भनि चिनो लगाउन नाइसक्दा ।",
        "patrol-log-header": "गस्ती गर्याका संस्करणहरूको लग यस प्रकार रह्याका छन् ।",
        "previousdiff": "← पुरानो सम्पादन",
        "nextdiff": "नौलो सम्पादन →",
+       "mediawarning": "<storng>चेतावनी</storng>: यै फाइलमी घातक कोडहरू पनि हुनसक्दान\nयैलाई सञ्चालन गद्दा तमरो प्रणालीमी नियन्त्रण गरिन सक्छ ।",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|पानो|पानाहरू}}",
        "file-info-size": "$1 × $2 पिक्सेलहरु, फाइल आकार: $3, MIME प्रकार: $4",
        "file-info-size-pages": "$1 × $2 पिक्सेलहरू, फाइल आकार: $3, MIME प्रकार: $4, $5 {{PLURAL:$5|पानो|पानाहरू}}",
        "exif-orientation-1": "सानतिनो",
        "namespacesall": "सब्बै",
        "monthsall": "सब्बै",
+       "confirmemail_noemail": "तमरो प्रयोगकर्ता [[Special:Preferences|रोजाईमी]] मान्य इमेल ठेगाना राखीयाको छैन ।",
+       "confirmemail_pending": "तमरो इमेलमी प्रपाणिकरण कोड पैल्ली नै पठाइ सकियाको छ;\nयदि तमले अल्लै खाता खोल्याका भया कोडका निउती पुन: अनुरोध गद्द अघाडी कोड नआइपुगुन्ज्या कृपया एक पल्ट पख ।",
+       "confirmemail_oncreate": "प्रमाणिकरण कोड तमरो इमेल ठेगानामी पठायाको छ ।\nयो कोड लगइन गद्दाका लागि अत्यवश्यक छैन, तर यै विकिमी इमेल ठेगानामी आधारित सेवाहरू उपभोग गद्द कोड उपलब्ध गराउनु पड्ड्या हुन्छ ।",
+       "confirmemail_sendfailed": "{{SITENAME}} प्रमाणिकरण इमेल पठाई सकियोन।\nतमरा इमेलमी अमान्य अक्षरहरू छन् कि जाँचियल ।\n\nमेलरले पठायाको त्रुटी रैबार: $1",
+       "confirmemail_needlogin": "तमीले आफ्नो इमेल प्रमाणिकरण गराउन $1 गद्दु पडन्छ ।",
+       "confirmemail_success": "तमरो इमेल ठेगाना प्रमाणिकरण गरियाको छ ।\nअब तमी [[Special:UserLogin|प्रवेश गरी]] विकिको मजा लिन सक्द्याहौ ।",
+       "confirmemail_loggedin": "तमरो इमेल ठेगाना प्रमाणित भयाको छ।",
        "confirmrecreate": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|कुरडी]])ले  तमले  सम्पादन सुरु गर्यापछि यो पानो मेट्याकाछन् । कारण थ्यो:\n: ''$2''\nकृपया सुनिश्चित गर कि तम यो पानो साँच्चै निर्माण गद्द चाहन्छौ ।",
+       "confirmrecreate-noreason": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|कुरडी ]])ले यो पानो तमी सम्पादन गद्द थाल्या पछि मेट्याका छन् । यै पानालाई पुन: सिर्जना गद्दे भया कृपया पुष्टि गर ।",
        "size-bytes": "$1 अक्षरहरू",
        "size-kilobytes": "$1 किलोबाइट",
        "size-megabytes": "$1 मेगाबाइट",
        "size-gigabytes": "$1 गिगाबाइट",
        "lag-warn-normal": " $1 {{PLURAL:$1|सेकेन्ड |सेकेन्डहरू}} भन्दा नौला फेरबदलहरू यै सूचीमी नधेकाउन सक्छ ।",
        "lag-warn-high": "डेटावेस सर्भरको मस्तै ढिलाको कारणले  $1 {{PLURAL:$1|सेकेन्ड|सेकेन्डहरू}} पछिका परिवर्तनहरू नधेकिन सक्छ ।",
+       "watchlistedit-raw-done": "तमरो ध्यान सूची अपडेट गरियाको छ।",
+       "watchlistedit-clear-explain": "तमरा ध्यान सूचीबठे सम्पूर्ण पाना हटाइया",
+       "watchlistedit-clear-done": "तमरो ध्यान सूची खाली गरीयाको छ।",
        "watchlisttools-view": "आधारित फेरबदलीहरू हेर",
-       "signature": "[[{{ns:user}}:$1|$2 ]]",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|कुरडी]])",
        "specialpages": "खास पानो",
        "specialpages-note": "* साधारण खास पानाहरू।\n* <span class=\"mw-specialpagerestricted\">निषेधित खास पानाहरू।</span>",
        "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
        "tag-filter": "[[Special:Tags|पुछड]] छानिन्या",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
        "tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरू}}",
+       "tags-create-no-name": "तमीले ट्याग नाम निर्दिष्ट गद्दु पड्ड्या हुन्छ ।",
+       "tags-create-warnings-below": "क्या तमी यो ट्याग बनाउन्या काम जारी राख्न चाहन्छौ ?",
+       "tags-delete-explanation-initial": "तमी ट्याग \"$1\" लाई डाटावेसबठे हटाउँन लाग्याछौ ।",
        "tags-delete-explanation-warning": "यो क्रिया <strong>अपरिवर्तनीय</strong> हो र <strong>त्यसलाई परिवर्तन गर्न नाईसकिंदो</strong>, डेटाबेस प्रवन्धक पनि यैलाई केहि गद्द सक्दाइनन् । विश्वासपूर्ण रूपले तम तय गर कि तमी यै ट्यागलाई हटाउन चाहन्छौ ।",
+       "tags-activate-question": "तमी ट्याग \"$1\"लाई सक्रिय गद्द लाग्याछौ ।",
+       "tags-deactivate-question": "तमी ट्याग \"$1\" लाई निस्क्रिय गद्द लाग्याछौ ।",
+       "compare-invalid-title": "तमीले खुलायाको शिर्षक अमान्य छ ।",
+       "compare-title-not-exists": "तमीले खुलायाको शिर्षक उपलब्ध छैन ।",
+       "compare-revision-not-exists": "तमीले खुलायाको संस्करण उपलब्ध छैन ।",
+       "dberr-usegoogle": "तमी अहिले गुगलबठे खोज्न्या प्रयास गद्द सक्न्याहौ ।",
+       "htmlform-invalid-input": "तमले प्रविष्ठ गर्याका कुनै सामग्रीहरू ठिक नाइथिन्",
+       "htmlform-select-badoption": "तमीले खुलायाको मान मान्य विकल्प हैन ।",
+       "htmlform-float-invalid": "तमीले जनायाको मान कुनै संख्या हैन ।",
+       "htmlform-int-toolow": "तमीले जनायाको मान न्युनतम $1 भन्दा कम भयो ।",
+       "htmlform-int-toohigh": "तमीले जनायाको मान अधिकतम $1 भन्दा बढी भयो ।",
        "logentry-delete-delete": "$1 बठे पानो $3 {{GENDER:$2|मेटाइयो}}",
        "logentry-move-move": "$1 {{GENDER:$2|द्वारा}} $3 पृष्ठलाई $4 मि सारियो",
        "logentry-newusers-create": "प्रयोगकर्ता खाता $1 {{GENDER:$2|खोलियो}}",
        "api-error-duplicate-archive": "यै साइटमी पहिलेबाट यस्तै सामग्री {{PLURAL:$1|भयाको [$2 अर्को फाइल थियो]|भयाका  [$2 केहि अरु फाइलहरू थिए]}} ।\nतर {{PLURAL:$1|यो मेट्याको थियो|यी मेटायाका थिए}} ।",
        "api-error-duplicate-archive-popup-title": "पैल्ली  {{PLURAL:$1|मेट्याको फाइलको|मेट्याका फाइलहरूको}} नकल प्रति बनाउन्या।",
        "api-error-duplicate-popup-title": "{{PLURAL:$1|फाइल|फाइलहरू}} नकल प्रति बनाउन्या",
+       "expand_templates_preview_fail_html": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्ववावलोकन प्रयास हो भण्या पुन प्रयास गर ।</strong>\nयदि यसले कार्य पूर्ण भएन भण्या [[Special:UserLogout|लग आउट गरिबर]] फेरी लग इन गर्या ।",
+       "expand_templates_preview_fail_html_anon": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्वावलोकन प्रयास हो भण्या कृपया [[Special:UserLogin|लग इन गरिबर]] पुनः प्रयास गर्या ।</strong>",
        "default-skin-not-found": "ओह! तमरो विकिको पूर्व निर्धारित खोल जस्तो कि <code dir=\"ltr\">$wgDefaultSkin</code> मी बताइयाको<code>$1</code>, उपलब्ध नाईथिन् ।\n\nतमरो इन्स्टलेसन यी खोलहरूलाई सम्मिलित गर्दछ {{PLURAL:$4|खोल|खोलहरू}}। हेर [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: खोललाई सम्मिलित गर्नु] ताकि तमीलाई जानकारी होस् कि कसरि {{PLURAL:$4|उसलाई|उसलाई सम्मिलित गर्न सकियोस् र निर्धारितलाई तय गद्दे}}।\n\n$2\n\n; यदि तमीले अहिले मीडियाविकि इन्स्टाल गर्याका छौ:\n: तमीले सम्भवत गिटबठे इन्स्टाल गर्याका छौ, वा सिधै स्रोत कोडबठे गर्याका छौ जैको लागि कुनै अर्कै तारिका प्रयोग गरियाको छ । यो आशा अनुरूप छ । कोशिश गर केहि खोलहरू\n[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडियाविकिको खोल डाइरेक्ट्रीबाट डाउनलोड गद्या], जैको लागि तमी:\n:* डाउनलोड गर [https://www.mediawiki.org/wiki/Download टरबल इन्स्टालर], जुन कयौं खोलहरू र विस्तारमी उपलब्ध छन्। तमी खोलहरूको कोड <code>skins/</code> त्यसको डाइरेक्ट्रीबाट कपी-पेस्ट गद्द सक्द्या हौ। \n:* व्यक्तिगत खोलहरू टरबलबठे डाउनलोड गर\n[https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बठे।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गद्द सकन्छौ]।\n: यदि तमी विकासकर्ता हौ भण्या यसो गद्दा तमरो गिट-रिपजिटरीमी केहि हुनुहुँदैन । \n; यदि तमीले अहिले मीडियाविकिलाई अपग्रेड गर्याका छौ:\n: मीडियाविकि १.२४ र यैको नवीन रूप स्वतः रूपले खोलहरूलाई सक्षम गद्दैनन् (हेर [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:खोलहरूको स्वतः खोज])। तमी निम्नलिखितलाई पेस्ट गद्द सकन्छौ: {{PLURAL:$5|लाइन|लाइनहरू}}  <code>LocalSettings.php</code> मी ताकि {{PLURAL:$5|उसले|सबै}} सक्षम होस् जस्तो कि तमीले इन्स्टाल गर्याको {{PLURAL:$5|खोल|खोलहरू}}को मामिलामी:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि तमीले अहिले परिवर्तन गर्याका छौ<code>LocalSettings.php</code>:\n: खोल नामहरूको अगाडी डबल-क्लिक गर जसले तमलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।"
 }
index ac0a415..6c2ff8a 100644 (file)
@@ -5,7 +5,8 @@
                        "Reder",
                        "Geitost",
                        "아라",
-                       "Shirayuki"
+                       "Shirayuki",
+                       "Gloria sah"
                ]
        },
        "tog-underline": "Tîra 'na rîga sòta i colegamèint.",
        "actionthrottledtext": "Cme mişûra 'd sicurèsa cûnt'r al spam soquânti operasiòun a vînen limitêdi a 'n nómer mâsim ed vôlti in un precîş peréiod ed tèimp, in cól chêş ché a s'é bèle andê d'ed là 'd cól lémit. A se dmânda ed turnêr a pruvêr tra soquânt minût.",
        "protectedpagetext": "Cla pàgina ché l'é stêda prutèta per impidîr la mudéfica o êtri operasiòun.",
        "viewsourcetext": "L'é pusébil vèder e cupiêr al côdis surzéia ed cla pàgina ché.",
-       "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal \"tō mudéfichi\" ed cla pàgina ché:",
+       "viewyourtext": "L'é pusébil vèder e cupiêr al côdis surzéia dal <strong>tō mudéfichi</strong> ed cla pàgina ché.",
        "protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
        "editinginterface": "<strong>Atèinti:</strong> Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l prugrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a se spècen in sém a i mesâg vést per tót j utèint ed cól wiki ché.",
        "translateinterface": "Per zuntêr o mudifichêr al tradusiòun vâlidi in sém a tót i wiki, drōva [//translatewiki.net/ translatewiki.net], al prugèt Media Wiki p'r al léngui di divêrs pôst.",
        "passwordreset": "Câmbia la cêva 'd ingrès",
        "passwordreset-text-one": "Impés cól môdul ché per  turnêr a impustêr la tó cêva 'd ingrès.",
        "passwordreset-text-many": "{{PLURAL:$1|Impés ûn di câmp per ricēver 'na cêva 'd ingrès pruvişôria per mèz ed la pôsta eletrônica}}",
-       "passwordreset-legend": "Tōrna mèter la cêva 'd ingrès",
        "passwordreset-disabled": "In cla wiki ché an pōlen mia turnêr impustêr al cêvi 'd ingrès",
        "passwordreset-emaildisabled": "In cla wiki ché è stê bluchê al funsiòun ed la pôsta eletrônica.",
        "passwordreset-username": "Nòm utèint:",
        "resettokens": "Tōrna 'd impustêr la cêva",
        "resettokens-text": "Ché 't pō turnêr a impustêr al cêvi ch'ét permèten l'ingrès a precîşi infurmasiòun privêdi lighêdi a la tó utèinsa. Ét duvrés fêrel se per chêş ét j ê spartîdi cun quelchidûn o se al j infurmasiòun ed la tó utèinsa în  in perécol.",
        "resettokens-no-tokens": "An gh'é mìa di token da turnêr a impustêr.",
-       "resettokens-legend": "Tōrna 'd impustêr la cêva",
        "resettokens-tokens": " Token:",
        "resettokens-token-label": "$1 (valōr 'd adèsa: $2)",
        "resettokens-watchlist-token": "Token p'r al feed web (Atom/RSS) dal [[Special:Watchlist|mudéfichi al pàgini ch'ét tîn sòt' ôc]]",
        "pageinfo-watchers": "Nómer  'd utèint che gh'àn la pàgina sòt ôc.",
        "pageinfo-edits": "Nómer totêl dal mudéfichi",
        "pageinfo-authors": "Nómer totêl di divêrs avtôr",
+       "pageinfo-toolboxlink": "Infurmasiòun in sìm'ala pàśna",
        "previousdiff": "← Diferèinsa 'd préma",
        "nextdiff": "Diferèinsa dôp →",
        "file-info-size": "$1 × $2 pixel, amzûra dal file:$3, gèner MIME: $4",
        "rightsnone": "(nisûn)",
        "feedback-cancel": "Scanşela",
        "feedback-message": "Mesâg",
-       "feedback-subject": "Argomèint:"
+       "feedback-subject": "Argomèint:",
+       "searchsuggest-search": "Sèirca"
 }
index b7fb79a..2f58c02 100644 (file)
@@ -41,7 +41,8 @@
                        "Auslaender",
                        "Milicevic01",
                        "Ah3kal",
-                       "Macofe"
+                       "Macofe",
+                       "Stam.nikos"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "privacypage": "Project:Πολιτική ιδιωτικού απορρήτου",
        "badaccess": "Σφάλμα άδειας",
        "badaccess-group0": "Δεν επιτρέπεται να εκτελέσετε την ενέργεια που ζητήσατε.",
-       "badaccess-groups": "Η ενέργεια που ζητήσατε είναι περιορισμένη σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
+       "badaccess-groups": "Η ενέργεια που ζητήσατε περιορίζεται σε χρήστες που ανήκουν {{PLURAL:$2|στην ομάδα|σε μία από τις ομάδες}}: $1.",
        "versionrequired": "Απαιτείται η έκδοση $1 του MediaWiki.",
        "versionrequiredtext": "Για να χρησιμοποιήσετε αυτή τη σελίδα απαιτείται η έκδοση $1 του MediaWiki. Βλ. [[Special:Version|σελίδα έκδοσης]]",
        "ok": "Εντάξει",
        "actionthrottled": "Η ενέργεια παρεμποδίστηκε",
        "actionthrottledtext": "Σαν μέτρο κατά του spam, υπάρχει όριο στην εκτέλεση αυτής της ενέργειας πολλές φορές μέσα σε μικρό χρονικό διάστημα και έχετε ξεπεράσει αυτό το όριο.\nΠαρακαλούμε δοκιμάστε ξανά σε λίγα λεπτά.",
        "protectedpagetext": "Αυτή η σελίδα έχει προστατευθεί για πρόληψη επεξεργασίας ή άλλες ενέργειες.",
-       "viewsourcetext": "Μπορείτε να προβάλετε και να αντιγράψετε τον πηγαίο κώδικα αυτής της σελίδας:",
-       "viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον πηγαίο κώδικα των <strong>επεξεργασιών σας</strong> σε αυτήν τη σελίδα:",
+       "viewsourcetext": "Μπορείτε να προβάλετε και να αντιγράψετε τον πηγαίο κώδικα αυτής της σελίδας.",
+       "viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον πηγαίο κώδικα των <strong>επεξεργασιών σας</strong> σε αυτήν τη σελίδα.",
        "protectedinterface": "Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για την πρόληψη κατάχρησης.\n\nΓια να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wiki, παρακαλούμε χρησιμοποιήστε το [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικής προσαρμογής της γλώσσας του MediaWiki.",
        "editinginterface": "<strong>Προειδοποίηση:</strong> Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτήν τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για άλλους χρήστες αυτού του wiki.",
        "translateinterface": "Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wiki, παρακαλούμε χρησιμοποιήστε το [//translatewiki.net/ translatewiki.net], το έργο τοπικοποίησης του MediaWiki.",
-       "cascadeprotected": "Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:\n$2",
+       "cascadeprotected": "Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή ενσωματώνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:\n$2",
        "namespaceprotected": "Δεν έχετε άδεια να επεξεργάζεστε σελίδες στον τομέα '''$1'''.",
        "customcssprotected": "Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα CSS, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.",
        "customjsprotected": "Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα JavaScript, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.",
        "createacct-benefit-body2": "{{PLURAL:$1|σελίδα|σελίδες}}",
        "createacct-benefit-body3": "πρόσφατοι {{PLURAL:$1|συνεισφέρων|συνεισφέροντες}}",
        "badretype": "Οι κωδικοί που έχετε δηλώσει δεν συμφωνούν μεταξύ τους.",
+       "usernameinprogress": "Μία δημιουργία λογαριασμού για αυτό το όνομα χρήστη είναι ήδη σε εξέλιξη.\nΠαρακαλώ περιμένετε.",
        "userexists": "Το όνομα χρήστη που εισαγάγατε βρίσκεται ήδη σε χρήση.\nΠαρακαλούμε, διαλέξτε ένα διαφορετικό.",
        "loginerror": "Σφάλμα σύνδεσης",
        "createacct-error": "Σφάλμα δημιουργίας λογαριασμού",
        "creating": "Δημιουργία: $1",
        "editingsection": "Επεξεργασία $1 (ενότητα)",
        "editingcomment": "Επεξεργασία $1 (νέο τμήμα)",
-       "editconflict": "Î\9fι Î±Î»Î»Î±Î³Î­Ï\82 Ï\83αÏ\82 Î´ÎµÎ½ Î±Ï\80οθηκεÏ\8dÏ\84ηκαν Î»Ï\8cγÏ\89 Ï\83Ï\8dγκÏ\81οÏ\85Ï\83ηÏ\82 ÎµÏ\80εξεÏ\81γαÏ\83ίαÏ\82. Î\98α {{GENDER:|θέλαÏ\84ε}}  Î½Î± ÎµÏ\80ιλÏ\8dÏ\83εÏ\84ε Ï\84ην Ï\83Ï\8dγκÏ\81οÏ\85Ï\83η Ï\87ειÏ\81οκίνηÏ\84α;",
+       "editconflict": "ΣÏ\8dγκÏ\81οÏ\85Ï\83η ÎµÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $1",
        "explainconflict": "Κάποιος άλλος χρήστης έχει αλλάξει αυτή τη σελίδα από τότε που αρχίσατε να την επεξεργάζεστε.\nΣτο επάνω τμήμα βρίσκεται το τρέχον κείμενο της σελίδας.\nΟι δικές σας αλλαγές εμφανίζονται στο κάτω τμήμα.\nΘα πρέπει να ενσωματώσετε τις αλλαγές σας στο τρέχον κείμενο.\n'''Μόνο''' το επάνω τμήμα θα αποθηκευθεί όταν πατήσετε \"{{int:savearticle}}\".",
        "yourtext": "Το κείμενό σας",
        "storedversion": "Αποθηκευμένη έκδοση",
        "readonlywarning": "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''\nΜπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.\n\nΟ διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
        "protectedpagewarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή μπορούν να την επεξεργαστούν.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "semiprotectedpagewarning": "'''Σημείωση:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο εγγεγραμμένοι χρήστες μπορούν να την επεξεργαστούν.\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
-       "cascadeprotectedwarning": "'''Προσοχή:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή συστήματος (sysop) να μπορούν να την επεξεργαστούν, επειδή περιλαμβάνεται {{PLURAL:$1|στην|στις}} {{PLURAL:$1|ακόλουθη|ακόλουθες}} διαδοχικά (cascaded) {{PLURAL:$1|προστατευμένη|προστατευμένες}} {{PLURAL:$1|σελίδα|σελίδες}}:",
+       "cascadeprotectedwarning": "'''Προσοχή:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή συστήματος να μπορούν να την επεξεργαστούν, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη|στις ακόλουθες}} διαδοχικά (cascaded) {{PLURAL:$1|προστατευμένη σελίδα|προστατευμένες σελίδες}}:",
        "titleprotectedwarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε χρειάζονται [[Special:ListGroupRights|ειδικά δικαιώματα]] για να δημιουργηθεί.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "templatesused": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} στη σελίδα αυτή:",
        "templatesusedpreview": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} σε αυτήν την προεπισκόπηση:",
        "sectioneditnotsupported-text": "Δεν υποστηρίζετε η επεξεργασία τομέα σε αυτήν τη σελίδα.",
        "permissionserrors": "Σφάλμα  άδειας",
        "permissionserrorstext": "Δεν έχετε άδεια να το κάνετε αυτό, για {{PLURAL:$1|τον εξής λόγο|τους εξής λόγους}}:",
-       "permissionserrorstext-withaction": "Δεν έχετε άδεια να $2, για {{PLURAL:$1|τον ακόλουθο λόγο|τους ακόλουθους λόγους}}:",
+       "permissionserrorstext-withaction": "Δεν έχετε την άδεια να $2, για {{PLURAL:$1|τον ακόλουθο λόγο|τους ακόλουθους λόγους}}:",
        "recreate-moveddeleted-warn": "'''Προειδοποίηση: Ξαναδημιουργείτε μια σελίδα που είχε προηγουμένως διαγραφεί.'''\n\nΘα πρέπει να σκεφτείτε σοβαρά αν είναι σωστό να συνεχίσετε να επεξεργάζεστε αυτή τη σελίδα.\nΟι καταγραφές διαγραφών και μετακινήσεων παρέχονται εδώ για διευκόλυνση:",
        "moveddeleted-notice": "Αυτή η σελίδα έχει διαγραφεί.\nΤο αρχείο καταγραφών διαγραφών και μετακινήσεων της σελίδας παρέχεται παρακάτω για αναφορά.",
        "log-fulllog": "Εμφάνιση πλήρους αρχείου",
        "content-model-css": "CSS",
        "content-json-empty-object": "Κενό αντικείμενο",
        "content-json-empty-array": "Κενός πίνακα",
+       "duplicate-args-warning": "<strong>Προειδοποίηση:</strong> Η σελίδα [[:$1]] καλεί το πρότυπο [[:$2]] με περισσότερες από μία τιμές για την παράμετρο \"$3\". Μόνο η τελευταία παρεχόμενη τιμή θα χρησιμοποιηθεί.",
        "duplicate-args-category": "Σελίδες που χρησιμοποιούν διπλές παραμέτρους σε κλήσεις προτύπων",
        "duplicate-args-category-desc": "Η σελίδα περιέχει κλήσεις πρότυπων που χρησιμοποιούν διπλές παραμέτρους, όπως <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.\n\nΠρέπει να περιέχει λιγότερες από $2 {{PLURAL:$2|κλήση|κλήσεις}}, τώρα {{PLURAL:$1|υπάρχει $1 κλήση|υπάρχουν $1 κλήσεις}}.",
        "search-category": "(κατηγορία $1)",
        "search-file-match": "(ταιριάζει με το περιεχόμενο του αρχείου)",
        "search-suggest": "Μήπως εννοούσατε: $1",
+       "search-rewritten": "Εμφανίζονται αποτελέσματα για $1. Εναλλακτικά αναζητήστε για $2.",
        "search-interwiki-caption": "Αδελφικά εγχειρήματα",
        "search-interwiki-default": "$1 αποτελέσματα:",
        "search-interwiki-more": "(περισσότερα)",
        "rows": "Σειρές",
        "columns": "Στήλες",
        "searchresultshead": "Αποτελέσματα αναζήτησης/Ρυθμίσεις",
-       "stub-threshold": "Κατώφλι για μορφοποίηση <span class=\"mw-stub-example\">συνδέσμου επεκτάσιμου</span>:",
+       "stub-threshold": "Κατώφλι για μορφοποίηση ως επεκτάσιμου ($1):",
+       "stub-threshold-sample-link": "δείγμα",
        "stub-threshold-disabled": "Απενεργοποιημένο",
        "recentchangesdays": "Ημέρες προς εμφάνιση στις πρόσφατες αλλαγές:",
        "recentchangesdays-max": "($1 {{PLURAL:$1|ημέρα|ημέρες}} το μέγιστο)",
        "newpageletter": "Ν",
        "boteditletter": "ρ",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|χρήστης|χρήστες}} παρακολουθούν]",
-       "rc_categories": "Περιόρισε στις κατηγορίες (διαχωρίστε τις με \"|\")",
-       "rc_categories_any": "Οποιαδήποτε",
+       "rc_categories": "Περιορίστε τις κατηγορίες (διαχωρίστε τις με \"|\"):",
+       "rc_categories_any": "Οποιαδήποτε από τις επιλεγμένες",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} μετά από την αλλαγή",
        "newsectionsummary": "/* $1 */ νέα ενότητα",
        "rc-enhanced-expand": "Εμφάνιση λεπτομερειών",
        "upload-scripted-pi-callback": "Δεν είναι δυνατό να ανεβάσετε αρχείο που περιέχει οδηγία επεξεργασίας φύλλου στυλ XML.",
        "uploaded-script-svg": "Βρέθηκε στοιχείο με δυνατότητα δημιουργίας δέσμης ενεργειών «$1» στο ανεβασμένο αρχείο SVG.",
        "uploaded-hostile-svg": "Βρέθηκε μη ασφαλές CSS στο στοιχείο στυλ του ανεβασμένου αρχείου SVG.",
+       "uploaded-event-handler-on-svg": "Δεν επιτρέπεται ο ορισμός ιδιοτήτων χειρισμού συμβάντων <code>$1=\"$2\"</code> σε αρχεία SVG.",
+       "uploaded-href-attribute-svg": "Δεν επιτρέπονται οι ιδιότητες href <code>&lt;$1 $2=\"$3\"&gt;</code> με μη τοπικό προορισμό (π.χ. http://, javascript:, κ.τ.λ.) σε αρχεία SVG.",
+       "uploaded-href-unsafe-target-svg": "Βρέθηκε href προς έναν μη ασφαλή προορισμό <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
+       "uploaded-animate-svg": "Βρέθηκε μία ετικέτα <code>&lt;animate&gt;</code> που ίσως να αλλάζει το href, με την ιδιότητα \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
+       "uploaded-setting-event-handler-svg": "Η ρύθμιση ιδιοτήτων χειρισμού σφαλμάτων είναι αποκλεισμένη, βρέθηκε <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-setting-href-svg": "Η χρήση της ετικέτας «set» για την προσθήκη του χαρακτηριστικού «href» στο γονικό στοιχείο είναι αποκλεισμένη.",
        "uploaded-wrong-setting-svg": "Η χρήση της ετικέτας «set» για την προσθήκη απομακρυσμένου προορισμού/προορισμού δεδομένων/προορισμού δέσμης ενεργειών είναι αποκλεισμένη. Βρέθηκε <code>&lt;set to=\"$1\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-setting-handler-svg": "Κάθε SVG που θέτει το χαρακτηριστικό «χειρισμού» με απομακρυσμένο προορισμό/προορισμό δεδομένων/προορισμό δέσμης ενεργειών είναι αποκλεισμένο. Βρέθηκε <code>$1=\"$2\"</code> στο ανεβασμένο αρχείο SVG.",
        "upload-too-many-redirects": "Το URL περιείχε πάρα πολλές ανακατευθύνσεις",
        "upload-http-error": "Εμφανίστηκε κάποιο σφάλμα HTTP: $1",
        "upload-copy-upload-invalid-domain": "Δεν υπάρχουν διαθέσιμα ανεβάσματα αντιγράφων από αυτό τον τομέα.",
+       "upload-dialog-title": "Ανέβασμα αρχείου",
+       "upload-dialog-error": "Ένα σφάλμα συνέβη",
+       "upload-dialog-warning": "Προέκυψε μία προειδοποίηση",
+       "upload-dialog-button-cancel": "Ακύρωση",
+       "upload-dialog-button-done": "Ολοκληρώθηκε",
+       "upload-dialog-button-save": "Αποθήκευση",
+       "upload-dialog-button-upload": "Ανέβασμα",
+       "upload-dialog-label-select-file": "Επιλογή αρχείου",
+       "upload-dialog-label-infoform-title": "Λεπτομέρειες",
+       "upload-dialog-label-infoform-name": "Όνομα",
+       "upload-dialog-label-infoform-description": "Περιγραφή",
+       "upload-dialog-label-usage-title": "Χρήση",
+       "upload-dialog-label-usage-filename": "Όνομα αρχείου",
        "backend-fail-stream": "Αδύνατη η μετάδοση του αρχείου $1.",
        "backend-fail-backup": "Αδύνατη η δημιουργία αντίγραφου ασφαλείας του αρχείου $1.",
        "backend-fail-notexists": "Το αρχείο $1 δεν υπάρχει.",
        "lockmanager-fail-db-bucket": "Δεν ήταν δυνατή η εντόπιση αρκετών αρχείων δεδομένων κλειδωμάτων στο σύστημα $1.",
        "lockmanager-fail-db-release": "Δεν ήταν δυνατή η έκδοση κλειδωμάτων για τη βάση δεδομένων $1.",
        "lockmanager-fail-svr-acquire": "Δεν ήταν δυνατή η απόκτηση κλειδωμάτων στο σέρβερ $1.",
+       "lockmanager-fail-svr-release": "Δεν ήταν δυνατή η απόκτηση κλειδωμάτων στο διακομιστή $1.",
        "zip-file-open-error": "Παρουσιάστηκε σφάλμα κατά το άνοιγμα του αρχείου για ZIP ελέγχους.",
        "zip-wrong-format": "Το καθορισμένο αρχείο δεν ήταν  αρχείο ZIP.",
        "zip-bad": "Το αρχείο είναι κατεστραμμένο ή με άλλο τρόπο μη αναγνώσιμο αρχείο ZIP.! N! Δεν μπορεί να ελεγχθεί  δεόντως ως προς την ασφάλεια.",
        "unwatchedpages": "Μη παρακολουθούμενες σελίδες",
        "listredirects": "Λίστα ανακατευθύνσεων",
        "listduplicatedfiles": "Κατάλογος αρχείων με διπλότυπα",
+       "listduplicatedfiles-summary": "Αυτή είναι μια λίστα αρχείων, όπου η πιο πρόσφατη έκδοση του κάθε αρχείου είναι ένα αντίγραφο της πιο πρόσφατης έκδοσης κάποιου άλλου αρχείου. Μόνο τοπικά αρχεία λαμβάνονται υπόψη.",
        "listduplicatedfiles-entry": "Το [[:File:$1|$1]] έχει [[$3|{{PLURAL:$2|διπλότυπο|$2 διπλότυπα}}]].",
        "unusedtemplates": "Αχρησιμοποίητα πρότυπα",
        "unusedtemplatestext": "Αυτή η σελίδα περιέχει όλες τις σελίδες στην περιοχή ονομάτος των {{ns:template}}, οι οποίες δεν περιλαμβάνονται σε άλλη σελίδα. Θυμηθείτε να ελέγξετε για άλλους συνδέσμους προς τα πρότυπα πριν τα διαγράψετε.",
        "pageswithprop-text": "Αυτή η σελίδα ταξινομεί σελίδες που χρησιμοποιούν μια συγκεκριμένη ιδιότητα σελίδας.",
        "pageswithprop-prop": "Όνομα ιδιότητας:",
        "pageswithprop-submit": "Μετάβαση",
+       "pageswithprop-prophidden-long": "τιμή ιδιότητας μακρού κειμένου κρυμμένη ($1)",
+       "pageswithprop-prophidden-binary": "τιμή ιδιότητας δυαδικών δεδομένων κρυμμένη ($1)",
        "doubleredirects": "Διπλές ανακατευθύνσεις",
        "doubleredirectstext": "Αυτή η σελίδα καταγράφει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. \nΚάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη ανακατεύθυνση, όπως επίσης και προς τον προορισμό της δεύτερης ανακατεύθυνσης, η οποία και είναι συνήθως η «πραγματική» σελίδα προορισμού στην οποία πρέπει να δείχνει η πρώτη ανακατεύθυνση. \nΤα <del>διαγεγραμμένα</del> λήμματα έχουν επιλυθεί.",
        "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
        "unusedimages": "Αχρησιμοποίητες εικόνες",
        "wantedcategories": "Επιθυμητές κατηγορίες",
        "wantedpages": "Ζητούμενες σελίδες",
+       "wantedpages-summary": "Λίστα των ανύπαρκτων σελίδων με τους περισσότερους συνδέσμους προς αυτές, εξαιρουμένων των σελίδων στις οποίες συνδέονται μόνο σελίδες ανακατεύθυνσης. Για μία λίστα με τις ανύπαρκτες σελίδες στις οποίες συνδέονται σελίδες ανακατεύθυνσης, δείτε [[{{#special:BrokenRedirects}}| τη λίστα με τις λανθασμένες ανακατευθύνσεις]].",
        "wantedpages-badtitle": "Μη εγκυρός τίτλος στο σύνολο αποτελέσματος: $1",
        "wantedfiles": "Ζητούμενα αρχεία",
        "wantedfiletext-cat": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Αρχεία από εξωτερικά αποθετήρια ενδέχεται να παρατίθενται παρότι υπάρχουν. Κάθε τέτοιες λανθασμένες αναφορές θα <del>διαγραμμίζονται</del>. Επιπλέον, σελίδες που ενσωματώνουν αρχεία που δεν υπάρχουν παρατίθενται στο [[:$1]].",
        "deadendpagestext": "Οι σελίδες που ακολουθούν δεν συνδέονται με άλλες σελίδες στο {{SITENAME}}.",
        "protectedpages": "Προστατευμένες σελίδες",
        "protectedpages-indef": "Προστασίες επαόριστον μόνο",
+       "protectedpages-summary": "Αυτή η σελίδα περιέχει υπάρχουσες σελίδες που τώρα είναι προστατευμένες. Για μία λίστα τίτλων που προστατεύονται από τη δημιουργία των σελίδων, δείτε τους [[{{#special:ProtectedTitles}}|Προστατευμένους τίτλους]].",
        "protectedpages-cascade": "Μόνο διαδοχικές προστασίες",
        "protectedpages-noredirect": "Απόκρυψη ανακατευθύνσεων",
        "protectedpagesempty": "Καμία σελίδα με αυτές τις παραμέτρους δεν είναι προς το παρόν προστατευμένη.",
        "protectedpages-unknown-timestamp": "Άγνωστο",
        "protectedpages-unknown-performer": "Άγνωστος χρήστης",
        "protectedtitles": "Προστατευμένοι τίτλοι",
+       "protectedtitles-summary": "Αυτή η σελίδα περιέχει τίτλους που προστατεύονται από δημιουργία σελίδας. Για μία λίστα υπάρχουσων σελίδων που προστατεύονται, δείτε τις [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Δεν υπάρχουν προστατευμένοι τίτλοι με αυτές τις παραμέτρους.",
        "listusers": "Κατάλογος χρηστών",
        "listusers-editsonly": "Εμφάνιση μόνο των χρηστών με επεξεργασίες",
        "booksources-text": "Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:",
        "booksources-invalid-isbn": "Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.",
        "specialloguserlabel": "",
-       "speciallogtitlelabel": "Στόχος (τίτλος ή χρήστης):",
+       "speciallogtitlelabel": "Στόχος (τίτλος ή {{ns:user}}:χρήστης για χρήστη):",
        "log": "Αρχεία καταγραφών",
        "all-logs-page": "Όλες οι δημόσιες καταγραφές γεγονότων",
        "alllogstext": "Εποπτική εμφάνιση όλων των ενεργειών φόρτωσης αρχείων, διαγραφής, προστασίας, φραγής και όλων των καταγραφών των διαχειριστών στο αρχείο γεγονότων του {{SITENAME}}. Μπορείτε να περιορίσετε τα αποτελέσματα που εμφανίζονται επιλέγοντας συγκεκριμένο είδος γεγονότων, όνομα χρήστη ή τη σελίδα που επηρεάστηκε.",
        "linksearch-pat": "Μοτίβο αναζήτησης:",
        "linksearch-ns": "Περιοχή:",
        "linksearch-ok": "Αναζήτηση",
-       "linksearch-text": "Μπορούν να χρησιμοποιηθούν χαρακτήρες μπαλαντέρ όπως \"*.wikipedia.org\". \nΧρειάζεται τουλάχιστον μια κατάληξη ανωτάτου επιπέδου, για παράδειγμα \"*.org\".<br />\n{{PLURAL:$2|Υποστηριζόμενο πρωτόκολλο|Υποστηριζόμενα πρωτόκολλα}}: <code>$1</code> (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).",
+       "linksearch-text": "Μπορούν να χρησιμοποιηθούν χαρακτήρες μπαλαντέρ όπως \"*.wikipedia.org\". \nΧρειάζεται τουλάχιστον μια κατάληξη ανωτάτου επιπέδου, για παράδειγμα \"*.org\".<br />\n{{PLURAL:$2|Υποστηριζόμενο πρωτόκολλο|Υποστηριζόμενα πρωτόκολλα}}: $1 (αν δεν οριστεί πρωτόκολλο η προεπιλογή είναι http://).",
        "linksearch-line": "Η σελίδα $1 συνδέεται από την $2",
        "linksearch-error": "Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).",
        "listusersfrom": "Προβολή χρηστών ξεκινώντας από:",
        "emailuser": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε αυτόν τον χρήστη",
        "emailuser-title-target": "Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη",
        "emailuser-title-notarget": "Αποστολή e-mail σε χρήστη",
-       "emailpage": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη",
        "emailpagetext": "Μπορείτε να χρησιμοποιήσετε την παρακάτω φόρμα για να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου σε {{GENDER:$1|αυτόν το χρήστη|αυτήν τη χρήστρια}}.\nΗ διεύθυνση ηλεκτρονικού ταχυδρομείου που έχετε εισαγάγει στις [[Special:Preferences|προτιμήσεις χρήστη σας]] θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος ηλεκτρονικού ταχυδρομείου, ούτως ώστε ο παραλήπτης να μπορέσει να απαντήσει απευθείας σε σας.",
        "defemailsubject": "{{SITENAME}} e-mail από τον χρήστη \"$1\"",
        "usermaildisabled": "To e-mail χρήστη είναι απενεργοποιημένο",
        "emailccsubject": "Αντίγραφο του μηνυματός σας στο $1: $2",
        "emailsent": "Το μήνυμα έχει σταλεί",
        "emailsenttext": "Το μήνυμά σας έχει σταλεί.",
-       "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|το χρήστη|τη χρήστρια}} $1 σ{{GENDER:$2|το χρήστη|τη χρήστρια}} $2 μέσω της λειτουργίας «{{int:emailpage}}» στο {{SITENAME}}.",
+       "emailuserfooter": "Αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου στάλθηκε από {{GENDER:$1|το χρήστη|τη χρήστρια}} $1 σ{{GENDER:$2|το χρήστη|τη χρήστρια}} $2 μέσω της λειτουργίας «{{int:emailuser}}» στο {{SITENAME}}.",
        "usermessage-summary": "Φεύγετε από τις ειδοποιήσεις συστήματος.",
        "usermessage-editor": "Μηνύματα συστήματος",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Παρακαλούμε συνδεθείτε για να δείτε ή να επεξεργαστείτε αντικείμενα στη λίστα παρακολούθησής σας.",
        "watchnologin": "Δεν έχετε συνδεθεί.",
        "addwatch": "Προσθήκη στη λίστα παρακολούθησης",
-       "addedwatchtext": "Î\97 Ï\83ελίδα Â«[[:$1]]» Î­Ï\87ει Ï\80Ï\81οÏ\83Ï\84εθεί Ï\83Ï\84η [[Special:Watchlist|λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82]].\nÎ\9cελλονÏ\84ικέÏ\82 Î±Î»Î»Î±Î³Î­Ï\82 Ï\83ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα ÎºÎ±Î¹ Ï\83Ï\84η Ï\83Ï\85Ï\83Ï\87εÏ\84ιÏ\83μένη Ï\83ελίδα Ï\83Ï\85ζήÏ\84ηÏ\83ήÏ\82 Ï\84ηÏ\82 Î¸Î± ÎµÎ¼Ï\86ανίζονÏ\84αι ÎµÎ´Ï\8e.",
+       "addedwatchtext": "Το Î»Î®Î¼Î¼Î± Â«[[:$1]]» ÎºÎ±Î¹ Î· Ï\83ελίδα Ï\83Ï\85ζήÏ\84ηÏ\83ήÏ\82 Ï\84οÏ\85 Î­Ï\87οÏ\85ν Ï\80Ï\81οÏ\83Ï\84εθεί Ï\83Ï\84η [[Special:Watchlist|λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82]] Ï\83αÏ\82.",
        "addedwatchtext-short": "Η σελίδα «$1» έχει προστεθεί στην λίστα παρακολούθησής σας.",
        "removewatch": "Αφαίρεση από τη λίστα παρακολούθησης",
-       "removedwatchtext": "Î\97 Ï\83ελίδα \"[[:$1]]\" Î­Ï\87ει Î±Ï\86αιÏ\81εθεί Î±Ï\80Ï\8c [[Special:Watchlist|Ï\84η Î»Î¯Ï\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82]].",
+       "removedwatchtext": "Το Î»Î®Î¼Î¼Î± Â«[[:$1]]» ÎºÎ±Î¹ Î· Ï\83ελίδα Ï\83Ï\85ζήÏ\84ηÏ\83ήÏ\82 Ï\84οÏ\85 Î­Ï\87οÏ\85ν Î±Ï\86αιÏ\81εθεί Î±Ï\80Ï\8c Ï\84η [[Special:Watchlist|λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82]] Ï\83αÏ\82.",
        "removedwatchtext-short": "Η σελίδα «$1» έχει αφαιρεθεί από τη λίστα παρακολούθησής σας.",
        "watch": "Παρακολούθηση",
        "watchthispage": "Παρακολούθηση αυτής της σελίδας",
        "rollback-success": "Ανεστραμμένες εκδόσεις από $1, αλλάχθηκαν στην προηγούμενη έκδοση από $2.",
        "sessionfailure-title": "Η συνεδρία απέτυχε",
        "sessionfailure": "Υπάρχει πρόβλημα με τη σύνδεσή σας -η ενέργεια αυτή ακυρώθηκε προληπτικά για την αντιμετώπιση τυχόν πειρατείας συνόδου (session hijacking). Παρακαλoύμε πατήστε \"Επιστροφή\", ξαναφορτώστε τη σελίδα από την οποία φθάσατε εδώ και προσπαθήστε ξανά.",
+       "changecontentmodel": "Αλλαγή μοντέλου περιεχομένου της σελίδας",
+       "changecontentmodel-legend": "Μοντέλο περιεχομένου σελίδας",
+       "changecontentmodel-title-label": "Τίτλος σελίδας",
+       "changecontentmodel-model-label": "Νέο μοντέλο περιεχομένου",
+       "changecontentmodel-reason-label": "Αιτία:",
+       "logentry-contentmodel-change": "{{GENDER:$2|Ο|Η}} $1 άλλαξε το πρότυπο περιεχομένου της σελίδας $3 από «$4» σε «$5»",
+       "logentry-contentmodel-change-revertlink": "αναστροφή",
+       "logentry-contentmodel-change-revert": "αναστροφή",
        "protectlogpage": "Αρχείο καταγραφών προστασίας",
        "protectlogtext": "Παρακάτω είναι μια λίστα αλλαγών που έγιναν στις ρυθμίσεις προστασίας.\nΡίξτε μια ματιά στη [[Special:ProtectedPages|λίστα προστατευμένων σελίδων]] για ένα κατάλογο των τρεχουσών ρυθμίσεων προστασίας σελίδων.",
        "protectedarticle": "προστάτευσε τη σελίδα «[[$1]]»",
        "protect-locked-blocked": "Δεν μπορείτε να αλλάξετε επίπεδα προστασίας ενώ είστε σε φραγή.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
        "protect-locked-dblock": "Τα επίπεδα προστασίας δεν μπορούν να αλλαχθούν λόγω ενός ενεργού κλεδώματος της βάσης δεδομένων.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
        "protect-locked-access": "Ο λογαριασμός σας δεν έχει δικαίωμα να αλλάξει τα επίπεδα προστασίας σελίδας.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
-       "protect-cascadeon": "Αυτή η σελίδα είναι προς το παρόν προστατευμένη επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, η οποία έχει|στις ακόλουθες σελίδες, οι οποίες έχουν}} τη διαδοχική προστασία ενεργοποιημένη. Αλλαγές στο επίπεδο προστασίας αυτής της σελίδας δεν θα επηρεάσουν τη διαδοχική προστασία.",
+       "protect-cascadeon": "Αυτή η σελίδα είναι προς το παρόν προστατευμένη επειδή ενσωματώνεται {{PLURAL:$1|στην ακόλουθη σελίδα, η οποία έχει|στις ακόλουθες σελίδες, οι οποίες έχουν}} τη διαδοχική προστασία ενεργοποιημένη. Αλλαγές στο επίπεδο προστασίας αυτής της σελίδας δεν θα επηρεάσουν τη διαδοχική προστασία.",
        "protect-default": "Να επιτρέπονται όλοι οι χρήστες",
        "protect-fallback": "Να επιτρέπεται μόνο σε χρήστες με δικαιώματα «$1»",
        "protect-level-autoconfirmed": "Να επιτρέπονται μόνο αυτοεπιβεβαιωμένοι χρήστες",
        "undeletepagetext": "{{PLURAL:$1|Η σελίδα που ακολουθεί έχει|$1 Οι σελίδες που ακολουθούν έχουν}} διαγραφεί αλλά {{PLURAL:βρίσκεται|βρίσκονται}} ακόμα {{PLURAL:αποθηκευμένη|αποθηκευμένες}} στο αρχείο και {{PLURAL:μπορεί να αποκατασταθεί|μπορούν να αποκατασταθούν}}. Κατά καιρούς γίνεται εκκαθάριση του αρχείου.",
        "undelete-fieldset-title": "Αποκατάσταση αναθεωρήσεων",
        "undeleteextrahelp": "Για να επαναφέρετε ολόκληρο το ιστορικό της σελίδας, μην επιλέγετε κανένα πλαίσιο ελέγχου και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.\nΓια να κάνετε μια προσαρμοσμένη επαναφορά, επιλέξτε τα πλαίσια που αντιστοιχούν στις αναθεωρήσεις που πρόκειται να επαναφερθούν και κάντε κλικ στο '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}} αρχειοθετήθηκαν.",
+       "undeleterevisions": "$1 {{PLURAL:$1|τροποποίηση αρχειοθετήθηκε|τροποποιήσεις αρχειοθετήθηκαν}}.",
        "undeletehistory": "Αν επαναφέρετε την σελίδα, όλες οι εκδόσεις θα επαναφερθούν στο ιστορικό.\n\nΑν μια νέα σελίδα με το ίδιο όνομα δημιουργήθηκε μετά την διαγραφή, οι επαναφερμένες εκδόσεις θα εμφανιστούν στο πρότερο ιστορικό.",
        "undeleterevdel": "Η επαναφορά δεν θα εκτελεστεί αν θα έχει ως αποτέλεσμα η πιο πρόσφατη έκδοση της σελίδας ή αρχείου να είναι διαγεγραμμένη μερικώς. Σε τέτοιες περιπτώσεις, πρέπει να αποεπιλέξετε ή να εμφανίσετε την νεότερη διαγεγραμμένη έκδοση.",
        "undeletehistorynoadmin": "Αυτό το άρθρο έχει διαγραφεί. Ο λόγος για τη διαγραφή φαίνεται\nστη σύνοψη παρακάτω, μαζί με λεπτομέρειες των χρηστών που επεξεργάστηκαν τη σελίδα\nπριν τη διαγραφή. Το αρχικό κείμενο αυτών των διεγραμμένων αναθεωρήσεων είναι διαθέσιμο μόνο στους διαχειριστές.",
        "proxyblockreason": "Η διεύθυνση IP σας έχει υποστεί φραγή γιατί είναι open proxy. Παρακαλούμε επικοινωνείστε με τον παροχέα υπηρεσιών Διαδικτύου που χρησιμοποιείτε ή με την τεχνική υποστήριξη, για να θέσετε υπ΄ όψη τους αυτό το σοβαρό θέμα ασφάλειας.",
        "sorbsreason": "Η διεύθυνση IP σας έχει χαρακτηρισθεί ως open proxy στο DNSBL.",
        "sorbs_create_account_reason": "Η διεύθυνση IP σας έχει χαρακτηρισθεί open proxy στο DNSBL. Δεν μπορείτε να δημιουργήσετε λογαριασμό χρήστη.",
+       "xffblockreason": "Μια διεύθυνση IP που υπάρχει στο X-Forwarded-For header, είτε τη δική σας ή του διακομιστή μεσολάβησης που χρησιμοποιείτε, έχει φραγεί. Ο αρχικός λόγος φραγής ήταν: $1",
        "cant-see-hidden-user": "Ο χρήστης που προσπαθείτε να αποκλείσετε έχει ήδη αποκλειστεί και αποκρυφτεί.\nΔεδομένου ότι δεν έχετε το δικαίωμα hideuser, δεν μπορείτε να δείτε ή να επεξεργαστείτε την φραγή του χρήστη.",
        "ipbblocked": "Δεν μπορείτε να βάλετε ή να αναιρέσετε φραγή σε άλλους χρήστες, επειδή είστε εσείς υπό φραγή",
        "ipbnounblockself": "Δεν έχετε το δικαίωμα να βγάλετε την φραγή από τον εαυτό σας",
        "tooltip-pt-logout": "Έξοδος",
        "tooltip-pt-createaccount": "Σας ενθαρρύνουμε να δημιουργήσετε ένα λογαριασμό και να συνδεθείτε· ωστόσο, δεν είναι υποχρεωτικό",
        "tooltip-ca-talk": "Συζήτηση για τη σελίδα περιεχομένου",
-       "tooltip-ca-edit": "Î\9cÏ\80οÏ\81είÏ\84ε Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Î±Ï\85Ï\84ή Ï\84η Ï\83ελίδα. Î Î±Ï\81ακαλοÏ\8dμε Ï\87Ï\81ηÏ\83ιμοÏ\80οιήÏ\83Ï\84ε Ï\84ο ÎºÎ¿Ï\85μÏ\80ί Ï\80Ï\81οεÏ\80ιÏ\83κÏ\8cÏ\80ηÏ\83ηÏ\82 Ï\80Ï\81ιν Ï\84ην Î±Ï\80οθήκεÏ\85Ï\83η.",
+       "tooltip-ca-edit": "Î\95Ï\80εξεÏ\81γαÏ\83ία Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82",
        "tooltip-ca-addsection": "Ξεκίνημα νέας ενότητας",
        "tooltip-ca-viewsource": "Αυτή η σελίδα είναι προστατευμένη.\nΜπορείτε να προβάλετε τον πηγαίο της κώδικα.",
        "tooltip-ca-history": "Παλιές αναθεωρήσεις του άρθρου.",
        "tooltip-ca-nstab-main": "Προβολή σελίδας περιεχομένου",
        "tooltip-ca-nstab-user": "Προβολή της σελίδας χρήστη",
        "tooltip-ca-nstab-media": "Δείτε τη σελίδα πολυμέσων",
-       "tooltip-ca-nstab-special": "Î\91Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ ÎµÎ¹Î´Î¹ÎºÎ® Ï\83ελίδα, Î´ÎµÎ½ Î¼Ï\80οÏ\81είÏ\84ε Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84είÏ\84ε Ï\84ην Î¯Î´Î¹Î± Ï\84η Ï\83ελίδα",
+       "tooltip-ca-nstab-special": "Î\91Ï\85Ï\84ή ÎµÎ¯Î½Î±Î¹ Î¼Î¹Î± ÎµÎ¹Î´Î¹ÎºÎ® Ï\83ελίδα, ÎºÎ±Î¹ Î´ÎµÎ½ Î¼Ï\80οÏ\81εί Î½Î± ÎµÏ\80εξεÏ\81γαÏ\83Ï\84εί",
        "tooltip-ca-nstab-project": "Προβολή της σελίδας εγχειρήματος",
        "tooltip-ca-nstab-image": "Προβολή της σελίδας αρχείου",
        "tooltip-ca-nstab-mediawiki": "Δείτε το μήνυμα του συστήματος",
        "spam_reverting": "Επαναφορά στην τελευταία έκδοση που δεν περιέχει συνδέσμους στο $1",
        "spam_blanking": "Όλες οι αναθεωρήσεις περιείχαν συνδέσμους προς το $1, εξάλειψη",
        "spam_deleting": "Διαγραφή όλων των αναθεωρήσεων που περιείχαν συνδέσμους προς το $1",
-       "simpleantispam-label": "Î\88λεγÏ\87οÏ\82 Î³Î¹Î± spam.\n<strong>Î\9cÎ\97Î\9d</strong> το συμπληρώσετε αυτό!",
-       "pageinfo-title": "Πληροφορίες για \"$1\"",
+       "simpleantispam-label": "Î\88λεγÏ\87οÏ\82 Î³Î¹Î± spam.\n<strong>Î\9cην</strong> το συμπληρώσετε αυτό!",
+       "pageinfo-title": "Πληροφορίες για «$1»",
        "pageinfo-not-current": "Μας συγχωρείτε, είναι αδύνατο να παράσχουμε αυτή την πληροφορία για παλιές αναθεωρήσεις.",
        "pageinfo-header-basic": "Βασικές πληροφορίες",
        "pageinfo-header-edits": "Ιστορικό επεξεργασίας",
        "pageinfo-robot-index": "Επιτρεπτό",
        "pageinfo-robot-noindex": "Μη επιτρεπτό",
        "pageinfo-watchers": "Αριθμός παρατηρητών σελίδας",
+       "pageinfo-visiting-watchers": "Αριθμός παρατηρητών σελίδας που επισκέφθηκαν τις πρόσφατες αλλαγές",
        "pageinfo-few-watchers": "Λιγότεροι από $1 {{PLURAL:$1| ακόλουθος|ακόλουθοι}}",
+       "pageinfo-few-visiting-watchers": "Μπορεί να υπάρχουν ή να μην υπάρχει χρήστης που παρακολουθεί και επισκέπτεται τις πρόσφατες αλλαγές",
        "pageinfo-redirects-name": "Αριθμός ανακατευθύνσεων σε αυτήν τη σελίδα",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Υποσελίδες αυτής της σελίδας",
        "pageinfo-recent-authors": "Πρόσφατος αριθμός μοναδικών συντακτών",
        "pageinfo-magic-words": "{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)",
-       "pageinfo-templates": "Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|Î\97 Ï\83ελίδα ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι|Î\9fι Ï\83ελίδεÏ\82 ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνονÏ\84αι}} Ï\83ε ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Ενσωματωμένο πρότυπο|Ενσωματωμένα πρότυπα}} ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|Σελίδα Ï\83Ï\84ην Î¿Ï\80οία|ΣελίδεÏ\82 Ï\83Ï\84ιÏ\82 Î¿Ï\80οίεÏ\82}} ÎµÎ½Ï\83Ï\89μαÏ\84Ï\8eνεÏ\84αι ($1)",
        "pageinfo-toolboxlink": "Πληροφορίες σελίδας",
-       "pageinfo-redirectsto": "Ανακατευθύνσεις σε",
+       "pageinfo-redirectsto": "Ανακατευθύνει σε",
        "pageinfo-redirectsto-info": "πληροφορίες",
-       "pageinfo-contentpage": "Î¥Ï\80ολογίζονÏ\84αι Ï\89Ï\82 Ï\83ελίδεÏ\82 περιεχομένου",
+       "pageinfo-contentpage": "Î\9aαÏ\84αμεÏ\84Ï\81άÏ\84αι Ï\89Ï\82 Ï\83ελίδα περιεχομένου",
        "pageinfo-contentpage-yes": "Ναι",
        "pageinfo-protect-cascading": "Οι προστασίες ξεκινούν τη διαδοχή τους από εδώ",
        "pageinfo-protect-cascading-yes": "Ναι",
        "patrol-log-page": "Αρχείο καταγραφής περιπολιών",
        "patrol-log-header": "Αυτός είναι ένας κατάλογος περιπολούμενων αναθεωρήσεων.",
        "log-show-hide-patrol": "$1 καταγραφή επιτήρησης",
+       "log-show-hide-tag": "$1 ετικέττα καταγραφής",
        "deletedrevision": "Η παλιά έκδοση της $1 διαγράφτηκε",
        "filedeleteerror-short": "Σφάλμα κατά τη διαγραφή του αρχείου: $1",
        "filedeleteerror-long": "Αντιμετωπίστηκαν προβλήματα κατά τη διαγραφή του αρχείου:\n\n$1",
        "deletedwhileediting": "'''Προσοχή''': Αυτή η σελίδα έχει διαγραφεί αφότου ξεκινήσατε την επεξεργασία!",
        "confirmrecreate": "Ο χρήστης [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτή τη σελίδα αφότου ξεκινήσατε την επεξεργασία με αιτιολόγηση:\n: ''$2''\nΠαρακαλώ επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτή τη σελίδα.",
        "confirmrecreate-noreason": "Ο χρήστης [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτή τη σελίδα αφότου ξεκινήσατε την επεξεργασία.\nΠαρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτή τη σελίδα.",
-       "recreate": "Î\97 Ï\83ελίδα Î­Ï\87ει Î´Î¹Î±Î³Ï\81αÏ\86εί Î±Ï\80Ï\8c Ï\84Ï\8cÏ\84ε Ï\80οÏ\85 Î±Ï\81Ï\87ίÏ\83αÏ\84ε Î½Î± Ï\84ην ÎµÏ\80εξεÏ\81γάζεÏ\83Ï\84ε. Î Î±Ï\84ήÏ\83Ï\84ε \"$1\" Î³Î¹Î± Î½Î± Ï\84η Î´Î·Î¼Î¹Î¿Ï\85Ï\81γήÏ\83εÏ\84ε Î¾Î±Î½Î¬.",
+       "recreate": "Î\91ναδημιοÏ\85Ï\81γία",
        "confirm_purge_button": "Εντάξει",
        "confirm-purge-top": "Καθαρισμός της λανθάνουσας μνήμης αυτής της σελίδας.",
        "confirm-purge-bottom": "Η εκκαθάριση μιας σελίδας εκκαθαρίζει την μνήμη cache και εξαναγκάζει την πλέον πρόσφατη έκδοση να εμφανιστεί.",
        "watchlisttools-raw": "Επεξεργασία πρωτογενούς λίστας παρακολούθησης",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|συζήτηση]])",
        "duplicate-defaultsort": "'''Προειδοποίηση:''' Το προεπιλεγμένο κλειδί ταξινόμησης «$2» υπερισχύει του προηγούμενου προεπιλεγμένου κλειδιού «$1».",
+       "duplicate-displaytitle": "<strong>Προειδοποίηση:</strong> Ο εμφανιζόμενος τίτλος «$2» παρακάμπτει τον προηγούμενο «$1».",
+       "invalid-indicator-name": "<strong>Σφάλμα:</strong> Η ιδιότητα <code>name</code> των δεικτών κατάστασης σελίδων δεν πρέπει να είναι κενή.",
        "version": "Έκδοση",
        "version-extensions": "Εγκαταστημένες επεκτάσεις",
        "version-skins": "Εγκατεστημένα θέματα εμφάνισης",
        "version-libraries": "Εγκαταστημένες βιβλιοθήκες",
        "version-libraries-library": "Βιβλιοθήκη",
        "version-libraries-version": "Έκδοση",
+       "version-libraries-license": "Άδεια χρήσης",
+       "version-libraries-description": "Περιγραφή",
+       "version-libraries-authors": "Δημιουργοί",
        "redirect": "Ανακατεύθυνση κατά αρχείο, χρήστη, σελίδα ή αναγνωριστικό αναθεώρησης",
        "redirect-legend": "Ανακατεύθυνση σε ένα αρχείο ή μια σελίδα",
        "redirect-submit": "Μετάβαση",
        "tags-delete-reason": "Αιτία:",
        "tags-delete-submit": "Μη αναστρέψιμη διαγραφή αυτής της ετικέτας",
        "tags-delete-not-found": "Η ετικέτα «$1» δεν υπάρχει.",
+       "tags-delete-too-many-uses": "Η ετικέτα «$1» εφαρμόζεται σε πάνω από {{PLURAL:$2|μία αναθεώρηση|$2 αναθεωρήσεις}}, που σημαίνει ότι δεν μπορεί να διαγραφεί.",
+       "tags-delete-warnings-after-delete": "Η ετικέτα «$1» διαγράφηκε με επιτυχία, αλλά {{PLURAL:$2|προέκυψε η ακόλουθη προειδοποίηση|προέκυψαν οι ακόλουθες προειδοποιήσεις}}:",
        "tags-activate-title": "Ενεργοποίηση ετικέτας",
        "tags-activate-question": "Πρόκειται να ενεργοποιήσετε την ετικέτα «$1».",
        "tags-activate-reason": "Αιτία:",
        "tags-update-remove-not-allowed-one": "Η ετικέτα «$1» δεν επιτρέπεται να αφαιρεθεί.",
        "tags-edit-title": "Επεξεργασία ετικετών",
        "tags-edit-manage-link": "Διαχείριση ετικετών",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Επιλεγμένο γεγονός|Επιλεγμένα γεγονότα}} αρχείου καταγραφής:",
+       "tags-edit-revision-legend": "Προσθαφαιρέσετε ετικέτες {{PLURAL:$1|από αυτή την αναθεώρηση|και από τις $1 αναθεωρήσεις}}",
+       "tags-edit-logentry-legend": "Προσθαφαιρέσετε ετικέτες {{PLURAL:$1|από αυτήν την καταχώριση|και από τις $1 καταχωρίσεις}} του αρχείου καταγραφής",
        "tags-edit-existing-tags": "Υπάρχουσες ετικέτες:",
        "tags-edit-existing-tags-none": "''Καμία''",
        "tags-edit-new-tags": "Νέες ετικέτες:",
        "tags-edit-chosen-placeholder": "Επιλέξτε μερικές ετικέτες",
        "tags-edit-chosen-no-results": "Δεν βρέθηκαν ετικέτες που να ταιριάζουν",
        "tags-edit-reason": "Αιτία:",
+       "tags-edit-revision-submit": "Εφαρμογή αλλαγών σε {{PLURAL:$1|αυτή την αναθεώρηση|$1 αναθεωρήσεις}}",
+       "tags-edit-logentry-submit": "Εφαρμογή αλλαγών σε {{PLURAL:$1|αυτήν την καταχώρηση|$1 καταχωρήσεις}} του αρχείου καταγραφής",
        "tags-edit-success": "Οι αλλαγές εφαρμόστηκαν με επιτυχία.",
        "tags-edit-failure": "Οι αλλαγές δεν ήταν δυνατόν να εφαρμοστούν:\n$1",
        "tags-edit-nooldid-title": "Μη έγκυρη αναθεώρηση προορισμού",
        "htmlform-cloner-create": "Προσθήκη περισσοτέρων",
        "htmlform-cloner-delete": "Αφαίρεση",
        "htmlform-cloner-required": "Απαιτείται τουλάχιστον μία τιμή.",
+       "htmlform-title-not-exists": "Ο τίτλος [[:$1]] δεν υπάρχει.",
+       "htmlform-user-not-exists": "Δεν υπάρχει χρήστης με όνομα <strong>$1</strong>.",
+       "htmlform-user-not-valid": "Το <strong>$1</strong> δεν είναι έγκυρο όνομα χρήστη.",
        "sqlite-has-fts": "$1 με υποστήριξη αναζήτησης πλήρους κειμένου",
        "sqlite-no-fts": "$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου",
        "logentry-delete-delete": "{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3",
        "logentry-upload-revert": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
        "log-name-managetags": "Αρχείο καταγραφών διαχείρισης ετικετών",
        "logentry-managetags-create": "{{GENDER:$2|Ο|Η}} $1 δημιούργησε την ετικέτα «$4»",
+       "logentry-managetags-delete": "{{GENDER:$2|Ο|Η}} $1 διέγραψε την ετικέτα «$4» (αφαιρέθηκε από $5 {{PLURAL:$5|αναθεώρηση ή καταχώρηση αρχείου καταγραφής|αναθεωρήσεις και/ή καταχωρήσεις του αρχείου καταγραφής}})",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Ο|Η}} $1 απενεργοποίησε την ετικέτα «$4» για χρήση από χρήστες και bots",
        "log-name-tag": "Αρχείο καταγραφών ετικετών",
+       "logentry-tag-update-add-revision": "{{GENDER:$2|Ο|Η}} $1 πρόσθεσε {{PLURAL:$7|την ετικέτα|τις ετικέτες}} $6 στην αναθεώρηση $4 της σελίδας $3",
+       "logentry-tag-update-remove-revision": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε {{PLURAL:$9|την ετικέτα|τις ετικέτες}} $8 από την αναθεώρηση $4 της σελίδας $3",
+       "logentry-tag-update-revision": "{{GENDER:$2|Ο|Η}} $1 ενημέρωσε ετικέτες στην αναθεώρηση $4 της σελίδας $3 (πρόσθεσε {{PLURAL:$7|την|τις}} $6• αφαίρεσε {{PLURAL:$9|την|τις}} $8)",
        "rightsnone": "(κανένα)",
        "revdelete-summary": "επεξεργασία σύνοψης",
        "feedback-adding": "Προσθήκη σχολίων στην σελίδα...",
        "feedback-termsofuse": "Συμφωνώ να παρέχω παρατηρήσεις σύμφωνα με τους Όρους Χρήσης.",
        "feedback-thanks": "Ευχαριστούμε! Τα σχόλιά σας έχουν καταχωρηθεί στη σελίδα \"[$2 $1]\".",
        "feedback-thanks-title": "Σας ευχαριστούμε!",
+       "feedback-useragent": "User agent:",
        "searchsuggest-search": "Αναζήτηση",
        "searchsuggest-containing": "περιέχει...",
        "api-error-badaccess-groups": "Δεν επιτρέπεται να ανεβάσετε αρχεία σε αυτό το wiki.",
        "special-characters-group-khmer": "καμποτζιανά",
        "special-characters-title-endash": "παύλα",
        "special-characters-title-emdash": "διπλή παύλα",
-       "special-characters-title-minus": "σύμβολο πλην"
+       "special-characters-title-minus": "σύμβολο πλην",
+       "mw-widgets-dateinput-no-date": "Καμία ημερομηνία δεν επιλέχθηκε",
+       "mw-widgets-dateinput-placeholder-day": "ΕΕΕΕ-ΜΜ-ΗΗ",
+       "mw-widgets-dateinput-placeholder-month": "ΕΕΕΕ-ΜΜ",
+       "mw-widgets-titleinput-description-new-page": "η σελίδα που δεν υπάρχει ακόμα",
+       "mw-widgets-titleinput-description-redirect": "ανακατεύθυνση στο $1"
 }
index 3a47bce..5859365 100644 (file)
@@ -21,7 +21,7 @@
        "tog-minordefault": "Mark all edits minor by default",
        "tog-previewontop": "Show preview before edit box",
        "tog-previewonfirst": "Show preview on first edit",
-       "tog-enotifwatchlistpages": "Email me when a page or file on my watchlist is changed",
+       "tog-enotifwatchlistpages": "Email me when a page or file on my watchlist is changed",
        "tog-enotifusertalkpages": "Email me when my user talk page is changed",
        "tog-enotifminoredits": "Email me also for minor edits of pages and files",
        "tog-enotifrevealaddr": "Reveal my email address in notification emails",
        "actionthrottled": "Action throttled",
        "actionthrottledtext": "As an anti-spam measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit.\nPlease try again in a few minutes.",
        "protectedpagetext": "This page has been protected to prevent editing or other actions.",
-       "viewsourcetext": "You can view and copy the source of this page:",
-       "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
+       "viewsourcetext": "You can view and copy the source of this page.",
+       "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page.",
        "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.",
        "translateinterface": "To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-       "cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
+       "cascadeprotected": "This page has been protected from editing because it is transcluded in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
        "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
        "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
        "customjsprotected": "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
        "createacct-benefit-head3": "{{NUMBEROFACTIVEUSERS}}",
        "createacct-benefit-body3": "recent {{PLURAL:$1|contributor|contributors}}",
        "badretype": "The passwords you entered do not match.",
+       "usernameinprogress": "An account creation for this user name is already in progress.\nPlease wait.",
        "userexists": "Username entered already in use.\nPlease choose a different name.",
        "loginerror": "Login error",
        "createacct-error": "Account creation error",
        "readonlywarning": "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>\nYou may wish to copy and paste your text into a text file and save it for later.\n\nThe administrator who locked it offered this explanation: $1",
        "protectedpagewarning": "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>\nThe latest log entry is provided below for reference:",
        "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only registered users can edit it.\nThe latest log entry is provided below for reference:",
-       "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is included in the following cascade-protected {{PLURAL:$1|page|pages}}:",
+       "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is transcluded in the following cascade-protected {{PLURAL:$1|page|pages}}:",
        "titleprotectedwarning": "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>\nThe latest log entry is provided below for reference:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} used in this preview:",
        "search-category": "(category $1)",
        "search-file-match": "(matches file content)",
        "search-suggest": "Did you mean: $1",
+       "search-rewritten": "Showing results for $1. Search instead for $2.",
        "search-interwiki-caption": "Sister projects",
        "search-interwiki-default": "Results from $1:",
        "search-interwiki-custom": "",
        "rows": "Rows:",
        "columns": "Columns:",
        "searchresultshead": "Search",
-       "stub-threshold": "Threshold for <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
+       "stub-threshold": "Threshold for stub link formatting ($1):",
+       "stub-threshold-sample-link": "sample",
        "stub-threshold-disabled": "Disabled",
        "recentchangesdays": "Days to show in recent changes:",
        "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "unpatrolledletter": "!",
        "number_of_watching_users_RCview": "[$1]",
        "number_of_watching_users_pageview": "[$1 watching {{PLURAL:$1|user|users}}]",
-       "rc_categories": "Limit to categories (separate with \"|\")",
-       "rc_categories_any": "Any",
+       "rc_categories": "Limit to categories (separate with \"|\"):",
+       "rc_categories_any": "Any of the chosen",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
        "newsectionsummary": "/* $1 */ new section",
        "upload-too-many-redirects": "The URL contained too many redirects",
        "upload-http-error": "An HTTP error occurred: $1",
        "upload-copy-upload-invalid-domain": "Copy uploads are not available from this domain.",
+       "upload-dialog-title": "Upload file",
+       "upload-dialog-error": "An error occurred",
+       "upload-dialog-warning": "A warning occurred",
+       "upload-dialog-button-cancel": "Cancel",
+       "upload-dialog-button-done": "Done",
+       "upload-dialog-button-save": "Save",
+       "upload-dialog-button-upload": "Upload",
+       "upload-dialog-label-select-file": "Select file",
+       "upload-dialog-label-infoform-title": "Details",
+       "upload-dialog-label-infoform-name": "Name",
+       "upload-dialog-label-infoform-description": "Description",
+       "upload-dialog-label-usage-title": "Usage",
+       "upload-dialog-label-usage-filename": "File name",
        "backend-fail-stream": "Could not stream file \"$1\".",
        "backend-fail-backup": "Could not backup file \"$1\".",
        "backend-fail-notexists": "The file $1 does not exist.",
        "statistics-header-users": "User statistics",
        "statistics-header-hooks": "Other statistics",
        "statistics-articles": "Content pages",
+       "statistics-articles-desc": "",
        "statistics-pages": "Pages",
        "statistics-pages-desc": "All pages in the wiki, including talk pages, redirects, etc.",
        "statistics-files": "Uploaded files",
        "rfcurl": "//tools.ietf.org/html/rfc$1",
        "pubmedurl": "//www.ncbi.nlm.nih.gov/pubmed/$1?dopt=Abstract",
        "specialloguserlabel": "Performer:",
-       "speciallogtitlelabel": "Target (title or user):",
+       "speciallogtitlelabel": "Target (title or {{ns:user}}:username for user):",
        "log": "Logs",
        "all-logs-page": "All public logs",
        "alllogstext": "Combined display of all available logs of {{SITENAME}}.\nYou can narrow down the view by selecting a log type, the username (case-sensitive), or the affected page (also case-sensitive).",
        "linksearch-pat": "Search pattern:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Search",
-       "linksearch-text": "Wildcards such as \"*.wikipedia.org\" may be used.\nNeeds at least a top-level domain, for example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// if no protocol is specified).",
+       "linksearch-text": "Wildcards such as \"*.wikipedia.org\" may be used.\nNeeds at least a top-level domain, for example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: $1 (defaults to http:// if no protocol is specified).",
        "linksearch-line": "$1 is linked from $2",
        "linksearch-error": "Wildcards may appear only at the start of the hostname.",
        "listusersfrom": "Display users starting at:",
        "emailuser-title-target": "Email this {{GENDER:$1|user}}",
        "emailuser-title-notarget": "Email user",
        "emailuser-summary": "",
-       "emailpage": "Email user",
        "emailpagetext": "You can use the form below to send an email message to this {{GENDER:$1|user}}.\nThe email address you entered in [[Special:Preferences|your user preferences]] will appear as the \"From\" address of the email, so the recipient will be able to reply directly to you.",
        "defemailsubject": "{{SITENAME}} email from user \"$1\"",
        "usermaildisabled": "User email disabled",
        "emailccsubject": "Copy of your message to $1: $2",
        "emailsent": "Email sent",
        "emailsenttext": "Your email message has been sent.",
-       "emailuserfooter": "This email was sent by $1 to $2 by the \"{{int:emailpage}}\" function at {{SITENAME}}.",
+       "emailuserfooter": "This email was sent by $1 to $2 by the \"{{int:emailuser}}\" function at {{SITENAME}}.",
        "usermessage-summary": "Leaving system message.",
        "usermessage-editor": "System messenger",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Please log in to view or edit items on your watchlist.",
        "watchnologin": "Not logged in",
        "addwatch": "Add to watchlist",
-       "addedwatchtext": "The page \"[[:$1]]\" has been added to your [[Special:Watchlist|watchlist]].\nFuture changes to this page and its associated talk page will be listed there.",
+       "addedwatchtext": "\"[[:$1]]\" and its discussion page have been added to your [[Special:Watchlist|watchlist]].",
        "addedwatchtext-short": "The page \"$1\" has been added to your watchlist.",
        "removewatch": "Remove from watchlist",
-       "removedwatchtext": "The page \"[[:$1]]\" has been removed from [[Special:Watchlist|your watchlist]].",
+       "removedwatchtext": "\"[[:$1]]\" and its discussion page have been removed from your [[Special:Watchlist|watchlist]].",
        "removedwatchtext-short": "The page \"$1\" has been removed from your watchlist.",
        "watch": "Watch",
        "watchthispage": "Watch this page",
        "changecontentmodel-success-title": "The content model was changed",
        "changecontentmodel-success-text": "The content type of [[:$1]] has been changed.",
        "changecontentmodel-cannot-convert": "The content on [[:$1]] cannot be converted to a type of $2.",
-       "changecontentmodel-title-cantexist": "It is not possible to have a page at $1.",
        "changecontentmodel-nodirectediting": "The $1 content model does not support direct editing",
        "log-name-contentmodel": "Content model change log",
        "log-description-contentmodel": "Events related to the content models of a page",
        "protect-locked-blocked": "You cannot change protection levels while blocked.\nHere are the current settings for the page <strong>$1</strong>:",
        "protect-locked-dblock": "Protection levels cannot be changed due to an active database lock.\nHere are the current settings for the page <strong>$1</strong>:",
        "protect-locked-access": "Your account does not have permission to change page protection levels.\nHere are the current settings for the page <strong>$1</strong>:",
-       "protect-cascadeon": "This page is currently protected because it is included in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.\nChanges to this page's protection level will not affect the cascading protection.",
+       "protect-cascadeon": "This page is currently protected because it is transcluded in the following {{PLURAL:$1|page, which has|pages, which have}} cascading protection turned on.\nChanges to this page's protection level will not affect the cascading protection.",
        "protect-default": "Allow all users",
        "protect-fallback": "Allow only users with \"$1\" permission",
        "protect-level-autoconfirmed": "Allow only autoconfirmed users",
        "undeletepagetext": "The following {{PLURAL:$1|page has been deleted but is|$1 pages have been deleted but are}} still in the archive and can be restored.\nThe archive may be periodically cleaned out.",
        "undelete-fieldset-title": "Restore revisions",
        "undeleteextrahelp": "To restore the page's entire history, leave all checkboxes deselected and click <strong><em>{{int:undeletebtn}}</em></strong>.\nTo perform a selective restoration, check the boxes corresponding to the revisions to be restored, and click <strong><em>{{int:undeletebtn}}</em></strong>.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revision|revisions}} archived",
+       "undeleterevisions": "$1 {{PLURAL:$1|revision|revisions}} deleted",
        "undeletehistory": "If you restore the page, all revisions will be restored to the history.\nIf a new page with the same name has been created since the deletion, the restored revisions will appear in the prior history.",
        "undeleterevdel": "Undeletion will not be performed if it will result in the top page or file revision being partially deleted.\nIn such cases, you must uncheck or unhide the newest deleted revision.",
        "undeletehistorynoadmin": "This page has been deleted.\nThe reason for deletion is shown in the summary below, along with details of the users who had edited this page before deletion.\nThe actual text of these deleted revisions is only available to administrators.",
        "tooltip-ca-watch": "Add this page to your watchlist",
        "tooltip-ca-unwatch": "Remove this page from your watchlist",
        "tooltip-search": "Search {{SITENAME}}",
-       "tooltip-search-go": "Go to a page with this exact name if exists",
+       "tooltip-search-go": "Go to a page with this exact name if it exists",
        "tooltip-search-fulltext": "Search the pages for this text",
        "tooltip-p-logo": "Visit the main page",
        "tooltip-n-mainpage": "Visit the main page",
        "tooltip-t-recentchangeslinked": "Recent changes in pages linked from this page",
        "tooltip-feed-rss": "RSS feed for this page",
        "tooltip-feed-atom": "Atom feed for this page",
-       "tooltip-t-contributions": "A list of contributions of this user",
+       "tooltip-t-contributions": "A list of contributions by this user",
        "tooltip-t-emailuser": "Send an email to this user",
        "tooltip-t-info": "More information about this page",
        "tooltip-t-upload": "Upload files",
        "tooltip-ca-nstab-main": "View the content page",
        "tooltip-ca-nstab-user": "View the user page",
        "tooltip-ca-nstab-media": "View the media page",
-       "tooltip-ca-nstab-special": "This is a special page, you cannot edit the page itself",
+       "tooltip-ca-nstab-special": "This is a special page, and it cannot be edited",
        "tooltip-ca-nstab-project": "View the project page",
        "tooltip-ca-nstab-image": "View the file page",
        "tooltip-ca-nstab-mediawiki": "View the system message",
        "tooltip-ca-nstab-category": "View the category page",
        "tooltip-minoredit": "Mark this as a minor edit",
        "tooltip-save": "Save your changes",
-       "tooltip-preview": "Preview your changes, please use this before saving!",
+       "tooltip-preview": "Preview your changes. Please use this before saving.",
        "tooltip-diff": "Show which changes you made to the text",
        "tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
        "tooltip-watch": "Add this page to your watchlist",
        "spam_reverting": "Reverting to last revision not containing links to $1",
        "spam_blanking": "All revisions contained links to $1, blanking",
        "spam_deleting": "All revisions contained links to $1, deleting",
-       "simpleantispam-label": "Anti-spam check.\nDo <strong>NOT</strong> fill this in!",
+       "simpleantispam-label": "Anti-spam check.\nDo <strong>not</strong> fill this in!",
        "pageinfo-header": "-",
        "pageinfo-title": "Information for \"$1\"",
        "pageinfo-not-current": "Sorry, it's impossible to provide this information for old revisions.",
        "pageinfo-robot-index": "Allowed",
        "pageinfo-robot-noindex": "Disallowed",
        "pageinfo-watchers": "Number of page watchers",
-       "pageinfo-visiting-watchers": "Number of page watchers visiting recent edits",
+       "pageinfo-visiting-watchers": "Number of page watchers who visited recent edits",
        "pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-few-visiting-watchers": "There may or may not be a watching user visiting recent edits",
        "pageinfo-redirects-name": "Number of redirects to this page",
        "autosumm-new": "Created page with \"$1\"",
        "autosumm-newblank": "Created blank page",
        "autoblock_whitelist": "AOL http://webmaster.info.aol.com/proxyinfo.html\n*64.12.96.0/19\n*149.174.160.0/20\n*152.163.240.0/21\n*152.163.248.0/22\n*152.163.252.0/23\n*152.163.96.0/22\n*152.163.100.0/23\n*195.93.32.0/22\n*195.93.48.0/22\n*195.93.64.0/19\n*195.93.96.0/19\n*195.93.16.0/20\n*198.81.0.0/22\n*198.81.16.0/20\n*198.81.8.0/23\n*202.67.64.128/25\n*205.188.192.0/20\n*205.188.208.0/23\n*205.188.112.0/20\n*205.188.146.144/30\n*207.200.112.0/21",
-       "size-bytes": "$1 B",
+       "size-bytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
        "size-exabytes": "$1 EB",
        "size-zetabytes": "$1 ZB",
        "size-yottabytes": "$1 YB",
-       "size-pixel": "$1 P",
+       "size-pixel": "$1 {{PLURAL:$1|pixel|pixels}}",
        "size-kilopixel": "$1 KP",
        "size-megapixel": "$1 MP",
        "size-gigapixel": "$1 GP",
        "watchlistedit-normal-legend": "Remove titles from watchlist",
        "watchlistedit-normal-explain": "Titles on your watchlist are shown below.\nTo remove a title, check the box next to it, and click \"{{int:Watchlistedit-normal-submit}}\".\nYou can also [[Special:EditWatchlist/raw|edit the raw list]].",
        "watchlistedit-normal-submit": "Remove titles",
-       "watchlistedit-normal-done": "{{PLURAL:$1|1 title was|$1 titles were}} removed from your watchlist:",
+       "watchlistedit-normal-done": "{{PLURAL:$1|A single title was|$1 titles were}} removed from your watchlist:",
        "watchlistedit-raw-title": "Edit raw watchlist",
        "watchlistedit-raw-legend": "Edit raw watchlist",
        "watchlistedit-raw-explain": "Titles on your watchlist are shown below, and can be edited by adding to and removing from the list;\none title per line.\nWhen finished, click \"{{int:Watchlistedit-raw-submit}}\".\nYou can also [[Special:EditWatchlist|use the standard editor]].",
        "htmlform-cloner-create": "Add more",
        "htmlform-cloner-delete": "Remove",
        "htmlform-cloner-required": "At least one value is required.",
+       "htmlform-title-badnamespace": "[[:$1]] is not in the \"{{ns:$2}}\" namespace.",
+       "htmlform-title-not-creatable": "\"$1\" is not a creatable page title",
+       "htmlform-title-not-exists": "[[:$1]] does not exist.",
+       "htmlform-user-not-exists": "<strong>$1</strong> does not exist.",
+       "htmlform-user-not-valid": "<strong>$1</strong> isn't a valid username.",
        "sqlite-has-fts": "$1 with full-text search support",
        "sqlite-no-fts": "$1 without full-text search support",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
        "logentry-newusers-create2": "User account $3 was {{GENDER:$2|created}} by $1",
        "logentry-newusers-byemail": "User account $3 was {{GENDER:$2|created}} by $1 and password was sent by email",
        "logentry-newusers-autocreate": "User account $1 was {{GENDER:$2|created}} automatically",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|moved}} protection settings from $4 to $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|changed}} group membership for $3 from $4 to $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|changed}} group membership for $3",
        "logentry-rights-autopromote": "$1 was automatically {{GENDER:$2|promoted}} from $4 to $5",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "minus sign",
+       "mw-widgets-dateinput-no-date": "No date selected",
+       "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "YYYY-MM",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
        "mw-widgets-titleinput-description-redirect": "redirect to $1"
 }
index 3e900cc..e89a289 100644 (file)
@@ -39,7 +39,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Fitoschido",
-                       "Sudastelaro"
+                       "Sudastelaro",
+                       "Ochilov"
                ]
        },
        "tog-underline": "Substreki ligilojn",
        "passwordreset": "Restarigo de pasvorto",
        "passwordreset-text-one": "Plenigu ĉi tiun formularon por renovigi vian pasvorton.",
        "passwordreset-text-many": "{{PLURAL:$1|Plenumu unu el la kampoj por restarigi vian pasvorton.}}",
-       "passwordreset-legend": "Refari pasvorton",
        "passwordreset-disabled": "Pasvortaj restarigoj estis malŝaltitaj en ĉi tiu vikio.",
        "passwordreset-emaildisabled": "Retpoŝtaj funkcioj estas malfunkciigitaj en tiu ĉi vikio.",
        "passwordreset-username": "Salutnomo:",
        "changeemail-oldemail": "Aktuala retpoŝtadreso:",
        "changeemail-newemail": "Nova retpoŝtadreso:",
        "changeemail-none": "(nenio)",
-       "changeemail-password": "Via {{SITENAME}}-ensalutado:",
+       "changeemail-password": "Via pasvorto por {{SITENAME}}:",
        "changeemail-submit": "Ŝanĝi retpoŝtadreson",
        "changeemail-throttled": "Vi tro ofte provis alsaluti.\nBonvolu atendi $1, antaŭ ol vi provos denove.",
        "resettokens": "Renovigi ŝlosilojn",
        "resettokens-text": "Vi povas rekomencigi ĵetonojn, kiuj ebligas aliron al certaj privataj datumoj, kiuj estas ligataj kun via konto de uzanto ĉi tie.\n\nVi faru tion, se vi akcidente kunhavigis ilin kun iu aŭ se via konto estis malkonfidencigita.",
        "resettokens-no-tokens": "Ne estas ŝlosiloj renovigeblaj.",
-       "resettokens-legend": "Renovigi ŝlosilojn",
        "resettokens-tokens": "Ŝlosiloj:",
        "resettokens-token-label": "$1 (nuna valoro: $2)",
        "resettokens-watchlist-token": "Ĵetono por la retfluo (Atom/RSS) de [[Special:Watchlist|ŝanĝoj je paĝoj sur via atentaro]]",
        "userrights-reason": "Kialo:",
        "userrights-no-interwiki": "Vi ne rajtas redakti uzanto-rajtojn en aliaj vikioj.",
        "userrights-nodatabase": "Datumbazo $1 ne ekzistas aŭ ne estas loka.",
-       "userrights-nologin": "Vi nepre [[Special:UserLogin|ensalutu]] kun administranto-konto doni uzanto-rajtojn.",
+       "userrights-nologin": "Vi devas [[Special:UserLogin|ensaluti]] per administranto-konto por doni uzanto-rajtojn.",
        "userrights-notallowed": "Via konto ne rajtas doni aŭ forigi uzanto-rajtojn.",
        "userrights-changeable-col": "Grupoj kiujn vi povas ŝanĝi",
        "userrights-unchangeable-col": "Grupoj kiujn vi ne povas ŝanĝi",
        "randomincategory-nopages": "Ne estas paĝoj en la kategorio [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorio:",
        "randomincategory-legend": "Hazarda paĝo en kategorio",
+       "randomincategory-submit": "Ek!",
        "randomredirect": "Hazarda alidirekto",
        "randomredirect-nopages": "Estas neniuj alidirektiloj en la nomspaco \"$1\".",
        "statistics": "Statistiko",
        "nmembers": "{{PLURAL:$1|unu membro|$1 membroj}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membroj}}",
        "nrevisions": "$1 {{PLURAL:$1|versio|versioj}}",
-       "nviews": "{{PLURAL:$1|unufoje|$1 fojojn}}",
        "nimagelinks": "Uzita en $1 {{PLURAL:$1|paĝo|paĝoj}}",
        "ntransclusions": "uzita en $1 {{PLURAL:$1|paĝo|paĝoj}}",
        "specialpage-empty": "Ne estas rezultoj por ĉi tiu raporto.",
        "linksearch-pat": "Serĉesprimo:",
        "linksearch-ns": "Nomspaco:",
        "linksearch-ok": "Serĉi",
-       "linksearch-text": "Regulesprimoj kiel \"*.wikipedia.org\" povas esti uzataj. Nepre havi almenaŭ plej altan domajnon, ekz-e \"*.org\".<br />\nSubtenataj {{PLURAL:$2|protokolo|protokoloj}}:: <code>$1</code> (ne aldonu ĉi tiujn ajn en via serĉo-mendo).",
+       "linksearch-text": "Regulesprimoj kiel \"*.wikipedia.org\" povas esti uzataj. Nepre havi almenaŭ plej altan domajnon, ekz-e \"*.org\".<br />\nSubtenataj {{PLURAL:$2|protokolo|protokoloj}}:: $1 (ne aldonu ĉi tiujn ajn en via serĉo-mendo).",
        "linksearch-line": "$1 ligita de $2",
        "linksearch-error": "Regulesprimoj povas aperi nur ĉe la komenco de la retnoda nomo.",
        "listusersfrom": "Montri uzantojn ekde:",
        "emailuser": "Retpoŝti ĉi tiun uzanton",
        "emailuser-title-target": "Retpoŝti ĉi tiun {{GENDER:$1|uzanton}}",
        "emailuser-title-notarget": "Retpoŝti uzanton",
-       "emailpage": "Retpoŝti uzanton",
        "emailpagetext": "Vi povas uzi la jenan paĝon por sendi retpoŝtan mesaĝon al ĉi tiu {{GENDER:$1|uzanto|uzantino}}.\nLa retadreso kiun vi enigis en [[Special:Preferences|viaj preferoj]] aperos kiel la \"De\" adreso de la retpoŝto, do la ricevonto eblos respondi rekte al vi.",
        "defemailsubject": "{{SITENAME}} retmesaĝo de uzanto \"$1\"",
        "usermaildisabled": "Retpoŝto de uzantoj estas malŝaltita",
        "emailccsubject": "Kopio de via mesaĝo al $1: $2",
        "emailsent": "Retmesaĝo sendita",
        "emailsenttext": "Via retmesaĝo estas sendita.",
-       "emailuserfooter": "Ĉi tiun retpoŝton sendis $1 al $2 per la funkcio \"{{int:emailpage}}\" ĉe {{SITENAME}}.",
+       "emailuserfooter": "Ĉi tiun retpoŝton sendis $1 al $2 per la funkcio \"{{int:emailuser}}\" ĉe {{SITENAME}}.",
        "usermessage-summary": "Lasanta sisteman mesaĝon.",
        "usermessage-editor": "Mesaĝanto de sistemo",
        "watchlist": "Mia atentaro",
        "rollback-success": "Restaris redaktojn de $1; ŝanĝis al lasta versio de $2.",
        "sessionfailure-title": "Seanco malsukcesis",
        "sessionfailure": "Ŝajnas, ke estas problemo kun via ensalutado;\nĈi ago estis nuligita por malhelpi fiensalutadon.\nBonvolu alklaki la reirbutonon kaj reŝargi la paĝon el kiu vi venas, kaj provu denove.",
+       "changecontentmodel-title-label": "Titolo de paĝo",
+       "changecontentmodel-reason-label": "Kialo:",
+       "logentry-contentmodel-change-revertlink": "restarigi",
+       "logentry-contentmodel-change-revert": "restarigi",
        "protectlogpage": "Protokolo pri protektoj",
        "protectlogtext": "Sube estas listo de ŝanĝoj al paĝ-protektado.\nVidu [[Special:ProtectedPages|liston de protektitaj paĝoj]] por listo de aktuale aktivaj paĝo-protektadoj.",
        "protectedarticle": "protektis \"[[$1]]\"",
        "tooltip-pt-logout": "Elsaluti",
        "tooltip-pt-createaccount": "Ni rekomendas al vi kreon de uzantokonto kaj ensaluto; tamen, tio ne estas deviga",
        "tooltip-ca-talk": "Diskuto pri la artikolo",
-       "tooltip-ca-edit": "Vi povas redakti tiun ĉi paĝon. Bv uzi la antaŭvidbutonon antaŭ ol konservi.",
+       "tooltip-ca-edit": "Redakti tiun ĉi paĝon",
        "tooltip-ca-addsection": "Starti novan sekcion",
        "tooltip-ca-viewsource": "Tiu paĝo estas protektita. Vi povas nur rigardi ties fonton.",
        "tooltip-ca-history": "Antaŭaj versioj de tiu ĉi paĝo.",
        "spam_reverting": "Restarigo de lasta versio ne entenante ligilojn al $1",
        "spam_blanking": "Forviŝo de ĉiuj versioj entenantaj ligilojn al $1",
        "spam_deleting": "Ĉiuj versioj enhavis ligilojn al $1 - forigante",
-       "simpleantispam-label": "Kontrolo kontraŭ spamo.\n'''NE ENIGU''' ion ajn!",
+       "simpleantispam-label": "Kontrolo kontraŭ spamo.\n<strong>Ne entajpu</strong> ion ajn!",
        "pageinfo-title": "Informoj por \"$1\"",
        "pageinfo-not-current": "Informoj povas esti montritaj nur por la nuna versio",
        "pageinfo-header-basic": "Baza informo",
        "pageinfo-category-subcats": "Nombro de subkategorioj",
        "pageinfo-category-files": "Nombro de dosieroj",
        "markaspatrolleddiff": "Marki kiel patrolitan",
-       "markaspatrolledtext": "Marki ĉi tiun paĝon kiel patrolitan",
+       "markaspatrolledtext": "Marki ĉi tiun paĝon patrolita",
        "markedaspatrolled": "Markita kiel patrolita",
        "markedaspatrolledtext": "La elektita versio [[:$1]] estas markita kiel patrolita.",
        "rcpatroldisabled": "Patrolado de lastaj ŝanĝoj malaktivigita",
        "version-libraries": "Instalitaj bibliotekoj",
        "version-libraries-library": "Biblioteko",
        "version-libraries-version": "Versio",
+       "version-libraries-license": "Permesilo",
+       "version-libraries-description": "Priskribo",
+       "version-libraries-authors": "Aŭtoroj",
        "redirect": "Alidirektilo laŭ dosiero, uzanto, paĝo aŭ identigilo de revizio.",
        "redirect-legend": "Alidirektilo al dosiero aŭ paĝo",
        "redirect-summary": "Tiu ĉi paĝo alidirektas al dosiero (laŭ ĝia nomo), paĝo (laŭ ĝia revizio-numero aŭ paĝo-identigilo) aŭ al uzantopaĝo (laŭ numera uzanto-identigilo). Uzado: [[{{#Special:Redirect}}/file/Ekzemplo.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], aŭ [[{{#Special:Redirect}}/user/101]].",
        "special-characters-group-khmer": "kmera",
        "special-characters-title-endash": "mallonga streketo",
        "special-characters-title-emdash": "longa streketo",
-       "special-characters-title-minus": "minus-signo"
+       "special-characters-title-minus": "minus-signo",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 5f5be28..47248b6 100644 (file)
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
-       "tog-hideminor": "Ocultar las ediciones menores en los cambios recientes",
-       "tog-hidepatrolled": "Ocultar las ediciones patrulladas en los cambios recientes",
-       "tog-newpageshidepatrolled": "Ocultar las páginas patrulladas en la lista de páginas nuevas",
+       "tog-hideminor": "Ocultar las ediciones menores de los cambios recientes",
+       "tog-hidepatrolled": "Ocultar las ediciones verificadas de los cambios recientes",
+       "tog-newpageshidepatrolled": "Ocultar las páginas verificadas de la lista de páginas nuevas",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
        "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "tog-oldsig": "Firma actual:",
        "tog-fancysig": "Tratar la firma como wikitexto (sin un enlace automático)",
        "tog-uselivepreview": "Usar previsualización dinámica",
-       "tog-forceeditsummary": "Avisarme cuando grabe la página sin introducir un resumen de edición",
-       "tog-watchlisthideown": "Ocultar mis ediciones en la lista de seguimiento",
-       "tog-watchlisthidebots": "Ocultar las ediciones de bots en la lista de seguimiento",
-       "tog-watchlisthideminor": "Ocultar las ediciones menores en la lista de seguimiento",
-       "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados en la lista de seguimiento",
-       "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento",
-       "tog-watchlisthidepatrolled": "Ocultar las ediciones patrulladas en la lista de seguimiento",
+       "tog-forceeditsummary": "Avisarme cuando grabe la página sin escribir un resumen de edición",
+       "tog-watchlisthideown": "Ocultar mis ediciones de la lista de seguimiento",
+       "tog-watchlisthidebots": "Ocultar las ediciones de bots de la lista de seguimiento",
+       "tog-watchlisthideminor": "Ocultar las ediciones menores de la lista de seguimiento",
+       "tog-watchlisthideliu": "Ocultar las ediciones de los usuarios registrados de la lista de seguimiento",
+       "tog-watchlisthideanons": "Ocultar las ediciones de los usuarios anónimos de la lista de seguimiento",
+       "tog-watchlisthidepatrolled": "Ocultar las ediciones verificadas de la lista de seguimiento",
        "tog-ccmeonemails": "Recibir copias de los correos electrónicos que envíe a otros usuarios",
        "tog-diffonly": "No mostrar el contenido de la página debajo de la lista de diferencias",
        "tog-showhiddencats": "Mostrar categorías ocultas",
        "tog-prefershttps": "Utilizar siempre conexiones seguras en mis sesiones",
        "underline-always": "Siempre",
        "underline-never": "Nunca",
-       "underline-default": "Configuración predeterminada del tema o el navegador",
+       "underline-default": "Configuración predeterminada de la apariencia o el navegador",
        "editfont-style": "Tipo de letra del área de edición:",
        "editfont-default": "Predeterminado del navegador",
        "editfont-monospace": "Tipo de letra monoespaciado",
        "actionthrottled": "Acción limitada",
        "actionthrottledtext": "Como medida contra el ''spam'', la acción que estás realizando está limitada a un número determinado de veces en un periodo corto de tiempo, y has excedido ese límite. Por favor inténtalo de nuevo en unos minutos.",
        "protectedpagetext": "Esta página ha sido protegida para evitar su edición u otras acciones.",
-       "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
-       "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> en esta página:",
+       "viewsourcetext": "Puedes ver y copiar el código fuente de esta página.",
+       "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> en esta página.",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
+       "editinginterface": "<strong>Advertencia:</strong> estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
        "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "cascadeprotected": "Esta página ha sido protegida contra edición, al estar incluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} con la opción de «cascada» activa:\n$2",
+       "cascadeprotected": "Esta página ha sido protegida contra edición porque está transcluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} con la opción de «cascada» activa:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "customjsprotected": "No tienes permiso para editar esta página JavaScript, porque contiene configuraciones personales de otro usuario.",
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador reciente|colaboradores recientes}}",
        "badretype": "Las contraseñas no coinciden.",
+       "usernameinprogress": "Ya está en marcha la creación de una cuenta para este nombre de usuario.\nEspera.",
        "userexists": "El nombre de usuario indicado ya está en uso.\nElige un nombre diferente.",
        "loginerror": "Error de inicio de sesión",
        "createacct-error": "Error al crear la cuenta",
        "passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
        "passwordreset-emailerror-capture": "Se ha generado un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero ha fallado el envío {{GENDER:$2|al usuario|a la usuaria}}: $1",
        "changeemail": "Cambiar la dirección de correo electrónico",
-       "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes introducir tu contraseña para confirmar este cambio.",
+       "changeemail-text": "Rellena este formulario para cambiar tu dirección de correo electrónico. Debes escribir tu contraseña para confirmar este cambio.",
        "changeemail-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "changeemail-oldemail": "Dirección de correo electrónico actual:",
        "changeemail-newemail": "Dirección de correo electrónico nueva:",
        "missingsummary": "<strong>Atención:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
        "selfredirect": "<strong>Advertencia:</strong> estás redirigiendo esta página a sí misma.\nPuede que hayas especificado erróneamente el destino de la redirección, o quizá estés editando la página equivocada. En cualquier caso, si haces clic de nuevo en \"{{int:savearticle}}\", se creará la redirección.",
        "missingcommenttext": "Escribe un comentario a continuación.",
-       "missingcommentheader": "<strong>Atención:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
+       "missingcommentheader": "<strong>Atención:</strong> no has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
        "summary-preview": "Previsualización del resumen:",
        "subject-preview": "Previsualización del asunto/encabezado:",
        "previewerrortext": "Se ha producido un error al intentar la vista previa de los cambios.",
        "blockedtitle": "El usuario está bloqueado",
-       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue hecho por $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario»  a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y que el bloqueo no haya inhabilitado esta función.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
-       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\n\nEl motivo dado es el siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no podrás utilizar la herramienta de «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas al respecto.",
+       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo lo hizo $1.\nLa razón dada es <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar a $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\nNo puedes utilizar la función «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nIncluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+       "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\nEl motivo dado es el siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nTen en cuenta que no puedes utilizar la función «enviar correo electrónico a este usuario» a menos que tengas una dirección de correo electrónico válida registrada en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es #$5.\nIncluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "blockednoreason": "no se ha especificado el motivo",
-       "whitelistedittext": "Tienes que $1 para editar artículos.",
+       "whitelistedittext": "Tienes que $1 para editar páginas.",
        "confirmedittext": "Debes confirmar tu dirección de correo electrónico antes de poder editar páginas. Por favor, configura y confirma tu dirección de correo a través de tus [[Special:Preferences|preferencias de usuario]].",
        "nosuchsectiontitle": "Sección no encontrada",
        "nosuchsectiontext": "Has intentado editar una sección que no existe.\nQuizá ha sido movida o borrada mientras visitabas la página.",
        "userpage-userdoesnotexist-view": "El usuario «$1» no está registrado.",
        "blocked-notice-logextract": "Este usuario se encuentra actualmente bloqueado.\nA continuación se muestra la última entrada del registro de bloqueos para más información:",
        "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> vacía la caché en <em>Herramientas → Preferencias</em>",
-       "usercssyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
-       "userjsyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
-       "usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario. ¡Aún no se ha guardado!</strong>",
-       "userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario. ¡Aún no se ha guardado!</strong>",
-       "sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS. ¡Aún no se ha guardado!</strong>",
-       "sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript. ¡Aún no se ha guardado!</strong>",
-       "userinvalidcssjstitle": "<strong>Advertencia:</strong> No existe la apariencia «$1». Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
+       "usercssyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
+       "userjsyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
+       "usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario.\n¡Aún no se ha guardado!</strong>",
+       "userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario.\n¡Aún no se ha guardado!</strong>",
+       "sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS.\n¡Aún no se ha guardado!</strong>",
+       "sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript.\n¡Aún no se ha guardado!</strong>",
+       "userinvalidcssjstitle": "<strong>Advertencia:</strong> no existe la apariencia «$1».\nRecuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
        "updated": "(Actualizado)",
        "note": "<strong>Nota:</strong>",
        "previewnote": "<strong>Recuerda que esto no es más que una previsualización.</strong>\nAún no se han guardado tus cambios.",
        "creating": "Creación de «$1»",
        "editingsection": "Edición de «$1» (sección)",
        "editingcomment": "Edición de «$1» (sección nueva)",
-       "editconflict": "No se pudieron guardar tus cambios debido a un conflicto de edición. {{GENDER:|¿Deseas}} resolver el conflicto manualmente?",
+       "editconflict": "Conflicto de edición: $1",
        "explainconflict": "Alguien ha realizado cambios en esta página desde que empezaste a editarla.\nEl cuadro de texto superior contiene el texto de la página tal como está guardado en este momento.\nTus cambios sobre la versión que editaste se muestran en el cuadro de texto inferior.\nSi quieres guardar tus cambios, has de trasladarlos al cuadro superior.\nAl pulsar «{{int:savearticle}}», se guardará <strong>solo</strong> el texto del cuadro superior.",
        "yourtext": "Tu texto",
        "storedversion": "Versión guardada",
        "readonlywarning": "<strong>Advertencia: La base de datos ha sido bloqueada por labores de mantenimiento, así que en este momento no puedes guardar tus ediciones.</strong>\nQuizás quieras copiar y pegar tu texto en un archivo de texto y guardarlo para después.\n\nEl administrador que la bloqueó ha dado esta explicación: $1",
        "protectedpagewarning": "<strong>Advertencia: Esta página ha sido protegida para que solo puedan editarla los usuarios con permisos de administrador.</strong>\nA continuación se muestra la última entrada de registro para más información:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Esta página ha sido protegida para que solo puedan editarla los usuarios registrados.\nA continuación se muestra la última entrada de registro para más información:",
-       "cascadeprotectedwarning": "<strong>Aviso:</strong> esta página está protegida y solo los administradores pueden editarla porque está incluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} en cascada:",
+       "cascadeprotectedwarning": "<strong>Aviso:</strong> esta página está protegida y solo los administradores pueden editarla porque está transcluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} en cascada:",
        "titleprotectedwarning": "<strong>Aviso: esta página está protegida de modo que se necesitan [[Special:ListGroupRights|permisos específicos]] para crearla.</strong>\nA continuación se muestra la última entrada del registro como referencia:",
        "templatesused": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta página:",
        "templatesusedpreview": "{{PLURAL:$1|Plantilla usada|Plantillas usadas}} en esta previsualización:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vacío",
        "content-json-empty-array": "Matriz vacía",
-       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] convoca a [[:$2]] con más de un valor para el parámetro «$3». Se usará solo el último valor proporcionado.",
+       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] llama a [[:$2]] con más de un valor para el parámetro «$3». Se usará solo el último valor proporcionado.",
        "duplicate-args-category": "Páginas que usan argumentos duplicados en invocaciones de plantillas",
        "duplicate-args-category-desc": "La página contiene invocaciones de plantillas que utilizan argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Advertencia:</strong> esta página contiene demasiadas llamadas a funciones sintácticas costosas.\n\nTiene {{PLURAL:$1|una llamada|$1 llamadas}}, pero debería tener menos de {{PLURAL:$2|una|$2}}.",
        "undo-summary": "Se ha deshecho la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]])",
        "undo-summary-username-hidden": "Se ha deshecho la revisión $1 de un usuario oculto",
        "cantcreateaccounttitle": "No se puede crear la cuenta",
-       "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP ('''$1''').\n\nEl motivo dado por $3 es <em>$2</em>",
+       "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP (<strong>$1</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
        "cantcreateaccount-range-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas de usuario desde direcciones IP en el rango '''$1''', en el que se encuentra tu dirección IP ('''$4''').\n\nEl motivo dado por $3 es ''$2''",
        "viewpagelogs": "Ver los registros de esta página",
        "nohistory": "No hay historial de ediciones para esta página.",
        "revdelete-legend": "Establecer restricciones de visibilidad",
        "revdelete-hide-text": "Texto de la revisión",
        "revdelete-hide-image": "Ocultar el contenido del archivo",
-       "revdelete-hide-name": "Ocultar la selección y sus parámetros.",
+       "revdelete-hide-name": "Ocultar la selección y sus parámetros",
        "revdelete-hide-comment": "Resumen de edición",
        "revdelete-hide-user": "Nombre/IP del editor",
        "revdelete-hide-restricted": "Suprimir para todos los usuarios, incluidos administradores",
        "search-category": "(categoría $1)",
        "search-file-match": "(coincide con el contenido del archivo)",
        "search-suggest": "Quizás quieres buscar: $1",
+       "search-rewritten": "Se muestran los resultados de $1. O busca $2.",
        "search-interwiki-caption": "Proyectos hermanos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(más)",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Búsquedas",
-       "stub-threshold": "Límite para cambiar a formato de <a href=\"#\" class=\"stub\">enlace a esbozo</a> (en bytes):",
+       "stub-threshold": "Límite para cambiar a formato de enlace a esbozo ($1):",
+       "stub-threshold-sample-link": "muestra",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Días que mostrar en los cambios recientes:",
        "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
        "userrights-removed-self": "Has eliminado con éxito tus propios permisos. Por tanto, ya no podrás volver a acceder a esta página.",
        "group": "Grupo:",
        "group-user": "Usuarios",
-       "group-autoconfirmed": "Usuarios autoconfirmados",
+       "group-autoconfirmed": "Autoconfirmados",
        "group-bot": "Bots",
        "group-sysop": "Administradores",
        "group-bureaucrat": "Burócratas",
        "group-suppress": "Supresores",
        "group-all": "(todos)",
        "group-user-member": "{{GENDER:$1|usuario|usuaria}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|usuario autoconfirmado|usuaria autoconfirmada}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmado|autoconfirmada}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
        "group-bureaucrat-member": "{{GENDER:$1|burócrata}}",
        "group-suppress-member": "{{GENDER:$1|supresor|supresora}}",
        "grouppage-user": "{{ns:project}}:Usuarios",
-       "grouppage-autoconfirmed": "{{ns:project}}:Usuarios autoconfirmados",
+       "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmados",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Administradores",
        "grouppage-bureaucrat": "{{ns:project}}:Burócratas",
        "right-import": "Importar páginas desde otras wikis",
        "right-importupload": "Importar páginas desde un archivo",
        "right-patrol": "Marcar ediciones de otros como verificadas",
-       "right-autopatrol": "Tener automáticamente marcadas como verificadas las ediciones propias",
+       "right-autopatrol": "Marcar sus ediciones automáticamente como verificadas",
        "right-patrolmarks": "Ver las marcas de verificación de cambios recientes",
        "right-unwatchedpages": "Ver una lista de páginas no vigiladas",
        "right-mergehistory": "Fusionar historiales de páginas",
        "recentchanges-label-newpage": "Esta edición creó una página",
        "recentchanges-label-minor": "Esta es una edición menor",
        "recentchanges-label-bot": "Esta edición fue realizada por un robot",
-       "recentchanges-label-unpatrolled": "Esta edición todavía no se ha patrullado",
+       "recentchanges-label-unpatrolled": "Esta edición aún no ha sido verificada",
        "recentchanges-label-plusminus": "El tamaño de la página cambió esta cantidad de bytes",
        "recentchanges-legend-heading": "'''Leyenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (véase también la [[Special:NewPages|lista de páginas nuevas]])",
        "rcshowhideanons": "$1 usuarios anónimos",
        "rcshowhideanons-show": "Mostrar",
        "rcshowhideanons-hide": "Ocultar",
-       "rcshowhidepatr": "$1 ediciones patrulladas",
+       "rcshowhidepatr": "$1 ediciones verificadas",
        "rcshowhidepatr-show": "Mostrar",
        "rcshowhidepatr-hide": "Ocultar",
        "rcshowhidemine": "$1 mis ediciones",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuario|usuarios}} vigilando]",
-       "rc_categories": "Limitar a las categorías (separadas por «|»)",
-       "rc_categories_any": "Cualquiera",
+       "rc_categories": "Limitar a las categorías (separadas por «|»):",
+       "rc_categories_any": "Cualquiera de las elegidas",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} después del cambio",
        "newsectionsummary": "Sección nueva: /* $1 */",
        "rc-enhanced-expand": "Mostrar detalles",
        "filetype-banned-type": "{{PLURAL:$4|El tipo de archivo|Los tipos de archivo}} <strong>\".$1\"</strong> no {{PLURAL:$4|está permitido|están permitidos}}.\n{{PLURAL:$3|El único tipo de archivo permitido es|Los tipos de archivos permitidos son}} $2.",
        "filetype-missing": "El archivo no tiene extensión (como «.jpg»).",
        "empty-file": "El archivo que enviaste estaba vacío.",
-       "file-too-large": "El archivo que enviste era demasiado grande.",
-       "filename-tooshort": "El nombre de archivo es demasiado corto.",
+       "file-too-large": "El archivo que enviaste era demasiado grande.",
+       "filename-tooshort": "El nombre del archivo es demasiado corto.",
        "filetype-banned": "El tipo de archivo está prohibido.",
        "verification-error": "Este archivo no superó la verificación de archivos.",
        "hookaborted": "Una extensión ha impedido la modificación que intentaste realizar.",
-       "illegal-filename": "El nombre de archivo no está permitido.",
-       "overwrite": "Sobrescribir un archivo existente no está permitido.",
+       "illegal-filename": "El nombre del archivo no está permitido.",
+       "overwrite": "No está permitido sobrescribir un archivo existente.",
        "unknown-error": "Ocurrió un error desconocido.",
        "tmp-create-error": "No se pudo crear archivo temporal.",
-       "tmp-write-error": "Error al escribir archivo temporal.",
+       "tmp-write-error": "Error al escribir el archivo temporal.",
        "large-file": "Se recomienda que los archivos no sean mayores de $1; este archivo ocupa $2.",
        "largefileserver": "El tamaño de este archivo es mayor del que este servidor admite por configuración.",
        "emptyfile": "El archivo que has intentado subir parece estar vacío; por favor, verifica que realmente se trate del archivo que intentabas subir.",
        "windows-nonascii-filename": "Este wiki no admite nombres de archivo con caracteres especiales.",
-       "fileexists": "Ya existe un archivo con este nombre, por favor comprueba <strong>[[:$1]]</strong> si {{GENDER:|tú}} no estás seguro de querer cambiarlo.\n[[$1|thumb]]",
-       "filepageexists": "La página de descripción de este archivo ya ha sido creada en <strong>[[:$1]]</strong>, pero no existe actualmente ningún fichero con este nombre.\nEl resumen que ha ingresado no aparecerá en la página de descripción. Para que el sumario aparezca, deberá editarlo manualmente.\n[[$1|thumb]]",
+       "fileexists": "Ya existe un archivo con este nombre. Comprueba <strong>[[:$1]]</strong> si {{GENDER:|tú}} no estás seguro de querer cambiarlo.\n[[$1|thumb]]",
+       "filepageexists": "La página de descripción de este archivo ya ha sido creada en <strong>[[:$1]]</strong>, pero no existe actualmente ningún archivo con este nombre.\nEl resumen que has escrito no aparecerá en la página de descripción.\nPara que el resumen aparezca, deberás editarlo manualmente.\n[[$1|thumb]]",
        "fileexists-extension": "Existe un archivo con un nombre similar: [[$2|thumb]]\n* Nombre del archivo que se está subiendo: <strong>[[:$1]]</strong>\n* Nombre del archivo ya existente: <strong>[[:$2]]</strong>\n¿Quieres cambiar el nombre para que sea más distintivo?",
        "fileexists-thumbnail-yes": "El archivo parece ser una imagen de tamaño reducido ''(thumbnail)''. [[$1|thumb]]\nPor favor comprueba el archivo <strong>[[:$1]]</strong>.\nSi el archivo comprobado es la misma imagen a tamaño original no es necesario subir un thumbnail más.",
        "file-thumbnail-no": "El nombre del archivo comienza con <strong>$1</strong>.\nParece ser una imagen de tamaño reducido ''(thumbnail)''.\nSi tiene esta imagen a toda resolución súbala, si no, por favor cambie el nombre del archivo.",
        "uploaded-setting-handler-svg": "Están bloqueados los archivos SVG que configuran el atributo \"handler\" con remote/data/script. Se encontró <code>$1=\"$2\"</code> en el archivo SVG cargado.",
        "uploaded-remote-url-svg": "Se bloquean los SVG que contienen URL de estilo externas. El archivo SVG cargado contiene <code>$1=\"$2\"</code>.",
        "uploaded-image-filter-svg": "Se encontró un filtro de imagen con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> en el archivo SVG cargado.",
-       "uploadscriptednamespace": "Este archivo SVG contiene un espacio de nombre no permitido '$1'",
+       "uploadscriptednamespace": "Este archivo SVG contiene un espacio de nombres no permitido: \"$1\".",
        "uploadinvalidxml": "No se pudo analizar el XML del archivo cargado.",
        "uploadvirus": "¡El archivo contiene un virus!\nDetalles: $1",
        "uploadjava": "El archivo es un ZIP que contiene un archivo .class de Java.\nNo se permite subir archivos Java, porque pueden causar que se puedan saltar restricciones de seguridad.",
        "upload-options": "Opciones de subida",
        "watchthisupload": "Vigilar este archivo",
        "filewasdeleted": "Un archivo con este nombre se subió con anterioridad y posteriormente ha sido borrado. Deberías revisar el $1 antes de subirlo de nuevo.",
-       "filename-bad-prefix": "El nombre del archivo que estás subiendo comienza por '''«$1»''', un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales.\n\nPor favor, elige un nombre más descriptivo.",
+       "filename-bad-prefix": "El nombre del archivo que estás subiendo comienza por <strong>«$1»</strong>, un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales.\nElige un nombre más descriptivo para tu archivo.",
        "filename-prefix-blacklist": " #<!-- deja esta línea exactamente como está --> <pre>\n# La sintaxis de esta página es la siguiente:\n#   * Todo texto que se encuentre después del carácter \"#\" hasta el final de la línea se tratará como un comentario y será ignorado\n#   * Cualquier línea que no esté en blanco será interpretada como un prefijo típico en nombres de archivo que suelen asignar automáticamente las cámaras digitales\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # algunos teléfonos móviles / celulares\nIMG # genérico\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- deja esta línea exactamente como está -->",
        "upload-success-subj": "Subida con éxito",
        "upload-success-msg": "La subida desde [$2] se realizó correctamente. Está disponible aquí: [[:{{ns:file}}:$1]]",
        "upload-misc-error-text": "Ha ocurrido un error durante la subida.\nVerifica que la URL es válida y accesible e inténtalo de nuevo.\nSi el problema persiste, contacta con un [[Special:ListUsers/sysop|administrador]].",
        "upload-too-many-redirects": "La URL contenía demasiadas redirecciones",
        "upload-http-error": "Ha ocurrido un error HTTP: $1",
-       "upload-copy-upload-invalid-domain": "No se pueden realizar cargas remotas desde este dominio.",
+       "upload-copy-upload-invalid-domain": "No se pueden realizar subidas remotas desde este dominio.",
+       "upload-dialog-title": "Subir archivo",
+       "upload-dialog-error": "Ha ocurrido un error",
+       "upload-dialog-warning": "Ha ocurrido una advertencia",
+       "upload-dialog-button-cancel": "Cancelar",
+       "upload-dialog-button-done": "Hecho",
+       "upload-dialog-button-save": "Guardar",
+       "upload-dialog-button-upload": "Subir",
+       "upload-dialog-label-select-file": "Seleccionar archivo",
+       "upload-dialog-label-infoform-title": "Detalles",
+       "upload-dialog-label-infoform-name": "Nombre",
+       "upload-dialog-label-infoform-description": "Descripción",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nombre del archivo",
        "backend-fail-stream": "No se pudo transmitir el archivo «$1».",
        "backend-fail-backup": "No pudo hacer copia de seguridad del archivo «$1».",
        "backend-fail-notexists": "El archivo  $1  no existe.",
-       "backend-fail-hashes": "No se pudieron obtener los hashes de los ficheros para compararlos.",
-       "backend-fail-notsame": "Ya existe un fichero distinto en $1.",
+       "backend-fail-hashes": "No se pudieron obtener los \"hashes\" de los archivos para compararlos.",
+       "backend-fail-notsame": "Ya existe un archivo distinto en \"$1\".",
        "backend-fail-invalidpath": "$1 no es una ruta de almacenamiento válida",
        "backend-fail-delete": "No se pudo borrar el archivo «$1».",
        "backend-fail-describe": "No pudieron cambiar los metadatos del archivo \"$1\".",
        "zip-bad": "El archivo es un ZIP dañado o que no se puede leer.\nNo se puede comprobar su seguridad.",
        "zip-unsupported": "El archivo es un archivo que utiliza características ZIP no compatibles con MediaWiki.\nNo puede comprobarse adecuadamente su seguridad.",
        "uploadstash": "Ficheros escondidos",
-       "uploadstash-summary": "Esta página da acceso a los ficheros enviados (o que están en el proceso de envío) pero que aún no han sido publicados en la wiki. Estos ficheros no son visibles para nadie, excepto para el usuario que los envió.",
+       "uploadstash-summary": "Esta página da acceso a los archivos subidos (o que están por subirse), pero que aún no han sido publicados en el wiki. Estos archivos no son visibles para nadie, excepto para el usuario que los subió.",
        "uploadstash-clear": "Borrar los ficheros escondidos",
        "uploadstash-nofiles": "No tienes archivos escondidos.",
        "uploadstash-badtoken": "No se pudo realizar la acción. Es posible que haya finalizado el tiempo de espera de la sesión. Inténtalo de nuevo.",
        "upload-disallowed-here": "No puedes sobrescribir este archivo.",
        "filerevert": "Revertir $1",
        "filerevert-legend": "Reversión de archivos",
-       "filerevert-intro": "Estás revirtiendo '''[[Media:$1|$1]]''' a la [$4 versión del $2 a las $3].",
+       "filerevert-intro": "Estás por revertir <strong>[[Media:$1|$1]]</strong> a la [$4 versión del $2 a las $3].",
        "filerevert-comment": "Motivo:",
        "filerevert-defaultcomment": "Revertido a la versión subida el $1 a las $2",
        "filerevert-submit": "Revertir",
-       "filerevert-success": "'''[[Media:$1|$1]]''' ha sido revertido a la [$4 versión del $2 a las $3].",
-       "filerevert-badversion": "No existe version local previa de este archivo con esa marca de tiempo.",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> ha sido revertido a la [$4 versión del $2 a las $3].",
+       "filerevert-badversion": "No existe versión local previa de este archivo con esa marca de tiempo.",
        "filedelete": "Borrar $1",
        "filedelete-legend": "Borrar archivo",
-       "filedelete-intro": "Estás borrando el archivo '''[[Media:$1|$1]]''' así como todo su historial.",
-       "filedelete-intro-old": "Estás borrando la versión de '''[[Media:$1|$1]]''' del [$4 $2 a las $3].",
+       "filedelete-intro": "Estás por borrar el archivo <strong>[[Media:$1|$1]]</strong> así como todo su historial.",
+       "filedelete-intro-old": "Estás borrando la versión de <strong>[[Media:$1|$1]]</strong> del [$4 $2 a las $3].",
        "filedelete-comment": "Motivo:",
        "filedelete-submit": "Eliminar",
-       "filedelete-success": "'''$1''' ha sido borrado.",
-       "filedelete-success-old": "La version de '''[[Media:$1|$1]]''' del $2 a las $3 ha sido borrada.",
-       "filedelete-nofile": "'''$1''' no existe.",
-       "filedelete-nofile-old": "No existe una versión guardada de '''$1''' con los atributos especificados.",
+       "filedelete-success": "<strong>$1</strong> ha sido borrado.",
+       "filedelete-success-old": "La versión de <strong>[[Media:$1|$1]]</strong> del $2 a las $3 ha sido borrada.",
+       "filedelete-nofile": "<strong>$1</strong> no existe.",
+       "filedelete-nofile-old": "No existe una versión guardada de <strong>$1</strong> con los atributos especificados.",
        "filedelete-otherreason": "Otra razón:",
-       "filedelete-reason-otherlist": "Otra razón",
+       "filedelete-reason-otherlist": "Otro motivo",
        "filedelete-reason-dropdown": "*Razones habituales de borrado\n** Violación de derechos de autor\n** Archivo duplicado",
        "filedelete-edit-reasonlist": "Edita los motivos del borrado",
        "filedelete-maintenance": "Borrado y restauración de archivos temporalmente deshabilitados durante el mantenimiento.",
        "filedelete-maintenance-title": "No se puede eliminar el archivo",
        "mimesearch": "Búsqueda por MIME",
-       "mimesearch-summary": "Esta página permite el filtrado de ficheros por su tipo MIME.\nEntrada: tipo/subtipo o tipo/*, p. ej. <code>image/jpeg</code>.",
+       "mimesearch-summary": "Esta página permite el filtrado de archivos por su tipo MIME.\nEntrada: tipo/subtipo o tipo/*, p. ej. <code>image/jpeg</code>.",
        "mimetype": "Tipo MIME:",
        "download": "descargar",
        "unwatchedpages": "Páginas no vigiladas",
        "pageswithprop": "Páginas con una propiedad de página",
        "pageswithprop-legend": "Páginas con una propiedad de página",
        "pageswithprop-text": "Esta página muestra las páginas que usan la propiedad de una página en particular",
-       "pageswithprop-prop": "Nombre de la propiedad",
+       "pageswithprop-prop": "Nombre de la propiedad:",
        "pageswithprop-submit": "Ir",
        "pageswithprop-prophidden-long": "hay un largo valor en la propiedad texto oculta ($1)",
        "pageswithprop-prophidden-binary": "valor de la propiedad binaria oculta ($1)",
        "wantedpages": "Páginas requeridas",
        "wantedpages-summary": "Lista de páginas inexistentes con el mayor número de enlaces a ellas, excluyendo páginas que son solo redirecciones a ellas. Para ver una lista de páginas inexistentes con redirecciones apuntando a ellas, consulta [[{{#special:BrokenRedirects}}|la lista de redirecciones rotas]].",
        "wantedpages-badtitle": "Título inválido en conjunto de resultados: $1",
-       "wantedfiles": "Ficheros requeridos",
+       "wantedfiles": "Archivos requeridos",
        "wantedfiletext-cat": "Los siguientes archivos están en uso, pero no existen. Es posible que algunos de ellos estén almacenados en repositorios externos y se hayan incluido aquí por error; dichas entradas aparecen <del>tachadas</del>. De igual manera, las páginas que incluyen archivos inexistentes se enumeran en [[:$1]].",
        "wantedfiletext-cat-noforeign": "Los siguientes archivos están en uso, pero no existen. Además, las páginas con archivos que no existen están listadas en [[:$1]].",
        "wantedfiletext-nocat": "Los siguientes archivos están en uso, pero no existen. Es posible que algunos de ellos estén almacenados en repositorios externos y se hayan incluido aquí por error; dichas entradas aparecen <del>tachadas</del>.",
        "mostrevisions": "Artículos con más ediciones",
        "prefixindex": "Todas las páginas con prefijo",
        "prefixindex-namespace": "Todas las páginas con el prefijo (espacio de nombres $1)",
-       "prefixindex-strip": "Prefijo de la hilera en la lista",
+       "prefixindex-strip": "Quitar prefijos en la lista",
        "shortpages": "Páginas cortas",
        "longpages": "Páginas largas",
        "deadendpages": "Páginas sin salida",
        "ancientpages": "Artículos más antiguos",
        "move": "Trasladar",
        "movethispage": "Trasladar esta página",
-       "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nPor favor note que otros sitios web pueden vincular a un archivo con un URL directo, y por tanto pueden ser listados aquí a pesar de estar en uso activo.",
+       "unusedimagestext": "Los siguientes archivos existen pero no están insertados en ninguna página.\nTen en cuenta que otros sitios web pueden enlazar un archivo directamente por la URL, y por tanto pueden estar listados aquí a pesar de estar siendo usados de forma activa.",
        "unusedcategoriestext": "Las siguientes categorías han sido creadas, pero ningún artículo o categoría las utiliza.",
        "notargettitle": "No hay página objetivo",
        "notargettext": "No has especificado sobre qué página deseas llevar a cabo esta acción.",
        "nopagetitle": "No existe la página destino",
-       "nopagetext": "La página destino que ha especificado no existe.",
+       "nopagetext": "La página destino que has especificado no existe.",
        "pager-newer-n": "{{PLURAL:$1|1 siguiente|$1 siguientes}}",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Supresor de ediciones",
        "booksources-text": "Abajo hay una lista de enlaces a otros sitios que venden libros nuevos y usados, puede que contengan más información sobre los libros que estás buscando.",
        "booksources-invalid-isbn": "El número de ISBN no parece ser válido; comprueba los errores copiándolo de la fuente original.",
        "specialloguserlabel": "Usuario:",
-       "speciallogtitlelabel": "Objetivo (título o usuario):",
+       "speciallogtitlelabel": "Objetivo (título o {{ns:user}}:nombre de usuario):",
        "log": "Registros",
        "all-logs-page": "Todos los registros públicos",
        "alllogstext": "Vista combinada de todos los registros de {{SITENAME}}.\nPuedes filtrar la vista seleccionando un tipo de registro, el nombre del usuario o la página afectada. Se distinguen mayúsculas de minúsculas.",
        "sp-deletedcontributions-contribs": "contribuciones",
        "linksearch": "Enlaces externos",
        "linksearch-pat": "Patrón de búsqueda:",
-       "linksearch-ns": "Espacio de nombre:",
+       "linksearch-ns": "Espacio de nombres:",
        "linksearch-ok": "Buscar",
-       "linksearch-text": "Se pueden usar caracteres comodín como \"*.wikipedia.org\".\nEs necesario, por lo menos, un dominio de alto nivel, por ejemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: <code>$1</code> (si no se especifica ninguno, el predeterminado es http://).",
+       "linksearch-text": "Se pueden usar caracteres comodín como \"*.wikipedia.org\".\nEs necesario, por lo menos, un dominio de alto nivel, por ejemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: $1 (si no se especifica ninguno, el predeterminado es http://).",
        "linksearch-line": "$1 enlazado desde $2",
        "linksearch-error": "Los comodines sólo pueden aparecer al principio del nombre de sitio.",
        "listusersfrom": "Mostrar usuarios que empiecen por:",
        "listusers-blocked": "({{GENDER:$1|bloqueado|bloqueada}})",
        "activeusers": "Lista de usuarios activos",
        "activeusers-intro": "Esta es una lista de usuarios que han tenido alguna actividad en los últimos $1 {{PLURAL:$1|día|días}}.",
-       "activeusers-count": "$1 {{PLURAL:$1|acción|acciones}} en los últimos {{PLURAL:$3|día|$3 días}}",
+       "activeusers-count": "$1 {{PLURAL:$1|acción|acciones}} en {{PLURAL:$3|el último día|los últimos $3 días}}",
        "activeusers-from": "Mostrando a los usuarios empezando por:",
        "activeusers-hidebots": "Ocultar robots",
        "activeusers-hidesysops": "Ocultar administradores",
        "listgrouprights-removegroup-self": "Eliminar {{PLURAL:$2|grupo|grupos}} de tu propia cuenta: $1",
        "listgrouprights-addgroup-self-all": "Agregar todos los grupos a tu propia cuenta",
        "listgrouprights-removegroup-self-all": "Eliminar todos los grupos de tu propia cuenta",
-       "listgrouprights-namespaceprotection-header": "Restricciones del espacio de nombre",
-       "listgrouprights-namespaceprotection-namespace": "Espacio de nombre",
+       "listgrouprights-namespaceprotection-header": "Restricciones del espacio de nombres",
+       "listgrouprights-namespaceprotection-namespace": "Espacio de nombres",
        "listgrouprights-namespaceprotection-restrictedto": "Derechos de usuario para editar",
        "trackingcategories": "Categorías de seguimiento",
        "trackingcategories-summary": "Esta página lista categorías de seguimiento que han sido generadas automáticamente por el software MediaWiki. Sus nombres pueden cambiarse editando su mensaje correspondiente en el espacio de nombres {{ns:8}}.",
        "emailuser": "Enviar un mensaje de correo a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}",
        "emailuser-title-target": "Enviar un mensaje a {{GENDER:$1|este usuario|esta usuaria}}",
        "emailuser-title-notarget": "Enviar un correo electrónico al usuario",
-       "emailpage": "Enviar mensaje al usuario",
        "emailpagetext": "Puedes usar el formulario de abajo para enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.\nLa dirección de correo electrónico que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el campo \"Remitente\" o \"De\" para que el destinatario pueda responderte.",
        "defemailsubject": "Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}",
        "usermaildisabled": "Correo electrónico del usuario desactivado",
        "noemailtext": "Este usuario no ha especificado una dirección de correo electrónico válida.",
        "nowikiemailtext": "Este usuario ha elegido no recibir correos electrónicos de otros usuarios.",
        "emailnotarget": "Nombre de usuario no existente o no válido para el destinatario.",
-       "emailtarget": "Introduce el nombre de usuario del destinatario",
+       "emailtarget": "Escribe el nombre de usuario del destinatario",
        "emailusername": "Nombre de usuario:",
        "emailusernamesubmit": "Enviar",
        "email-legend": "Enviar un correo electrónico a otro usuario de {{SITENAME}}",
        "watchlistanontext": "Es necesario acceder para ver o editar los elementos de tu lista de seguimiento.",
        "watchnologin": "No has iniciado sesión",
        "addwatch": "Añadir a la lista de seguimiento",
-       "addedwatchtext": "La página «[[:$1]]» ha sido añadida a tu [[Special:Watchlist|lista de seguimiento]]. Los cambios futuros en esta página y en su página de discusión asociada se indicarán ahí.",
+       "addedwatchtext": "Se han añadido «[[:$1]]» y su página de discusión a tu [[Special:Watchlist|lista de seguimiento]].",
        "addedwatchtext-short": "La página \"$1\" ha sido añadida a tu lista de seguimiento.",
        "removewatch": "Quitar de la lista de seguimiento",
-       "removedwatchtext": "Se ha eliminado la página «[[:$1]]» de tu [[Special:Watchlist|lista de seguimiento]].",
+       "removedwatchtext": "Se han eliminado «[[:$1]]» y su página de discusión de tu [[Special:Watchlist|lista de seguimiento]].",
        "removedwatchtext-short": "La página \"$1\" ha sido eliminado de tu lista de seguimiento.",
        "watch": "Vigilar",
        "watchthispage": "Vigilar esta página",
        "notvisiblerev": "La última revisión de un usuario diferente ha sido borrada",
        "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} en tu lista de seguimiento, sin contar las de discusión.",
        "wlheader-enotif": "La notificación por correo está activada.",
-       "wlheader-showupdated": "Las páginas modificadas desde su última visita aparecen en '''negrita'''.",
-       "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos '''$1''' cambios}} en {{PLURAL:$2|la última hora|las últimas '''$2''' horas}} a fecha de $4 $3.",
+       "wlheader-showupdated": "Las páginas modificadas desde tu última visita aparecen en <strong>negrita</strong>.",
+       "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos <strong>$1</strong> cambios}} en {{PLURAL:$2|la última hora|las últimas <strong>$2</strong> horas}} a fecha de $4 $3.",
        "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días",
        "watchlist-options": "Opciones de la lista de seguimiento",
        "watching": "Vigilando...",
        "delete-confirm": "Borrar «$1»",
        "delete-legend": "Borrar",
        "historywarning": "<strong>Atención:</strong> la página que estás a punto de borrar tiene un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
-       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nPor favor, confirma que realmente quieres hacer eso, que entiendes las consecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
+       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nConfirma que realmente quieres hacer esto, que entiendes las consecuencias y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
        "actioncomplete": "Acción completada",
        "actionfailed": "Falló la acción",
        "deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.",
        "changecontentmodel-success-title": "Se cambió el modelo de contenido",
        "changecontentmodel-success-text": "Se ha cambiado el tipo de contenido de [[:$1]].",
        "changecontentmodel-cannot-convert": "El contenido de [[:$1]] no se puede convertir a un tipo de $2.",
-       "changecontentmodel-title-cantexist": "No es posible tener una página en $1.",
        "changecontentmodel-nodirectediting": "El modelo de contenido $1 no admite la edición directa",
        "log-name-contentmodel": "Registro de cambios del modelo de contenido",
        "log-description-contentmodel": "Eventos relacionados con los modelos de contenido de una página",
        "protect_expiry_invalid": "Tiempo de caducidad incorrecto.",
        "protect_expiry_old": "El tiempo de expiración está en el pasado.",
        "protect-unchain-permissions": "Desbloquear opciones de protección adicionales",
-       "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
+       "protect-text": "Aquí puedes ver y modificar el nivel de protección de la página <strong>$1</strong>.",
        "protect-locked-blocked": "No puedes cambiar los niveles de protección estando bloqueado.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
-       "protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página '''$1''':",
+       "protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
        "protect-locked-access": "Tu cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
-       "protect-cascadeon": "Actualmente esta página está protegida porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que tienen activada la opción de protección en cascada. Puedes cambiar el nivel de protección de esta página, pero no afectará a la protección en cascada.",
+       "protect-cascadeon": "Actualmente esta página está protegida porque está transcluida en {{PLURAL:$1|la siguiente página, que tiene|las siguientes páginas, que tienen}} activada la opción de protección de cascada.\nPuedes cambiar el nivel de protección de esta página, pero no afectará a la protección de cascada.",
        "protect-default": "Permitir todos los usuarios",
        "protect-fallback": "Solo permitir usuarios con el permiso «$1»",
        "protect-level-autoconfirmed": "Solo permitir usuarios autoconfirmados",
        "protect-expiring-local": "caduca el $1",
        "protect-expiry-indefinite": "indefinido",
        "protect-cascade": "Protección en cascada - proteger todas las páginas incluidas en ésta.",
-       "protect-cantedit": "No puedes cambiar el nivel de protección porque no tienes permiso para hacer ediciones.",
+       "protect-cantedit": "No puedes cambiar el nivel de protección de esta página porque no tienes permiso para editarla.",
        "protect-othertime": "Especificar caducidad:",
        "protect-othertime-op": "otra (especificar)",
        "protect-existing-expiry": "Fecha de caducidad actual: $2 a las $3",
        "protect-existing-expiry-infinity": "Tiempo de caducidad existente: infinito",
        "protect-otherreason": "Otra razón:",
-       "protect-otherreason-op": "Otra razón",
+       "protect-otherreason-op": "Otro motivo",
        "protect-dropdown": "*Razones de protección habituales\n**Vandalismo excesivo\n**Spam excesivo\n**Guerra de ediciones\n**Página muy visitada",
        "protect-edit-reasonlist": "Editar las razones de protección",
        "protect-expiry-options": "1 hora:1 hour,1 día:1 day,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
        "restriction-level-all": "cualquier nivel",
        "undelete": "Restaurar una página borrada",
        "undeletepage": "Ver y restaurar páginas borradas",
-       "undeletepagetitle": "'''Las siguientes son las revisiones borradas de [[:$1|$1]]'''.",
+       "undeletepagetitle": "<strong>Las siguientes son las revisiones borradas de [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Ver páginas borradas",
        "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada, pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas, pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
        "undelete-fieldset-title": "Restaurar revisiones",
-       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>. Para realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revisión archivada|revisiones archivadas}}",
+       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.\nPara realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisión eliminada|revisiones eliminadas}}",
        "undeletehistory": "Si restauras la página, todas sus revisiones se restaurarán en el historial.\nSi una nueva página con el mismo nombre se ha creado desde que se borró la original, las versiones restauradas aparecerán en el historial previo.",
        "undeleterevdel": "No se deshará el borrado si éste resulta en el borrado parcial de la última revisión de la página. En tal caso, desmarque o muestre las revisiones borradas más recientes. Las revisiones de archivos que no tiene permitido ver no se restaurarán.",
        "undeletehistorynoadmin": "El artículo ha sido borrado. La razón de su eliminación se indica abajo en el resumen, así como los detalles de las ediciones realizadas antes del borrado. El texto completo del artículo está disponible sólo para usuarios con permisos de administrador.",
        "undeletedrevisions-files": "{{PLURAL:$1|1 revisión|$1 revisiones}} y {{PLURAL:$2|1 archivo|$2 archivos}} restaurados",
        "undeletedfiles": "$1 {{PLURAL:$1|archivo restaurado|archivos restaurados}}",
        "cannotundelete": "Hubo un error durante la restauración:\n$1",
-       "undeletedpage": "'''Se ha restaurado $1'''\n\nConsulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados y restauraciones.",
+       "undeletedpage": "<strong>Se ha restaurado $1</strong>\n\nConsulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados y restauraciones.",
        "undelete-header": "En el [[Special:Log/delete|registro de borrados]] se listan las páginas eliminadas.",
        "undelete-search-title": "Buscar páginas borradas",
        "undelete-search-box": "Buscar páginas borradas",
        "undelete-search-prefix": "Mostrar páginas que empiecen por:",
        "undelete-search-submit": "Buscar",
        "undelete-no-results": "No se encontraron páginas borradas para ese criterio de búsqueda.",
-       "undelete-filename-mismatch": "No se puede restaurar la versión con marca de tiempo $1: No concuerda el nombre de fichero",
-       "undelete-bad-store-key": "No se puede restaurar la versión con marca de tiempo $1: el fichero fue omitido antes del borrado.",
+       "undelete-filename-mismatch": "No se puede restaurar la revisión con marca de tiempo $1: no concuerda el nombre del archivo.",
+       "undelete-bad-store-key": "No se puede restaurar la revisión con marca de tiempo $1: el archivo fue omitido antes del borrado.",
        "undelete-cleanup-error": "Error al borrar el archivo no utilizado \"$1\".",
        "undelete-missing-filearchive": "No se ha podido restaurar el archivo de ID $1 debido a que no está en la base de datos.\nPuede que ya haya sido restaurado.",
        "undelete-error": "Error restaurando la página",
        "whatlinkshere-title": "Páginas que enlazan con «$1»",
        "whatlinkshere-page": "Página:",
        "linkshere": "Las siguientes páginas enlazan a <strong>[[:$1]]</strong>:",
-       "nolinkshere": "Ninguna página enlaza con '''[[:$1]]'''.",
-       "nolinkshere-ns": "Ninguna página enlaza con '''[[:$1]]''' en el espacio de nombres elegido.",
+       "nolinkshere": "Ninguna página enlaza con <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Ninguna página enlaza con <strong>[[:$1]]</strong> en el espacio de nombres elegido.",
        "isredirect": "página redirigida",
        "istemplate": "inclusión",
        "isimage": "enlace de archivo",
        "ipb-hardblock": "Impedir que los usuarios identificados editen desde esta dirección IP",
        "ipbcreateaccount": "Prevenir la creación de cuentas de usuario",
        "ipbemailban": "Prevenir que el usuario envíe correo electrónico",
-       "ipbenableautoblock": "Bloquear automáticamente la dirección IP usada por este usuario y cualquier IP posterior desde la cual intente editar",
+       "ipbenableautoblock": "Bloquear automáticamente la última dirección IP usada por este usuario y cualquier IP posterior desde la cual intente editar",
        "ipbsubmit": "Bloquear a este usuario",
        "ipbother": "Especificar caducidad",
        "ipboptions": "2 horas:2 hours,1 día:1 day,3 días:3 days,1 semana:1 week,2 semanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 año:1 year,para siempre:infinite",
        "ipb-needreblock": "$1 ya está bloqueado. ¿Quieres cambiar el bloqueo?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Otro bloqueo|Otros bloqueos}}",
        "unblock-hideuser": "No puedes desbloquear a este usuario porque su nombre ha sido ocultado.",
-       "ipb_cant_unblock": "'''Error''': Número ID $1 de bloqueo no encontrado. Pudo haber sido desbloqueado ya.",
+       "ipb_cant_unblock": "Error: no se encuentra el identificador de bloque $1. Pudo haber sido desbloqueado ya.",
        "ipb_blocked_as_range": "Error: la dirección IP $1 no está bloqueada directamente y no puede ser desbloqueada.\nSin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado.",
        "ip_range_invalid": "El rango de IP no es válido.",
        "ip_range_toolarge": "Los bloqueos de rango superiores a /$1 no están permitidos.",
        "proxyblocker": "Bloqueador de proxies",
-       "proxyblockreason": "Su dirección IP ha sido bloqueada porque es un proxy abierto. Por favor, contacte con su proveedor de servicios de Internet o con su servicio de asistencia técnica e infórmeles de este grave problema de seguridad.",
+       "proxyblockreason": "Tu dirección IP ha sido bloqueada porque es un proxy abierto.\nContacta con tu proveedor de servicios de Internet o con tu servicio de asistencia técnica e infórmales de este grave problema de seguridad.",
        "sorbsreason": "Su dirección IP está listada como proxy abierto en DNSBL.",
        "sorbs_create_account_reason": "Su dirección IP está listada como proxy abierto en DNSBL. No puede crear una cuenta",
        "xffblockreason": "Una dirección IP presente en la cabecera X-Forwarded-For, tuya o del servidor proxy que estás usando, ha sido bloqueada. El motivo original del bloqueo fue: $1",
        "lockedbyandtime": "(por {{GENDER:$1|$1}} el $2 a las $3)",
        "move-page": "Trasladar $1",
        "move-page-legend": "Renombrar página",
-       "movepagetext": "Mediante el siguiente formulario puedes renombrar una página, moviendo todo su historial al nombre nuevo.\nEl título anterior redirigirá al nuevo.\nPuedes actualizar automáticamente las redirecciones que apuntan al título original.\nSi eliges no hacerlo, asegúrate de revisar posibles redirecciones [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de asegurar que los enlaces continúen funcionando correctamente.\n\nNota que la página '''no''' se moverá si ya hay una página con el título nuevo, a menos de que ésta sea una redirección y no tenga historial de ediciones pasadas.\nEsto significa que puedes deshacer el renombrado en caso de un error, y que no puedes sobreescribir una página existente.\n\n'''Aviso'''\nEsto puede representar un cambio drástico e inesperado para una página popular;\nasegúrate de entender las consecuencias de esta acción antes de proceder.",
+       "movepagetext": "Mediante el siguiente formulario puedes renombrar una página, moviendo todo su historial al nombre nuevo.\nEl título anterior redirigirá al nuevo.\nPuedes actualizar automáticamente las redirecciones que apuntan al título original.\nSi eliges no hacerlo, asegúrate de revisar posibles redirecciones [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de asegurar que los enlaces continúen funcionando correctamente.\n\nNota que la página <strong>no</strong> se moverá si ya hay una página con el título nuevo, a menos de que ésta sea una redirección y no tenga historial de ediciones pasadas.\nEsto significa que puedes deshacer el renombrado en caso de un error, y que no puedes sobreescribir una página existente.\n\n<strong>Aviso</strong>\nEsto puede representar un cambio drástico e inesperado para una página popular;\nasegúrate de entender las consecuencias de esta acción antes de proceder.",
        "movepagetext-noredirectfixer": "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al nuevo título.\nAsegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página '''no''' será renombrada si ya existe una página con el nuevo título, a no ser que sea una página vacía o una redirección sin historial.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n'''¡Aviso!'''\nEste puede ser un cambio drástico e inesperado para una página popular;\npor favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
        "movepagetalktext": "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''\n*Estés trasladando la página entre espacios de nombres diferentes,\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*No marques el recuadro «Renombrar la página de discusión asociada».\n\nEn estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
        "movearticle": "Renombrar página",
        "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
-       "movecategorypage-warning": "<strong>Advertencia:</strong> Estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página y las páginas en la antigua categoría <em>no</em> serán recategorizadas en la nueva.",
+       "movecategorypage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página, y las páginas en la antigua categoría <em>no</em> se recategorizarán en la nueva.",
        "movenologintext": "Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.",
        "movenotallowed": "No tienes permiso para trasladar páginas.",
        "movenotallowedfile": "No tienes permiso para trasladar archivos.",
        "move-watch": "Vigilar páginas de origen y destino",
        "movepagebtn": "Renombrar página",
        "pagemovedsub": "Renombrado realizado con éxito",
-       "movepage-moved": "'''«$1» ha sido trasladado a «$2».'''",
+       "movepage-moved": "<strong>«$1» ha sido trasladada a «$2»</strong>",
        "movepage-moved-redirect": "Se ha creado una redirección.",
        "movepage-moved-noredirect": "Se ha suprimido la creación de la redirección.",
        "articleexists": "Ya existe una página con ese nombre o el nombre que elegiste no es válido.\nElige otro nombre.",
        "immobile-source-page": "Esta página no se puede renombrar.",
        "immobile-target-page": "No se puede trasladar a ese título.",
        "bad-target-model": "El destino deseado utiliza un modelo diferente de contenido. No se puede realizar la conversión de $1 a $2.",
-       "imagenocrossnamespace": "No se puede trasladar el fichero a otro espacio de nombres",
-       "nonfile-cannot-move-to-file": "No es posible trasladar lo que no es un archivo al espacio de nombres de archivo",
+       "imagenocrossnamespace": "No se puede trasladar el archivo a un espacio de nombres que no es para archivos.",
+       "nonfile-cannot-move-to-file": "No es posible trasladar lo que no es un archivo al espacio de nombres de archivos.",
        "imagetypemismatch": "La nueva extensión de archivo no corresponde con su tipo",
-       "imageinvalidfilename": "El nombre del fichero de destino no es válido",
+       "imageinvalidfilename": "El nombre del archivo de destino no es válido.",
        "fix-double-redirects": "Actualizar las redirecciones que apuntan al título original",
        "move-leave-redirect": "Dejar una redirección",
-       "protectedpagemovewarning": "'''Advertencia:''' Esta página ha sido bloqueada de tal manera que solamente usuarios con privilegios de administrador puedan trasladarla.\nA continuación se muestra la última entrada de registro para referencia:",
-       "semiprotectedpagemovewarning": "'''Nota:''' Esta página ha sido bloqueada para que  solamente usuarios registrados pueden moverla.\nA continuación se muestra la última entrada de registro para referencia:",
+       "protectedpagemovewarning": "<strong>Advertencia:</strong> esta página ha sido protegida de tal manera que solamente usuarios con privilegios de administrador puedan trasladarla.\nA continuación se muestra la última entrada de registro como referencia:",
+       "semiprotectedpagemovewarning": "<strong>Nota:</strong> esta página ha sido protegida de tal manera que solamente usuarios registrados puedan trasladarla.\nA continuación se muestra la última entrada de registro como referencia:",
        "move-over-sharedrepo": "== El archivo existe ==\n[[:$1]] existe en un repositorio compartido. El traslado a este título invalidará la compartición del archivo.",
        "file-exists-sharedrepo": "El nombre de archivo elegido ya está siendo usado en un repositorio compartido.\nPor favor, elige otro nombre.",
        "export": "Exportar páginas",
        "exporttext": "Puedes exportar el texto y el historial de ediciones de una página en particular o de un conjunto de páginas a un texto XML. En el futuro, este texto podría importarse en otro wiki que ejecutase MediaWiki a través de [[Special:Import|importar página]].\n\nPara exportar páginas, escribe los títulos en la caja de texto de abajo, un título por línea, y selecciona si quieres la versión actual junto a las versiones anteriores, con las líneas del historial, o sólo la versión actual con la información sobre la última edición.\n\nEn el último caso también puedes usar un enlace, por ejemplo [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para la página \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Exportar todas las páginas",
        "exportcuronly": "Incluye sólo la revisión actual, no el historial de revisiones al completo.",
-       "exportnohistory": "----\n'''Nota:''' Exportar el historial completo de páginas a través de este formulario ha sido deshabilitado debido a problemas de rendimiento del servidor.",
+       "exportnohistory": "----\n<strong>Nota:</strong> la exportación del historial completo de páginas a través de este formulario ha sido desactivada debido a razones de rendimiento.",
        "exportlistauthors": "Incluir una lista completa de colaboradores para cada página",
        "export-submit": "Exportar",
        "export-addcattext": "Añadir páginas desde la categoría:",
        "export-addcat": "Añadir",
-       "export-addnstext": "Agregar páginas del nombre del sitio:",
+       "export-addnstext": "Agregar páginas desde el espacio de nombres:",
        "export-addns": "Agregar",
        "export-download": "Guardar como archivo",
        "export-templates": "Incluir plantillas",
        "allmessagesdefault": "Texto predeterminado",
        "allmessagescurrent": "Texto actual",
        "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nVisita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
-       "allmessagesnotsupportedDB": "Esta página no está disponible porque '''$wgUseDatabaseMessages''' está deshabilitado.",
+       "allmessagesnotsupportedDB": "Esta página no está disponible porque <strong>$wgUseDatabaseMessages</strong> está desactivado.",
        "allmessages-filter-legend": "Filtro",
        "allmessages-filter": "Filtrar por estado de personalización:",
        "allmessages-filter-unmodified": "Sin modificar",
        "thumbnail_dest_directory": "Incapaz de crear el directorio de destino",
        "thumbnail_image-type": "Tipo de imagen no contemplado",
        "thumbnail_gd-library": "Configuración de la librería GD incompleta: falta la función $1",
-       "thumbnail_image-missing": "El fichero parece no existir: $1",
+       "thumbnail_image-missing": "El archivo parece no existir: $1",
        "thumbnail_image-failure-limit": "Ha habido muchos intentos recientes ($1 o más) para representar esta miniatura. Inténtalo de nuevo más tarde.",
        "import": "Importar páginas",
        "importinterwiki": "Importar desde otro wiki",
        "importstart": "Importando páginas...",
        "import-revision-count": "$1 {{PLURAL:$1|revisión|revisiones}}",
        "importnopages": "No hay páginas que importar.",
-       "imported-log-entries": "Importados $1 {{PLURAL:$1|entradas de registro|entradas de registro}}.",
+       "imported-log-entries": "{{PLURAL:$1|Se importó|Se importaron}} $1 {{PLURAL:$1|entrada|entradas}} de registro.",
        "importfailed": "La importación ha fallado: $1",
        "importunknownsource": "Tipo de fuente de importación desconocida",
        "importcantopen": "No se pudo importar el archivo",
        "importnosources": "No se definieron wikis de los cuales importar y no está permitido subir directamente el historial.",
        "importnofile": "No se subieron archivos de importación.",
        "importuploaderrorsize": "Falló la carga del archivo de importaciones.\nSu tamaño es superior al máximo permitido.",
-       "importuploaderrorpartial": "Falló la subida del fichero de importación.\nSe subió sólo parcialmente.",
-       "importuploaderrortemp": "Falló la subida del fichero de importación.\nNo hay un directorio temporal.",
+       "importuploaderrorpartial": "Falló la subida del archivo de importación.\nSe subió sólo parcialmente.",
+       "importuploaderrortemp": "Falló la subida del archivo de importación.\nNo hay un directorio temporal.",
        "import-parse-failure": "Error de lectura al importar XML",
        "import-noarticle": "¡No hay páginas para importar!",
        "import-nonewrevisions": "Ninguna revisión fue importada (todas ya estaban presentes o fueron omitido debido a errores).",
        "javascripttest-pagetext-unknownframework": "Marco de pruebas desconocido \"$1\".",
        "javascripttest-pagetext-unknownaction": "La acción «$1» es desconocida.",
        "javascripttest-pagetext-frameworks": "Por favor, seleccione uno de los marcos de pruebas siguientes: $1",
-       "javascripttest-pagetext-skins": "Elija un aspecto (skin) para ejecutar las pruebas:",
-       "javascripttest-qunit-intro": "Consulte la [$1 documentación sobre las pruebas] en mediawiki.org.",
+       "javascripttest-pagetext-skins": "Elige una apariencia con la que ejecutar las pruebas:",
+       "javascripttest-qunit-intro": "Consulta la [$1 documentación sobre las pruebas] en mediawiki.org.",
        "tooltip-pt-userpage": "Tu página de {{gender:|usuario|usuaria}}",
        "tooltip-pt-anonuserpage": "La página de usuario de la IP desde la que editas",
        "tooltip-pt-mytalk": "Tu página de discusión",
        "tooltip-ca-nstab-main": "Ver la página de contenido",
        "tooltip-ca-nstab-user": "Ver la página del usuario",
        "tooltip-ca-nstab-media": "Ver la página de multimedia",
-       "tooltip-ca-nstab-special": "Esta es una página especial, no se puede editar la página en sí",
+       "tooltip-ca-nstab-special": "Esta es una página especial, y no puede editarse",
        "tooltip-ca-nstab-project": "Ver la página del proyecto",
        "tooltip-ca-nstab-image": "Ver la página del archivo",
        "tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
        "group-sysop.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Administradores */",
        "group-bureaucrat.js": "/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Burócratas */",
        "anonymous": "{{PLURAL:$1|Usuario anónimo|Usuarios anónimos}} de {{SITENAME}}",
-       "siteuser": "{{GENDER:$1|Usuario|Usuaria}} $1 de {{SITENAME}}",
-       "anonuser": "{{SITENAME}} usuario anónimo $1",
-       "lastmodifiedatby": "Esta página fue modificada por última vez en $2, $1 por $3.",
+       "siteuser": "{{GENDER:$1|el usuario|la usuaria}} $1 de {{SITENAME}}",
+       "anonuser": "el usuario anónimo $1 de {{SITENAME}}",
+       "lastmodifiedatby": "Esta página fue modificada por última vez el $1 a las $2 por $3.",
        "othercontribs": "Basado en el trabajo de $1.",
        "others": "otros",
-       "siteusers": "{{PLURAL:$2|Usuario|Usuarios}} $1 de {{SITENAME}}",
-       "anonusers": "{{SITENAME}} {{PLURAL:$2|usuario|usuarios}} anónimos $1",
+       "siteusers": "{{PLURAL:$2|el usuario|los usuarios}} $1 de {{SITENAME}}",
+       "anonusers": "{{PLURAL:$2|el usuario anónimo|los usuarios anónimos}} $1 de {{SITENAME}}",
        "creditspage": "Créditos de la página",
        "nocredits": "No hay información de créditos para esta página.",
        "spamprotectiontitle": "Filtro de protección contra spam",
        "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
        "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
        "spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
-       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>NO</strong> rellenes esto!",
+       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>No</strong> rellenes esto!",
        "pageinfo-title": "Información de «$1»",
        "pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
        "pageinfo-header-basic": "Información básica",
        "pageinfo-robot-index": "Permitido",
        "pageinfo-robot-noindex": "No permitido",
        "pageinfo-watchers": "Número de usuarios que vigilan la página",
-       "pageinfo-visiting-watchers": "Número de vigiladores de la página visitando las ediciones recientes",
+       "pageinfo-visiting-watchers": "Número de seguidores de la página que visitaron las ediciones recientes",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-few-visiting-watchers": "Puede o no haber seguidores visitando las ediciones recientes",
        "pageinfo-redirects-name": "Número de redirecciones a esta página",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de archivos",
-       "markaspatrolleddiff": "Marcar como revisado",
-       "markaspatrolledtext": "Marcar este artículo como revisado",
+       "markaspatrolleddiff": "Marcar como verificada",
+       "markaspatrolledtext": "Marcar esta página como verificada",
        "markedaspatrolled": "Marcado como revisado",
-       "markedaspatrolledtext": "La revisión seleccionada de [[:$1|$1]] ha sido marcada como revisada.",
+       "markedaspatrolledtext": "La revisión seleccionada de [[:$1|$1]] ha sido marcada como verificada.",
        "rcpatroldisabled": "Se ha desactivado la supervisión de cambios recientes",
-       "rcpatroldisabledtext": "La capacidad de revisar los Cambios Recientes está deshabilitada en este momento.",
-       "markedaspatrollederror": "No se puede marcar como patrullada",
-       "markedaspatrollederrortext": "Debes especificar una revisión para marcarla como patrullada.",
-       "markedaspatrollederror-noautopatrol": "No tienes permisos para marcar tus propios cambios como revisados.",
-       "markedaspatrollednotify": "Este cambio realizado en $1 se ha marcado como revisado.",
-       "markedaspatrollederrornotify": "Error al marcar como revisado.",
+       "rcpatroldisabledtext": "La capacidad de verificar los cambios recientes está deshabilitada en este momento.",
+       "markedaspatrollederror": "No se puede marcar como verificada",
+       "markedaspatrollederrortext": "Debes especificar una revisión para marcarla como verificada.",
+       "markedaspatrollederror-noautopatrol": "No tienes permisos para marcar tus propios cambios como verificados.",
+       "markedaspatrollednotify": "Este cambio realizado en $1 se ha marcado como verificado.",
+       "markedaspatrollederrornotify": "Error al marcar como verificado.",
        "patrol-log-page": "Registro de revisiones",
-       "patrol-log-header": "Este es un registro de revisiones patrulladas.",
+       "patrol-log-header": "Este es un registro de revisiones verificadas.",
        "log-show-hide-patrol": "$1 registro de patrullaje",
        "log-show-hide-tag": "$1 registro de etiquetas",
        "deletedrevision": "Borrada revisión antigua $1",
        "filedelete-archive-read-only": "El servidor web no logra escribir en el directorio archivo \"$1\".",
        "previousdiff": "← Edición anterior",
        "nextdiff": "Edición siguiente →",
-       "mediawarning": "'''Atención''': Este fichero puede contener código malicioso.\nEjecutarlo podría comprometer la seguridad de su equipo.",
+       "mediawarning": "<strong>Advertencia:</strong> este archivo puede contener código malicioso.\nEjecutarlo podría comprometer la seguridad de tu equipo.",
        "imagemaxsize": "Límite de tamaño de imagen:<br />''(para páginas de descripción de archivo)''",
        "thumbsize": "Tamaño de las vistas en miniatura:",
        "widthheight": "$1 × $2",
        "file-info-png-looped": "bucleado",
        "file-info-png-repeat": "reproducido $1 {{PLURAL:$1|vez|veces}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|marco|marcos}}",
-       "file-no-thumb-animation": "'''Nota: debido a limitaciones técnicas, las miniaturas de este archivo no están animadas.'''",
-       "file-no-thumb-animation-gif": "'''Nota: Debido a limitaciones técnicas, las miniaturas de imágenes GIF de alta resolución como esta no están animadas.'''",
+       "file-no-thumb-animation": "<strong>Nota: debido a limitaciones técnicas, las miniaturas de este archivo no estarán animadas.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Nota: debido a limitaciones técnicas, las miniaturas de imágenes GIF de alta resolución como esta no estarán animadas.</strong>",
        "newimages": "Galería de imágenes nuevas",
-       "imagelisttext": "Debajo hay una lista de '''$1''' {{PLURAL:$1|imagen|imágenes}} ordenadas $2.",
+       "imagelisttext": "Debajo hay una lista de <strong>$1</strong> {{PLURAL:$1|archivo ordenado|archivos ordenados}} $2.",
        "newimages-summary": "Esta página especial muestra una galería de los últimos archivos subidos.",
-       "newimages-legend": "Nombre del fichero",
-       "newimages-label": "Nombre del fichero (o una parte):",
+       "newimages-legend": "Filtro",
+       "newimages-label": "Nombre del archivo (o una parte):",
        "newimages-showbots": "Mostrar cargas de bots",
        "noimages": "No hay nada que ver.",
        "ilsubmit": "Buscar",
        "bydate": "por fecha",
-       "sp-newimages-showfrom": "Mostrar nuevas imágenes empezando por $2, $1",
+       "sp-newimages-showfrom": "Mostrar archivos nuevos empezando desde $2, $1",
        "seconds-abbrev": "$1s",
        "minutes-abbrev": "$1m",
        "hours-abbrev": "$1h",
        "exif-gpsspeed": "Velocidad del receptor GPS",
        "exif-gpstrackref": "Referencia para la dirección del movimiento",
        "exif-gpstrack": "Dirección del movimiento",
-       "exif-gpsimgdirectionref": "Referencia de la dirección de imágen",
+       "exif-gpsimgdirectionref": "Referencia para la dirección de la imagen",
        "exif-gpsimgdirection": "Dirección de imagen",
        "exif-gpsmapdatum": "Utilizados datos de medición geodésica",
        "exif-gpsdestlatituderef": "Referencia para la latitud del destino",
        "deletedwhileediting": "<strong>Aviso</strong>: se borró esta página después de que empezaras a editarla.",
        "confirmrecreate": "El usuario [[User:$1|$1]] ([[User talk:$1|disc.]]) borró esta página después de que comenzaras a editarla, por este motivo:\n: ''$2''\nConfirma que realmente quieres volver a crear esta página.",
        "confirmrecreate-noreason": "El usuario [[User:$1|$1]] ([[User talk:$1|discusión]]) borró esta página después de que comenzaras a editarla. Por favor confirma que realmente quieres recrear esta página.",
-       "recreate": "La página fue borrada después de que comenzaste a editarla. Pulsa en «$1» para crearla de nuevo.",
+       "recreate": "Recrear",
        "confirm_purge_button": "Aceptar",
        "confirm-purge-top": "¿Limpiar la caché de esta página?",
        "confirm-purge-bottom": "Purgar una página limpia la caché y fuerza a que aparezca la versión más actual.",
        "watchlisttools-edit": "Ver y editar tu lista de seguimiento",
        "watchlisttools-raw": "Editar lista de seguimiento en crudo",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
-       "duplicate-defaultsort": "'''Atención:''' La clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
+       "duplicate-defaultsort": "<strong>Advertencia:</strong> la clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
        "duplicate-displaytitle": "<strong>Advertencia:</strong> El título visualizado \"$2\" sobreescribe al anterior \"$1\".",
        "invalid-indicator-name": "<strong>Error:</strong> el atributo <code>name</code> de los indicadores de estado de página no debe estar vacío.",
        "version": "Versión",
        "version-extensions": "Extensiones instaladas",
-       "version-skins": "Temas instalados",
+       "version-skins": "Apariencias instaladas",
        "version-specialpages": "Páginas especiales",
        "version-parserhooks": "Extensiones del analizador sintáctico",
        "version-variables": "Variables",
        "version-license": "Licencia de MediaWiki",
        "version-ext-license": "Licencia",
        "version-ext-colheader-name": "Extensión",
-       "version-skin-colheader-name": "Tema",
+       "version-skin-colheader-name": "Apariencia",
        "version-ext-colheader-version": "Versión",
        "version-ext-colheader-license": "Licencia",
        "version-ext-colheader-description": "Descripción",
        "version-license-not-found": "No se han encontrado información detallada de licencia para esta extensión.",
        "version-credits-title": "Reconocimiento para $1",
        "version-credits-not-found": "No se ha encontrado información detallada de reconocimiento para esta extensión.",
-       "version-poweredby-credits": "Este wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+       "version-poweredby-credits": "Este wiki funciona gracias a <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
        "version-poweredby-others": "otros",
        "version-poweredby-translators": "Traductores de translatewiki.net",
        "version-credits-summary": "Queremos reconocer a las siguientes personas por su contribución a [[Special:Version|MediaWiki]].",
        "version-libraries-authors": "Autores",
        "redirect": "Redirigir por archivo, usuario, página o ID de revisión",
        "redirect-legend": "Redirigir a un archivo o página",
-       "redirect-summary": "Esta página especial redirige a un fichero (dado un nombre de fichero), a una página (dado un identificador de revisión o de página) o a una página de usuario (dado un identificador numérico de usuario). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]], o [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Esta página especial redirige a un archivo (dado un nombre), a una página (dado un identificador de revisión o de página) o a una página de usuario (dado un identificador numérico de usuario). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] o [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Ir",
        "redirect-lookup": "Buscar:",
        "redirect-value": "Valor:",
        "redirect-user": "Id. del usuario",
        "redirect-page": "Identificador de la página",
        "redirect-revision": "Revisión de página",
-       "redirect-file": "Nombre de fichero",
+       "redirect-file": "Nombre de archivo",
        "redirect-not-exists": "No se encontró el valor",
        "fileduplicatesearch": "Búsqueda de archivos duplicados",
        "fileduplicatesearch-summary": "Búsqueda de archivos duplicados en base a su valor hash.",
        "fileduplicatesearch-legend": "Busca duplicados",
-       "fileduplicatesearch-filename": "Nombre del fichero:",
+       "fileduplicatesearch-filename": "Nombre de archivo:",
        "fileduplicatesearch-submit": "Buscar",
        "fileduplicatesearch-info": "$1 × $2 píxeles<br />Tamaño: $3<br />Tipo MIME: $4",
        "fileduplicatesearch-result-1": "El archivo «$1» no tiene duplicados idénticos.",
        "specialpages-group-spam": "Herramientas anti-SPAM",
        "specialpages-group-developer": "Herramientas para desarrolladores",
        "blankpage": "Página vacía",
-       "intentionallyblankpage": "Esta pagina está en blanco de manera intencionada.",
+       "intentionallyblankpage": "Esta página está en blanco de manera intencionada.",
        "external_image_whitelist": " #Deja esta línea exactamente como está<pre>\n#Colocar fragmentos de expresiones regulares (sólo la parte que va entre los //) debajo\n#Estos coincidirán con los URLs de las imágenes externas (hotlinked)\n#Aquellos que coincidan serán mostrados como imágenes, de lo contrario solamente un vínculo a la imagen será mostrada\n#Las líneas que empiezan por «#» se consideran comentarios\n#Esta es insensible a las mayúsculas\n\n#Colocar todos los fragmentos regex arriba de esta línea. Deja esta línea exactamente como está</pre>",
        "tags": "Etiquetas de cambios",
        "tag-filter": "Filtro de [[Special:Tags|etiquetas]]:",
        "dberr-usegoogle": "Mientras tanto puedes probar buscando a través de Google.",
        "dberr-outofdate": "Ten en cuenta que su índice de nuestro contenido puede estar desactualizado.",
        "dberr-cachederror": "La siguiente es una página guardada de la página solicitada, y puede no estar actualizada.",
-       "htmlform-invalid-input": "Hay problemas con alguno de los datos que has ingresado",
+       "htmlform-invalid-input": "Hay problemas con alguno de los datos que has ingresado.",
        "htmlform-select-badoption": "El valor que especificaste no es una opción válida.",
        "htmlform-int-invalid": "El valor que especificaste no es un entero.",
        "htmlform-float-invalid": "El valor que ha especificado no es un número.",
-       "htmlform-int-toolow": "El valor que especificaste está debajo del mínimo de $1",
-       "htmlform-int-toohigh": "El valor que especificaste está arriba del máximo de $1",
-       "htmlform-required": "Este valor es obligatorio",
+       "htmlform-int-toolow": "El valor que especificaste está debajo del mínimo de $1.",
+       "htmlform-int-toohigh": "El valor que especificaste está arriba del máximo de $1.",
+       "htmlform-required": "Este valor es obligatorio.",
        "htmlform-submit": "Enviar",
        "htmlform-reset": "Deshacer cambios",
        "htmlform-selectorother-other": "Otro",
        "htmlform-chosen-placeholder": "Selecciona una opción",
        "htmlform-cloner-create": "Añadir más",
        "htmlform-cloner-delete": "Eliminar",
-       "htmlform-cloner-required": "Se requiere al menos un valor",
+       "htmlform-cloner-required": "Se requiere al menos un valor.",
+       "htmlform-title-badnamespace": "[[:$1]] no está en el espacio de nombres \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" no es un título de página que se pueda crear",
+       "htmlform-title-not-exists": "[[:$1]] no existe.",
+       "htmlform-user-not-exists": "<strong>$1</strong> no existe.",
+       "htmlform-user-not-valid": "<strong>$1</strong> no es un nombre de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para búsqueda de texto completo",
        "sqlite-no-fts": "$1 sin soporte para búsqueda de texto completo",
-       "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página «$3»",
+       "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página $3",
        "logentry-delete-restore": "$1 restauró la página «$3»",
        "logentry-delete-event": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|una revisión |$5 revisiones}} en la página  $3: $4",
        "logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de registro de eventos en $3",
        "logentry-delete-revision-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de las revisiones en la página $3",
-       "logentry-suppress-delete": "$1 {{GENDER:$2|borró}}, con restricciones para administradores aplicadas, la página $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|borró}} la página $3",
        "logentry-suppress-event": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
        "logentry-suppress-revision": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de {{PLURAL:$5|una edición|$5 ediciones}} en la página $3: $4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|modificó}} secretamente la visibilidad de los eventos del registro en $3",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sin dejar una redirección",
        "logentry-move-move_redir": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|trasladó}} la página $3 a $4 sobre una redirección y sin dejar una redirección",
-       "logentry-patrol-patrol": "$1 {{GENDER:$2|marcó}} como patrullada la edición $4 de la página $3",
-       "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcó}} automáticamente la edición $4 de la página $3 como patrullada",
+       "logentry-patrol-patrol": "$1 {{GENDER:$2|marcó}} la revisión $4 de la página $3 como verificada",
+       "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|marcó}} automáticamente la revisión $4 de la página $3 como verificada",
        "logentry-newusers-newusers": "La cuenta de usuario $1 ha sido {{GENDER:$2|creada}}",
        "logentry-newusers-create": "Se ha {{GENDER:$2|creado}} la cuenta de usuario $1",
        "logentry-newusers-create2": "La cuenta de usuario $3 ha sido {{GENDER:$2|creada}} por $1",
        "logentry-newusers-byemail": "La cuenta de usuario $3 ha sido {{GENDER:$2|creada}} por $1 y la contraseña ha sido enviada por correo",
        "logentry-newusers-autocreate": "La cuenta $1 se {{GENDER:$2|creó}} automáticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|trasladó}} las preferencias de protección de $4 a $3",
        "logentry-rights-rights": "$1 modificó los grupos a los que pertenece $3: de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece $3",
        "logentry-rights-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5",
        "duration-decades": "$1 {{PLURAL:$1|década|décadas}}",
        "duration-centuries": "$1 {{PLURAL:$1|siglo|siglos}}",
        "duration-millennia": "$1 {{PLURAL:$1|milenio|milenios}}",
-       "rotate-comment": "Imagen girada por $1 {{PLURAL:$1|grado|grados}} en el sentido de las agujas del reloj",
+       "rotate-comment": "Imagen girada $1 {{PLURAL:$1|grado|grados}} en sentido horario",
        "limitreport-title": "Datos de perfilado del analizador:",
        "limitreport-cputime": "Tiempo de uso de CPU",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|segundo|segundos}}",
        "expand_templates_html_output": "Salida HTML en crudo",
        "expand_templates_ok": "Aceptar",
        "expand_templates_remove_comments": "Eliminar comentarios (<!-- ... -->)",
-       "expand_templates_remove_nowiki": "Suprimir <nowiki> etiquetas en resultado",
+       "expand_templates_remove_nowiki": "Suprimir etiquetas <nowiki> en el resultado",
        "expand_templates_generate_xml": "Mostrar el árbol XML.",
        "expand_templates_generate_rawhtml": "Mostrar HTML en crudo",
        "expand_templates_preview": "Previsualización",
-       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor inténtelo de nuevo.</strong>\nSi aun así no funciona, pruebe a [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
-       "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y usted no ha iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, por favor [[Special:UserLogin|inicie sesión]] e inténtelo de nuevo.</strong>",
+       "expand_templates_preview_fail_html": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y se perdieron los datos de la sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, inténtalo de nuevo.</strong>\nSi aun así no funciona, intenta [[Special:UserLogout|cerrar sesión]] y volver a acceder.",
+       "expand_templates_preview_fail_html_anon": "<em>Se ha ocultado la previsualización como precaución frente a ataques JavaScript. Esto se debe a que {{SITENAME}} tiene habilitada la característica de código HTML en bruto, y no has iniciado sesión.</em>\n\n<strong>Si se trata de un intento de previsualización legítimo, [[Special:UserLogin|inicia sesión]] e inténtalo de nuevo.</strong>",
        "pagelanguage": "Selector de idioma de página",
        "pagelang-name": "Página",
        "pagelang-language": "Idioma",
        "special-characters-title-endash": "semirraya",
        "special-characters-title-emdash": "raya",
        "special-characters-title-minus": "signo de resta",
+       "mw-widgets-dateinput-no-date": "Ninguna fecha seleccionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la página aún no existe",
        "mw-widgets-titleinput-description-redirect": "redirigir a $1"
 }
index c0f3da4..15ebac8 100644 (file)
@@ -24,7 +24,8 @@
                        "לערי ריינהארט",
                        "Boxmein",
                        "Roland",
-                       "Postituvi"
+                       "Postituvi",
+                       "Purodha"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "actionthrottled": "Toiming nurjus",
        "actionthrottledtext": "Rämpsmuudatuste vastase meetmena pole sul lühikse aja jooksul seda toimingut liiga palju kordi lubatud sooritada. Sa oled lühikse aja jooskul seda toimingut liiga palju kordi sooritanud.\nPalun proovi mõne minuti pärast uuesti.",
        "protectedpagetext": "See lehekülg on lukustatud, et ei tehtaks muudatusi ega sooritataks muid toiminguid.",
-       "viewsourcetext": "Saad vaadata ja kopeerida lehekülje lähteteksti:",
-       "viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud '''enda muudatuste '''lähteteksti:",
+       "viewsourcetext": "Saad vaadata ja kopeerida selle lehekülje lähteteksti.",
+       "viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud <strong>enda muudatuste</strong> lähteteksti.",
        "protectedinterface": "Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
        "editinginterface": "<strong>Hoiatus:</strong> Redigeerid lehekülge, mille teksti kasutatakse tarkvaraliideses.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.",
        "translateinterface": "Et lisada või muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
        "createacct-benefit-body2": "{{PLURAL:$1|lehekülg|lehekülge}}",
        "createacct-benefit-body3": "{{PLURAL:$1|hiljutine kaastööline|hiljutist kaastöölist}}",
        "badretype": "Sisestatud paroolid ei lange kokku.",
+       "usernameinprogress": "Selle kasutajanimega konto loomine on juba pooleli.\nPalun oota.",
        "userexists": "Sisestatud kasutajanimi on juba kasutusel.\nPalun valige uus nimi.",
        "loginerror": "Viga sisselogimisel",
        "createacct-error": "Tõrge konto loomisel",
        "accmailtitle": "Parool saadetud",
        "accmailtext": "Kasutajale [[User talk:$1|$1]] genereeritud juhuslik parool saadeti aadressile $2.\n\nSeda saab pärast sisselogimist muuta ''[[Special:ChangePassword|parooli muutmise]]'' leheküljel.",
        "newarticle": "(Uus)",
-       "newarticletext": "Lehekülge, kuhu link sind suunas, pole veel.\nLehekülje loomiseks alusta allolevasse kasti kirjutamist (lisateave [$1 juhendist]).\nKui sattusid siia kogemata, klõpsa võrgulehitseja ''tagasi''-nupule.",
+       "newarticletext": "Lehekülge, kuhu link sind suunas, pole veel.\nEt lehekülg luua, alusta allolevas kastis kirjutamist (lisateave [$1 juhendist]).\nKui sattusid siia kogemata, klõpsa veebilehitseja ''tagasi''-nupule.",
        "anontalkpagetext": "----''See on anonüümse kasutaja arutelulehekülg. See kasutaja pole kontot loonud või ei kasuta seda. Sellepärast tuleb meil kasutaja tuvastamiseks kasutada tema IP-aadressi. Sellist IP-aadressi võib kasutada mitu kasutajat. Kui oled osutatud IP-aadressi kasutaja ning leiad, et siinsed kommentaarid ei puutu kuidagi sinusse, [[Special:UserLogin/signup|loo palun kasutajakonto]] või [[Special:UserLogin|logi sisse]], et sind edaspidi teiste anonüümsete kasutajatega segi ei aetaks.''",
        "noarticletext": "Käesoleval leheküljel hetkel teksti ei ole.\nVõid [[Special:Search/{{PAGENAME}}|otsida pealkirjaks olevat fraasi]] teistelt lehtedelt,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} uurida asjassepuutuvaid logisid] või [{{fullurl:{{FULLPAGENAME}}|action=edit}} puuduva lehekülje ise luua]</span>.",
        "noarticletext-nopermission": "Sellel leheküljel pole praegu teksti.\nSaad [[Special:Search/{{PAGENAME}}|otsida selle lehekülje pealkirja]] teistelt lehekülgedelt või <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} otsida seonduvatest logidest]</span>, aga sul pole õigust seda lehekülge alustada.",
        "readonlywarning": "'''Hoiatus: Andmebaas on lukustatud hooldustöödeks, nii et praegu ei saa parandusi salvestada.'''\nVõid teksti hilisemaks kasutamiseks alles hoida tekstifailina.\n\nAdministraator, kes andmebaasi lukustas, andis järgmise selgituse: $1",
        "protectedpagewarning": "'''Hoiatus: See lehekülg on lukustatud, nii et ainult administraatori õigustega kasutajad saavad seda redigeerida.'''\nAllpool on toodud uusim logisissekanne:",
        "semiprotectedpagewarning": "'''Märkus:''' See lehekülg on lukustatud, nii et üksnes registreeritud kasutajad saavad seda muuta.\nAllpool on toodud uusim logisissekanne:",
-       "cascadeprotectedwarning": "'''Hoiatus:''' See lehekülg on nii lukustatud, et ainult administraatori õigustega kasutajad saavad seda redigeerida, sest lehekülg on osa {{PLURAL:$1|järgmisest|järgmisest}} kaskaadkaitsega {{PLURAL:$1|leheküljest|lehekülgedest}}:",
+       "cascadeprotectedwarning": "<strong>Hoiatus:</strong> See lehekülg on nii lukustatud, et ainult administraatori õigustega kasutajad saavad seda redigeerida, sest lehekülg on osa {{PLURAL:$1|järgmisest|järgmistest}} kaskaadkaitsega {{PLURAL:$1|leheküljest|lehekülgedest}}:",
        "titleprotectedwarning": "'''Hoiatus: See lehekülg on nii lukustatud, et selle loomiseks on tarvis [[Special:ListGroupRights|eriõigusi]].'''\nAllpool on toodud uusim logisissekanne:",
        "templatesused": "Sellel leheküljel on kasutusel {{PLURAL:$1|järgmine mall|järgmised mallid}}:",
        "templatesusedpreview": "Eelvaates {{PLURAL:$1|kasutatav mall|kasutatavad mallid}}:",
        "search-category": "(kategooria \"$1\")",
        "search-file-match": "(vastab faili sisule)",
        "search-suggest": "Kas mõtlesid: $1",
+       "search-rewritten": "Vasted otsingule $1. Otsi selle asemel teksti $2.",
        "search-interwiki-caption": "Sõsarprojektid",
        "search-interwiki-default": "Tulemused asukohast $1:",
        "search-interwiki-more": "(veel)",
        "rows": "Ridu:",
        "columns": "Veerge:",
        "searchresultshead": "Otsingutulemite sätted",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Nii</a> lingitud lehekülje suuruse ülempiir (baitides):",
+       "stub-threshold": "Nupukese suurus lingivormistusel ($1):",
+       "stub-threshold-sample-link": "näide",
        "stub-threshold-disabled": "Välja lülitatud",
        "recentchangesdays": "Mitu päeva näidata viimastes muudatustes:",
        "recentchangesdays-max": "Ülemmäär $1 {{PLURAL:$1|päev|päeva}}",
        "newpageletter": "U",
        "boteditletter": "R",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|jälgiv kasutaja|jälgivat kasutajat}}]",
-       "rc_categories": "Ainult kategooriatest (eraldajaks \"|\")",
-       "rc_categories_any": "Mistahes",
+       "rc_categories": "Ainult neist kategooriatest (eraldajaks \"|\"):",
+       "rc_categories_any": "Mõnes valitutest",
        "rc-change-size-new": "$1 {{PLURAL:$1|bait|baiti}} pärast muudatust",
        "newsectionsummary": "/* $1 */ uus alaosa",
        "rc-enhanced-expand": "Näita üksikasju",
        "upload-too-many-redirects": "URL sisaldas liiga palju ümbersuunamisi",
        "upload-http-error": "HTTP-viga: $1",
        "upload-copy-upload-invalid-domain": "Sellest domeenist pole kopeerimise teel üleslaadimine võimalik.",
+       "upload-dialog-title": "Faili üleslaadimine",
+       "upload-dialog-error": "Esines tõrge",
+       "upload-dialog-warning": "Esines hoiatus",
+       "upload-dialog-button-cancel": "Loobu",
+       "upload-dialog-button-done": "Valmis",
+       "upload-dialog-button-save": "Salvesta",
+       "upload-dialog-button-upload": "Laadi üles",
+       "upload-dialog-label-select-file": "Vali fail",
+       "upload-dialog-label-infoform-title": "Üksikasjad",
+       "upload-dialog-label-infoform-name": "Pealkiri",
+       "upload-dialog-label-infoform-description": "Kirjeldus",
+       "upload-dialog-label-usage-title": "Kasutus",
+       "upload-dialog-label-usage-filename": "Failinimi",
        "backend-fail-stream": "Faili $1 ei saanud edastada.",
        "backend-fail-backup": "Faili $1 ei saanud varundada.",
        "backend-fail-notexists": "Faili $1 pole olemas.",
        "booksources-text": "Allpool on linke teistele lehekülgedele, kus müüakse uusi ja kasutatud raamatuid. Lehekülgedel võib olla ka lisainfot raamatute kohta:",
        "booksources-invalid-isbn": "Antud ISBN-number ei ole korrektne; kontrolli algallikast kopeerides vigu.",
        "specialloguserlabel": "Täitja:",
-       "speciallogtitlelabel": "Objekt (pealkiri või kasutaja):",
+       "speciallogtitlelabel": "Objekt (pealkiri või {{ns:user}}:kasutajanimi):",
        "log": "Logid",
        "all-logs-page": "Kõik avalikud logid",
        "alllogstext": "See on {{GRAMMAR:genitive|{{SITENAME}}}} kõigi olemasolevate logide ühendkuva.\nValiku kitsendamiseks vali logitüüp, sisesta kasutajanimi (tõstutundlik) või huvipakkuva lehekülje pealkiri (samuti tõstutundlik).",
        "allpagesbadtitle": "Lehekülje pealkiri oli vigane või sisaldas teise viki või keele eesliidet.\nSee võib sisaldada üht või enamat märki, mida ei saa pealkirjades kasutada.",
        "allpages-bad-ns": "{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimeruumi \"$1\".",
        "allpages-hide-redirects": "Peida ümbersuunamised",
-       "cachedspecial-viewing-cached-ttl": "Vaata vahemälus olevat lehekülje versiooni, mis võib olla kuni $1 vanune.",
+       "cachedspecial-viewing-cached-ttl": "Vaata vahemälus olevat lehekülje versiooni, mis võib olla kuni $1 vana.",
        "cachedspecial-viewing-cached-ts": "Vaatad vahemälus olevat lehekülje versiooni, mis ei pruugi olla täiesti ajakohane.",
        "cachedspecial-refresh-now": "Vaata uusimat versiooni.",
        "categories": "Kategooriad",
        "linksearch-pat": "Otsimisvorm:",
        "linksearch-ns": "Nimeruum:",
        "linksearch-ok": "Otsi",
-       "linksearch-text": "Metamärgina võib kasutada tärni, näiteks \"*.wikipedia.org\".\nOtsingus peab olema vähemalt tipptaseme domeen, näiteks \"*.org\".<br />\nToetatud {{PLURAL:$2|protokoll|protokollid}}: <code>$1</code> (määramata protokolli korral vaikimisi http://).",
+       "linksearch-text": "Metamärgina võib kasutada tärni, näiteks \"*.wikipedia.org\".\nOtsingus peab olema vähemalt tipptaseme domeen, näiteks \"*.org\".<br />\nToetatud {{PLURAL:$2|protokoll|protokollid}}: $1 (määramata protokolli korral vaikimisi http://).",
        "linksearch-line": "$1 on lingitud leheküljelt $2",
        "linksearch-error": "Metamärk võib olla ainult internetiaadressi alguses.",
        "listusersfrom": "Näita kasutajaid alates:",
        "emailuser": "Saada sellele kasutajale e-kiri",
        "emailuser-title-target": "{{GENDER:$1|Kasutajale}} e-kirja saatmine",
        "emailuser-title-notarget": "Kasutajale e-kirja saatmine",
-       "emailpage": "Saada kasutajale e-kiri",
        "emailpagetext": "Alloleva vormi kaudu saad sellele {{GENDER:$1|kasutajale}} e-kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste leheküljel]].",
        "defemailsubject": "E-kiri {{GRAMMAR:genitive|{{SITENAME}}}} kasutajalt $1",
        "usermaildisabled": "Kasutajatele e-kirjade saatmine keelatud",
        "emailccsubject": "Koopia sinu sõnumist kasutajale $1: $2",
        "emailsent": "E-kiri saadetud",
        "emailsenttext": "Sinu teade on e-kirjaga saadetud.",
-       "emailuserfooter": "Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu \"{{int:emailpage}}\" abil.",
+       "emailuserfooter": "Selle e-kirja saatis $1 {{GRAMMAR:elative|{{SITENAME}}}} kasutajale $2 toimingu \"{{int:emailuser}}\" abil.",
        "usermessage-summary": "Jätan süsteemiteate.",
        "usermessage-editor": "Süsteemiteadete edastaja",
        "watchlist": "Jälgimisloend",
        "watchlistanontext": "Palun logi sisse, et oma jälgimisloendit näha või muuta.",
        "watchnologin": "Ei ole sisse logitud",
        "addwatch": "Lisa jälgimisloendisse",
-       "addedwatchtext": "Lehekülg \"[[:$1]]\" on lisatud sinu [[Special:Watchlist|jälgimisloendisse]].\nEdasised muudatused sellel leheküljel ja seotud aruteluleheküljel tuuakse ära jälgimisloendis.",
+       "addedwatchtext": "\"[[:$1]]\" ja selle arutelulehekülg on lisatud sinu [[Special:Watchlist|jälgimisloendisse]].",
        "addedwatchtext-short": "Lehekülg \"$1\" on lisatud sinu jälgimisloendisse.",
        "removewatch": "Eemalda jälgimisloendist",
-       "removedwatchtext": "Lehekülg \"[[:$1]]\" on [[Special:Watchlist|jälgimisloendist]] eemaldatud.",
+       "removedwatchtext": "\"[[:$1]]\" ja selle arutelulehekülg on [[Special:Watchlist|jälgimisloendist]] eemaldatud.",
        "removedwatchtext-short": "Lehekülg \"$1\" on eemaldatud sinu jälgimisloendist.",
        "watch": "Jälgi",
        "watchthispage": "Jälgi seda lehekülge",
        "rollback-success": "Tühistati muudatused, mille tegi $1;\npöörduti tagasi viimasele muudatusele, mille tegi $2.",
        "sessionfailure-title": "Seansiviga",
        "sessionfailure": "Sinu sisselogimisseansiga näib probleem olevat.\nSee toiming on seansiärandamise vastase ettevaatusabinõuna tühistatud.\nMine tagasi eelmisele leheküljele ja taaslaadi see, seejärel proovi uuesti.",
+       "changecontentmodel": "Lehekülje sisumudeli muutmine",
+       "changecontentmodel-legend": "Sisumudeli muutmine",
+       "changecontentmodel-title-label": "Lehekülje pealkiri",
+       "changecontentmodel-model-label": "Uus sisumudel",
+       "changecontentmodel-reason-label": "Põhjus:",
+       "changecontentmodel-success-title": "Sisumudel on muudetud",
+       "changecontentmodel-success-text": "Lehekülje [[:$1]] sisumudel on muudetud.",
+       "changecontentmodel-cannot-convert": "Lehekülje [[:$1]] sisumudelit ei saa teisendada tüübiks $2.",
+       "changecontentmodel-nodirectediting": "Sisumudel $1 ei võimalda otseredigeerimist.",
+       "log-name-contentmodel": "Sisumudeli muutmislogi",
+       "log-description-contentmodel": "Lehekülje sisumudelite muutmisega seotud sündmused",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" sisumudeli: \"$4\" → \"$5\"",
+       "logentry-contentmodel-change-revertlink": "võta tagasi",
+       "logentry-contentmodel-change-revert": "tagasi võetud",
        "protectlogpage": "Kaitsmislogi",
        "protectlogtext": "Allpool on loetletud lehekülgede kaitsetasemete muutmised. Praegu kaitstud lehekülgi vaata [[Special:ProtectedPages|kaitstud lehtede loetelust]].",
        "protectedarticle": "kaitses lehekülje \"[[$1]]\"",
        "undeletepagetext": "{{PLURAL:$1|Järgmine lehekülg|Järgmised leheküljed}} on kustutatud, kuid arhiivis veel olemas ja taastatavad.\nArhiivi sisu võidakse perioodiliselt kustutada.",
        "undelete-fieldset-title": "Redaktsioonide taastamine",
        "undeleteextrahelp": "Kogu lehe ja selle ajaloo taastamiseks jäta kõik linnukesed tühjaks ja vajuta '''''{{int:undeletebtn}}'''''.\nEt taastada valikuliselt, tee linnukesed kastidesse, mida soovid taastada ja vajuta '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 arhiivitud {{PLURAL:$1|redaktsioon|redaktsiooni}}",
+       "undeleterevisions": "$1 kustutatud {{PLURAL:$1|redaktsioon|redaktsiooni}}",
        "undeletehistory": "Kui taastad lehekülje, taastuvad ajaloos kõik redaktsioonid.\nKui vahepeal on loodud uus samanimeline lehekülg, ilmuvad taastatud redaksioonid selle lehekülje ajalukku.",
        "undeleterevdel": "Lehekülge ei taastata, kui viimane redaktsioon või failiversioon kustub seeläbi osaliselt.\nSellisel juhul tuleb uusima kustutatud redaktsiooni juurest linnuke eemaldada või see peitmata jätta.",
        "undeletehistorynoadmin": "See lehekülg on kustutatud.\nKustutamise põhjus ning selle lehekülje kustutamiseelne redigeerimislugu on näha allolevas kokkuvõttes.\nLehekülje kustutamiseelsed redaktsioonid on kättesaadavad ainult administraatoritele.",
        "move-watch": "Jälgi lähte- ja sihtlehekülge",
        "movepagebtn": "Teisalda lehekülg",
        "pagemovedsub": "Lehekülg on teisaldatud",
-       "movepage-moved": "'''\"$1\" teisaldatud pealkirja \"$2\" alla'''",
+       "movepage-moved": "<strong>\"$1\" on teisaldatud pealkirja \"$2\" alla.</strong>",
        "movepage-moved-redirect": "Ümbersuunamisleht loodud.",
        "movepage-moved-noredirect": "Ümbersuunamist ei loodud.",
        "articleexists": "Sellise pealkirjaga lehekülg on juba olemas või pole valitud pealkiri lubatav.\nPalun vali teistsugune pealkiri.",
        "allmessages-prefix": "Eesliitefilter:",
        "allmessages-language": "Keel:",
        "allmessages-filter-submit": "Mine",
-       "allmessages-filter-translate": "Tõlgi",
+       "allmessages-filter-translate": "tõlgi",
        "thumbnail-more": "Suurenda",
        "filemissing": "Fail puudub",
        "thumbnail_error": "Viga pisipildi loomisel: $1",
        "tooltip-pt-logout": "Logi välja",
        "tooltip-pt-createaccount": "See pole küll kohustuslik, aga sul tasub konto luua ja sisse logida.",
        "tooltip-ca-talk": "Arutelu selle lehekülje sisu kohta",
-       "tooltip-ca-edit": "Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.",
+       "tooltip-ca-edit": "Muuda seda lehekülge",
        "tooltip-ca-addsection": "Lisa uus alaosa",
        "tooltip-ca-viewsource": "See lehekülg on kaitstud.\nSaad vaadata selle lähteteksti.",
        "tooltip-ca-history": "Selle lehekülje varasemad redaktsioonid",
        "tooltip-ca-nstab-main": "Vaata sisulehekülge",
        "tooltip-ca-nstab-user": "Näita kasutaja lehte",
        "tooltip-ca-nstab-media": "Näita pildi lehte",
-       "tooltip-ca-nstab-special": "See on erilehekülg, sa ei saa seda lehekülge ennast redigeerida.",
+       "tooltip-ca-nstab-special": "See on erilehekülg ja seda ei saa redigeerida.",
        "tooltip-ca-nstab-project": "Näita projekti lehte",
        "tooltip-ca-nstab-image": "Näita pildi lehte",
        "tooltip-ca-nstab-mediawiki": "Näita süsteemi sõnumit",
        "spam_reverting": "Taastan viimase versiooni, mis ei sisalda linke aadressile $1.",
        "spam_blanking": "Kõik versioonid sisaldasid linke veebilehele $1. Lehekülg tühjendatud.",
        "spam_deleting": "Kustutatud kõik redaktsioonid, mis viitasid aadressile $1.",
-       "simpleantispam-label": "Rämpspostikontroll.\n'''ÄRA''' täida seda välja!",
+       "simpleantispam-label": "Rämpspostikontroll.\n<strong>Ära</strong> täida seda välja!",
        "pageinfo-title": "Teave lehekülje \"$1\" kohta",
        "pageinfo-not-current": "Kahjuks pole vanade redaktsioonide kohta võimalik seda teavet ära tuua.",
        "pageinfo-header-basic": "Põhiteave",
        "pageinfo-robot-index": "Lubatud",
        "pageinfo-robot-noindex": "Keelatud",
        "pageinfo-watchers": "Lehekülje jälgijate arv",
+       "pageinfo-visiting-watchers": "Viimaseid muudatusi külastanud jälgijate arv",
        "pageinfo-few-watchers": "Alla {{PLURAL:$1|ühe jälgija|$1 jälgija}}",
+       "pageinfo-few-visiting-watchers": "Pole kindel, kas jälgijatest keegi külastab viimaseid muudatusi.",
        "pageinfo-redirects-name": "Sellele leheküljele suunatud lehekülgi",
        "pageinfo-subpages-name": "Selle lehekülje alamlehekülgi",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ümbersuunamine|ümbersuunamist}}; $3 {{PLURAL:$3|mitteümbersuunamine|mitteümbersuunamist}})",
        "sp-newimages-showfrom": "Näita uusi faile alates kuupäevast $2, kell $1",
        "hours-abbrev": "$1 t",
        "days-abbrev": "$1 p",
-       "seconds": "{{PLURAL:$1|üks sekund|$1 sekundit}}",
-       "minutes": "{{PLURAL:$1|üks minut|$1 minutit}}",
-       "hours": "{{PLURAL:$1|üks tund|$1 tundi}}",
-       "days": "{{PLURAL:$1|üks päev|$1 päeva}}",
+       "seconds": "{{PLURAL:$1|$1 sekund|$1 sekundit}}",
+       "minutes": "{{PLURAL:$1|$1 minut|$1 minutit}}",
+       "hours": "{{PLURAL:$1|$1 tund|$1 tundi}}",
+       "days": "{{PLURAL:$1|$1 päev|$1 päeva}}",
        "weeks": "{{PLURAL:$1|$1 nädal|$1 nädalat}}",
-       "months": "{{PLURAL:$1|Üks kuu|$1 kuud}}",
-       "years": "{{PLURAL:$1|Üks aasta|$1 aastat}}",
+       "months": "{{PLURAL:$1|1 kuu|$1 kuud}}",
+       "years": "{{PLURAL:$1|1 aasta|$1 aastat}}",
        "ago": "$1 tagasi",
        "just-now": "just nüüd",
        "hours-ago": "$1 {{PLURAL:$1|tund|tundi}} tagasi",
        "confirmemail_success": "Sinu e-posti aadress on kinnitatud\nVõid nüüd [[Special:UserLogin|sisse logida]].",
        "confirmemail_loggedin": "Sinu e-posti aadress on nüüd kinnitatud.",
        "confirmemail_subject": "{{GRAMMAR:genitive|{{SITENAME}}}} e-posti aadressi kinnitamine",
-       "confirmemail_body": "Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\".\n\nKinnitamaks, et see kasutajakonto tõepoolest kuulub sulle ning e-posti teenuste aktiveerimiseks, ava oma võrgulehitsejas järgmine link:\n\n$3\n\nKui see *pole* sinu loodud konto, ava järgmine link kinnituse tühistamiseks:\n\n$5\n\nKinnituskood aegub kuupäeval $4.",
+       "confirmemail_body": "Keegi IP-aadressilt $1, ilmselt sa ise, registreeris selle e-posti aadressiga {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\".\n\nKinnitamaks, et kasutajakonto tõepoolest kuulub sulle ning et aktiveerida e-posti teenused, ava veebilehitsejas järgmine link:\n\n$3\n\nKui sa *pole* kontot registreerinud, ava järgmine link kinnituse tühistamiseks:\n\n$5\n\nKinnituskoodi aegumistähtaeg: $4.",
        "confirmemail_body_changed": "Keegi IP-aadressilt $1, ilmselt sa ise,\nmuutis {{GRAMMAR:inessive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks selle aadressi.\n\nKinnitamaks, et see konto tõepoolest kuulub sulle ja e-posti teenuste taasaktiveerimiseks, ava oma veebilehitsejas järgmine link:\n\n$3\n\nKui see *pole* sinu konto, ava järgmine link\nkinnituse tühistamiseks:\n\n$5\n\nKinnituskood aegub kuupäeval $4.",
-       "confirmemail_body_set": "Keegi, arvatavasti sina ise, IP-aadressilt $1 on {{GRAMMAR:genitive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks määranud selle aadressi.\n\nKinnitamaks, et see konto kuulub tõesti sulle ja {{GRAMMAR:genitive|{{SITENAME}}}} e-posti funktsioonide aktiveerimiseks ava võrgulehitsejas järgmine link:\n\n$3\n\nKui konto *ei* kuulu sulle, kasuta e-posti aadressi kinnituse tühistamiseks järgmist linki:\n\n$5\n\nSelle kinnituskoodi aegumistähtaeg on $4.",
+       "confirmemail_body_set": "Keegi IP-aadressilt $1, arvatavasti sina ise, on {{GRAMMAR:genitive|{{SITENAME}}}} konto \"$2\" e-posti aadressiks määranud selle aadressi.\n\nKinnitamaks, et see konto kuulub tõesti sulle ja et aktiveerida e-posti teenused, ava võrgulehitsejas järgmine link:\n\n$3\n\nKui konto *ei* kuulu sulle, kasuta e-posti aadressi kinnituse tühistamiseks järgmist linki:\n\n$5\n\nSelle kinnituskoodi aegumistähtaeg on $4.",
        "confirmemail_invalidated": "E-posti aadressi kinnitamine tühistati",
        "invalidateemail": "E-posti aadressi kinnituse tühistamine",
        "scarytranscludedisabled": "[Vikidevaheline mallina kasutamine on keelatud]",
        "autoredircomment": "Ümbersuunamine lehele [[$1]]",
        "autosumm-new": "Uus lehekülg: '$1'",
        "autosumm-newblank": "Alustatud tühja leheküljega",
+       "size-bytes": "$1 {{PLURAL:$1|bait|baiti}}",
+       "size-pixel": "$1 {{PLURAL:$1|piksel|pikslit}}",
        "lag-warn-normal": "Viimase {{PLURAL:$1|ühe sekundi|$1 sekundi}} jooksul tehtud muudatused ei pruugi selles loendis näha olla.",
        "lag-warn-high": "Andmebaasiserveri töö viivituste tõttu ei pruugi viimase {{PLURAL:$1|ühe sekundi|$1 sekundi}} jooksul tehtud muudatused selles loendis näha olla.",
        "watchlistedit-normal-title": "Jälgimisloendi redigeerimine",
        "htmlform-cloner-create": "Lisa veel",
        "htmlform-cloner-delete": "Eemalda",
        "htmlform-cloner-required": "Vähemalt üks väärtus on nõutav.",
+       "htmlform-title-badnamespace": "[[:$1]] pole nimeruumis \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "Pealkirja \"$1\" all ei saa lehekülge alustada.",
+       "htmlform-title-not-exists": "Lehekülge [[:$1]] pole olemas.",
+       "htmlform-user-not-exists": "Kasutajat <strong>$1</strong> pole olemas.",
+       "htmlform-user-not-valid": "<strong>$1</strong> pole sobiv kasutajanimi.",
        "sqlite-has-fts": "$1 koos täistekstiotsingu toega",
        "sqlite-no-fts": "$1 ilma täistekstiotsingu toeta",
        "logentry-delete-delete": "$1 {{GENDER:$2|kustutas}} lehekülje $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|lõi}} kasutajakonto $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|lõi}} kasutajakonto $3 ja parool saadeti e-kirjatsi",
        "logentry-newusers-autocreate": "Konto $1 {{GENDER:$2|loodi}} automaatselt",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|teisaldas}} kaitsesätted leheküljelt $4 leheküljele $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|muutis}} kasutaja $3 rühmaliikmesust; enne oli $4, nüüd on $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutis}} kasutaja $3 rühmaliikmesust",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|viidi}} automaatselt üle teise rühma; enne oli $4, nüüd on $5",
        "feedback-back": "Tagasi",
        "feedback-bugcheck": "Hästi! Kontrolli vaid, ega tegu pole juba [$1 teada oleva veaga].",
        "feedback-bugnew": "Kontrollisin. Teata uuest veast",
-       "feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanime ja teabega kasutatava võrgulehitsejaga kohta leheküljele \"[$3 $2]\".",
+       "feedback-bugornote": "Kui arvad, et oskad tehnilist probleemi üksikasjalikult kirjeldada, [$1 teata veast].\nKui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajanimega leheküljele \"[$3 $2]\".",
        "feedback-cancel": "Loobu",
        "feedback-close": "Valmis",
        "feedback-external-bug-report-button": "Koosta tehniline tööülesanne",
        "special-characters-title-endash": "mõttekriips",
        "special-characters-title-emdash": "pikk mõttekriips",
        "special-characters-title-minus": "miinusmärk",
+       "mw-widgets-dateinput-no-date": "Kuupäev valimata",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-KK-PP",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-KK",
        "mw-widgets-titleinput-description-new-page": "lehekülge pole veel",
        "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\""
 }
index 0a74c8f..0ced0ec 100644 (file)
        "jumptonavigation": "nabigazioa",
        "jumptosearch": "bilatu",
        "view-pool-error": "Barkatu, zerbitzariak gainezka daude uneotan.\nErabiltzaile gehiegi ari da orrialde hau ikusi nahiean.\nMesedez itxaron ezazu unetxo bat orrialde honetara berriz sartzen saiatu baino lehen.\n\n$1",
+       "generic-pool-error": "Barkatu, zerbitzariak gainezka daude uneotan.\nErabiltzaile gehiegi ari da baliabide  hau ikusi nahiean.\nMesedez itxaron ezazu unetxo bat baliabide  honetara berriz sartzen saiatu baino lehen.",
        "pool-timeout": "Lock-a itxoiten denbora amaitu da",
        "pool-queuefull": "Prozesuen zerrenda beteta dago",
        "pool-errorunknown": "Errore ezezaguna",
        "gotaccountlink": "Saioa hasi",
        "userlogin-resetlink": "Saioa hasteko datuak ahaztu dituzu?",
        "userlogin-resetpassword-link": "Zure pasahitza ahaztu duzu?",
+       "userlogin-helplink2": "Saioa hasteko laguntza",
        "userlogin-loggedin": "Dagoeneko izena emana zaude {{GENDER:$1|$1}}.\nBeheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.",
        "userlogin-createanother": "Beste kontu bat sortu",
        "createacct-emailrequired": "E-posta helbidea",
        "preview": "Aurrebista erakutsi",
        "showpreview": "Aurrebista erakutsi",
        "showdiff": "Aldaketak erakutsi",
-       "anoneditwarning": "'''Oharra:''' Ez duzu saioa hasi. Zure IP helbidea orrialde honetako historian gordeko da.",
+       "anoneditwarning": "'''Oharra:''' Ez duzu saioa hasi. Aldaketak egiten badituzu, zure IP helbidea ikusgai geratuko da.  <strong>[$1 Saioa hasi]</strong> edo <strong>[$2 kontu bat sortzen]</strong> baduzu, zure aldaketak lankide izenari egotziko zaizkio, eta beste abantaila batzuk ere izango dituzu.",
        "anonpreviewwarning": "''Ez duzu saioa hasi. Gordez gero, zure IP helbidea grabatuko da orri honen edizio historian.''",
        "missingsummary": "'''Gogorarazpena:''' Ez duzu aldaketa laburpen bat zehaztu. Berriz ere gordetzeko aukeratzen baduzu, laburpen mezurik gordeko da.",
        "missingcommenttext": "Mesedez, iruzkin bat idatzi jarraian.",
        "shown-title": "Erakutsi {{PLURAL:$1|emaitza $1|$1 emaitza}} orrialdeko",
        "viewprevnext": "Ikusi ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''«[[:$1]]» izena duen orri bat bada wiki honetan.''' {{PLURAL:$2|0=|Ikus, gainera, aurkitutako beste bilaketa emaitzak.}}",
-       "searchmenu-new": "'''Sortu «[[:$1]]» orria wiki honetan!''' {{PLURAL:$2|0=|Ikus, gainera, zure bilaketarekin aurkitutako orria.|Ikus, gainera, bilaketaren emaitzak.}}",
+       "searchmenu-new": "<strong>Sortu «[[:$1]]» orria wiki honetan!<strong> {{PLURAL:$2|0=|Ikus, gainera, zure bilaketarekin aurkitutako orria.|Ikus, gainera, bilaketaren emaitzak.}}",
        "searchprofile-articles": "Eduki-orriak",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Guztia",
        "prefs-rc": "Azken aldaketak",
        "prefs-watchlist": "Jarraipen zerrenda",
        "prefs-editwatchlist": "Aldatu jarraipen-zerrenda",
+       "prefs-editwatchlist-label": "Editatu sarrerak zure jarraipen zerrendan:",
+       "prefs-editwatchlist-edit": "Zure jarraipen zerrendako tituluak ikusi eta kendu",
        "prefs-editwatchlist-clear": "Garbitu zure jarraipen-zerrenda",
        "prefs-watchlist-days": "Jarraipen zerrendan erakutsi beharreko egun kopurua:",
        "prefs-watchlist-days-max": "Gehienez $1 {{PLURAL:$1|egun|egun}}",
        "prefs-advancedwatchlist": "Aukera aurreratuak",
        "prefs-displayrc": "Aukerak erakutsi",
        "prefs-displaywatchlist": "Aukerak erakutsi",
+       "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Ezberdintasunak",
        "prefs-help-prefershttps": "Hobespen hauek eragina izango dute sartzen zaren hurrengoan.",
        "prefs-tabs-navigation-hint": "Gomendioa: Fitxen zerrendan nabigatzeko ezker eta eskuin geziak erabil ditzakezu.",
        "action-viewmywatchlist": "zure jarraipen zerrenda ikusi",
        "action-viewmyprivateinfo": "zure informazio pribatua ikusi",
        "action-editmyprivateinfo": "zure informazio pribatua aldatu",
+       "action-managechangetags": "Etiketak sortu eta ezabatu datu basean",
        "nchanges": "{{PLURAL:$1|aldaketa 1|$1 aldaketa}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|azkeneko bisitatik}}",
        "enhancedrc-history": "historia",
        "newpageletter": "B",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|lankide|lankide}} jarraitzen]",
-       "rc_categories": "Kategorietara mugatu (\"|\" karaktereaz banandu)",
-       "rc_categories_any": "Edozein",
+       "rc_categories": "Kategorietara mugatu (\"|\" karaktereaz banandu):",
+       "rc_categories_any": "Aukeratutako edozein",
        "rc-change-size-new": "{{PLURAL:$1|Byte 1|$1 byte}} aldaketaren ostean",
        "newsectionsummary": "/* $1 */ atal berria",
        "rc-enhanced-expand": "Erakutsi xehetasunak",
        "largefileserver": "Fitxategi hau zerbitzariak baimentzen duena baino handiagoa da.",
        "emptyfile": "Badirudi igotzen ari zaren fitxategia hutsik dagoela. Mesedez, egiaztatu fitxategi hori dela igo nahi duzuna.",
        "windows-nonascii-filename": "Wiki honek ez du baimentzen letra bereziak dituzten fitxategi izenak.",
-       "fileexists": "Badago izen hori daukan fitxategi bat; mesedez, ikusi existitzen den <strong>[[:$1]]</strong> fitxategia aldatu nahi duzun egiaztatzeko.\n[[$1|thumb]]",
+       "fileexists": "Badago izen hori daukan fitxategi bat; mesedez, ikusi existitzen den <strong>[[:$1]]</strong> ziur {{GENDER:|ez bazaude}} eta fitxategia aldatu nahi duzun egiaztatzeko.\n[[$1|thumb]]",
        "filepageexists": "Fitxategi honen deskribapen orria dagoeneko sortuta dago <strong>[[:$1]]</strong>-en, baina, ez da existitzen izen hori duen fitxategirik.\nIdazten duzun laburpena ez da deskribapen orrian agertuko.\nZure laburpena agertzeko, eskuz aldatu beharko duzu.\n[[$1|thumb]]",
-       "fileexists-extension": "Badago antzeko izena duen fitxategi bat: [[$2|thumb]]\n* Igotako fitxategiaren izena: <strong>[[:$1]]</strong>\n* Aurretik dagoen fitxategiaren izena: <strong>[[:$2]]</strong>\nHautatu beste izen bat.",
+       "fileexists-extension": "Badago antzeko izena duen fitxategi bat: [[$2|thumb]]\n* Igotako fitxategiaren izena: <strong>[[:$1]]</strong>\n* Aurretik dagoen fitxategiaren izena: <strong>[[:$2]]</strong>\nAgian izen esanguratsuago bat erabili nahi duzu?",
        "fileexists-thumbnail-yes": "Badirudi neurri txikiko irudia dela ''(irudi txikia)''. [[$1|thumb]]\nEgiaztatu <strong>[[:$1]]</strong> fitxategia.\nEgiaztatutako fitxategia eta jatorrizkoa berdinak badira ez dago irudi txikia igo beharrik.",
        "file-thumbnail-no": "Fitxategiaren izena <strong>$1</strong>-(r)ekin hasten da.\nBadirudi tamaina txikiko irudia ''(thumbnail)'' dela.\nIrudi hau bereizmen handiagoan izango bazenu igo ezazu, bestela, fitxategiaren izena aldatu mesedez.",
        "fileexists-forbidden": "Badago izen hori daukan fitxategia, eta ezin da gainidatzi.\nOraindik fitxategia igo nahi baduzu, mesedez atzera itzuli eta igo fitxategia izen ezberdin batekin. [[File:$1|thumb|center|$1]]",
        "upload-too-many-redirects": "URLak birbideratze gehiegi zituen",
        "upload-http-error": "HTTP errorea gertatu da: $1",
        "upload-copy-upload-invalid-domain": "Domeinu honetan ezin dira igoerak kopiatu.",
+       "upload-dialog-title": "Igo fitxategia",
+       "upload-dialog-error": "Errore bat gertatu da",
+       "upload-dialog-button-cancel": "Utzi",
+       "upload-dialog-button-done": "Egina",
+       "upload-dialog-button-save": "Gorde",
+       "upload-dialog-button-upload": "Igo",
+       "upload-dialog-label-select-file": "Fitxategia Aukeratu",
+       "upload-dialog-label-infoform-title": "Xehetasunak",
+       "upload-dialog-label-infoform-name": "Izena",
+       "upload-dialog-label-infoform-description": "Deskribapena",
+       "upload-dialog-label-usage-title": "Erabilera",
+       "upload-dialog-label-usage-filename": "Fitxategiaren izena",
        "backend-fail-stream": "Ezin izan da \"$1\" fitxategiaren stream egin.",
        "backend-fail-backup": "Ezin izan da \"$1\" fitxategiaren backup egin.",
        "backend-fail-notexists": "$1 fitxategia ez da existitzen.",
        "randomincategory-invalidcategory": "\"$1\" ez da kategoria izen baliagarri bat.",
        "randomincategory-nopages": "Ez dago orrialderik [[:Category:$1|$1]] kategorian.",
        "randomincategory-category": "Kategoria:",
+       "randomincategory-legend": "Kategoriako ausazko orrialdea",
        "randomincategory-submit": "Joan",
        "randomredirect": "Ausazko birbideratzea",
        "randomredirect-nopages": "Ez dago birzuzenketarik \"$1\" izen-tartean.",
        "protectedpages": "Babestutako orrialdeak",
        "protectedpages-indef": "Babes mugagabeak bakarrik",
        "protectedpages-cascade": "Kaskada moduko babesak bakarrik",
+       "protectedpages-noredirect": "Birzuzenketak ezkutatu",
        "protectedpagesempty": "Ez dago parametro horiek dituen babesturiko orrialderik oraintxe.",
+       "protectedpages-timestamp": "Denbora-marka",
        "protectedpages-page": "Orria",
        "protectedpages-expiry": "Epemuga:",
        "protectedpages-reason": "Arrazoia",
        "linksearch-pat": "Bilaketa katea:",
        "linksearch-ns": "Izen-tartea:",
        "linksearch-ok": "Bilatu",
-       "linksearch-text": "\"*.wikipedia.org\" bezalako izartxoak erabil daitezke.\nGutxienez goi mailako domeinua behar du, adibidez \"*.org\".<br />\nBaimendutako {{PLURAL:$2|protokoloa|protokoloak}}: <code>$1</code> (protokoloa zehazten ez bada http:// hartzen da lehenetsitzat).",
+       "linksearch-text": "\"*.wikipedia.org\" bezalako izartxoak erabil daitezke.\nGutxienez goi mailako domeinua behar du, adibidez \"*.org\".<br />\nBaimendutako {{PLURAL:$2|protokoloa|protokoloak}}: $1 (protokoloa zehazten ez bada http:// hartzen da lehenetsitzat).",
        "linksearch-line": "$1, $2(e)tik lotuta",
        "linksearch-error": "Komodinak izenaren hasieran bakarrik agertu beharko lirateke.",
        "listusersfrom": "Honela hasten diren erabiltzaileak bistaratu:",
        "listgrouprights-removegroup-all": "Talde guztiak kendu daitezke",
        "listgrouprights-addgroup-self-all": "Talde guztiak norbere kontura gehitu",
        "listgrouprights-removegroup-self-all": "Talde guztiak norbere kontutik ezabatu",
+       "listgrouprights-namespaceprotection-namespace": "Izen-tartea",
+       "trackingcategories-disabled": "Kategoria desgaitua dago",
        "mailnologin": "Bidalketa helbiderik ez",
        "mailnologintext": "Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].",
        "emailuser": "Erabiltzaile honi e-posta bidali",
        "emailuser-title-target": "{{GENDER:$1|Erabiltzale}} honi e-posta bidali",
        "emailuser-title-notarget": "Erabiltzaileari e-maila bidali",
-       "emailpage": "Erabiltzaileari e-posta bidali",
        "emailpagetext": "{{GENDER:$1|Erabiltzaile}} honek baliozko e-posta helbide bat ezarri badu bere hobespenetan, beheko formularioa erabiliz mezu bat bidal dakioke.\n[[Special:Preferences|Hobespenetan]] daukazun e-posta helbidea azalduko da mezuaren bidaltzaile bezala eta beraz erantzun ahal izango dizu.",
        "defemailsubject": "{{SITENAME}} e-posta \"$1\" lankideak",
        "usermaildisabled": "Erabiltzailearen e-maila desaktibatuta",
        "emailccsubject": "Zure mezuaren kopia $1(r)i: $2",
        "emailsent": "Mezua bidali egin da",
        "emailsenttext": "Zure e-posta mezua bidali egin da.",
-       "emailuserfooter": "E-posta hau $1(e)k bidali dio $2(r)i {{SITENAME}}ko \"E-posta bidali\" funtzioa erabiliz.",
+       "emailuserfooter": "E-posta hau $1(e)k bidali dio $2(r)i {{SITENAME}}ko \"{{int:emailuser}}\" funtzioa erabiliz.",
        "usermessage-summary": "Sistema mezua uzten.",
        "usermessage-editor": "Sistemako mezularia",
        "watchlist": "Jarraipen zerrenda",
        "mywatchlist": "Jarraipen zerrenda",
        "watchlistfor2": "$1 ($2)",
        "nowatchlist": "Zure jarraipen zerrenda hutsik dago.",
-       "watchlistanontext": "Mesedez $1 zure jarraipen zerrendako orrialdeak ikusi eta aldatu ahal izateko.",
+       "watchlistanontext": "Mesedez saioa hasi zure jarraipen zerrendako orrialdeak ikusi eta aldatu ahal izateko.",
        "watchnologin": "Saioa hasi gabe",
        "addwatch": "Jarraipen zerrendara gehitu",
        "addedwatchtext": "«[[:$1]]» orria zure [[Special:Watchlist|jarraipen zerrendara]] erantsi da. \n\nOrri honetan aurrerantzean egindako aldaketak zerrenda horretan agertuko dira.",
+       "addedwatchtext-short": "$1 orria zure jarraipen zerrendara gehitu da.",
        "removewatch": "Kendu zure jarraipen zerrendatik",
        "removedwatchtext": "\"[[:$1]]\" orrialdea zure [[Special:Watchlist|jarraipen zerrendatik]] kendu da.",
+       "removedwatchtext-short": "$1 orria zure jarraipen zerrendatik ezabatu da.",
        "watch": "Jarraitu",
        "watchthispage": "Orrialde hau jarraitu",
        "unwatch": "Ez jarraitu",
        "sessionfailure-title": "Saio-akatsa",
        "sessionfailure": "Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko \"atzera\" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.",
        "changecontentmodel-title-label": "Orriaren izenburua",
+       "changecontentmodel-reason-label": "Arrazoia:",
+       "logentry-contentmodel-change-revertlink": "desegin",
+       "logentry-contentmodel-change-revert": "desegin",
        "protectlogpage": "Babes erregistroa",
        "protectlogtext": "Orri-babesteen zerrenda ageri da jarraian.\nIkus [[Special:ProtectedPages|orri babestuen zerrenda]], orain indarrean dauden orri babesen zerrenda ikusteko.",
        "protectedarticle": "\"[[$1]]\" babestu da\"",
        "undeletepagetext": "Jarraian zerrendatzen {{PLURAL:$1|den orrialdea ezabatu da baina oraindik artxiboan gordeta dago eta leheneratu egin daiteke.|diren orrialdeak ezabatu dira baina oraindik artxiboan gordeta daude eta leheneratu egin daitezke.}}\nArtxiboa noizean behin hustu egin liteke.",
        "undelete-fieldset-title": "Berrikuspenak berrezarri",
        "undeleteextrahelp": "Orrialde osoko historia berreskuratzeko, koadrotxo guztiak hautatu gabe utzi eta '''''{{int:undeletebtn}}'''''-n klik egin.\nAukeratutako leheneratze bat burutzeko, leheneratu nahi dituzun berrikuspenen koadrotxoak markatu eta '''''{{int:undeletebtn}}'''''-n klik egin.",
-       "undeleterevisions": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} artxibatuta",
+       "undeleterevisions": "$1 {{PLURAL:$1|berrikuspen|berrikuspen}} ezabatuak",
        "undeletehistory": "Orrialdea leheneratzen baduzu, berrikuspena guztiak leheneratuko dira historian.\nEzabatu ondoren izen berdina duen orrialde berri bat sortzen bada leheneratutako berrikuspenak azalduko dira historian.",
        "undeleterevdel": "Desezabatzea ez da egingo, baldin horren ondorioz goreneko orria edo fitxategia partzialki ezabatuko bada.\nHalakoetan, ezabatutako azken aldaketak desaukeratu edo atzera agerrarazi beharko dituzu.",
        "undeletehistorynoadmin": "Artikulua ezabatu egin da. Ezabatzeko azalpena beheko laburpenean erakusten da, ezabatu aurretik parte hartu zuten erabiltzaileen xehetasunekin batera. Ezabatutako berrikuspenen oraingo testua administratzaileek bakarrik ikus dezakete.",
        "spam_reverting": "$1(e)rako loturarik ez daukan azken bertsiora itzultzen",
        "spam_blanking": "Berrikuspen guztiek $1(e)rako lotura zeukaten, husten",
        "spam_deleting": "$1(e)ra loturak dituzten errebisio guztiak ezabatzen",
-       "simpleantispam-label": "Anti-spam egiaztapena.\nAtal hau '''EZ''' bete!",
+       "simpleantispam-label": "Anti-spam egiaztapena.\nAtal hau <strong>ez</strong> bete!",
        "pageinfo-title": "\"$1\"(r)entzako informazioa",
        "pageinfo-not-current": "Barkatu, errebisio zaharretako informazioa eskaintzea ezinezkoa da.",
        "pageinfo-header-basic": "Oinarrizko informazioa",
        "duplicate-defaultsort": "Adi: Berezko \"$2\" antolatzeak aurreko berezko \"$1\" antolatzea gainditzen du.",
        "version": "Bertsioa",
        "version-extensions": "Instalatutako luzapenak",
-       "version-skins": "Itxurak",
+       "version-skins": "Instalatutako itxurak",
        "version-specialpages": "Aparteko orrialdeak",
        "version-parserhooks": "Parser estentsioak",
        "version-variables": "Aldagaiak",
        "version-license": "MediaWiki Lizentzia",
        "version-ext-license": "Lizentzia",
        "version-ext-colheader-name": "Luzapena",
+       "version-skin-colheader-name": "Itxura",
        "version-ext-colheader-version": "Bertsioa",
        "version-ext-colheader-license": "Lizentzia",
        "version-ext-colheader-description": "Deskribapena",
        "version-entrypoints": "Sarrera puntuko URLa",
        "version-entrypoints-header-entrypoint": "Sarrera puntua",
        "version-entrypoints-header-url": "URL",
+       "version-libraries-library": "Liburutegia",
        "version-libraries-version": "Bertsioa",
        "version-libraries-license": "Lizentzia",
        "version-libraries-description": "Deskribapena",
        "redirect-lookup": "Ikuskatu:",
        "redirect-value": "Balioa:",
        "redirect-user": "Erabiltzailearen identifikazioa (ID):",
+       "redirect-page": "Orriaren IDa",
        "redirect-revision": "Orrialdearen berrikuspena",
        "redirect-file": "Fitxategiaren izena",
        "redirect-not-exists": "Ez da baliorik aurkitu",
        "tags-tag": "Etiketaren izena",
        "tags-display-header": "Aldaketa zerrenden itxura",
        "tags-description-header": "Esanahiaren deskribapen osoa",
+       "tags-source-header": "Iturria",
        "tags-active-header": "Aktiboa?",
        "tags-hitcount-header": "Etiketatutako aldaketak",
        "tags-actions-header": "Ekintzak",
        "tags-edit": "aldatu",
        "tags-delete": "ezabatu",
        "tags-activate": "aktibatu",
+       "tags-deactivate": "desaktibatu",
        "tags-hitcount": "$1 {{PLURAL:$1|aldaketa|aldaketa}}",
+       "tags-create-heading": "Etiketa berria sortu",
+       "tags-create-tag-name": "Etiketaren izena:",
        "tags-create-reason": "Arrazoia:",
        "tags-create-submit": "Sortu",
+       "tags-delete-title": "Etiketa ezabatu",
        "tags-delete-reason": "Arrazoia:",
+       "tags-delete-not-found": "\"$1\" etiketa  ez da existitzen.",
        "tags-activate-reason": "Arrazoia:",
        "tags-activate-submit": "Aktibatu",
        "tags-deactivate-reason": "Arrazoia:",
+       "tags-deactivate-submit": "Desaktibatu",
+       "tags-edit-existing-tags": "Existitzen diren etiketak:",
        "tags-edit-new-tags": "Etiketa berriak:",
        "tags-edit-add": "Gehitu etiketa hauek:",
        "tags-edit-remove": "Kendu etiketa hauek:",
        "htmlform-chosen-placeholder": "Aukeratu",
        "htmlform-cloner-create": "Gehitu gehiago",
        "htmlform-cloner-delete": "Kendu",
+       "htmlform-title-not-exists": "[[:$1]] ez da existitzen.",
        "sqlite-has-fts": "$1 testu osoan bilatzeko laguntzarekin",
        "sqlite-no-fts": "$1 testu osoan bilatzeko laguntzarik gabe",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
        "logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du",
        "logentry-newusers-newusers": "$1 erabiltzaile kontua sortu da",
-       "logentry-newusers-create": "$1 erabiltzaile kontua sortu da",
+       "logentry-newusers-create": "$1 erabiltzaile kontua {{GENDER:$2|sortu da}}",
        "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
        "logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
        "rightsnone": "(bat ere ez)",
        "revdelete-summary": "aldaketaren laburpena",
        "feedback-adding": "Orriari feedbacka gehitzen...",
+       "feedback-back": "Atzera",
        "feedback-bugnew": "Txekeatu dut. Bug berria bidaliko",
        "feedback-cancel": "Utzi",
        "feedback-close": "Egina",
+       "feedback-error-title": "Errorea",
        "feedback-error1": "Akatsa: APIaren emaitza ez ezagunak",
        "feedback-error2": "Akatsa: Aldaketa ez da egin",
        "feedback-error3": "Akatsa: APIaren erantzunik gabe",
        "feedback-message": "Mezua:",
        "feedback-subject": "Gaia:",
        "feedback-submit": "Bidali",
+       "feedback-thanks-title": "Eskerrik asko!",
        "searchsuggest-search": "Bilatu",
        "searchsuggest-containing": "edukian...",
        "api-error-badaccess-groups": "Ez duzu baimendik fitxategi hauek wiki honetara igotzeko.",
        "expand_templates_remove_nowiki": "Ezabatu <nowiki> etiketen emaitzak",
        "expand_templates_generate_xml": "Erakutsi XML parse zuhaitza",
        "expand_templates_preview": "Aurreikusi",
+       "pagelanguage": "Orriaren hizkuntza aukeratu",
+       "pagelang-name": "Orria",
        "pagelang-language": "Hizkuntza",
+       "pagelang-use-default": "Hizkuntza lehenetsia erabili",
        "pagelang-select-lang": "Hizkuntza aukeratu",
        "right-pagelang": "Aldatu orrialdearen hizkuntza",
        "action-pagelang": "orrialdearen hizkuntza aldatu",
+       "log-name-pagelang": "Hizkuntza aldatu:",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gaituta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desgaituta''')",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
        "mediastatistics-header-unknown": "Ezezaguna",
        "mediastatistics-header-bitmap": "Bit-mapako irudiak",
        "mediastatistics-header-drawing": "Marrazkiak (irudi bektorialak)",
+       "mediastatistics-header-audio": "Audioa",
        "mediastatistics-header-video": "Bideoak",
+       "mediastatistics-header-office": "Bulego",
        "json-error-syntax": "Sintaxi-errorea",
        "special-characters-group-latin": "Latina",
        "special-characters-group-latinextended": "Latin hedatua",
        "special-characters-group-thai": "Thaiera",
        "special-characters-group-lao": "Laosera",
        "special-characters-group-khmer": "Khmerrera",
-       "special-characters-title-minus": "minus zeinua"
+       "special-characters-title-minus": "minus zeinua",
+       "mw-widgets-dateinput-no-date": "Ez duzu datarik aukeratu"
 }
index c498ae3..3529566 100644 (file)
@@ -8,7 +8,8 @@
                        "Xuacu",
                        "아라",
                        "Babanwalia",
-                       "Henares"
+                       "Henares",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Surrayal atihus:",
        "prefs-custom-css": "CSS pressonalizau",
        "prefs-custom-js": "JS pressonalizau",
        "youremail": "Email:",
-       "username": "Nombri d'usuáriu:",
+       "username": "{{GENDER:$1|Nombri d'usuáriu|Nombri d'usuária}}:",
        "prefs-memberingroups": "Miembru de {{PLURAL:$1|grupu|groupus}}:",
        "yourrealname": "Nombri verdaeru:",
        "yourlanguage": "Palra:",
        "nlinks": "$1 {{PLURAL:$1|atihu|atihus}}",
        "nmembers": "$1 {{PLURAL:$1|miembru|miembrus}}",
        "nrevisions": "$1 {{PLURAL:$1|revisión|revisionis}}",
-       "nviews": "$1 {{PLURAL:$1|vesita|vesitas}}",
        "specialpage-empty": "Esta páhina está vacia.",
        "lonelypages": "Páhinas güérfanas",
        "lonelypagestext": "Las siguientis páginas nu están atijás (dendi otras páginas) ena {{SITENAME}}.",
        "mailnologin": "Nu envial direción",
        "mailnologintext": "Ebis estal [[Special:UserLogin|rutrau]]\ni tenel una direción d´email correta enas tus [[Special:Preferences|preferéncias]]\npa envial correus a otrus usuárius.",
        "emailuser": "Envial un email a esti usuáriu",
-       "emailpage": "E-mail el usuáriu",
        "emailpagetext": "Si esti usuáriu á escrebiu una direción email enas sus preferéncias, con el hormulariu d'embahu se l'enviará un mensahi.\nLa direción email qu'aigas escrebiu enas tus preferéncias apaicirá cumu remitenti el mensahi, d'esta horma, el destinatariu pudrá contestalti.",
        "defemailsubject": "E-mail de {{SITENAME}}",
        "noemailtitle": "Nu ai direción d´e-mail",
index 288e4b8..ccbbf75 100644 (file)
@@ -46,7 +46,8 @@
                        "Arash.pt",
                        "Signal89",
                        "Macofe",
-                       "Danialbehzadi"
+                       "Danialbehzadi",
+                       "MRG90"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "actionthrottledtext": "به منظور جلوگیری از انتشار اسپم، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.\nلطفاً پس از چند دقیقه دوباره تلاش کنید.",
        "protectedpagetext": "این صفحه برای جلوگیری از ویرایش یا فعالیت دیگر محافظت شده‌است.",
        "viewsourcetext": "می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:",
-       "viewyourtext": "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
+       "viewyourtext": "می‌توانید کد مبدأ <strong>ویرایش‌هایتان</strong> در این صفحه را ببینید و کپی کنید.",
        "protectedinterface": "این صفحه ارائه‌دهندهٔ متنی برای واسط کاربر این نرم‌افزار در این ویکی است و به منظور پیشگیری از خرابکاری محافظت شده‌است.\nبرای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
        "editinginterface": "<strong>هشدار:</strong> صفحه‌ای که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.\nتغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.",
        "translateinterface": "برای افزودن یا تغییر دادن ترجمه برای همهٔ ویکی‌ها، لطفاً از [//translatewiki.net/ translatewiki.net]، پروژهٔ محلی‌سازی مدیاویکی، استفاده کنید.",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
        "createacct-benefit-body3": "{{PLURAL:$1|مشارکت‌کنندهٔ}} اخیر",
        "badretype": "گذرواژه‌هایی که وارد کرده‌اید یکسان نیستند.",
+       "usernameinprogress": "ایجاد حساب برای این نام کاربر در جریان است. لطفا صبور باشید.",
        "userexists": "نام کاربری‌ای که وارد کردید قبلاً استفاده شده‌است.\nلطفاً یک نام دیگر انتخاب کنید.",
        "loginerror": "خطا در ورود به سامانه",
        "createacct-error": "خطای ایجاد حساب کاربری",
        "throttled-mailpassword": "یک ایمیل بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک ایمیل بازنشانی گذرواژه فرستاده می‌شود.",
        "mailerror": "خطا در ارسال ایمیل: $1",
        "acct_creation_throttle_hit": "بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.\nبه همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.",
-       "emailauthenticated": "آدرس ایمیل شما در $2 ساعت $3 تأیید شده است.",
+       "emailauthenticated": "نشانی ایمیل شما در $2 ساعت $3 تأیید شده است.",
        "emailnotauthenticated": "آدرس ایمیل شما هنوز تأیید نشده است.\nبرای هیچ‌یک از ویژگی‌های زیر، ایمیل ارسال نخواهد شد.",
        "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک آدرس ایمیل در ترجیحات خود مشخص کنید.",
-       "emailconfirmlink": "آدرس ایمیل خود را تأیید کنید",
+       "emailconfirmlink": "نشانی ایمیل خود را تأیید کنید",
        "invalidemailaddress": "آدرس ایمیل واردشدهٔ قابل قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً آدرسی با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
        "cannotchangeemail": "آدرس‌های ایمیل حساب کاربری در این ویکی قابل تغییر نیست.",
        "emaildisabled": "این وب سایت قادر به ارسال ایمیل نیست.",
        "hr_tip": "خط افقی (از آن کم استفاده کنید)",
        "summary": "خلاصه:",
        "subject": "موضوع/عنوان:",
-       "minoredit": "این ویرایش جزئی‌است",
+       "minoredit": "این ویرایش، جزئی است",
        "watchthis": "پی‌گیری این صفحه",
        "savearticle": "صفحه ذخیره شود",
        "preview": "پیش‌نمایش",
        "creating": "ایجاد $1",
        "editingsection": "در حال ویرایش $1 (بخش)",
        "editingcomment": "در حال ویرایش $1 (بخش تازه)",
-       "editconflict": "اÙ\85کاÙ\86 Ø°Ø®Û\8cرÙ\87â\80\8cسازÛ\8c ØªØºÛ\8cÛ\8cرات {{GENDER:|Ø´Ù\85ا}} Ù\86بÙ\88د Ø²Û\8cرا ØªØ¹Ø§Ø±Ø¶ Ù\88Û\8cراÛ\8cØ´Û\8c Ø±Ø® Ø¯Ø§Ø¯. Ø¢Û\8cا Ù\85Û\8câ\80\8cØ®Ù\88اÙ\87Û\8cد ØªØ¹Ø§Ø±Ø¶ Ø±Ø§ Ø¨Ù\87 ØµÙ\88رت Ø¯Ø³ØªÛ\8c Ø­Ù\84 Ú©Ù\86Û\8cدØ\9f",
+       "editconflict": "تعارض Ù\88Û\8cراÛ\8cØ´Û\8c: $1",
        "explainconflict": "از وقتی ویرایش این صفحه را آغاز کرده‌اید شخص دیگری آن را تغییر داده است.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شده‌است.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «{{int:savearticle}}» <strong>فقط</strong> متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
        "yourtext": "متن شما",
        "storedversion": "نسخهٔ ذخیره شده",
        "readonlywarning": "'''هشدار: پایگاه داده برای نگهداری قفل شده‌است، به همین علت هم‌اکنون نمی‌توانید ویرایش‌هایتان را ذخیره کنید.'''\nاگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
        "protectedpagewarning": "'''هشدار: این صفحه قفل شده‌است تا فقط کاربران با دسترسی مدیریت بتوانند ویرایشش کنند.'''\nآخرین موارد سیاهه در زیر آمده‌است:",
        "semiprotectedpagewarning": "'''توجه:''' این صفحه قفل شده‌است تا تنها کاربران ثبت‌نام‌کرده قادر به ویرایش آن باشند.\nآخرین موارد سیاهه در زیر آمده‌است:",
-       "cascadeprotectedwarning": "'''هشدار:''' این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحه‌های}} آبشاری-محافظت‌شدهٔ زیر قفل شده‌است تا فقط مدیران بتوانند ویرایشش کنند.",
+       "cascadeprotectedwarning": "<strong>هشدار:</strong> این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحه‌های}} آبشاری-محافظت‌شدهٔ زیر قفل شده‌است تا فقط مدیران بتوانند ویرایشش کنند.",
        "titleprotectedwarning": "'''هشدار: این صفحه به شکلی قفل شده‌است که برای ایجاد آن [[Special:ListGroupRights|اختیارات خاصی]] لازم است.'''\nآخرین موارد سیاهه در زیر آمده است:",
        "templatesused": "{{PLURAL:$1|الگوی|الگوهای}} به‌کاررفته در این صفحه:",
        "templatesusedpreview": "{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این پیش‌نمایش:",
        "search-category": "(رده  $1)",
        "search-file-match": "(تشابه محتوی پرونده)",
        "search-suggest": "آیا منظورتان این بود: $1",
+       "search-rewritten": "نمایش نتایج $1. جستجوی به جای $2.",
        "search-interwiki-caption": "پروژه‌های خواهر",
        "search-interwiki-default": "نتایج از $1 :",
        "search-interwiki-more": "(بیشتر)",
        "rows": "تعداد سطرها:",
        "columns": "تعداد ستون‌ها:",
        "searchresultshead": "جستجو",
-       "stub-threshold": "آستانهٔ ویرایش پیوندهای <a href=\"#\" class=\"stub\">ناقص</a> (بایت):",
+       "stub-threshold": "آستانهٔ ویرایش پیوندهای ناقص ($1):",
+       "stub-threshold-sample-link": "نمونه",
        "stub-threshold-disabled": "غیرفعال",
        "recentchangesdays": "تعداد روزهای نمایش داده‌شده در تغییرات اخیر:",
        "recentchangesdays-max": "حداکثر $1 {{PLURAL:$1|روز}}",
        "group-bot": "ربات‌ها",
        "group-sysop": "مدیران",
        "group-bureaucrat": "دیوان‌سالاران",
-       "group-suppress": "Ù\86اظران",
+       "group-suppress": "Ù¾Ù\86Ù\87اÙ\86Ú¯ران",
        "group-all": "(همه)",
        "group-user-member": "{{GENDER:$1|کاربر}}",
        "group-autoconfirmed-member": "{{GENDER:$1|کاربر تأییدشده}}",
        "group-bot-member": "ربات",
        "group-sysop-member": "{{GENDER:$1|مدیر}}",
        "group-bureaucrat-member": "{{GENDER:$1|دیوان‌سالار}}",
-       "group-suppress-member": "{{GENDER:$1|Ù\86ظارت}}",
+       "group-suppress-member": "{{GENDER:$1|Ù¾Ù\86Ù\87اÙ\86گر}}",
        "grouppage-user": "{{ns:project}}:کاربران",
        "grouppage-autoconfirmed": "{{ns:project}}:کاربران تأییدشده",
        "grouppage-bot": "{{ns:project}}:ربات‌ها",
        "grouppage-sysop": "{{ns:project}}:مدیران",
        "grouppage-bureaucrat": "{{ns:project}}:دیوان‌سالاران",
-       "grouppage-suppress": "{{ns:project}}:Ù\86ظارت",
+       "grouppage-suppress": "{{ns:project}}:Ù¾Ù\86Ù\87اÙ\86گر",
        "right-read": "خواندن صفحه",
        "right-edit": "ویرایش صفحه",
        "right-createpage": "ایجاد صفحه (در مورد صفحه‌های غیر بحث)",
        "rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
        "rcshowhideminor": "$1 ویرایش‌های جزئی",
        "rcshowhideminor-show": "نمایش",
-       "rcshowhideminor-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhideminor-hide": "Ù\86Ù\87Ù\81تن",
        "rcshowhidebots": "$1 ربات‌ها",
        "rcshowhidebots-show": "نمایش",
-       "rcshowhidebots-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhidebots-hide": "Ù\86Ù\87Ù\81تن",
        "rcshowhideliu": "$1 کاربران ثبت‌نام‌کردە",
        "rcshowhideliu-show": "نمایش",
        "rcshowhideliu-hide": "نهفتن",
        "rcshowhideanons": "$1 کاربران ناشناس",
        "rcshowhideanons-show": "نمایش",
-       "rcshowhideanons-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhideanons-hide": "Ù\86Ù\87Ù\81تن",
        "rcshowhidepatr": "$1 ویرایش‌های گشت‌خورده",
        "rcshowhidepatr-show": "نمایش",
-       "rcshowhidepatr-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhidepatr-hide": "Ù\86Ù\87Ù\81تن",
        "rcshowhidemine": "$1 ویرایش‌های من",
        "rcshowhidemine-show": "نمایش",
-       "rcshowhidemine-hide": "Ù¾Ù\86Ù\87اÙ\86 Ú©Ø±Ø¯ن",
+       "rcshowhidemine-hide": "Ù\86Ù\87Ù\81تن",
        "rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر<br />$3",
        "diff": "تفاوت",
        "hist": "تاریخچه",
        "newpageletter": "نو",
        "boteditletter": "ر",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کاربر}} پی‌گیرنده]",
-       "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید)",
-       "rc_categories_any": "هر کدام",
+       "rc_categories": "محدود به این رده‌ها (رده‌ها را با «|» جدا کنید):",
+       "rc_categories_any": "هر کدام از منتخب‌ها",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پس از تغییر",
        "newsectionsummary": "/* $1 */ بخش جدید",
        "rc-enhanced-expand": "نمایش جزئیات",
        "uploaded-hostile-svg": "سی‌اس‌اس نا امن در عنصر سبک پروندهٔ بارگذاری شدهٔ اس‌وی‌جی یافت شد.",
        "uploaded-event-handler-on-svg": "قرار دادن ویژگی‌های مدیریت رویداد <code>$1=\"$2\"</code> در پرونده‌های اس‌وی‌جی مجاز نیست.",
        "uploaded-href-attribute-svg": "ویژگی‌های href <code>&lt;$1 $2=\"$3\"&gt;</code> با هدف غیر محلی (برای نمونه، http://, javascript:, etc) در پرونده‌های اس‌وی‌جی مجاز نیست.",
+       "uploaded-href-unsafe-target-svg": "در پرونده SVG بارگذاری‌شده برای هدف نادرست <code>&lt;$1 $2=\"$3\"&gt;</code> برچسب href یافت شد.",
+       "uploaded-animate-svg": "برچسب  \"animate\" یافت شده ممکن است herf را تغییر دهد. از مشخصه \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> در پرونده SVG بارگذاری‌شده استفاده کنید.",
+       "uploaded-setting-event-handler-svg": "تنظیمات مشخصه گرداننده رویداد بسته شده‌است. کد <code>&lt;$1 $2=\"$3\"&gt;</code>  در پرونده بارگذاری‌شده یافت شد.",
+       "uploaded-setting-href-svg": "استفاده از برچسب \"set\" برای افزودن مشخصهٔ \"href\" به عنصر والد بسته شده",
+       "uploaded-wrong-setting-svg": "استفاده از برچسب \"set\" برای افزودن remote/data/script هدف برای هر مشخصهٔ بسته شده در پرونده SVG بارگذاری شده <code>&lt;set to=\"$1\"&gt;</code> یافت شد.",
+       "uploaded-setting-handler-svg": "پرونده SVG تنظیم شده با مشخصهٔ \"handler\"  با remote/data/script بسته شده‌است. در پروندهٔ بارگذاری‌شده <code>$1=\"$2\"</code> یافت شد.",
+       "uploaded-remote-url-svg": "پرونده SVG تنظیم شده با remote URL بسته شده‌است. در پروندهٔ بارگذاری‌شده <code>$1=\"$2\"</code> یافت شد.",
+       "uploaded-image-filter-svg": "پالایه پرونده در نشانی:<code>&lt;$1 $2=\"$3\"&gt;</code>  در پرونده SVG بارگذاری‌شده یافت شد.",
        "uploadscriptednamespace": "این پوشه اس‌وی‌جی شامل فضای نام غیرقانونی '$1' است",
        "uploadinvalidxml": "XML در پروندهٔ بارگذاری‌شده نمی‌تواند تجزیه شود.",
        "uploadvirus": "این پرونده ویروس دارد!\nجزئیات : $1",
        "upload-too-many-redirects": "نشانی اینترتی حاوی تعداد بیش از اندازه‌ای تغییرمسیر است",
        "upload-http-error": "یک خطای اچ‌تی‌تی‌پی رخ داد: $1",
        "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
+       "upload-dialog-title": "بارگذاری پرونده",
+       "upload-dialog-error": "يک خطا اتفاق افتاد",
+       "upload-dialog-warning": "یک هشدار رخ‌داد",
+       "upload-dialog-button-cancel": "لغو",
+       "upload-dialog-button-done": "انجام شد",
+       "upload-dialog-button-save": "ذخیره",
+       "upload-dialog-button-upload": "بارگذاری",
+       "upload-dialog-label-select-file": "یک فایل انتخاب کنید",
+       "upload-dialog-label-infoform-title": "جزئیات",
+       "upload-dialog-label-infoform-name": "نام",
+       "upload-dialog-label-infoform-description": "توضیحات",
+       "upload-dialog-label-usage-title": "کاربرد",
+       "upload-dialog-label-usage-filename": "نام پرونده",
        "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
        "backend-fail-backup": "نمی‌توان نسخهٔ پشتیبان برای پروندهٔ $1 ایجاد کرد.",
        "backend-fail-notexists": "پروندهٔ $1 وجود ندارد.",
        "booksources-text": "در زیر فهرستی از پیوندها به وبگاه‌های دیگر آمده‌است که کتاب‌های نو و دست دوم می‌فروشند، و همچنین ممکن است اطلاعات بیشتری راجع به کتاب مورد نظر شما داشته باشند:",
        "booksources-invalid-isbn": "شابک داده شده مجاز به نظر نمی‌رسد؛ از جهت اشکالات هنگام کپی کردن از منبع اصلی بررسی کنید.",
        "specialloguserlabel": "مجری:",
-       "speciallogtitlelabel": "هدف (عنوان یا کاربر):",
+       "speciallogtitlelabel": "هدف (عنوان یا {{ns:user}}:نام کاربر برای کاربر):",
        "log": "سیاهه‌ها",
        "all-logs-page": "تمام سیاهه‌های عمومی",
        "alllogstext": "نمایش یک‌جای تمام سیاهه‌های موجود در {{SITENAME}}.\nمی‌توانید با انتخاب نوع سیاهه، نام کاربری (حساس به کوچکی و بزرگی حروف) و صفحه‌های تغییریافته (حساس به بزرگی و کوچکی حروف)، نمایش را محدودتر سازید.",
        "linksearch-pat": "الگوی جستجو:",
        "linksearch-ns": "فضای نام:",
        "linksearch-ok": "جستجو",
-       "linksearch-text": "نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.\nحداقل یک دامنه سطح بالا ، به عنوان مثال \"*.org\" نیاز دارد.<br />\n{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: <code>$1</code> (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).",
+       "linksearch-text": "نشانه‌هایی مانند «‎*.wikipedia.org» را می‌توان استفاده کرد.\nحداقل یک دامنه سطح بالا ، به عنوان مثال \"*.org\" نیاز دارد.<br />\n{{PLURAL:$2|پروتکل|پروتکل‌های}} پشتیبانی‌شده: $1 (پیش‌فرض برای http:// در صورت مشخص نشدن پروتکل تنظیم شده‌است).",
        "linksearch-line": "$1 از $2 پیوند دارد",
        "linksearch-error": "نشانه‌ها فقط در ابتدای نام میزبان اینترنتی می‌توانند استفاده شوند.",
        "listusersfrom": "نمایش کاربران با شروع از:",
        "emailuser": "ایمیل به این کاربر",
        "emailuser-title-target": "ارسال ایمیل به این {{GENDER:$1|کاربر}}",
        "emailuser-title-notarget": "ارسال ایمیل به کاربر",
-       "emailpage": "ایمیل به کاربر",
        "emailpagetext": "شما می‌توانید از فرم زیر برای ارسال ایمیلی به این {{GENDER:$1|کاربر}} استفاده کنید.\nنشانی ایمیلی که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستندهٔ ایمیل خواهد آمد، تا گیرنده بتواند پاسخ دهد.",
        "defemailsubject": "ایمیل {{SITENAME}} از طرف کاربر «$1»",
        "usermaildisabled": "ایمیل کاربر غیر قعال است",
        "emailccsubject": "رونوشت پیغام شما به $1: $2",
        "emailsent": "ایمیل ارسال شد",
        "emailsenttext": "پیام ایمیل شما فرستاده شد.",
-       "emailuserfooter": "این ایمیل با استفاده از ویژگی «{{int:emailpage}}» {{SITENAME}} توسط $1 به $2 ارسال شد.",
+       "emailuserfooter": "این ایمیل با استفاده از ویژگی «{{int:emailuser}}» {{SITENAME}} توسط $1 به $2 ارسال شد.",
        "usermessage-summary": "گذاشتن پیغام سامانه.",
        "usermessage-editor": "پیغام رسان سامانه",
        "watchlist": "فهرست پی‌گیری",
        "watchlistanontext": "برای مشاهده و ویرایش فهرست پی‌گیری‌های خود از $1 استفاده کنید.",
        "watchnologin": "به سامانه وارد نشده‌اید",
        "addwatch": "افزودن به فهرست پی‌گیری",
-       "addedwatchtext": "صفحهٔ «[[:$1]]» به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.\nتغییرات این صفحه و صفحهٔ بحث متناظرش در آینده در اینجا فهرست خواهد شد.",
+       "addedwatchtext": "«[[:$1]]» و صفحهٔ بحث آن به [[Special:Watchlist|فهرست پی‌گیری‌های]] شما اضافه شد.",
        "addedwatchtext-short": "صفحه \" $1 \" به فهرست پیگیریهای خود اضافه شده است.",
        "removewatch": "حذف از فهرست پی‌گیری",
-       "removedwatchtext": "صفحهٔ «[[:$1]]» از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.",
+       "removedwatchtext": "صفحهٔ «[[:$1]]» و صفحهٔ بحث آن از [[Special:Watchlist|فهرست پی‌گیری‌های شما]] برداشته شد.",
        "removedwatchtext-short": "صفحهٔ \"$1\" از فهرست پیگیری‌های شما حذف شده‌است.",
        "watch": "پی‌گیری",
        "watchthispage": "پی‌گیری این صفحه",
        "rollback-success": "ویرایش‌های $1 واگردانی شد؛\nصفحه به آخرین ویرایش $2 برگردانده شد.",
        "sessionfailure-title": "خطای نشست کاربری",
        "sessionfailure": "به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛\nعمل درخواست شده در اقدامی پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد.\nلطفاً دکمهٔ «بازگشت» را در مرورگر خود بفشارید و صفحه‌ای که از آن به اینجا رسیده‌اید را دوباره فراخوانی کنید، سپس مجدداً سعی کنید.",
+       "changecontentmodel": "ویرایش نمونه محتوای یک صفحه",
+       "changecontentmodel-legend": "تغییر نوع محتوی",
+       "changecontentmodel-title-label": "عنوان صفحه",
+       "changecontentmodel-model-label": "نمونه محتوای جدید",
+       "changecontentmodel-reason-label": "دلیل:",
+       "changecontentmodel-success-title": "نمونه محتوی تغییر یافت",
+       "changecontentmodel-success-text": "نوع محتوی [[:$1]]  تغییر یافت",
+       "changecontentmodel-cannot-convert": "محتوی در [[:$1]] نمی‌تواند به گونه‌ای از $2 تبدیل شود.",
+       "changecontentmodel-nodirectediting": "نمونه محتوی $1 امکان ویرایش مستقیم را پشتیبانی نمی‌کند",
+       "log-name-contentmodel": "سیاهه تغییر نمونه محتوی",
+       "log-description-contentmodel": "رویدادهای مرتبط با نمونه محتوی‌های یک صفحه",
+       "logentry-contentmodel-change": "نمونه محتوای صفحهٔ $3 از \"$4\" به \"$5\" توسط $1 {{GENDER:$2|تغییر داده شد}}",
+       "logentry-contentmodel-change-revertlink": "واگردانی",
+       "logentry-contentmodel-change-revert": "واگردانی",
        "protectlogpage": "سیاههٔ محافظت",
        "protectlogtext": "در زیر فهرستی از تغییرات سطح محافظت صفحه‌ها آمده‌است.\n[[Special:ProtectedPages|فهرست صفحه‌های محافظت‌شده]] را برای دیدن فهرست محافظت‌های مؤثر صفحه‌ها ببینید.",
        "protectedarticle": "«[[$1]]» را محافظت کرد",
        "protect-locked-blocked": "شما در مدتی که دسترسی‌تان قطع است نمی‌توانید سطح محافظت صفحات را تغییر دهید.\nتنظیمات فعلی صفحهٔ '''$1''' از این قرار است:",
        "protect-locked-dblock": "به دلیل قفل شدن پایگاه داده، امکان تغییر سطح محافظت صفحه وجود ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
        "protect-locked-access": "حساب کاربری شما اجازهٔ تغییر سطح محافظت صفحه را ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
-       "protect-cascadeon": "این صفحه  در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، گنجانده شده است.\nتغییراتی به سطح محافظت این صفحه به محافظت ابشاری تأثیر نخواهد گذاشت.",
+       "protect-cascadeon": "این صفحه در حال حاضر محافظت شده‌است زیرا در {{PLURAL:$1|صفحهٔ|صفحه‌های}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آن‌ها}} فعال است، گنجانده شده است.\nتغییراتی به سطح محافظت این صفحه به محافظت ابشاری تأثیر نخواهد گذاشت.",
        "protect-default": "همهٔ کاربرها",
        "protect-fallback": "فقط به کاربرهایی که دسترسی «$1» دارند، اجازه داده می‌شود",
        "protect-level-autoconfirmed": "تنها کاربران تأییدشده",
        "undeletepagetext": "{{PLURAL:$1|صفحهٔ زیر حدف شده|صفحه‌های زیر حذف شده‌اند}} ولی هنوز در بایگانی {{PLURAL:$1|هست|هستند}} و {{PLURAL:$1|می‌تواند احیا شود|می‌توانند احیا شوند}}.\nاین بایگانی ممکن است هر چند وقت تمیز شود.",
        "undelete-fieldset-title": "احیای نسخه‌ها",
        "undeleteextrahelp": "برای احیای تمام تاریخچهٔ صفحه، همهٔ جعبه‌ها را خالی رها کرده و دکمهٔ '''''{{int:undeletebtn}}''''' را کلیک کنید.\nبرای انجام احیای انتخابی، جعبه‌های متناظر با نسخه‌های مورد نظر برای احیا را علامت زده و دکمهٔ '''''{{int:undeletebtn}}''''' را کلیک کنید.",
-       "undeleterevisions": "$1 Ù\86سخÙ\87 Ø¨Ø§Û\8cگاÙ\86Û\8c {{PLURAL:$1|شده‌است|شده‌اند}}",
+       "undeleterevisions": "$1 Ù\86سخÙ\87 Ø­Ø°Ù\81 {{PLURAL:$1|شده‌است|شده‌اند}}",
        "undeletehistory": "اگر این صفحه را احیا کنید، همهٔ نسخه‌های آن در تاریخچه احیا خواهند شد.\nاگر صفحهٔ جدیدی با نام یکسان از زمان حذف ایجاد شده باشد، نسخه‌های احیاشده در تاریخچهٔ قبلی خواهند آمد.",
        "undeleterevdel": "احیای صفحه‌های در حالتی که باعث حذف شدن بخشی از آخرین نسخهٔ صفحه یا پرونده بشود مقدور نیست.\nدر این حالت شما باید جدیدترین نسخهٔ حذف شده را نیز احیا کنید.",
        "undeletehistorynoadmin": "این مقاله حذف شده‌است.\nدلیل حذف این مقاله به همراه مشخصات کاربرانی که قبل از حذف این صفحه را ویرایش کرده‌اند، در خلاصهٔ زیر آمده‌است.\nمتن واقعی این ویرایش‌های حذف شده فقط در دسترس مدیران است.",
        "tooltip-pt-logout": "خروج از سامانه",
        "tooltip-pt-createaccount": "از شما دعوت می‌شود که حساب کاربری بسازید و به سامانه وارد شوید؛ هرچند که ساخت حساب کاربری اختیاری است.",
        "tooltip-ca-talk": "گفتگو پیرامون محتوای صفحه",
-       "tooltip-ca-edit": "شما می‌توانید این صفحه را ویرایش کنید. لطفاً پیش از ذخیره از دکمهٔ پیش‌نمایش استفاده کنید.",
+       "tooltip-ca-edit": "ویرایش این صفجه با استفاده از ویکی‌متن",
        "tooltip-ca-addsection": "بخشی جدید ایجاد کنید",
        "tooltip-ca-viewsource": "این صفحه محافظت‌شده‌است.\nمی‌توانید متن مبدأ آن را ببینید",
        "tooltip-ca-history": "نسخه‌های پیشین این صفحه",
        "tooltip-ca-nstab-main": "دیدن صفحهٔ محتویات",
        "tooltip-ca-nstab-user": "نمایش صفحهٔ کاربر",
        "tooltip-ca-nstab-media": "دیدن صفحهٔ مدیا",
-       "tooltip-ca-nstab-special": "این یک صفحهٔ ویژه است، نمی‌توانید خود صفحه را ویرایش کنید",
+       "tooltip-ca-nstab-special": "این یک صفحهٔ ویژه است و قابل ویرایش نیست",
        "tooltip-ca-nstab-project": "نمایش صفحهٔ پروژه",
        "tooltip-ca-nstab-image": "دیدن صفحهٔ پرونده",
        "tooltip-ca-nstab-mediawiki": "نمایش پیغام سامانه",
        "spam_reverting": "واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.",
        "spam_blanking": "تمام نسخه‌ها حاوی پیوند به $1 بود، در حال خالی کردن",
        "spam_deleting": "تمام نسخه‌ها حاوی پیوند به $1 بود، در حال حذف",
-       "simpleantispam-label": "بررسی ضدهرزنگاری.\nاین قسمت را پر '''نکنید'''!",
+       "simpleantispam-label": "بررسی ضدهرزنگاری.\nاین قسمت را پر <strong>نکنید</strong>!",
        "pageinfo-title": "اطلاعات در مورد «$1»",
        "pageinfo-not-current": "متأسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.",
        "pageinfo-header-basic": "اطلاعات اولیه",
        "pageinfo-robot-index": "مجاز",
        "pageinfo-robot-noindex": "نامجاز",
        "pageinfo-watchers": "شمار پی‌گیری‌کنندگان صفحه",
+       "pageinfo-visiting-watchers": "تعداد پیگیری‌کنندگان صفحه که تغییرات اخیر را بازبینی کرده‌اند",
        "pageinfo-few-watchers": "کمتر از  $1 {{PLURAL:$1| پی‌گیر|پی‌گیر}}",
+       "pageinfo-few-visiting-watchers": "امکان دارد یا ندارد که کاربری ویرایش‌های اخیر را بازبینی کرده باشد",
        "pageinfo-redirects-name": "تعداد تغییرمسیرها به این صفحه",
        "pageinfo-subpages-name": "زیرصفحه‌های این صفحه",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|تغییرمسیر|تغییرمسیر}}; $3 {{PLURAL:$3|غیرتغییرمسیر|غیرتغییرمسیر}})",
        "exif-compression-3": "رمزگذاری نمابر سی‌سی‌آی‌تی‌تی گروه ۳",
        "exif-compression-4": "رمزگذاری نمابر سی‌سی‌آی‌تی‌تی گروه ۴",
        "exif-copyrighted-true": "دارای حق تکثیر",
-       "exif-copyrighted-false": "وضعیت حق‌تکثیر تعیین نشدهاست",
+       "exif-copyrighted-false": "وضعیت حق‌تکثیر تعیین نشده است",
        "exif-unknowndate": "تاریخ نامعلوم",
        "exif-orientation-1": "عادی",
        "exif-orientation-2": "افقی پشت و روشده",
        "exif-urgency-other": "اولویت تعریف شده توسط کاربر ($1)",
        "namespacesall": "همه",
        "monthsall": "همهٔ ماه‌ها",
-       "confirmemail": "تأیید آدرس ایمیل",
+       "confirmemail": "تأیید نشانی ایمیل",
        "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود آدرس ایمیل معتبری وارد نکرده‌اید.",
        "confirmemail_text": "این ویکی، شما را ملزم به تأیید آدرس ایمیل خود، پیش از استفاده از خدمات ایمیل در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا ایمیلی تأییدی به آدرس ایمیل شما فرستاده شود. این ایمیل دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید کنید تا آدرس ایمیل شما تأیید شود.",
        "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت ایمیل فرستاده شده است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید ایمیل قبلی برسد.",
        "confirmemail_invalid": "کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.",
        "confirmemail_needlogin": "لطفاً برای تأیید آدرس ایمیلتان $1.",
        "confirmemail_success": "آدرس ایمیل شما تأیید شده‌است.\n\nاکنون می‌توانید [[Special:UserLogin|به سیستم وارد شوید]] و از ویکی لذت ببرید.",
-       "confirmemail_loggedin": "آدرس ایمیل شما تأیید شد.",
-       "confirmemail_subject": "تأیید آدرس ایمیل {{SITENAME}}",
+       "confirmemail_loggedin": "نشانی ایمیل شما تأیید شد.",
+       "confirmemail_subject": "تأیید نشانی ایمیل {{SITENAME}}",
        "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این آدرس ایمیل در {{SITENAME}} ایجاد کرده است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال سازی قابلیت ایمیل {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nباز کنید تا تأیید آدرس ایمیل لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.",
        "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 آدرس ایمیل حساب «$2» در {{SITENAME}} را تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز کنید تا تغییر آدرس ایمیل لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
        "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nآدرس ایمیل حساب «$2» در {{SITENAME}} را به این آدرس تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز تا تغییر آدرس ایمیل، لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
-       "confirmemail_invalidated": "تأیید آدرس ایمیل لغو شد",
-       "invalidateemail": "لغو تأیید آدرس ایمیل",
+       "confirmemail_invalidated": "تأیید نشانی ایمیل لغو شد",
+       "invalidateemail": "لغو تأیید نشانی ایمیل",
        "scarytranscludedisabled": "[تراگنجانش بین‌ویکیانه فعال نیست]",
        "scarytranscludefailed": "[فراخوانی الگو برای $1 میسر نشد]",
        "scarytranscludefailed-httpstatus": "[فراخوانی الگو برای $1 میسر نشد: خطای اچ‌تی‌تی‌پی $2]",
        "deletedwhileediting": "'''هشدار''': این صفحه پس از اینکه شما آغاز به ویرایش آن کرده‌اید، حذف شده است!",
        "confirmrecreate": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این مقاله را پس از اینکه شما آغاز به ویرایش آن نموده‌اید به دلیل زیر حذف کرده است :\n: ''$2''\nلطفاً تأیید کنید که مجدداً می‌خواهید این مقاله را بسازید.",
        "confirmrecreate-noreason": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این صفحه را پس از شروع ویرایش‌تان پاک کرده‌است.  لطفاً تأیید کنید که شما واقعاً می‌خواهید آن را دوباره ایجاد کنید.",
-       "recreate": "صÙ\81Ø­Ù\87 Ø§Ø² Ø²Ù\85اÙ\86Û\8c Ú©Ù\87 Ø´Ù\85ا Ù\85شغÙ\88Ù\84 Ù\88Û\8cراÛ\8cØ´ Ø´Ø¯Û\8cد Ø­Ø°Ù\81 Ø´Ø¯. Ø¨Ø±Ø§Û\8c Ø³Ø§Ø®Øª Ù\85جدد ØµÙ\81Ø­Ù\87 \"$1\" Ø±Ø§ Ù\81شار Ø¯Ù\87Û\8cد.",
+       "recreate": "باز Ø§Û\8cجاد",
        "confirm_purge_button": "تأیید",
        "confirm-purge-top": "پاک‌کردن نسخهٔ حافظهٔ نهانی (Cache) این صفحه را تأیید می‌کنید؟",
        "confirm-purge-bottom": "خالی کردن میانگیر یک صفحه باعث می‌شود که آخرین نسخهٔ آن نمایش یابد.",
        "htmlform-cloner-create": "افزودن بیشتر",
        "htmlform-cloner-delete": "حذف",
        "htmlform-cloner-required": "حداقل یک مقدار مورد نیاز است.",
+       "htmlform-title-badnamespace": "[[:$1]] در فضای نام \"{{ns:$2}}\"  موجود نیست.",
+       "htmlform-title-not-creatable": "\"$1\" عنوان قابل ایجاد نیست",
+       "htmlform-title-not-exists": "[[:$1]] وجود ندارد.",
+       "htmlform-user-not-exists": "<strong>$1</strong> وجود ندارد.",
+       "htmlform-user-not-valid": "حساب کاربری <strong>$1</strong> معتبر نیست.",
        "sqlite-has-fts": "$1 با پشتیبانی از جستجو در متن کامل",
        "sqlite-no-fts": "$1 بدون پشتیبانی از جستجو در متن کامل",
        "logentry-delete-delete": "$1 صفحهٔ $3 را {{GENDER:$2|حذف کرد}}",
        "logentry-newusers-create2": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}}",
        "logentry-newusers-byemail": "حساب کاربری $3 توسط $1 {{GENDER:$2|ایجاد شد}} و رمز عبور به وسیلهٔ ایمیل ارسال شد",
        "logentry-newusers-autocreate": "حساب $1  به شکل خودکار {{GENDER:$2|ایجاد شد}}",
+       "logentry-protect-move_prot": "$1 تنظیمات محافظت را از $4 به $3 {{GENDER:$2|منتقل کرد}}",
        "logentry-rights-rights": "$1 عضویت $3 را از گروه $4 به $5 {{GENDER:$2|تغییر داد}}",
        "logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
        "logentry-rights-autopromote": "$1 به طور خودکار از $4 به $5 {{GENDER:$2|ارتقاء داد}}",
        "special-characters-title-endash": "خط فاصله",
        "special-characters-title-emdash": "خط فاسله کشیده",
        "special-characters-title-minus": "علامت منفی",
+       "mw-widgets-dateinput-no-date": "هیچ داده‌ای انتخاب نشده",
        "mw-widgets-titleinput-description-new-page": "این صفحه هنوز وجود ندارد",
        "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1"
 }
index a76cdcd..b6c51a9 100644 (file)
@@ -44,7 +44,8 @@
                        "SMAUG",
                        "SuperPete",
                        "McSalama",
-                       "Macofe"
+                       "Macofe",
+                       "Beluga"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
        "actionthrottled": "Toiminnon useaa suorittamista on rajoitettu",
        "actionthrottledtext": "Häiriköinnin estämiseksi tämän toiminnon suorittamista on rajoitettu niin, että sitä ei voi tehdä useita kertoja lyhyen ajan sisällä. Olet suorittanut toiminnon nyt liian monta kertaa. \nYritä uudelleen muutaman minuutin kuluttua.",
        "protectedpagetext": "Tämä sivu on suojattu muutoksilta ja muilta toiminnoilta.",
-       "viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä:",
-       "viewyourtext": "Voit nähdä ja kopioida tähän sivuun <strong>tekemistäsi muutoksista</strong> syntyneen lähdekoodin:",
+       "viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä.",
+       "viewyourtext": "Voit nähdä ja kopioida tähän sivuun <strong>tekemistäsi muutoksista</strong> syntyneen lähdekoodin.",
        "protectedinterface": "Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
        "editinginterface": "<strong>Varoitus:</strong> Olet muokkaamassa sivua, joka sisältää ohjelmiston käyttöliittymän tekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymään tässä wikissä.",
        "translateinterface": "Jos haluat lisätä tai muuttaa käännöksiä kaikissa wikeissä, käytä siihen MediaWikin kääntämistä varten rakennettua sivustoa [//translatewiki.net/ translatewiki.net].",
        "createacct-benefit-body2": "{{PLURAL:$1|sivu|sivua}}",
        "createacct-benefit-body3": "{{PLURAL:$1|viimeikainen muokkaaja|viimeaikaista muokkaajaa}}",
        "badretype": "Syöttämäsi salasanat ovat keskenään erilaiset.",
+       "usernameinprogress": "Tunnuksen luominen tälle käyttäjänimelle on parhaillaan käynnissä.\nOle hyvä ja odota.",
        "userexists": "Pyytämäsi käyttäjänimi on jo käytössä. Valitse toinen käyttäjänimi.",
        "loginerror": "Sisäänkirjautumisvirhe",
        "createacct-error": "Virhe tunnuksen luomisessa",
        "search-category": "(luokka $1)",
        "search-file-match": "(vastaa tiedoston sisältöä)",
        "search-suggest": "Tarkoititko: $1",
+       "search-rewritten": "Näytetään tulokset haulla $1. Haluatko hakea haulla $2?",
        "search-interwiki-caption": "Sisarprojektit",
        "search-interwiki-default": "Tulokset osoitteesta $1:",
        "search-interwiki-more": "(lisää)",
        "searchrelated": "samankaltainen",
        "searchall": "kaikki",
        "showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
-       "showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.",
+       "showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong><strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1 – $2</strong> enimmäismäärästä <strong>$3</strong>}}",
        "search-nonefound": "Hakusi ei tuottanut tulosta.",
        "powersearch-legend": "Laajennettu haku",
        "rows": "Rivejä",
        "columns": "Sarakkeita",
        "searchresultshead": "Haku",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Tynkäsivun</a> osoituskynnys",
+       "stub-threshold": "Tynkälinkkien muotoilun kynnysarvo ($1):",
+       "stub-threshold-sample-link": "näyte",
        "stub-threshold-disabled": "Ei käytössä",
        "recentchangesdays": "Näytettävien päivien määrä tuoreissa&nbsp;muutoksissa",
        "recentchangesdays-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
        "newpageletter": "U",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|tarkkaileva käyttäjä|tarkkailevaa käyttäjää}}]",
-       "rc_categories": "Vain luokista (erotin on ”|”)",
-       "rc_categories_any": "Mikä tahansa",
+       "rc_categories": "Rajoita luokkiin (erota luokat merkillä ”|”)",
+       "rc_categories_any": "Mikä tahansa valituista",
        "rc-change-size-new": "$1 {{PLURAL:$1|tavu|tavua}} muutosten jälkeen",
        "newsectionsummary": "/* $1 */ uusi osio",
        "rc-enhanced-expand": "Näytä yksityiskohdat",
        "upload-too-many-redirects": "URL sisälsi liian monta ohjausta",
        "upload-http-error": "HTTP-virhe: $1",
        "upload-copy-upload-invalid-domain": "Tiedostojen tallentamista tästä verkko-osoitteesta ei ole sallittu.",
+       "upload-dialog-title": "Tiedoston tallennus",
+       "upload-dialog-error": "Tapahtui virhe",
+       "upload-dialog-warning": "Sisältää varoituksen",
+       "upload-dialog-button-cancel": "Peru",
+       "upload-dialog-button-done": "Valmis",
+       "upload-dialog-button-save": "Tallenna",
+       "upload-dialog-button-upload": "Tallenna",
+       "upload-dialog-label-select-file": "Valitse tiedosto",
+       "upload-dialog-label-infoform-title": "Yksityiskohdat",
+       "upload-dialog-label-infoform-name": "Nimi",
+       "upload-dialog-label-infoform-description": "Kuvaus",
+       "upload-dialog-label-usage-title": "Käyttö",
+       "upload-dialog-label-usage-filename": "Tiedostonimi",
        "backend-fail-stream": "Tiedoston $1 virtauttaminen epäonnistui.",
        "backend-fail-backup": "Tiedostoa $1 ei voitu varmuuskopioida.",
        "backend-fail-notexists": "Tiedostoa $1 ei ole olemassa.",
        "booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
        "booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
        "specialloguserlabel": "Suorittaja:",
-       "speciallogtitlelabel": "Kohde (sivu tai käyttäjä):",
+       "speciallogtitlelabel": "Kohde (sivu tai {{ns:user}}:käyttäjänimi):",
        "log": "Lokit",
        "all-logs-page": "Kaikki julkiset lokit",
        "alllogstext": "Tämä on yhdistetty lokien näyttö.\nVoit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muutos on kohdistunut. Jälkimmäiset ovat kirjainkokoherkkiä.",
        "linksearch-pat": "Hakuehto:",
        "linksearch-ns": "Nimiavaruus:",
        "linksearch-ok": "Etsi",
-       "linksearch-text": "Jokerimerkkejä, kuten \"*.wikipedia.org\", voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi \"*.org\".<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: <code>$1</code> (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
+       "linksearch-text": "Jokerimerkkejä, kuten \"*.wikipedia.org\", voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi \"*.org\".<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: $1 (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
        "linksearch-line": "$1 on linkitetty sivulta $2",
        "linksearch-error": "Jokerimerkkiä voi käyttää ainoastaan osoitteen alussa.",
        "listusersfrom": "Käyttäjien tunnukset alkavat kirjaimilla:",
        "emailuser": "Lähetä sähköpostia tälle käyttäjälle",
        "emailuser-title-target": "Lähetä sähköpostia tälle {{GENDER:$1|käyttäjälle}}",
        "emailuser-title-notarget": "Lähetä sähköpostia käyttäjälle",
-       "emailpage": "Lähetä sähköpostia käyttäjälle",
        "emailpagetext": "Jos tämä {{GENDER:$1|käyttäjä}} on antanut asetuksissaan kelvollisen sähköpostiosoitteen, alla olevalla lomakkeella voit lähettää hänelle viestin. [[Special:Preferences|Omissa asetuksissasi]] annettu sähköpostiosoite näkyy sähköpostin lähettäjän osoitteena, jotta vastaanottaja voi suoraan vastata viestiin.",
        "defemailsubject": "Sähköpostia käyttäjältä $1 sivustolta {{SITENAME}}",
        "usermaildisabled": "Käyttäjien sähköposti poistettu käytöstä",
        "emailccsubject": "Kopio lähettämästäsi viestistä osoitteeseen $1: $2",
        "emailsent": "Sähköposti lähetetty",
        "emailsenttext": "Sähköpostiviestisi on lähetetty.",
-       "emailuserfooter": "Tämän sähköpostin lähetti $1 vastaanottajalle $2 käyttämällä ”{{int:emailpage}}” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}.",
+       "emailuserfooter": "Tämän sähköpostin lähetti $1 vastaanottajalle $2 käyttämällä ”{{int:emailuser}}” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}.",
        "usermessage-summary": "Jätetään järjestelmäviesti.",
        "usermessage-editor": "Järjestelmäviestittäjä",
        "watchlist": "Tarkkailulista",
        "watchlistanontext": "Sinun täytyy kirjautua sisään, jos haluat nähdä oman tarkkailulistasi.",
        "watchnologin": "Et ole kirjautunut sisään",
        "addwatch": "Lisää tarkkailulistalle",
-       "addedwatchtext": "Sivu '''[[:$1]]''' on lisätty [[Special:Watchlist|tarkkailulistallesi]].\nTulevaisuudessa sivuun ja sen keskustelusivuun tehtävät muutokset listataan täällä.",
+       "addedwatchtext": "\"[[:$1]]\" ja sen keskustelusivu on lisätty [[Special:Watchlist|tarkkailulistallesi]].",
        "addedwatchtext-short": "Sivu ”$1” on lisätty tarkkailulistallesi.",
        "removewatch": "Poista tarkkailulistalta",
-       "removedwatchtext": "Sivu '''[[:$1]]''' on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
+       "removedwatchtext": "\"[[:$1]]\" ja sen keskustelusivu on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
        "removedwatchtext-short": "Sivu ”$1” on poistettu tarkkailulistaltasi.",
        "watch": "Tarkkaile",
        "watchthispage": "Tarkkaile tätä sivua",
        "changecontentmodel-reason-label": "Syy:",
        "changecontentmodel-success-title": "Sisältömallia on muutettu",
        "changecontentmodel-success-text": "Sisältötyyppiä kohteessa [[:$1]] on muutettu.",
-       "changecontentmodel-title-cantexist": "Ei ole mahdollista, että kohteessa $1 on sivua.",
+       "changecontentmodel-cannot-convert": "Sisältöä sivulla [[:$1]] ei voida muuntaa tyypiksi $2.",
        "changecontentmodel-nodirectediting": "Sisältömalli $1 ei tue suoraa muokkaamista",
        "log-name-contentmodel": "Sisältömallin muutosloki",
        "log-description-contentmodel": "Tapahtumat, jotka liittyvät sivun sisältömalleihin",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|muutti}} sivun $3 sisältömallia muodosta \"$4\" muotoon \"$5\"",
        "logentry-contentmodel-change-revertlink": "kumoa",
        "logentry-contentmodel-change-revert": "kumottu",
        "protectlogpage": "Suojausloki",
        "undeletepagetext": "{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se|ne}} voidaan palauttaa takaisin. Arkisto saatetaan tyhjentää aika ajoin.",
        "undelete-fieldset-title": "Palauta versioita",
        "undeleteextrahelp": "Palauttaaksesi sivun koko muutoshistorian jätä kaikki valintalaatikot tyhjiksi ja napsauta '''''{{int:undeletebtn}}'''''.\nVoit palauttaa versioita valikoivasti valitsemalla vain niiden versioiden valintalaatikot, jotka haluat palauttaa.",
-       "undeleterevisions": "$1 {{PLURAL:$1|versio|versiota}} on arkistoitu.",
+       "undeleterevisions": "$1 {{PLURAL:$1|versio|versiota}} on poistettu.",
        "undeletehistory": "Jos palautat sivun, kaikki versiot lisätään sivun historiaan. Jos uusi sivu samalla nimellä on luotu poistamisen jälkeen, palautetut versiot lisätään sen historiaan.",
        "undeleterevdel": "Palautusta ei tehdä, jos sen seurauksena sivun uusin versio olisi osittain piilotettu. \nTässä tilanteessa älä valitse palautettavaksi näkyviin viimeisintä poistettua versiota tai poista version piilotus.",
        "undeletehistorynoadmin": "Tämä sivu on poistettu. \nSyy sivun poistamiseen näkyy alla olevassa yhteenvedossa, jossa on myös tiedot, ketkä olivat muokanneet tätä sivua ennen poistamista. \nNäiden poistettujen versioiden varsinainen tekstisisältö on vain ylläpitäjien luettavissa.",
        "tooltip-ca-nstab-main": "Näytä sisältösivu",
        "tooltip-ca-nstab-user": "Näytä käyttäjäsivu",
        "tooltip-ca-nstab-media": "Näytä mediasivu",
-       "tooltip-ca-nstab-special": "Tämä on toimintosivu",
+       "tooltip-ca-nstab-special": "Tämä on toimintosivu, eikä sitä voi muokata",
        "tooltip-ca-nstab-project": "Näytä projektisivu",
        "tooltip-ca-nstab-image": "Näytä tiedostosivu",
        "tooltip-ca-nstab-mediawiki": "Näytä järjestelmäviesti",
        "spam_reverting": "Palautettu viimeisimpään versioon, joka ei sisällä linkkejä kohteeseen $1.",
        "spam_blanking": "Kaikki versiot sisälsivät linkkejä kohteeseen $1. Sivu tyhjennetty.",
        "spam_deleting": "Kaikki versiot sisälsivät linkkejä kohteeseen $1, poistetaan",
-       "simpleantispam-label": "Mainostenvastainen varmistus.\n'''ÄLÄ''' täytä tätä!",
+       "simpleantispam-label": "Mainosroskan tarkastus.\n<strong>Älä</strong> täytä tätä!",
        "pageinfo-title": "Tietoja sivusta $1",
        "pageinfo-not-current": "Valitettavasti ei ole mahdollista antaa tätä tietoa, joka liittyy vanhoihin versioihin.",
        "pageinfo-header-basic": "Perustiedot",
        "pageinfo-length": "Sivun pituus (tavuina)",
        "pageinfo-article-id": "Sivun tunnistenumero",
        "pageinfo-language": "Sivun sisällön kieli",
-       "pageinfo-content-model": "Sivun sisällön muoto",
+       "pageinfo-content-model": "Sivun sisältömalli",
        "pageinfo-robot-policy": "Hakukonemerkinnät",
        "pageinfo-robot-index": "Indeksoitava",
        "pageinfo-robot-noindex": "Ei indeksoitava",
        "pageinfo-watchers": "Sivun tarkkailijoiden lukumäärä",
-       "pageinfo-visiting-watchers": "Sivun tuoreiden muutosten tarkkailijoiden lukumäärä",
+       "pageinfo-visiting-watchers": "Sivun tuoreet muutokset nähneiden tarkkailijoiden määrä",
        "pageinfo-few-watchers": "Vähemmän kuin $1 {{PLURAL:$1|tarkkailija|tarkkailijaa}}",
        "pageinfo-few-visiting-watchers": "Tuoreita muutoksia saatetaan tarkkailla, mutta tämä ei ole varmaa",
        "pageinfo-redirects-name": "Sivulle johtavat ohjaukset",
        "htmlform-cloner-create": "Lisää enemmän",
        "htmlform-cloner-delete": "Poista",
        "htmlform-cloner-required": "Vähintään yksi arvo on pakollinen.",
+       "htmlform-title-badnamespace": "Sivu [[:$1]] ei ole nimiavaruudessa ”{{ns:$2}}”.",
+       "htmlform-title-not-creatable": "”$1” ei kelpaa sivun nimeksi.",
+       "htmlform-title-not-exists": "Sivua [[:$1]] ei ole olemassa.",
+       "htmlform-user-not-exists": "Käyttäjää <strong>$1</strong> ei ole olemassa.",
+       "htmlform-user-not-valid": "<strong>$1</strong> ei ole kelvollinen käyttäjänimi.",
        "sqlite-has-fts": "$1, jossa on tuki kokotekstihaulle",
        "sqlite-no-fts": "$1, jossa ei ole tukea kokotekstihaulle",
        "logentry-delete-delete": "$1 {{GENDER:$2|poisti}} sivun $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|loi}} käyttäjätunnuksen $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|loi}} käyttäjätunnuksen $3 ja salasana lähetettiin sähköpostitse",
        "logentry-newusers-autocreate": "Käyttäjätunnus $1 {{GENDER:$2|luotiin}} automaattisesti",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|siirsi}} suojauksen asetukset sivulta $4 sivulle $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutti}} käyttäjän $3 jäsenyyttä ryhmässä",
        "logentry-rights-autopromote": "Käyttäjän $1 oikeudet {{GENDER:$2|muuttuivat}} automaattisesti ryhmistä $4 ryhmiin $5",
        "special-characters-title-endash": "ajatusviiva",
        "special-characters-title-emdash": "pitkä ajatusviiva",
        "special-characters-title-minus": "miinusmerkki",
+       "mw-widgets-dateinput-no-date": "Ei ole valittu mitään päivää",
+       "mw-widgets-dateinput-placeholder-day": "VVVV-KK-PP",
+       "mw-widgets-dateinput-placeholder-month": "VVVV-KK",
        "mw-widgets-titleinput-description-new-page": "sivua ei ole olemassa vielä",
        "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1"
 }
index 319c398..058248d 100644 (file)
        "passwordreset": "Nullstilla loyniorðið",
        "passwordreset-text-one": "Útfyll henda teigin fyri at nullstilla títt loyniorð.",
        "passwordreset-text-many": "{{PLURAL:$1|Útfyll í ein av teigunum fyri at móttaka eitt fyribils loyniorð við telduposti.}}",
-       "passwordreset-legend": "Nulstilla loyniorðið",
        "passwordreset-disabled": "Tað ber ikki til at nullstilla loyniorðið á hesi wiki.",
        "passwordreset-emaildisabled": "Teldupost funksjónir eru óvirknar á hesi wiki.",
        "passwordreset-username": "Brúkaranavn:",
        "resettokens": "Nullstilla lyklar",
        "resettokens-text": "Tú kanst nullstilla lyklar sum geva atgongd til ávís privat dáta sum eru knýtt at tínari konto her.\n\nTú eigur at gera tað um tú av óvart hevur deilt lyklarnar við onkran, ella um tín konta hevur verið útsett fyri vandastøðu.",
        "resettokens-no-tokens": "Tað eru ongir lyklar at nullstilla.",
-       "resettokens-legend": "Nullstilla lyklar",
        "resettokens-tokens": "Lyklar:",
        "resettokens-token-label": "$1 (dagsins virði: $2)",
        "resettokens-done": "Nullstilla lyklar.",
        "nlinks": "$1 {{PLURAL:$1|slóð|slóðir}}",
        "nmembers": "$1 {{PLURAL:$1|limur|limir}}",
        "nrevisions": "$1 {{PLURAL:$1|versjón|versjónir}}",
-       "nviews": "$1 {{PLURAL:$1|skoðan|skoðanir}}",
        "nimagelinks": "Brúkt á $1 {{PLURAL:$1|síðu|síðum}}",
        "ntransclusions": "brúkt á $1 {{PLURAL:$1|síðu|síðum}}",
        "specialpage-empty": "Tað eru ongi úrslit fyri hesa rapportina.",
        "duration-centuries": "$1 {{PLURAL:$1|øld|øldir}}",
        "expand_templates_output": "Úrslit",
        "expand_templates_ok": "Í lagi",
-       "expand_templates_preview": "Forskoðan"
+       "expand_templates_preview": "Forskoðan",
+       "mw-widgets-dateinput-placeholder-day": "ÁÁÁÁ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÁÁÁÁ-MM",
+       "mw-widgets-titleinput-description-new-page": "síðan er ikki til enn"
 }
index 696ed8e..8114837 100644 (file)
                        "Chlomoh",
                        "Wladek92",
                        "Framafan",
-                       "Lucky"
+                       "Lucky",
+                       "TomT0m",
+                       "L",
+                       "SRXcraft"
                ]
        },
-       "tog-underline": "Souligner les liens :",
+       "tog-underline": "Soulignement des liens :",
        "tog-hideminor": "Masquer les modifications mineures dans les changements récents",
        "tog-hidepatrolled": "Masquer les modifications surveillées dans les modifications récentes",
        "tog-newpageshidepatrolled": "Masquer les pages surveillées dans la liste des nouvelles pages",
        "tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes",
        "tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi",
        "tog-numberheadings": "Numéroter automatiquement les titres de section",
-       "tog-showtoolbar": "Afficher la barre d'outils de modification",
+       "tog-showtoolbar": "Afficher la barre doutils de modification",
        "tog-editondblclick": "Modifier des pages sur double-clic",
-       "tog-editsectiononrightclick": "Activer la modification de sections par clic droit sur les titres",
-       "tog-watchcreations": "Ajouter les pages que je crée et les fichiers que j'importe à ma liste de suivi",
+       "tog-editsectiononrightclick": "Activer la modification des sections par un clic droit sur les titres de section",
+       "tog-watchcreations": "Ajouter à ma liste de suivi les pages que je crée et les fichiers que j'importe",
        "tog-watchdefault": "Ajouter les pages et les fichiers que je modifie à ma liste de suivi",
-       "tog-watchmoves": "Ajouter les pages et les fichiers que je renomme à ma liste de suivi",
-       "tog-watchdeletion": "Ajouter les pages et les fichiers que je supprime à ma liste de suivi",
+       "tog-watchmoves": "Ajouter les pages et les fichiers que je déplace à ma liste de suivi",
+       "tog-watchdeletion": "Ajouter à ma liste de suivi les pages et les fichiers que je supprime",
        "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation",
        "tog-minordefault": "Marquer toutes mes modifications comme mineures par défaut",
-       "tog-previewontop": "Afficher la prévisualisation au-dessus de la zone de modification",
+       "tog-previewontop": "Afficher la prévisualisation avant la zone de modification",
        "tog-previewonfirst": "Afficher la prévisualisation lors de la première modification",
        "tog-enotifwatchlistpages": "M'avertir par courriel lorsqu'une page ou un fichier de ma liste de suivi est modifié",
        "tog-enotifusertalkpages": "M'avertir par courriel si ma page de discussion est modifiée",
-       "tog-enotifminoredits": "M'avertir par courriel également lors des modifications mineures de pages ou de fichiers",
+       "tog-enotifminoredits": "M'avertir par courriel également lors des modifications mineures des pages ou des fichiers",
        "tog-enotifrevealaddr": "Afficher mon adresse de courriel dans les courriels de notification",
        "tog-shownumberswatching": "Afficher le nombre d'utilisateurs qui suivent la page",
        "tog-oldsig": "Signature existante :",
        "tog-watchlisthidebots": "Masquer les modifications faites par des robots dans la liste de suivi",
        "tog-watchlisthideminor": "Masquer les modifications mineures dans la liste de suivi",
        "tog-watchlisthideliu": "Masquer les modifications faites par des utilisateurs inscrits dans la liste de suivi",
-       "tog-watchlisthideanons": "Masquer les modifications anonymes dans la liste de suivi",
+       "tog-watchlisthideanons": "Masquer les modifications d'utilisateurs anonymes dans la liste de suivi",
        "tog-watchlisthidepatrolled": "Masquer les modifications surveillées dans la liste de suivi",
        "tog-ccmeonemails": "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs",
        "tog-diffonly": "Ne pas afficher le contenu des pages sous les diffs",
        "tog-showhiddencats": "Afficher les catégories cachées",
-       "tog-norollbackdiff": "Ne pas afficher le diff lors d'une révocation",
+       "tog-norollbackdiff": "Ne pas afficher le diff après avoir révoqué",
        "tog-useeditwarning": "M'avertir quand je quitte une page de modification sans publier les changements",
-       "tog-prefershttps": "Toujours utiliser une connexion sécurisée en étant connecté",
+       "tog-prefershttps": "Toujours utiliser une connexion sécurisée en étant connecté(e)",
        "underline-always": "Toujours",
        "underline-never": "Jamais",
        "underline-default": "Valeur par défaut du navigateur ou du thème",
        "pagecategories": "{{PLURAL:$1|Catégorie|Catégories}}",
        "category_header": "Pages dans la catégorie « $1 »",
        "subcategories": "Sous-catégories",
-       "category-media-header": "Fichiers multimédias dans la catégorie « $1 »",
-       "category-empty": "<em>Cette catégorie ne contient aucune page, sous-catégorie ou fichier multimédia.</em>",
+       "category-media-header": "Média dans la catégorie \"$1\"",
+       "category-empty": "<em>Cette catégorie ne contient aucune page ou fichier multimédia.</em>",
        "hidden-categories": "{{PLURAL:$1|Catégorie cachée|Catégories cachées}}",
        "hidden-category-category": "Catégories cachées",
        "category-subcat-count": "Cette catégorie comprend {{PLURAL:$2|la sous-catégorie|$2 sous-catégories, dont {{PLURAL:$1|celle|les $1}}}} ci-dessous.",
        "category-subcat-count-limited": "Cette catégorie comprend {{PLURAL:$1|la sous-catégorie|les $1 sous-catégories}} ci-dessous.",
-       "category-article-count": "Cette catégorie contient {{PLURAL:$2|la page suivante|$2 pages, dont {{PLURAL:$1|celle|les $1}} ci-dessous}}.",
+       "category-article-count": "Cette catégorie contient {{PLURAL:$2|seulement la page suivante|$2 pages, dont {{PLURAL:$1|celle|les $1}} ci-dessous}}.",
        "category-article-count-limited": "{{PLURAL:$1|La page suivante figure|Les $1 pages suivantes figurent}} dans la présente catégorie.",
        "category-file-count": "Cette catégorie contient {{PLURAL:$2|le fichier suivant|$2 fichiers, dont {{PLURAL:$1|celui|les $1}} ci-dessous}}.",
        "category-file-count-limited": "{{PLURAL:$1|Le fichier suivant figure|Les $1 fichiers suivants figurent}} dans la présente catégorie.",
        "toc": "Sommaire",
        "showtoc": "afficher",
        "hidetoc": "masquer",
-       "collapsible-collapse": "masquer",
-       "collapsible-expand": "afficher",
+       "collapsible-collapse": "Replier",
+       "collapsible-expand": "Développer",
        "confirmable-confirm": "Êtes-vous sûr{{GENDER:$1||e}} ?",
        "confirmable-yes": "Oui",
        "confirmable-no": "Non",
        "actionthrottled": "Action limitée",
        "actionthrottledtext": "Pour lutter contre le spam, l'utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s'avère que vous avez dépassé cette limite.\nEssayez à nouveau dans quelques minutes.",
        "protectedpagetext": "Cette page a été protégée pour empêcher sa modification ou d'autres actions.",
-       "viewsourcetext": "Vous pouvez voir et copier le contenu de la page :",
-       "viewyourtext": "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
+       "viewsourcetext": "Vous pouvez voir et copier le contenu de cette page.",
+       "viewyourtext": "Vous pouvez voir et copier le contenu de <strong>vos modifications</strong> à cette page.",
        "protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
        "editinginterface": "<strong>Attention :</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
        "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.",
-       "cascadeprotected": "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
+       "cascadeprotected": "Cette page est protégée contre les modifications car elle est transcluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
        "namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
        "customcssprotected": "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
        "customjsprotected": "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.",
        "createacct-benefit-body2": "{{PLURAL:$1|article|articles}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributeur récent|contributeurs récents}}",
        "badretype": "Les mots de passe que vous avez saisis ne correspondent pas.",
+       "usernameinprogress": "Une création de compte pour ce nom d’utilisateur est déjà en cours.\nVeuillez patienter.",
        "userexists": "Nom d'utilisateur entré déjà utilisé.\nVeuillez choisir un nom différent.",
        "loginerror": "Erreur de connexion",
        "createacct-error": "Erreur lors de la création du compte",
        "subject-preview": "Prévisualisation du sujet/titre :",
        "previewerrortext": "Une erreur s’est produite lors de la tentative de prévisualisation de vos modifications.",
        "blockedtitle": "L’utilisateur est bloqué.",
-       "blockedtext": "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : ''$2''.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{MediaWiki:emailpage}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
+       "blockedtext": "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''\n\nLe blocage a été effectué par $1.\nLa raison invoquée est la suivante : ''$2''.\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7.\n\nVous pouvez contacter $1 ou un autre [[{{MediaWiki:Grouppage-sysop}}|administrateur]] pour en discuter.\nVous ne pouvez utiliser la fonction « {{int:emailuser}} » que si une adresse de courriel valide est spécifiée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été bloquée.\nVotre adresse IP actuelle est $3 et votre identifiant de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
        "autoblockedtext": "Votre adresse IP a été bloquée automatiquement car elle a été utilisée par un autre utilisateur, lui-même bloqué par $1.\nLa raison invoquée est :\n\n:''$2''\n\n* Début du blocage : $8\n* Expiration du blocage : $6\n* Compte bloqué : $7\n\nVous pouvez contacter $1 ou l’un des autres [[{{MediaWiki:Grouppage-sysop}}|administrateurs]] pour discuter de ce blocage.\n\nNotez que vous ne pourrez utiliser la fonctionnalité d’envoi de courriel que si vous avez une adresse de courriel validée dans vos [[Special:Preferences|préférences]] et que si cette fonctionnalité n’a pas été désactivée.\n\nVotre adresse IP actuelle est $3, et le numéro de blocage est $5.\nVeuillez préciser ces indications dans toutes les requêtes que vous ferez.",
        "blockednoreason": "aucune raison donnée",
        "whitelistedittext": "Vous devez vous $1 pour avoir la permission de modifier le contenu.",
        "readonlywarning": "'''AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.'''\nVous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.\n\nL’administrateur ayant verrouillé la base de données a donné l’explication suivante : $1",
        "protectedpagewarning": "'''AVERTISSEMENT : cette page est protégée. Seuls les utilisateurs ayant le statut d'administrateur peuvent la modifier.'''<br />\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
        "semiprotectedpagewarning": "'''Note :''' Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier. La dernière entrée du journal est affichée ci-dessous pour référence :",
-       "cascadeprotectedwarning": "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent la modifier. Cette protection est héritée par son inclusion par {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
+       "cascadeprotectedwarning": "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent la modifier car elle est transcluse dans {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
        "titleprotectedwarning": "'''ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.''' La dernière entrée du journal est affichée ci-dessous pour référence :",
        "templatesused": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :",
        "templatesusedpreview": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :",
        "search-category": "(catégorie $1)",
        "search-file-match": "(correspond au contenu du fichier)",
        "search-suggest": "Essayez avec cette orthographe : $1",
+       "search-rewritten": "Affiche les résultats pour $1. Recherchez à sa place pour $2.",
        "search-interwiki-caption": "Projets frères",
        "search-interwiki-default": "Résultats de $1 :",
        "search-interwiki-more": "(plus)",
        "rows": "Rangées :",
        "columns": "Colonnes :",
        "searchresultshead": "Filtrer avec cette valeur",
-       "stub-threshold": "Limite supérieure pour les <a href=\"#\" class=\"stub\">liens vers les ébauches</a> (octets) :",
+       "stub-threshold": "Seuil pour le formatage des liens bouchons ($1) :",
+       "stub-threshold-sample-link": "exemple",
        "stub-threshold-disabled": "Désactivé",
        "recentchangesdays": "Nombre de jours à afficher dans les modifications récentes :",
        "recentchangesdays-max": "(maximum $1 jour{{PLURAL:$1||s}})",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 utilisateur{{PLURAL:$1||s}} en train de suivre]",
-       "rc_categories": "Limite des catégories (séparation avec « | »)",
-       "rc_categories_any": "Toutes",
+       "rc_categories": "Limiter aux catégories (séparées par « | ») :",
+       "rc_categories_any": "Une des sélectionnées",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} après changement",
        "newsectionsummary": "/* $1 */ nouvelle section",
        "rc-enhanced-expand": "Voir les détails",
        "upload-too-many-redirects": "L’URL contient trop de redirections.",
        "upload-http-error": "Une erreur HTTP est survenue : $1",
        "upload-copy-upload-invalid-domain": "La copie des téléversements n’est pas disponible depuis ce domaine.",
+       "upload-dialog-title": "Téléverser un fichier",
+       "upload-dialog-error": "Une erreur est survenue",
+       "upload-dialog-warning": "Un avertissement s’est produit",
+       "upload-dialog-button-cancel": "Annuler",
+       "upload-dialog-button-done": "Fait",
+       "upload-dialog-button-save": "Enregistrer",
+       "upload-dialog-button-upload": "Téléverser",
+       "upload-dialog-label-select-file": "Sélectionner un fichier",
+       "upload-dialog-label-infoform-title": "Détails",
+       "upload-dialog-label-infoform-name": "Nom",
+       "upload-dialog-label-infoform-description": "Description",
+       "upload-dialog-label-usage-title": "Utilisation",
+       "upload-dialog-label-usage-filename": "Nom du fichier",
        "backend-fail-stream": "Impossible de lire le fichier $1.",
        "backend-fail-backup": "Impossible de sauvegarder le fichier $1.",
        "backend-fail-notexists": "Le fichier $1 n’existe pas.",
        "deadendpages": "Pages en impasse",
        "deadendpagestext": "Les pages suivantes ne contiennent aucun lien vers d'autres pages du wiki.",
        "protectedpages": "Pages protégées",
-       "protectedpages-indef": "Uniquement les protections permanentes",
+       "protectedpages-indef": "Uniquement les protections indéfinies",
        "protectedpages-summary": "Cette page liste les pages existantes actuellement protégées. Pour une liste des titres protégés contre la création, voir [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Uniquement les protections en cascade",
        "protectedpages-noredirect": "Masquer les redirections",
        "booksources-text": "Voici une liste indicative de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
        "booksources-invalid-isbn": "L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
        "specialloguserlabel": "Auteur :",
-       "speciallogtitlelabel": "Cible (titre ou utilisateur):",
+       "speciallogtitlelabel": "Cible (titre ou {{ns:user}}:nom d'utilisateur) :",
        "log": "Journaux d’opérations",
        "all-logs-page": "Tous les journaux publics",
        "alllogstext": "Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />\nVous pouvez personnaliser l'affichage en sélectionnant le type de journal, le nom d'utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).",
        "linksearch-pat": "Expression recherchée :",
        "linksearch-ns": "Espace de noms :",
        "linksearch-ok": "Rechercher",
-       "linksearch-text": "Des caractères jokers comme « *.wikipedia.org » peuvent être utilisés.\nIls nécessitent au moins un domaine de niveau supérieur, par exemple « *.org ».<br />\n{{PLURAL:$2|Protocole reconnu|Protocoles reconnus}}: <code>$1</code> (http:// par défaut si aucun protocole n'est indiqué).",
+       "linksearch-text": "Des caractères jokers comme « *.wikipedia.org » peuvent être utilisés.\nIls nécessitent au moins un domaine de niveau supérieur, par exemple « *.org ».<br />\n{{PLURAL:$2|Protocole reconnu|Protocoles reconnus}}: $1 (http:// par défaut si aucun protocole n'est indiqué).",
        "linksearch-line": "$1 est lié depuis $2",
        "linksearch-error": "Les caractères jokers ne peuvent être utilisés qu'au début du nom de domaine de l'hôte.",
        "listusersfrom": "Afficher les utilisateurs à partir de :",
        "emailuser": "Lui envoyer un courriel",
        "emailuser-title-target": "Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
        "emailuser-title-notarget": "Envoyer un courriel à l'utilisateur",
-       "emailpage": "Envoyer un courriel à l'utilisateur",
        "emailpagetext": "Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.\nL'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.",
        "defemailsubject": "Courriel de {{SITENAME}} de l'utilisateur « $1 »",
        "usermaildisabled": "L'envoi de courriels entre utilisateurs est désactivé",
        "emailccsubject": "Copie de votre message à $1 : $2",
        "emailsent": "Courriel envoyé",
        "emailsenttext": "Votre message a été envoyé par courriel.",
-       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « {{int:emailpage}} » de {{SITENAME}}.",
+       "emailuserfooter": "Ce courriel a été envoyé par « $1 » à « $2 » par la fonction « {{int:emailuser}} » de {{SITENAME}}.",
        "usermessage-summary": "A laissé un message système.",
        "usermessage-editor": "Messager du système",
        "watchlist": "Liste de suivi",
        "watchlistanontext": "Veuillez vous connecter pour visualiser ou modifier les éléments de votre liste de suivi.",
        "watchnologin": "Non connecté",
        "addwatch": "Ajouter à la liste de suivi",
-       "addedwatchtext": "La page « [[:$1]] » a été ajoutée à votre [[Special:Watchlist|liste de suivi]].\nLes prochaines modifications de cette page et de la page de discussion associée y seront répertoriées.",
+       "addedwatchtext": "La page «[[:$1]]» et sa page de discussion ont été ajoutées à votre [[Special:Watchlist|liste de suivi]].",
        "addedwatchtext-short": "La page « $1 » a été ajoutée à votre liste de suivi.",
        "removewatch": "Supprimer de la liste de suivi",
-       "removedwatchtext": "La page « [[:$1]] » a été retirée de votre [[Special:Watchlist|liste de suivi]].",
+       "removedwatchtext": "La page « [[:$1]] » et sa page de discussion ont été retirées de votre [[Special:Watchlist|liste de suivi]].",
        "removedwatchtext-short": "La page « $1 » a été supprimée de votre liste de suivi.",
        "watch": "Suivre",
        "watchthispage": "Suivre cette page",
        "watcherrortext": "Une erreur s'est produite lors de la modification des paramètres de votre liste de suivi pour « $1 ».",
        "enotif_reset": "Marquer toutes les pages comme visitées",
        "enotif_impersonal_salutation": "Utilisateur de {{SITENAME}}",
-       "enotif_subject_deleted": "La page $1 sur {{SITENAME}} a été supprimée par {{GENDER:$2|$2}}",
-       "enotif_subject_created": "La page $1 sur {{SITENAME}} a été créée par {{GENDER:$2|$2}}",
-       "enotif_subject_moved": "La page $1 sur {{SITENAME}} a été renommée par {{GENDER:$2|$2}}",
-       "enotif_subject_restored": "La page $1 sur {{SITENAME}} a été restaurée par {{GENDER:$2|$2}}",
-       "enotif_subject_changed": "La page $1 sur {{SITENAME}} a été modifiée par {{GENDER:$2|$2}}",
+       "enotif_subject_deleted": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|supprimée}} par $2",
+       "enotif_subject_created": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|crée}} par $2",
+       "enotif_subject_moved": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|renommée}} par $2",
+       "enotif_subject_restored": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|restaurée}} par $2",
+       "enotif_subject_changed": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|modifiée}} par $2",
        "enotif_body_intro_deleted": "La page $1 sur {{SITENAME}} a été effacée le $PAGEEDITDATE par {{gender:$2|$2}}, voir $3 pour la révision actuelle.",
        "enotif_body_intro_created": "La page $1 sur {{SITENAME}} a été créée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.",
-       "enotif_body_intro_moved": "La page $1 sur {{SITENAME}} a été renommée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.",
+       "enotif_body_intro_moved": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|renommée}} le $PAGEEDITDATE par $2, voir $3 pour la révision actuelle.",
        "enotif_body_intro_restored": "La page $1 sur {{SITENAME}} a été restaurée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.",
-       "enotif_body_intro_changed": "La page $1 sur {{SITENAME}} a été modifiée le $PAGEEDITDATE par {{GENDER:$2|$2}}, voir $3 pour la révision actuelle.",
+       "enotif_body_intro_changed": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|modifiée}} le $PAGEEDITDATE par $2, voir $3 pour la révision actuelle.",
        "enotif_lastvisited": "Voyez $1 pour tous les changements depuis votre dernière visite.",
        "enotif_lastdiff": "Voyez $1 pour visualiser ces changements.",
        "enotif_anon_editor": "utilisateur non-enregistré $1",
        "changecontentmodel-success-title": "Le modèle de contenu a été modifié",
        "changecontentmodel-success-text": "Le modèle de contenu de [[:$1]] a été modifié.",
        "changecontentmodel-cannot-convert": "Le contenu sur [[:$1]] n’a pas pu être converti en un type de $2.",
-       "changecontentmodel-title-cantexist": "Impossible d’avoir une page à $1.",
        "changecontentmodel-nodirectediting": "Le modèle de contenu $1 ne permet pas la modification directe",
        "log-name-contentmodel": "Journal de modification de modèle de contenu",
        "log-description-contentmodel": "Événements relatifs aux modèles de contenu d’une page",
        "protect-locked-blocked": "Vous ne pouvez pas modifier les niveaux de protection durant votre blocage.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-dblock": "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.\nVoici les réglages actuels de la page '''$1''' :",
        "protect-locked-access": "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.\nVoici les réglages actuels de la page '''$1''' :",
-       "protect-cascadeon": "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
+       "protect-cascadeon": "Cette page est protégée car elle est transcluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée.\nLa modification du niveau de protection de cette page n'affectera pas la protection en cascade.",
        "protect-default": "Autoriser tous les utilisateurs",
        "protect-fallback": "Autoriser uniquement les utilisateurs avec le droit « $1 »",
        "protect-level-autoconfirmed": "Autoriser uniquement les utilisateurs auto-confirmés",
        "undeletepagetext": "{{PLURAL:$1|La page suivante a été supprimée et se trouve|Les pages suivantes ont été supprimées et se trouvent}} dans la base de données archive, d’où {{PLURAL:$1|elle peut|elles peuvent}} encore être restaurée{{PLURAL:$1||s}}.\nL’archive peut être nettoyée périodiquement.",
        "undelete-fieldset-title": "Restaurer les versions",
        "undeleteextrahelp": "Pour restaurer l’historique complet de cette page, laissez toutes les cases décochées et cliquez sur '''''Restaurer'''''.\nPour effectuer une restauration partielle, cochez les cases correspondant aux versions à rétablir, puis cliquez sur '''''Restaurer'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|version archivée|versions archivées}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|révision supprimée|révisions supprimées}}",
        "undeletehistory": "Si vous restaurez la page, toutes les versions seront replacées dans l’historique.\nSi une nouvelle page avec le même nom a été créée depuis la suppression, les versions restaurées apparaîtront dans l’historique antérieur et la version courante ne sera pas automatiquement remplacée.",
        "undeleterevdel": "La restauration ne sera pas effectuée si, au final, la version la plus récente de la page ou du fichier reste partiellement supprimée.\nDans de tels cas, vous devez décocher ou démasquer les versions effacées les plus récentes (en tête de liste).",
        "undeletehistorynoadmin": "Cette page a été supprimée.\nLe motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui ont modifié la page avant sa suppression.\nLe contenu effectif de ces versions supprimées n’est accessible qu’aux administrateurs.",
        "ipblocklist-submit": "Rechercher",
        "ipblocklist-localblock": "Blocage local",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Autre blocage|Autres blocages}}",
-       "infiniteblock": "permanent",
+       "infiniteblock": "infini",
        "expiringblock": "expire le $1 à $2",
        "anononlyblock": "utilisateur non enregistré uniquement",
        "noautoblockblock": "blocage automatique désactivé",
        "tooltip-ca-nstab-main": "Voir la page de contenu",
        "tooltip-ca-nstab-user": "Voir la page utilisateur",
        "tooltip-ca-nstab-media": "Voir la page du média",
-       "tooltip-ca-nstab-special": "Ceci est une page spéciale, vous ne pouvez pas la modifier.",
+       "tooltip-ca-nstab-special": "Ceci est une page spéciale, et elle ne peut pas être modifiée.",
        "tooltip-ca-nstab-project": "Voir la page du projet",
        "tooltip-ca-nstab-image": "Voir la page du fichier",
        "tooltip-ca-nstab-mediawiki": "Voir le message système",
        "spam_reverting": "Rétablissement de la dernière version ne contenant pas de lien vers $1",
        "spam_blanking": "Toutes les versions contenant des liens vers $1 sont blanchies",
        "spam_deleting": "Toutes les versions contenaient des liens vers $1, suppression",
-       "simpleantispam-label": "Vérification anti-pourriel.\nNe '''RIEN''' inscrire ici !",
+       "simpleantispam-label": "Vérification anti-spam.\nNe <strong>rien</strong> inscrire ici !",
        "pageinfo-title": "Informations pour « $1 »",
        "pageinfo-not-current": "Désolé, impossible de fournir cette information pour les anciennes révisions.",
        "pageinfo-header-basic": "Informations de base",
        "pageinfo-robot-index": "Autorisée",
        "pageinfo-robot-noindex": "Interdite",
        "pageinfo-watchers": "Nombre de contributeurs ayant la page dans leur liste de suivi",
-       "pageinfo-visiting-watchers": "Nombre d’observateurs de page ayant visité les modifications récentes",
+       "pageinfo-visiting-watchers": "Nombre d’observateurs de la page ayant consulté les modifications récentes de la page",
        "pageinfo-few-watchers": "Moins de $1 {{PLURAL:$1|observateur|observateurs}}",
        "pageinfo-few-visiting-watchers": "Il peut ou non y avoir un observateur regardant les modifications récentes",
        "pageinfo-redirects-name": "Nombre de redirections vers cette page",
        "htmlform-cloner-create": "Ajouter encore",
        "htmlform-cloner-delete": "Supprimer",
        "htmlform-cloner-required": "Une valeur au moins est obligatoire.",
+       "htmlform-title-badnamespace": "[[:$1]] n'est pas dans l'espace de noms \"{{ns:$2}}\" .",
+       "htmlform-title-not-creatable": "\"$1\" n'est pas un titre de page réalisable",
+       "htmlform-title-not-exists": "[[:$1]] n’existe pas",
+       "htmlform-user-not-exists": "<strong>$1</strong> n’existe pas.",
+       "htmlform-user-not-valid": "<strong>$1</strong> n’est pas un nom d’utilisateur valide.",
        "sqlite-has-fts": "$1 avec recherche en texte intégral supportée",
        "sqlite-no-fts": "$1 sans recherche en texte intégral supportée",
        "logentry-delete-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
        "logentry-newusers-create2": "Le compte utilisateur $3 {{GENDER:$2|a été créé}} par $1",
        "logentry-newusers-byemail": "Le compte utilisateur $3 {{GENDER:$2|a été créé}} par $1 et le mot de passe a été envoyé par courriel",
        "logentry-newusers-autocreate": "Le compte $1 {{GENDER:$2|a été créé}} automatiquement",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|a déplacé}} les paramètres de protection de $4 vers $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3 de $4 à $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5",
        "special-characters-title-endash": "tiret demi-cadratin",
        "special-characters-title-emdash": "tiret cadratin",
        "special-characters-title-minus": "signe moins",
+       "mw-widgets-dateinput-no-date": "Aucune date sélectionnée",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la page n’existe pas encore",
        "mw-widgets-titleinput-description-redirect": "redirection vers $1"
 }
index f3a43cb..3c89d9a 100644 (file)
        "recentchanges": "Changements récent",
        "rcshowhidebots": "$1 les robots",
        "rcshowhidepatr": "$1 les modifications patrouillés",
+       "diff": "diff",
+       "hist": "hist",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "listfiles-latestversion-yes": "Oui",
        "listfiles-latestversion-no": "Non",
        "file-anchor-link": "Dossier",
+       "filehist": "Historique du fichier",
        "filehist-deleteall": "effacer tout",
        "filehist-deleteone": "effacer",
        "filehist-user": "Useur",
+       "imagelinks": "Utilisation du fichier",
        "shared-repo-from": "de: $1",
        "filerevert-comment": "Raison:",
        "filedelete": "Effacer $1",
        "ancientpages": "Pages les plus anciennement changées",
        "move": "Renommer",
        "movethispage": "Renommer cette page",
+       "booksources-search": "Charcher",
        "allpagessubmit": "Aller",
        "categories": "Classes",
        "special-categories-sort-count": "tri par nombre d'éléments",
        "block-log-flags-nocreate": "création de compte interdite",
        "tooltip-pt-login": "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier mais ce n’est pas obligatoire.",
        "tooltip-ca-talk": "Discussion de cette page de contenu",
+       "tooltip-ca-watch": "Additionner cette page à votre liste de suivi",
        "tooltip-search": "Charche {{SITENAME}}",
        "tooltip-search-fulltext": "Charche les pages pour ce texte",
        "tooltip-p-logo": "Visitez la page d'acceuil",
        "tooltip-n-randompage": "Afficher un page au hasard",
        "tooltip-n-help": "La place pour savoir",
        "tooltip-t-specialpages": "Liste de tout les pages speciales",
+       "tooltip-ca-nstab-special": "Ceci est une page spéciale, vous ne pouvez pas la changer.",
        "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.",
-       "redirect-file": "Nom du fichier"
+       "namespacesall": "Tous",
+       "redirect-file": "Nom du fichier",
+       "searchsuggest-search": "Charcher"
 }
index b33ee71..7f61067 100644 (file)
        "passwordreset": "Remês’a zérô du contresegno",
        "passwordreset-text-one": "Rempléd ceti formulèro por rebetar a zérô voutron contresegno.",
        "passwordreset-text-many": "{{PLURAL:$1|Rempléd yon des champs por rebetar a zérô voutron contresegno.}}",
-       "passwordreset-legend": "Rebetar a zérô lo contresegno",
        "passwordreset-disabled": "La remês’a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.",
        "passwordreset-emaildisabled": "Les fonccionalitâts de mèssageria èlèctronica sont étâyes dèsactivâyes sur ceti vouiqui.",
        "passwordreset-username": "Nom d’utilisator :",
        "unusedtemplateswlh": "ôtros lims",
        "randompage": "Pâge per hasârd",
        "randompage-nopages": "Y at gins de pâge dedens {{PLURAL:$2|cet’èspâço|cetos èspâços}} de noms : $1.",
+       "randomincategory-submit": "Emmodar",
        "randomredirect": "Redirèccion per hasârd",
        "randomredirect-nopages": "Y at gins de pâge de redirèccion dedens l’èspâço de noms « $1 ».",
        "statistics": "Statistiques",
        "nlinks": "$1 lim{{PLURAL:$1||s}}",
        "nmembers": "$1 membro{{PLURAL:$1||s}}",
        "nrevisions": "$1 vèrsion{{PLURAL:$1||s}}",
-       "nviews": "$1 vu{{PLURAL:$1|a|es}}",
        "nimagelinks": "Empleyê dessus $1 pâge{{PLURAL:$1||s}}",
        "ntransclusions": "empleyê dessus $1 pâge{{PLURAL:$1||s}}",
        "specialpage-empty": "Y at gins de rèsultat a fâre vêre.",
        "linksearch-pat": "Modèlo de rechèrche :",
        "linksearch-ns": "Èspâço de noms :",
        "linksearch-ok": "Rechèrchiér",
-       "linksearch-text": "Des caractèros j·oquères coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : <code>$1</code> (http:// per dèfôt se nion protocolo est spècifiâ).",
+       "linksearch-text": "Des caractèros j·oquères coment « *.wikipedia.org » pôvont étre empleyês.\nIls ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />\n{{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : $1 (http:// per dèfôt se nion protocolo est spècifiâ).",
        "linksearch-line": "$1 est liyê dês $2",
        "linksearch-error": "Los caractèros j·oquères pôvont étre empleyês ren qu’u comencement du nom de domêno de l’hôto.",
        "listusersfrom": "Fâre vêre los utilisators dês :",
        "special-characters-group-khmer": "C’mère",
        "special-characters-title-endash": "terèt anglès",
        "special-characters-title-emdash": "terèt èm",
-       "special-characters-title-minus": "segno muens"
+       "special-characters-title-minus": "segno muens",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index 7eb4d8e..d367e8a 100644 (file)
@@ -7,7 +7,8 @@
                        "Merlissimo",
                        "Murma174",
                        "Pyt",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Ferwisangen onerstrik:",
        "badtitletext": "Didiar sidjennööm gongt ei. Hi as ferlicht leesag of as en ferkiard ferwisang faan en ööder projekt.",
        "title-invalid-empty": "Didiar sidjennööm as leesag of diar stäänt bluas en en nöömrüm.",
        "title-invalid-utf8": "Didiar sidjennööm hää en ferkiard UTF-8-sekwens.",
-       "title-invalid-interwiki": "Didiar nööm hää en interwiki-ferwisang",
+       "title-invalid-interwiki": "Didiar tiitel hää en interwiki-ferwisang, diar ei brükt wurd mut.",
        "title-invalid-talk-namespace": "Di uunfraaget sidjennööm hää mä en diskuschuunssidj tu dun, diar't goorei jiw koon.",
        "title-invalid-characters": "Di uunfraaget sidjennööm hää ferkiard tiakens: \"$1\".",
        "title-invalid-relative": "Di tiitel hää en relatiiwen wai. Relatiif waier (./, ../) san ei tuläät, auer diar ei arke browser mä amgung koon.",
+       "title-invalid-magic-tilde": "Didiar tiitel hää en rä faan tiakens (<nowiki>~~~</nowiki>), diar ei brükt wurd mut.",
+       "title-invalid-too-long": "Didiar tiitel as tu lung. Hi mut ei linger wees üs {{PLURAL:$1|ian byte|$1 bytes}} uun UTF-8-code.",
+       "title-invalid-leading-colon": "Didiar tiitel hää bi began en dobelponkt. Det gongt ei.",
        "perfcached": "Jodiar dooten kem faan a cache an san ferlicht ei muar aktuel. Ei muar üs {{PLURAL:$1|ian resultoot as|$1 resultooten san}} uun a cache.",
        "perfcachedts": "Jodiar dooten kem faan a cache, leetst tooch nei: $1. Ei muar üs {{PLURAL:$4|ian resultoot as|$4 resultooten san}} uun a cache.",
        "querypage-no-updates": "Dü könst detdiar sidj uun uugenblak ei aktualisiare. A dooten wurd iarst ans ei iinsteld.",
        "actionthrottled": "Taal faan aktjuunen limitiaret",
        "actionthrottledtext": "Dü heest detdiar aktjuun tufölsis uun en kurten tidjrüm ütjfeerd.\nWees so gud an ferschük det glik noch ans weder.",
        "protectedpagetext": "Detdiar sidj as seekert wurden, am dat diar näämen wat feranert.",
-       "viewsourcetext": "Dü könst di kweltekst faan det sidj uunluke an ham uk kopiare:",
-       "viewyourtext": "Dü könst di code faan '''din feranrang''' faan detdiar sidj uunluke an kopiare:",
+       "viewsourcetext": "Dü könst di kweltekst faan detdiar sidj uunluke an ham uk kopiare.",
+       "viewyourtext": "Dü könst di code faan <strong>din feranrang</strong> faan detdiar sidj uunluke an kopiare.",
        "protectedinterface": "Üüb detdiar sidj stäänt tekst för det software faan detheer wiki an as seekert wurden, am dat näämen diar wat feranert.\nDü könst [//translatewiki.net/ translatewiki.net] faan MediaWiki brük, am auersaatangen för ale wiki projekten tu maagin.",
        "editinginterface": "<strong>Paase üüb:</strong> Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nordfriisk Wikipedia.",
        "translateinterface": "Am auersaatangen föör aal a Wikis föörtunemen, gung tu [//translatewiki.net/ translatewiki.net], det as det MediaWiki-lokalisiarangsprojekt.",
        "createacct-benefit-body2": "{{PLURAL:$1|sidj|sidjen}}",
        "createacct-benefit-body3": "aktiif {{PLURAL:$1|skriiwer|skriiwern}}",
        "badretype": "Jo tau paaswurden san ei likedenang.",
+       "usernameinprogress": "För didiar brükernööm woort jüst en konto maaget. Teew en uugenblak.",
        "userexists": "Didiar brükernööm as al wech.\nWees so gud an schük di en öödern.",
        "loginerror": "Bi't uunmeldin as wat skiaf gingen",
        "createacct-error": "Bi't iinrachten faan det brükerkonto as wat skiaf gingen",
        "wrongpassword": "Det paaswurd as ferkiard.\nWees so gud an ferschük det noch ans.",
        "wrongpasswordempty": "Dü heest nian paaswurd iinden.\nFerschük det man noch ans.",
        "passwordtooshort": "Paaswurden skel tumanst {{PLURAL:$1|1 tiaken|$1 tiakens}} lung wees.",
+       "passwordtoolong": "Paaswurden kön ei linger üs {{PLURAL:$1|1 tiaken|$1 tiakens}} wees.",
        "password-name-match": "Dü könst dan brükernööm ei üs paaswurd nem.",
        "password-login-forbidden": "Didiar brükernööm mä detdiar paaswurd as ei tuläät.",
        "mailmypassword": "Paaswurd turagsaat",
        "pt-userlogout": "Ufmelde",
        "php-mail-error-unknown": "Ünbekäänd feeler mä det funktjuun mail() faan PHP.",
        "user-mail-no-addy": "Küd nian e-mail schüür saner e-mail-adres.",
-       "user-mail-no-body": "Dü wulst en e-mail saner tekst wechsjüür.",
+       "user-mail-no-body": "Dü wulst en e-mail saner tekst wechschüür.",
        "changepassword": "Paaswurd feranre",
        "resetpass_announce": "Am det uunmeldin uftuslütjen, skel dü en nei paaswurd iindu.",
        "resetpass_header": "Paaswurd feranre",
        "missingcommentheader": "'''Paase üüb:''' Dü heest nian auerskraft uunden.\nWan dü det sidj seekerst, woort det saner auerskraft auernimen.",
        "summary-preview": "Föörskau faan det tuupfaadang:",
        "subject-preview": "Föörskau faan det auerskraft:",
+       "previewerrortext": "Diar as wat skiaf gingen, üs en föörskau faan din feranrangen wiset wurd skul.",
        "blockedtitle": "Brüker as speret",
        "blockedtext": "'''Dan brükernööm of din IP-adres as speret wurden.'''\n\nDet as maaget wurden faan $1.\nDi grünj as ''$2''.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
        "autoblockedtext": "'''Din IP-adres as speret wurden, auer det faan en öödern spereten brüker brükt wurden as.'''\n\nDi grünj as:\n: ''$2''.\n\n* Began: $8\n* Aanj: $6\n* Bedraapt: $7\n\nDü könst $1 kontaktiare of uk en [[{{MediaWiki:Grouppage-sysop}}|administraator]] am det tu diskutiarin.\n\nDü könst ei det e-mail-funktjuun 'E-mail tu didiar brüker' brük, so loong dü nian e-mail-adres uun din [[Special:Preferences|brükerkonto-iinstelangen]] uunden heest of wan det e-mail-funktjuun för di speret wurden as.\n\nUugenblakelk as din IP-addres $3, an det sper-ID as #$5.\nFör arke uunfraag wurd aal jo informatjuunen boowen brükt.",
        "yourdiff": "Ferskeeler",
        "copyrightwarning": "Seenk diaram, dat bidracher tu {{SITENAME}} oner det $1 ütjden wurd (muar stäänt bi $2).\nWan dü ei wel, dat öödern dan bidrach widjer bewerke, do trak ei üüb \"Seekre\".<br />\nDü ferspräächst, dat dü di tekst salew skrewen heest of dat diar nian kopiarrochten üüb lei.\n'''Dü mutst nian werk mä kopiarrochten saner ferloof heer iinstel!'''",
        "copyrightwarning2": "Seenk diaram, dat det sidj {{SITENAME}} faan öödern bewerket, feranert of uk stregen wurd koon. Wan dü det ei wel, do skriiw heer niks iin! \n\nWan dü heer wat iinskrafst, do beest dü diarmä iinferstenen an seekerst tu, dat dü det '''salew skrewen''' heest of faan en steed auernimen heest, huar '''nian rochten''' üüb lei. (Luke bi $1, wan dü muar wed wel.)\n\n'''Auerdreeg nään frääm teksten an bilen saner ferloof!'''",
+       "editpage-cannot-use-custom-model": "Det muude faan detheer sidj koon ei feranert wurd.",
        "longpageerror": "'''Error: Dan tekst as {{PLURAL:$1|ian kilobyte|$1 kilobytes}} lung, hi mut oober ei linger wees üs {{PLURAL:$2|ian kilobyte|$2 kilobytes}}.'''Hi koon ei ufspiikerd wurd.",
        "readonlywarning": "'''Paase üüb: Dü könst uun uugenblak ei üüb det dootenbeenk tugrip. Din dooten kön ei seekert wurd.''' Wees so gud an seekre dan tekst iarst ans üüb dan reegner, an ferschük leederhen, ham tu auerdreegen.\n\nGrünj för det sperin: $1",
        "protectedpagewarning": "'''Paase üüb: Detdiar sidj as speret wurden. Bluas administratooren kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
        "semiprotectedpagewarning": "'''Paase üüb: Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
-       "cascadeprotectedwarning": "'''Paase üüb:''' Detdiar sidj koon bluas faan administratooren bewerket wurd. Hat as uun {{PLURAL:$1|detdiar ööder sidj|jodiar ööder sidjen}} iinbünjen, diar troch en kaskaaden-optsjuun seekert {{PLURAL:$1|as|san}}:",
+       "cascadeprotectedwarning": "<strong>Paase üüb:</strong> Detdiar sidj koon bluas faan administratooren bewerket wurd. Hat as uun {{PLURAL:$1|detdiar ööder sidj|jodiar ööder sidjen}} iinbünjen, diar troch en kaskaadensper seekert {{PLURAL:$1|as|san}}:",
        "titleprotectedwarning": "'''Paase üüb: \"Detdiar sidj mä didiar nööm koon ei faan arken bewerket wurd. Bluas enkelt brükern mä [[Special:ListGroupRights|was brükerrochten]] kön detdiar sidj nei maage of bewerke.'''\nUun't logbuk stäänt muar diartu:",
        "templatesused": "{{PLURAL:$1|Detdiar föörlaag woort|Jodiar föörlaagen wurd}} üüb detdiar sidj brükt:",
        "templatesusedpreview": "{{PLURAL:$1|Detdiar föörlaag woort|Jodiar föörlaagen wurd}} uun detdiar sidjenföörskau brükt:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Leesag objekt",
        "content-json-empty-array": "Leesag array",
+       "duplicate-args-warning": "<strong>Paase üüb:</strong> [[:$1]] rept [[:$2]] mä muar üs ään wäärs för di parameter „$3“ ap. Bluas di leetst wäärs woort brükt.",
        "duplicate-args-category": "Sidjen, diar dobelt argumenten uun föörlaagen aprep.",
        "duplicate-args-category-desc": "Detdair sidj rept föörlaagen ap, diar dobelt argumenten brük, so üs <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> of <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Paase üüb:''' Detdiar sidj brükt tuföl widjloftag server-funktjuunen.\n\nDiar mut ei muar üs {{PLURAL:$2|1|$2}} brükt wurd. Nü {{PLURAL:$1|woort diar 1|wurd diar $1}} brükt.",
        "history-feed-description": "Ferluup faan werjuunen faan detdiar sidj uun {{SITENAME}}",
        "history-feed-item-nocomment": "$1 di $3 am a klook $4",
        "history-feed-empty": "Son sidj jaft at ei. Ferlicht as det stregen of fersköwen wurden. [[Special:Search|Schük]] üüb {{SITENAME}} efter nei sidjen, diar diartu paase.",
+       "history-edit-tags": "Markiarangen faan ütjsoocht werjuunen bewerke",
        "rev-deleted-comment": "(Tuupfaadet beskriiwang wechnimen)",
        "rev-deleted-user": "(Brükernööm stregen)",
        "rev-deleted-event": "(Logbuk-iindrach stregen)",
        "notextmatches": "Nian auerianstemangen mä teksten",
        "prevn": "{{PLURAL:$1|leetst|leetst $1}}",
        "nextn": "{{PLURAL:$1|naist|naist $1}}",
+       "prev-page": "leetst sidj (turag)",
+       "next-page": "naist sidj",
        "prevn-title": "Leetst $1 {{PLURAL:$1|resultaat|resultaaten}}",
        "nextn-title": "Naist $1 {{PLURAL:$1|resultaat|resultaaten}}",
        "shown-title": "Wise $1 {{PLURAL:$1|resultaat|resultaaten}} per sidj",
        "viewprevnext": "Wise ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''Deer as en sid nååmd \"[[:$1]]\" önj jüdeer Wiki'''",
+       "searchmenu-exists": "<strong>Diar as en sidj mä di tiitel \"[[:$1]]\" uun detheer wiki.</strong> {{PLURAL:$2|0=|Muar sidjen mä detdiar wurd uunwise.}}",
        "searchmenu-new": "<strong>Maage det sidj „[[:$1]]“ uun detheer wiki!</strong> {{PLURAL:$2|0=|Luke uk bi det fünjen sidj.|Luke uk bi a fünjen sidjen.}}",
        "searchprofile-articles": "Artiikler",
        "searchprofile-images": "Multimedia",
        "searchprofile-advanced": "Ütjwidjet",
        "searchprofile-articles-tooltip": "Schük uun $1",
        "searchprofile-images-tooltip": "Bilen schük",
-       "searchprofile-everything-tooltip": "Schük aueraal (uk diskusjuunssidjen)",
+       "searchprofile-everything-tooltip": "Schük aueraal (uk diskuschuunsidjen)",
        "searchprofile-advanced-tooltip": "Uun ööder nöömrümer schük",
        "search-result-size": "$1 ({{PLURAL:$2|1 wurd|$2 wurden}})",
        "search-result-category-size": "{{PLURAL:$1|1 sidj|$1 sidjen}} ({{PLURAL:$2|1 onerkategorii|$2 onerkategoriin}}, {{PLURAL:$3|1 datei|$3 datein}})",
        "search-category": "(kategorii $1)",
        "search-file-match": "(fünjen tekst)",
        "search-suggest": "Mendst dü „$1“?",
+       "search-rewritten": "Diar wurd resultaaten för $1 uunwiset. Schük uunsteed för $2.",
        "search-interwiki-caption": "Saster-projekten",
        "search-interwiki-default": "Resultaaten faan $1:",
        "search-interwiki-more": "(muar)",
        "yourvariant": "Spriak:",
        "prefs-help-variant": "Uun hün skriiwwiis skel a sidjen uunwiset wurd:",
        "yournick": "Nei signatuur:",
-       "prefs-help-signature": "Wees so gud an onerskriiw üüb diskusjuunssidjen mä „<nowiki>~~~~</nowiki>“. Diar komt do dan brükernööm an det klooktidj bi ütj.",
+       "prefs-help-signature": "Wees so gud an onerskriiw üüb diskuschuunsidjen mä „<nowiki>~~~~</nowiki>“. Diar komt do dan brükernööm an det klooktidj bi ütj.",
        "badsig": "Diar stemet wat ei mä't signatuur. Preewe at HTML.",
        "badsiglength": "Din signatuur mut ei muar üs $1 {{PLURAL:$1|tiaken|tiakens}} haa.",
        "yourgender": "Hü wel dü betiakent wurd?",
        "userrights-lookup-user": "Brükersköölen bewerke",
        "userrights-user-editname": "Brükernööm:",
        "editusergroup": "Brükersköölen bewerke",
-       "editinguser": "Brükerrochten faan '''[[User:$1|$1]]''' $2 feranre",
+       "editinguser": "Feranre brükerrochten {{GENDER:$1|faan di brüker}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Lasmootskap tu brükersköölen bewerke",
        "saveusergroups": "Brükersköölen seekre",
        "userrights-groupsmember": "Lasmoot faan:",
        "grouppage-suppress": "{{ns:project}}:Oversighter",
        "right-read": "Sidjen lees",
        "right-edit": "Sidjen bewerke",
-       "right-createpage": "Sidjen maage (saner diskusjuunssidjen)",
-       "right-createtalk": "Diskusjuunssidjen maage",
+       "right-createpage": "Sidjen maage (saner diskuschuunsidjen)",
+       "right-createtalk": "Diskuschuunsidjen maage",
        "right-createaccount": "Brükerkonto iinracht",
        "right-minoredit": "Feranrangen üs letj kääntiakne",
        "right-move": "Sidjen fersküüw",
        "right-purge": "Sidjen-cache leesag maage saner efterfraagin",
        "right-autoconfirmed": "Ei troch IP-limits beskäären",
        "right-bot": "Automatisiaret bewerke",
-       "right-nominornewtalk": "Letj feranrangen üüb diskusjuunssidjen wurd ei üs „nei noorachten“ uunwiset.",
+       "right-nominornewtalk": "Letj feranrangen üüb diskuschuunsidjen wurd ei üs „nei bööd“ uunwiset.",
        "right-apihighlimits": "Huuger taalen für API-uunfraagen brük",
        "right-writeapi": "Write-API brük",
        "right-delete": "Sidjen strik",
        "right-sendemail": "E-mails tu ööder brükern schüür",
        "right-passwordreset": "Paaswurd faan en brüker turagsaat an det e-mail diartu uunluke",
        "right-managechangetags": "[[Special:Tags|Markiarangen]] iinracht an uun't dootenbeenk strik",
+       "right-applychangetags": "[[Special:Tags|Markiarangen]] tuup mä ööder feranrangen brük",
+       "right-changetags": "Feranre [[Special:Tags|markiarangen]] faan enkelt werjuunen of logbukiindracher",
        "newuserlogpage": "Neiuunmeldangs-logbuk",
        "newuserlogpagetext": "Detheer as en logbuk faan nei iinracht brükerkonten.",
        "rightslog": "Brükerrochten-logbuk",
        "action-read": "jüdeer sid leese",
        "action-edit": "detdiar sidj tu bewerkin",
        "action-createpage": "nei sidjen tu maagin",
-       "action-createtalk": "diskusjuunssidjen maage",
+       "action-createtalk": "diskuschuunsidjen maage",
        "action-createaccount": "jüdeer brükerkonto mååge",
        "action-history": "di ferluup faan detdiar sidj uuntulukin.",
        "action-minoredit": "detdiar feranrang üs letj kääntiakne",
        "action-editmyprivateinfo": "din priwoot dooten tu bewerkin",
        "action-editcontentmodel": "det model faan det sidj tu bewerkin",
        "action-managechangetags": "markiarangen iinracht an uun't dootenbeenk strik",
+       "action-applychangetags": "markiarangen tuup mä ööder feranrangen tu brüken",
+       "action-changetags": "markiarangen faan enkelt werjuunen of logbukiindracher tu feranrin",
        "nchanges": "$1 {{PLURAL:$1|feranrang|feranrangen}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sant dan leetst beschük}}",
        "enhancedrc-history": "Ferluup",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|brüker|brükern}}, diar tuluke]",
        "rc_categories": "Bluas sidjen ütj jo kategoriin (apdiald mä „|“):",
-       "rc_categories_any": "Arke",
+       "rc_categories_any": "Arke ütjsoocht",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} efter't feranrin",
        "newsectionsummary": "Nei kirew /* $1 */",
        "rc-enhanced-expand": "Enkelthaiden wise",
        "uploaddisabledtext": "Det huuchschüüren faan datein as ei aktiwiaret.",
        "php-uploaddisabledtext": "Det huuchschüüren faan datein as uun PHP ei aktiwiaret.\nLuke di det iinstelang faan <code>file_uploads</code> uun.",
        "uploadscripted": "Uun detdiar datei stäänt HTML- of Scriptcode, an küd ütj fersen faan en browser ütjfeerd wurd.",
+       "upload-scripted-pi-callback": "Dü könst nian datei mä XML-stylesheet-code huuchschüür.",
+       "uploaded-script-svg": "Skriptelement „$1“ uun det huuchschüürd SVG-datei fünjen.",
+       "uploaded-hostile-svg": "Ünseeker CSS uun't style-element faan det huuchschüürd SVG-datei fünjen.",
+       "uploaded-event-handler-on-svg": "Event-handler atributen <code>$1=\"$2\"</code> san uun SVG-datein ei tuläät.",
        "uploadscriptednamespace": "Detdiar SVG-datei wiset üüb en ferkiarden nöömrüm \"$1\".",
        "uploadinvalidxml": "Det XML uun det huuchschüürd datei küd ei ''parset'' wurd.",
        "uploadvirus": "Uun detdiar datei as en wiirus! Details: $1",
        "upload-too-many-redirects": "Det URL hää tuföl widjerfeerangen.",
        "upload-http-error": "Diar as en HTTP-feeler mä: $1",
        "upload-copy-upload-invalid-domain": "Kopiin faan datein kön faan detdiar domeen ei huuchschüürd wurd.",
+       "upload-dialog-title": "Datei huuchschüür",
+       "upload-dialog-error": "Diar as wat skiaf gingen",
+       "upload-dialog-warning": "Diar as en wäärnang kimen",
+       "upload-dialog-button-cancel": "Ufbreeg",
+       "upload-dialog-button-done": "Klaar",
+       "upload-dialog-button-save": "Seekre",
+       "upload-dialog-button-upload": "Huuchschüür",
+       "upload-dialog-label-select-file": "Datei ütjschük",
+       "upload-dialog-label-infoform-title": "Enkelthaiden",
+       "upload-dialog-label-infoform-name": "Nööm",
+       "upload-dialog-label-infoform-description": "Beskriiwang",
+       "upload-dialog-label-usage-title": "Brük",
+       "upload-dialog-label-usage-filename": "Dateinööm",
        "backend-fail-stream": "Det datei $1 küd ei auerdraanj wurd.",
        "backend-fail-backup": "Det datei $1 küd ei seekert wurd.",
        "backend-fail-notexists": "Det datei $1 jaft at ei.",
        "listfiles-delete": "strik",
        "listfiles-summary": "Üüb detdiar spezialsidj wurd aal a huuchschüürd datein uunwiset.",
        "listfiles_search_for": "Schük efter det datei:",
+       "listfiles-userdoesnotexist": "Son brükerkonto \"$1\" jaft at ei.",
        "imgfile": "datei",
        "listfiles": "List faan datein",
        "listfiles_thumb": "Letjer bil",
        "randomincategory-nopages": "Diar san nian sidjen uun [[:Category:$1]].",
        "randomincategory-category": "Kategorii:",
        "randomincategory-legend": "Tufelag sidj uun't kategorii",
+       "randomincategory-submit": "Widjer",
        "randomredirect": "Tufelag widjerfeerang",
        "randomredirect-nopages": "Uun di nöömrüm „$1“ san nian widjerfeerangen.",
        "statistics": "Statistik",
        "statistics-header-hooks": "Ööder statistiken",
        "statistics-articles": "Artiikler",
        "statistics-pages": "Sidjen",
-       "statistics-pages-desc": "Aal a sidjen uun det wiki, mä diskusjuunssidjen, widjerfeerangen asw.",
+       "statistics-pages-desc": "Aal a sidjen uun det wiki, mä diskuschuunsidjen, widjerfeerangen ...",
        "statistics-files": "Huuchschüürd datein",
        "statistics-edits": "Feranrangen, sant {{SITENAME}} maaget wurden as",
        "statistics-edits-average": "Feranrangen per sidj uun't madel",
        "unusedimages": "Datein, diar ei brükt wurd",
        "wantedcategories": "Kategoriin, diar brükt wurd",
        "wantedpages": "Sidjen, diar brükt wurd",
-       "wantedpages-summary": "List faan sidjen, diar't goorei jaft, mä a miast ferwisangen, oober saner sidjen, huar bluas üüb ferwiset woort. För en list faan sidjen, diar't goorei jaft, oober mä ferwisangen luke bi [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "List faan sidjen, diar't goorei jaft, mä a miast ferwisangen, oober saner sidjen, huar bluas üüb ferwiset woort. För en list faan sidjen, diar't goorei jaft, oober mä ferwisangen luke bi [[{{#special:BrokenRedirects}}|uunstaken ferwisangen]].",
        "wantedpages-badtitle": "Diar as en artiikelnööm ei tuläät uun: $1",
        "wantedfiles": "Datein, diar brükt wurd",
        "wantedfiletext-cat": "Jodiar datein wurd brükt, oober san ei diar. Datein faan ööder archiiwen wurd apfeerd, san oober <del>trochstregen</del>. An jo sidjen, diar sok datein brük, stun uun  [[:$1]].",
        "logempty": "Diar as niks uun.",
        "log-title-wildcard": "Sidjennööm begant mä ...",
        "showhideselectedlogentries": "Wise/fersteeg jodiar logbukiindracher",
+       "log-edit-tags": "Markiarangen faan enkelt logbuk-iindracher bewerke",
        "allpages": "Aal a sidjen",
        "nextpage": "Naist sidj ($1)",
        "prevpage": "Leetst sidj ($1)",
        "linksearch-pat": "Schükmünster:",
        "linksearch-ns": "Nöömrüm:",
        "linksearch-ok": "Schük",
-       "linksearch-text": "Diar kön wariaabeln üs t.b. \"*.bispal.de\" brükt wurd. Tumanst ian TLD üs t.b. \"*.org\" skal uunden wurd.<br />{{PLURAL:$2|Protokol|Protokolen}}: <code>$1</code> (Diar woort http nimen, wan niks ööders uunden as.)",
+       "linksearch-text": "Diar kön wariaabeln üs t.b. \"*.bispal.de\" brükt wurd. Tumanst ian TLD üs t.b. \"*.org\" skal uunden wurd.<br />{{PLURAL:$2|Protokol|Protokolen}}: $1 (Diar woort http nimen, wan niks ööders uunden as.)",
        "linksearch-line": "$2 ferwiset üüb $1",
        "linksearch-error": "Wariaabeln (\"*\") mut bluas bi a began faan en URL uunden wurd.",
        "listusersfrom": "Wise brükern mä began üüb:",
        "emailuser": "E-mail tu didiar brüker",
        "emailuser-title-target": "E-mail tu {{GENDER:$1|didiar brüker|detdiar brükerin}} schüür",
        "emailuser-title-notarget": "E-mail tu brüker",
-       "emailpage": "E-mail tu brüker",
        "emailpagetext": "Dü könst {{GENDER:$1|di brüker|det brükerin}} mä det formulaar en e-mail schüür.\nDin aanj e-mail adres faan din [[Special:Preferences|iinstelangen]] woort uunwiset, so dat {{GENDER:$1|di brüker|det brükerin}} di saner amwai swaare koon.",
        "defemailsubject": "{{SITENAME}} e-mail faan brüker „$1“",
        "usermaildisabled": "E-mail fun as ei aktiif",
        "emailccme": "Schüür mi en kopii faan det e-mail.",
        "emailccsubject": "Kopii faan din mädialang tu $1: $2",
        "emailsent": "E-mail as wechschüürd wurden",
-       "emailsenttext": "Din e-mail as wechsjüürd wurden.",
-       "emailuserfooter": "Detdiar e-mail as faan „$1“ tu „$2“ auer det funktjuun „{{int:emailpage}}“ bi {{SITENAME}} schüürd wurden.",
+       "emailsenttext": "Din e-mail as wechschüürd wurden.",
+       "emailuserfooter": "Detdiar e-mail as faan „$1“ tu „$2“ auer det funktjuun „{{int:emailuser}}“ bi {{SITENAME}} schüürd wurden.",
        "usermessage-summary": "Süsteemnooracht seekert.",
        "usermessage-editor": "Süsteemnoorachten siinst",
        "watchlist": "Uun't uug behual",
        "watchlistanontext": "Dü skel di uunmelde, am iindracher tu leesen of tu bewerkin, diar dü uun't uug behual wel.",
        "watchnologin": "Ei uunmeldet",
        "addwatch": "Uk uun't uug behual",
-       "addedwatchtext": "Det sidj „[[:$1]]“ wel dü [[Special:Watchlist|uun't uug behual]].\nFeranrangen faan detdiar sidj wurd üüb detdiar list fäästhäälen.",
+       "addedwatchtext": "Det sidj „[[:$1]]“ an det ferbünjen diskuschuunssidj könst dü nü [[Special:Watchlist|uun't uug behual]].",
        "addedwatchtext-short": "Det sidj „$1“ kaam tu din sidjen, diar dü uun't uug behual wel.",
        "removewatch": "Ei muar uun't uug behual",
-       "removedwatchtext": "Det sidj „[[:$1]]“ as faan a sidjen, diar dü [[Special:Watchlist|uun't uug behual]] wel, wechnimen wurden.",
+       "removedwatchtext": "Det sidj „[[:$1]]“ an det ferbünjen diskuschuunssidj san faan a sidjen, diar dü [[Special:Watchlist|uun't uug behual]] wel, wechnimen wurden.",
        "removedwatchtext-short": "Det sidj „$1“ woort ei muar faan di uun't uug behäälen.",
        "watch": "Uun't uug behual",
        "watchthispage": "Detdiar sidj uun't uug behual",
        "rollback-success": "Feranrangen faan $1 turagsaat an det leetst werjuun faan $2 weder iinsteld.",
        "sessionfailure-title": "session feeler",
        "sessionfailure": "Diar as wat skiaf gingen bi't auerdreegen faan din brükerdooten.\nAm dat diar ei noch muar skiaf gongt, as det aktjuun ufbreegen wurden.\nGung turag, an began faan föören.",
+       "changecontentmodel": "Det muude faan det sidj feranre",
+       "changecontentmodel-legend": "Det muude feranre",
+       "changecontentmodel-title-label": "Sidjennööm",
+       "changecontentmodel-model-label": "Nei muude",
+       "changecontentmodel-reason-label": "Grünj:",
+       "changecontentmodel-success-title": "Det muude as feranert wurden",
+       "changecontentmodel-success-text": "Det muude faan [[:$1]] as feranert wurden.",
+       "changecontentmodel-cannot-convert": "Det muude faan [[:$1]] koon ei tu typ $2 feranert wurd.",
+       "changecontentmodel-nodirectediting": "Uun det $1 muude könst dü ei direkt bewerke",
+       "log-name-contentmodel": "Muude-feranrang-logbuk",
+       "log-description-contentmodel": "Föörkemen am det sidjenmuude",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|hää}} det muude faan sidj $3 faan „$4“ efter „$5“ feranert.",
+       "logentry-contentmodel-change-revertlink": "turagsaat",
+       "logentry-contentmodel-change-revert": "turagsaat",
        "protectlogpage": "Sidjenseekerangs-logbuk",
        "protectlogtext": "Detheer as det logbuk mä seekert sidjen.\nÜüb [[Special:ProtectedPages|detdiar list]] stun a seekert sidjen.",
        "protectedarticle": "hää „[[$1]]“ seekert.",
        "undeletepagetext": "{{PLURAL:$1|Detdiar sidj as stregen wurden, oober koon|Jodiar $1 sidjen san stregen wurden, oober kön}} faan administratooren weder iinsteld wurd, wan jo noch uun't archiif san.",
        "undelete-fieldset-title": "Weder iinstel",
        "undeleteextrahelp": "* Am det sidj mä aal jo werjuunen weder iintustelen, schük nian enkelt werjuun ütj, du en grünj uun an trak do üüb „{{int:undeletebtn}}“.*\n* Am en was werjuun weder iintustelen, schük det werjuun ütj, du en grünj uun an trak do üüb „{{int:undeletebtn}}“.",
-       "undeleterevisions": "{{PLURAL:$1|1 werjuun|$1 werjuunen}} archiwiaret",
+       "undeleterevisions": "{{PLURAL:$1|ian werjuun|$1 werjuunen}} stregen",
        "undeletehistory": "Wan dü detdiar sidj weder iinstelst, wurd uk jo ual werjuunen weder iinsteld. \nWan sant det striken en nei sidj mä di salew nööm iinsteld wurden as, wurd jo ual werjuunen bi det nei sidj mä iinwerket.",
        "undeleterevdel": "Det woort ei weder iinsteld, wan det leetst werjuun ferbürgen as.\nWan det so as, skal det leetst werjuun iarst weder üüb normool steld wurd.",
        "undeletehistorynoadmin": "Detdiar sidj as stregen wurden.\nOner könst dü sä, hoker det maaget hää an huaram.\nDi tekst faan det stregen sidj fu bluas administratooren uunwiset.",
        "move-page-legend": "Sidj fersküüw",
        "movepagetext": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjerfeer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
        "movepagetext-noredirectfixer": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjer feer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
-       "movepagetalktext": "Uk det diskusjuunssidj woort fersköwen, wan det diar as, '''oober ei, wan:'''\n*Diar al en diskusjuunssidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskusjuunssidjen faan hun tuupfeer.\n\nDreeg di '''nei''' tiitel bi '''ööder sidj''' iin, an diaroner '''en grünj''' för't amnäämen.",
+       "movepagetalktext": "Uk det diskuschuunsidj woort fersköwen, wan det diar as, <strong>oober ei, wan:</strong>\n*Diar al en diskuschuunsidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskuschuunsidjen faan hun tuupfeer.",
        "movearticle": "Sidj fersküüw:",
        "moveuserpage-warning": "'''Paase üüb:''' Dü wel en brükersidj fersküüw. Seenk diaram, dat bluas det brükersidj amnäämd woort, oober '''ei''' di brüker. Hi behäält san ual nööm.",
        "movecategorypage-warning": "<strong>Paase üüb:</strong> Dü wel jüst en kategoriisidj fersküüw. Seenk diaram, dat bluas det sidj fersköwen woort. A sidjen uun det kategorii wurd <em>ei</em> nei kategorisiaret.",
        "newtitle": "Müülj:",
        "move-watch": "Jodiar sidjen uun't uug behual",
        "movepagebtn": "Sidj fersküüw",
-       "pagemovedsub": "Ferschüwing luket",
+       "pagemovedsub": "Fersküüwen hää loket",
        "movepage-moved": "'''Det sidj „$1“ as efter „$2“ fersköwen wurden.'''",
        "movepage-moved-redirect": "En widjerfeerang as iinracht wurden.",
        "movepage-moved-noredirect": "Det maagin faan en widjerfeerang as ferhanert wurden.",
        "import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
        "import-interwiki-templates": "Mä aal a föörlaagen",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Tu normool seekerangsteeden importiare",
+       "import-mapping-namespace": "Tu en nöömrüm importiare:",
+       "import-mapping-subpage": "Üs onersidjen faan detdiar sidj importiare:",
        "import-upload-filename": "Dateinööm:",
        "import-comment": "Komentaar:",
        "importtext": "Wees so gud an eksportiare det datei mä det spezial-sidj [[Special:Export|Eksport]] ütj det ööder Wiki. Det seekerst dü üüb dan reegner an schüürst det do heer huuch.",
        "spam_reverting": "Leetst werjuun saner ferwisangen tu $1 weder iinsteld.",
        "spam_blanking": "Aal a werjuunen mä en ferwisang tu $1 san apklaaret wurden.",
        "spam_deleting": "Aal a werjuunen mä en ferwisung tu $1 san stregen wurden.",
-       "simpleantispam-label": "Anti-spam preew.\nHeer '''NIKS''' iindreeg!",
+       "simpleantispam-label": "Anti-spam preew.\nHeer <strong>NIKS</strong> iindreeg!",
        "pageinfo-title": "Informatjuun tu „$1“",
        "pageinfo-not-current": "Det informatjuun jaft at ei för ual werjuunen.",
        "pageinfo-header-basic": "Grünjdooten",
        "pageinfo-robot-index": "Tuläät",
        "pageinfo-robot-noindex": "Ei tuläät",
        "pageinfo-watchers": "Taal faan brükern, diar det sidj uun't uug haa",
+       "pageinfo-visiting-watchers": "Taal faan beschükern, diar a leetst feranrangen beluket haa",
        "pageinfo-few-watchers": "Maner üs {{PLURAL:$1|ään brüker|$1 brükern}}, diar det sidj uun't uug haa",
+       "pageinfo-few-visiting-watchers": "At as ei seeker, wäär diar en beschüker a leetst feranrangen besoocht hää",
        "pageinfo-redirects-name": "Taal faan widjerfeerangen tu detdiar sidj",
        "pageinfo-subpages-name": "Onersidjen faan detdiar sidj",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|widjerfeerang|widjerfeerangen}}; $3 {{PLURAL:$3|onersidj|onersidjen}})",
        "pageinfo-protect-cascading-yes": "Ja",
        "pageinfo-protect-cascading-from": "Sidjen mä kaskaadenseekerhaid faan",
        "pageinfo-category-info": "Kategorii-informatjuun",
+       "pageinfo-category-total": "Taal faan lasmooten",
        "pageinfo-category-pages": "Taal faan sidjen",
        "pageinfo-category-subcats": "Taal faan onerkategoriin",
        "pageinfo-category-files": "Taal faan datein",
        "patrol-log-page": "Kontrol-logbuk",
        "patrol-log-header": "Det as det kontrol-logbuk.",
        "log-show-hide-patrol": "Kontrol-logbuk $1",
+       "log-show-hide-tag": "Markiarang-logbuk $1",
        "deletedrevision": "Ual werjuun $1 stregen",
        "filedeleteerror-short": "Bi't striken faan det datei $1 as wat skiaf gingen.",
        "filedeleteerror-long": "Bi't striken faan det datei as wat skiaf gingen:\n\n$1",
        "version-libraries": "Instaliaret bibleteeken",
        "version-libraries-library": "Bibleteek",
        "version-libraries-version": "Werjuun",
+       "version-libraries-license": "Lisens",
+       "version-libraries-description": "Beskriiwang",
+       "version-libraries-authors": "Skriiwern",
        "redirect": "Widjerfeerang faan en brüker, en sidj, en sidjenwerjuun of en datei.",
        "redirect-legend": "Widjerfeerang üüb en sidjenwerjuun of datei.",
        "redirect-summary": "Detdiar spezial-sidj feert widjer üüb en brükersidj, sidj, sidjenwerjuun of datei.\nAn det woort so brükt:  [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/file/Example.jpg]].",
        "tags-deactivate-reason": "Grünj:",
        "tags-deactivate-not-allowed": "Dü könst det markiarang \"$1\" ei de-aktiwiare.",
        "tags-deactivate-submit": "De-aktiwiare",
+       "tags-edit-title": "Markiarangen bewerke",
+       "tags-edit-manage-link": "Markiarangen ferwalte",
+       "tags-edit-existing-tags": "Markiarangen:",
+       "tags-edit-existing-tags-none": "\"Nianen\"",
+       "tags-edit-new-tags": "Nei markiarangen:",
+       "tags-edit-add": "Jodiar markiarangen diartusaat:",
+       "tags-edit-remove": "Jodiar markiarangen wechnem:",
+       "tags-edit-remove-all-tags": "(aal a markiarangen wechnem)",
+       "tags-edit-chosen-placeholder": "Enkelt markiarangen ütjschük",
+       "tags-edit-chosen-no-results": "Sok markiarangen ei fünjen",
+       "tags-edit-reason": "Grünj:",
+       "tags-edit-nooldid-title": "Nian werjuun uunden",
        "comparepages": "Sidjen ferglik",
        "compare-page1": "Sidj 1",
        "compare-page2": "Sidj 2",
        "htmlform-cloner-create": "Muar diartudu",
        "htmlform-cloner-delete": "Wechnem",
        "htmlform-cloner-required": "Dü skel tumanst ään wäärs uundu.",
+       "htmlform-title-not-exists": "[[:$1]] jaft at ei.",
+       "htmlform-user-not-exists": "<strong>$1</strong> jaft at ei.",
+       "htmlform-user-not-valid": "<strong>$1</strong> as nään tuläät brükernööm",
        "sqlite-has-fts": "Werjuun $1 mä halep för't schüken uun di hialer tekst.",
        "sqlite-no-fts": "Werjuun $1 saner halep för't schüken uun di hialer tekst.",
        "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen",
        "logentry-managetags-delete": "$1 {{GENDER:$2|hää}} det markiarang „$4“ stregen (faan {{PLURAL:$5|ian werjuun of ään logbuk-iindrach|$5 werjuunen an/of logbuk-iindracher}} wechnimen).",
        "logentry-managetags-activate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots iinracht.",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|hää}} det markiarang \"$4\" för't bewerkin faan brükern of bots de-aktiwiaret.",
+       "log-name-tag": "Markiarang-logbuk",
        "rightsnone": "(-)",
        "revdelete-summary": "tuhuupefootings-komäntoor",
        "feedback-adding": "Komentaar woort tu det sidj skrewen ...",
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
-       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar {{PLURAL:$4|skak|skaker}}. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am {{PLURAL:$4|di skak|a skaker}} tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst jodiar räen uun det datei <code>LocalSettings.php</code> iinsaat, am aal a instaliaret skaker tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
+       "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar {{PLURAL:$4|skak|skaker}}. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am {{PLURAL:$4|di skak|a skaker}} tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst {{PLURAL:$5|detdiar rä|jodiar räen}} uun det datei <code>LocalSettings.php</code> iinsaat, am {{PLURAL:$5|di|aal a}} instaliaret {{PLURAL:$5|skak|skaker}} tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
        "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ufsteld''')",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "seenkstreg",
        "special-characters-title-emdash": "speegelstreg",
-       "special-characters-title-minus": "minus tiaken"
+       "special-characters-title-minus": "minus tiaken",
+       "mw-widgets-dateinput-no-date": "Nian dootem ütjsoocht",
+       "mw-widgets-titleinput-description-new-page": "sidj jaft at noch ei",
+       "mw-widgets-titleinput-description-redirect": "widjerfeerang tu $1"
 }
index 3a5af21..be4fc89 100644 (file)
        "resetpass-wrong-oldpass": "It momintele of tydlike wachtwurd is ûnjildich.\nMûglik hawwe Jo Jo wachtwurd al feroare of in nij tydlik wachtwurd oanfrege.",
        "resetpass-temp-password": "Tydlik wachtwurd:",
        "passwordreset": "Wachtwurd ferfarskje",
-       "passwordreset-legend": "Wachtwurd weromsette",
        "passwordreset-username": "Brûkersnamme:",
        "passwordreset-domain": "Domein:",
        "passwordreset-email": "E-mailadres:",
        "changeemail-password": "Jo wachtwurd foar {{SITENAME}}:",
        "changeemail-submit": "E-mailadres wizigje",
        "resettokens": "Kaaien ferfarskje",
-       "resettokens-legend": "Kaaien ferfarskje",
        "resettokens-tokens": "Kaaien:",
        "resettokens-token-label": "$1 (hjoeddeistige wearde: $2)",
        "resettokens-resetbutton": "Selektearre kaaien ferfarskje",
        "upload-file-error-text": "Der wie in ynterne fout doe't in tydlike triem op'e server oanmakke waard.\nNim kontakt op mei in [[Special:ListUsers/sysop|behearder]].",
        "upload-misc-error": "Unbekende oanbiedflater",
        "upload-misc-error-text": "Der is by it oanbieden in ûnbekende fout optreden.\nKontrolearje of de URL krekt en beskikber is en besykje it nochris.\nAs it probleem oanhâldt, nim dan kontakt op mei in\n[[Special:ListUsers/sysop|behearder]].",
+       "upload-dialog-button-done": "Klear",
        "http-read-error": "HTTP-lêsflater.",
        "upload-curl-error6": "Koe de URL net berikke",
        "upload-curl-error6-text": "De opjûne URL is net berikber.\nKontrolearje oft de URL krekt is en oft de webside beskikber is.",
        "nlinks": "$1 {{PLURAL:$1|keppeling|keppelings}}",
        "nmembers": "$1 {{PLURAL:$1|lid|lea}}",
        "nrevisions": "$1 {{PLURAL:$1|ferzje|ferzjes}}",
-       "nviews": "{{PLURAL:$1|1 kear|$1 kear}} sjoen",
        "specialpage-empty": "Gjin resultaten foar dit rapport.",
        "lonelypages": "Lossteande siden",
        "lonelypagestext": "Nei de ûndersteande siden wurdt út {{SITENAME}} wei net ferwiisd.\nDe siden binne ek net as sjabloan opnommen.",
        "linksearch-pat": "Sykpatroan:",
        "linksearch-ns": "Nammeromte:",
        "linksearch-ok": "Sykje",
-       "linksearch-text": "Wildcards lykas \"*.wikipedia.org\" of \"*.org\" binne tastien.<br />\nStipe protokollen: <code>$1</code>",
+       "linksearch-text": "Wildcards lykas \"*.wikipedia.org\" of \"*.org\" binne tastien.<br />\nStipe protokollen: $1",
        "linksearch-line": "$1 hat in ferwizing yn $2",
        "linksearch-error": "Wildcards binne allinne tastien oan it begjin fan in hostnamme.",
        "listusersfrom": "Lit meidoggers sjen fanôf:",
        "mailnologintext": "Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.",
        "emailuser": "E-mail meidogger",
        "emailuser-title-notarget": "E-mail nei meidogger",
-       "emailpage": "E-mail nei meidogger",
        "emailpagetext": "Fia dit berjocht kinne jo in e-mail oan dizze brûker ferstjoere.\nIt e-mailadres dat jo opjûn hawwe by [[Special:Preferences|jo foarkarren]] wurdt as ôfstjoerder  brûkt.\nDe ûntfanger kin dus daliks nei jo reagearje.",
        "defemailsubject": "E-mail fan {{SITENAME}}-brûker \"$1\"",
        "noemailtitle": "Gjin e-postadres",
index f498545..eeecb07 100644 (file)
@@ -17,7 +17,8 @@
                        "Urhixidur",
                        "לערי ריינהארט",
                        "පසිඳු කාවින්ද",
-                       "아라"
+                       "아라",
+                       "SeoMac"
                ]
        },
        "tog-underline": "Folínte faoi naisc:",
        "userinvalidcssjstitle": "'''Rabhadh:''' Níl an craiceann \"$1\" ann.\nCuimhnigh go n-úsáideann leathanaigh shaincheaptha .css agus .js teideal i gcás íochtar, m.sh. {{ns:user}}:Foo/vector.css i leapa {{ns:user}}:Foo/Vector.css.",
        "updated": "(Leasaithe)",
        "note": "'''Tabhair faoi deara:'''",
-       "previewnote": "'''Cuimhnigh nach bhfuil ach réamhamharc sa leathanach seo.'''\nNíl do chuid athruithe shábháilte fós!",
+       "previewnote": "'''Cuimhnigh nach bhfuil ach réamhamharc sa leathanach seo.'''\nNíl do chuid athruithe sábháilte fós!",
        "previewconflict": "San réamhamharc seo, feachann tú an téacs dé réir an eagarbhosca\nthuas mar a taispeáinfear é má sábháilfear é.",
        "editing": "Ag athrú $1",
        "editingsection": "Ag athrú $1 (mir)",
        "unusedtemplateswlh": "naisc eile",
        "randompage": "Leathanach fánach",
        "randompage-nopages": "Níl aon leathanaigh san ainmspás \"$1\".",
+       "randomincategory-submit": "Gabh",
        "randomredirect": "Atreorú randamach",
        "statistics": "Staidrimh",
        "statistics-header-users": "Staidreamh úsáideora",
        "nlinks": "{{PLURAL:$1|nasc amháin|$1 naisc}}",
        "nmembers": "{{PLURAL:$1|ball amháin|$1 baill}}",
        "nrevisions": "{{PLURAL:$1|Leagan amháin|$1 leagain}}",
-       "nviews": "{{PLURAL:$1|radharc amháin|$1 radhairc}}",
        "lonelypages": "Leathanaigh aonair",
        "uncategorizedpages": "Leathanaigh gan chatagóir",
        "uncategorizedcategories": "Catagóirí gan chatagórú",
        "mailnologin": "Níl aon seoladh maith ann",
        "mailnologintext": "Ní mór duit bheith  [[Special:UserLogin|logáilte isteach]]\nagus bheith le seoladh ríomhphoist bhailí i do chuid [[Special:Preferences|sainroghanna]]\nmás mian leat ríomhphost a sheoladh chuig úsáideoirí eile.",
        "emailuser": "Cuir ríomhphost chuig an úsáideoir seo",
-       "emailpage": "Seol ríomhphost",
        "emailpagetext": "Má d'iontráil an úsáideoir seo seoladh ríomhphoist bhailí ina chuid sainroghanna úsáideora, cuirfidh an foirm anseo thíos teachtaireacht amháin do.\nBeidh do seoladh ríomhphoist a d'iontráil tú i [[Special:Preferences|do chuid sainroghanna úsáideora]] sa bhosca \"Seoltóir\" an riomhphoist, agus mar sin ba féidir léis an faighteoir ríomhphost eile a chur leatsa.",
        "defemailsubject": "Ríomhphost {{GRAMMAR:genitive|{{SITENAME}}}}",
        "noemailtitle": "Níl aon seoladh ríomhphoist ann",
index e82593c..fe95271 100644 (file)
        "passwordreset": "Ath-shuidhich am facal-faire",
        "passwordreset-text-one": "Lìon am foirm seo gus am facal-faire agad ath-shuidheachadh.",
        "passwordreset-text-many": "Lìon {{PLURAL:$1|an raon|aon dhe na raointean}} gus facal-faire sealach fhaighinn air a' phost-d.",
-       "passwordreset-legend": "Ath-shuidhich am facal-faire",
        "passwordreset-disabled": "Chaidh ath-shuidheachadh nam faclan-faire a chur à comas air an uicidh seo.",
        "passwordreset-emaildisabled": "Chaidh feartan a' phuist-d a chur à comas san uicidh seo.",
        "passwordreset-username": "Ainm-cleachdaiche:",
        "resettokens": "Ath-shuidhich na tòcanan",
        "resettokens-text": "'S urrainn dhut tòcanan ath-shuidheachadh a bheir cothrom dhut air cuid a dhàta prìobhaideach a tha co-cheangailte ris a' chunntas agad.\n\nBu chòir dhut seo a dhèanamh ma thug thu do chuideigin e air mhearachd no ma bhris cuideigin a-steach air a' chunntas agad.",
        "resettokens-no-tokens": "Chan eil tòcan ann a ghabhas ath-shuidheachadh.",
-       "resettokens-legend": "Ath-shuidhich na tòcanan",
        "resettokens-tokens": "Tòcanan:",
        "resettokens-token-label": "$1 ('s e $2 an luach làithreach)",
        "resettokens-watchlist-token": "Tòcan airson an inbhir-lìn (Atom/RSS) a sheallas dhut [[Special:Watchlist|atharraichean air duilleagan a tha air a' chlàr-fhaire agad]]",
        "nmembers": "$1 {{PLURAL:$1|bhall|bhall|buill|ball}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|bhall|bhall|buill|ball}}",
        "nrevisions": "$1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}}",
-       "nviews": "$1 {{PLURAL:$1|sealladh|shealladh|seallaidhean|sealladh}}",
        "nimagelinks": "'Ga chleachdadh air $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}",
        "ntransclusions": "'ga chleachdadh air $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}}",
        "specialpage-empty": "Chan eil toradh ann airson na h-aithris seo.",
        "linksearch-pat": "Pàtran an luirg:",
        "linksearch-ns": "Ainm-spàs:",
        "linksearch-ok": "Lorg",
-       "linksearch-text": "'S urrainn dhut saoragan mar \"*.wikipedia.org\" a chleachdadh.\nBidh feum air air co-dhiù aon àrainn aig ìre as àirde, can \"*.org\".<br />\n{{PLURAL:$2|pròtacal|pròtacalan}} ris an cuirear taic: <code>$1</code> (http:// a ghnáth mur dèid pròtacal a shònrachadh).",
+       "linksearch-text": "'S urrainn dhut saoragan mar \"*.wikipedia.org\" a chleachdadh.\nBidh feum air air co-dhiù aon àrainn aig ìre as àirde, can \"*.org\".<br />\n{{PLURAL:$2|pròtacal|pròtacalan}} ris an cuirear taic: $1 (http:// a ghnáth mur dèid pròtacal a shònrachadh).",
        "linksearch-line": "Tha $1 a' ceangal an-seo o $2",
        "linksearch-error": "Chan fhaod saorag nochdadh ach aig toiseach ainm an òstair.",
        "listusersfrom": "Seall cleachdaichean o seo a-mach:",
        "tooltip-pt-logout": "Log a-mach",
        "tooltip-pt-createaccount": "Ged nach eil e riatanach, tha e nas fhearr ma chruthaicheas tu cunntas agus ma logas tu air.",
        "tooltip-ca-talk": "Deasbad mu dhuilleag na susbainte",
-       "tooltip-ca-edit": "'S urrainn dhut an duilleag seo a dheasachadh. Saoil an cleachd thu an ro-shealladh mus sàbhail thu?",
+       "tooltip-ca-edit": "Deasaich an duilleag seo",
        "tooltip-ca-addsection": "Tòisich air earrann ùr",
        "tooltip-ca-viewsource": "Tha an duilleag seo fo dhìon.\n'S urrainn dhut a tùs fhaicinn",
        "tooltip-ca-history": "Seann mhùthaidhean na duilleige seo",
index 7e1e4d4..ae7f1c9 100644 (file)
        "actionthrottled": "Acción limitada",
        "actionthrottledtext": "Como unha medida de loita contra o ''spam'', limítase a realización desta acción a un número determinado de veces nun curto espazo de tempo, e vostede superou este límite.\nInténteo de novo nuns minutos.",
        "protectedpagetext": "Esta páxina foi protexida para evitar a edición e outras accións.",
-       "viewsourcetext": "Pode ver e copiar o código fonte desta páxina:",
-       "viewyourtext": "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
+       "viewsourcetext": "Pode ver e copiar o código fonte desta páxina.",
+       "viewyourtext": "Pode ver e copiar o código fonte <strong>das súas edicións</strong> nesta páxina.",
        "protectedinterface": "Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
        "editinginterface": "<strong>Aviso:</strong> Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios feitos nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.",
        "translateinterface": "Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Special:MainPage?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
-       "cascadeprotected": "Esta páxina foi protexida fronte á edición debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a \"protección en serie\" activada:\n$2",
+       "cascadeprotected": "Esta páxina foi protexida fronte á edición debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a \"protección en serie\" activada:\n$2",
        "namespaceprotected": "Non ten os permisos necesarios para modificar páxinas no espazo de nomes '''$1'''.",
        "customcssprotected": "Non ten os permisos necesarios para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.",
        "customjsprotected": "Non ten os permisos necesarios para modificar esta páxina de JavaScript, dado que contén a configuración persoal doutro usuario.",
        "createacct-benefit-body2": "{{PLURAL:$1|páxina|páxinas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador recente|colaboradores recentes}}",
        "badretype": "Os contrasinais que inseriu non coinciden.",
+       "usernameinprogress": "Xa está en marcha a creación dunha conta para este nome de usuario.\nPor favor, agarde.",
        "userexists": "O nome de usuario que inseriu xa está en uso.\nEscolla un nome diferente.",
        "loginerror": "Erro ao acceder ao sistema",
        "createacct-error": "Erro ao crear a conta",
        "blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
        "clearyourcache": "'''Nota:''' Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* '''Firefox/Safari:''' Prema ''Maiúsculas'' á vez que en ''Recargar'', ou prema en ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' nos Mac)\n* '''Google Chrome:''' Prema en ''Ctrl-Maiús-R'' (''⌘-Maiús-R'' nos Mac)\n* '''Internet Explorer:''' Prema ''Ctrl'' ao tempo que fai clic en ''Refrescar'', ou prema en ''Ctrl-F5''\n* '''Opera:''' Limpe a súa memoria caché en ''Ferramentas → Preferencias''",
        "usercssyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo CSS antes de gardalo.",
-       "userjsyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo JS antes de gardalo.",
+       "userjsyoucanpreview": "<strong>Nota:</strong> Use o botón \"{{int:showpreview}}\" para verificar o novo JavaScript antes de gardalo.",
        "usercsspreview": "'''Lembre que só está vendo a vista previa do seu CSS de usuario.'''\n'''Este aínda non foi gardado!'''",
        "userjspreview": "'''Lembre que só está probando/previsualizando o seu JavaScript de usuario.'''\n'''Este aínda non foi gardado!'''",
        "sitecsspreview": "'''Lembre que só está vendo a vista previa deste CSS.'''\n'''Este aínda non foi gardado!'''",
        "sitejspreview": "'''Lembre que só está vendo a vista previa deste código JavaScript.'''\n'''Este aínda non foi gardado!'''",
-       "userinvalidcssjstitle": "'''Aviso:''' Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Foo/vector.css\" no canto de \"{{ns:user}}:Foo/Vector.css\".",
+       "userinvalidcssjstitle": "<strong>Aviso:</strong> Non hai ningunha aparencia chamada \"$1\".\nLembre que as páxinas .css e .js personalizadas utilizan un título en minúsculas, como por exemplo \"{{ns:user}}:Exemplo/vector.css\" no canto de \"{{ns:user}}:Exemplo/Vector.css\".",
        "updated": "(Actualizado)",
        "note": "'''Nota:'''",
        "previewnote": "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''",
        "readonlywarning": "'''Atención: A base de datos foi pechada para facer mantemento, polo que non vai poder gardar as súas edicións polo de agora.'''\nSe cadra, pode cortar e pegar o texto nun ficheiro de texto e gardalo para despois.\n\nO administrador que a pechou deu esta explicación: $1",
        "protectedpagewarning": "'''Aviso: Esta páxina foi protexida de xeito que só os usuarios con privilexios de administrador a poidan editar.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "semiprotectedpagewarning": "'''Nota:''' Esta páxina foi protexida de xeito que só os usuarios rexistrados a poidan editar.\nVelaquí está a última entrada no rexistro, por se quere consultala:",
-       "cascadeprotectedwarning": "'''Aviso:''' Esta páxina foi protexida de xeito que só a poden editar os usuarios con privilexios de administrador debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
+       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta páxina foi protexida de xeito que só a poden editar os usuarios con privilexios de administrador debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
        "titleprotectedwarning": "'''Aviso: Esta páxina foi protexida de xeito que [[Special:ListGroupRights|só algúns usuarios]] a poidan crear.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "templatesused": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta páxina:",
        "templatesusedpreview": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta vista previa:",
        "search-category": "(categoría $1)",
        "search-file-match": "(coincide co contido do ficheiro)",
        "search-suggest": "Quizais quixo dicir: $1",
+       "search-rewritten": "Móstranse os resultados para \"$1\". Buscar no seu lugar \"$2\".",
        "search-interwiki-caption": "Proxectos irmáns",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(máis)",
        "rows": "Filas:",
        "columns": "Columnas:",
        "searchresultshead": "Procurar",
-       "stub-threshold": "Límite superior para o formato de <a href=\"#\" class=\"stub\">ligazóns de bosquexo</a> (bytes):",
+       "stub-threshold": "Límite superior para o formato de ligazóns de bosquexo($1):",
+       "stub-threshold-sample-link": "exemplo",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Número de días a mostrar nos cambios recentes:",
        "recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|día|días}}",
        "default": "predeterminado",
        "prefs-files": "Ficheiros",
        "prefs-custom-css": "CSS personalizado",
-       "prefs-custom-js": "JS personalizado",
-       "prefs-common-css-js": "CSS/JS compartido por todas as aparencias:",
+       "prefs-custom-js": "JavaScript personalizado",
+       "prefs-common-css-js": "CSS/JavaScript compartido por todas as aparencias:",
        "prefs-reset-intro": "Pode usar esta páxina para restablecer as súas preferencias ás que veñen dadas por defecto.\nEste cambio non se poderá desfacer.",
        "prefs-emailconfirm-label": "Confirmación do correo:",
        "youremail": "Correo electrónico:",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuario|usuarios}} vixiando]",
-       "rc_categories": "Límite para categorías (separado con \"|\")",
-       "rc_categories_any": "Calquera",
+       "rc_categories": "Limitar ás categorías (separadas por \"|\"):",
+       "rc_categories_any": "Calquera das elixidas",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} despois da modificación",
        "newsectionsummary": "Nova sección: /* $1 */",
        "rc-enhanced-expand": "Mostrar os detalles",
        "upload-too-many-redirects": "O enderezo URL contiña moitas redireccións",
        "upload-http-error": "Produciuse un erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "A copia de cargas non está dispoñible neste dominio.",
+       "upload-dialog-title": "Subir un ficheiro",
+       "upload-dialog-error": "Houbo un erro",
+       "upload-dialog-warning": "Produciuse unha advertencia",
+       "upload-dialog-button-cancel": "Cancelar",
+       "upload-dialog-button-done": "Feito",
+       "upload-dialog-button-save": "Gardar",
+       "upload-dialog-button-upload": "Subir",
+       "upload-dialog-label-select-file": "Seleccionar un ficheiro",
+       "upload-dialog-label-infoform-title": "Detalles",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrición",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nome do ficheiro",
        "backend-fail-stream": "Non se puido transmitir o ficheiro \"$1\".",
        "backend-fail-backup": "Non se puido facer unha copia de seguridade do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro \"$1\" non existe.",
        "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados, neles tamén pode obter máis información sobre as obras que está a buscar:",
        "booksources-invalid-isbn": "O ISBN inserido parece non ser válido; comprobe que non haxa erros ao copialo da fonte orixinal.",
        "specialloguserlabel": "Executante:",
-       "speciallogtitlelabel": "Obxectivo (título ou usuario):",
+       "speciallogtitlelabel": "Obxectivo (título ou {{ns:user}}:nome de usuario):",
        "log": "Rexistros",
        "all-logs-page": "Todos os rexistros públicos",
        "alllogstext": "Vista combinada de todos os rexistros dipoñibles en {{SITENAME}}.\nPode precisar máis a vista seleccionando o tipo de rexistro, o nome do usuario ou o título da páxina afectada.",
        "linksearch-pat": "Patrón de procura:",
        "linksearch-ns": "Espazo de nomes:",
        "linksearch-ok": "Procurar",
-       "linksearch-text": "Pódense usar caracteres comodín como \"*.wikipedia.org\".\nCómpre, polo menos, un dominio de nivel superior; por exemplo, \"*.org\".<br />\n{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: <code>$1</code> (úsase http:// como predeterminado se non se especifica ningún protocolo).",
+       "linksearch-text": "Pódense usar caracteres comodín como \"*.wikipedia.org\".\nCómpre, polo menos, un dominio de nivel superior; por exemplo, \"*.org\".<br />\n{{PLURAL:$2|Protocolo soportado|Protocolos soportados}}: $1 (úsase http:// como predeterminado se non se especifica ningún protocolo).",
        "linksearch-line": "$1 está ligado desde a páxina \"$2\"",
        "linksearch-error": "Os caracteres comodín só poden aparecer ao principio do nome do servidor.",
        "listusersfrom": "Mostrar os usuarios que comecen por:",
        "noindex-category-desc": "A páxina non está indexada polos bots porque contén a palabra máxica <code><nowiki>__NOINDEX__</nowiki></code> e está nun espazo de nomes no que esa marca está permitida.",
        "index-category-desc": "A páxina contén a palabra máxica <code><nowiki>__INDEX__</nowiki></code> (e está nun espazo de nomes no que esa marca está permitida) e, polo tanto, será indexada polos bots cando non debera selo normalmente.",
        "post-expand-template-inclusion-category-desc": "O tamaño da páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir todos os modelos; algúns modelos non se expandiron.",
-       "post-expand-template-argument-category-desc": "A páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir o argumento dun modelo (algo entre chaves triples, como <code>{{{Proba}}}</code>).",
+       "post-expand-template-argument-category-desc": "A páxina é maior que <code>$wgMaxArticleSize</code> despois de expandir o argumento dun modelo (algo entre chaves triples, como <code>{{{Exemplo}}}</code>).",
        "expensive-parserfunction-category-desc": "A páxina utiliza demasiadas funcións analíticas custosas (como <code>#ifexist</code>). Consulte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "A páxina contén unha ligazón de ficheiro rota (unha ligazón para incorporar un ficheiro que non existe).",
        "hidden-category-category-desc": "A categoría contén a palabra máxica <code><nowiki>__HIDDENCAT__</nowiki></code>, que impide que se mostre por defecto na caixa de categorías das páxinas.",
        "emailuser": "Enviar un correo electrónico a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}",
        "emailuser-title-target": "Enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}",
        "emailuser-title-notarget": "Enviar un correo electrónico a un usuario",
-       "emailpage": "Enviar un correo electrónico a un usuario",
        "emailpagetext": "Pode usar o seguinte formulario para enviar unha mensaxe de correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.\nO enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas preferencias]] aparecerá no campo \"De:\" do correo, polo que {{GENDER:$1|o receptor|a receptora}} da mensaxe poderá responderlle directamente.",
        "defemailsubject": "Correo electrónico do usuario $1 de {{SITENAME}}",
        "usermaildisabled": "O correo electrónico do usuario está desactivado",
        "emailccsubject": "Copia da súa mensaxe para $1: $2",
        "emailsent": "Mensaxe enviada",
        "emailsenttext": "A súa mensaxe de correo electrónico foi enviada.",
-       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"{{int:emailpage}}\" en {{SITENAME}}.",
+       "emailuserfooter": "Este correo electrónico foi enviado por $1 a $2 mediante a función \"{{int:emailuser}}\" en {{SITENAME}}.",
        "usermessage-summary": "Mensaxe deixada polo sistema.",
        "usermessage-editor": "Editor das mensaxes do sistema",
        "watchlist": "Lista de vixilancia",
        "watchlistanontext": "Acceda ao sistema para ver ou editar os elementos da súa lista de vixilancia.",
        "watchnologin": "Non accedeu ao sistema",
        "addwatch": "Engadir á lista vixilancia",
-       "addedwatchtext": "A páxina \"[[:$1]]\" foi engadida á súa [[Special:Watchlist|lista de vixilancia]].\nOs cambios futuros nesta páxina e na súa páxina de conversa asociada serán listados alí.",
+       "addedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron engadidas á súa [[Special:Watchlist|lista de vixilancia]].",
        "addedwatchtext-short": "A páxina \"$1\" foi engadida á súa lista de vixilancia.",
        "removewatch": "Eliminar da lista de vixilancia",
-       "removedwatchtext": "A páxina \"[[:$1]]\" foi eliminada [[Special:Watchlist|da súa lista de vixilancia]].",
+       "removedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron eliminadas da súa [[Special:Watchlist|lista de vixilancia]].",
        "removedwatchtext-short": "A páxina \"$1\" foi eliminada da súa lista de vixilancia.",
        "watch": "Vixiar",
        "watchthispage": "Vixiar esta páxina",
        "changecontentmodel-success-title": "O modelo de contido foi modificado",
        "changecontentmodel-success-text": "O tipo de contido de [[:$1]] foi modificado.",
        "changecontentmodel-cannot-convert": "O contido en [[:$1]] non pode converterse ó tipo de $2.",
-       "changecontentmodel-title-cantexist": "Imposible ter unha páxina en $1.",
        "changecontentmodel-nodirectediting": "O modelo de contido $1 non permite a modificación directa",
        "log-name-contentmodel": "Rexistro de cambios de modelo de contido",
        "log-description-contentmodel": "Eventos relacinados cos modelos de contido dunha páxina",
        "protect-locked-blocked": "Non pode modificar os niveis de protección mentres exista un bloqueo. Velaquí a configuración actual da páxina  '''$1''':",
        "protect-locked-dblock": "Os niveis de protección non se poden modificar debido a un bloqueo da base de datos activa.\nVelaquí a configuración actual da páxina '''$1''':",
        "protect-locked-access": "A súa conta non dispón de permisos para mudar os niveis de protección.\nVelaquí a configuración actual da páxina '''$1''':",
-       "protect-cascadeon": "Esta páxina está protexida actualmente porque está incluída {{PLURAL:$1|na seguinte páxina, que foi protexida|nas seguintes páxinas, que foron protexidas}} coa opción \"protección en serie\" activada.\nOs cambios no nivel de protección desta páxina non afectarán á protección en serie.",
+       "protect-cascadeon": "Esta páxina está protexida actualmente porque está transcluída {{PLURAL:$1|na seguinte páxina, que foi protexida|nas seguintes páxinas, que foron protexidas}} coa opción \"protección en serie\" activada.\nOs cambios no nivel de protección desta páxina non afectarán á protección en serie.",
        "protect-default": "Permitir a todos os usuarios",
        "protect-fallback": "Permitir só aos usuarios con permisos de \"$1\"",
        "protect-level-autoconfirmed": "Permitir só aos usuarios autoconfirmados",
        "undeletepagetext": "{{PLURAL:$1|A seguinte páxina foi borrada|As seguintes páxinas foron borradas}}, pero aínda {{PLURAL:$1|está|están}} no arquivo e {{PLURAL:$1|pode|poden}} ser {{PLURAL:$1|restaurada|restauradas}}.\nO arquivo será limpado periodicamente.",
        "undelete-fieldset-title": "Restaurar as revisións",
        "undeleteextrahelp": "Para restaurar o historial dunha páxina ao completo, deixe todas as caixas sen marcar e prema en '''''{{int:undeletebtn}}'''''.\nPara realizar unha recuperación parcial, marque só aquelas caixas que correspondan ás revisións que se queiran recuperar e prema en '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revisión arquivada|revisións arquivadas}}",
+       "undeleterevisions": "{{PLURAL:$1|Borrouse $1 revisión|Borráronse $1 revisións}}",
        "undeletehistory": "Se restaura a páxina, todas as revisións van ser restauradas no historial.\nSe se creou unha páxina nova co mesmo nome desde o seu borrado, as revisións restauradas van aparecer no historial anterior.",
        "undeleterevdel": "Non se levará a cabo a reversión do borrado se ocasiona que a última revisión da páxina ou ficheiro se elimine parcialmente.\nNestes casos, debe retirar a selección ou quitar a ocultación das revisións borradas máis recentes.",
        "undeletehistorynoadmin": "Esta páxina foi borrada.\nO motivo do borrado consta no resumo que aparece a continuación, xunto cos detalles dos usuarios que editaron esta páxina antes da súa eliminación.\nO texto destas revisións eliminadas só está á disposición dos administradores.",
        "undeleteviewlink": "ver",
        "undeleteinvert": "Inverter a selección",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|revisión restaurada|revisións restauradas}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|revisión|revisións}} e $2 {{PLURAL:$2|ficheiro restaurado|ficheiros restaurados}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|ficheiro restaurado|ficheiros restaurados}}",
+       "undeletedrevisions": "{{PLURAL:$1|Restaurouse $1 revisión|Restauráronse $1 revisións}}",
+       "undeletedrevisions-files": "Restauráronse $1 {{PLURAL:$1|revisión|revisións}} e $2 {{PLURAL:$2|ficheiro|ficheiros}}",
+       "undeletedfiles": "{{PLURAL:$1|Restaurouse $1 ficheiro|Restauráronse $1 ficheiros}}",
        "cannotundelete": "Houbo un erro durante a restauración:\n$1",
        "undeletedpage": "'''A páxina \"$1\" foi restaurada'''\n\nComprobe o [[Special:Log/delete|rexistro de borrados]] para ver as entradas recentes no rexistro de páxinas eliminadas e restauradas.",
        "undelete-header": "Consulte [[Special:Log/delete|no rexistro de borrados]] as páxinas borradas recentemente.",
        "tooltip-ca-nstab-main": "Ver o contido da páxina",
        "tooltip-ca-nstab-user": "Ver a páxina {{GENDER:{{BASEPAGENAME}}|do usuario|da usuaria}}",
        "tooltip-ca-nstab-media": "Ver a páxina con contido multimedia",
-       "tooltip-ca-nstab-special": "Esta é unha páxina especial, polo que non a pode editar",
+       "tooltip-ca-nstab-special": "Esta é unha páxina especial, e non pode editarse",
        "tooltip-ca-nstab-project": "Ver a páxina do proxecto",
        "tooltip-ca-nstab-image": "Ver a páxina do ficheiro",
        "tooltip-ca-nstab-mediawiki": "Ver a mensaxe do sistema",
        "spam_reverting": "Revertida á última edición sen ligazóns a \"$1\"",
        "spam_blanking": "Limpáronse todas as revisións con ligazóns a \"$1\"",
        "spam_deleting": "Borráronse todas as revisións con ligazóns a \"$1\"",
-       "simpleantispam-label": "Comprobación antispam.\n'''NON''' encha isto!",
+       "simpleantispam-label": "Comprobación antispam.\n<strong>Non</strong> encha isto!",
        "pageinfo-title": "Información sobre \"$1\"",
        "pageinfo-not-current": "Sentímolo, non é posible achegar esa información sobre as revisións vellas.",
        "pageinfo-header-basic": "Información básica",
        "pageinfo-robot-index": "Permitida",
        "pageinfo-robot-noindex": "Non permitida",
        "pageinfo-watchers": "Número de vixiantes da páxina",
-       "pageinfo-visiting-watchers": "Número de usuarios vixiando a páxina visitando as edicións recentes",
+       "pageinfo-visiting-watchers": "Número de usuarios vixiando a páxina que visitaron as edicións recentes",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixiante|vixiantes}}",
        "pageinfo-few-visiting-watchers": "Pode haber, ou non, un usuario que vixía páxinas visitando as edicións recentes",
        "pageinfo-redirects-name": "Número de redireccións cara a esta páxina",
        "htmlform-cloner-create": "Engadir máis",
        "htmlform-cloner-delete": "Eliminar",
        "htmlform-cloner-required": "Necesítase, polo menos, un valor.",
+       "htmlform-title-badnamespace": "\"[[:$1]]\" non está no espazo de nomes \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" non é un título de páxina que se poida crear",
+       "htmlform-title-not-exists": "\"[[:$1]]\" non existe.",
+       "htmlform-user-not-exists": "\"<strong>$1</strong>\" non existe.",
+       "htmlform-user-not-valid": "\"<strong>$1</strong>\" non é un nome de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para procuras de texto completo",
        "sqlite-no-fts": "$1 sen soporte para procuras de texto completo",
        "logentry-delete-delete": "$1 {{GENDER:$2|borrou}} a páxina \"$3\"",
        "logentry-newusers-create2": "$1 {{GENDER:$2|creou}} a conta de usuario $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|creou}} a conta de usuario $3; o contrasinal enviouse por correo electrónico",
        "logentry-newusers-autocreate": "A conta de {{GENDER:$2|usuario|usuaria}} $1 creouse automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|trasladou}} a protección de \"$4\" a \"$3\"",
        "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3",
        "logentry-rights-autopromote": "$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5",
        "json-warn-trailing-comma": "{{PLURAL:$1|Eliminouse $1 coma final|Elimináronse $1 comas finais}} do JSON.",
        "json-error-unknown": "Houbo un problema co JSON. Erro: $1",
        "json-error-depth": "Superouse o número máximo de ficheiros apartados.",
-       "json-error-state-mismatch": "O JSON non é válido.",
+       "json-error-state-mismatch": "O JSON non é válido ou ten un formato incorrecto",
        "json-error-ctrl-char": "Produciuse un erro de carácter de control, trátase probablemente dun problema de codificación.",
        "json-error-syntax": "Erro de sintaxe",
        "json-error-utf8": "Hai caracteres UTF-8 incorrectos, trátase probablemente dun problema de codificación.",
        "special-characters-title-endash": "guión",
        "special-characters-title-emdash": "raia",
        "special-characters-title-minus": "signo menos",
+       "mw-widgets-dateinput-no-date": "Non se seleccionou ningunha data",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a páxina aínda non existe",
        "mw-widgets-titleinput-description-redirect": "redirección cara a $1"
 }
index a710ada..0d56f44 100644 (file)
@@ -21,6 +21,7 @@
        "tog-watchdefault": "हांवें संपादीत केल्लीं पानां आनी फायल म्हजे ध्यानसूचीक जोड",
        "tog-previewontop": "संपादन पेटीच्या मुखार प्रीव्यु दाखय",
        "tog-previewonfirst": "पयल्याच संपादनाचेर पुर्वनियाळ दाखय",
+       "tog-enotifwatchlistpages": "म्हज्या लक्षवळेरेंतलें पान वा फायल बदल्ली जाल्यार म्हाका इमेल करात",
        "tog-shownumberswatching": "ध्यान दवरपी वांगड्यांची संख्या दाखय",
        "tog-oldsig": "सद्याची निशाणी",
        "tog-uselivepreview": "लायव पुर्वनियाळाचो उपेग कर",
        "categorypage": "श्रेणींचें पान पळयात",
        "viewtalkpage": "चर्चा पळय",
        "otherlanguages": "हेर भासांनी",
-       "redirectedfrom": "($1 à¤¨à¤µà¥\8dया à¤¨à¤¾à¤®à¥\8dयार à¤§à¤¾à¤¡à¤²à¤¾à¤\82 )",
+       "redirectedfrom": "($1 à¤¸à¥\82न à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शित)",
        "redirectpagesub": "पान परतून निर्देशीत करचें",
-       "redirectto": "हांगां पुनर्निर्देशित करा:",
+       "redirectto": "हांगां पुनर्निर्देशित:",
        "lastmodifiedat": " ह्या पानांत निमाणो बदल,$1 वेर $2 वेळार केल्लो",
        "protectedpage": "राखून दवरिल्लें पान",
        "jumpto": "हुपून वचात:",
        "jumptonavigation": "दिशा-नियंत्रण",
        "jumptosearch": "सोद",
-       "pool-queuefull": "पà¥\82ल वळ भरिल्ली आसा",
+       "pool-queuefull": "तळà¥\8dयà¥\87à¤\9aà¥\87à¤\82 वळ भरिल्ली आसा",
        "pool-errorunknown": "खबर नाशिल्ली चूक",
        "poolcounter-usage-error": "उपयोगी त्रुटि: $1",
        "aboutsite": "{{SITENAME}}विशीं",
        "confirmable-no": "ना",
        "thisisdeleted": "पळय आनी परतून हाड 1?",
        "viewdeleted": "दाखयात $1?",
-       "feedlinks": "फà¥\80ड",
+       "feedlinks": "पà¥\81रवय :",
        "feed-invalid": "चुकीचें सब्सक्रिप्शन फीड प्रकार",
        "site-rss-feed": "$1 चीं आर.एस.एस फीड",
        "site-atom-feed": "$1 एटम फिड",
        "nstab-image": "फायल",
        "nstab-mediawiki": "संदेश",
        "nstab-template": "प्रारूप",
-       "nstab-help": "सहायà¤\95 पान",
+       "nstab-help": "à¤\86दाराà¤\9aà¥\87à¤\82 पान",
        "nstab-category": "वर्ग",
        "nosuchaction": "असले तरेचे कार्य ना",
        "nosuchspecialpage": "असले कांयच खाशेलें पान ना",
        "login-abort-generic": "तुमचें लॉग इन अपेशी थारलां - निश्फलीत",
        "login-migrated-generic": "तुमचें खातें स्थलांतरीत जालां आनी तुजें वापरप्याचें नांव ह्या विकीचेर उपस्थीत ना.",
        "loginlanguagelabel": "भास:$1",
-       "pt-login": "सत्रारंभ करात",
+       "pt-login": "सत्रारंभ",
        "pt-login-button": "सत्रारंभ करात",
        "pt-createaccount": "खातें रोचात",
        "pt-userlogout": "सत्र शेवट",
        "changeemail-none": "(कांय ना)",
        "changeemail-password": "तुजें {{SITENAME}} गुपीत उतर:",
        "changeemail-submit": "ई-मेल बदलात",
-       "resettokens": "à¤\9fà¥\8bà¤\95न à¤°à¥\80सà¥\87à¤\9f à¤\95रात",
-       "resettokens-no-tokens": "रà¥\80सà¥\87à¤\9f à¤\95रपा à¤\96ातà¥\80र à¤\95सलà¥\87à¤\82à¤\9a à¤\9fà¥\8bà¤\95न ना",
-       "resettokens-tokens": "à¤\9fà¥\8bà¤\95न",
+       "resettokens": "à¤\9aावà¥\8dयà¥\8b à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95र",
+       "resettokens-no-tokens": "पà¥\81नरà¥\8dसà¥\8dथापित à¤\95रपा à¤\96ातà¥\80र à¤\95सलà¥\87à¤\82à¤\9a à¤\9aावà¥\80 ना",
+       "resettokens-tokens": "à¤\9aावà¥\8dयà¥\8b :",
        "resettokens-token-label": "$1 (सद्याचें मूल्य: $2)",
        "bold_sample": "डाट बरप",
        "bold_tip": "डाट मजकूर",
        "preview": "पूर्वनियाळ",
        "showpreview": "पूर्वनियाळ दाखय",
        "showdiff": "बदल दाखयात",
-       "anoneditwarning": "'''शिà¤\9fà¤\95ावणà¥\80:''' à¤¤à¥\82à¤\82वें सत्रारंभ करूंक ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 सत्रारंभ]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
+       "anoneditwarning": "'''शिà¤\9fà¤\95ावणà¥\80:''' à¤¤à¥\81वें सत्रारंभ करूंक ना.\nतुजो IP पत्तो ह्या पानाच्या संपादन इतिहासांत नोंद जातलो.जर तुमी <strong>[$1 सत्रारंभ]</strong> करता वा <strong>[$2 खातें उगडटा]</strong> जाल्यार हेर सुविधांसयत तुमच्या संपादनाचें श्रेय तुमच्या सदस्य नांवाचेर दितलें.",
        "missingcommenttext": "उपकार करून तुमच्यो शिरो सकयल घाल.",
        "blockedtitle": "वापरप्याक बंद केला",
        "blockednoreason": "कांयच कारण दिवंक ना",
        "last": "अादलें",
        "page_first": "पयलें",
        "page_last": "निमणें",
-       "histlegend": "फरà¤\95ाà¤\9aà¥\80 à¤¨à¤¿à¤µà¤¡à¤\83 à¤ªà¥\81नरà¥\8dनियाळाà¤\82à¤\9aà¥\80 à¤¤à¥\81ळा à¤\95रपा à¤\96ातà¥\80र à¤°à¥\87डियà¥\8b à¤\9aà¥\8cà¤\95à¤\9fà¥\80à¤\82 à¤\9aà¥\87र à¤\95à¥\81रà¥\81 à¤\95रात à¤\86नà¥\80 à¤\8fà¤\82à¤\9fर à¤¨à¤¾ à¤¤à¤° à¤¤à¤³à¤¾à¤\95डà¥\87 à¤\86शिलà¥\8dलà¥\8b à¤¬à¤\9fन à¤¦à¤¾à¤®à¤¾à¤¤",
+       "histlegend": "फरà¤\95ाà¤\9aà¥\80 à¤¨à¤¿à¤µà¤¡à¤£à¥\80 : à¤ªà¥\81नरà¥\8dनियाळाà¤\82à¤\9aà¥\80 à¤¤à¥\81ळा à¤\95रपा à¤\96ातà¥\80र à¤°à¥\87डियà¥\8b à¤\9aà¥\8cà¤\95à¤\9fà¥\80à¤\82 à¤\9aà¥\87र à¤\95à¥\81रà¥\81 à¤\95रात à¤\86नà¥\80 ''à¤\8fà¤\82à¤\9fर'' à¤¨à¤¾ à¤¤à¤° à¤¤à¤³à¤¾à¤\95डà¥\87 à¤\86शिलà¥\8dलà¥\8b à¤¬à¥\81ताà¤\82व à¤¦à¤¾à¤®à¤¾à¤¤à¥¤<br />\nविवरण : <strong>({{int:cur}})</strong> = à¤¹à¤¾à¤²à¥\80à¤\82à¤\9aà¥\80 à¤ªà¥\81नरà¥\8dनियाळा à¤¬à¤°à¥\8bबर à¤«à¤°à¤\95, <strong>({{int:last}})</strong> = à¤\86दलà¥\80 à¤ªà¥\81नरà¥\8dनियाळा à¤¬à¤°à¥\8bबर à¤«à¤°à¤\95, <strong>{{int:minoreditletter}}</strong> = à¤¦à¤¾à¤\95à¥\8dà¤\9fà¥\87à¤\82 à¤¬à¤¦à¤²à¥¤",
        "history-fieldset-title": "चाळपाचो इतिहास",
        "history-show-deleted": "फकत काडून उडयिल्लें",
        "histfirst": "पोरणो",
        "searchprofile-advanced-tooltip": "खाशेल्या नांवथोळाणी सोदात",
        "search-result-size": "$1 ({{PLURAL:$2|1 उतर|$2 उतरां}})",
        "search-result-category-size": "{PLURAL:$1|1 सदस्य|$1 सदस्य}} ({{PLURAL:$2|1 उपगट|$2 उपगट}}, {{PLURAL:$3|1 फायल|$3 फायलीं}})",
-       "search-redirect": "($1 नव्यान नामो दियात)",
+       "search-redirect": "(पुनर्निर्देशन $1)",
        "search-section": "(विभाग $1)",
        "search-suggest": "तुमकां $1 अशें म्हणपाचें आसलें?",
+       "search-rewritten": "$1 हाचो निकाल दाखयता.नाजाल्यार $2 हें सोदात.",
        "search-interwiki-more": "(आनी)",
        "search-relatedarticle": "संबंदीत",
        "searchrelated": "संबंदीत",
        "minoreditletter": "द",
        "newpageletter": "न",
        "boteditletter": "र",
+       "rc_categories_any": "वेंचिल्ल्या मदलें खंयचेय",
        "rc-change-size-new": "$1 {{बहुवचन:$1|byte|bytes}}बदल केल्या उपरांत",
        "rc-enhanced-expand": "म्हायती दाखय",
        "rc-enhanced-hide": "म्हायती लिपय",
        "watchlist": "लक्ष वळेरी",
        "mywatchlist": "लक्ष वळेरी",
        "watchlistfor2": "$1 $2 खातीर",
+       "addedwatchtext": "\"[[:$1]]\" आनी हाचे भासाभास पान तुमचें [[Special:Watchlist|सादुरवळेरेक]] जोडलां.",
        "watch": "नदर दवरात",
        "unwatch": "पळोवंक नासलें",
        "watchlist-details": "लक्ष {{PLURAL:$1|$1वळेरींतलें|$1 वळेंरींतली}} {{PLURAL:$1|$1पान|$1 पानां}} उलोवपाची पानां सोडून",
        "dellogpage": "काडून उडयिल्ल्यांची वळेरी",
        "rollbacklink": "फाटीं घेयात",
        "rollbacklinkcount": "$1 {{PLURAL:$1|संपादन}} फाटीं घेयात",
+       "changecontentmodel-title-label": "पानाचो माथाळो",
+       "changecontentmodel-reason-label": "कारण:",
        "protectlogpage": "सुरक्षितेचें सोत्र",
        "protectedarticle": "राखिल्ले\"[[$1]]\"",
        "restriction-edit": "संस्करण",
        "whatlinkshere-page": "पान:",
        "linkshere": "मुखावेली पानां '''[[:$1]]''': हाका जोडणी करतात",
        "nolinkshere": "$1हाका खंयच्याच पानाची जोडणी ना",
-       "isredirect": "पान à¤¨à¤µà¥\8dया à¤¨à¤¾à¤®à¥\8dयार à¤§à¤¾à¤¡à¤¾à¤¤",
+       "isredirect": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤ªà¤¾à¤¨",
        "istemplate": "$1 दूसरात-समावेस",
        "isimage": "फायलीचो दुवो",
        "whatlinkshere-prev": "{{PLURAL:$1|आदलें|आदलीं $1}}",
        "tooltip-pt-mycontris": "तुमच्या योगदानांची वळेरी",
        "tooltip-pt-login": "सत्रारंभ करप बरें, पूण तशी सक्ती ना.",
        "tooltip-pt-logout": "सत्र शेवट",
-       "tooltip-pt-createaccount": "तुमी खातें उगडून सत्रारंभ करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
+       "tooltip-pt-createaccount": "तुमी खातें उगडून सत्रारंभ करचें अशें सुचयतात, पूण तें सक्तीचे ना.",
        "tooltip-ca-talk": "मजकूराच्या पाना संबंदान भासाभास",
        "tooltip-ca-edit": "हें पान बदल",
        "tooltip-ca-addsection": "नवीं विभाग सुरु करात",
        "monthsall": "सगळे",
        "watchlisttools-view": "प्रस्तूत बदल पळयात.",
        "watchlisttools-edit": "लक्ष वळेंरी पळय आनी संपादीत करात",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|à¤\89लà¥\8bयात]])",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|उलयात]])",
        "specialpages": "खाशेलीं पानां",
        "tag-filter": "[[Special:Tags|कुर्वेचीट]] गाळणो:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
+       "htmlform-title-not-exists": "[[:$1]] अस्तित्वांत ना.",
        "logentry-delete-delete": "$1 {{GENDER:$2|काडून उडयल्ले पान}} $3",
-       "logentry-move-move": "$1 à¤¨ $3 à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87र $4 {{GENDER:$2|हालयला}}",
+       "logentry-move-move": "$1 à¤¹à¤¾à¤£à¥\87à¤\82 $3 à¤ªà¤¾à¤¨à¤¾à¤\95 $4 {{GENDER:$2|हालयला}}",
        "logentry-newusers-create": "उपयोगकत्याचें $1 {{GENDER:$2|तयार केलें}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपलोड केला}} $3",
-       "searchsuggest-search": "सोद"
+       "searchsuggest-search": "सोद",
+       "mw-widgets-dateinput-no-date": "तारीख निवडूंक ना",
+       "mw-widgets-dateinput-placeholder-day": "वर्स-म्हयनो-दीस",
+       "mw-widgets-dateinput-placeholder-month": "वर्स-म्हयनो"
 }
index ec62ada..1c1652d 100644 (file)
@@ -8,12 +8,14 @@
                ]
        },
        "tog-underline": "Zoddnienche adhorekhan",
+       "tog-hideminor": "Halinch bodol kel'leantle dhakte bodol lipoi",
        "tog-numberheadings": "Mathalle sway kromankit kor",
        "tog-showtoolbar": "Bodolache hathiar-potti dakhoi",
        "tog-editondblclick": "Dotti klickacher pananche sonskoron kor",
        "tog-watchdefault": "Hanv bodolta tim panam moji sadurvollerint zod",
        "tog-previewontop": "Sonskoron petie mukhar zolok dakhoi",
        "tog-previewonfirst": "Poileach bodolacher zolok dakhoi",
+       "tog-enotifwatchlistpages": "Mhojea lokxvollerintlem pan vo fail bodol'li zalear mhaka email dhadd",
        "tog-shownumberswatching": "Nodor dovorpi vangdianche sonkhya dakhoi",
        "tog-oldsig": "Sodheachi soy:",
        "tog-uselivepreview": "Boroitastana zolok dahkoi",
        "create-this-page": "Ho pan roch",
        "delete": "Vogllai",
        "deletethispage": "Hem pan kad",
+       "undeletethispage": "Hem pan punorsthapit kor",
+       "undelete_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} portun had",
+       "viewdeleted_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} dakhoi",
        "protect": "Rakh",
        "protect_change": "bodol",
        "protectthispage": "Hem pan rakh",
+       "unprotect": "Surokxechem sthor bodol",
+       "unprotectthispage": "Hem panachem surokxechem sthor bodol",
        "newpage": "Novem pan",
        "talkpage": "Hea panachem bhasabhas kor",
        "talkpagelinktext": "Bhasabhas",
        "views": "Drishya",
        "toolbox": "Avtam",
        "userpage": "Vangddiacho pan poloi",
+       "projectpage": "Prokolpachem pan poloi",
        "imagepage": "Imazichem pan poloi",
+       "mediawikipage": "Sondexachem pan polloi",
+       "templatepage": "Sanchechem pan polloi",
        "viewhelppage": "Adar pan poloi",
        "categorypage": "Vorgachem pan poloi",
+       "viewtalkpage": "Bhasabhas polloi",
        "otherlanguages": "Her bhasanim",
-       "redirectedfrom": "($1 savn porot dixent)",
+       "redirectedfrom": "($1 savn punornirdexit)",
        "redirectpagesub": "Punornirdexan pan",
-       "redirectto": "Hanga ponornirdeshit kor:",
+       "redirectto": "Hanga ponornirdeshit:",
        "lastmodifiedat": "Hem pan xevtim $1 disa, $2 vazta bodolelem.",
+       "protectedpage": "Rakhun dovorl'lem pan",
        "jumpto": "Hupun voch",
        "jumptonavigation": "dixa-niontronn",
        "jumptosearch": "sod",
+       "pool-queuefull": "Tolliechem voll bhorlolem asa",
+       "pool-errorunknown": "Khobor nasleli chuk",
+       "poolcounter-usage-error": "Upyogachi chuk: $1",
        "aboutsite": "{{SITENAME}} babtint",
        "aboutpage": "Project:Vixoiavixim",
        "copyrightpage": "{{ns:project}}:Prat-hokk",
        "disclaimers": "Nhoikarnio",
        "disclaimerpage": "Project:Sadeo nhoikarni",
        "edithelp": "Bodlunk adar",
+       "helppage-top-gethelp": "Adar",
        "mainpage": "Mukhel Pan",
        "mainpage-description": "Mukhel pan",
        "portal": "Somudaik proves-dar",
        "ok": "Zait",
        "retrievedfrom": "\"$1\" savn prapt kelam",
        "youhavenewmessages": "Tumkam $1 ($2) asat.",
+       "youhavenewmessagesmulti": "$1 cher tuka noveo sondex asat",
        "editsection": "bodol",
        "editold": "bodol",
        "viewsourceold": "mull poloi",
        "toc": "Suchi potr",
        "showtoc": "dakhoi",
        "hidetoc": "lipoi",
+       "collapsible-collapse": "Lhan kor",
+       "collapsible-expand": "Vistarit kor",
+       "confirmable-yes": "Hoi",
+       "confirmable-no": "Na",
+       "thisisdeleted": "$1 polloi vo porot hadd?",
+       "viewdeleted": "$1 polloi?",
+       "feedlinks": "Purvoi:",
+       "feed-invalid": "Chukichem suscribcao purvoichem prokar",
+       "site-rss-feed": "$1 RSS purvoi",
        "site-atom-feed": "$1 Atom purvoi",
+       "page-rss-feed": "\"$1\" RSS purvoi",
        "page-atom-feed": "\"$1\" Atom purvonn",
        "red-link-title": "$1 (hea nanvachem pan na)",
+       "sort-descending": "Devtea kromacher kromboddh kor",
+       "sort-ascending": "Chodtea kromacher kromboddh kor",
        "nstab-main": "Pan",
        "nstab-user": "Vapuddpeachem pan",
+       "nstab-media": "Madheomachem pan",
        "nstab-special": "Khaxelem pan",
        "nstab-project": "Prokolpache pan",
        "nstab-image": "Fail",
        "nstab-mediawiki": "Sondex",
        "nstab-template": "Saacho",
+       "nstab-help": "Adarachem pan",
        "nstab-category": "Vorg",
+       "nosuchaction": "Oslem torechem karya nam",
+       "nosuchspecialpage": "Oslem kaich khashellem pan na",
        "error": "Chuk",
+       "databaseerror": "Totv-kox chuk",
+       "databaseerror-textcl": "Totv-kox (database) sodtana chuk ghodli",
+       "databaseerror-query": "Anurodh: $1",
+       "databaseerror-error": "Chuk: $1",
        "missing-article": "Totv-kox (Database) hantun mellunk zai aslem tem mozkur \"$1\" $2 mellunk-nam.\n\nHorxim, oxem ek pornem frk vo eka panachem itihasachem zodd vogllailem, tedna zata.\n\nOxem nhoi zalear, tuka softwer-an chuk sampodlam zait.\nUpkar korun eka [[Special:ListUsers/sysop|karbhari]]chea nodrek hadd, Internet Zago Sodpi (URL) hachi nond gheun.",
        "missingarticle-rev": "(uzollnni#: $1)",
        "missingarticle-diff": "(Frk: $1, $2)",
        "yourname": "Vapuddpeachem nanv:",
        "userlogin-yourname": "Vangdiachem nanv",
        "userlogin-yourname-ph": "Tujem 'vangdeachem nanv' boroi",
+       "createacct-another-username-ph": "Vapurpeachem nanv boroi",
        "yourpassword": "Gupitutor:",
        "userlogin-yourpassword": "Gupitutor",
        "userlogin-yourpassword-ph": "Tujem gupitutor boroi",
        "createacct-yourpasswordagain-ph": "Gupitutor porot boroi",
        "remembermypassword": "Hea internet browseran mhojem sotrachem ugdas dovor (chodan chod $1 {{PLURAL:$1|disak|disank}})",
        "userlogin-remembermypassword": "Mhojem sotr chalu dovor",
+       "userlogin-signwithsecure": "Surokxit onubondh vapor",
+       "yourdomainname": "Tuzo domain:",
+       "password-change-forbidden": "Tujean hea wikicher gupitutor bodlunk zaina.",
        "login": "Sotroromb kor",
        "nav-login-createaccount": "Sotrrombh kor / khatem roch",
        "userlogin": "Sotrrombh kor / khatem roch",
+       "userloginnocreate": "Sotrorombh",
        "logout": "Bhair podd",
        "userlogout": "Sotracho xevott",
+       "notloggedin": "Sotrorombh korunk nai",
        "userlogin-noaccount": "Tuje kode khatem na?",
        "userlogin-joinproject": "{{SITENAME}}-hacho vangdi za",
        "nologin": "Tuje kodde khatem na? $1.",
        "userlogin-resetlink": "Sotrorombh korpacheo bariksai visorlai?",
        "userlogin-resetpassword-link": "Gupitutor visorlo?",
        "userlogin-helplink2": "Sotrorombh korunk adar",
+       "userlogin-createanother": "Dusrem khatem roch",
+       "createacct-emailrequired": "Email potto",
        "createacct-emailoptional": "Email potto (sokti na)",
        "createacct-email-ph": "Tuzo email potto boroi",
+       "createacct-another-email-ph": "Email potto boroi",
+       "createacct-realname": "Khorem nanv (Soktichem nhoi)",
+       "createaccountreason": "Karonn:",
+       "createacct-reason": "Karonn",
+       "createacct-reason-ph": "Tum dusrem khatem kiteak rochtai",
        "createacct-captcha": "Suraksha topasni",
        "createacct-imgcaptcha-ph": "Voir dixta to mozkur boroi",
        "createacct-submit": "Tujem khatem roch",
+       "createacct-another-submit": "Dusrem khatem roch",
        "createacct-benefit-heading": "{{SITENAME}} tujea bhaxen lokani kel'la",
        "createacct-benefit-body1": "{{PLURAL:$1|bodol|bodlopam}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pan|panam}}",
        "createacct-benefit-body3": "halincheo {{PLURAL:$1|yogdan diupi}}",
+       "badretype": "Tunven ghatlelim gupitutram zullnant.",
+       "userexists": "Boroillem vapurpeachem nanv poilinch vaprant asa.\nUpkar korun dusrem nanv vench.",
+       "loginerror": "Sotrorombhachi truti",
+       "createacct-error": "Khatem rochtanam truti",
+       "createaccounterror": "Khatem rochunk zaunk na: $1",
+       "loginsuccesstitle": "Sotrorombh zalem",
+       "nosuchusershort": "\"$1\" hea nanvan konn vapurpi na.\nNanv boroitana chuk zali gai?",
+       "nouserspecified": "Vapurpeachem nanv diunk-uch zai.",
+       "login-userblocked": "Hea vapurpeak addaila. Sotrorombh korunk zaina.",
+       "wrongpassword": "Chukichem gupitutor ghatlam.\nUpkar korun portun proyotn kor.",
+       "wrongpasswordempty": "Gupitutor ghalunk na.\nUpkar korun portun proyotn kor.",
+       "passwordtoolong": "Gupitutor {{PLURAL:$1|1 vornn|$1 vornnam}} proros vhodlem asunk zaina.",
+       "password-name-match": "Tujem gupitutor vapurpeachea nanva poros vegllem asunk zai.",
        "mailmypassword": "Novem gupitutor",
+       "passwordremindertitle": "{{SITENAME}} haka novo tatpurte gupitutor",
+       "noemail": "\"$1\" vapurpeak email potto nond korunk na.",
+       "noemailcreate": "Uchit email potto tunven diunk zai",
+       "mailerror": "Email dhadtana truti: $1",
+       "emailconfirmlink": "Tujea email potteachi khatri kor",
+       "cannotchangeemail": "Hea wikicher khateanchi email potte bodlunk zaina.",
+       "emaildisabled": "Hi site mail dhadpak xokona.",
+       "accountcreated": "Khatem rochlem.",
+       "createaccount-title": "{{SITENAME}} -ak khatem rochlem",
+       "login-abort-generic": "Tujem sotrorombh opexi tharlam - Nixfolit",
+       "login-migrated-generic": "Tujem khatem stholontrit zalam ani vapurpeachem nanv hea wikicher anink upostit na.",
        "loginlanguagelabel": "Bhas: $1",
-       "pt-login": "Sotrorombh kor",
+       "pt-login": "Sotrorombh",
        "pt-login-button": "Sotrorombh kor",
        "pt-createaccount": "Khatem roch",
        "pt-userlogout": "Sotr xevott",
+       "changepassword": "Gupitutor bodol",
+       "resetpass_header": "Khateachem gupitutor bodol",
+       "oldpassword": "Pornem gupitutor:",
+       "newpassword": "Novem gupitutor:",
+       "retypenew": "Novem gupitutor portun boroi:",
+       "resetpass_submit": "Gupitutor tharai ani sotrorombh kor",
+       "changepassword-success": "Tujem gupitutor bodlop yoshosvi tharlam.",
+       "resetpass_forbidden": "Gupitutram bodlunk zaina",
+       "resetpass-submit-loggedin": "Gupitutoor bodol",
+       "resetpass-submit-cancel": "Roddh kor",
+       "resetpass-temp-password": "Tatpurtem gupitutor:",
+       "resetpass-expired": "Tujem gupitutor pidd'ddear zalam. Upkar korun sotrorombh korunk novem gupitutor tharai.",
        "passwordreset": "Novem gupitutor",
+       "passwordreset-text-one": "Tatpurtem gupitutor emaila vorvim mellpa khatir hem form purai kor.",
+       "passwordreset-username": "Vapurpeache nanv:",
+       "passwordreset-domain": "Domain:",
+       "passwordreset-email": "Email potto:",
+       "passwordreset-emailelement": "Vapurpeachem nanv: $1\nTatpurtem gupitutor: $2",
+       "passwordreset-emailsent": "Gupitutor portun tharaipacho email dhadla.",
+       "changeemail": "Email potto bodol",
+       "changeemail-oldemail": "Sodhyacho email potto:",
+       "changeemail-newemail": "Novo email potto:",
+       "changeemail-none": "(kai na)",
+       "changeemail-password": "Tujem {{SITENAME}} hachem gupitutor:",
+       "changeemail-submit": "Email bodol",
+       "resettokens": "Chavio punorsthapit kor",
+       "resettokens-no-tokens": "Punorsthapit korpa khatir koslench chavi na.",
+       "resettokens-tokens": "Chavio:",
+       "resettokens-token-label": "$1 (sodhyache valor: $2)",
        "bold_sample": "Datt mozkur",
        "bold_tip": "Datt mozkur",
        "italic_sample": "Palso mozkur",
        "showpreview": "Zholok dakhoi",
        "showdiff": "Bodolpam dakhoi",
        "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodlopam korit zalear tuzo internet potto soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tujeo bodlopam tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
+       "missingcommenttext": "Upkar korun tumcheo xiro sokoil boroi.",
+       "blockedtitle": "Vapurpeak addaila",
+       "blockednoreason": "Kainch karonn diunk na",
+       "loginreqtitle": "Sotrorombh gorjechem",
        "loginreqlink": "sotrorombh kor",
+       "accmailtitle": "Gupitutor dhaddlea",
        "newarticle": "(Novem)",
        "newarticletext": "Tuven ek zoddneche patlav kelai, zachem pan azun rochunk na.\nPan rochunk, khallchea chovkottan boroi (anik mahitik [$1 adar pan] polloi).\nTu hangasor chukin pavlai zalear tujea internet browser-achi '''Fatim'' vo '''Back''' butao dab.",
        "noarticletext": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], vo [{{fullurl:{{FULLPAGENAME}}|action=edit}} hem pan sudharunk zata]</span>.",
        "noarticletext-nopermission": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], vo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], pun tuka hem pan rochunk porvangi na.",
+       "userpage-userdoesnotexist-view": "\"$1\" hea vapurpeachea khateachi nondnni korunk na.",
        "previewnote": "'''Hi fokot ek zholok mhonn ugddas dhor.'''\nTujim bodolpam azun sambhallun dovrunk nant!",
        "editing": "$1 bodolta",
        "creating": "$1 rochta",
        "editingsection": "(Khond) $1 bodol",
+       "yourtext": "Tuzo mozkur",
        "templatesused": "Hea panant uzar {{PLURAL:$1|kel'lo sancho|kel'le sanche}}:",
        "template-protected": "(rakhlelem)",
        "template-semiprotected": "(ordhem rakhun dovorlelem)",
        "permissionserrorstext-withaction": "$2, hem korpak tuka porvangi na, {{PLURAL:$1|hea karnnak lagon|hea karnnank lagun}}:",
        "recreate-moveddeleted-warn": "'''Xittkavnni: Tum ek pan porot rochtai jem fattim vogllailelem .'''\n\nPanacho sudar korop sarkem zalear dhean di.\nPan vogllavpachem ani sotr halovpachem, sovloti khatir hangasor dilelem asa:",
        "moveddeleted-notice": "Hem pan vogllailem asa.\nPanachea vogllaonechi ani hallonechi sotr mahiti khatir sokoil sondorba khatir dilea.",
+       "content-model-wikitext": "wikimozkur",
+       "content-model-text": "Sado mozkur",
        "post-expand-template-inclusion-warning": "'''Chotrai:''' Sacho zoddpacho akar chod vhodlem asa.\nThodde sache zoddchenant",
        "post-expand-template-inclusion-category": "Zea panani sache zoddpachem akarachem merakin chod zala",
        "post-expand-template-argument-warning": "'''Chotrai:''' Hea panan ek tori oslo sacheacho parametro asa zacho patlloylea uprant akar chod vhoddlo zata.\nHeo parametrank durlokx keleat.",
        "nextrevision": "Novi uzolnni →",
        "currentrevisionlink": "Sogleanvon novi uzollnni",
        "cur": "chal",
+       "next": "Fuddlem",
        "last": "adl",
        "page_first": "poilem",
        "page_last": "akhirchem",
-       "histlegend": "Frk nivoddni: Jeo uzollneo tuka comparar korunk zai, tenche fudle ''radio'' butao petoi\nVivron: '''({{int:cur}})''' = halinchi uzollnie borobor forok, '''({{int:last}})''' = adli uzollnie borobor forok, '''{{int:minoreditletter}}''' = dhaktem sudharop.",
+       "histlegend": "Frk nivoddni: Jeo uzollneo tuka comparar korunk zai, tenche fudle ''radio'' butao petoi ani ''Enter'' nazalear khalcho butao dab.<br />\nVivron: <strong>({{int:cur}})</strong> = halinchi uzollnie borobor forok, <strong>({{int:last}})</strong> = adli uzollnie borobor forok, <strong>{{int:minoreditletter}}</strong> = dhaktem bodol.",
        "history-fieldset-title": "Itihas chall",
        "history-show-deleted": "Fokot vogllailelem",
        "histfirst": "sogleavon adhlem",
        "histlast": "sogleavon novem",
        "history-feed-item-nocomment": "$1 hannem $4, $3 hea vellar",
        "rev-delundel": "dakhoi/lipoi",
+       "rev-showdeleted": "dakhoi",
+       "revdelete-show-file-submit": "Hoi",
+       "revdelete-radio-set": "Lipoilelem",
+       "revdelete-radio-unset": "Polleunk zata",
+       "revdelete-log": "Karonn:",
        "revdel-restore": "Disnnem bodol",
+       "pagehist": "Panacho itihas",
+       "mergehistory-reason": "Karonn:",
        "revertmerge": "Doxim kor",
        "history-title": "\"$1\" hachea uzollnnecho itihas",
        "difference-title": "\"$1\"-chea avruttint ontor",
        "searchresults-title": "\"$1\" -khatir sodacho nikal",
        "prevn": "adlem {{PLURAL:$1|$1}}",
        "nextn": "fuddlem {{PLURAL:$1|$1}}",
+       "next-page": "Fuddlem pan",
        "prevn-title": "{{PLURAL:$1|Fattlem $1 porinnam|Fattlem $1 porinam}}",
        "nextn-title": "{{PLURAL:$1|Fuddlem $1 porinnam|Fudnlim $1 porinnam}}",
        "shown-title": "Dor eka panar {{PLURAL:$1|porinam}} dakhoi",
        "searchprofile-advanced-tooltip": "Khaxel'lea nanvthollanni sod",
        "search-result-size": "$1 {{PLURAL:$2|1 utor|$2 utram}}",
        "search-result-category-size": "{{PLURAL:$1|1 vangddi|$1 vangddi}} ({{PLURAL:$2|1 upvorg|$2 upvorg}}, {{PLURAL:$3|1 fichier|$3 fichieri}})",
-       "search-redirect": "($1 porot dixen dhaddop)",
+       "search-redirect": "(punornirdexon $1)",
        "search-section": "(vibhag $1)",
        "search-suggest": "Tu mhonnunk sodi: $1 ?",
+       "search-rewritten": "$1 hachim porinamam dakhoilean. Hea vantteache $2 ak sod.",
+       "search-interwiki-more": "(anik)",
+       "search-relatedarticle": "Sombondhit",
        "searchrelated": "sombondit",
        "searchall": "soglle",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> modlean <strong>$1</strong> porinam|<strong>$3</strong> modlean porinam <strong>$1 - $2</strong>}}",
        "search-nonefound": "Tujea sodak mell khata toslem kai porinam nan.",
+       "powersearch-toggleall": "Soglle",
        "preferences": "Posondeo",
        "mypreferences": "Posonti",
+       "prefs-edits": "Bodolanche sonkhya",
+       "prefs-user-pages": "Vapurpeanchim panam",
+       "prefs-rc": "Halinche bodol",
+       "prefs-watchlist": "Sadurvolleri",
        "youremail": "Tuzo email potto",
        "yourrealname": "Khorem nanv:",
        "prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
        "rcshowhideanons-show": "Dakhoi",
        "rcshowhideanons-hide": "Lipoi",
        "rcshowhidepatr": "$1 topaslele sudharop",
+       "rcshowhidepatr-show": "Dakhoi",
+       "rcshowhidepatr-hide": "Lipoi",
        "rcshowhidemine": "Mhojeo bodlopam $1",
        "rcshowhidemine-show": "Dakhoi",
        "rcshowhidemine-hide": "Lipoi",
        "minoreditletter": "d",
        "newpageletter": "N",
        "boteditletter": "r",
+       "rc_categories_any": "Vinchlele modlem khuimchem-i",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byti}} bodol kel'lea uprant",
        "rc-enhanced-expand": "Bariksann dakhoi",
        "rc-enhanced-hide": "Bariksann lipoi",
        "recentchangeslinked-page": "Panache nanv:",
        "recentchangeslinked-to": "Dil'em panache bodlek haka zodlelem panank kel'lim bodlopam dakhoi",
        "upload": "Fail upload kor",
+       "uploadbtn": "Fail upload kor",
        "uploadlogpage": "Uploadachem sotr",
        "filedesc": "Sar",
+       "fileuploadsummary": "Aapros",
        "watchthisupload": "Hea faylar dixtt dovor",
        "license": "Porvangi",
        "license-header": "Porvangi",
+       "listfiles-delete": "Kadun udoi",
        "imgfile": "fail",
+       "listfiles_date": "Tarikh",
+       "listfiles_name": "Nanv",
+       "listfiles_user": "Upeogkorto",
+       "listfiles_description": "Vornon",
        "file-anchor-link": "Fail",
        "filehist": "Failicho itihas",
        "filehist-help": "Tea vellar aslelea rupan pollonvk tarikh/vellar click kor",
+       "filehist-deleteone": "Kadun udoi",
        "filehist-revert": "Nimanea avruttik porot vor",
        "filehist-current": "chalont",
        "filehist-datetime": "Tarikh/Vell",
        "filedelete-otherreason": "Dusrem/aniki karon:",
        "randompage": "Khoincheim adlem modlem pan",
        "statistics": "Ankddevari",
+       "statistics-pages": "Panam",
+       "statistics-files": "Upload kel'le faili",
+       "brokenredirects-edit": "bodol",
+       "brokenredirects-delete": "Kadun udoi",
        "nbytes": "$1 {{PLURAL:$1|byte|bytesi}}",
        "nmembers": "$1 {{PLURAL:$1|vangddi}}",
        "prefixindex": "Panam jenche nanvache survatek asa...",
        "allarticles": "Sogllim panam",
        "allpagessubmit": "Voch",
        "categories": "Vorg",
+       "linksearch-ns": "Nanv-tholl:",
+       "linksearch-ok": "Sod",
        "linksearch-line": "$1 $2 savn zoddlelem asa",
+       "listusers-submit": "Dakhoi",
        "listgrouprights-members": "(vapuddpeanchi suchi)",
        "emailuser": "Email dhadd",
+       "emailusername": "Vapurpeachem nanv:",
        "watchlist": "Sadurachi volleri",
        "mywatchlist": "Sadurachi volleri",
        "watchlistfor2": "$1 hache khatir $2",
+       "addedwatchtext": "\"[[:$1]]\" ani hachem chorchechem pan tujea [[Special:Watchlist|sadurvollerek]] zoddlam.",
        "watch": "Nodor dovor",
        "watchthispage": "Hea panar dixtt dovor",
        "unwatch": "Nodor kadd",
        "watchlist-options": "Sadurvollericheo poryay",
        "watching": "Disht dovortanv...",
        "unwatching": "Disht kaddthanv...",
+       "delete-legend": "Kadun udoi",
        "actioncomplete": "Karvai sompurnn",
        "actionfailed": "Karvai oiesiesvi",
        "dellogpage": "Vogllaoneche sotr",
        "deleteotherreason": "Dusrem/aniki karon:",
        "rollbacklink": "kovoll",
        "rollbacklinkcount": "$1 {{PLURAL:$1|bodol|bodlopam}} kovoll",
+       "changecontentmodel-title-label": "Panacho mathallo",
+       "changecontentmodel-reason-label": "Karonn:",
        "protectlogpage": "Surokxitechem sotr",
        "protectedarticle": "rakhlelem \"[[$1]]\"",
        "protect-otherreason": "Dusrem/aniki karon:",
        "protect-otherreason-op": "Dusrem karon",
+       "restriction-edit": "Bodol",
+       "restriction-move": "Haloi",
+       "restriction-create": "Roch",
        "undeletelink": "polloi/adlea zagear hadd",
        "undeleteviewlink": "polloi",
        "namespace": "Nanv-tholl",
        "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
        "contributions": "{{GENDER:$1|Vapuddpi}} yogdanam",
-       "contributions-title": "$1 hea vapuddpean kelelim borovpam",
-       "mycontris": "Borovpam",
+       "contributions-title": "$1 hea vapuddpean kelelim yogdanam",
+       "mycontris": "Yogdanam",
        "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)",
        "uctop": "(atachem)",
        "month": "Mhoinea savn (ani adichem):",
        "year": "Hea vorsa savn (ani adichem):",
-       "sp-contributions-newbies": "Fokot novea khateachim borovpam dakhoi",
+       "sp-contributions-newbies": "Fokot novea khateachim yogdanam dakhoi",
        "sp-contributions-blocklog": "addavnniache sotr",
        "sp-contributions-uploads": "upload",
        "sp-contributions-logs": "sotr",
        "sp-contributions-talk": "bhasabhas",
-       "sp-contributions-search": "Borovpam sod",
+       "sp-contributions-search": "Yogdanam sod",
        "sp-contributions-username": "Antorzall namo vo vapuddpeachem nanv:",
        "sp-contributions-toponly": "Fokot halincheo uzollnneo dakhoi",
        "sp-contributions-submit": "Sod",
        "whatlinkshere-page": "Pan:",
        "linkshere": "Sokoilim panam <strong>[[:$1]]</strong> ak zoddtat:",
        "nolinkshere": "Khoincheim pan '''[[:$1]]''' ak zoddna.",
-       "isredirect": "Porot dixen pan dhadd",
+       "isredirect": "punornirdexon pan",
        "istemplate": "Durasth-somaves",
        "isimage": "failichem zoddop",
        "whatlinkshere-prev": "{{PLURAL:$1|adlem|adlem $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|fuddlem|fuddlim $1}}",
        "whatlinkshere-links": "← zoddnio",
-       "whatlinkshere-hideredirs": "$1 porot dixen",
+       "whatlinkshere-hideredirs": "$1 punornirdexon",
        "whatlinkshere-hidetrans": "$1 durasth-somaves",
        "whatlinkshere-hidelinks": "$1 zoddnio",
        "whatlinkshere-hideimages": "Failinchim zoddpam $1",
        "tooltip-t-whatlinkshere": "Hanga zoddlelea sogllea wiki pananchi volleri",
        "tooltip-t-recentchangeslinked": "Hea panak-sun zoddlelea panachim halinche bodol",
        "tooltip-feed-atom": "Hea panak Atom purovnni",
-       "tooltip-t-contributions": "Hea vapuddpeachea borovpanchi suchi",
+       "tooltip-t-contributions": "Hea vapuddpeachea yogdanachi suchi",
        "tooltip-t-emailuser": "Hea vapuddpeak email patthoi",
        "tooltip-t-upload": "Faili upload kor",
        "tooltip-t-specialpages": "Sogllea khaxelim pananchi volleri",
        "tooltip-t-permalink": "Hea panache hea uzollnnek togpi zoddni",
        "tooltip-ca-nstab-main": "Mozkur pan polloi",
        "tooltip-ca-nstab-user": "Vapuddpeachem pan polloi",
-       "tooltip-ca-nstab-special": "Hem ek kherit pan, tujeam hem pan bodlunk zaina",
+       "tooltip-ca-nstab-special": "Hem ek kherit pan, ani hem bodlunk zaina",
        "tooltip-ca-nstab-project": "Prokolpachem pan polloi",
        "tooltip-ca-nstab-image": "Failichem pan polloi",
        "tooltip-ca-nstab-template": "Saacho polloi",
        "tooltip-diff": "Tumi hea mozkurant kelelo bodol dakhoiat",
        "tooltip-compareselectedversions": "Hea panacheo don nivoddleleo uzollneo modem forok polloi",
        "tooltip-watch": "Hem pan tujea xadurvollerint zodd",
-       "tooltip-rollback": "\"Kovllop\" hea panachea xevttachea borovpa kodde kea kollant portota.",
+       "tooltip-rollback": "\"Kovllop\" hea panak nimannea yogdan korpean kello (kelle) bodol eka kollant portota.",
        "tooltip-undo": "\"Rodd' kor\" sudharop portita ani sudharopak Zholok ritin ukodta. Tem saran karon zoddunk dita.",
        "tooltip-summary": "Mottvo sar ghal",
-       "simpleantispam-label": "Spam-virudh topasni.\nHem bhori <strong>NAKAI</strong>",
+       "simpleantispam-label": "Spam-virudh topasni.\nHem bhori <strong>nakai</strong>!",
        "pageinfo-toolboxlink": "Panachi mahiti",
        "previousdiff": "←  Adlo bodol",
        "nextdiff": "Fuddlem bodol →",
        "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
        "tag-filter": "[[Special:Tags|Kurvechit]] challni:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
+       "htmlform-title-not-exists": "[[:$1]] ostitvant na.",
        "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
-       "logentry-move-move": "$1{{GENDER:$2|-an}} $3 panak $4 haloilea",
+       "logentry-move-move": "$1-an $3 panak $4 {{GENDER:$2|haloilea}}",
        "logentry-newusers-create": "Vapurpeacho kont $1 {{GENDER:$2|rochlam}}",
        "logentry-upload-upload": "$1-an $3 {{GENDER:$2|upload kela}}",
-       "searchsuggest-search": "Sod"
+       "searchsuggest-search": "Sod",
+       "mw-widgets-dateinput-no-date": "Tarikh nivddunk na",
+       "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "VVVV-MM"
 }
index 431432b..1d82b9b 100644 (file)
@@ -14,7 +14,8 @@
                        "Trixt",
                        "Yannos",
                        "ZaDiak",
-                       "아라"
+                       "아라",
+                       "JoostBotman"
                ]
        },
        "tog-underline": "Ὑπογραμμίζειν συνδέσμους:",
        "articlepage": "Χρήματος δέλτον ὁρᾶν",
        "talk": "Διάλεξις",
        "views": "Προβολαί",
-       "toolbox": "á¼\98Ï\81γαλειοκάδοÏ\82",
+       "toolbox": "á¼\9cÏ\81γαλεá¿\96α",
        "userpage": "Ὁρᾶν δέλτον χρωμένου",
        "projectpage": "Ἴδε δέλτον ἐγχειρήματος",
        "imagepage": "Ὁρᾶν τῆν δέλτον τοῦ ἀρχείου",
        "unusedtemplateswlh": "οἱ σύνδεσμοι οἱ ἄλλοι",
        "randompage": "Δέλτος τυχοῦσα",
        "randompage-nopages": "Οὐδεμία δέλτος ἐν {{PLURAL:$2|τῷ ὀνοματείῳ|τοῖς ὀνοματείοις}} \"$1\".",
+       "randomincategory-submit": "Ἱέναι",
        "randomredirect": "Τυχαία ἀναδιεύθυνσις",
        "randomredirect-nopages": "Οὐδεμία ἀναδιεύθυνσις ἐν τῷ ὀνοματείῳ \"$1\".",
        "statistics": "Τὰ περὶ τῶν δεδομένων",
        "nlinks": "$1 {{PLURAL:$1|σύνδεσμος|σύνδεσμοι}}",
        "nmembers": "$1 {{PLURAL:$1|μέλος|μέλη}}",
        "nrevisions": "$1 {{PLURAL:$1|ἀναθεώρησις|ἀναθεωρήσεις}}",
-       "nviews": "$1 {{PLURAL:$1|βλέψις|βλέψεις}}",
        "specialpage-empty": "Οὐδὲν ἀποτέλεσμα ἐν τῇδε τῇ ἀναφορᾷ.",
        "lonelypages": "Δέλτοι ὀρφαναί",
        "lonelypagestext": "Aἱ ἀκόλουθοι δέλτοι μὴ συνδεδεμέναι μετὰ δέλτων τινῶν ἢ μὴ ὑπερκλῃσμέναι εἰς ἑτέρας δέλτους τινὰς ἐν τῷ {{SITENAME}} εἰσίν.",
        "linksearch-pat": "Θέμα ζητήσεως:",
        "linksearch-ns": "Ὀνοματεῖον:",
        "linksearch-ok": "Ζητεῖν",
-       "linksearch-text": "Ἔξεστί σοι χρῆσθαι ὑποκαταστασίμοις φράσεσιν ὅπως \"*.wikipedia.org\".<br />\nὙποστηριζόμενα πρωτόκολλα: <code>$1</code>",
+       "linksearch-text": "Ἔξεστί σοι χρῆσθαι ὑποκαταστασίμοις φράσεσιν ὅπως \"*.wikipedia.org\".<br />\nὙποστηριζόμενα πρωτόκολλα: $1",
        "linksearch-line": "$1 συνδεόμενον τῷ $2",
        "listusersfrom": "Δεικνύναι χρωμένους (γραμμαὶ ἐκκινουμέναι ἐκ/ἐξ):",
        "listusers-submit": "Ἐμφανίζειν",
index d5f0037..f583152 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "Links unterstryche",
+       "tog-underline": "Links unterstryche:",
        "tog-hideminor": "Keini «chlyni Änderige» aazeige",
-       "tog-hidepatrolled": "Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände",
-       "tog-newpageshidepatrolled": "Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke",
+       "tog-hidepatrolled": "Vu Fäldhieter/inne aagluegti Änderige in dr „Letschte Änderige“ usblände",
+       "tog-newpageshidepatrolled": "Vu Fäldhieter/inne aagluegti Änderige in dr Lischt „Neiji Syte“ usblände",
        "tog-extendwatchlist": "Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte",
        "tog-usenewrc": "Änderigen uf „Letschte Änderige“ un dr Beobachtigslischt no Syte gruppiere",
        "tog-numberheadings": "Überschrifte outomatisch numeriere",
        "tog-watchdeletion": "Sälber gleschti Sytene un Dateie automatisch beobachte",
        "tog-watchrollback": "Syte, wun i zruckgsetzt haa, automatisch beobachte",
        "tog-minordefault": "Alli dyni Änderigen als «chlyni Änderige» markiere",
-       "tog-previewontop": "Vorschou vor em Editierfänschter aazeige",
-       "tog-previewonfirst": "Vorschou aazeige bim erschten Editiere",
+       "tog-previewontop": "Vorschou oberhalb vom Editierfänschter aazeige",
+       "tog-previewonfirst": "Vorschou scho bim ersten Editieren azeige",
        "tog-enotifwatchlistpages": "Schick mer e Mail, wänn e Syte oder e Datei gänderet wird, wun i beobachte due",
-       "tog-enotifusertalkpages": "Benachrichtigungsmails bi Änderigen a dyne Benutzersyte",
+       "tog-enotifusertalkpages": "Schick mer es Mail, we öpper myni Benutzerdiskussionssyte het g’änderet",
        "tog-enotifminoredits": "Au bi chlaine Änderige an Syte oder Dateie ne Mail schicke",
        "tog-enotifrevealaddr": "Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt",
        "tog-shownumberswatching": "Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)",
-       "tog-oldsig": "Vorschau vu dr Unterschrift:",
-       "tog-fancysig": "Signatur as Wikitext behandle (ohni automatischi Vergleichig)",
+       "tog-oldsig": "Aktuelli Unterschrift:",
+       "tog-fancysig": "Unterschrift as Wikitext behandle (ohni automatischi Verlinkig)",
        "tog-uselivepreview": "Vorschau sofort aazeige",
        "tog-forceeditsummary": "Sag mer s, wänn i s Zämmefassigsfeld läär loss",
        "tog-watchlisthideown": "Eigeni Änderige uf d Beobachtigslischt usblände",
        "no-null-revision": "Di nej Nullversion fir d Syte „$1“ het nit chennen aagleit wäre",
        "badtitle": "Ugültiger Titel",
        "badtitletext": "Dr Titel vu dr agforderte Syte isch nit giltig gsi, leer, oder e nit giltig Sprochgleich vun eme andre Wiki.",
+       "title-invalid-empty": "Der beatreit Sytetitel isch läär oder beisteit nur us em Name vomene Namensruum.",
+       "title-invalid-utf8": "Im beatreite Sytetitel het’s Zeiche, wo gäge UTF-8 verstoosse.",
+       "title-invalid-interwiki": "Im beatreite Sytetitel het’s en Interwiki-Link. Das geit imne Titel nid.",
+       "title-invalid-talk-namespace": "Der beatreit Sytetitel beziet sech uf’ne Diskussionssyte wo’s nid cha gä.",
+       "title-invalid-characters": "Im beatreite Sytetitel het’s ungültigi Zeiche: «$1».",
+       "title-invalid-relative": "Im Titel het’s e relative Pfad (./, ../). Relativi Pfäd sy i Title nid zuegla. Si chöü derzue füere, das e Browser d Syte nid cha erreiche.",
+       "title-invalid-magic-tilde": "Im beatreite Sytetitel het’s ds magische Wort <nowiki>~~~</nowiki>. Das isch nid zuegla.",
+       "title-invalid-too-long": "Der beatreit Sytetitel isch z läng. Är darf nid länger sy als $1 {{PLURAL:$1|Byte|Bytes}} ir UTF-8-Codierig.",
+       "title-invalid-leading-colon": "Der beatreit Sytetitel fat mit emne Strichpunkt a. Das isch nid zuegla.",
        "perfcached": "Die Informatione chemme us em Zwischespycher un sin derwyl villicht nit aktuäll. Maximal {{PLURAL:$1|ei Ergebnis isch|$1 Ergebnis sin}} im Cache verfiegbar.",
        "perfcachedts": "Die Date stamme us em Zwischespycher un sin am $1 s letscht Mol aktualisiert wore. Maximal {{PLURAL:$4|ei Ergebnis isch|$4 Ergebnis sin}} im Zwischespycher verfiegbar.",
        "querypage-no-updates": "'''D Aktualisierigsfunktion fir die Syte isch im Momänt deaktiviert. D Date wäre vorerscht nit ernejert.'''",
        "actionthrottled": "Aktionsaazahl limitiert",
        "actionthrottledtext": "As Schutz vor Spam cha die Aktion im e churze Zytabstand nume begränzt durgfiert wäre. Du bisch ebe an die Gränz cho. Bitte versuech s in e paar Minute non emol.",
        "protectedpagetext": "Die Syte isch fir s Bearbeite gsperrt.",
-       "viewsourcetext": "Quelltext vo dere Syte:",
-       "viewyourtext": "Du chasch dr Quälltext vu '''Dyre Bearbeitig''' vu däre Syte aaluege un kopiere:",
+       "viewsourcetext": "Du chasch der Quelltext vo dere Syten aluegen u kopiere.",
+       "viewyourtext": "Du chasch dr Quälltext vu '''Dyne Bearbeitige''' vu däre Syte aaluege un kopiere.",
        "protectedinterface": "In däre Syte het s Text fir s Sproch-Interface vu dr Software un si isch gsperrt, zum Missbruch z verhindre.",
        "editinginterface": "<strong>Warnig:</strong> Uf däre Syte het s Täxt, wu vu dr MediaWiki-Software brucht wird. Änderigen uf däre Syte wirke si uf d Benutzeroberflechi vu däm Wiki uus.",
        "translateinterface": "Go Ibersetzige fir alli Wiki zuefiege oder ändere, bruuch bitte [//translatewiki.net/ translatewiki.net], s MediaWiki-Lokalisierigsprojäkt.",
        "createacct-benefit-body2": "{{PLURAL:$1|Syte|Syte}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktive Autor|aktivi Autore}}",
        "badretype": "Di beidi Passwörter stimme nid zämme.",
+       "usernameinprogress": "Es Konto für dä Namen isch am erstellt wärde.\nBitte warte.",
        "userexists": "Dä Benutzername git s scho.\nBitte nimm e andere.",
        "loginerror": "Fähler bir Aamäldig",
        "createacct-error": "Fähler bim Aalege vum Benutzerkonto",
        "passwordreset": "Passwort zruggsetze",
        "passwordreset-text-one": "Fill des Formular uus go Dy Passwort zrucksetze.",
        "passwordreset-text-many": "{{PLURAL:$1|Fill eis vu dr Fälder uus go Dy Passwort zrucksetze.}}",
-       "passwordreset-legend": "Passwort zrucksetze",
        "passwordreset-disabled": "S Zrucksetze vu Passwerter isch in däm Wiki deaktiviert wore.",
        "passwordreset-emaildisabled": "D E-Mail-Funktione sin uf däm Wiki deaktiviert wore.",
        "passwordreset-username": "Benutzername:",
        "resettokens": "Token zrucksetze",
        "resettokens-text": "Du chasch Token zrucksetze, wu Dir dr Zuegriff uf bstimmti privati Date megli mache, wu mit Dym Benutzerkonto do verchnipft sin.\n\nDes sottsch nume mache, wänn Du d Token us Versää mit eberem teilt hesch oder Dy Konto gfehrdet isch.",
        "resettokens-no-tokens": "S git kei Token zum Zrucksetze.",
-       "resettokens-legend": "Token zrucksetze",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (aktuälle Wärt: $2)",
        "resettokens-watchlist-token": "Token fir dr Webfeed (Atom/RSS) vu dr [[Special:Watchlist|Änderigen an Syten uf Dyre Beobachtuislischt]]",
        "savearticle": "Syte spychere",
        "preview": "Vorschou",
        "showpreview": "Vorschau aaluege",
-       "showdiff": "Zeig Änderige",
+       "showdiff": "Änderige zeige",
        "blankarticle": "<strong>Warnig:</strong> D Syte, wu Du aalaisch, isch läär.\nWänn Du nomol uf „{{int:savearticle}}“ klicksch, wird d Syte ohni Inhalt aaglait.",
        "anoneditwarning": "<strong>Warnig:</strong> Du bisch nit aagmäldet. Dy IP-Adräss wird effetli sichtbar, wänn Du Bearbeitige machsch. Wänn di <strong>[$1 aamälde duesch]</strong> oder <strong>[$2 e Benutzerkonto aalaisch]</strong>, wäre Bearbeitige zämme mit andere Bytreg Dym Nenutzername zuegordnet.",
        "anonpreviewwarning": "''Du bisch nit aagmäldet. Bim Spychere wird Dyy IP-Adräss yydrait in d Versionsgschicht vu däre Syte.''",
        "missingsummary": "'''Obacht:''' Du hesch kei Zämefassig aagee. Wenn du nomol uf Spychere drucksch, wird d Änderung ohni gspychert.",
+       "selfredirect": "<strong>Obacht:</strong> Du bisch die Syten uf sech sälber am Wyterleite.\nVilech hesch für d Wyterleitig ds falsche Zil y’gä, oder vilech bisch di falschi Syten am bearbeite.\nWe d’ nomal «{{int:savearticle}}» kliksch, de wird d Wyterleitig einewäg agleit.",
        "missingcommenttext": "Bitte gib Dyy Kommentar unte yy.",
        "missingcommentheader": "'''ACHTIG:''' Du hesch kei Iberschrift im Fäld „Betreff:“ yygee. Wänn nomol uf „{{int:savearticle}}“ drucksch, wird Dyyni Bearbeitig ohni Iberschrift gspicheret.",
        "summary-preview": "Vorschou vor Zämefassig:",
        "subject-preview": "Vorschau vum Betreff:",
+       "previewerrortext": "Es het e Fähler ’gä bim Versuech, e Vorschou vo dynen Änderige z zeige.",
        "blockedtitle": "Benutzer isch gsperrt.",
        "blockedtext": "'''Dyy Benutzername oder Dyyni IP-Adräss isch gsperrt wore.'''\n\nD Sperrig isch vu $1 uusgfiert wore.\nAs Grund isch ''$2'' aagee wore.\n\n* Aafang vu dr Sperrig: $8\n* Ändi vu dr Sperrig: $6\n* Sperrig betrifft: $7\n\nDu chasch $1 oder e andere [[{{MediaWiki:Grouppage-sysop}}|Ammann]] kontaktiere go dischpetiere iber die Sperrig.\nDu chasch d „E-Mail an dää Benutzer“-Funktion nit bruche, solang kei giltigi E-Mail-Adräss in Dyyne [[Special:Preferences|Benutzerkonto-Yystellige]] yydrait isch, oder solang die Funktion fir Di gsperrt isch.\nDyy aktuälli IP-Adräss isch $3, un d Sperr-ID isch #$5.\nBitte fieg in jedi Aafrog, wu du stellsch, alli Information yy.",
        "autoblockedtext": "Dyyni IP-Adräss isch automatisch gsperrt wore, wel si vu me andere Benutzer brucht woren isch, wu dur $1 gsperrt woren isch.\nAs Grund isch aagee wore:\n\n:''$2''\n\n* Aafang vu dr Sperri: $8\n* Änd vu dr Sperri: $6\n* Sperre betrifft: $7\n\nDu chasch $1 oder ein vu dr andre [[{{MediaWiki:Grouppage-sysop}}|Ammanne]] kontaktiere, zum iber die Sperri z diskutiere.\n\nDu chasch d „E-Mail an dää Benutzer“-Funktion nit nutze, solange kei giltigi E-Mail-Adräss in Dyne  [[Special:Preferences|Benutzerkonto-Yystellige]] yytrait isch oder die Funktion fir di gsperrt woren isch.\n\nDyy aktuäll IP-Adräss isch $3, un d Sperr-ID isch $5.\nBitte fieg alli Informatione jedere Aafrog zue, wu Du stellsch.",
        "yourdiff": "Unterschid",
        "copyrightwarning": "'''Bitte <big>kopier kener Internetsyte</big>, wo nid dyner eigete sy, bruuch <big>kener urhäberrächtlech gschützte Wärch</big> ohni Erloubnis vor Copyright-Inhaberschaft!'''<br />\nHiemit gisch du zue, das du dä Tekscht '''sälber gschribe''' hesch, das der Tekscht Allgmeinguet ('''public domain''') isch, oder das der '''Copyright-Inhaberschaft''' iri '''Zuestimmig''' het 'gä. Falls dä Tekscht scho nöumen anders isch veröffentlecht worde, de schryb das bitte uf d Diskussionssyte.\n<i>Bis dir bewusst, dass alli {{SITENAME}}-Byträg outomatisch under der „$2“ stöh (für Details vgl. $1). We du nid wosch, das anderi dy Bytrag chöu veränderen u wyterverbreite, de drück nid uf „Syte spychere“.</i>",
        "copyrightwarning2": "Dängge Si dra, dass alli Änderige {{GRAMMAR:dativ {{SITENAME}}}} vo andere Benutzer wider gänderet oder glöscht chönne wärde. Wenn Si nit wänn, dass ander Lüt an Ihrem Tekscht ummedoktere denn schicke Si ihn jetz nit ab.<br />\nSi verspräche uns usserdäm, dass Si des alles selber gschribe oder vo nere Quälle kopiert hen, wo Public Domain odr sunscht frei isch (lueg $1 für Details).\n'''SETZE SI DO OHNI ERLAUBNIS KEINI URHEBERRÄCHTLICH GSCHÜTZTI WÄRK INE!'''",
+       "editpage-cannot-use-custom-model": "Ds Inhaltsmodäll vo dere Syte lat sech nid la ändere.",
        "longpageerror": "'''Fähler: Dä Täxt, wu Du spychere wit, isch {{PLURAL:$1|ei Kilobyte|$1 Kilobyte}} groß. Des isch greßer wie s erlaubt Maximum vu {{PLURAL:$2|eim Kilobyte|$2 Kilobyte}}.''' S Spychere isch nit megli.",
        "readonlywarning": "'''Achtig: D Datebank isch fir Wartigsarbete gesperrt. Wäge däm chenne Dyyni Änderige im Momänt nit gspycheret wäre.\nSichere de Täxt bitte lokal uf Dyynem Computer un versuech speter nomol, d Änderige z ibertrage.'''\n\nGrund fir d Sperri: $1",
        "protectedpagewarning": "'''WARNIG: Die Syten isch gsperrt wore, ass si nume Benutzer mit Administrator-Rächt chenne verändere.'''\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
        "semiprotectedpagewarning": "'''Obacht''': Die Syte isch halb gsperrt, ass si nume vu aagmäldete Benutzer cha bearbeitet wäre.\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
-       "cascadeprotectedwarning": "'''ACHTIG: Die Syte isch gsperrt. Wäg däm cha si nume vu Benutzer mit Ammannerächt bearbeitet wäre. Si isch in die {{PLURAL:$1|Syte|Syte}} yybunde, wu mit ere Kaskadesperroption gschitzt {{PLURAL:$1|isch|sin}}:'''",
+       "cascadeprotectedwarning": "<strong>Obacht:</strong> Die Syten isch gschützt. Nume Lüt mit Administrationsrächt (Ammannen oder -froue) chöü sen ändere. Der Grund derfür isch, das si i di {{PLURAL:$1|folgendi|folgende}} Syten isch y’bunde, wo mit ere Kaskadesperroption gschützt {{PLURAL:$1|isch|sy}}:",
        "titleprotectedwarning": "'''Obacht: S Aalege vu däre Syte isch gsperrt. Wäg däm bruucht mer [[Special:ListGroupRights|bstimmti Rächt]] go si aalege.'''\nAs Referänz wird do dr letscht Logbuechyytrag aagee:",
        "templatesused": "{{PLURAL:$1|Vorlag, wu in däm Artikel brucht wird|Vorlage, wu in däm Artikel brucht wäre}}:",
        "templatesusedpreview": "{{PLURAL:$1|Vorlag, wu in däre Vorschau brucht wird|Vorlage, wu in däre Vorschau brucht wäre}}:",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Läärs Objekt",
+       "content-json-empty-array": "Läären Array",
+       "duplicate-args-warning": "<strong>Obacht:</strong> D Syte [[:$1]] rüefft [[:$2]] ab. Im Abrueff het der Parameter «$3» meh weder ei Wärt. Nume der letst Wärt chunt zum Zug.",
        "duplicate-args-category": "Syte, wu doppleti Argumänt in Vorlagenufruef verwände",
        "duplicate-args-category-desc": "Uf dr Syte het s Vorlagenufruef, wu Duplikat vu Argumänt verwände, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Achtig: In däre Syte het s z vyyl Ufruef vu ufwändige Parserfunktione.\n\nS {{PLURAL:$2|derf nid meh wie ein Ufruef|derfe nid meh wie $1 Ufruef}} gee.",
        "page_last": "Ändi",
        "histlegend": "Du chasch zwei Versionen uswähle und verglyche.<br />\nErklärig: (aktuell) = Underschid zu jetz,\n(vorane) = Underschid zur alte Version, <strong>K</strong> = chlyni Änderig",
        "history-fieldset-title": "Suech in dr Versionsgschicht",
-       "history-show-deleted": "nume gleschti Versione",
+       "history-show-deleted": "Nume gleschti Versione",
        "histfirst": "eltischti",
        "histlast": "neischti",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Bytes}})",
        "history-feed-description": "Versionsgschicht fir die Syte in {{SITENAME}}",
        "history-feed-item-nocomment": "$1 um $2",
        "history-feed-empty": "Di aagforderet Syte git s nid. Villicht isch si glescht oder verschobe wore. [[Special:Search|Suech]] {{SITENAME}} fir neji Syte, wu passe.",
+       "history-edit-tags": "Markierige vo usgwählte Versionen ändere",
        "rev-deleted-comment": "(Zämmefassig uusegnuh)",
        "rev-deleted-user": "(Benutzername uusegnuh)",
-       "rev-deleted-event": "(Logbuechaktion uusegnuh)",
+       "rev-deleted-event": "(Logbuechdetails uusegnuh)",
        "rev-deleted-user-contribs": "[Benutzername oder IP-Adräss uusegnuu - Bearbeitig in dr Byytragslischt versteckt]",
        "rev-deleted-text-permission": "Die Version isch '''glescht''' wore.\nInformation zue dr Leschig un e Begrindig het s im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech].",
        "rev-suppressed-text-permission": "Die Version isch <strong>unterdruckt</strong> wore.\nEinzelheite het s im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Oversight-Logbuech].",
        "rev-showdeleted": "zeig",
        "revisiondelete": "Versione lesche/widerherstelle",
        "revdelete-nooldid-title": "Kei Version aagee",
-       "revdelete-nooldid-text": "Du hesch entwäder kei Version aagee, wu die Aktion soll usgfiert wäre, die usgwehlt Version git s nid oder Du versuechsch di aktuäll Version z verstecke.",
+       "revdelete-nooldid-text": "Entweder hesch kei Zilversion usgwählt, für die Funktion drann uszfüere, oder di usgwählti Zilversion git’s nid oder du probiersch, di aktuelli Version z verstecke.",
        "revdelete-no-file": "D Datei, wu Du aagee hesch, git s nit.",
        "revdelete-show-file-confirm": "Bisch sicher, ass Du di glescht Version vu dr Datei „<nowiki>$1</nowiki>“ vum $2 am $3 witt aaluege?",
        "revdelete-show-file-submit": "Jo",
        "revdelete-legend": "Setze vu dr Sichtbarkeits-Yyschränkige",
        "revdelete-hide-text": "Täxt vu dr Version versteckle",
        "revdelete-hide-image": "Bildinhalt versteckle",
-       "revdelete-hide-name": "Logbuech-Aktion versteckle",
+       "revdelete-hide-name": "Zil u Parameter verstecke",
        "revdelete-hide-comment": "Bearbeitigskommentar versteckle",
        "revdelete-hide-user": "Benutzername/d IP vum Bearbeiter versteckle",
        "revdelete-hide-restricted": "Date vu Ammanne glyych unterdrucke wie vu andere",
        "mergehistory-empty": "S chenne kei Versione zämegfierd wäre.",
        "mergehistory-success": "{{PLURAL:$3|1 Version|$3 Versione}} vu „[[:$1]]“ isch no „[[:$2]]“ zämegfierd.",
        "mergehistory-fail": "Zämefierig vu dr Versione nid megli, bitte prief d Syte un d Zytaagobe.",
+       "mergehistory-fail-toobig": "D Versionsgschichte lö sech nid la zämefüere, wil me meh weder ds Limit {{PLURAL:$1|eire Version|$1 Versione}} müesst verschiebe.",
        "mergehistory-no-source": "Ursprungssyte „$1“ isch nit vorhande.",
        "mergehistory-no-destination": "Ziilsyte „$1“ isch nit vorhande.",
        "mergehistory-invalid-source": "Ursprungssyte muess e giltige Sytename syy.",
        "editundo": "rückgängig",
        "diff-empty": "(kei Unterschid)",
        "diff-multi-sameuser": "({{PLURAL:$1|E Version vum nämlige Benutzer, wu derzwische lyt, wird|$1 Versione vum nämlige Benutzer, wu derzwische lige, wäre}} nit aazeigt)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Ei Version|$1 Versione}} derzwüsche vo {{PLURAL:$2|öpper anderem|$2 andernen}} isch nid azeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ei Version|$1 Versione}} vu meh {{PLURAL:$2|eim Benutzer|$2 Benutzer}}, {{PLURAL:$1|wu derzwische lyt un nit aazeigt wird|wu derzwische lige un nit aazeigt wäre}})",
        "difference-missing-revision": "{{PLURAL:$2|Ei Version|$2 Versione}} vui däre Unterschidsaazeig ($1) {{PLURAL:$2|isch|sin}} nit gfunde wore.\n\nDää Fähler chunnt normalerwyys dur e veraltete Link zue dr Versionsgschicht vun ere Syte, wu in dr Zwischezyt glescht woren isch.\nEinzelheite chasch im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lesch-Logbuech] bschaue.",
        "searchresults": "Suech-Ergäbnis",
        "notextmatches": "Kei Iberyystimmige mit Inhalte",
        "prevn": "{{PLURAL:$1|vorige|vorigi $1}}",
        "nextn": "{{PLURAL:$1|nächschte|nächschti $1}}",
+       "prev-page": "vorderi Syte",
+       "next-page": "nächsti Syte",
        "prevn-title": "{{PLURAL:$1|Vorig Ergebnis|Vorigi $1 Ergebnis}}",
        "nextn-title": "{{PLURAL:$1|Negscht Ergebnis|Negschti $1 Ergebnis}}",
        "shown-title": "Zeig $1 {{PLURAL:$1|Ergebnis|Ergebnis}} pro Syte",
        "search-result-category-size": "{{PLURAL:$1|1 Kategorii|$1 Kategorie}} ({{PLURAL:$2|1 Unterkategorii|$2 Unterkategorie}}, {{PLURAL:$3|1 Datei|$3 Dateie}})",
        "search-redirect": "(Wyterleitig $1)",
        "search-section": "(Abschnitt $1)",
+       "search-category": "(Kategorie $1)",
+       "search-file-match": "(Resultat us em Inhalt vo Dateie)",
        "search-suggest": "Hesch „$1“ gmeint?",
+       "search-rewritten": "Resultat für $1 sy azeigt. Würklech nach $2 sueche.",
        "search-interwiki-caption": "Schweschterprojäkt",
-       "search-interwiki-default": "$1 Ergebniss:",
+       "search-interwiki-default": "Ergäbnis us $1:",
        "search-interwiki-more": "(meh)",
        "search-relatedarticle": "Verwandti",
        "searchrelated": "verwandt",
        "searchall": "alli",
        "showingresults": "Do {{PLURAL:$1|isch '''1''' Ergebnis|sin '''$1''' Ergebniss}}, s fangt aa mit dr Nummerer '''$2.'''",
+       "showingresultsinrange": "Uf der Liste {{PLURAL:$1|isch <strong>ei</strong> Kategorie|sy <strong>$1</stong> Kategorië}} vo Nummere <strong>$2</strong> bis <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Ergebnis <strong>$1</strong> vu <strong>$3</strong>|Ergebnis <strong>$1 bis $2</strong> vu <strong>$3</strong>}}",
        "search-nonefound": "Fir Dyyni Suechaafrog sin keini Ergebniss gfunde wore.",
        "powersearch-legend": "Erwytereti Suech",
        "powersearch-togglelabel": "Wehl uus:",
        "powersearch-toggleall": "Alli",
        "powersearch-togglenone": "Keini",
+       "powersearch-remember": "Uswahl für zuekünftigi Suechine merke",
        "search-external": "Externi Suech",
        "searchdisabled": "D {{SITENAME}}-Suech isch deaktiviert. Du chasch mit Google sueche, s cha aber syy ass dr Suechindex vu Google fir {{SITENAME}} veraltet isch.",
        "search-error": "Bi dr Suechi het s e Fähler gee: $1",
        "preferences": "Yystellige",
        "mypreferences": "Yystellige",
        "prefs-edits": "Aazahl vu dr Bearbeitige:",
+       "prefsnologintext2": "Bitte mäld di a, für Ystellige z ändere.",
        "prefs-skin": "Benutzeroberflechi",
        "skin-preview": "Vorschou",
        "datedefault": "kei Aagab",
        "prefs-personal": "Benutzerdate",
        "prefs-rc": "Letschti Änderige",
        "prefs-watchlist": "Beobachtigslischte",
+       "prefs-editwatchlist": "Beobachtigslisten ändere",
+       "prefs-editwatchlist-label": "Yträg uf dyre Beobachtigslisten ändere:",
+       "prefs-editwatchlist-edit": "Normal bearbeite",
+       "prefs-editwatchlist-raw": "Imene groosse Textfäld bearbeite",
+       "prefs-editwatchlist-clear": "Beobachtigsliste lääre",
        "prefs-watchlist-days": "Aazahl vu dr Täg, wu d Beobchtigslischt standardmässig soll umfasse:",
        "prefs-watchlist-days-max": "Maximal {{PLURAL:$1|ei Tag|$1 Täg}}",
        "prefs-watchlist-edits": "Maximali Zahl vu dr Yyträg:",
        "rows": "Zylene",
        "columns": "Spaltene",
        "searchresultshead": "Suech-Ergäbnis",
-       "stub-threshold": "Gleichformatierig <a href=\"#\" class=\"stub\">vu chleine Syte</a> (in Byte):",
+       "stub-threshold": "Spezielli Darstellig ($1) für Links uf chlyni Syte bis zu’re bestimmte Gröössi (i Bytes):",
+       "stub-threshold-sample-link": "Byspil",
        "stub-threshold-disabled": "Deaktiviert",
        "recentchangesdays": "Aazahl vu dr Täg, wu d Lischt vu dr  „Letschte Änderige“ standardmässig soll umfasse:",
        "recentchangesdays-max": "(Maximal $1 {{PLURAL:$1|Tag|Täg}})",
        "prefs-help-signature": "Byyträg uf Diskussionssyte sotte mit „<nowiki>~~~~</nowiki>“ unterschribe wäre, was derno in d Unterschrift mit eme Zytstämpfel umgwandlet wird.",
        "badsig": "Dr Syntax vu dr Signatur isch nid giltig; bitte d HTML iberpriefe.",
        "badsiglength": "Dyyni Unterschrift isch z lang. Si derf hegschtens $1 {{PLURAL:$1|Zeiche|Zeiche}} lang syy.",
-       "yourgender": "Wie witt gärn bschribe wäre?",
-       "gender-unknown": "Ich wett doderzue kei Aagab mache",
-       "gender-male": "Är schafft an Syte",
-       "gender-female": "Si schafft an Syte",
-       "prefs-help-gender": "Optional: bruucht fir gschlächtsspezifischi Adrässierig dur d Software. Die Information isch effentlig.\n\nDes isch e frejwilligi Aagab. D Software brucht si go Di aarede un as Hiiwys fir anderi dur d Verwändig vum grammatische Gschlächt. Die Information isch effetli.",
+       "yourgender": "Wie sölle Systemmäldigen über di brichte?",
+       "gender-unknown": "«Der Benutzer», «der {dy Name}», «syni Bearbeitig», «är schrybt» etc.",
+       "gender-male": "«Der Benutzer», «der {dy Name}», «syni Bearbeitig», «är schrybt» etc.",
+       "gender-female": "«D Benutzerin», «d {dy Name}», «iri Bearbeitig», «si schrybt» etc.",
+       "prefs-help-gender": "* Die Agab isch freiwillig. D Software bruucht se, für di mit em korräkte grammatische Genus azrede oder gägenüber anderne z erwähne. Die Information isch öffetlech z gseh.\n\n* By der ersten Option wird ds generische Maskulinum azeigt. Es chunt also uf ds Glychen use, wi we me di dritti Option wählt.",
        "email": "E-Mail",
-       "prefs-help-realname": "* <strong>Dyy ächte Name</strong> (optional): Wänn du wetsch, ass Dyyni Änderige uf Dii chenne zruckgfierd wäre.",
+       "prefs-help-realname": "Der ächt Namen isch optional.\nWe d’nen agisch, de lö sech dyni Byträg uf di la zrüggfüere.",
        "prefs-help-email": "D Aagab vun ere E-Mail isch optional, macht aber s Zueschicke vun eme Ersatzpasswort meglig, wänn Du dyy Passwort vergässe hesch.",
-       "prefs-help-email-others": "Mit andere Benutzer chasch au iber d Benutzerdiskussionssyte Kontakt ufneh, ohne dass Du dyy Identitet muesch uffelege.",
+       "prefs-help-email-others": "Ussertdäm chasch es zuela, das anderi dir über’ne Link uf dym Wikipedia-Konto (Benutzersyte) es E-Mail chöü schicke.\nDyni E-Mail-Adrässen überchöme si derby nid z gseh.",
        "prefs-help-email-required": "S brucht e giltigi E-Mail-Adräss.",
        "prefs-info": "Basisinformatione",
        "prefs-i18n": "Internationalisierig",
        "prefs-dateformat": "Datumsformat",
        "prefs-timeoffset": "Zytunterschid",
        "prefs-advancedediting": "Allgmeini Optione",
+       "prefs-editor": "Bearbeitigsfänster",
+       "prefs-preview": "Vorschou",
        "prefs-advancedrc": "Erwytereti Optione",
        "prefs-advancedrendering": "Erwytereti Optione",
        "prefs-advancedsearchoptions": "Erwytereti Optione",
        "prefs-advancedwatchlist": "Erwytereti Optione",
        "prefs-displayrc": "Aazeigoptione",
        "prefs-displaywatchlist": "Aazeigoptione",
+       "prefs-tokenwatchlist": "Schlüssel für persönleche Webfeed",
        "prefs-diffs": "Versionsverglych",
+       "prefs-help-prefershttps": "Die Ystellig würkt sech uus, we du di ds nächste Mal amäldisch.",
+       "prefswarning-warning": "Du hesch Ystellige g’änderet wo no nid gspycheret sy.\nWe du die Syte verlasch, ohni uf «$1» z drücke, de gö die Änderige verlore.",
+       "prefs-tabs-navigation-hint": "Tipp: Mit der linggen u der rächte Pfyltaste chasch zwüsche de Tabs wächsle.",
        "email-address-validity-valid": "Siht giltig uus",
        "email-address-validity-invalid": "S brucht e giltigi Adräss!",
        "userrights": "Benutzerrächtsverwaltig",
        "userrights-lookup-user": "Verwalt d Gruppezuegherigkeit",
        "userrights-user-editname": "Benutzername:",
        "editusergroup": "Ändere vo Benutzerrächt",
-       "editinguser": "Am Ändere vu dr Benutzerrächt vu '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Bearbeit d Gruppezuegherigkeit vum Benutzer",
-       "saveusergroups": "Spychere d Gruppezuegherigkeit",
+       "editinguser": "{{GENDER:$1|Em <strong>[[User:$1|$1]]</strong> $2 syni Rächt|Der <strong>[[User:$1|$1]]</strong> $2 iri Rächt|Rächt vo <strong>[[User:$1|$1]]</strong> $2}} bearbeite",
+       "userrights-editusergroup": "Gruppezuegherigkeit bearbeite",
+       "saveusergroups": "Gruppezuegherigkeit spychere",
        "userrights-groupsmember": "Mitgliid vu:",
        "userrights-groupsmember-auto": "Automatisch Mitglid vu:",
-       "userrights-groups-help": "Du chasch d Gruppezuegherigkeit fir dää Benutzer ändere:\n* E markiert Chäschtli bedytet, ass dr Benutzer Mitgliid vu däre Gruppe isch\n* E * bedytet, ass Du s Benutzerrächt nit wider chasch zruckneh, wänn s erteilt isch (oder umgchehrt).",
+       "userrights-groups-help": "Du chasch {{GENDER:$1|däm Benutzer syni|dere Benutzerin iri|dere Person iri}} Gruppezueghörigkeit ändere:\n* Es markierts Chästli bedütet, das {{GENDER:$1|der Benutzer|d Benutzerin|d Person}} zur Gruppe ghört.\n* Es nid markierts Chästli bedütet, das {{GENDER:$1|der Benutzer|d Benutzerin|d Person}} nid zur Gruppe ghört.\n* Es Stärnli «*» nach emne Gruppename zeigt a, das du die Gruppezueghörigkeit zwar chasch ändere, aber das du ein Änderig nümm chasch rückgängig mache.",
        "userrights-reason": "Grund:",
        "userrights-no-interwiki": "Du hesch nit d Berächtigung, Benutzerrächt in andere Wiki z ändere.",
        "userrights-nodatabase": "D Datebank $1 git s nit oder si isch nit lokal.",
        "userrights-notallowed": "Du hesch nit d Berächtigung zum Benutzerrächt vergee oder ewägnee.",
        "userrights-changeable-col": "Gruppezuegherigkeit, wu Du chasch ändere",
        "userrights-unchangeable-col": "Gruppezuegherigkeit, wu Du nit chasch ändere",
+       "userrights-conflict": "Di veränderete Rächt göh nid uuf! Bitte lueg d Änderige düren u tue se nomal spychere.",
+       "userrights-removed-self": "Du hesch dir di eigete Rächt erfolgrych furtgnoh. Drum hesch kei Zuegriff meh uf die Syte.",
        "group": "Grupp:",
        "group-user": "Benutzer",
        "group-autoconfirmed": "Bstetigti Benutzer",
        "right-move": "Syte verschiebe",
        "right-move-subpages": "Syte verschiebe mitsamt dr Untersyte",
        "right-move-rootuserpages": "Haupt-Benutzersyte verschiebe",
+       "right-move-categorypages": "Kategoriesyte verschiebe",
        "right-movefile": "Dateie verschiebe",
        "right-suppressredirect": "Bim Verschiebe s Aalege vun ere Wyterleitig unterdrucke",
        "right-upload": "Dateie uffelade",
        "right-deletedtext": "Gleschti Text un Versionsunterschid zwische gleschte Versionen aaluege",
        "right-browsearchive": "Gleschti Syte sueche",
        "right-undelete": "Syte widerherstelle",
-       "right-suppressrevision": "Versione, wu au vor Ammanne verborge sin, aaluege un widerherstelle",
+       "right-suppressrevision": "Bestimmti Versione vor allne Lüt verstecke, wider füre holen oder aluege.",
+       "right-viewsuppressed": "Vor allne Lüt versteckti Versionen aluege",
        "right-suppressionlog": "Privati Logbiecher aaluege",
        "right-block": "Benutzer sperre (Schrybrächt)",
        "right-blockemail": "Benutzer am Verschicke vu E-Mail hindere",
        "right-proxyunbannable": "Uusnahm vu automatische Proxysperrine",
        "right-unblockself": "Sich sälber entsperre",
        "right-protect": "Syteschutzstatus änderen un kaskadegschitzti Syte bearbeite",
-       "right-editprotected": "Gschitzti Syte bearbeite (ohni Kaskadeschutz)",
+       "right-editprotected": "Mit «{{int:protect-level-sysop}}» gschützti Syten ändere",
+       "right-editsemiprotected": "Mit «{{protect-level-autoconfirmed}}» gschützti Syten ändere",
+       "right-editcontentmodel": "Inhaltsmodäll vo’re Syten ändere",
        "right-editinterface": "Benutzerinterface bearbeite",
        "right-editusercssjs": "Bearbeite vu CSS- und JS-Dateie vu andere Benutzer",
        "right-editusercss": "Bearbeite vu CSS-Dateie vu andere Benutzer",
        "right-edituserjs": "Bearbeite vu JS-Dateie vu andere Benutzer",
+       "right-editmyusercss": "Dyni eigete CSS-Dateien ändere",
+       "right-editmyuserjs": "Eigeti JavaScript-Dateie bearbeite",
+       "right-viewmywatchlist": "Eigeti Beobachtigslisten aluege",
+       "right-editmywatchlist": "Eigeti Beobachtigslisten ändere. Ou ohni das Rächt chöme dür’nes paar Aktione Syten uf d Beobachtigsliste.",
+       "right-viewmyprivateinfo": "Eigeti privati Daten aluege (byspilswys E-Mail-Adrässe, ächte Name)",
+       "right-editmyprivateinfo": "Eigeti privati Daten ändere (byspilswys E-Mail-Adrässe, ächte Name)",
+       "right-editmyoptions": "Eigeti Ystelligen ändere",
        "right-rollback": "D Bearbeitige vum letschte Benutzer, wu ne einzelni Syte bearbeitet het, schnell zrucksetze",
        "right-markbotedits": "Schnell zruckgsetzti Bearbeitige as Bot-Bearbeitig markiere",
        "right-noratelimit": "Kei Bschränkig dur Limit",
        "right-override-export-depth": "Exportier Syte mitsamt dr vergleichte Syte bis zuen ere Tiefi vu 5",
        "right-sendemail": "E-Mail an anderi Benutzer schicke",
        "right-passwordreset": "Passwort vun eme Benutzer zruggsetze",
+       "right-managechangetags": "[[Special:Tags|Markierigen]] ir Datebank schaffen oder lösche",
+       "right-applychangetags": "Zäme mit den eigeten Änderige [[Special:Tags|Markierigen]] abringe",
+       "right-changetags": "Beliebigi [[Special:Tags|Markierige]] by einzelne Versionen oder Logbuechyträg derzuetue oder lösche",
        "newuserlogpage": "Nejaamäldigs-Logbuech",
        "newuserlogpagetext": "Des isch e Logbuech fir nej aagleiti Benutzerchonte.",
        "rightslog": "Benutzerrächt-Logbuech",
        "action-createpage": "Syten aazlege",
        "action-createtalk": "Diskussionssyten aazlege",
        "action-createaccount": "e Benutzerkonto aazlege",
+       "action-history": "d Versionegschicht vo dere Syten azluege",
        "action-minoredit": "die Bearbeitig as chlei z markiere",
        "action-move": "die Syte z verschiebe",
        "action-move-subpages": "die Syte un di zuegherige Untersyte z verschiebe",
        "action-move-rootuserpages": "Haupt-Benutzersyte z verschiebe",
+       "action-move-categorypages": "Kategoriesyte z verschiebe",
        "action-movefile": "Die Datei verschiebe",
        "action-upload": "Dateie uffezlade",
        "action-reupload": "die vorhandene Datei z iberschryybe",
        "action-userrights-interwiki": "d Rächt vu Benutzer in andere Wiki z ändere",
        "action-siteadmin": "d Datebank z sperre oder frejzgee",
        "action-sendemail": "E-Mail z schicke",
+       "action-editmywatchlist": "dyni Beobachtigsliste z ändere",
+       "action-viewmywatchlist": "dyni Beobachtigslisten azluege",
+       "action-viewmyprivateinfo": "dyni privati Information azluege",
+       "action-editmyprivateinfo": "dyni privati Information z ändere",
+       "action-editcontentmodel": "ds Inhaltsmodäll vo dere Syte z ändere",
+       "action-managechangetags": "Marierigen ir Databank z schaffen oder z lösche",
+       "action-applychangetags": "zäme mit dynen Änderige Markierigen azbringe",
+       "action-changetags": "beliebigi Markierige by einzelne Versionen oder Logbuechyträg derzueztue oder z lösche",
        "nchanges": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "enhancedrc-since-last-visit": "{{PLURAL:$1|$1}} syt em letste Bsuech",
        "enhancedrc-history": "Versionsgschicht",
        "recentchanges": "Letschti Änderige",
        "recentchanges-legend": "Optione vu dr Aazeig",
        "recentchanges-summary": "Uf däre Syte chasch di letschte Änderige in däm Wiki aaluege.",
+       "recentchanges-noresult": "Im usgwählte Zytruum het’s kener Änderige ’gä.",
        "recentchanges-feed-description": "Di letschten Änderige vo {{SITENAME}} i däm Feed abonniere.",
        "recentchanges-label-newpage": "Mit däre Bearbeitig isch e neji Syte aagleit wore",
        "recentchanges-label-minor": "Des isch e chleini Änderig",
        "recentchanges-label-plusminus": "Di gänderet Sytegreßi (Aazahl in Byte)",
        "recentchanges-legend-heading": "'''Legänd:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lueg au d [[Special:NewPages|Lischt vu neie Syte]])",
-       "rcnotefrom": "Des sin d Ändrige syter <b>$2</b> (bis zem <b>$1</b> zeigt).",
+       "rcnotefrom": "Azeigt {{PLURAL:$5|isch d Änderig|sy maximal <strong>$1</strong> Änderige}} syt <strong>$3, $4</strong>.",
        "rclistfrom": "Nume Änderige syt $3, $2 Uhr zeige.",
        "rcshowhideminor": "Chlynigkeite $1",
        "rcshowhideminor-show": "aazeige",
        "newpageletter": "N",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|Benutzer, wu beobachtet|Benutzer, wu beobachte}}]",
-       "rc_categories": "Nume Syten us dr Kategorie (trennt mit „|“):",
-       "rc_categories_any": "Alli",
+       "rc_categories": "Nume Syten us bestimmte Kategorie (mit «|» trenne):",
+       "rc_categories_any": "Beliebigi vo den usgwählte",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Byte}} no dr Änderig",
        "newsectionsummary": "Neje Abschnitt /* $1 */",
        "rc-enhanced-expand": "Detail aazeige",
        "reuploaddesc": "Abbrächen un zrugg zue dr Syte \"Uffelade\"",
        "upload-tryagain": "Gändereti Dateibschryybig abschicke",
        "uploadnologin": "Nit aagmäldet",
-       "uploadnologintext": "Si mien [[Special:UserLogin|aagmäldet syy]], zum Dateie uffelade z chenne.",
+       "uploadnologintext": "Für Dateien ufezlade, muesch di $1.",
        "upload_directory_missing": "S Upload-Verzeichnis ($1) fählt un het au dur dr Netzserver nit chenne aagleit wäre.",
        "upload_directory_read_only": "Dr Netzserver het kei Schryybrächt fir s Upload-Verzeichnis ($1).",
        "uploaderror": "Fähler bim Uffelade",
        "upload-recreate-warning": "'''Warnig: E Datei mit däm Name isch scho mol glescht oder verschobe wore.'''\n\nDo het s e Uuszug us em Lesch- un eme Verschiebigslogbuech:",
        "uploadtext": "Verwänd des Formular unte zum Dateie uffelade.\nZum friejer uffegladeni Dateie aazluege oder z sueche lueg uf dr [[Special:FileList|Lischt vu uffegladene Dateie]],\nWeli Dateie uffeglade sin, sihsch im [[Special:Log/upload|Logbuech vu dr uffegladene Dateie]], weli glescht sin im [[Special:Log/delete|Lesch-Logbuech]]\n\nZum e Datei oder e Bild in ere Syte yyzböue, schryybsch eifach:\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.jpg]]</nowiki>''' fir di voll Version vu dr Datei\n* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:file.png|al text]]</nowiki>''' fir e 200 Pixel grossi Version im e Chaschte mit 'alt text' as Bschrybig\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' fir e diräkt Link zuer dr Datei ohni ass si aazeigt wird",
-       "upload-permitted": "Dateitype, wu erlaubt sin: $1.",
-       "upload-preferred": "Dateitype, wu bevorzugt sin: $1.",
-       "upload-prohibited": "Dateitype, wu nit erlaubt sin: $1.",
+       "upload-permitted": "{{PLURAL:$2|Dateityp, wu erlaubt isch|Dateitype, wu erlaubt sin}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Dateityp, wu bevorzugt isch|Dateitype, wu bevorzugt sin}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Dateityp, wu nit erlaubt isch|Dateitype, wu nit erlaubt sin}}: $1.",
        "uploadlogpage": "Dateie-Logbuech",
        "uploadlogpagetext": "Des isch s Logbuech vu dr uffegladene Dateie.\nLueg au d [[Special:NewFiles|Galerii vu neije Dateie]] fir e visuälle Iberblick.",
        "filename": "Dateiname",
        "largefileserver": "Die Datei isch gresser wie die vum Server yygstellti Maximalgressi.",
        "emptyfile": "Di uffeglade Datei isch schyyns läär. Dr Grund cha ne Tippfähler im Dateiname syy. Bitte iberprief, eb du die Datei wirkli wit uffelade.",
        "windows-nonascii-filename": "Des Wiki unterstitzt kei Dateinäme mit Sonderzeiche.",
-       "fileexists": "S git scho ne Datei mit däm Name.\nWänn Du uf \"Datei spichere\" drucksch, no wird die Datei iberschribe.\nBitte prief <strong>[[:$1]]</strong>, wänn Der nit sicher bisch.\n[[$1|thumb]]",
+       "fileexists": "Es git scho’ne Datei mit däm Name. Bitte prüeff <strong>[[:$1]]</strong>, we d’ nid sicher bisch, öb {{GENDER:|d’}} se wosch ändere.\n[[$1|thumb]]",
        "filepageexists": "E Bschryybigssyte isch scho as <strong>[[:$1]]</strong> aagleit wore, s git aber kei Datei mit däm Name.\nDie Zämmefassig, wu Du yygee hesch, wird nit uf d Bschryybigssyte ibernuh.\nDu muesch d Bschryybigssyte noch em Uffelade vu dr Datei no manuäll bearbeite.\n[[$1|thumb]]",
-       "fileexists-extension": "S git scho ne Datei mit eme ähnlige Name: [[$2|thumb]]\n* Name vu Datei, wu soll uffeglade were: <strong>[[:$1]]</strong>\n* Name vu dr Datei, wu s scho git: <strong>[[:$2]]</strong>\nBitte wehl e andre Name.",
+       "fileexists-extension": "S git scho ne Datei mit eme ähnlige Name: [[$2|thumb]]\n* Name vu Datei, wu soll uffeglade were: <strong>[[:$1]]</strong>\n* Name vu dr Datei, wu s scho git: <strong>[[:$2]]</strong>\nVilech wosch en eidütigere Name bruuche?",
        "fileexists-thumbnail-yes": "Die Datei isch schyyns e Bild mit ere verringerte Gressi ''(thumbnail)''. [[$1|thumb]]\nBitte prief d Datei <strong>[[:$1]]</strong>.\nWänn s Bild in dr Originalgressi isch, no isch s nit netig, ass e extra Vorschaubild uffeglade wird.",
        "file-thumbnail-no": "Dr Dateiname fangt mit <strong>$1</strong> aa. Des wyyst uf e Bild mit ere verringerte Gressi ''(thumbnail)'' hi.\nBitte prief, eb D s Bild in voller Uflesig vorlige hesch un lad derno des unter em Originalname uffe.",
        "fileexists-forbidden": "S git scho ne Datei mit däm Name. Si cha nit iberschribe wäre. Bitte gang zruck un lad die Datei unter eme andere Name uffe. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "S git scho ne Datei mit däm Name im Zentrale Mediearchiv.\nWänn Du die Datei einewäg wit uffelade, gang bitte zruck un ändere dr Name.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Die Datei isch e Duplikat vu {{PLURAL:$1|däre Datei|däne $1 Dateie}}:",
        "file-deleted-duplicate": "E identischi Version vu däre Datei ([[:$1]]) isch friejer scho mol glescht wore. Iberprief s Leschlogbuech, voreb Du si uffeladesch.",
+       "file-deleted-duplicate-notitle": "En idäntischi Datei isch chürzlech glöscht u der Titel underdrückt worde.\nFür d Situation vor em Wider-Ufelade z prüeffe, söttsch öpper frage, wo di underdrückte Dateidate cha aluege.",
        "uploadwarning": "Warnig",
        "uploadwarning-text": "Bitte tue unte d Dateibsschryybig ändere un versuech s nomol.",
        "savefile": "Datei spychere",
        "uploaddisabledtext": "S Uffelade vu Dateie isch deaktiviert.",
        "php-uploaddisabledtext": "S Uffelade vu PHP-Dateie isch deaktiviert wore. Bitte iberprief d file_uploads-Yystellig.",
        "uploadscripted": "In däre Datei git s HTML- oder Scriptcode, wu fälschligerwyys vun eme Webbrowser usgfiert chennt were.",
+       "upload-scripted-pi-callback": "E Datei mit Verarbeitigsbefählen imnen XML-Stylesheet cha me nid ufelade.",
+       "uploaded-script-svg": "Ir ufegladnigen SVG-Datei het’s ds Skript-Elemänt «$1».",
+       "uploaded-hostile-svg": "Im Style-Elemänt vor ufegladnigen SVG-Datei het’s unsichers CSS.",
+       "uploaded-event-handler-on-svg": "I SVG-Dateien isch ds Event-Handler-Attribut <code>$1=\"$2\"</code> nid erloubt.",
+       "uploaded-href-attribute-svg": "I SVG-Dateien isch ds href-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> mit emne nid-lokale Zil (byspilswys http://, javascript: etc.) nid erloubt.",
+       "uploaded-href-unsafe-target-svg": "Ir ufegladnige SVG-Datei het’s es href uf ds unsichere Zil <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "Ir ufegladnigen SVG-Datei het’s en «animate»-Tag, wo über ds «from»-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> chönnt href ändere.",
+       "uploaded-setting-event-handler-svg": "Ir ufegladnigen SVG-Datei het’s ds Event-Handler-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code>. Event-Handler-Attribut sy nid erloubt.",
+       "uploaded-setting-href-svg": "Es isch nid erloubt, mit emne «set»-Tag es «href»-Attribut zumenen übergordneten Elemänt derzue z tue.",
+       "uploaded-wrong-setting-svg": "Ir ufegladnigen SVG-Datei git e «set»-Tag emnen Attribut es externs Zil oder es Daten- oder Script-Zil: <code>&lt;set to=\"$1\"&gt;</code>. Das isch nid erloubt.",
+       "uploaded-setting-handler-svg": "Ir ufegladnigen SVG-Datei het’s es «handler»-Attribut mit Externem/Date/Script: <code>$1=\"$2\"</code>. Das isch nid erloubt.",
+       "uploaded-remote-url-svg": "Ir ufegladnigen SVG-Datei het’s es Style-Attribut mit emnen externen URL: <code>$1=\"$2\"</code>. Das isch nid erloubt.",
+       "uploaded-image-filter-svg": "Ir ufegladnigen SVG-Datei het’s e Bildfilter mit emnen URL: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploadscriptednamespace": "I deren SVG-Datei het’s der illegal Namensruum «$1».",
        "uploadinvalidxml": "S XML in dr uffegladene Datei het nit chenne parst wäre.",
        "uploadvirus": "In däre Datei het s e Virus! Detail: $1",
        "uploadjava": "Des isch e ZIP-Datei, wu s e CLASS-Datei vu Java din het.\nS Uffelade vu Java-Dateien isch nit gstattet, wel si s Umgoh vu Sicherheitsyyschränkige chennte megli mache.",
        "upload-too-many-redirects": "In dr URL het s zvyl Wyterleitige",
        "upload-http-error": "E HTTP-Fähler isch ufträtte: $1",
        "upload-copy-upload-invalid-domain": "As Kopi uffeladbari Dateie sin iber die Domain nit verfiegbar.",
+       "upload-dialog-title": "Datei ufelade",
+       "upload-dialog-error": "Es het e Fähler ’gä",
+       "upload-dialog-warning": "Es het e Warnig ’gä",
+       "upload-dialog-button-cancel": "Abbräche",
+       "upload-dialog-button-done": "Fertig",
+       "upload-dialog-button-save": "Spychere",
+       "upload-dialog-button-upload": "Ufelade",
+       "upload-dialog-label-select-file": "Datei ussueche",
+       "upload-dialog-label-infoform-title": "Details",
+       "upload-dialog-label-infoform-name": "Name",
+       "upload-dialog-label-infoform-description": "Beschrybig",
+       "upload-dialog-label-usage-title": "Verwändig",
+       "upload-dialog-label-usage-filename": "Dateiname",
        "backend-fail-stream": "D Datei $1 het nit chenne ibertrait wäre.",
        "backend-fail-backup": "D Datei $1 het nit chenne gsicheret wäre.",
        "backend-fail-notexists": "D Datei $1 git s nit.",
        "license": "Lizänz:",
        "license-header": "Lizänzierig",
        "nolicense": "kei Voruswahl",
+       "licenses-edit": "Linzänzoptionen ändere",
        "license-nopreview": "(s isch kei Vorschau verfiegbar)",
-       "upload_source_url": " (giltige, effentli zuegänglig URL)",
-       "upload_source_file": " (e Datei uf Dyynem Computer)",
+       "upload_source_url": " (usgsuechti Datei vomne gültige, öffetlech zuegänglechen URL)",
+       "upload_source_file": "(dyni usgsuechti Datei vo dym Computer)",
+       "listfiles-delete": "lösche",
        "listfiles-summary": "Die Spezialsyte lischtet alli uffegladene Dateie uf.",
        "listfiles_search_for": "Suech noch Datei:",
+       "listfiles-userdoesnotexist": "Ds Konto «$1» isch nid registriert.",
        "imgfile": "Datei",
        "listfiles": "Lischte vo Bilder",
        "listfiles_thumb": "Vorschaubilder",
        "listfiles_size": "Gressi",
        "listfiles_description": "Bschryybig",
        "listfiles_count": "Versione",
+       "listfiles-show-all": "Alti Versione vom Bild yschliesse",
+       "listfiles-latestversion": "Aktuelli Version",
+       "listfiles-latestversion-yes": "Ja",
+       "listfiles-latestversion-no": "Nei",
        "file-anchor-link": "Bildli",
        "filehist": "Dateiversione",
        "filehist-help": "Klick uf e Zytpunkt zu aazeige, wie s dert usgsäh het.",
        "filedelete-maintenance": "S Leschen un Widerhärstelle vu Dateie isch wäge Wartigsarbete e Zytlang deaktiviert.",
        "filedelete-maintenance-title": "D Datei cha nit glescht wäre.",
        "mimesearch": "MIME-Suechi",
-       "mimesearch-summary": "Uf däre Spezialsyte chenne d Dateie noch em MIME-Typ gfilteret wäre. In dr Yygob muess es alliwyl dr Medie- un Subtyp din haa: <code>image/jpeg</code> (lueg Bildbschryybigssyte).",
+       "mimesearch-summary": "Uf däre Spezialsyte chenne d Dateie noch em MIME-Typ gfilteret wäre. In dr Yygob muess es alliwyl dr Medie- un Subtyp din haa, byspilswys <code>image/jpeg</code> oder <code>image/*</code> (lueg Bildbschryybigssyte).",
        "mimetype": "MIME-Typ:",
        "download": "Abelade",
        "unwatchedpages": "Unbeobachteti Sytene",
        "listredirects": "Lischte vo Wyterleitige (Redirects)",
+       "listduplicatedfiles": "Liste vo Dateie mit Duplikat",
+       "listduplicatedfiles-summary": "Das isch e Liste vo Dateie, wo di aktuelli Version idäntisch isch mit der aktuelle Version von eren andere Datei. Nume lokali Dateie sy berücksichtiget.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] het [[$3|{{PLURAL:$2|eis|$2}} Duplikat]]",
        "unusedtemplates": "Nid bruuchti Vorlage",
        "unusedtemplatestext": "Die Syte lischtet alli Syten im {{ns:template}}-Namensruum uf, wu nit in andere Syte yybunden sin.\nIberprief anderi Link zue dr Vorlage, voreb Du die leschesch.",
        "unusedtemplateswlh": "Anderi Link",
        "randompage": "Zuefalls-Artikel",
        "randompage-nopages": "S het kei Syte in {{PLURAL:$2|däm Namensruum|däne Namensryym}}:  $1.",
+       "randomincategory": "Zuefälligi Syten us ere Kategorie",
+       "randomincategory-invalidcategory": "«$1» isch ke gültigi Kategoriename.",
+       "randomincategory-nopages": "Ir Kategorie [[:Category:$1|$1]] het’s kener Syte.",
+       "randomincategory-category": "Kategorie:",
+       "randomincategory-legend": "Zuefälligi Syten us ere Kategorie",
+       "randomincategory-submit": "Gang",
        "randomredirect": "Zuefälligi Wyterleitig",
        "randomredirect-nopages": "Im Namensruum „$1“ sin kei Wyterleitige vorhande.",
        "statistics": "Statistik",
        "pageswithprop-text": "Die Spezialsyte lischet Syten auf, wu ne bstimmti Syteneigeschaft bruche.",
        "pageswithprop-prop": "Eigeschaftsname:",
        "pageswithprop-submit": "Gang ane",
+       "pageswithprop-prophidden-long": "Syteneigeschaften über $1 kB sy nid azeigt",
+       "pageswithprop-prophidden-binary": "Eigeschaftswärte mit Binärdate sy versteckt ($1)",
        "doubleredirects": "Doppleti Wyterleitige (Redirects)",
        "doubleredirectstext": "Die Lischt zeigt Wyterleitige, wu uf anderi Wyterleitige verwyyse.\nIn jedere Zyylete het s Link zue dr erschte un dr zwote Wyterleitig un s Ziil vu dr zwote Wyterleitig, wu normalerwys di gwinscht Ziilsyten isch. Do sott eigetli scho di erscht Wyterleitig druf zeige.\n<del>Durgstricheni</del> Yytreg sin scho erledigt wore.",
-       "double-redirect-fixed-move": "doppleti Wyterleitig ufglest: [[$1]] → [[$2]]",
-       "double-redirect-fixed-maintenance": "Di dopplet Wyterleitig vu [[$1]] no [[$2]] isch ufglest wore.",
+       "double-redirect-fixed-move": "D Syte [[$1]] isch verschobe.\nUnder irem Namen isch automatisch e Wyterleitig uf [[$2]] agleit worde.",
+       "double-redirect-fixed-maintenance": "Doppleti Wyterleitig vo [[$1]] uf [[$2]] automatisch in ere Wartigsarbeit gflickt.",
        "double-redirect-fixer": "DoubleRedirectBot",
        "brokenredirects": "Kaputti Wyterleitige",
        "brokenredirectstext": "Die Spezialsyte lischtet Wyterleitige uf, wu zue Artikel fiere, wu s gar nid git:",
        "ninterwikis": "{{PLURAL:$1|Ei Interwikilink|$1 Interwikilink}}",
        "nlinks": "$1 {{PLURAL:$1|Link|Links}}",
        "nmembers": "$1 {{PLURAL:$1|Syte|Sytene}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|Syte}}",
        "nrevisions": "$1 {{PLURAL:$1|Revision|Revisione}}",
-       "nviews": "$1 {{PLURAL:$1|Betrachtig|Betrachtige}}",
        "nimagelinks": "Brucht uf $1 {{PLURAL:$1|Syte|Syte}}",
        "ntransclusions": "brucht uf $1 {{PLURAL:$1|Syte|Syte}}",
        "specialpage-empty": "In dr Syte het s no kei aktuälli Yytreg.",
        "unusedimages": "Verwaiste Bilder",
        "wantedcategories": "Bruuchti Kategorie, wo s no nid git",
        "wantedpages": "Artikel, wo fähle",
+       "wantedpages-summary": "Liste vo de meist-verlinkte Syte, wo’s nid git. Nid derby sy Syte, wo nume Wyterleitige druf verlinke. Syte, wo’s nid git u wo Wyterleitige druf verlinke, sy i der [[{{#special:BrokenRedirects}}|Liste vo kabutte Wyterleitige]] z finde.",
        "wantedpages-badtitle": "Nit giltige Titel im Ergebnis: $1",
        "wantedfiles": "Dateie, wu fähle",
        "wantedfiletext-cat": "Die Dateie wäre brucht, s git si aber nit. Dateie us främde Repositorie chenne einewäg do ufglischtet syy un wäre <del>durgstriche</del> dargstellt. Zuesätzli wäre Syte, wu s die nit vorhande Datei dinne het, in d [[:$1]] yygordnet.",
-       "wantedfiletext-nocat": "Die Dateie wäre brucht, s git si aber nit. Vorhandeni Dateie us främde Repositorie chenne dp einewäg ufglischtet syy un wäre <del>durgstriche</del> dargstellt.",
+       "wantedfiletext-cat-noforeign": "Die Dateie sy y’bunde, aber es git se nid. Syte, wo nid vorhandnigi Dateien ybinde, sy under [[:$1]] z finde.",
+       "wantedfiletext-nocat": "Die Dateie wäre brucht, s git si aber nit. Vorhandeni Dateie us främde Repositorie chenne do einewäg ufglischtet syy un wäre <del>durgstriche</del> dargstellt.",
+       "wantedfiletext-nocat-noforeign": "Die Dateie sy y’bunde, aber es git se nid.",
        "wantedtemplates": "Vorlage, wu fähle",
        "mostlinked": "Syte, wo am meischte druff verwyyse wird",
        "mostlinkedcategories": "Am meischte verlinkti Kategorië",
-       "mostlinkedtemplates": "Am meischten yybouti Vorlage",
+       "mostlinkedtemplates": "Meist-y’bundnigi Syte",
        "mostcategories": "Sytene mit de meischte Kategorië",
        "mostimages": "Am meischte verlinkti Dateie",
        "mostinterwikis": "Syte mit de meischte Interwikilink",
        "mostrevisions": "Syte mit de meischte Bearbeitige",
        "prefixindex": "Alli Syte (mit Präfix)",
        "prefixindex-namespace": "Alli Syte mit Präfix (Nameruum $1)",
+       "prefixindex-strip": "Präfix ir Listen abschnyde",
        "shortpages": "Churzi Artikel",
        "longpages": "Langi Artikel",
        "deadendpages": "Artikel ohni Links («Sackgasse»)",
        "deadendpagestext": "Die Syte verwyyse nit zue anderi Syte in {{SITENAME}}.",
        "protectedpages": "Gschützti Sytene",
        "protectedpages-indef": "Nume uubschränkt gschitzti Syte zeige",
+       "protectedpages-summary": "Die Liste zeigt Syte, wo momentan gschützt sy. Under «[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]» isch e Liste vo Title, wo’s nid erloubt isch, e Syte dermit azlege.",
        "protectedpages-cascade": "Nume Syte mit Kaskadeschutz",
+       "protectedpages-noredirect": "Wyterleitigen usblände",
        "protectedpagesempty": "Aktuäll sin kei Syte mit däne Parameter gschitzt.",
+       "protectedpages-timestamp": "Zytstämpel",
+       "protectedpages-page": "Syte",
+       "protectedpages-expiry": "Gschützt bis",
+       "protectedpages-performer": "Gschützt vo",
+       "protectedpages-params": "Schutzparameter",
+       "protectedpages-reason": "Grund",
+       "protectedpages-unknown-timestamp": "Unbekannt",
+       "protectedpages-unknown-performer": "Unbekannt",
        "protectedtitles": "Gsperrti Titel",
+       "protectedtitles-summary": "Die Liste zeigt Title, wo’s momentan nid erloubt isch, e Syte dermit azlege. Under «[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]» isch e Liste vo gschützte Syte z finde.",
        "protectedtitlesempty": "Im Momänt sin kei Syte fir s Nejaalege gsperrt mit däne Parameter.",
        "listusers": "Lischte vo Benutzer",
        "listusers-editsonly": "Zeig nume Benutzer mit Byytreg",
        "listusers-creationsort": "Sortiert noch em Datum",
+       "listusers-desc": "Reihefolg umchehre",
        "usereditcount": "$1 {{PLURAL:$1|Bearbeitig|Bearbeitige}}",
        "usercreated": "{{GENDER:$3|Aagleit}} uf $1 am $2",
        "newpages": "Nöji Artikel",
        "pager-older-n": "{{PLURAL:$1|vorige|vorige $1}}",
        "suppress": "Oversight",
        "querypage-disabled": "Die Spezialsyte isch deaktiviert wore us Leischtigserhaltigs-Grind.",
+       "apihelp": "API-Hilff",
+       "apihelp-no-such-module": "Ds Modul «$1» lat sech nid la finde.",
        "booksources": "ISBN-Suech",
        "booksources-search-legend": "Suech no Bezugsquälle fir Biecher",
        "booksources-search": "Sueche",
        "booksources-text": "Des isch e Lischt mit Link zue Netzsyte, wu neiji un bruchti Biecher verchaufe. S cha syy, ass es dert au meh Informatione zue dr Biecher git. {{SITENAME}} isch mit keinem vu däne Aabieter gschäftli verbunde.",
        "booksources-invalid-isbn": "D ISBN isch schyyns falsch. Lueg no Fähler in dr Kopii.",
        "specialloguserlabel": "Benutzer, wu des gmacht het:",
-       "speciallogtitlelabel": "Ziil (Titel oder Benutzer):",
+       "speciallogtitlelabel": "Zil (Titel oder «{{ns:user}}:Name» für Benutzer/inne):",
        "log": "Logbiecher",
        "all-logs-page": "Alli effetligi Logbüecher",
        "alllogstext": "Kombinierti Aasicht vu alle in {{SITENAME}} gfierte Protokoll.\nD Aazeig cha dur d Uuswahl vun eme Protokoll, eme Benutzername oder eme Sytename yygschränkt wäre (Acht gee uf d Gross- un Chleischrybig).",
        "logempty": "Kei Yyträg gfunde, wu passe.",
        "log-title-wildcard": "Titel fangt aa mit",
        "showhideselectedlogentries": "Uusgwehlti Logbuechyytreg aazeige/verstecke",
+       "log-edit-tags": "Markierige vo den usgwählte Logbuechyträg ändere",
        "allpages": "alli Sytene",
        "nextpage": "Nächscht Syte ($1)",
        "prevpage": "Vorderi Syte ($1)",
        "allpagesto": "Syten aazeige bis:",
        "allarticles": "alli Artikel",
        "allinnamespace": "alli Sytene im Namensruum $1",
-       "allpagessubmit": "gang",
+       "allpagessubmit": "Sueche",
        "allpagesprefix": "Alli Sytene mit em Präfix:",
        "allpagesbadtitle": "Dr Sytename, wu yygee hesch, isch nit giltig: Er het entwäder e vorgstellt Sproch-, e Interwiki-Chirzel oder s het ei oder meh Zeiche din, wu in eme Sytename nit derfe brucht wäre.",
        "allpages-bad-ns": "Dr Namensruum „$1“ isch in {{SITENAME}} nit vorhande.",
        "linksearch-pat": "Suechmuschter:",
        "linksearch-ns": "Namensruum:",
        "linksearch-ok": "Sueche",
-       "linksearch-text": "Die Spezialsyte macht d Suechi no Syte megli, wu s bstimmti Weblink din het. Doderby chenne Platzhalter wie zem Byschpel <code>*.byschpel.de</code> brucht wäre. S mueß zmindecht ei Top-Level-Domain, z. B. „*.org“. aagee wäre. <br />{{PLURAL:$2|Unterstitzt Protokoll|Unterstitzti Protokoll}}: <code>$1</code> (Standard isch http, wänn kei Protokoll aagee isch.)",
+       "linksearch-text": "Die Spezialsyte macht d Suechi no Syte megli, wu s bstimmti Weblink din het. Doderby chenne Platzhalter wie zem Byschpel <code>*.byschpel.de</code> brucht wäre. S mueß zmindecht ei Top-Level-Domain, z. B. „*.org“. aagee wäre. <br />{{PLURAL:$2|Unterstitzt Protokoll|Unterstitzti Protokoll}}: $1 (Standard isch http, wänn kei Protokoll aagee isch.)",
        "linksearch-line": "$1 isch vo $2 verknüpft",
        "linksearch-error": "Platzhalter chönne numme am Aafang verwändet werre.",
        "listusersfrom": "Zeig Benutzer ab:",
        "listgrouprights-removegroup-self": "Cha {{PLURAL:$2|e Gruppe|Gruppe}} us em eigene Benutzerkonto useneh: $1",
        "listgrouprights-addgroup-self-all": "Cha alli Gruppe zum eigene Benutzerkonto zuefiege",
        "listgrouprights-removegroup-self-all": "Cha alli Gruppe us em eigene Benutzerkonto useneh",
+       "listgrouprights-namespaceprotection-header": "Yschränkige nach Namensruum",
+       "listgrouprights-namespaceprotection-namespace": "Namensruum",
+       "listgrouprights-namespaceprotection-restrictedto": "Rächt zum Bearbeite",
+       "trackingcategories": "Tracking-Kategorië",
+       "trackingcategories-summary": "Das isch e Liste vo Tracking-Kategorië, wo d MediaWiki-Software automatisch füllt. Iri Näme cha men ändere, we me di entsprächende Systemmäldigen im {{ns:8}}-Namensruum apasst.",
+       "trackingcategories-msg": "Tracking-Kategorië",
+       "trackingcategories-name": "Name vor Nachricht",
+       "trackingcategories-desc": "Kriterje für d Ybindig vo Kategorië",
+       "noindex-category-desc": "Die Syte wird nid vo Bots indiziert, wil ds magische Wort <code><nowiki>__NOINDEX__</nowiki></code> uf ere steit und wil si zumene Namensruum ghört, wo die Flag erloubt isch.",
+       "index-category-desc": "Uf dere Syte steit <code><nowiki>__INDEX__</nowiki></code> (u si ghört zumene Namensruum wo die Flag erloubt isch). Drum wird si usnahmswys vo Bots indiziert.",
+       "post-expand-template-inclusion-category-desc": "Nach em Expandiere vo allne Vorlagen übertrifft d Sytegröössi <code>$wgMaxArticleSize</code>. Drum sy es paar Vorlage nid expandiert.",
+       "post-expand-template-argument-category-desc": "Nach em Expandiere vomene Vorlagenargumänt (öppis i dreifache gschweiffte Chlammere wie <code>{{{Foo}}}</code>) isch d Syte gröser als <code>$wgMaxArticleSize</code>.",
+       "expensive-parserfunction-category-desc": "Uf dere Syte het’s z vil ufwändigi Parserfunktione (wi <code>#ifexist</code>), vgl. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "Uf der Syte het’s e defäkte Dateilink (e Link zu’neren y’bundnige Datei, wo’s nid git).",
+       "hidden-category-category-desc": "Im Syteninhalt vor Kategorie steit <code><nowiki>__HIDDENCAT__</nowiki></code>. Das verhinderet, das si standardmäässig im Chaste mit de Kategorielinks azeigt wird.",
+       "trackingcategories-nodesc": "Kei Beschrybig verfüegbar.",
+       "trackingcategories-disabled": "Kategorie isch deaktiviert",
        "mailnologin": "Du bisch nid aagmäldet oder hesch keis Mail aaggä",
        "mailnologintext": "Du muesch [[Special:UserLogin|aagmäldet syy]] un e bstätigti E-Mail-Adräss in Dyyne [[Special:Preferences|Yystellige]] aagee ha, fir dass epper anderem es E-Mail chasch schicke.",
        "emailuser": "Es Mail schrybe",
        "emailuser-title-target": "E-Mail an {{GENDER:$1|dää Benutzer|die Benutzeri}} schicke",
        "emailuser-title-notarget": "E-Mail an Benutzer",
-       "emailpage": "E-Mail an Benutzer",
        "emailpagetext": "Du chasch {{GENDER:$1|em Benutzer|dr Benutzeri}} mit däm Formular e E-Mail schicke.\nAs Absender wird d E-Mail-Adräss us Dyyne [[Special:Preferences|Yystellige]] yytrait, ass {{GENDER:$1|dr Benutzer|d Benutzeri}} Dir cha Antwort gee.",
        "defemailsubject": "{{SITENAME}}-E-Mail vum Benutzer „$1“",
        "usermaildisabled": "Benutzer-E-Mail abgstellt",
        "emailccsubject": "Kopii vu Dyynere Nochricht an $1: $2",
        "emailsent": "E-Mail furtgschickt",
        "emailsenttext": "Dys E-Mail isch verschickt worde.",
-       "emailuserfooter": "Die E-Mail isch vum {{SITENAME}}-Benutzer „$1“ an „$2“ gschickt wore.",
+       "emailuserfooter": "$1 het das E-mail a $2 gschickt über d Funktion «{{int:emailuser}}» uf {{SITENAME}}.",
        "usermessage-summary": "Systemnochricht gspycheret.",
        "usermessage-editor": "System-Messenger",
        "watchlist": "Beobachtigslischte",
        "mywatchlist": "Beobachtigslischte",
        "watchlistfor2": "Fir $1 $2",
        "nowatchlist": "Du hesch ke Yträg uf dyre Beobachtigslischte.",
-       "watchlistanontext": "Du muesch Di $1 go Dyyni Beobachtungslischt z säh oder go Yytreg uf ere bearbeite.",
+       "watchlistanontext": "Du muesch di amälde, für dyni Beobachtigslisten azluegen oder z bearbeite.",
        "watchnologin": "Du bisch nit aagmäldet",
        "addwatch": "zue de Beobachtigslischte derzue tue",
-       "addedwatchtext": "D Syte \"[[:$1]]\" stoht jetz uf Dyyre [[Special:Watchlist|Beobachtigslischt]].\nNeji Änderige an dr Syte oder dr Diskussionssyte drvo chasch jetz dert säh.",
+       "addedwatchtext": "«[[:$1]]» steit itz mitsamt Diskussionssyten uf dyre [[Special:Watchlist|Beobachtigsliste]].",
+       "addedwatchtext-short": "D Syte «$1» steit itz uf dyre Beobachtigsliste.",
        "removewatch": "Us der Beobachtigsliste usegnuu",
-       "removedwatchtext": "D Syte «[[:$1]]» isch us dyre [[Special:Watchlist|Beobachtigsliste]] glösche worde.",
+       "removedwatchtext": "«[[:$1]]» isch mitsamt Diskussionssyte us dyre [[Special:Watchlist|Beobachtigsliste]] gstriche.",
+       "removedwatchtext-short": "D Syte «$1» isch us dyre Beobachtigsliste gstriche.",
        "watch": "Beobachte",
        "watchthispage": "Die Syte beobachte",
        "unwatch": "nümm beobachte",
        "unwatchthispage": "Nimmi beobachte",
        "notanarticle": "Kei Syte",
        "notvisiblerev": "Version isch glescht wore",
-       "watchlist-details": "{{PLURAL:$1|1 Syte wird|$1 Sytene wärde}} beobachtet (Diskussionssyte nid zelt, aber ou beobachtet).",
-       "wlheader-enotif": "Dr E-Mail-Benochrichtigungsdienscht isch aktiviert.",
-       "wlheader-showupdated": "Syte mit Anderige, wu no nit aagluegt sin, sin '''fett''' dargstellt.",
-       "wlnote": "Do {{PLURAL:$1|chunnt di letscht Änderig|chemme di letschte '''$1''' Änderige}} vu dr letschte {{PLURAL:$2|Stund|'''$2''' Stunde}}. Stand: $3, $4 Uhr.",
-       "wlshowlast": "Zeig di letschte $1 Stunde $2 Tage",
+       "watchlist-details": "{{PLURAL:$1|1 Syte wird|$1 Syte wärde}} beobachtet (Diskussionssyte nid zelt, aber ou beobachtet).",
+       "wlheader-enotif": "E-Mail-Benachrichtigung isch aktiviert.",
+       "wlheader-showupdated": "Syte, wo syt em letste Bsuech hei g’änderet, sy <strong>fett</strong> dargstellt.",
+       "wlnote": "Unde {{PLURAL:$1|steit di letsti Änderig|stöh di letste <strong>$1</strong> Änderigen}} us {{PLURAL:$2|der letste Stund|de letste <strong>$2</strong> Stunde}}. Stand: $3, $4 Uhr.",
+       "wlshowlast": "Zeig di letste $1 Stunden und $2 Täg",
        "watchlist-options": "Aazeigoptione",
        "watching": "Am beobachte …",
        "unwatching": "Nümm am beobachten …",
        "exbeforeblank": "Inhalt voreb d Syte gläärt woren isch: '$1'",
        "delete-confirm": "„$1“ lesche",
        "delete-legend": "Lesche",
-       "historywarning": "'''Warnig:'''  Die Syte, wu Du wit lesche, het e Versionsgschicht mit schetzigswyys $1 {{PLURAL:$1|Version|Versione}}:",
+       "historywarning": "<strong>Warnig:</strong> Die Syte, wu Du wit lesche, het e Versionsgschicht mit $1 {{PLURAL:$1|Version|Versione}}:",
        "confirmdeletetext": "Du bisch dra, e Artikel oder e Bild mitsamt dr Versionsgschicht fir immer us der Datebank z lesche.\nBitte bi Dir iber d Konsequänze bewusst, un bi sicher, dass Du Di an unsri [[{{MediaWiki:Policy-url}}|Leitlinie]] haltsch.",
        "actioncomplete": "Uftrag usgfiert.",
        "actionfailed": "Aktion fählgschlaa",
        "delete-edit-reasonlist": "Leschgrind bearbeite",
        "delete-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche vu sonige Syte isch yygschränkt wore go verhindere, ass dr Server vu {{SITENAME}} us Versäh zytwys iberlaschtet wird.",
        "delete-warning-toobig": "Die Syte het e arg langi Versionsgschicht mit meh as $1 {{PLURAL:$1|Version|Versione}}. S Lesche cha dr Datebankbetriib vu {{SITENAME}} stere.",
+       "deleteprotected": "Du chasch die Syte nid lösche, wil si isch gschützt worde.",
+       "deleting-backlinks-warning": "'''Obacht:''' D Syte, wo du wosch lösche, isch uf [[Special:WhatLinksHere/{{FULLPAGENAME}}|anderne Syte]] verlinkt oder y’bunde.",
        "rollback": "Zrucksetze vu dr Änderige",
        "rollbacklink": "Zrüggsetze",
        "rollbacklinkcount": "{{PLURAL:$1|Ei Version|$1 Versione}} zrucksetze",
        "rollback-success": "D Änderige vu $1 sin ruckgängig gmacht wore un di letscht Version vu $2 isch widerhärgstellt wore.",
        "sessionfailure-title": "Sitzigsfähler",
        "sessionfailure": "S het e Probläm mit em Ibertrage vu Dyyne Benutzerdate gee.\nDie Aktion isch wäge däm us Sicherheitsgrind abbroche wore go ne falschi Zueornig vu Dyyne Änderige zuen eme andere Benutzer verhindere.\nBitte gang zruck, tue d Syte nej lade un versuech s nomol.",
+       "changecontentmodel": "Inhaltsmodäll von ere Syten ändere",
+       "changecontentmodel-legend": "Inhaltsmodäll ändere",
+       "changecontentmodel-title-label": "Sytetitel",
+       "changecontentmodel-model-label": "Nöüs Inhaltsmodäll",
+       "changecontentmodel-reason-label": "Grund:",
+       "changecontentmodel-success-title": "Ds Inhaltsmodäll het g’änderet",
+       "changecontentmodel-success-text": "Der Inhaltstyp vo [[:$1]] het g’änderet.",
+       "changecontentmodel-cannot-convert": "Der Inhalt vo [[:$1]] lat sech nid zum Typ $2 la konvertiere.",
+       "changecontentmodel-nodirectediting": "Ds Inhaltsmodäll «$1» lat ds diräkte Bearbeite nid zue",
+       "log-name-contentmodel": "Protokoll vo Inhaltsmodälländerige",
+       "log-description-contentmodel": "Ereignis, wo mit em Inhaltsmodäll von ere Syte z tüe hei",
+       "logentry-contentmodel-change": "{{GENDER:$2|Der $1|D $1|$1}} het ds Inhaltsmodäll vor Syte $3 g’änderet vo «$4» uf «$5»",
+       "logentry-contentmodel-change-revertlink": "zrüggsetze",
+       "logentry-contentmodel-change-revert": "zrüggsetze",
        "protectlogpage": "Syteschutz-Logbuech",
        "protectlogtext": "Des isch s Syteschutz-Logbuech.\nLueg d [[Special:ProtectedPages|Lischt vu dr gschitzte Syte]] fir alli zurzyt gschitzte Syte.",
        "protectedarticle": "het „[[$1]]“ gschitzt",
        "protect-locked-blocked": "Du chasch dr Syteschutz nit ändere, wel Dyy Benutzerkonto gsperrt isch. Do sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-dblock": "D Datebank isch gsperrt, dr Syteschutz cha wäge däm nit gänderet wäre. Doo sin di aktuälle Syteschutz-Yystellige fir d Syte '''„$1“:'''",
        "protect-locked-access": "Dys Konto het nid di nötige Rächt, für der Schutzstatus z ändere.\nHie sy di aktuelle Schutzystellige vor Syte '''$1''':",
-       "protect-cascadeon": "Die Syten isch gschützt, wil si {{PLURAL:$1|zur folgende Syte|zu de folgende Syte}} ghört, wo derfür e Kaskadesperrig gilt.\nDer Schutzstatus vo dere Syte lat sech la ändere, aber das het kei Yfluss uf d Kaskadesperrig.",
+       "protect-cascadeon": "Die Syten isch gschützt, wil si i {{PLURAL:$1|der|de}} folgende Syten y’bunden isch, wo derfür e Kaskadesperrig gilt.\nÄnderigen am Schutzstatus vo dere Syte hei kei Yfluss uf d Kaskadesperrig.",
        "protect-default": "Alle Benutzer",
        "protect-fallback": "Nume Benutzer mit dr „$1“-Berächtigung erlaube.",
        "protect-level-autoconfirmed": "Nume automatisch bstetigte Benutzer erlaube",
        "protect-othertime": "Anderi Sperrduur:",
        "protect-othertime-op": "anderi Sperrduur",
        "protect-existing-expiry": "Aktuälls Syteschutzänd: $2, $3 Uhr",
+       "protect-existing-expiry-infinity": "Momentani Ablouffzyt: unbeschränkt",
        "protect-otherreason": "Andere/zuesätzlige Grund:",
        "protect-otherreason-op": "Andere Grund",
-       "protect-dropdown": "*Allgmeini Schutzgrind\n** Netzgleich-Spam\n** Editwar\n** Vylmol yybundeni Vorlag\n** Syte mit ere hoche Bsuecherzahl",
+       "protect-dropdown": "*Allgmeini Schutzgrind\n** Link-Spam\n** Editwar\n** Vylmol yybundeni Vorlag\n** Syte mit ere hoche Bsuecherzahl",
        "protect-edit-reasonlist": "Schutzgrind bearbeite",
        "protect-expiry-options": "1 Stund:1 hour,1 Tag:1 day,1 Wuche:1 week,2 Wuche:2 weeks,1 Monet:1 month,3 Monet:3 months,6 Monet:6 months,1 Johr:1 year,Fir immer:infinite",
        "restriction-type": "Schutzstatus",
        "undeletepagetext": "Die {{PLURAL:$1|Syte isch glescht wore un cha|$1 Syte sin glescht wore un chenne}} vu Ammanne widerhärgstellt wäre:",
        "undelete-fieldset-title": "Widerhärstelle",
        "undeleteextrahelp": "* Go d Syte ganz mit allene Versione widerhärzstelle, wehl kei Version us, gib e Begrindig aa un druck uf „{{int:undeletebtn}}“.\n* Mechtsch nume bstimmti Versione widerhärstelle, no wehl die bitte einzeln no dr Markierige us, gib e Begrindig aa un druck derno uf „{{int:undeletebtn}}“..",
-       "undeleterevisions": "{{PLURAL:$1|1 Version|$1 Versione}} archiviert",
+       "undeleterevisions": "$1 {{PLURAL:$1|Version|Versione}} glöscht",
        "undeletehistory": "Wänn Du die Syte widerhärstellsch, wäre au alli alte Versione widerhärgstellt.\nWänn syt dr Leschig e neiji Syte mit em glyche Name aagleit woren isch, no wäre di widerhärgstellte Versione chronologisch in d Versionsgschicht yygordnet.",
        "undeleterevdel": "D Widerhärstellig wird nit durgfiert, wänn di neijscht Version versteckt isch oder s versteckti Teil dinne het.\nIn däm Fall darf di neijscht Version nit markiert wäre oder ihre Status muess uf normali Version gänderet wäre.",
        "undeletehistorynoadmin": "Dä Artikel isch glescht wore. Dr Grund fir d Leschig isch in dr Zämmefassig aagee, derzue au Aagaabe zum letschte Benutzer, wu dä Artikel bearbeitet het vor dr Leschig. Dr aktuäll Täxt vum gleschte Artikel isch nume zuegängli fir Ammanne.",
        "namespace": "Namensruum:",
        "invert": "Uswahl umkehre",
        "tooltip-invert": "Des Chäschtli aaklicke go Änderige im gwehlte Namensruum un, wänn uusgwehlt, im zuegherige Namensruum uusblände",
+       "tooltip-whatlinkshere-invert": "Tue das Chästli abhääggle, für kener Links vo Syten us em usgwählte Namensruum z zeige.",
        "namespace_association": "Zuegordnete Namensruum",
        "tooltip-namespace_association": "Des Chäschtli aaklicke go dr Diskussionsnamensruum oder dr Namesnruum zuesätzlig mityybezie, wu zue Dyre Uuswahl derzue ghert.",
        "blanknamespace": "(Haupt-)",
        "contributions-title": "Benutzerbyytreg vu „$1“",
        "mycontris": "Myyni Byyträg",
        "contribsub2": "Vu {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Ds Benutzerkonto «$1» isch nid registriert.",
        "nocontribs": "S sin keini Benutzerbyytreg mit däne Kriterie gfunde wore.",
        "uctop": "(aktuell)",
        "month": "u Monet:",
        "sp-contributions-newbies-sub": "vo nöji Benützer",
        "sp-contributions-newbies-title": "Benutzerbyytreg vu neije Benutzer",
        "sp-contributions-blocklog": "Sperrlogbuech",
+       "sp-contributions-suppresslog": "underdrückti Benutzerbyträg",
        "sp-contributions-deleted": "gleschti Bytreg",
        "sp-contributions-uploads": "Uffegladeni Dateie",
        "sp-contributions-logs": "Logbiecher",
        "sp-contributions-blocked-notice-anon": "Die IP-Adräss isch zur Zyt gsperrt.\nDo chunnt dr aktuäll Yytrag us em Benutzersperr-Logbuech:",
        "sp-contributions-search": "Suech no Benutzerbiträg",
        "sp-contributions-username": "IP-Adress oder Benutzername:",
-       "sp-contributions-toponly": "Nume aktuälli Versione zeige",
+       "sp-contributions-toponly": "Nume Byträg zeige, won en aktuelli Version sy",
+       "sp-contributions-newonly": "Nume Byträg zeige, wo e nöüi Syte hei agleit",
        "sp-contributions-submit": "Sueche",
        "whatlinkshere": "Was verwyst do druff?",
        "whatlinkshere-title": "Sytene, wo uf „$1“ verlinke",
        "autoblockid": "Automatischi Sperrig #$1",
        "block": "Benutzer sperre",
        "unblock": "Benutzer frejgee",
-       "blockip": "Däm Binutzer d Bearbeitigsrächt furtnee",
+       "blockip": "{{GENDER:$1|Benutzer|Benutzerin}} sperre",
        "blockip-legend": "IP-Adräss/Benutzer sperre",
        "blockiptext": "Nimm des Formular go ne Benutzer oder e IP-Adräss sperre.\nDes sott numme erfolge go Vandalismus verhindere un in Ibereinstimmig mit in dr [[{{MediaWiki:Policy-url}}|Leitlinie]]. Bitte gib au ne Grund fi d Sperri aa (z. B. indäm du einzel ni Syte zitiersch, wu vandaliert wore sin).",
        "ipaddressorusername": "IP-Adräss oder Benutzername:",
        "ipbexpiry": "Sperrduur:",
        "ipbreason": "Grund:",
-       "ipbreason-dropdown": "* Allgmeini Sperrgrind\n** Lesche vu Syte\n** Aalege vu bledsinnige Syte\n** Vylfachi Verstess gege d Richtlinie fir Netzgleicher\n** Verstoss gege dr Grundsatz „Kei persenligi Aagriff“\n* Benutzerspezifischi Sperrgrind\n** Uugeignete Benutzername\n** Neijaamäldig vun eme uubschränkt gsperrte Benutzer\n* IP-spezifischi Sperrgrind\n** Proxy, wäge Vandalismus vu einzelne Benutzer lengerfrischtig gsperrt",
+       "ipbreason-dropdown": "* Allgmeini Sperrgrind\n** Lesche vu Syte\n** Aalege vu bledsinnige Syte\n** Vylfachi Verstess gege d Richtlinie fir Weblink\n** Verstoss gege dr Grundsatz „Kei persenligi Aagriff“\n* Benutzerspezifischi Sperrgrind\n** Uugeignete Benutzername\n** Neijaamäldig vun eme uubschränkt gsperrte Benutzer\n* IP-spezifischi Sperrgrind\n** Proxy, wäge Vandalismus vu einzelne Benutzer lengerfrischtig gsperrt",
        "ipb-hardblock": "Aagmäldeti Benutzer dra hindere, Bearbeitige unter däre IP-Adräss vorzneh",
        "ipbcreateaccount": "Aalege vu Benutzerchonte verhindere",
        "ipbemailban": "E-Mail-Versand sperre",
        "blockipsuccesstext": "Dr Benutzer/d IP-Adräss [[Special:Contributions/$1|$1]] isch gsperrt wore.<br />\nGo d Sperri ufhebe lueg d [[Special:BlockList|Lisch vu allene aktive Sperrine]].",
        "ipb-blockingself": "Du bist grad am Sperre vu Dir sälber! Wettsch des wirkli mache?",
        "ipb-confirmhideuser": "Du bist grad am Sperre vun eme Benutzer im Modus „Benutzer verstecke“. Des fiert derzue, ass dr Benutzername in allne Lischten un Logbiecher unterdruckt wird. Wettsch des wirkli mache?",
+       "ipb-confirmaction": "We du dir sicher bisch, das d’s würklech wosch mache, de tue bitte unde ds Fäld «{{int:ipb-confirm}}» achrüzle.",
        "ipb-edit-dropdown": "Sperrgrind bearbeite",
        "ipb-unblock-addr": "„$1“ frejgee",
        "ipb-unblock": "IP-Adräss/Benutzer frejgee",
        "ipb-blocklist": "Alli aktuälle Sperrine aazeige",
-       "ipb-blocklist-contribs": "Benutzerbyytreg fir „$1“",
+       "ipb-blocklist-contribs": "Benutzerbyträg {{GENDER:$1|vom|vor|vo}} $1",
        "unblockip": "IP-Adräss frejgee",
        "unblockiptext": "Mit däm Formular chasch e IP-Adräss oder e Benutzer frejgee.",
        "ipusubmit": "Die Sperri useneh",
        "unblocked": "[[User:$1|$1]] isch frejgee wore",
        "unblocked-range": "D Sperri fir $1 isch ufghobe",
        "unblocked-id": "Sperr-ID $1 isch freijgee wore",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] isch nümm gsperrt.",
        "blocklist": "Gsperrti Benutzer",
        "ipblocklist": "Gsperrti Benutzer",
        "ipblocklist-legend": "Suech no eme gsperrte Benutzer",
        "change-blocklink": "Sperri ändere",
        "contribslink": "Byträg",
        "emaillink": "E-Mail abschicke",
-       "autoblocker": "Automatischi Sperri, wel Du e gmeinsami IP-Adräss mit [[User:$1|Benutzer:$1]] bruchsch. Grund: „$2“.",
+       "autoblocker": "Automatischi Sperrig, wil dyni IP-Adrässe chürzlech vo [[User:$1|Benutzer:$1]] isch ’bruucht worde. Grund für d Sperrig vo $1: «$2».",
        "blocklogpage": "Sperrigs-Protokoll",
        "blocklog-showlog": "Dää Benutzer isch schon emol gsperrt wore. S Sperrine-Logbuech git s do as Referänz:",
        "blocklog-showsuppresslog": "Dää Benutzer isch schon emol gsperrt wore un syyni Bearbeitige sin uusblädet wore. S Uusbländigs-Logbuech git s do as Referänz:",
        "proxyblockreason": "Dyni IP-Adrässe isch gsperrt wore, wel si ne ufige Proxy isch. Bitte kontaktier Dyyn Internet-Provider oder Dyni Systemadministratore un informier si iber des Sicherheitsproblem.",
        "sorbsreason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet.",
        "sorbs_create_account_reason": "D IP-Adräss isch in dr DNSBL vu {{SITENAME}} as uffige PROXY glischtet. S Aalege vu neije Benutzer isch nit megli.",
+       "xffblockreason": "En IP-Adrässen im Header «X-Forwarded-For» isch gsperrt worde, entweder dyni oder die vomene Proxy-Server, wo du bruuchsch. Der ursprünglechi Grund für d Sperrig isch: $1",
        "cant-see-hidden-user": "Dr Benutzer, wu Du versuechsch z sperre, isch scho gsperrt un versteckt wore. Du chasch d Sperri vu däm Benutzer nit säh oder bearbeite, wel du s „hideuser“-Rächt nit hesch.",
        "ipbblocked": "Du chasch keini andere Benutzer sperre oder entsperre, wel Du sälber gsperrt bisch",
        "ipbnounblockself": "Du derfsch di nit sälber entsperre",
        "movepagetalktext": "D Diskussionssyte wird mitverschobe, '''ussert:'''\n*Du verschiebsch d Syten i nen andere Namensruum, oder\n*es git scho ne Diskussionssyte mit däm Namen oder\n*du wählsch unte d Option, se nid z verschiebe.\n\nI söttigne Fäll müessti d Diskussionssyten allefalls vo Hand kopiert wärde.",
        "movearticle": "Artikel verschiebe",
        "moveuserpage-warning": "'''Warnig:''' Du bis am Verschiebe vun ere Benutzersyte. Bitte gib Achtig, ass doderdur nume die Syte verschobe wird, aber dr Benutzer '''nit''' umgnännt wird.",
+       "movecategorypage-warning": "<strong>Obacht:</strong> Du bisch e Kategoriesyten am Verschiebe. Bitte dänk dra, das nume die Syte verschobe wird. D Syte, wo zur alte Kategorie ghöre, wärde <strong>nid</strong> i di nöüi Kategorie verschobe.",
        "movenologintext": "Du muesch e regischtrierte Benutzer syy un Di [[Special:UserLogin|aamälde]] go die Syte verschiebe.",
        "movenotallowed": "Du derfsch kei Syte verschiebe.",
        "movenotallowedfile": "Du derfsch kei Dateie verschiebe.",
        "cant-move-user-page": "Du derfsch kei Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
        "cant-move-to-user-page": "Du derfsch kei Syte uf e Benutzersyte verschiebe (mit Usnaam vo Untersyte).",
+       "cant-move-category-page": "Du hesch nid ds Rächt, Kategoriesyte z verschiebe.",
+       "cant-move-to-category-page": "Du hesch nid ds Rächt, e Syte zunere Kategoriesyte z verschiebe.",
        "newtitle": "Zum nöie Titel",
        "move-watch": "Die Syte beobachte",
        "movepagebtn": "Artikel verschiebe",
        "allmessages-prefix": "Präfixfilter:",
        "allmessages-language": "Sproch:",
        "allmessages-filter-submit": "Gang",
+       "allmessages-filter-translate": "Übersetze",
        "thumbnail-more": "Vergreßere",
        "filemissing": "D Datei fäält",
        "thumbnail_error": "Fähler bir Härstellig vo re Vorschou: $1",
+       "thumbnail_error_remote": "Fälermäldig vo $1:\n$2",
        "djvu_page_error": "DjVu-Syte isch uusserhalb vum Sytebereich",
        "djvu_no_xml": "XML-Date chönne für d DjVu-Datei nüt abgruefe werde",
        "thumbnail-temp-create": "D Datei fir di temporär Miniaturaasicht het nit chenne aagleit wäre.",
        "thumbnail-dest-create": "D Miniaturaasicht het nit chenne an däm Ort gspycheret wäre.",
        "thumbnail_invalid_params": "Ungültigs Thumbnail-Parameter",
+       "thumbnail_toobigimagearea": "Dateiabmässig überschrytet $1",
        "thumbnail_dest_directory": "S Ziilverzeichnis cha nüt erstellt werde",
        "thumbnail_image-type": "Bildtyp wird nit unterstitzt",
        "thumbnail_gd-library": "Uuvollständigi GD-Library-Konfiguration: Funktion $1 fählt",
        "thumbnail_image-missing": "Datei fählt schyns: $1",
+       "thumbnail_image-failure-limit": "Ir letsti het’s z vil misslungnigi Versüech ’gä (mindistens $1), das Vorschoubild z rendere. Bitte versuech’s später wider.",
        "import": "Sytene importiere",
-       "importinterwiki": "Transwiki-Import",
-       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo dr Bearbeitig un dr Benutzername blybe erhalte.\nAlli Transwiki-Import-Aktione werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "importinterwiki": "Us emnen andere Wiki importiere",
+       "import-interwiki-text": "Wääl e Wiki un e Syte zum Importiere us.\nS Datum vo de Bearbeitige un d Benutzernäme blybe erhalte.\nAlli Import-Aktione us anderne Wiki werde im [[Special:Log/import|Import-Logbuech]] protokolliert.",
+       "import-interwiki-sourcewiki": "Ursprünglechs Wiki:",
+       "import-interwiki-sourcepage": "Ursprünglechi Syte:",
        "import-interwiki-history": "Alli früeneri Versione vo dere Syte importiere",
        "import-interwiki-templates": "Mit allene Vorlage",
        "import-interwiki-submit": "Import",
+       "import-mapping-default": "Zu de Standard-Orten importiere",
+       "import-mapping-namespace": "In e Namensruum importiere:",
+       "import-mapping-subpage": "Als Undersyte vor folgende Syten importiere:",
        "import-upload-filename": "Dateiname:",
        "import-comment": "Grund:",
        "importtext": "Datei iber d Spezialsyte [[Special:Export|Exportfunktion]] us em Quellwiki exportiere.\nDie uf em lokale Rächner spychere un derno do uffelade.",
        "importcantopen": "D Importdatei het nit chenne ufgmacht wäre.",
        "importbadinterwiki": "Falscher Interwiki-Link",
        "importsuccess": "Dr Import isch abgschlosse.",
-       "importnosources": "Für de Transwiki-Import sin kei Quelle definiert worde. Wege dem isch s direkte Ufelade vo Gschichtsversione gsperrt.",
+       "importnosources": "Es isch kes Wiki a’gä worde, wo druus söll importiert wärde, u ds diräkten Ufelade vo Versionsgschichten isch deaktiviert.",
        "importnofile": "Es isch kei Importdatei ufeglade worde.",
        "importuploaderrorsize": "S Ufelade vo dr Importdatei isch misslunge. D Datei isch grösser als erlaubt isch.",
        "importuploaderrorpartial": "S Ufelade vo dr Importdatei isch misslunge. D Datei het numme zum Deil chönne ufeglade werde.",
        "importuploaderrortemp": "S Ufelade vo dr Importdatei isch misslunge. E temporärs Verzeichnis fäält.",
        "import-parse-failure": "Fääler bim XML-Import:",
        "import-noarticle": "Du hesch kei Syte zum importiere aagää!",
-       "import-nonewrevisions": "Es sin scho alli früeneri Versione importiert worde.",
+       "import-nonewrevisions": "Es sy kener Versionen importiert worde (entweder sy si scho alli da gsy oder es het e Fähler ’gä).",
        "xml-error-string": "$1 Zeile $2, Spalte $3, (Byte $4): $5",
        "import-upload": "XML-Date ufelade",
        "import-token-mismatch": "D Sitzigsdate sin verlore gange. Bitte versuech es noo emool.",
        "import-error-create": "Die Syte „$1“ isch nit importiert worde, wyl du nit dezue berächtigt bisch, si z erstelle.",
        "import-error-interwiki": "D Syte „$1“ isch nit importiert wore, wel dr Name vun ere fir externi Link (Interwiki) reserviert isch.",
        "import-error-special": "D Syte „$1“ isch nit importiert wore, wel si zuen eme bsundere Namensruum ghert, wu kei Syte megli sin.",
-       "import-error-invalid": "Syte „$1“ isch nit importiert wore, wel dr Name vun ere nit giltig isch.",
+       "import-error-invalid": "D Syte «$1» isch nid importiert worde, wil der Name, wo si hätt söllen übercho, i däm Wiki nid gültig isch.",
        "import-error-unserialize": "D Version $2 vu dr Syte „$1“ het nit chenne deserialisiert wäre. D Version isch fir d Verwändig vum Inhaltsmodäll $3 gmäldet wore, wu as $4 serialisiert isch.",
+       "import-error-bad-location": "D Version $2 mit em Inhaltsmodäll $3 lat sech i däm Wiki nid under «$1» la spychere, wil das Inhaltsmodäll uf dere Syte nid understützt isch.",
        "import-options-wrong": "Falschi {{PLURAL:$2|Option|Optione}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Dää Stammsytename isch nit giltig.",
        "import-rootpage-nosubpage": "Im Namensruum „$1“ vu dr Stammsyte sin kei Untersyte erlaubt.",
        "importlogpage": "Import-Logbuech",
        "importlogpagetext": "Adminischtrativer Import vo Sytene mit Versionsgschichte us anderi Wikis.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Vérsion|Vérsiona}}",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} vo $2",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|Version|Versionen}} importiert",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versione}} us $2 importiert",
        "javascripttest": "JavaScript-Tescht",
        "javascripttest-pagetext-noframework": "Die Syte isch reserviert fir JavaSkript-Tescht.",
        "javascripttest-pagetext-unknownframework": "Nit bekannt Framework „$1“.",
+       "javascripttest-pagetext-unknownaction": "Unbekannti Aktion «$1».",
        "javascripttest-pagetext-frameworks": "Bitte eis vu däne Framework uuswehle: $1",
        "javascripttest-pagetext-skins": "Wehl e Benutzeroberflechi uus fir d Durfierig vu dr Tescht:",
        "javascripttest-qunit-intro": "Lueg d [$1 Dokumentation zue Tescht] uf mediawiki.org",
        "tooltip-pt-logout": "Abmälde",
        "tooltip-pt-createaccount": "Du chasch gärn e Bentuzerkonto aalege un Di aamälde. Du muesch s aber nit",
        "tooltip-ca-talk": "Diskussion zum Artikelinhalt",
-       "tooltip-ca-edit": "Syte bearbeite. Bitte vor em Spychere d Vorschou aaluege.",
+       "tooltip-ca-edit": "Die Syte bearbeite",
        "tooltip-ca-addsection": "Neje Abschnitt aafange",
        "tooltip-ca-viewsource": "Die Syte isch geschützt. Du chasch der Quelltext aaluege.",
        "tooltip-ca-history": "Früecheri Versione vo dere Syte.",
        "tooltip-feed-atom": "Atom-Feed für selli Syte",
        "tooltip-t-contributions": "Lischte vo de Byträg vo däm Benutzer",
        "tooltip-t-emailuser": "Schick däm Benutzer e E-Bost",
+       "tooltip-t-info": "Meh Informationen über die Syte",
        "tooltip-t-upload": "Dateien ufelade",
        "tooltip-t-specialpages": "Lischte vo allne Spezialsyte",
        "tooltip-t-print": "E Version vo dere Syte zum Usdrugge.",
        "spam_reverting": "Letschti Version ohni Links zue $1 widerhärgstellt.",
        "spam_blanking": "In allene Versione het s Links zue $1 gha, sufer gmacht.",
        "spam_deleting": "Alli Versione mit eme Link zue $1 sin glescht woret.",
-       "simpleantispam-label": "Spamschutz-Priefig. \nDo <strong>NYT</strong> yytrage!",
+       "simpleantispam-label": "Spamschutz-Priefig. \nDo <strong>nyt</strong> yytrage!",
        "pageinfo-title": "Informatione zue „$1“",
        "pageinfo-not-current": "Die Informatione chenne leider nit fir alti Versionen aazeigt wäre.",
        "pageinfo-header-basic": "Basisinformatione",
        "pageinfo-length": "Sytelengi (in Byte)",
        "pageinfo-article-id": "Syten-ID",
        "pageinfo-language": "Syteninhaltssproch",
+       "pageinfo-content-model": "Syteninhaltsmodäll",
        "pageinfo-robot-policy": "Indexierig dur Suechmaschine",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nit erlaubt",
        "pageinfo-watchers": "Aazahl vu Beobachter",
+       "pageinfo-visiting-watchers": "Azahl vo dene, wo d Syte beobachten und di letste Bearbeitige hei agluegt",
        "pageinfo-few-watchers": "Weniger wie {{PLURAL:$1|ei|$1}} Beobachter",
+       "pageinfo-few-visiting-watchers": "Es chönnt öpper gä oder ou nid, wo beobachtet und di letste Bearbeitigen am aluegen isch",
        "pageinfo-redirects-name": "Zahl vu dr Wyterleitige zue däre Syte",
        "pageinfo-subpages-name": "Untersyte vu däre Syte",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|Wyterleitig|Wyterleitige}}; $3 {{PLURAL:$3|anderi Syte}})",
        "pageinfo-protect-cascading-yes": "Jo",
        "pageinfo-protect-cascading-from": "Syte mit Kaskadeschutz vu",
        "pageinfo-category-info": "Kategoriinformatione",
+       "pageinfo-category-total": "Gsamti Azahl Mitglider",
        "pageinfo-category-pages": "Aazahl vu dr Syte",
        "pageinfo-category-subcats": "Aazahl vu dr Unterkategorie",
        "pageinfo-category-files": "Aazahl vu dr Dateie",
        "markedaspatrollederrortext": "Du muesch e Syteänderig uswehle.",
        "markedaspatrollederror-noautopatrol": "S isch nit erlaubt, eigeni Bearbeitige as kontrolliert z markiere.",
        "markedaspatrollednotify": "Die Änderig an $1 isch as kontrolliert markiert wore.",
+       "markedaspatrollederrornotify": "D Markierig als kontrolliert isch nid glunge.",
        "patrol-log-page": "Kontroll-Logbuech",
        "patrol-log-header": "Des isch s Kontroll-Logbuech.",
        "log-show-hide-patrol": "Kontroll-Logbuech $1",
+       "log-show-hide-tag": "Markierigs-Logbuech $1",
        "deletedrevision": "alti Version: $1",
        "filedeleteerror-short": "Fähler bi dr Datei-Leschig: $1",
        "filedeleteerror-long": "Bi dr Datei-Leschig sin Fähler feschtgstellt wore:\n\n$1",
        "file-nohires": "Kei höcheri Uflösig verfüegbar.",
        "svg-long-desc": "SVG-Datei, Basisgrößi: $1 × $2 Pixel, Dateigrößi: $3",
        "svg-long-desc-animated": "Animierti SVG-Datei, Basisgreßi $1 × $2 Pixel, Dateigreßi: $3",
+       "svg-long-error": "Ungültigi SVG-Datei: $1",
        "show-big-image": "Originaldatei",
        "show-big-image-preview": "Greßi vu däre Vorschau: $1.",
        "show-big-image-other": "Wyteri {{PLURAL:$2|Ufflösig|Ufflösige}}: $1.",
        "newimages-summary": "Die Spezialsyte zeigt di zletscht uffegladene Dateie aa.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder e Teil devu):",
+       "newimages-showbots": "Ufelade vo Bots azeige",
        "noimages": "Kei Dateie gfunde.",
        "ilsubmit": "Suech",
        "bydate": "noch Datum",
        "minutes": "{{PLURAL:$1|1 Minut|$1 Minute}}",
        "hours": "{{PLURAL:$1|1 Stund|$1 Stunde}}",
        "days": "{{PLURAL:$1|1 Tag|$1 Täg}}",
+       "weeks": "{{PLURAL:$1|$1 Wuche}}",
+       "months": "{{PLURAL:$1|$1 Monet|$1 Mönet}}",
+       "years": "{{PLURAL:$1|$1 Jahr}}",
        "ago": "vor $1",
+       "just-now": "grad ersch",
+       "hours-ago": "vor {{PLURAL:$1|eire Stund|$1 Stund}}",
+       "minutes-ago": "vor {{PLURAL:$1|eire Minute|$1 Minute}}",
+       "seconds-ago": "vor {{PLURAL:$1|eire Sekunde|$1 Sekunde}}",
+       "monday-at": "Mäntig um $1",
+       "tuesday-at": "Zystig um $1",
+       "wednesday-at": "Midwuch um $1",
+       "thursday-at": "Donnstig um $1",
+       "friday-at": "Frytig um $1",
+       "saturday-at": "Samstig um $1",
        "sunday-at": "Sunntig am $1",
        "yesterday-at": "Geschtert am $1",
        "bad_image_list": "Format:\n\nNume Zylene, wo mit emne * afö, wärde berücksichtigt.\nNach em * mues zersch e Link zuren Unerwünschte Datei cho.\nWyteri Links uf der glyche Zyle wärden als Usnahme behandlet, wo die Datei trotzdäm darff vorcho.",
        "confirm-watch-top": "Tue die Syten uf dyni Beobachtigslischte.",
        "confirm-unwatch-button": "In Ornig",
        "confirm-unwatch-top": "Nim die Syte us dyre Beobachtungslischte furt.",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← vorderi Syte",
        "imgmultipagenext": "nächschti Syte →",
        "imgmultigo": "Gang!",
        "autosumm-replace": "Dr Inhalt vo dr Syte isch ersetzt worde: '$1'",
        "autoredircomment": "E Wyterleitig uf [[$1]] isch erstellt worde",
        "autosumm-new": "Het Syte aagleit mit '$1'",
+       "autosumm-newblank": "Lääri Syten agleit",
        "lag-warn-normal": "Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} wäre in däre Lischt nonig aazeigt.",
        "lag-warn-high": "Wäg ere hoche Datebank-Uslaschtig wäre d Bearbeitige in dr letschte {{PLURAL:$1|Sekund|$1 Sekunde}} in däre Lischt nonig aazeigt.",
        "watchlistedit-normal-title": "D Beobachtigslischt bearbeite",
        "watchlistedit-raw-done": "Dyni Beobachtigslischt isch aktualisiert worde.",
        "watchlistedit-raw-added": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} dezuedüü worde:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|ei Ytrag isch|$1 Yträg sin}} usegnoo worde:",
+       "watchlistedit-clear-title": "Beobachtigsliste lääre",
+       "watchlistedit-clear-legend": "Beobachtigsliste lääre",
+       "watchlistedit-clear-explain": "Jeden einzel Ytrag wird us der Beobachtigsliste gstriche",
+       "watchlistedit-clear-titles": "Sytenäme:",
+       "watchlistedit-clear-submit": "Beobachtigsliste lääre (Das lat sech nid la rückgängig mache!)",
+       "watchlistedit-clear-done": "Dyni Beobachtigslisten isch gläärt.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|$1 Syten isch|$1 Syte sy}} nümm uf der Beobachtigsliste:",
+       "watchlistedit-too-many": "Es het z vil Syte, für se hie azzeige.",
+       "watchlisttools-clear": "Beobachtigsliste lääre",
        "watchlisttools-view": "Beobachtigsliste: Änderige",
        "watchlisttools-edit": "normal bearbeite",
        "watchlisttools-raw": "imene große Textfäld bearbeite",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|Diskussion]])",
        "duplicate-defaultsort": "Obacht: Dr Sortierigsschlüssel „$2“ iberschrybt dr vorig brucht Schlüssel „$1“.",
+       "duplicate-displaytitle": "<strong>Obacht:</strong> Der Azeigtitel «$2» überschrybt der früecher Azeigtitel «$1».",
+       "invalid-indicator-name": "<strong>Fähler:</strong> Ds Attribut <code>name</code> vom Sytestatusindikator darf nid läär sy.",
        "version": "Version",
        "version-extensions": "Installierti Erwyterige",
-       "version-skins": "Benutzeroberflechine",
+       "version-skins": "Installierti Benutzeroberflechine",
        "version-specialpages": "Spezialsyte",
        "version-parserhooks": "Parser-Schnittstelle",
        "version-variables": "Variable",
        "version-hook-name": "Schnittstellename",
        "version-hook-subscribedby": "Ufruef vu",
        "version-version": "($1)",
+       "version-no-ext-name": "[kei Name]",
        "version-license": "Lizänz",
        "version-ext-license": "Lizänz",
        "version-ext-colheader-name": "Erwyterig",
+       "version-skin-colheader-name": "Name",
+       "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Lizänz",
        "version-ext-colheader-description": "Bschryybig",
        "version-ext-colheader-credits": "Autore",
        "version-entrypoints": "Yygangspunkt-URL",
        "version-entrypoints-header-entrypoint": "Yygangspunkt",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Installierti Bibliotheke",
+       "version-libraries-library": "Bibliothek",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Lizänz",
+       "version-libraries-description": "Beschrybig",
+       "version-libraries-authors": "Autor/inne",
        "redirect": "Wyterleitig uf Benutzersyte, Syte, Syteversion oder Datei",
        "redirect-legend": "Wyterleitig uf e Datei oder e Syte",
        "redirect-summary": "Die Spezialsyte leitet wyter uf e Benutzersyte (numerischi Benutzerkännig aagee), Syte (Sytekännig aagee), Syteversion (Versionskännig aagee) oder Datei (Dateiname aagee). Benutzig: [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] oder [[{{#Special:Redirect}}/file/Example.jpg]].",
        "tags-tag": "Markierigsname",
        "tags-display-header": "Benännig uf dr Änderigslischte",
        "tags-description-header": "Vollständigi Bschryybig",
+       "tags-active-header": "Aktiv?",
        "tags-hitcount-header": "Markierti Änderige",
+       "tags-actions-header": "Aktione",
        "tags-active-yes": "Jo",
        "tags-active-no": "Nei",
+       "tags-source-extension": "Von eren Erwyterig definiert",
+       "tags-source-manual": "Manuell vo Benutzer/innen oder Bots ygsetzt",
+       "tags-source-none": "Nümm ’bruucht",
        "tags-edit": "bearbeite",
+       "tags-delete": "lösche",
+       "tags-activate": "aktiviere",
+       "tags-deactivate": "deaktiviere",
        "tags-hitcount": "$1 {{PLURAL:$1|Änderig|Änderige}}",
+       "tags-manage-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige z verwalte.",
+       "tags-create-heading": "Nöüi Markierig alege",
+       "tags-create-explanation": "Standardmäässig wärde nöüi Markierige zur Verfüegig gstellt, so das se Benutzer/innen und Bots chöü bruuche.",
+       "tags-create-tag-name": "Markierigsname:",
+       "tags-create-reason": "Grund:",
+       "tags-create-submit": "Alege",
+       "tags-create-no-name": "Du muesch e Markierigsnamen agä.",
+       "tags-create-invalid-chars": "Markierigsnäme dörffe kei Kommas (<code>,</code>) oder Schregstriche (<code>/</code>) ha.",
+       "tags-create-invalid-title-chars": "Markierigsnäme dörffe kei Zeiche ha, wo me nid i Sytenäme cha bruuche.",
+       "tags-create-already-exists": "D Markierig «$1» git’s scho.",
+       "tags-create-warnings-above": "Bim Versuech, d Markierig «$1» azlege, het’s di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-create-warnings-below": "Möchtsch mit em Alege vor Markierig wytermache?",
+       "tags-delete-title": "Markierig lösche",
+       "tags-delete-explanation-initial": "Du bisch drann, d Markierig «$1» us der Datebank z lösche.",
+       "tags-delete-explanation-in-use": "Si wird vo {{PLURAL:$2|eire Version oder eim Logbuechytrag|allne $2 Versionen oder Logbuechyträg}} furtgnoh, wo momentan dermit markiert sy.",
+       "tags-delete-explanation-warning": "Die Aktion isch <strong>für immer</strong> und <strong>lat sech nid la rückgängig mache</strong>, nid emal vo Datebank-Administrator/inne. Bis dir ganz sicher, das es die Markierig isch, wo du wosch lösche.",
+       "tags-delete-explanation-active": "<strong>D Markierig «$1» isch immer no aktiv und blybt ou zuekünftig im Ysatz.</strong> We du das wosch verhindere, de gang die Markierig dört ga deaktiviere, wo si ygsetzt isch.",
+       "tags-delete-reason": "Grund:",
+       "tags-delete-submit": "Markierig für immer lösche",
+       "tags-delete-not-allowed": "Von eren Erwyterig definierti Markierige lö sech nid la lösche, ussert d Erwyterig erloubt’s usdrücklech.",
+       "tags-delete-not-found": "D Markierig «$1» git’s nid.",
+       "tags-delete-too-many-uses": "D Markierig «$1» isch by meh als {{PLURAL:$2|eire Version|$2 Versionen}} ygsetzt. Drum lat si sech nid la lösche.",
+       "tags-delete-warnings-after-delete": "D Markierig «$1» isch erfolgrych glöscht, aber es het di {{PLURAL:$2|folgendi Warnig|folgende Warnige}} ’gä:",
+       "tags-activate-title": "Markierig aktiviere",
+       "tags-activate-question": "Du bisch drann, d Markierig «$1» z aktiviere.",
+       "tags-activate-reason": "Grund:",
+       "tags-activate-not-allowed": "D Markierig «$1» lat sech nid la aktiviere.",
+       "tags-activate-not-found": "D Markierig «$1» git’s nid.",
+       "tags-activate-submit": "Aktiviere",
+       "tags-deactivate-title": "Markierig deaktiviere",
+       "tags-deactivate-question": "Du bisch drann, d Markierig «$1» z deaktiviere.",
+       "tags-deactivate-reason": "Grund:",
+       "tags-deactivate-not-allowed": "D Markierig «$1» lat sech nid la deaktiviere.",
+       "tags-deactivate-submit": "Deaktiviere",
+       "tags-apply-no-permission": "Du hesch nid ds Rächt, Änderige mit Änderigsmarkierige z mache.",
+       "tags-apply-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-apply-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand ysetze: $1",
+       "tags-update-no-permission": "Du hesch nid ds Rächt, Änderigsmarkierige by einzelne Versionen oder Logbuechyträg yzsetzen oder furtznäh.",
+       "tags-update-add-not-allowed-one": "D Markierig «$1» darf me nid vo Hand ysetze.",
+       "tags-update-add-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand derzuetue: $1",
+       "tags-update-remove-not-allowed-one": "D Markierig «$1» darf me nid furtnäh.",
+       "tags-update-remove-not-allowed-multi": "Di {{PLURAL:$2|folgendi Markierig|folgende Markierige}} darf me nid vo Hand furtnäh: $1",
+       "tags-edit-title": "Markierige bearbeite",
+       "tags-edit-manage-link": "Markierige verwalte",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Usgwählti Version|Usgwählti Versione}} vo [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Usgwählte Logbuechytrag|Usgwählti Logbuechyträg}}:",
+       "tags-edit-revision-legend": "Markierige by {{PLURAL:$1|dere Versione|allne $1 Versione}} derzuetue oder furtnäh.",
+       "tags-edit-logentry-legend": "Markierige by {{PLURAL:$1|däm Logbuechytrag|allne $1 Logbuechyträg}} derzuetue oder furtnäh.",
+       "tags-edit-existing-tags": "Ygsetzti Markierige:",
+       "tags-edit-existing-tags-none": "''Keini''",
+       "tags-edit-new-tags": "Nöüi Markierige:",
+       "tags-edit-add": "Die Markierige derzuetue:",
+       "tags-edit-remove": "Die Markierige furtnäh:",
+       "tags-edit-remove-all-tags": "(alli Markierige furtnäh)",
+       "tags-edit-chosen-placeholder": "Markierigen ussueche",
+       "tags-edit-chosen-no-results": "Es git ke Markierige, wo passe",
+       "tags-edit-reason": "Grund:",
+       "tags-edit-revision-submit": "Änderige by {{PLURAL:$1|dere Version|$1 Versionen}} usfüere",
+       "tags-edit-logentry-submit": "Änderige by {{PLURAL:$1|däm Logbuechytrag|$1 Logbuechyträg}} usfüere",
+       "tags-edit-success": "D Änderige sy erfolgrych usgfüert.",
+       "tags-edit-failure": "D Änderige hei sech nid la usfüere: $1",
+       "tags-edit-nooldid-title": "Ungültigi Zilversion",
+       "tags-edit-nooldid-text": "Entweder hesch du kei Zilversion a’gä, für die Funktion dermit uszfüere, oder es git di a’gänigi Zilversion nid.",
+       "tags-edit-none-selected": "Bitte suech mindistens ei Markierig uus zum Derzuetue oder Furtnäh.",
        "comparepages": "Syte verglyyche",
        "compare-page1": "Syte 1",
        "compare-page2": "Syte 2",
        "compare-revision-not-exists": "Die Version, wu Du aagee hesch, git s nit.",
        "dberr-problems": "Excusez! Die Seite het im Momänt tächnischi Schwirigkeite.",
        "dberr-again": "Wart e paar Minute un lad derno nej.",
-       "dberr-info": "(Cha kei Verbindig zum Datebank-Server härstelle: $1)",
-       "dberr-info-hidden": "(Cha kei Verbindig zum Datebank-Server härstelle)",
+       "dberr-info": "(Kei Zuegriff uf d Datebank: $1)",
+       "dberr-info-hidden": "(Kei Zuegriff uf d Datebank)",
        "dberr-usegoogle": "Du chenntsch in dr Zwischezyt mit Google sueche.",
        "dberr-outofdate": "Obacht: Dr Suechindex vu unsere Syte chennt veraltet syy.",
        "dberr-cachederror": "Des isch e Kopii vum Cache vu dr Syte, wu Du aagforderet hesch, un chennt veraltet syy.",
        "htmlform-no": "Nei",
        "htmlform-yes": "Jo",
        "htmlform-chosen-placeholder": "Wehl en Option",
+       "htmlform-cloner-create": "Wyteri derzuetue",
+       "htmlform-cloner-delete": "Furtnäh",
+       "htmlform-cloner-required": "Es bruucht mindistens ei Wärt.",
+       "htmlform-title-badnamespace": "[[:$1]] isch nid im Namensruum «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» isch kei Sytename, wo sech lat la alege",
+       "htmlform-title-not-exists": "[[:$1]] git’s nid.",
+       "htmlform-user-not-exists": "<strong>$1</strong> git’s nid.",
+       "htmlform-user-not-valid": "<strong>$1</strong> isch ke gültige Name.",
        "sqlite-has-fts": "$1 mit Unterstitzig vu dr Volltextsuechi",
        "sqlite-no-fts": "$1 ohni Unterstitzig vu dr Volltextsuechi",
-       "logentry-delete-delete": "{{GENDER:$2|Dr|D|Dr}} $1 het d Syte $3 glöscht",
-       "logentry-delete-restore": "$1 het d Syte $3 wiiderhergstellt",
-       "logentry-delete-event": "$1 het die Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-delete-revision": "$1 het die Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-delete-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
-       "logentry-delete-revision-legacy": "$1 het d Sichtbarkeit vo Versione uff $3 gänderet",
-       "logentry-suppress-delete": "$1 het d Syte $3 unterdrückt",
-       "logentry-suppress-event": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} uff $3: $4 gänderet",
-       "logentry-suppress-revision": "$1 het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} uff $3: $4 gänderet",
-       "logentry-suppress-event-legacy": "$1 het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
-       "logentry-suppress-revision-legacy": "$1 het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-delete-delete": "{{GENDER:$2|Dr|D|}} $1 het d Syte $3 glöscht",
+       "logentry-delete-restore": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 wider härgstellt",
+       "logentry-delete-event": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-delete-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-delete-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg uff $3 gänderet",
+       "logentry-delete-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Versione uff $3 gänderet",
+       "logentry-suppress-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 unterdrückt",
+       "logentry-suppress-event": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vumene Logbuechyytrag|vo $5 Logbuechyyträg}} gänderet uff $3: $4",
+       "logentry-suppress-revision": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit {{PLURAL:$5|vunere Version|vo $5 Versione}} gänderet uff $3: $4",
+       "logentry-suppress-event-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Sichtbarkeit vo Logbuechyyträg diskret uff $3 gänderet",
+       "logentry-suppress-revision-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het diskret d Sichtbarkeit vo Versione uff $3 gänderet",
        "revdelete-content-hid": "Inhalt versteckt",
        "revdelete-summary-hid": "Bearbeitigszämmefassig versteckt",
        "revdelete-uname-hid": "Benutzername versteckt",
        "revdelete-uname-unhid": "Benutzername freigee",
        "revdelete-restricted": "Yyschränkige gälte au fir Ammanne",
        "revdelete-unrestricted": "Yyschränkige fir Ammanne ufghobe",
+       "logentry-block-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-block-unblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} entsperrt",
+       "logentry-block-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het d Sperrystellige {{GENDER:$4|füre $3|für d $3|für $3}} bis $5 g’änderet $6",
+       "logentry-import-upload": "{{GENDER:$2|Der $1|D $1|$1}} het $3 importiert per Datei-Ufelade",
+       "logentry-import-interwiki": "{{GENDER:$2|Der $1|D $1|$1}} het $3 vomenen andere Wiki importiert",
+       "logentry-merge-merge": "{{GENDER:$2|Der $1|D $1|$1}} het $3 i $4 zämegfüert (Versione bis $5)",
        "logentry-move-move": "{{GENDER:$2|Dr|D}} $1 het d Seite $3 uf $4 verschobe",
-       "logentry-move-move-noredirect": "$1 het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
-       "logentry-move-move_redir": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
-       "logentry-move-move_redir-noredirect": "$1 het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
-       "logentry-patrol-patrol": "$1 het Version $4 vo Syte $3 als kontrolliert markiert",
-       "logentry-patrol-patrol-auto": "$1 het Version $4 vo Syte $3 automatisch als kontrolliert markiert",
-       "logentry-newusers-newusers": "Benutzerkonto $1 isch aagleit wore.",
+       "logentry-move-move-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
+       "logentry-move-move_redir": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
+       "logentry-move-move_redir-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
+       "logentry-patrol-patrol": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vo Syte $3 als kontrolliert markiert",
+       "logentry-patrol-patrol-auto": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vor Syte $3 automatisch als kontrolliert markiert",
+       "logentry-newusers-newusers": "{{GENDER:$2|Benutzerkonto}} $1 isch aagleit wore.",
        "logentry-newusers-create": "Benutzerkonto $1 {{GENDER:$2|isch aagleit wore}}",
-       "logentry-newusers-create2": "Benutzerkonto $3 isch aalgeit wore vu $1",
-       "logentry-newusers-autocreate": "S Benutzerchonto $1 isch automatisch erstellt worde",
-       "logentry-rights-rights": "$1 het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
-       "logentry-rights-rights-legacy": "$1 het d Gruppezuegherigkeit fir $3 gänderet",
-       "logentry-rights-autopromote": "$1 isch automatisch vu $4 zue $5 zuegordnet wore",
+       "logentry-newusers-create2": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit",
+       "logentry-newusers-byemail": "{{GENDER:$2|Der $1|D $1|$1}} het ds Benutzerkonto $3 agleit und ds Passwort isch per E-Mail verschickt worde",
+       "logentry-newusers-autocreate": "Ds {{GENDER:$2|Benutzerkonto}} $1 isch automatisch agleit worde",
+       "logentry-protect-move_prot": "{{GENDER:$2|Der $1|D $1|$1}} het d Schutzystellige vo $4 uf $3 verschobe",
+       "logentry-rights-rights": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
+       "logentry-rights-rights-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 gänderet",
+       "logentry-rights-autopromote": "{{GENDER:$2|Der $1|D $1|$1}} isch automatisch vo $4 uf $5 beförderet worde",
        "logentry-upload-upload": "{{GENDER:$2|Dr|D}} $1 het $3 uffeglade",
+       "logentry-upload-overwrite": "{{GENDER:$2|Der $1|D $1|$1}} het e nöüi Version vo $3 ufeglade",
+       "logentry-upload-revert": "{{GENDER:$2|Der $1|D $1|$1}} het $3 ufeglade",
+       "log-name-managetags": "Markierigsverwaltigs-Logbuech",
+       "log-description-managetags": "Uf dere Syte het’s Verwaltigsufgabe für [[Special:Tags|Markierige]]. Ds Logbuech zeigt numen Aktione, wo manuell von ere/emen Administrator/in sy usgfüert worde. D Wiki-Software cha Markierigen alegen oder lösche, ohni das es i däm Logbuech verzeichnet wird.",
+       "logentry-managetags-create": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» agleit",
+       "logentry-managetags-delete": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig «$4» glöscht (us {{PLURAL:$5|eire Version oder eim Logbuechytrag|$5 Versionen oder Logbuechyträg}} furtgnoh)",
+       "logentry-managetags-activate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots aktiviert",
+       "logentry-managetags-deactivate": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierig $4 zum Gebruuch vo Benutzer/innen oder Bots deaktiviert",
+       "log-name-tag": "Markierigs-Logbuech",
+       "log-description-tag": "Die Syte zeigt [[Special:Tags|Markierige]], wo by einzelne Versionen oder Logbuechyträg äxtra sy derzueta oder furtgnoh worde. Markierige als Teil von ere Bearbeitig, Löschig oder ähnlechen Aktion sy nid ufgfüert.",
+       "logentry-tag-update-add-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zur Version $4 vor Syte $3 derzueta.",
+       "logentry-tag-update-add-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$7|Markierig|Markierige}} $6 zum Logbuechytrag $5 vor Syte $3 derzueta.",
+       "logentry-tag-update-remove-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vor Version $4 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-remove-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d {{PLURAL:$9|Markierig|Markierige}} $8 vom Logbuechytrag $5 vor Syte $3 furtgnoh.",
+       "logentry-tag-update-revision": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bir Version $4 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
+       "logentry-tag-update-logentry": "{{GENDER:$2|Der $1|D $1|$1}} het d Markierige bim Logbuechytrag $5 vor Syte $3 aktualisiert ({{PLURAL:$7|eini|$6}} derzueta, {{PLURAL:$9|eini|$8}} furtgnoh).",
        "rightsnone": "(keini)",
        "revdelete-summary": "Zämmefassig",
        "feedback-adding": "Ruggmäldig wird zur Syte dezuegfiegt …",
+       "feedback-back": "Zrügg",
        "feedback-bugcheck": "Schen! Bitte iberprief no, eb s sich doderby nit um e scho [$1 bekannte Fähler] handlet.",
        "feedback-bugnew": "Ich haa s iberprieft. Dr nej Fähler mälde.",
        "feedback-bugornote": "Wän Du detailliert e tächnisch Probläm witt bschryybe, no mäld bitte [$1 ne Fähler].\nSunscht chasch au s eifach Formular unte nutze. Dyy Kommentar wird, zämme mit Dyym Benutzername un dr Version vu Dyym Webbrowser un em Betribssyschtem, uf dr Syte „[$3 $2]“ zuegfiegt.",
        "feedback-cancel": "Abbräche",
        "feedback-close": "Isch gmacht",
+       "feedback-external-bug-report-button": "E technischi Ufgab yreiche",
+       "feedback-dialog-title": "Rückmäldig gä",
+       "feedback-dialog-intro": "Du chasch ds eifache Formular unde bruuche, für’ne Rückmäldig z gä. Dy Kommentar chunt zäme mit dym Benutzernamen uf d Syte «$1».",
+       "feedback-error-title": "Fähler",
        "feedback-error1": "Fäälermäldig: Unbekannts Ergebniss vo de API",
        "feedback-error2": "Fääler: Bearbeitig fehlgschlo",
        "feedback-error3": "Fäälermäldig: Kei Antwort vo de API",
+       "feedback-error4": "Fähler: Der Fähler het sech nid under em a’gänige Titel la spychere",
        "feedback-message": "Noochricht:",
        "feedback-subject": "Beträff:",
        "feedback-submit": "Ruggmäldig abschigge",
+       "feedback-terms": "I bi mer bewusst, das my User Agent exakti Versionen über my Browser und mys Betribssystem enthaltet und zäme mit der Rückmäldig veröffentlecht wird.",
        "feedback-thanks": "Dankschen. Dyy Ruckmäldig isch uf dr Syte „[$2 $1]“ gspycheret wore.",
        "searchsuggest-search": "Suechi",
        "searchsuggest-containing": "din het s …",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 55a6083..9d4a797 100644 (file)
@@ -25,7 +25,8 @@
                        "Vyom",
                        "Macofe",
                        "Arbhatt",
-                       "NehalDaveND"
+                       "NehalDaveND",
+                       "Nisargjhaveri"
                ]
        },
        "tog-underline": "કડીઓની નીચે લીટી (અંડરલાઇન):",
        "navigation-heading": "દિશાશોધન મેનુ",
        "errorpagetitle": "ત્રુટિ",
        "returnto": "$1 પર પાછા જાઓ.",
-       "tagline": "{{SITENAME}}થી",
+       "tagline": "{{SITENAME}}માàª\82થà«\80",
        "help": "મદદ",
        "search": "શોધો",
        "searchbutton": "શોધો",
        "upload-too-many-redirects": "URLમાં ઘણાં ઉપ નિર્દેશનો છે.",
        "upload-http-error": " HTTP ત્રુટિ : $1",
        "upload-copy-upload-invalid-domain": "આ વેબસાઇટ પરથી ફાઈલ નહીં ચડાવાય.",
+       "upload-dialog-title": "ફાઇલ ચઢાવો",
+       "upload-dialog-button-cancel": "રદ કરો",
+       "upload-dialog-button-done": "સંપન્ન",
+       "upload-dialog-button-save": "સાચવો",
+       "upload-dialog-button-upload": "ચઢાવો",
+       "upload-dialog-label-select-file": "ફાઈલ પસંદ કરો",
+       "upload-dialog-label-infoform-title": "વિગતો",
+       "upload-dialog-label-infoform-name": "નામ",
+       "upload-dialog-label-infoform-description": "વર્ણન",
+       "upload-dialog-label-usage-title": "વપરાશ",
+       "upload-dialog-label-usage-filename": "ફાઈલનું નામ",
        "backend-fail-stream": "ફાઈલ $1 ને લાવી ન શકાઈ.",
        "backend-fail-backup": "ફાઈલ $1 ની પ્રત ન સાચવી શકાઈ.",
        "backend-fail-notexists": "ફાઈલ $1 ઉપલબ્ધ નથી.",
        "linksearch-pat": "શોધ આલેખ",
        "linksearch-ns": "નામાવકાશ:",
        "linksearch-ok": "શોધ",
-       "linksearch-text": "વાઇલ્ડ કાર્ડ જેવા કે \"*.wikipedia.org\" અહીં વપરાયા હોઈ શકે છે.\nઓછામાં ઓછું ઉચ્ચસ્તરનું ડોમેઇન જરૂરી છે, દા.ત. ''*.org\".<br />\nમાન્ય {{PLURAL:$2|પ્રોટોકોલ|પ્રોટોકોલ્સ}}: <code>$1</code> (જો કોઇ પ્રોટોકોલ આપેલ નહી હોય તો http:// એ મૂળભૂત ગણાશે).",
+       "linksearch-text": "વાઇલ્ડ કાર્ડ જેવા કે \"*.wikipedia.org\" અહીં વપરાયા હોઈ શકે છે.\nઓછામાં ઓછું ઉચ્ચસ્તરનું ડોમેઇન જરૂરી છે, દા.ત. ''*.org\".<br />\nમાન્ય {{PLURAL:$2|પ્રોટોકોલ|પ્રોટોકોલ્સ}}: $1 (જો કોઇ પ્રોટોકોલ આપેલ નહી હોય તો http:// એ મૂળભૂત ગણાશે).",
        "linksearch-line": "$1 એ $2થી જોડાયેલ છે",
        "linksearch-error": "યજમાન નામની શરૂઆતમાં જ વાઈલ્ડકાર્ડ પ્રકટ થશે",
        "listusersfrom": "આનાથી શરૂ થતા સભ્યો દર્શાવો:",
        "emailuser": "સભ્યને ઇ-મેલ કરો",
        "emailuser-title-target": "આ {{GENDER:$1|સભ્ય}}ને ઇમેલ કરો",
        "emailuser-title-notarget": "ઇ-મેલ વપરાશકર્તા",
-       "emailpage": "ઈ-મેલ સભ્ય",
        "emailpagetext": "તમે નીચે દર્શાવેલ ફોર્મ વાપરી આ {{GENDER:$1|સભ્ય}}ને ઇ-મેલ મોકલી શકો છો.\nતમે [[Special:Preferences|તમારી પસંદમાં]] જે ઇ-મેલ સરનામું લખ્યું હશે તે \"દ્વારા\"ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.",
        "defemailsubject": "{{SITENAME}} સભ્ય $1 તરફથી ઈ-મેલ",
        "usermaildisabled": "સભ્યનો ઈ-મેલ નિષ્ક્રિય કરાયો",
        "emailccsubject": "$1ને તમે મોકલેલા સંદેશાની પ્રત: $2",
        "emailsent": "ઈ-મેલ મોકલી દેવાયો",
        "emailsenttext": "તમારો ઈ-મેલ મોકલી દેવાયો છે",
-       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"{{int:emailpage}} (સભ્યને ઇ-મેલ કરો)\" કડી મારફતે મોકલવામાં આવ્યો છે.",
+       "emailuserfooter": "આ પત્ર $1 દ્વારા $2ને  {{SITENAME}} પરની \"{{int:emailuser}} (સભ્યને ઇ-મેલ કરો)\" કડી મારફતે મોકલવામાં આવ્યો છે.",
        "usermessage-summary": "તંત્ર સંદેશ મૂક્યો",
        "usermessage-editor": "તંત્ર સંદેશાઓ",
        "watchlist": "ધ્યાનસૂચી",
        "movepagebtn": "પાનું ખસેડો",
        "pagemovedsub": "પાનું સફળતા પૂર્વક ખસેડવામાં આવ્યું છે",
        "movepage-moved": "'''\"$1\" નું નામ બદલીને \"$2\" કરવામાં આવ્યું છે'''",
-       "movepage-moved-redirect": "દિશાનિર્દેશના રચાયું",
+       "movepage-moved-redirect": "દિશાનિર્દેશ રચાયું",
        "movepage-moved-noredirect": "દિશાનિર્દેશન ટાળવામાં આવ્યું છે",
        "articleexists": "આ નામનું પાનું અસ્તિત્વમાં છે, અથવાતો તમે પસંદ કરેલું નામ અસ્વિકાર્ય છો.\nકૃપા કરી અન્ય નામ પસંદ કરો.",
        "cantmove-titleprotected": "આ સ્થાને તમે પાનું નહીં હટાવી શકો કેમ કે નવું શીર્ષક રચના કરવા પહેલેથી આરક્ષીત છે",
        "tooltip-ca-nstab-main": "સૂચિ વાળું પાનુ જુઓ",
        "tooltip-ca-nstab-user": "સભ્યનું પાનું જુઓ",
        "tooltip-ca-nstab-media": "મિડિયાનું પાનું જુઓ",
-       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª¤àª®à«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95શà«\8b નહી",
+       "tooltip-ca-nstab-special": "àª\86 àª\96ાસ àªªàª¾àª¨à«\81àª\82 àª\9bà«\87, àª\85નà«\87 àª¤à«\87માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95ાશà«\87 નહી",
        "tooltip-ca-nstab-project": "પરિયોજનાનું પાનું જુવો",
        "tooltip-ca-nstab-image": "ફાઇલ વિષેનું પાનું જુઓ",
        "tooltip-ca-nstab-mediawiki": "તંત્ર સંદેશ જુઓ",
        "spambot_username": "મિડિયાવિકી સ્પેમ સફાઇ",
        "spam_reverting": " $1 પર કડી ન ધરાવતા છેલ્લા ફેરેફાર પર પુનઃ સ્થાપન કરાય છે",
        "spam_blanking": "બધા ફેરફારોમાં  $1 પર કડી હતી, આને હટાવી દેવામાં આવે છે",
-       "simpleantispam-label": "સ્પામ-વિરોધી તપાસ.\nઆને '''ના''' ભરશો!",
+       "simpleantispam-label": "સ્પામ-વિરોધી તપાસ.\nઆને <strong>ના</strong> ભરશો!",
        "pageinfo-title": " \"$1\" માટે માહિતી",
        "pageinfo-not-current": "ક્ષમા કરો, જુની આવૃત્તિ માંથી આ સૂચના આપી નથી શકતા.",
        "pageinfo-header-basic": "સામાન્ય માહિતી",
index 8bc83be..4cdb75e 100644 (file)
@@ -29,7 +29,8 @@
                        "Matanya",
                        "GilCahana",
                        "Ldorfman",
-                       "LaG roiL"
+                       "LaG roiL",
+                       "Eraab"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "tog-numberheadings": "מספור כותרות אוטומטי",
        "tog-showtoolbar": "הצגת סרגל העריכה",
        "tog-editondblclick": "עריכת דפים בלחיצה כפולה",
-       "tog-editsectiononrightclick": "עריכת פסקאות באמצעות לחיצה ימנית על כותרות הפסקאות",
-       "tog-watchcreations": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×\99צרת×\99 ×\95ק×\91צ×\99×\9d ×©×\94×¢×\9c×\99תי",
-       "tog-watchdefault": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×¢×¨×\9bתי",
-       "tog-watchmoves": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\94×¢×\91רתי",
-       "tog-watchdeletion": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\9e×\97קתי",
-       "tog-watchrollback": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×\91×\94×\9d ×\91×\99צעת×\99 ×©×\97×\96×\95ר ×\9e×\94×\99ר",
-       "tog-minordefault": "×\94×\92×\93רת ×\9b×\9c ×¤×¢×\95×\9cת ×¢×¨×\99×\9b×\94 ×\9b×\9eשנ×\99ת ×\90×\9d ×\9c×\90 ×¦×\95×\99×\9f ×\90×\97רת",
+       "tog-editsectiononrightclick": "×\94פע×\9cת ×¢×¨×\99×\9bת ×¤×¡×§×\90×\95ת ×\91×\90×\9eצע×\95ת ×\9c×\97×\99צ×\94 ×\99×\9e× ×\99ת ×¢×\9c ×\9b×\95תר×\95ת ×\94פסק×\90×\95ת",
+       "tog-watchcreations": "×\94×\95ספת ×\93פ×\99×\9d ×©×\99צרת×\99 ×\95ק×\91צ×\99×\9d ×©×\94×¢×\9c×\99ת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchdefault": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×¢×¨×\9bת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchmoves": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\94×¢×\91רת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchdeletion": "×\94×\95ספת ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\9e×\97קת×\99 ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9cי",
+       "tog-watchrollback": "×\94×\95ספת ×\93פ×\99×\9d ×©×\91×\94×\9d ×\91×\99צעת×\99 ×©×\97×\96×\95ר ×\9c×\92רס×\94 ×§×\95×\93×\9eת ×\9cרש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\99",
+       "tog-minordefault": "ס×\99×\9e×\95×\9f ×\9b×\9c ×¤×¢×\95×\9cת ×¢×¨×\99×\9b×\94 ×\9b×\9eשנ×\99ת ×\9b×\91ר×\99רת ×\9e×\97×\93×\9c",
        "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה",
        "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה ראשונה",
-       "tog-enotifwatchlistpages": "לשלוח אליי דואר אלקטרוני כאשר משתנה דף או קובץ ברשימת המעקב שלי",
-       "tog-enotifusertalkpages": "לשלוח אליי דואר אלקטרוני כאשר נעשה שינוי בדף שיחת המשתמש שלי",
-       "tog-enotifminoredits": "לשלוח אליי דואר אלקטרוני גם על עריכות משניות של דפים וקבצים",
-       "tog-enotifrevealaddr": "×\97ש×\99פת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\9a ×\91×\94×\95×\93×¢ות דוא\"ל",
+       "tog-enotifwatchlistpages": "לשלוח אליי דוא\"ל כאשר משתנה דף או קובץ ברשימת המעקב שלי",
+       "tog-enotifusertalkpages": "לשלוח אליי דוא\"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי",
+       "tog-enotifminoredits": "לשלוח אליי דוא\"ל גם על עריכות משניות של דפים וקבצים",
+       "tog-enotifrevealaddr": "×\97ש×\99פת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c×\99 ×\91×\94תר×\90ות דוא\"ל",
        "tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים",
        "tog-oldsig": "החתימה הנוכחית:",
        "tog-fancysig": "התייחסות לחתימה כקוד ויקי (ללא קישור אוטומטי)",
-       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\9e×\94×\99רה",
+       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\97×\99ה",
        "tog-forceeditsummary": "הצגת אזהרה בעת הכנסת תקציר עריכה ריק",
        "tog-watchlisthideown": "הסתרת העריכות שלי ברשימת המעקב",
        "tog-watchlisthidebots": "הסתרת עריכות של בוטים ברשימת המעקב",
        "actionthrottled": "הפעולה הוגבלה",
        "actionthrottledtext": "כאמצעי נגד ספאם, קיימת מגבלה על ביצוע פעולה זו פעמים רבות מדי בזמן קצר, וחרגת מהמגבלה הזאת.\nנא לנסות שוב בעוד מספר דקות.",
        "protectedpagetext": "דף זה מוגן כדי למנוע עריכה ופעולות אחרות.",
-       "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
-       "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו:",
+       "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו.",
+       "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו.",
        "protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
        "editinginterface": "<strong>אזהרה:</strong> הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.",
        "translateinterface": "כדי להוסיף או לשנות תרגומים עבור כל אתרי הוויקי, יש להשתמש ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
        "createacct-benefit-body2": "{{PLURAL:$1|דף|דפים}}",
        "createacct-benefit-body3": "{{PLURAL:$1|תורם|תורמים}} לאחרונה",
        "badretype": "הסיסמאות שהזנת אינן מתאימות.",
+       "usernameinprogress": "יצירת חשבון עבור שם המשתמש הזה כבר התחילה.\nנא להמתין.",
        "userexists": "שם המשתמש שבחרתם כבר נמצא בשימוש.\nאנא בחרו שם אחר.",
        "loginerror": "שגיאה בכניסה לאתר",
        "createacct-error": "שגיאה ביצירת חשבון",
        "readonlywarning": "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה לא ניתן לשמור את הטקסט הערוך.'''\nבאפשרותך להעתיק ולהדביק את הטקסט לתוך קובץ טקסט ולשמור אותו למאוחר יותר.\n\nמפעיל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
        "protectedpagewarning": "'''אזהרה: דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "semiprotectedpagewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים לערוך אותו.\nפעולת היומן האחרונה מוצגת להלן:",
-       "cascadeprotectedwarning": "'''אזהרה:''' דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
+       "cascadeprotectedwarning": "<strong>אזהרה:</strong> דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
        "titleprotectedwarning": "'''אזהרה: דף זה מוגן כך שדרושות [[Special:ListGroupRights|הרשאות מסוימות]] כדי ליצור אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "templatesused": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בדף זה:",
        "templatesusedpreview": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בתצוגה המקדימה הזאת:",
        "search-category": "(קטגוריה $1)",
        "search-file-match": "(התאמה בתוכן הקובץ)",
        "search-suggest": "האם התכוונת ל: $1",
+       "search-rewritten": "מוצגות התוצאות עבור $1. ניתן לחפש $2 במקום זאת.",
        "search-interwiki-caption": "מיזמי אחות",
        "search-interwiki-default": "תוצאות מ{{GRAMMAR:תחילית|$1}}:",
        "search-interwiki-more": "(עוד)",
        "prefs-watchlist-days": "מספר הימים המרבי שיוצגו ברשימת המעקב:",
        "prefs-watchlist-days-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
        "prefs-watchlist-edits": "מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:",
-       "prefs-watchlist-edits-max": "×\9eספר ×\9e×\99ר×\91×\99: 1000",
+       "prefs-watchlist-edits-max": "מספר מרבי: 1000",
        "prefs-watchlist-token": "אסימון לרשימת המעקב:",
        "prefs-misc": "שונות",
        "prefs-resetpass": "שינוי סיסמה",
        "rows": "שורות:",
        "columns": "עמודות:",
        "searchresultshead": "חיפוש",
-       "stub-threshold": "סף לעיצוב <a href=\"#\" class=\"stub\">קישורים</a> לקצרמרים (בתים):",
+       "stub-threshold": "סף לעיצוב קישורים לקצרמרים ($1):",
+       "stub-threshold-sample-link": "דוגמה",
        "stub-threshold-disabled": "מבוטל",
        "recentchangesdays": "מספר הימים שיוצגו בדף השינויים האחרונים:",
        "recentchangesdays-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
        "newpageletter": "ח",
        "boteditletter": "ב",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|משתמש אחד עוקב|$1 משתמשים עוקבים}} אחרי הדף]",
-       "rc_categories": "×\94×\92×\91×\9c×\94 ×\9cק×\98×\92×\95ר×\99×\95ת (×\99ש ×\9c×\94פר×\99×\93 ×¢×\9d \"|\")",
-       "rc_categories_any": "×\94×\9b×\95×\9c",
+       "rc_categories": "×\94×\92×\91×\9c×\94 ×\9cק×\98×\92×\95ר×\99×\95ת (×\9e×\95פר×\93×\95ת ×\91ת×\95 \"|\"):",
+       "rc_categories_any": "×\9b×\9c ×\90×\97ת ×\9e×\94× ×\91×\97ר×\95ת",
        "rc-change-size-new": "{{PLURAL:$1|בית אחד|$1 בתים}} לאחר השינוי",
        "newsectionsummary": "/* $1 */ פסקה חדשה",
        "rc-enhanced-expand": "הצגת הפרטים",
        "upload-too-many-redirects": "הכתובת מכילה הפניות רבות מדי",
        "upload-http-error": "התרחשה שגיאת HTTP‏: $1",
        "upload-copy-upload-invalid-domain": "העלאת קבצים משרת זה אינה אפשרית.",
+       "upload-dialog-title": "העלאת קובץ",
+       "upload-dialog-error": "אירעה שגיאה",
+       "upload-dialog-warning": "אירעה אזהרה",
+       "upload-dialog-button-cancel": "ביטול",
+       "upload-dialog-button-done": "בוצע",
+       "upload-dialog-button-save": "שמירה",
+       "upload-dialog-button-upload": "העלאה",
+       "upload-dialog-label-select-file": "בחירת קובץ",
+       "upload-dialog-label-infoform-title": "פרטים",
+       "upload-dialog-label-infoform-name": "שם",
+       "upload-dialog-label-infoform-description": "תיאור",
+       "upload-dialog-label-usage-title": "שימושים",
+       "upload-dialog-label-usage-filename": "שם הקובץ",
        "backend-fail-stream": "לא הייתה אפשרות להזרים את הקובץ \"$1\".",
        "backend-fail-backup": "לא הייתה אפשרות לגבות את הקובץ \"$1\".",
        "backend-fail-notexists": "הקובץ \"$1\" אינו קיים.",
        "booksources-text": "להלן רשימת קישורים לאתרים אחרים המוכרים ספרים חדשים ויד־שנייה, ושבהם עשוי להיות מידע נוסף לגבי ספרים שאתם מחפשים:",
        "booksources-invalid-isbn": "המסת\"ב שניתן כנראה אינו תקין; אנא בדקו אם ביצעתם טעויות בהעתקה מהמידע המקורי.",
        "specialloguserlabel": "בוצעו על־ידי המשתמש:",
-       "speciallogtitlelabel": "יעד (כותרת או משתמש):",
+       "speciallogtitlelabel": "יעד (כותרת או {{ns:user}}:שם עבור משתמש):",
        "log": "יומנים",
        "all-logs-page": "כל היומנים הציבוריים",
        "alllogstext": "תצוגה משולבת של כל סוגי היומנים הזמינים ב{{grammar:תחילית|{{SITENAME}}}}.\nניתן לצמצם את התצוגה על־ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
        "emailuser": "שליחת דואר אלקטרוני למשתמש זה",
        "emailuser-title-target": "שליחת דוא\"ל {{GENDER:$1|למשתמש זה|למשתמשת זו}}",
        "emailuser-title-notarget": "שליחת דוא\"ל למשתמש",
-       "emailpage": "שליחת דואר למשתמש",
        "emailpagetext": "ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני {{GENDER:$1|למשתמש זה|למשתמשת זו}}.\nכתובת הדואר האלקטרוני שכתבת ב[[Special:Preferences|העדפות המשתמש שלך]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.",
        "defemailsubject": "דוא\"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש \"$1\"",
        "usermaildisabled": "שליחת דוא\"ל למשתמשים מבוטלת",
        "emailccsubject": "העתק של הודעתך למשתמש $1: $2",
        "emailsent": "הדואר נשלח",
        "emailsenttext": "הודעת הדואר האלקטרוני שלך נשלחה.",
-       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"{{int:emailpage}}\" ב{{GRAMMAR:תחילית|{{SITENAME}}}}.",
+       "emailuserfooter": "דואר זה נשלח על־ידי $1 ל{{GRAMMAR:תחילית|$2}} באמצעות פעולת \"{{int:emailuser}}\" ב{{GRAMMAR:תחילית|{{SITENAME}}}}.",
        "usermessage-summary": "השארת הודעת מערכת.",
        "usermessage-editor": "שולח הודעות המערכת",
        "watchlist": "רשימת המעקב",
        "watchlistanontext": "נדרשת כניסה לחשבון כדי לצפות או לערוך פריטים ברשימת המעקב.",
        "watchnologin": "לא נכנסת לחשבון",
        "addwatch": "הוספה לרשימת המעקב",
-       "addedwatchtext": "×\94×\93×£ \"[[:$1]]\" × ×\95סף ×\9c[[Special:Watchlist|רש×\99×\9eת ×\94×\9eעק×\91]].\nש×\99× ×\95×\99×\99×\9d ×©×\99×\99ער×\9b×\95 ×\91עת×\99×\93 ×\91×\93×£ ×\96×\94 ×\95×\91×\93×£ ×\94ש×\99×\97×\94 ×©×\9c×\95, ×\99×\95צ×\92×\95 ×\91רש×\99×\9eת ×\94×\9eעק×\91.",
+       "addedwatchtext": "×\94×\93×£ \"[[:$1]]\" ×\95×\93×£ ×\94ש×\99×\97×\94 ×©×\9c×\95 × ×\95ספ×\95 ×\9c[[Special:Watchlist|רש×\99×\9eת ×\94×\9eעק×\91]] ×©×\9c×\9a.",
        "addedwatchtext-short": "הדף \"$1\" נוסף לרשימת המעקב.",
        "removewatch": "הסרה מרשימת המעקב",
-       "removedwatchtext": "×\94×\93×£ \"[[:$1]]\" ×\94×\95סר ×\9e[[Special:Watchlist|רש×\99×\9eת ×\94×\9eעק×\91]].",
+       "removedwatchtext": "×\94×\93×£ \"[[:$1]]\" ×\95×\93×£ ×\94ש×\99×\97×\94 ×©×\9c×\95 ×\94×\95סר×\95 ×\9e[[Special:Watchlist|רש×\99×\9eת ×\94×\9eעק×\91]] ×©×\9c×\9a.",
        "removedwatchtext-short": "הדף \"$1\" הוסר מרשימת המעקב.",
        "watch": "מעקב",
        "watchthispage": "מעקב אחרי דף זה",
        "changecontentmodel-success-title": "מודל התוכן שוּנה",
        "changecontentmodel-success-text": "מודל התוכן של [[:$1]] שוּנה.",
        "changecontentmodel-cannot-convert": "התוכן בדף [[:$1]] אינו יכול להיות מומר לסוג של $2.",
-       "changecontentmodel-title-cantexist": "לא יכול להיות דף בשם $1.",
        "changecontentmodel-nodirectediting": "מודל התוכן $1 אינו תומך בעריכה ישירה",
        "log-name-contentmodel": "יומן שינויי מודל תוכן",
        "log-description-contentmodel": "אירועים שקשורים למודל תוכן של דפים",
        "undeletepagetext": "{{PLURAL:$1|הדף שלהלן נמחק, אך הוא עדיין בארכיון וניתן לשחזר אותו|הדפים שלהלן נמחקו, אך הם עדיין בארכיון וניתן לשחזר אותם}}.\nייתכן שהארכיון ינוקה מעת לעת.",
        "undelete-fieldset-title": "שחזור גרסאות",
        "undeleteextrahelp": "לשחזור היסטוריית הגרסאות המלאה של הדף, אל תסמנו שום תיבת סימון ולחצו על '''{{int:undeletebtn}}'''.\nלשחזור של גרסאות מסוימות בלבד, סמנו את תיבות הסימון של הגרסאות הללו, ולחצו על '''{{int:undeletebtn}}'''.",
-       "undeleterevisions": "{{PLURAL:$1|×\92רס×\94 ×\90×\97ת × ×©×\9eר×\94|$1 ×\92רס×\90×\95ת × ×©×\9eר×\95}} ×\91×\90ר×\9b×\99×\95×\9f",
+       "undeleterevisions": "{{PLURAL:$1|×\92רס×\94 ×\90×\97ת × ×\9e×\97ק×\94|$1 ×\92רס×\90×\95ת × ×\9e×\97ק×\95}}",
        "undeletehistory": "אם תשחזרו את הדף, כל הגרסאות תשוחזרנה להיסטוריית השינויים שלו.\nאם יש כבר דף חדש באותו השם, הגרסאות והשינויים יופיעו רק בדף ההיסטוריה שלו.",
        "undeleterevdel": "השחזור לא יבוצע אם הגרסה הנוכחית של הדף מחוקה בחלקה. במקרה כזה, עליכם לבטל את ההסתרה של הגרסאות המחוקות החדשות ביותר.",
        "undeletehistorynoadmin": "דף זה נמחק. הסיבה למחיקה מוצגת בתקציר מטה, ביחד עם פרטים על המשתמשים שערכו את הדף לפני מחיקתו. הטקסט של גרסאות אלו זמין למפעילי מערכת בלבד.",
        "tooltip-ca-nstab-main": "צפייה בדף התוכן",
        "tooltip-ca-nstab-user": "צפייה בדף המשתמש",
        "tooltip-ca-nstab-media": "צפייה בפריט המדיה",
-       "tooltip-ca-nstab-special": "זהו דף מיוחד, לא ניתן לערוך אותו",
+       "tooltip-ca-nstab-special": "×\96×\94×\95 ×\93×£ ×\9e×\99×\95×\97×\93, ×\95×\9c×\90 × ×\99ת×\9f ×\9cער×\95×\9a ×\90×\95ת×\95",
        "tooltip-ca-nstab-project": "צפייה בדף המיזם",
        "tooltip-ca-nstab-image": "צפייה בדף הקובץ",
        "tooltip-ca-nstab-mediawiki": "צפייה בהודעת המערכת",
        "spam_reverting": "שחזור לגרסה אחרונה שלא כוללת קישורים ל־$1",
        "spam_blanking": "כל הגרסאות כוללות קישורים ל־$1, מרוקן את הדף",
        "spam_deleting": "כל הגרסאות כוללות קישורים ל־$1, מוחק את הדף",
-       "simpleantispam-label": "בדיקת אנטי־ספאם.\n'''אל''' תמלאו שדה זה!",
+       "simpleantispam-label": "בדיקת אנטי־ספאם.\n<strong>אל</strong> תמלאו שדה זה!",
        "pageinfo-title": "מידע על \"$1\"",
        "pageinfo-not-current": "מצטערים, לא ניתן להציג את המידע הזה לגרסאות ישנות.",
        "pageinfo-header-basic": "מידע בסיסי",
        "pageinfo-robot-index": "מותר",
        "pageinfo-robot-noindex": "אסור",
        "pageinfo-watchers": "מספר העוקבים אחר הדף",
-       "pageinfo-visiting-watchers": "×\9eספר ×\94×¢×\95ק×\91×\99×\9d ×\90×\97ר ×\94×\93×£ ×©×\9e×\91קר×\99×\9d בעריכות האחרונות",
+       "pageinfo-visiting-watchers": "×\9eספר ×\94×¢×\95ק×\91×\99×\9d ×\90×\97ר ×\94×\93×£ ×©×\91×\99קר×\95 בעריכות האחרונות",
        "pageinfo-few-watchers": "פחות מ{{PLURAL:$1|עוקב אחד|־$1 עוקבים}}",
        "pageinfo-few-visiting-watchers": "ייתכן שיש וייתכן שאין משתמש שעוקב אחר הדף ומבקר בעריכות האחרונות",
        "pageinfo-redirects-name": "מספר ההפניות לדף זה",
        "autoredircomment": "הפניה לדף [[$1]]",
        "autosumm-new": "יצירת דף עם התוכן \"$1\"",
        "autosumm-newblank": "יצירת דף ריק",
-       "size-bytes": "$1 בייט",
+       "size-bytes": "{{PLURAL:$1|בייט אחד|$1 בייט}}",
        "size-kilobytes": "$1 קילו־בייט",
        "size-megabytes": "$1 מגה־בייט",
        "size-gigabytes": "$1 ג'יגה־בייט",
        "size-exabytes": "$1 אקסה־בייט",
        "size-zetabytes": "$1 זטה־בייט",
        "size-yottabytes": "$1 יוטה־בייט",
+       "size-pixel": "{{PLURAL:$1|פיקסל אחד|$1 פיקסלים}}",
        "lag-warn-normal": "שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
        "lag-warn-high": "בגלל עיכוב בעדכון בסיס הנתונים, שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.",
        "watchlistedit-normal-title": "עריכת רשימת המעקב",
        "htmlform-cloner-create": "הוספה",
        "htmlform-cloner-delete": "הסרה",
        "htmlform-cloner-required": "דרוש לפחות ערך אחד.",
+       "htmlform-title-badnamespace": "[[:$1]] אינו במרחב השם \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" אינו שם של דף שאפשר ליצור",
+       "htmlform-title-not-exists": "[[:$1]] אינו קיים.",
+       "htmlform-user-not-exists": "<strong>$1</strong> אינו קיים.",
+       "htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
        "sqlite-has-fts": "$1 עם תמיכה בחיפוש בטקסט מלא",
        "sqlite-no-fts": "$1 ללא תמיכה בחיפוש בטקסט מלא",
        "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3&rlm;",
        "logentry-newusers-create2": "חשבון המשתמש $3 נוצר על־ידי $1",
        "logentry-newusers-byemail": "חשבון המשתמש $3 נוצר על־ידי $1 והסיסמה נשלחה בדוא\"ל",
        "logentry-newusers-autocreate": "חשבון המשתמש $1 {{GENDER:$2|נוצר}} אוטומטית",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|העביר|העבירה}} את הגדרות ההגנה מהדף $4 אל הדף $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3 מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}&rlm;",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3&rlm;",
        "logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
        "special-characters-title-endash": "קו מפריד",
        "special-characters-title-emdash": "קו מפריד ארוך",
        "special-characters-title-minus": "מינוס",
+       "mw-widgets-dateinput-no-date": "לא נבחר תאריך",
        "mw-widgets-titleinput-description-new-page": "הדף עדיין לא קיים",
        "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}"
 }
index 69c694f..a007245 100644 (file)
@@ -63,7 +63,8 @@
                        "Ankita-ks",
                        "Sahilrathod",
                        "Hindustanilanguage",
-                       "राम प्रसाद जोशी"
+                       "राम प्रसाद जोशी",
+                       "ShrUtiable"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "missingcommentheader": "'''अनुस्मारक:''' आपने इस टिप्पणी का कोई शीर्षक नहीं दिया है।\nअगर आप \"{{int:savearticle}}\" पर दोबारा क्लिक करते हैं तो आपके बदलाव बिना शीर्षक के संजोये जायेंगे।",
        "summary-preview": "सारांश की झलक:",
        "subject-preview": "विषय/शीर्षक की झलक:",
-       "previewerrortext": "à¤\85ापके परिवर्तनों का पूर्वावलोकन करने का प्रयास करते समय एक त्रुटि हुई।",
+       "previewerrortext": "à¤\86पके परिवर्तनों का पूर्वावलोकन करने का प्रयास करते समय एक त्रुटि हुई।",
        "blockedtitle": "सदस्य अवरुद्ध है",
        "blockedtext": "'''आपका सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिया गया हैं ।'''\n\nअवरोध $1 द्वारा किया गया था।\nअवरोध का कारण है ''$2''\n\n* अवरोध का आरंभ: $8\n* अवरोध की समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइस अवरोध के बारे में चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकते हैं।\nअगर आपने [[Special:Preferences|अपनी वरीयताओं]] में वैध ई-मेल पता प्रविष्ट किया है तो ही आप 'इस प्रयोक्ता को ई-मेल भेजें' वाली सुविधा का इस्तेमाल कर सकते हैं और आपको इसका इस्तेमाल करने से नहीं रोका गया है।\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "autoblockedtext": "एक और सदस्य आपके ही आइ॰पी का प्रयोग कर रहे थे और उन्हें $1 द्वारा अवरोधित कर दिया गया था। फलस्वरूप आपका आइ॰पी पता भी स्वचालित रूप से अवरोधित हो गया है।\nअवरोध करने का कारण है:\n\n:''$2''\n\n* अवरोध प्रारंभ: $8\n* अवरोध समाप्ति: $6\n* अवरोधित सदस्य: $7\n\nअवरोध की चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कर सकते हैं।\n\nकृपया ध्यान दें कि यदि आपक \"इस सदस्य को ई-मेल भेजें\" वाली सुविधा का प्रयोग करना चाहते हैं तो आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना चाहिए और इसका प्रयोग आपके लिए अवरोधित नहीं होना चाहिए।\n\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "linksearch-pat": "खोजने के लिये पाठ:",
        "linksearch-ns": "नामस्थान:",
        "linksearch-ok": "खोजें",
-       "linksearch-text": "\"*.wikipedia.org\" जैसे वाईल्ड-कार्ड्स प्रयोग किये जा सकते हैं।\nकम-से-कम \".org\" जैसे किसी top-level डोमेन की आवश्यकता है।<br />\nस्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: <code>$1</code> (यदि कोई प्रोटोकॉल ना दिया जाए तो http:// का प्रयोग किया जाता है)",
+       "linksearch-text": "\"*.wikipedia.org\" जैसे वाईल्ड-कार्ड्स प्रयोग किये जा सकते हैं।\nकम-से-कम \".org\" जैसे किसी top-level डोमेन की आवश्यकता है।<br />\nस्वीकार्य {{PLURAL:$2|प्रोटोकॉल}}: $1 (यदि कोई प्रोटोकॉल ना दिया जाए तो http:// का प्रयोग किया जाता है)",
        "linksearch-line": "$2 में से $1 जुडा हुआ हैं",
        "linksearch-error": "वाईल्डकार्ड्स होस्टनाम के सिर्फ शुरू में आ सकते हैं।",
        "listusersfrom": "इस अक्षर से शुरू होने वाले सदस्य दर्शाएँ:",
        "emailuser": "इस सदस्य को ई-मेल भेजें",
        "emailuser-title-target": "इस {{GENDER:$1|सदस्य|सदस्या}} को ई-मेल करें।",
        "emailuser-title-notarget": "सदस्य को ई-मेल करें",
-       "emailpage": "सदस्य को ई-मेल करें",
        "emailpagetext": "नीचे दिए पर्चे को जरिए आप इस {{GENDER:$1|सदस्य}} को ई-मेल भेज सकते हैं।\nआपने जो पता [[Special:Preferences|अपनी पसंद]] में दिया था वह इस ई-मेल के \"भेजने वाले\" के तौर पर आएगा, अतः प्राप्तकर्ता आपको सीधे जवाब दे सकेंगे।",
        "defemailsubject": "{{SITENAME}} ई-मेल \"$1\" सदस्य से",
        "usermaildisabled": "सदस्य ई-मेल अक्षम किया गया",
        "emailccsubject": "आपके ई-मेल की प्रति जो $1 को भेजा गया: $2",
        "emailsent": "ई-मेल भेज दिया गया है।",
        "emailsenttext": "आपका ई-मेल संदेश भेज दिया गया है।",
-       "emailuserfooter": "इस ई-मेल को $1 द्वारा $2 को भेजा गया था जिसके लिए \"{{int:emailpage}}\" कार्य को {{SITENAME}} पर प्रयोग में लाया गया था।",
+       "emailuserfooter": "इस ई-मेल को $1 द्वारा $2 को भेजा गया था जिसके लिए \"{{int:emailuser}}\" कार्य को {{SITENAME}} पर प्रयोग में लाया गया था।",
        "usermessage-summary": "प्रणाली सन्देश छोड़ रहा है।",
        "usermessage-editor": "सिस्टम दूत",
        "watchlist": "ध्यानसूची",
        "rollback-success": "$1 के संपादन हटाए;\n$2 द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।",
        "sessionfailure-title": "सत्र विफलता",
        "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
+       "changecontentmodel": "पेज कि सामगरिि मोदल को बदलिये",
+       "changecontentmodel-legend": "पृष्ठ सामग्री का नमूना",
+       "changecontentmodel-title-label": "पृष्ठ शीर्षक",
+       "changecontentmodel-model-label": "नयि सामग्री का नमूना",
+       "changecontentmodel-reason-label": "कारण:",
+       "changecontentmodel-success-title": "सामगरि का नामुने मे बदलाव हुुुाा हेेे",
        "protectlogpage": "सुरक्षा लॉग",
        "protectlogtext": "नीचे पृष्ठ सुरक्षा में हुए बदलावों की सूची है।\nवर्तमान सुरक्षित पृष्ठों की सूची के लिए [[Special:ProtectedPages|सुरक्षित पृष्ठों की सूची]] देखें।",
        "protectedarticle": "\"[[$1]]\" सुरक्षित कर दिया",
        "confirmemail_invalid": "गलत कन्फर्मेशन कोड।\nकोड रद्द हो गया होने की संभावना हैं।",
        "confirmemail_needlogin": "आपका इ-मेल पता प्रमाणित करने के लिये, आपको $1 करना पडेगा।",
        "confirmemail_success": "आपका इ-मेल पता अभी प्रमाणित हो गया हैं।\nअभी आप लॉग इन करके विकि का मज़ा ले सकतें हैं।",
-       "confirmemail_loggedin": "à¤\86पà¤\95à¥\87 à¤\87-मà¥\87ल à¤\8fडà¥\8dरà¥\87स à¤\95ा à¤ªà¥\8dरमाणिà¤\95रण à¤ªà¥\82रा à¤¹à¥\8b à¤\97या à¤¹à¥\88à¤\82।",
+       "confirmemail_loggedin": "à¤\86पà¤\95à¥\87 à¤\87-मà¥\87ल à¤ªà¤¤à¤¾ à¤\95ा à¤ªà¥\8dरमाणिà¤\95रण à¤ªà¥\82रा à¤¹à¥\8b à¤\97या à¤¹à¥\88।",
        "confirmemail_subject": "{{SITENAME}} इ-मेल एड्रेस प्रमाणिकरण",
        "confirmemail_body": "किसीने, शायद आपने,  $1 आइपी एड्रेस से,\n{{SITENAME}} पर  \"$2\" इस नाम से खाता खोलने की माँग की हैं।\n\nयह खाता आपही का हैं और {{SITENAME}} पर उपलब्ध इ-मेल\nसुविधा शुरू करने के लिये, नीचे दी गई कड़ी अपने ब्राउज़रमें खोलें:\n\n$3\n\nअगर यह माँग आपने *नहीं* की हैं, तो इसे रद्द करने के लिये\nनीचे दी हुई कड़ी खोलें:\n\n$5\n\nयह निश्चिती कोड $4 को समाप्त हो जायेगा।",
        "confirmemail_body_changed": "किसी ने, शायद आपने ही, आइ॰पी पते $1 से {{SITENAME}} पर \"$2\" सदस्य खाते का ई-मेल पता बदलकर ये पता दिया है।\n\nइस बात की पुष्टि करने के लिये कि यह सदस्य खाता आपका ही है, और {{SITENAME}} पर ई-मेल सुविधाएँ पुनः शुरू करने के लिये निम्न लिंक अपने ब्राउज़र में खोलें:\n\n$3\n\nयदि यह सदस्य खाता आपका नहीं है, ई-मेल पुष्टि रद्द करने के लिये निम्न लिंक पर जाएँ:\n\n$5\n\nये पुष्टिकरण लिंक $6 को $7 बजे के बाद काम नहीं करेंगे।",
index 098f974..6291572 100644 (file)
        "passwordreset": "Password ke badlo",
        "passwordreset-text-one": "Aapan password ke reset kare ke khatir ii form ke bharo.",
        "passwordreset-text-many": "{{PLURAL:$1|Temporary password ke email se le ke khatir ek field me likho}}",
-       "passwordreset-legend": "Password ke badlo",
        "passwordreset-disabled": "II wiki me password ke badle ke ijaajat nai hae.",
        "passwordreset-emaildisabled": "Ii wiki me email ke band kar dewa gais hae.",
        "passwordreset-username": "Sadasya ke naam:",
        "resettokens": "Token ke reset karo",
        "resettokens-text": "Aap aapan private data pe access roke ke khatir token ke reset kare saktaa hae.\n\nAap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae nai to aap ke account ke bare me aur koi ke pataa hae.",
        "resettokens-no-tokens": "Reset kare ke jhatir koi token nai hae.",
-       "resettokens-legend": "Token ke reset karo",
        "resettokens-tokens": "Chinh (token)",
        "resettokens-token-label": "$1 (abhi ke value: $2)",
        "resettokens-watchlist-token": "Dhyan suchi ke web feed token (Atom/RSS) of [[Special:Watchlist|changes to pages on your watchlist]]",
        "nmembers": "$1 {{PLURAL:$1|sadasya|sadasya}}",
        "nmemberschanged": "$1 → $2{{PLURAL:$2|sadasya|sadasya}}",
        "nrevisions": "$1 {{PLURAL:$1|badlao|badlao}}",
-       "nviews": "$1 {{PLURAL:$1|dafe dekha gais hai|dafe dekha gais hai}}",
        "nimagelinks": "$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae",
        "ntransclusions": "$1 {{PLURAL:$1|panna|panna}} me kaam me lawa gais hae",
        "specialpage-empty": "Ii report khatir koi results nai hai.",
        "linksearch-pat": "Khoje ke pattern:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Khojo",
-       "linksearch-text": "Wildcard jaise ki \"*.wikipedia.org\" ke kaam me lawa jaae sake hae.\nIske khatir ek top-level domain, jaise ki \"*.org\" ke jaruri hae.<br /> \nSupport karaa gais {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// if no protocol is specified).",
+       "linksearch-text": "Wildcard jaise ki \"*.wikipedia.org\" ke kaam me lawa jaae sake hae.\nIske khatir ek top-level domain, jaise ki \"*.org\" ke jaruri hae.<br /> \nSupport karaa gais {{PLURAL:$2|protocol|protocols}}: $1 (defaults to http:// if no protocol is specified).",
        "linksearch-line": "$1, $2 se jurraa hai",
        "linksearch-error": "Wildcards khaali hostname ke suruu me hoe ke chaahi.",
        "listusersfrom": "Sadasya jon ki hian se suruu hoe hai ke dekhao:",
index dfafa77..50519e3 100644 (file)
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazan objekt",
        "content-json-empty-array": "Prazno polje",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] s više od jedne vrijednosti za parametar \"$3\". Rabit će se samo posljednja navedena vrijenost.",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija\n\nTrebala bi imati manje od $2 {{PLURAL:$2|poziva|poziva}}, sada ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "expensive-parserfunction-category": "Stranice s previše poziva opterećujućih parserskih funkcija",
        "post-expand-template-inclusion-warning": "Upozorenje: Veličina uključenih predložaka je prevelika.\nNeki predlošci neće biti uključeni.",
        "rev-deleted-text-view": "Ova izmjena je '''izbrisana'''.\nMožete ju vidjeti; detalji se nalaze u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "rev-suppressed-text-view": "Ova izmjena stranice je '''skrivena'''.\nMožete ju pregledati; više podataka možete vidjeti u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji skrivanja].",
        "rev-deleted-no-diff": "Ne možete vidjeti ovu inačicu zbog toga što je jedna od izmjena '''izbrisana'''.\nMožda postoji više informacija u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
-       "rev-suppressed-no-diff": "Ne možete vidjeti ove razlike jer je jedna od revizija '''obrisana'''.",
+       "rev-suppressed-no-diff": "Ne možete vidjeti ove razlike jer je jedna od izmjena '''obrisana'''.",
        "rev-deleted-unhide-diff": "Jedna od inačica ove izmjene je '''izbrisana'''.\nDetalji se nalaze u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].\nMožete i dalje [$1 vidjeti ovu izmjenu] ukoliko želite nastaviti.",
        "rev-suppressed-unhide-diff": "Jedna od revizija ove razlike je '''sakrivena'''.\nViše podataka možete vidjeti u [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} evidenciji sakrivanja].\nMožete [$1 vidjeti ove razlike] ako želite nastaviti.",
        "rev-deleted-diff-view": "Jedna od izmjena je '''izbrisana'''.\nMožete ju vidjeti; detalji se nalaze u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "rows": "Redova",
        "columns": "Stupaca",
        "searchresultshead": "Prikaz rezultata pretrage",
-       "stub-threshold": "Prag za formatiranje poput <a href=\"#\" class=\"stub\">poveznice mrve</a>:",
+       "stub-threshold": "Prag za formatiranje poveznice na mrve ($1):",
        "stub-threshold-disabled": "Onemogućeno",
        "recentchangesdays": "Broj dana prikazanih u nedavnim promjenama:",
        "recentchangesdays-max": "(maksimalno $1 {{PLURAL:$1|dan|dana}})",
        "linksearch-pat": "Uzorak traženja:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Traži",
-       "linksearch-text": "Možete koristiti džoker znakove poput \"*.wikipedia.org\".\nPotrebno je navesti osnovnu domenu (TLD), npr. \"*.org\".<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http:// ako nijedan protokol nije naveden).",
+       "linksearch-text": "Možete koristiti džoker znakove poput \"*.wikipedia.org\".\nPotrebno je navesti osnovnu domenu (TLD), npr. \"*.org\".<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: $1 (default je http:// ako nijedan protokol nije naveden).",
        "linksearch-line": "$1 poveznica s članka $2",
        "linksearch-error": "Džoker znakovi se mogu rabiti samo na početku imena poslužitelja.",
        "listusersfrom": "Prikaži suradnike počevši od:",
        "emailuser": "Pošalji mu e-poruku",
        "emailuser-title-target": "Pošalji poruku {{GENDER:$1|suradniku|suradnici|suradniku}}",
        "emailuser-title-notarget": "Pošalji e-poštu suradniku",
-       "emailpage": "Pošalji e-poštu suradniku",
        "emailpagetext": "Možete koristiti ovaj obrazac za slanje elektroničke pošte {{GENDER:$1|suradniku|suradnici}}.\nE-mail adresa iz Vaših [[Special:Preferences|postavki]] nalazit će se u \"From\" polju poruke i primatelj će Vam moći izravno odgovoriti.",
        "defemailsubject": "{{SITENAME}} e-mail od suradnika \"$1\"",
        "usermaildisabled": "Suradnička e-pošta je onemogućena",
        "special-characters-group-thai": "Tajlandski (tajski) znakovi",
        "special-characters-group-lao": "laoski znakovi",
        "special-characters-group-khmer": "kmerski",
+       "mw-widgets-dateinput-placeholder-day": "GGGG-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
        "mw-widgets-titleinput-description-redirect": "preusmjeravanje na $1"
 }
index 64acf51..5a2d9f3 100644 (file)
        "linksearch-pat": "Suchmuster:",
        "linksearch-ns": "Noomeraum:",
        "linksearch-ok": "Suche",
-       "linksearch-text": "Die Spezialseit ermöchlicht die Such noh Seite, in dene bestimmte Weblinks enthalt sind. Dabei könne Platzhalter wie beispielsweis <code>*.beispiel.de</code> benutzt sin. Es muss minnschtens en Top-Level-Domain, z. B. \"*.org\". ppngeb sin. <br />{{PLURAL:$2|Unnergeschtütztes Protokoll|Unnergestützte Protokolle}}: <code>$1</code> (Standard ist http, falls ken Protokoll angeb ist.)",
+       "linksearch-text": "Die Spezialseit ermöchlicht die Such noh Seite, in dene bestimmte Weblinks enthalt sind. Dabei könne Platzhalter wie beispielsweis <code>*.beispiel.de</code> benutzt sin. Es muss minnschtens en Top-Level-Domain, z. B. \"*.org\". ppngeb sin. <br />{{PLURAL:$2|Unnergeschtütztes Protokoll|Unnergestützte Protokolle}}: $1 (Standard ist http, falls ken Protokoll angeb ist.)",
        "linksearch-line": "$1 ist verlinkt von $2",
        "linksearch-error": "Wildcards könne nuar am Oonfang von der URL verwendt sin.",
        "listusersfrom": "Zeich Benutzer ab:",
index 012a86f..fa9ce16 100644 (file)
        "passwordreset": "Hesło wróćo stajić",
        "passwordreset-text-one": "Wupjelń tutón formular, zo by swoje hesło anulował.",
        "passwordreset-text-many": "{{PLURAL:$1|Wupjelń jedne z polow, zo by nachwilne hesło přez e-mejl dóstał.}}",
-       "passwordreset-legend": "Hesło wróćo stajić",
        "passwordreset-disabled": "Wróćostajenje hesłow je so na  tutym wikiju znjemóžniło.",
        "passwordreset-emaildisabled": "E-mejlowe funkcije su so na tutym wikiju znjemóžnili.",
        "passwordreset-username": "Wužiwarske mjeno:",
        "resettokens": "Tokeny wróćo stajić",
        "resettokens-text": "Móžeš tokeny wróćo stajić, kotrež přistup na wěste priwatne daty dowoleja, kotrež su z twojim kontom zwjazane.\n\nTy dyrbjał zo činić, jeli sy je zmylnje z někim dźělił abo jelic twoje konto je so napadało.",
        "resettokens-no-tokens": "Tokeny za wróćostajenje njejsu.",
-       "resettokens-legend": "Tokeny wróćo stajić",
        "resettokens-tokens": "Tokeny:",
        "resettokens-token-label": "$1 (aktualna hódnota: $2)",
        "resettokens-watchlist-token": "Token za webkanal (Atom/RSS) [[Special:Watchlist|změnow na stronach w twojich wobkedźbowankach]]",
        "randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žane strony njejsu.",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Připadna strona w kategoriji",
+       "randomincategory-submit": "W porjadku",
        "randomredirect": "Připadne daleposrědkowanje",
        "randomredirect-nopages": "Žane daleposrědkowanja w mjenowym rumje \"$1\".",
        "statistics": "Statistika",
        "nmembers": "{{PLURAL:$1|$1 čłon|$1 čłonaj|$1 čłony|$1 čłonow}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|čłon|čłonaj|čłonojo|čłonow}}",
        "nrevisions": "$1 {{PLURAL:$1|wobdźěłanje|wobdźěłani|wobdźěłanja|wobdźěłanjow}}",
-       "nviews": "$1 {{PLURAL:$1|jedyn wopyt|wopytaj|wopyty|wopytow}}",
        "nimagelinks": "Wužiwa so na $1 {{PLURAL:$1|stronje|stronomaj|stronach|stronach}}",
        "ntransclusions": "wužiwa so na $1 {{PLURAL:$1|stronje|stronomaj|stronach|stronach}}",
        "specialpage-empty": "Tuchwilu žane zapiski.",
        "linksearch-pat": "Pytanski muster:",
        "linksearch-ns": "Mjenowy rum:",
        "linksearch-ok": "Pytać",
-       "linksearch-text": "Zastupniske znamješka kaž \"*.wikipedia.org\" móža so wužiwać.\nZnajmjeńša hłowna domena je trěbna, na přikład \"*.org\".<br />\n{{PLURAL:$2|Podpěrowany protokol|Podpěrowanej protokolej|Podpěrowane protokole}}: <code>$1</code> (standard je http://, jeli žadyn protokol njeje podaty).",
+       "linksearch-text": "Zastupniske znamješka kaž \"*.wikipedia.org\" móža so wužiwać.\nZnajmjeńša hłowna domena je trěbna, na přikład \"*.org\".<br />\n{{PLURAL:$2|Podpěrowany protokol|Podpěrowanej protokolej|Podpěrowane protokole}}: $1 (standard je http://, jeli žadyn protokol njeje podaty).",
        "linksearch-line": "$1 je z $2 wotkazany.",
        "linksearch-error": "Zastupniske znamjenja dadźa so jenož na spočatku URL wužiwać.",
        "listusersfrom": "Započinajo z:",
        "emailuser": "Wužiwarjej mejlku pósłać",
        "emailuser-title-target": "E-mejl na {{GENDER:$1|tutomu wužiwarjej|tutej wužiwarce}} pósłać",
        "emailuser-title-notarget": "Wužiwarjej mejlku pósłać",
-       "emailpage": "Wužiwarjej mejlku pósłać",
        "emailpagetext": "Móžeš slědowacy formular wužiwać, zo by tutomu {{GENDER:$1|wužiwarjej}} e-mejlku pósłał.\nE-mejlowa adresa, kotruž sy w [[Special:Preferences|swojich wužiwarskich nastajenjach]] zapodał, zjewi so jako adresa \"Wot\" e-mejlki, tak zo přijimowar móže ći direktnje wotmołwić.",
        "defemailsubject": "{{SITENAME}} - e-mejlka wot wužiwarja \"$1\"",
        "usermaildisabled": "Wužiwarska e-mejl znjemóžnjena",
        "emailccsubject": "Kopija twojeje powěsće wužiwarjej $1: $2",
        "emailsent": "Mejlka wotesłana",
        "emailsenttext": "Twoja mejlka bu wotesłana.",
-       "emailuserfooter": "Tuta e-mejlka je so z pomocu funkcije \"{{int:emailpage}}\" na {{GRAMMAR:lokatiw|{{SITENAME}}}} wot $1 do $2 pósłała.",
+       "emailuserfooter": "Tuta e-mejlka je so z pomocu funkcije \"{{int:emailuser}}\" na {{GRAMMAR:lokatiw|{{SITENAME}}}} wot $1 do $2 pósłała.",
        "usermessage-summary": "Systemowu  zdźělenku zawostajić.",
        "usermessage-editor": "Systemowy powěstnik",
        "watchlist": "Wobkedźbowanki",
        "tooltip-pt-logout": "so wotzjewić",
        "tooltip-pt-createaccount": "Pozbudźujemy će, konto załožić a so přizjewić; njeje wšak nuznje trěbne",
        "tooltip-ca-talk": "diskusija wo stronje",
-       "tooltip-ca-edit": "Móžeš stronu wobdźěłać. Prošu wužij tłóčku „Přehlad” do składowanja.",
+       "tooltip-ca-edit": "Tutu stronu wobdźěłać",
        "tooltip-ca-addsection": "Nowy wotrězk započeć",
        "tooltip-ca-viewsource": "Strona je škitana. Móžeš pak jeje žórło wobhladać.",
        "tooltip-ca-history": "stawizny tuteje strony",
        "special-characters-group-khmer": "Khmeršćina",
        "special-characters-title-endash": "krótka ležaca smužka",
        "special-characters-title-emdash": "dołha ležaca smužka",
-       "special-characters-title-minus": "minusowe znamješko"
+       "special-characters-title-minus": "minusowe znamješko",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 17ba6f4..fa948a7 100644 (file)
@@ -7,7 +7,8 @@
                        "Masterches",
                        "Urhixidur",
                        "아라",
-                       "Tisave"
+                       "Tisave",
+                       "Bfpage"
                ]
        },
        "tog-underline": "Souliyen lyen yo :",
        "yourdiff": "Diferans",
        "copyrightwarning": "Tanpri sonje tout piblikasyon ki fèt nan {{SITENAME}} piblye anba kontra $2 an (wè $1 pou konnen plis). Si ou pa vle sa ou ekri pataje oubyen modifye, ou pa dwe soumèt yo isit.<br />\nW ap pwomèt tou ke sa w ap ekri a se ou menm menm ki ekri li oubyen ke ou kopye li de yon sous ki nan domèn piblik, ou byen you sous ki lib. '''PA ITILIZE TRAVAY KI ANBA DWA DOTÈ SI OTÈ PA T BAY OTORIZASYON LI TOUTBON !'''",
        "copyrightwarning2": "Tanpri, konnen ke tout kontribisyon yo nan {{SITENAME}} kapab modifye, change oubyen retire pa lòt itilizatè yo.\nSi ou pa vle pou sa ou ekri pataje oubyen modifye, ou pa dwe soumèt li isit.<br />\nW ap pwomèt tou ke sa w ap ekri a se ou menm menm ki ekri li oubyen ke ou kopye li de yon sous ki nan domèn piblik, ou byen you sous ki lib (gade $1 pou konnen pi plis).\n'''PA ITILIZE TRAVAY KI ANBA DWA DOTÈ SI OTÈ PA T BAY OTORIZASYON LI TOUTBON !'''",
+       "editpage-cannot-use-custom-model": "Modèl la kontni nan paj sa a pa ka chanje.",
        "longpageerror": "'''ERÈ : Tèks ou anrejistre a ap fè $1 Ko, tay sa a depase kapasite limit nou kapab aksepte kounye a: $2 Ko. Nou pa kapab anrejistre tèks sa. Eseye ritounen nan paj ou te ye anvan pou kopye modifikasyon ou yo.'''",
        "readonlywarning": "'''Atansyon: Bazdone a bare pou fè travay sou li, kidonk ou pap kapab anrejistre modifikasyon ou yo kounye a.'''\nPetèt ou ta renmen kopye-kole teks sa a nan yon fichye teks epi anrejistre l pou pita.\n\nAdministratè ki te bare bazdone a te bay rezon sa a: $1",
        "protectedpagewarning": "'''Pote atansyon : paj sa a pwoteje. Se sèl itilizatè yo ki genyen estati administratè ki kapab modifye l.'''\nDènye jounal la parèt anba kòm referans.",
        "deleteotherreason": "Rezon an plis :",
        "deletereasonotherlist": "Lòt rezon",
        "rollbacklink": "revoke",
+       "changecontentmodel-title-label": "Paj Tit",
        "protectlogpage": "Jounal pwoteksyon yo",
        "protectedarticle": "pwoteje « [[$1]] »",
        "modifiedarticleprotection": "te modifye nivo pwoteksyon pou « [[$1]] »",
        "tooltip-pt-logout": "Dekonekte ou",
        "tooltip-pt-createaccount": "N ap ankouraje w ouvè yon kont epi konekte; men sa pa obligatwa",
        "tooltip-ca-talk": "Diskisyon apwopo kontni paj sa a",
-       "tooltip-ca-edit": "Ou mèt modifye paj sa a. Tanpri, itilize bouton \"Kout je\" anvan ou anrejistre.",
+       "tooltip-ca-edit": "Edit paj sa a",
        "tooltip-ca-addsection": "Komanse yon nouvo seksyon",
        "tooltip-ca-viewsource": "Paj sa a pwoteje. Ou kapab wè kòd sous li.",
        "tooltip-ca-history": "Vèsyon ki ansyen pou paj sa (ak tout kontribitè ki te travay sou li)",
        "version": "Vèsyon",
        "specialpages": "Paj espesyal yo",
        "tag-filter": "Filtre [[Special:Tags|Tag]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "htmlform-reset": "Revoke chanjman yo",
        "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
        "logentry-newusers-create": "Kont itilizatè $1 a kreye",
index b67c507..ab23553 100644 (file)
        "actionthrottled": "Művelet megszakítva",
        "actionthrottledtext": "A spamek elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.",
        "protectedpagetext": "Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység.",
-       "viewsourcetext": "Megtekintheted és másolhatod a lap forrását:",
-       "viewyourtext": "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
+       "viewsourcetext": "Megtekintheted és másolhatod a lap forrását.",
+       "viewyourtext": "Megtekintheted és kimásolhatod a <strong>saját szerkesztéseidet</strong> az alábbi lapra.",
        "protectedinterface": "Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.",
        "editinginterface": "<strong>Vigyázat:</strong> egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot.",
        "translateinterface": "Minden wikire kiterjedő fordítások hozzáadásához vagy szerkesztésére használd a [//translatewiki.net/ translatewiki.net]-et, a MédiaWiki lokalizációs projektjét.",
        "headline_sample": "Alfejezet címe",
        "headline_tip": "Alfejezetcím",
        "nowiki_sample": "Ide írd a formázatlan szöveget",
-       "nowiki_tip": "Wiki formázás kikapcsolása",
+       "nowiki_tip": "Wikiformázás kikapcsolása",
        "image_sample": "Pelda.jpg",
        "image_tip": "Fájl (pl. kép) beszúrása",
        "media_sample": "Peldaegyketto.ogg",
        "readonlywarning": "FIGYELMEZTETÉS: A wiki adatbázisát karbantartás miatt zárolták, ezért most nem fogod tudni elmenteni a szerkesztéseidet!\nA lap szövegét másold egy szövegfájlba, amit később felhasználhatsz!'''\n\nAz adatbázist lezáró adminisztrátor az alábbi magyarázatot adta: $1",
        "protectedpagewarning": "'''Figyelem: Ez a lap le van védve, így csak adminisztrátori jogosultságokkal rendelkező szerkesztők módosíthatják.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "semiprotectedpagewarning": "'''Megjegyzés:''' ez a lap védett, így regisztrálatlan vagy újonnan regisztrált szerkesztők nem módosíthatják.",
-       "cascadeprotectedwarning": "'''Figyelem:''' ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} szerepel beillesztve:",
+       "cascadeprotectedwarning": "<strong>Figyelem:</strong> ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} be van illesztve:",
        "titleprotectedwarning": "'''Figyelem: Ez a lap le van védve, így csak a [[Special:ListGroupRights|megfelelő jogosultságokkal]] rendelkező szerkesztők hozhatják létre.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "templatesused": "A lapon használt {{PLURAL:$1|sablon|sablonok}}:",
        "templatesusedpreview": "Az előnézet megjelenítésekor használt {{PLURAL:$1|sablon|sablonok}}:",
        "logdelete-selected": "{{PLURAL:$1|Kiválasztott naplóesemény|Kiválasztott naplóesemények}}:",
        "revdelete-text-text": "A törölt változatok megmaradnak a laptörténetben, de a tartalmuk a nyilvánosan nem elérhető.",
        "revdelete-text-file": "A törölt változatok megmaradnak a fájl történetben, de a tartalmuk egy része nyilvánosan nem elérhető.",
-       "logdelete-text": "A törölt napló események megmaradnak a naplóban, de a tartalmuk nyilvánosan nem elérhető.",
+       "logdelete-text": "A törölt naplóesemények megmaradnak a naplóban, de a tartalmuk nyilvánosan nem elérhető.",
        "revdelete-text-others": "Más adminisztrátorok elérhetik az elrejtett tartalmat és visszaállíthatják, hacsak további korlátozások nem kerültek bevezetésre.",
        "revdelete-confirm": "Kérlek erősítsd meg, hogy valóban ezt szeretnéd tenni; megértetted a következményeket, és amit teszel, az összhangban van [[{{MediaWiki:Policy-url}}|az irányelvekkel]].",
        "revdelete-suppress-text": "Az elrejtés '''csak''' a következő esetekben használható:\n* Illetlen személyes információk\n*: ''otthoni cím, telefonszámok, társadalombiztosítási számok stb.''",
        "search-category": "($1 kategória)",
        "search-file-match": "(fájl tartalma egyezik)",
        "search-suggest": "Keresési javaslat: $1",
+       "search-rewritten": "Találatok mutatása a következőre: $1. Inkább erre szeretnék rákeresni: $2.",
        "search-interwiki-caption": "Társlapok",
        "search-interwiki-default": "$1 találatok:",
        "search-interwiki-more": "(több)",
        "uploaddisabledtext": "A fájlfeltöltés nem engedélyezett.",
        "php-uploaddisabledtext": "A PHP-s fájlfeltöltés le van tiltva. Ellenőrizd a file_uploads beállítást.",
        "uploadscripted": "Ez a fájl olyan HTML- vagy parancsfájlkódot tartalmaz, melyet tévedésből egy webböngésző esetleg értelmezni próbálhatna.",
+       "upload-scripted-pi-callback": "Nem tölthetsz fel olyan fájlt, ami XML-stíluslap feldolgozási utasításokat tartalmaz.",
+       "uploaded-script-svg": "A feltöltött SVG fájlodban szkriptelemet találtunk: \"$1\".",
+       "uploaded-hostile-svg": "Nem biztonságos CSS kódot találtunk a feltöltött SVG fájlod stíluselemei között.",
+       "uploaded-event-handler-on-svg": "Az alábbi eseménykezelő-attribútum beállítása nem megengedett az SVG fájlokban: <code>$1=$2</code>.",
+       "uploaded-href-attribute-svg": "Az alábbi nem lokális célra (pl. http://, javascript, stb.) mutató href attribútum nem megengedett az SVG fájlokban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Nem biztonságos célra mutató href-et találtam a feltöltött SVG fájlban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "A feltöltött SVG fájlban \"animate\" taget találtam, ami az alábbi \"from\" attribútumával megváltoztathat egy href-et: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-handler-svg": "Az SVG kódok, amelyek a \"handler\" attribútumot távolra/adatra/szkriptre állítják, le vannak tiltva. A feltöltött SVG fájlban a következőt találtam: <code>$1=\"$2\"</code>.",
+       "uploaded-remote-url-svg": "Az SVG kódok, amelyek bármely stílus-attribútumot távoli URL-ra állítják, le vannak tiltva. A feltöltött SVG fájlban a következőt találtam: <code>$1=\"$2\"</code>.",
+       "uploaded-image-filter-svg": "A feltöltött SVG fájl URL-t tartalmazó képfiltert tartalmaz: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Ez az SVG fájl érvénytelen névteret (\"$1\") tartalmaz.",
        "uploadinvalidxml": "A feltöltött XML fájlt nem lehet feldolgozni.",
        "uploadvirus": "Ez a fájl vírust tartalmaz! A részletek: $1",
        "linksearch-pat": "Keresett minta:",
        "linksearch-ns": "Névtér:",
        "linksearch-ok": "keresés",
-       "linksearch-text": "Helyettesítő karaktereket is lehet használni, például \"*.wikipedia.org\".\nLegalább egy felső szintű tartománynak lennie kell, például \"*.org\"<br />\nTámogatott {{PLURAL:$2|protokoll|protokollok}}: <code>$1</code> (http:// az alapértelmezett, ha nincs protokoll megadva).",
+       "linksearch-text": "Helyettesítő karaktereket is lehet használni, például \"*.wikipedia.org\".\nLegalább egy felső szintű tartománynak lennie kell, például \"*.org\"<br />\nTámogatott {{PLURAL:$2|protokoll|protokollok}}: $1 (http:// az alapértelmezett, ha nincs protokoll megadva).",
        "linksearch-line": "$1 hivatkozva innen: $2",
        "linksearch-error": "Helyettesítő karakterek csak a cím elején szerepelhetnek.",
        "listusersfrom": "Szerkesztők listázása a következő névtől kezdve:",
        "emailuser": "E-mail küldése ezen szerkesztőnek",
        "emailuser-title-target": "E-mail küldése ennek a felhasználónak: $1",
        "emailuser-title-notarget": "E-mail küldése a felhasználónak",
-       "emailpage": "E-mail küldése",
        "emailpagetext": "Ezzel az űrlappal tudsz ennek a {{GENDER:$1|felhasználónak}} e-mailt küldeni.\nFeladóként a [[Special:Preferences|beállításaidnál]] megadott e-mail címed fog szerepelni, így a címzett közvetlenül tud majd válaszolni neked.",
        "defemailsubject": "{{SITENAME}} e-mail a következő felhasználótól: „$1”",
        "usermaildisabled": "Email fogadás letiltva",
        "emailccsubject": "$1 szerkesztőnek küldött $2 tárgyú üzenet másolata",
        "emailsent": "E-mail elküldve",
        "emailsenttext": "E-mail üzenetedet elküldtük.",
-       "emailuserfooter": "Ezt az e-mailt $1 küldte $2 számára, az „{{int:emailpage}}” funkció használatával a(z) {{SITENAME}} wikin.",
+       "emailuserfooter": "Ezt az e-mailt $1 küldte $2 számára, az „{{int:emailuser}}” funkció használatával a(z) {{SITENAME}} wikin.",
        "usermessage-summary": "Rendszerüzenet megadása.",
        "usermessage-editor": "Rendszerüzenetek",
        "watchlist": "Figyelőlistám",
        "watchlistanontext": "Jelentkezz be a figyelőlistád megtekintéséhez és szerkesztéséhez.",
        "watchnologin": "Nem vagy bejelentkezve",
        "addwatch": "Hozzáadás a figyelőlistához",
-       "addedwatchtext": "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].\nEzután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.",
+       "addedwatchtext": "A(z) „[[:$1]]” lapot és vitalapját hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].",
        "addedwatchtext-short": "Az oldal: \"$1\" hozzá lett adva a figyelőlistádhoz.",
        "removewatch": "Eltávolítás a figyelőlistáról",
-       "removedwatchtext": "A(z) „[[:$1]]” lapot eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
+       "removedwatchtext": "A(z) „[[:$1]]” lapot és vitalapját eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
        "removedwatchtext-short": "Az oldal: \"$1\" el lett távolítva a figyelőlistádról.",
        "watch": "Lap figyelése",
        "watchthispage": "Lap figyelése",
        "enotif_reset": "Az összes lap megjelölése felkeresettként",
        "enotif_impersonal_salutation": "{{SITENAME}} felhasználó",
        "enotif_subject_deleted": "$2 törölte a(z) $1 {{SITENAME}}-oldalt",
-       "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}} oldalt",
-       "enotif_subject_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt.",
-       "enotif_subject_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt.",
+       "enotif_subject_created": "$2 létrehozta a(z) $1 {{SITENAME}}-oldalt",
+       "enotif_subject_moved": "$2 átmozgatta a(z) $1 {{SITENAME}}-oldalt",
+       "enotif_subject_restored": "$2 visszaállította a(z) $1 {{SITENAME}}-oldalt",
        "enotif_subject_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt",
-       "enotif_body_intro_deleted": "$2 törölte a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd $3.",
-       "enotif_body_intro_created": "$2 létrehozta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_moved": "$2 átmozgatta a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_restored": "$2 visszaállította a $1 {{SITENAME}} oldalt $PAGEEDITDATE-kor, lásd az aktuális verziót itt: $3.",
-       "enotif_body_intro_changed": "$2 megváltoztatta a $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
+       "enotif_body_intro_deleted": "$2 törölte a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd $3.",
+       "enotif_body_intro_created": "$2 létrehozta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_moved": "$2 átmozgatta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_restored": "$2 visszaállította a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, lásd az aktuális verziót itt: $3.",
+       "enotif_body_intro_changed": "$2 megváltoztatta a(z) $1 {{SITENAME}}-oldalt $PAGEEDITDATE dátumon, az aktuális verziót lásd itt: $3.",
        "enotif_lastvisited": "Lásd a $1 lapot az utolsó látogatásod óta történt változtatásokért.",
        "enotif_lastdiff": "Lásd a $1 lapot ezen változtatás megtekintéséhez.",
        "enotif_anon_editor": "$1 névtelen felhasználó",
        "changecontentmodel-success-title": "A tartalommodell megváltozott",
        "changecontentmodel-success-text": "A(z) [[:$1]] lap tartalommodellje sikeresen megváltoztatva.",
        "changecontentmodel-cannot-convert": "A(z) [[:$1]] lap nem alakítható át $2 típusúvá.",
-       "changecontentmodel-title-cantexist": "Nem lehet oldal a(z) $1 helyen.",
        "changecontentmodel-nodirectediting": "A(z) $1 tartalommodell nem támogatja a közvetlen szerkesztést",
        "log-name-contentmodel": "Tartalommodell-változások naplója",
        "log-description-contentmodel": "Egy lap tartalommodelljéhez kapcsolódó események",
        "protect-locked-blocked": "Nem változtathatod meg a védelmi szinteket, amíg blokkolnak. Itt vannak a(z)\n'''$1''' lap jelenlegi beállításai:",
        "protect-locked-dblock": "A védelmi szinteket egy aktív adatbázis zárolás miatt nem változtathatod meg.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-locked-access": "A fiókod számára nem engedélyezett a védelmi szintek megváltoztatása.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
-       "protect-cascadeon": "A lap jelenleg le van védve, mert {{PLURAL:$1|tartalmazza az alábbi lap, amelyen|tartalmazzák az alábbi lapok, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
+       "protect-cascadeon": "A lap jelenleg le van védve, mert be van illesztve az alábbi {{PLURAL:$1|lapra, amelyen|lapokra, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
        "protect-default": "minden szerkesztő számára engedélyezett",
        "protect-fallback": "„$1”-i engedély szükséges hozzá",
        "protect-level-autoconfirmed": "automatikusan megerősített szerkesztők számára",
        "newtitle": "Az új cím:",
        "move-watch": "Figyeld a lapot",
        "movepagebtn": "Lap átnevezése",
-       "pagemovedsub": "Átnevezés sikeres",
+       "pagemovedsub": "Az átnevezés sikerült",
        "movepage-moved": "'''„$1” átnevezve „$2” névre'''",
        "movepage-moved-redirect": "Átirányítás létrehozva.",
        "movepage-moved-noredirect": "A régi címről nem készült átirányítás.",
        "saturday-at": "$1 (szombat)",
        "sunday-at": "$1 (vasárnap)",
        "yesterday-at": "Tegnap $1",
-       "bad_image_list": "A formátum a következő:\n\nCsak a listatételek (csillaggal * kezdődő tételek) vannak figyelembe véve. Egy sor első hivatkozásának egy rossz képre mutató hivatkozásnak kell lennie.\nUgyanazon sor további hivatkozásai kivételnek tekintettek, pl. a szócikkek, ahol a kép bennük fordulhat elő.",
+       "bad_image_list": "A formátum a következő:\n\nCsak a listatételek (csillaggal * kezdődő sorok) vannak figyelembe véve.\nEgy sor első hivatkozásának egy rossz képre mutató hivatkozásnak kell lennie.\nUgyanazon sor további hivatkozásai kivételnek tekintettek: szócikkek, amikben a kép előfordulhat.",
        "metadata": "Metaadatok",
        "metadata-help": "Ez a kép járulékos adatokat tartalmaz, amelyek feltehetően a kép létrehozásához használt digitális fényképezőgép vagy lapolvasó beállításairól adnak tájékoztatást.  Ha a képet az eredetihez képest módosították, ezen adatok eltérhetnek a kép tényleges jellemzőitől.",
        "metadata-expand": "További képadatok",
        "htmlform-cloner-create": "További hozzáadása",
        "htmlform-cloner-delete": "Eltávolítás",
        "htmlform-cloner-required": "Legalább egy érték szükséges.",
+       "htmlform-title-badnamespace": "[[:$1]] nem a(z) „{{ns:$2}}” névtérben található.",
+       "htmlform-title-not-creatable": "„$1” nem egy létrehozható lapcím",
+       "htmlform-title-not-exists": "[[:$1]] nem létezik.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nem létezik.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nem egy érvényes felhasználónév.",
        "sqlite-has-fts": "$1 teljes szöveges keresés támogatással",
        "sqlite-no-fts": "$1 teljes szöveges keresés támogatása nélkül",
        "logentry-delete-delete": "$1 törölte a következő lapot: $3",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
        "special-characters-title-minus": "minusz jel",
+       "mw-widgets-dateinput-no-date": "Nincs kiválasztott dátum",
+       "mw-widgets-dateinput-placeholder-day": "ÉÉÉÉ-HH-NN",
+       "mw-widgets-dateinput-placeholder-month": "ÉÉÉÉ-HH",
        "mw-widgets-titleinput-description-new-page": "a lap még nem létezik",
        "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1"
 }
index b38aa5f..da0f648 100644 (file)
@@ -22,7 +22,8 @@
                        "Աշոտ1997",
                        "GeoO",
                        "Դավիթ Սարոյան",
-                       "Beko"
+                       "Beko",
+                       "Vahe Gharakhanyan"
                ]
        },
        "tog-underline": "ընդգծել հղումները՝",
        "disclaimers": "Ազատում պատասխանատվությունից",
        "disclaimerpage": "Project:Ազատում պատասխանատվությունից",
        "edithelp": "Խմբագրման ուղեցույց",
+       "helppage-top-gethelp": "Օգնություն",
        "mainpage": "Գլխավոր էջ",
        "mainpage-description": "Գլխավոր էջ",
        "policy-url": "Project:Կանոնակարգ",
        "resetpass-wrong-oldpass": "Սխալ ժամանակավոր կամ ընթացիկ գաղտնաբառ։\nՀնարավոր է, որ դուք արդեն բարեհաջող փոխել եք գաղտնաբարը կամ հայցել եք նոր ժամանակավոր գաղտնաբառ։",
        "resetpass-temp-password": "Ժամանակավոր գաղտնաբառ.",
        "passwordreset": "Վերականգնել գաղտնաբառը",
-       "passwordreset-legend": "Վերականգնել գաղտնաբառը",
        "passwordreset-disabled": "Գաղտնաբառի վերականգնումը այս վիքիում թույլատրված չէ։",
        "passwordreset-username": "Մասնակցի անուն՝",
        "passwordreset-domain": "Դոմեն՝",
        "content-model-wikitext": "վիքիտեքստ",
        "content-model-javascript": "ՋավաՍկրիպտ",
        "content-model-css": "ՍիԷսԷս",
+       "duplicate-args-category": "Կաղապարներում կրկնվող արգումենտներով էջեր",
        "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
        "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
        "undo-summary": "Հետ է շրջվում $1 խմբագրումը, որի հեղինակն է՝ [[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) {{GENDER:$2|մասնակիցը|մասնակցուհին}}",
        "showhideselectedversions": "Ցուցադրել/թաքցնել ընտրված խմբագրումները",
        "editundo": "հետ շրջել",
        "diff-empty": "(Տարբերություն չկա)",
+       "diff-multi-sameuser": "(Միևնույն մասնակցի {{PLURAL:$1|մեկ միջանկյալ տարբերակ|$1 միջանկյալ տարբերակներ}} թաքցրված է)",
        "searchresults": "Որոնման արդյունքներ",
        "searchresults-title": "«$1»-ի որոնման արդյունքներ",
        "titlematches": "Համընկած հոդվածների անվանումներ",
        "right-suppressredirect": "Էջը վերանավանելիս վերահղում չթողնել",
        "right-upload": "Նիշքերի բեռնում",
        "right-upload_by_url": "Բեռնել նիշքեր ինտերնետային հասցեից",
+       "right-writeapi": "API գրի օգտագործումը",
        "right-delete": "Էջերի ջնջում",
        "right-rollback": "Արագ հետ գլորել տվյալ էջը վերջին անգամ խմբագրած մասնակցի խմբագրումները",
        "newuserlogpage": "Մասնակիցների գրանցման տեղեկամատյան",
        "unusedtemplateswlh": "այլ հղումներ",
        "randompage": "Պատահական էջ",
        "randompage-nopages": "Այս անվանատարածքում էջեր չկան։",
+       "randomincategory-submit": "Անցնել",
        "randomredirect": "Պատահական վերահղում",
        "randomredirect-nopages": "Այս անվանատարածքում վերահղումներ չկան։",
        "statistics": "Վիճակագրություն",
        "ncategories": "$1 {{PLURAL:$1|կատեգորիա|կատեգորիաներ}}",
        "ninterwikis": "$1 {{PLURAL:$1|ինտերվիքի|ինտերվիքիներ}}",
        "nlinks": "$1 {{PLURAL:$1|հղում|հղումներ}}",
-       "nmembers": "$1 {{PLURAL:$1|անդամ|անդամ}}",
+       "nmembers": "$1 {{PLURAL:$1|անդամ|անդամներ}}",
        "nrevisions": "$1 {{PLURAL:$1|տարբերակ|տարբերակներ}}",
-       "nviews": "$1 {{PLURAL:$1|դիտում|դիտումներ}}",
        "nimagelinks": "օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}",
        "ntransclusions": "օգտագործվում է $1 {{PLURAL:$1|էջ|էջեր}}",
        "specialpage-empty": "Հայցումը արդյունքներ չվերադարձրեց։",
        "emailuser": "էլ-նամակ ուղարկել այս մասնակցին",
        "emailuser-title-target": "Ուղարկել էլ․ նամակ {{GENDER:$1|մասնակցին}}",
        "emailuser-title-notarget": "Ուղարկել էլ․ նամակ",
-       "emailpage": "Էլ-նամակ ուղարկել մասնակցին",
        "emailpagetext": "Դուք կարող եք օգտագործել ներքևի ձևը այս {{GENDER:$1|մասնակցին}} էլ-նամաակ ուղարկելու համար։\n\nՁեր նախընտրանքներում նշված էլ-հասցեն կերևա «Ումից» դաշտում և ստացողը կարող է անմիջապես պատասխանել ձեզ։",
        "defemailsubject": "{{SITENAME}} էլ-նամակ",
        "usermaildisabled": "Էլ․ նամակ ուղարկելը թույլատրված չէ։",
        "logentry-newusers-newusers": "$1 մասնակիցը ստեղծեց նոր հաշիվ",
        "logentry-newusers-create": "Ստեղծվեց $1 մասնակցի հաշիվ",
        "logentry-newusers-create2": "$1 Ստեղծեց նոր հաշիվ $3",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ներբեռնել է}} $3",
        "rightsnone": "(ոչ մի)",
        "feedback-cancel": "Բեկանել",
        "feedback-close": "Արված է",
index 8a542a4..2f93323 100644 (file)
        "title-invalid-utf8": "Le titulo de pagina requestate contine un sequentia UTF-8 invalide.",
        "title-invalid-interwiki": "Le titulo de pagina requestate contine un ligamine interwiki que non pote esser usate in titulos.",
        "title-invalid-talk-namespace": "Le titulo de pagina requestate refere a un pagina de discussion que non pote exister.",
+       "title-invalid-characters": "Le titulo de pagina requestate contine characteres invalide: \"$1\".",
+       "title-invalid-relative": "Le titulo ha un cammino relative. Titulos de pagina relative (./, ../) non es valide, perque illos es sovente inattingibile a partir del navigator de un usator.",
+       "title-invalid-magic-tilde": "Le titulo de pagina requestate contine un sequentia de tildes non valide (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Le titulo de pagina requestate es troppo longe. Illo non debe haber plus de $1 {{PLURAL:$1|byte|bytes}} in codification UTF-8.",
+       "title-invalid-leading-colon": "Le titulo de pagina requestate contine un signo de duo punctos (:) al initio, lo que non es permittite.",
        "perfcached": "Le sequente datos esseva recuperate del cache e possibilemente non es actual. Un maximo de {{PLURAL:$1|un resultato|$1 resultatos}} es disponibile in le cache.",
        "perfcachedts": "Le sequente datos esseva recuperate del cache e ha essite actualisate le $3 a $4. Un maximo de {{PLURAL:$4|un resultato|$4 resultatos}} es disponibile in le cache.",
        "querypage-no-updates": "Le actualisationes pro iste pagina es disactivate. Pro le momento, le datos hic non se cambiara.",
        "actionthrottled": "Action limitate",
        "actionthrottledtext": "Como mesura anti-spam, tu es limitate de executar iste action troppo de vices durante un curte periodo de tempore, e tu ha excedite iste limite.\nPer favor reprova post alcun minutas.",
        "protectedpagetext": "Iste pagina ha essite protegite pro impedir le modification o altere actiones.",
-       "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina:",
-       "viewyourtext": "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
+       "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina.",
+       "viewyourtext": "Tu pote vider e copiar le fonte de <strong>tu modificationes</strong> de iste pagina.",
        "protectedinterface": "Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
        "editinginterface": "<strong>Attention:</strong> Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification apportate a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.",
        "translateinterface": "Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de localisation de MediaWiki.",
-       "cascadeprotected": "Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option \"cascada\":\n$2",
+       "cascadeprotected": "Iste pagina ha essite protegite contra modificationes perque illo es transcludite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option \"cascada\":\n$2",
        "namespaceprotected": "Tu non ha le permission de modificar paginas in le spatio de nomines '''$1'''.",
        "customcssprotected": "Tu non ha le permission de modificar iste pagina de CSS perque illo contine le configuration personal de un altere usator.",
        "customjsprotected": "Tu non ha le permission de modificar iste pagina de JavaScript perque illo contine le configuration personal de un altere usator.",
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|paginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributor|contributores}} recente",
        "badretype": "Le duo contrasignos que tu scribeva non es identic.",
+       "usernameinprogress": "Le creation de un conto con iste nomine de usator es jam in curso.\nPer favor, attende.",
        "userexists": "Iste nomine de usator es jam in uso.\nSelige un altere nomine.",
        "loginerror": "Error in le apertura del session",
        "createacct-error": "Error de creation de conto",
        "yourdiff": "Differentias",
        "copyrightwarning": "Nota ben que tote le contributiones a {{SITENAME}} se considera publicate sub le $2 (vide plus detalios in $1).\nSi tu non vole que tu scripto sia modificate impietosemente e redistribuite a voluntate, alora non lo submitte hic.<br />\nIn addition, tu nos garanti que tu es le autor de isto, o que tu lo ha copiate de un ressource a dominio public o alteremente libere de derectos.\n'''Non submitte material subjecte a copyright sin autorisation expresse!'''",
        "copyrightwarning2": "Nota ben que tote le contributiones a {{SITENAME}} pote esser redigite, alterate, o eliminate per altere contributores.\nSi tu non vole que tu scripto sia modificate impietosemente, alora non lo submitte hic.<br />\nIn addition, tu nos garanti que tu es le autor de isto, o que tu lo ha copiate de un ressource a dominio public o alteremente libere de derectos (vide $1 pro detalios).\n'''Non submitte material subjecte a copyright sin autorisation expresse!'''",
+       "editpage-cannot-use-custom-model": "Le modello de contento de iste pagina non pote esser cambiate.",
        "longpageerror": "'''Error: Le texto que tu submitteva occupa {{PLURAL:$1|un kilobyte|$1 kilobytes}}, excedente le maximo de {{PLURAL:$2|un kilobyte|$2 kilobytes}}.'''\nIllo non pote esser salveguardate.",
        "readonlywarning": "'''Attention: Le base de datos ha essite blocate pro mantenentia. Tu non pote salveguardar tu modificationes in iste momento.'''\nNos recommenda copiar-e-collar le texto in un file e salveguardar lo pro plus tarde.\n\nLe administrator qui ha blocate le base de datos ha fornite iste explication: $1",
        "protectedpagewarning": "'''Attention:  Iste pagina ha essite protegite de sorta que solmente usatores con privilegios de administrator pote modificar lo.''' Le ultime entrata del registro es fornite hic infra pro referentia:",
        "semiprotectedpagewarning": "'''Nota:''' Iste pagina ha essite protegite de maniera que solmente usatores registrate pote modificar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
-       "cascadeprotectedwarning": "'''Attention:''' Iste pagina ha essite protegite de maniera que solmente administratores pote modificar lo, proque illo es includite in le protection in cascada del sequente {{PLURAL:$1|pagina|paginas}}:",
+       "cascadeprotectedwarning": "<strong>Attention:</strong> Iste pagina ha essite protegite de maniera que solmente usatores con privilegios de administrator pote modificar lo, perque illo es transcludite in le sequente {{PLURAL:$1|pagina|paginas}} protegite in cascada:",
        "titleprotectedwarning": "'''Attention:  Iste pagina ha essite protegite de maniera que [[Special:ListGroupRights|permissiones specific]] es requirite pro crear lo.''' Le ultime entrata del registro es fornite hic infra pro referentia:",
        "templatesused": "{{PLURAL:$1|Patrono|Patronos}} usate in iste pagina:",
        "templatesusedpreview": "{{PLURAL:$1|Patrono|Patronos}} usate in iste previsualisation:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objecto vacue",
        "content-json-empty-array": "Array vacue",
+       "duplicate-args-warning": "<strong>Attention:</strong> [[:$1]] appella [[:$2]] con plure valores pro le parametro \"$3\". Solmente le ultime valor fornite essera usate.",
        "duplicate-args-category": "Paginas que usa parametros duplicate in appellos de patrono",
        "duplicate-args-category-desc": "Le pagina contine appellos de patrono que usa duplicatos de parametros, como per exemplo <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention: Iste pagina contine troppo de appellos costose al functiones del analysator syntactic.\n\nIllo debe haber minus de $2 {{PLURAL:$2|appello|appellos}}, sed al momento ha $1 {{PLURAL:$1|appello|appellos}}.",
        "history-feed-description": "Historia del versiones de iste pagina in le wiki",
        "history-feed-item-nocomment": "$1 a $2",
        "history-feed-empty": "Le pagina que tu requestava non existe.\nEs possibile que illo esseva delite del wiki, o renominate.\nProva [[Special:Search|cercar nove paginas relevante]] in le wiki.",
+       "history-edit-tags": "Modificar etiquettas del versiones seligite",
        "rev-deleted-comment": "(summario del modification removite)",
        "rev-deleted-user": "(nomine de usator eliminate)",
        "rev-deleted-event": "(detalios de registro removite)",
        "rev-showdeleted": "monstrar",
        "revisiondelete": "Deler/restaurar versiones",
        "revdelete-nooldid-title": "Le version de destination es invalide",
-       "revdelete-nooldid-text": "O tu non ha specificate alcun version(es) de destination pro executar iste\nfunction, o le version specificate non existe, o tu essaya celar le version actual.",
+       "revdelete-nooldid-text": "Tu non ha specificate un version de destination pro executar iste function, o le version specificate non existe, o tu essaya celar le version actual.",
        "revdelete-no-file": "Le file specificate non existe.",
        "revdelete-show-file-confirm": "Es tu secur de voler vider un version delite del file  \"<nowiki>$1</nowiki>\" del $2 a $3?",
        "revdelete-show-file-submit": "Si",
        "search-category": "(categoria $1)",
        "search-file-match": "(corresponde al contento del file)",
        "search-suggest": "Esque tu vole dicer: $1",
+       "search-rewritten": "Es monstrate le resultatos pro $1. Cerca $2 in su loco.",
        "search-interwiki-caption": "Projectos fratres",
        "search-interwiki-default": "Resultatos de $1:",
        "search-interwiki-more": "(plus)",
        "rows": "Lineas:",
        "columns": "Columnas:",
        "searchresultshead": "Recerca",
-       "stub-threshold": "Limite pro formatar le ligamines in <a href=\"#\" class=\"stub\">stilo de peciettas</a> (bytes):",
+       "stub-threshold": "Limite pro formatar ligamines a peciettas ($1):",
+       "stub-threshold-sample-link": "exemplo",
        "stub-threshold-disabled": "Disactivate",
        "recentchangesdays": "Numero de dies a monstrar in modificationes recente:",
        "recentchangesdays-max": "(non plus de $1 {{PLURAL:$1|die|dies}})",
        "badsig": "Signatura crude invalide; verificar le etiquettas HTML.",
        "badsiglength": "Tu signatura es troppo longe.\nIllo debe haber minus de $1 {{PLURAL:$1|character|characteres}}.",
        "yourgender": "Como prefere tu esser describite?",
-       "gender-unknown": "Io prefere non specificar",
+       "gender-unknown": "In mentionar te, le programma usara pronomines de genere neutre quando possibile",
        "gender-male": "Ille modifica paginas wiki",
        "gender-female": "Illa modifica paginas wiki",
        "prefs-help-gender": "Definir iste preferentia es optional.\nLe software lo usa pro adressar e mentionar te correctemente con le genere appropriate.\nIste information es public.",
        "userrights-lookup-user": "Gerer gruppos de usatores",
        "userrights-user-editname": "Entra un nomine de usator:",
        "editusergroup": "Modificar gruppos de usatores",
-       "editinguser": "Cambia le derectos del usator '''[[User:$1|$1]]''' $2",
+       "editinguser": "Cambia le derectos del {{GENDER:$1|usator}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modificar gruppos de usatores",
        "saveusergroups": "Salveguardar gruppos de usatores",
        "userrights-groupsmember": "Membro de:",
        "right-sendemail": "Inviar e-mail a altere usatores",
        "right-passwordreset": "Vider le e-mails pro reinitialisar le contrasigno",
        "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos",
+       "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes",
+       "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro",
        "newuserlogpage": "Registro de creation de usatores",
        "newuserlogpagetext": "Isto es un registro de creation de usatores.",
        "rightslog": "Registro de derectos de usator",
        "action-editmyprivateinfo": "modificar le proprie information private",
        "action-editcontentmodel": "modificar le modello de contento de un pagina",
        "action-managechangetags": "crear e deler etiquettas in le base de datos",
+       "action-applychangetags": "applicar etiquettas al proprie modificationes",
+       "action-changetags": "adder e remover qualcunque etiquettas sur individual versiones e entratas de registro",
        "nchanges": "$1 {{PLURAL:$1|modification|modificationes}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|desde le ultime visita}}",
        "enhancedrc-history": "historia",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[observate per $1 {{PLURAL:$1|usator|usatores}}]",
-       "rc_categories": "Limite a categorias (separar con \"|\")",
-       "rc_categories_any": "Qualcunque",
+       "rc_categories": "Limitar al categorias (separar con \"|\"):",
+       "rc_categories_any": "Qualcunque categoria seligite",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} post cambio",
        "newsectionsummary": "/* $1 */ nove section",
        "rc-enhanced-expand": "Revelar detalios",
        "uploaddisabledtext": "Le incargamento de files es disactivate.",
        "php-uploaddisabledtext": "Le incargamento de files PHP es disactivate. Per favor verifica le configuration file_uploads.",
        "uploadscripted": "Iste file contine codice de HTML o de script que pote esser interpretate erroneemente per un navigator del web.",
+       "upload-scripted-pi-callback": "Non pote incargar un file que contine instructiones pro le tractamento de folios de stilo XML.",
+       "uploaded-script-svg": "Un elemento de script \"$1\" se trova in le file SVG incargate.",
+       "uploaded-hostile-svg": "Certe codice CSS insecur se trova in le elemento de stilo del file SVG incargate.",
+       "uploaded-event-handler-on-svg": "Fixar attributos de gestion de eventos <code>$1=\"$2\"</code> non es permittite in files SVG.",
+       "uploaded-href-attribute-svg": "Attributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con objectivos non local (p.ex. http://, javascript:, etc) non es permittite in files SVG.",
+       "uploaded-href-unsafe-target-svg": "Un href a un objectivo non secur <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-animate-svg": "Un etiqueta \"animate\" que poterea cambiar le href, usante le attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, se trova in le file SVG incargate.",
+       "uploaded-setting-event-handler-svg": "Fixar le attributos de gestion de eventos non es permittite, ma le codice <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-setting-href-svg": "Usar le etiquetta \"set\" pro adder le attributo \"href\" al elemento genitor non es permittite.",
+       "uploaded-wrong-setting-svg": "Le uso del etiquetta \"set\" pro adder un objectivo remote, de datos o de script a un attributo es blocate, ma le codice <code>&lt;set to=\"$1\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-setting-handler-svg": "Le SVG que fixa le attributo \"handler\" con un objectivo remote, de datos o de script es blocate, ma le codice <code>$1=\"$2\"</code> se trova in le file SVG incargate.",
+       "uploaded-remote-url-svg": "Le SVG que contine un URL remote in un attributo de stilo es blocate, ma le codice <code>$1=\"$2\"</code> se trova in le file SVG incargate.",
+       "uploaded-image-filter-svg": "Se trova un filtro de imagine con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> in le file SVG incargate.",
        "uploadscriptednamespace": "Iste file SVG contine un spatio de nomines invalide: \"$1\"",
        "uploadinvalidxml": "Le codice XML in le file incargate non pote esser interpretate.",
        "uploadvirus": "Le file contine un virus! Detalios: $1",
        "upload-too-many-redirects": "Le URL contineva troppo de redirectiones",
        "upload-http-error": "Un error HTTP occurreva: $1",
        "upload-copy-upload-invalid-domain": "Le incargamento de copias non es disponibile ab iste dominio.",
+       "upload-dialog-title": "Incargar file",
+       "upload-dialog-error": "Un error ha occurrite",
+       "upload-dialog-warning": "Un advertimento se ha producite",
+       "upload-dialog-button-cancel": "Cancellar",
+       "upload-dialog-button-done": "Facite",
+       "upload-dialog-button-save": "Salveguardar",
+       "upload-dialog-button-upload": "Incargar",
+       "upload-dialog-label-select-file": "Seliger file",
+       "upload-dialog-label-infoform-title": "Detalios",
+       "upload-dialog-label-infoform-name": "Nomine",
+       "upload-dialog-label-infoform-description": "Description",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nomine del file",
        "backend-fail-stream": "Non poteva transmitter le file $1.",
        "backend-fail-backup": "Non poteva facer un copia de reserva del file $1.",
        "backend-fail-notexists": "Le file $1 non existe.",
        "listfiles-delete": "deler",
        "listfiles-summary": "Iste pagina special monstra tote le files incargate.",
        "listfiles_search_for": "Cercar un nomine de media:",
+       "listfiles-userdoesnotexist": "Le conto de usator \"$1\" non es registrate.",
        "imgfile": "file",
        "listfiles": "Lista de files",
        "listfiles_thumb": "Miniatura",
        "randomincategory-nopages": "Il non ha paginas in [[:Category:$1]].",
        "randomincategory-category": "Categoria:",
        "randomincategory-legend": "Pagina aleatori in categoria",
+       "randomincategory-submit": "Va",
        "randomredirect": "Redirection aleatori",
        "randomredirect-nopages": "Il non ha redirectiones in le spatio de nomines \"$1\".",
        "statistics": "Statisticas",
        "unusedimages": "Imagines non usate",
        "wantedcategories": "Categorias plus demandate",
        "wantedpages": "Paginas plus demandate",
-       "wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas que ha solmente redirectiones que liga verso illos. Pro un lista del paginas non existente que ha redirectiones que liga verso illos, vide [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas verso le quales solmente redirectiones liga. Pro un lista del paginas non existente verso le quales redirectiones liga, vide [[{{#special:BrokenRedirects}}|le lista de redirectiones rupte]].",
        "wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
        "wantedfiles": "Files desirate",
        "wantedfiletext-cat": "Le sequente files es usate ma non existe. Le files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].",
        "logempty": "Le registro contine nihil pro iste pagina.",
        "log-title-wildcard": "Cercar titulos que comencia con iste texto",
        "showhideselectedlogentries": "Monstrar/celar le entratas de registro seligite",
+       "log-edit-tags": "Modificar le etiquettas del entratas de registro seligite",
        "allpages": "Tote le paginas",
        "nextpage": "Sequente pagina ($1)",
        "prevpage": "Precedente pagina ($1)",
        "linksearch-pat": "Patrono a cercar:",
        "linksearch-ns": "Spatio de nomines:",
        "linksearch-ok": "Cercar",
-       "linksearch-text": "Es possibile usar metacharacteres como in \"*.wikipedia.org\".\nIsto necessita specificar al minus le dominio de nivello superior, per exemplo \"*.org\".<br />\n{{PLURAL:$2|Le protocollo|Protocollos}} supportate: <code>$1</code> (http:// es assumite si nulle protocollo es specificate).",
+       "linksearch-text": "Es possibile usar metacharacteres como in \"*.wikipedia.org\".\nIsto necessita specificar al minus le dominio de nivello superior, per exemplo \"*.org\".<br />\n{{PLURAL:$2|Le protocollo|Protocollos}} supportate: $1 (http:// es assumite si nulle protocollo es specificate).",
        "linksearch-line": "$1 ligate ab $2",
        "linksearch-error": "Le metacharacteres pote apparer solmente al initio del nomine de host.",
        "listusersfrom": "Monstrar usatores a partir de:",
        "emailuser": "Inviar e-mail a iste usator",
        "emailuser-title-target": "Inviar e-mail a iste {{GENDER:$1|usator|usatrice}}",
        "emailuser-title-notarget": "Inviar e-mail al usator",
-       "emailpage": "Inviar e-mail al usator",
        "emailpagetext": "Le formulario sequente es pro inviar un message de e-mail a iste {{GENDER:$1|usator}}.\nLe adresse de e-mail que tu specificava in [[Special:Preferences|tu preferentias de usator]] apparera\ncomo le adresse del expeditor, de sorta que le destinatario potera responder te directemente.",
        "defemailsubject": "E-mail del usator \"$1\" de {{SITENAME}}",
        "usermaildisabled": "E-mail a usatores disactivate",
        "emailccsubject": "Copia de tu message a $1: $2",
        "emailsent": "E-mail inviate",
        "emailsenttext": "Tu message de e-mail ha essite inviate.",
-       "emailuserfooter": "Iste e-mail ha essite inviate per $1 a $2 con le function \"{{int:emailpage}}\" in {{SITENAME}}.",
+       "emailuserfooter": "Iste e-mail ha essite inviate per $1 a $2 con le function \"{{int:emailuser}}\" in {{SITENAME}}.",
        "usermessage-summary": "Lassante un message de systema.",
        "usermessage-editor": "Messagero del systema",
        "watchlist": "Observatorio",
        "watchlistanontext": "Per favor, aperi session pro poter vider o modificar entratas in tu observatorio.",
        "watchnologin": "Tu non ha aperite un session",
        "addwatch": "Adder al observatorio",
-       "addedwatchtext": "Le pagina \"[[:$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].\nLe modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.",
+       "addedwatchtext": "Le pagina \"[[:$1]]\", e su pagina de discussion, ha essite addite a [[Special:Watchlist|tu observatorio]].",
        "addedwatchtext-short": "Le pagina \"$1\" ha essite addite a tu observatorio.",
        "removewatch": "Remover del observatorio",
-       "removedwatchtext": "Le pagina \"[[:$1]]\" ha essite removite de [[Special:Watchlist|tu observatorio]].",
+       "removedwatchtext": "Le pagina \"[[:$1]]\", e su pagina de discussion, ha essite removite de [[Special:Watchlist|tu observatorio]].",
        "removedwatchtext-short": "Le pagina \"$1\" ha essite removite de tu observatorio.",
        "watch": "Observar",
        "watchthispage": "Observar iste pagina",
        "rollback-success": "Revocava modificationes per $1;\nretornava al version per $2.",
        "sessionfailure-title": "Error de session",
        "sessionfailure": "Il pare haber un problema con tu session de conto;\niste action ha essite cancellate como precaution contra le sequestramento de sessiones.\nPer favor preme \"retro\" e recarga le pagina de ubi tu ha venite, postea reprova.",
+       "changecontentmodel": "Cambiar le modello de contento de un pagina",
+       "changecontentmodel-legend": "Cambiar modello de contento",
+       "changecontentmodel-title-label": "Titulo del pagina",
+       "changecontentmodel-model-label": "Nove modello de contento",
+       "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-success-title": "Le modello de contento ha essite cambiate",
+       "changecontentmodel-success-text": "Le typo de contento de [[:$1]] ha essite cambiate.",
+       "changecontentmodel-cannot-convert": "Le contento de [[:$1]] non pote esser convertite a un typo de $2.",
+       "changecontentmodel-nodirectediting": "Le modello de contento $1 non supporta le modification directe",
+       "log-name-contentmodel": "Registro de cambiamentos de modello de contento",
+       "log-description-contentmodel": "Eventos relative al modellos de contento de un pagina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiava}} le modello de contento del pagina $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-change-revertlink": "reverter",
+       "logentry-contentmodel-change-revert": "reversion",
        "protectlogpage": "Registro de protectiones",
        "protectlogtext": "Ecce un lista de cambios de protection de paginas.\nVide le [[Special:ProtectedPages|lista de paginas protegite]] pro le lista de protectiones de paginas actualmente in operation.",
        "protectedarticle": "protegeva \"[[$1]]\"",
        "protect-locked-blocked": "Tu non pote cambiar le nivellos de protection durante que tu es blocate.\nEcce le configurationes actual del pagina '''$1''':",
        "protect-locked-dblock": "Le nivellos de protection non pote esser cambiate proque es active un blocada del base de datos.\nEcce le configurationes actual del pagina '''$1''':",
        "protect-locked-access": "Tu conto non ha le permission de cambiar le nivellos de protection de paginas.\nEcce le configurationes actual del pagina '''$1''':",
-       "protect-cascadeon": "Iste pagina es actualmente protegite proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.\nCambiamentos in le nivello de protection de iste pagina non influentia le protection in cascada.",
+       "protect-cascadeon": "Iste pagina es actualmente protegite proque illo es transcludite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.\nCambiamentos in le nivello de protection de iste pagina non influentia le protection in cascada.",
        "protect-default": "Permitter a tote le usatores",
        "protect-fallback": "Permitter solmente al usatores con le privilegio de \"$1\"",
        "protect-level-autoconfirmed": "Permitter solmente al usatores autoconfirmate",
        "undeletepagetext": "Le {{PLURAL:$1|pagina|paginas}} sequente ha essite delite, sed es ancora in le archivo e pote esser restaurate.\nLe archivo pote esser vacuate periodicamente.",
        "undelete-fieldset-title": "Restaurar versiones",
        "undeleteextrahelp": "Pro restaurar le historia integre del pagina, lassa tote le quadratos dismarcate e clicca super '''''{{int:undeletebtn}}'''''.\nPro executar un restauration selective, marca le quadratos correspondente al versiones a restaurar, e clicca super '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|version|versiones}} archivate",
+       "undeleterevisions": "$1 {{PLURAL:$1|version|versiones}} delite",
        "undeletehistory": "Si tu restaura un pagina, tote le versiones essera restaurate al historia.\nSi un nove pagina con le mesme nomine ha essite create post le deletion, le versiones\nrestaurate apparera in le historia anterior.",
        "undeleterevdel": "Le restauration non essera executate si illo resultara in le deletion partial del version le plus recente del pagina o del file.\nIn tal casos, tu debe dismarcar o revelar le version delite le plus recente.",
        "undeletehistorynoadmin": "Iste pagina ha essite delite.\nLe motivo del deletion se monstra in le summario infra, con le detalios del usatores que habeva modificate iste pagina ante le deletion.\nLe texto complete de iste versiones delite es solmente disponibile al administratores.",
        "thumbnail_image-failure-limit": "Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.",
        "import": "Importar paginas",
        "importinterwiki": "Importar ab un altere wiki",
-       "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
+       "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera conservate.\nTote le actiones de importation ab altere wikis se registra in le [[Special:Log/import|registro de importationes]].",
        "import-interwiki-sourcewiki": "Wiki de origine:",
        "import-interwiki-sourcepage": "Pagina de origine:",
        "import-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
        "import-interwiki-templates": "Includer tote le patronos",
        "import-interwiki-submit": "Importar",
+       "import-mapping-default": "Importar in destinationes predefinite",
+       "import-mapping-namespace": "Importar in un spatio de nomines:",
+       "import-mapping-subpage": "Importar como subpaginas del pagina sequente:",
        "import-upload-filename": "Nomine del file:",
        "import-comment": "Commento:",
        "importtext": "Per favor exporta le file del wiki de origine con le [[Special:Export|facilitate de exportation]].\nSalveguarda lo in tu computator e incarga lo hic.",
        "importcantopen": "Impossibile aperir le file de importation",
        "importbadinterwiki": "Ligamine interwiki invalide",
        "importsuccess": "Importation complete!",
-       "importnosources": "Nulle origine de importation transwiki ha essite definite e le incargamento directe de historias es disactivate.",
+       "importnosources": "Nulle wiki ab le qual importar ha essite definite e le incargamento directe de historias es disactivate.",
        "importnofile": "Nulle file de importation esseva incargate.",
        "importuploaderrorsize": "Le incargamento del file de importation ha fallite. Le grandor del file excede le limite pro incargamentos.",
        "importuploaderrorpartial": "Le incargamento del file de importation ha fallite. Le file esseva incargate solmente in parte.",
        "tooltip-pt-logout": "Clauder session",
        "tooltip-pt-createaccount": "Tu es incoragiate a crear un conto e aperir session; totevia, non es obligatori",
        "tooltip-ca-talk": "Discussiones a proposito del pagina de contento",
-       "tooltip-ca-edit": "Tu pote modificar iste pagina.\nPer favor usa le previsualisation ante de publicar.",
+       "tooltip-ca-edit": "Modificar iste pagina",
        "tooltip-ca-addsection": "Initiar un nove section",
        "tooltip-ca-viewsource": "Iste pagina es protegite. Tu pote vider su codice fonte.",
        "tooltip-ca-history": "Versiones anterior de iste pagina",
        "tooltip-ca-nstab-main": "Vider le pagina de contento",
        "tooltip-ca-nstab-user": "Vider le pagina de usator",
        "tooltip-ca-nstab-media": "Vider le pagina de media",
-       "tooltip-ca-nstab-special": "Isto es un pagina special, tu non pote modificar le pagina mesme",
+       "tooltip-ca-nstab-special": "Isto es un pagina special e non pote esser modificate",
        "tooltip-ca-nstab-project": "Vider le pagina de projecto",
        "tooltip-ca-nstab-image": "Vider le pagina del file",
        "tooltip-ca-nstab-mediawiki": "Vider le message del systema",
        "spam_reverting": "Revertite al ultime version que non contine ligamines a $1",
        "spam_blanking": "Tote le versiones contineva ligamines a $1. Le pagina es vacuate.",
        "spam_deleting": "Tote le versiones contineva ligamines a $1. Le pagina es delite.",
-       "simpleantispam-label": "Verification anti-spam.\n'''NON''' completa isto!",
+       "simpleantispam-label": "Verification anti-spam.\n<strong>Non</strong> completa isto!",
        "pageinfo-title": "Information sur \"$1\"",
        "pageinfo-not-current": "Regrettabilemente, il es impossibile fornir iste information pro versiones ancian.",
        "pageinfo-header-basic": "Information de base",
        "pageinfo-robot-index": "Permittite",
        "pageinfo-robot-noindex": "Non permittite",
        "pageinfo-watchers": "Numero de observatores del pagina",
+       "pageinfo-visiting-watchers": "Numero de observatores del pagina qui ha visitate le modificationes recente",
        "pageinfo-few-watchers": "Minus de $1 {{PLURAL:$1|observator|observatores}}",
+       "pageinfo-few-visiting-watchers": "Il pote haber o non haber un usator observante le modificationes recente",
        "pageinfo-redirects-name": "Numero de redirectiones verso iste pagina",
        "pageinfo-subpages-name": "Subpaginas de iste pagina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirection|redirectiones}}; $3 {{PLURAL:$3|non-redirection|non-redirectiones}})",
        "pageinfo-protect-cascading-yes": "Si",
        "pageinfo-protect-cascading-from": "Protection in cascada a partir de",
        "pageinfo-category-info": "Information de categoria",
+       "pageinfo-category-total": "Numero total de membros",
        "pageinfo-category-pages": "Numero de paginas",
        "pageinfo-category-subcats": "Numero de subcategorias",
        "pageinfo-category-files": "Numero de files",
        "patrol-log-page": "Registro de patrulia",
        "patrol-log-header": "Isto es un registro de versiones patruliate.",
        "log-show-hide-patrol": "$1 le registro de versiones patruliate",
+       "log-show-hide-tag": "$1 registro de etiquettas",
        "deletedrevision": "Deleva le ancian version $1",
        "filedeleteerror-short": "Error durante le deletion del file: $1",
        "filedeleteerror-long": "Se incontrava errores durante le deletion del file:\n\n$1",
        "exif-lightsource-19": "Lumine standard C",
        "exif-lightsource-24": "Tungsten de studio ISO",
        "exif-lightsource-255": "Altere origine de lumine",
-       "exif-flash-fired-0": "Flash non fulgurava",
-       "exif-flash-fired-1": "Flash fulgurava",
+       "exif-flash-fired-0": "Flash non ha fulgurate",
+       "exif-flash-fired-1": "Flash ha fulgurate",
        "exif-flash-return-0": "nulle function pro deteger stroboscopio",
        "exif-flash-return-2": "stroboscopio non detegite",
        "exif-flash-return-3": "stroboscopio detegite",
-       "exif-flash-mode-1": "fulguration flash compulsori",
-       "exif-flash-mode-2": "suppression del flash compulsori",
+       "exif-flash-mode-1": "activation del flash fortiate",
+       "exif-flash-mode-2": "suppression del flash fortiate",
        "exif-flash-mode-3": "modo automatic",
        "exif-flash-function-1": "Nulle function de flash",
        "exif-flash-redeye-1": "modo de reduction de oculos rubie",
        "version-libraries": "Bibliothecas installate",
        "version-libraries-library": "Bibliotheca",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Licentia",
+       "version-libraries-description": "Description",
+       "version-libraries-authors": "Autores",
        "redirect": "Rediriger per nomine de file, ID de usator, ID de pagina o ID de version",
        "redirect-legend": "Rediriger a un file o pagina",
        "redirect-summary": "Iste pagina special redirige a un file (si es date le nomine de un file), a un pagina (si es date un ID de version o ID de pagina) o a un pagina de usator (si es date un ID de usator numeric). Usage: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] o [[{{#Special:Redirect}}/user/101]].",
        "tags-tag": "Nomine del etiquetta",
        "tags-display-header": "Apparentia in listas de modificationes",
        "tags-description-header": "Description complete del significato",
+       "tags-source-header": "Fonte",
        "tags-active-header": "Active?",
        "tags-hitcount-header": "Modificationes etiquettate",
+       "tags-actions-header": "Actiones",
        "tags-active-yes": "Si",
        "tags-active-no": "No",
+       "tags-source-extension": "Definite per un extension",
+       "tags-source-manual": "Applicate manualmente per usatores e robots",
+       "tags-source-none": "Non plus in uso",
        "tags-edit": "modificar",
+       "tags-delete": "deler",
+       "tags-activate": "activar",
+       "tags-deactivate": "disactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|modification|modificationes}}",
+       "tags-manage-no-permission": "Tu non ha le permission de gerer le etiquettas de modification.",
+       "tags-create-heading": "Crear un nove etiquetta",
+       "tags-create-explanation": "Per configuration predefinite, le etiquettas novemente create essera disponibile pro le uso per usatores e robots.",
+       "tags-create-tag-name": "Nomine del etiquetta:",
+       "tags-create-reason": "Motivo:",
+       "tags-create-submit": "Crear",
+       "tags-create-no-name": "Tu debe specificar le nomine del etiquetta.",
+       "tags-create-invalid-chars": "Le nomines de etiquetta non pote continer commas (<code>,</code>) o barras oblique (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Le nomines de etiquetta non pote continer characteres que non pote esser usate in titulos de pagina.",
+       "tags-create-already-exists": "Le etiquetta \"$1\" jam existe.",
+       "tags-create-warnings-above": "Le sequente {{PLURAL:$2|advertimento|advertimentos}} ha essite incontrate durante le tentativa de crear le etiquetta \"$1\":",
+       "tags-create-warnings-below": "Vole tu continuar a crear le etiquetta?",
+       "tags-delete-title": "Deler etiquetta",
+       "tags-delete-explanation-initial": "Tu es sur le puncto de deler le etiquetta \"$1\" del base de datos.",
+       "tags-delete-explanation-in-use": "Illo essera removite ab {{PLURAL:$2|$2 version o entrata de registro al qual|tote le $2 versiones e/o entratas de registro al quales}} illo es actualmente applicate.",
+       "tags-delete-explanation-warning": "Iste action es <strong>irreversibile</strong> e <strong>non pote esser disfacite</strong>, non mesmo per le administratores del base de datos. Sia certe que iste es le etiquetta que tu intende deler.",
+       "tags-delete-explanation-active": "<strong>Le etiquetta \"$1\" es ancora active, e essera applicate anque in le futuro.</strong> Pro impedir isto, va al loco(s) ubi le etiquetta es applicate e disactiva lo.",
+       "tags-delete-reason": "Motivo:",
+       "tags-delete-submit": "Deler irreversibilemente iste etiquetta",
+       "tags-delete-not-allowed": "Etiquettas definite per un extension non pote esser delite a minus que le extension specificamente lo permitte.",
+       "tags-delete-not-found": "Le etiquetta \"$1\" non existe.",
+       "tags-delete-too-many-uses": "Le etiquetta \"$1\" es applicate a plus de $2 {{PLURAL:$2|version|versiones}}, e per isto non pote esser delite.",
+       "tags-delete-warnings-after-delete": "Le etiquetta \"$1\" ha essite delite, ma le sequente {{PLURAL:$2|advertimento|advertimentos}} ha essite incontrate:",
+       "tags-activate-title": "Activar etiquetta",
+       "tags-activate-question": "Tu es sur le puncto de activar le etiquetta \"$1\".",
+       "tags-activate-reason": "Motivo:",
+       "tags-activate-not-allowed": "Non es possibile activar le etiquetta \"$1\".",
+       "tags-activate-not-found": "Le etiquetta \"$1\" non existe.",
+       "tags-activate-submit": "Activar",
+       "tags-deactivate-title": "Disactivar etiquetta",
+       "tags-deactivate-question": "Tu es sur le puncto de disactivar le etiquetta \"$1\".",
+       "tags-deactivate-reason": "Motivo:",
+       "tags-deactivate-not-allowed": "Non es possibile disactivar le etiquetta \"$1\".",
+       "tags-deactivate-submit": "Disactivar",
+       "tags-apply-no-permission": "Tu non ha le permission de adjunger etiquettas de cambiamento a tu cambiamentos.",
+       "tags-apply-not-allowed-one": "Non es permittite applicar le etiquetta \"$1\" manualmente.",
+       "tags-apply-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente applicate: $1",
+       "tags-update-no-permission": "Tu non ha le permission de adder o remover etiquettas de cambiamento sur individual versiones o entratas de registro.",
+       "tags-update-add-not-allowed-one": "Non es permittite adjunger le etiquetta \"$1\" manualmente.",
+       "tags-update-add-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente adjungite: $1",
+       "tags-update-remove-not-allowed-one": "Non es permittite remover le etiquetta \"$1\".",
+       "tags-update-remove-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente removite: $1",
+       "tags-edit-title": "Modificar etiquettas",
+       "tags-edit-manage-link": "Gerer etiquettas",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Version|Versiones}} seligite de [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Evento|Eventos}} de registro seligite:",
+       "tags-edit-revision-legend": "Adder o remover etiquettas de {{PLURAL:$1|iste version|tote le $1 versiones}}",
+       "tags-edit-logentry-legend": "Adder o remover etiquettas de {{PLURAL:$1|iste entrata|tote le $1 entratas}} de registro",
+       "tags-edit-existing-tags": "Etiquettas existente:",
+       "tags-edit-existing-tags-none": "\"Nulle\"",
+       "tags-edit-new-tags": "Nove etiquettas:",
+       "tags-edit-add": "Adder iste etiquettas:",
+       "tags-edit-remove": "Remover iste etiquettas:",
+       "tags-edit-remove-all-tags": "(remover tote le etiquettas)",
+       "tags-edit-chosen-placeholder": "Seliger alcun etiquettas",
+       "tags-edit-chosen-no-results": "Nulle etiquetta correspondente trovate",
+       "tags-edit-reason": "Motivo:",
+       "tags-edit-revision-submit": "Applicar cambiamentos a {{PLURAL:$1|iste version|$1 versiones}}",
+       "tags-edit-logentry-submit": "Applicar cambiamentos a {{PLURAL:$1|iste entrata|$1 entratas}} de registro",
+       "tags-edit-success": "Le cambiamentos ha essite applicate con successo.",
+       "tags-edit-failure": "Le cambiamentos non ha potite esser applicate:\n$1",
+       "tags-edit-nooldid-title": "Le version de destination es invalide",
+       "tags-edit-nooldid-text": "O tu non ha specificate un version de destination sur le qual exequer iste function, o le version specificate non existe.",
+       "tags-edit-none-selected": "Selige al minus un etiquetta a adder o remover.",
        "comparepages": "Comparar paginas",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "htmlform-cloner-create": "Adder plus",
        "htmlform-cloner-delete": "Remover",
        "htmlform-cloner-required": "Al minus un valor es requirite.",
+       "htmlform-title-badnamespace": "[[:$1]] non es in le spatio de nomines \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" non es un titulo de pagina creabile",
+       "htmlform-title-not-exists": "[[:$1]] non existe.",
+       "htmlform-user-not-exists": "<strong>$1</strong> non existe.",
+       "htmlform-user-not-valid": "<strong>$1</strong> non es un nomine de usator valide.",
        "sqlite-has-fts": "$1 con supporto de recerca de texto integre",
        "sqlite-no-fts": "$1 sin supporto de recerca de texto integre",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleva}} le pagina $3",
        "revdelete-uname-unhid": "nomine de usator non plus celate",
        "revdelete-restricted": "restrictiones applicate al administratores",
        "revdelete-unrestricted": "restrictiones eliminate pro administratores",
+       "logentry-block-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|disblocava}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importava}} $3 per incargamento de file",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importava}} $3 ab un altere wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|fusionava}} $3 in $4 (versiones usque a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4 sin lassar un redirection",
        "logentry-newusers-create2": "Le conto de usator $3 ha essite {{GENDER:$2|create}} per $1",
        "logentry-newusers-byemail": "Le conto de usator $3 ha essite {{GENDER:$2|create}} per $1 e le contrasigno ha essite inviate per e-mail",
        "logentry-newusers-autocreate": "Le conto $1 ha essite {{GENDER:$2|create}} automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|displaciava}} le parametros de protection de $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3 de $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3",
        "logentry-rights-autopromote": "$1 ha essite automaticamente {{GENDER:$2|promovite}} de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ha incargate}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha incargate}} un nove version de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
+       "log-name-managetags": "Registro de gestion de etiquettas",
+       "log-description-managetags": "Iste pagina lista le cargas de gestion relative a [[Special:Tags|etiquettas]]. Le registro contine solmente le actiones exequite manualmente per un administrator; etiquettas pote esser create o delite per le software wiki sin insertion de un entrata in iste registro.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|creava}} le etiquetta \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|deleva}} le etiquetta \"$4\" (removite ab $5 {{PLURAL:$5|version o entrata|versiones e/o entratas}} de registro)",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|activava}} le etiquetta \"$4\" pro uso per usatores e robots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|disactivava}} le etiquetta \"$4\" pro uso per usatores e robots",
+       "log-name-tag": "Registro de etiquettas",
+       "log-description-tag": "Iste pagina monstra quando usatores ha addite o removite [[Special:Tags|etiquettas]] a individual versiones o entratas de registro. Le registro non include actiones de etiquettage que face parte de un modification, deletion o action similar.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|addeva}} le {{PLURAL:$7|etiquetta|etiquettas}} $6 al version $4 del pagina $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|addeva}} le {{PLURAL:$7|etiquetta|etiquettas}} $6 al entrata de registro $5 del pagina $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|removeva}} le {{PLURAL:$9|etiquetta|etiquettas}} $8 ab le version $4 del pagina $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|removeva}} le {{PLURAL:$9|etiquetta|etiquettas}} $8 ab le entrata de registro $5 del pagina $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|actualisava}} etiquettas sur le version $4 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualisava}} etiquettas sur le entrata de registro $5 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
        "rightsnone": "(nulle)",
        "revdelete-summary": "summario del modification",
        "feedback-adding": "Le responsa es addite al pagina...",
+       "feedback-back": "Retornar",
        "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
        "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
        "feedback-bugornote": "Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].\nSi non, tu pote usar le formulario facile hic infra. Tu commento essera addite al pagina \"[$3 $2]\", con tu nomine de usator e le navigator del web que tu usa.",
        "feedback-cancel": "Cancellar",
        "feedback-close": "Finite",
+       "feedback-external-bug-report-button": "Signalar un problema technic",
+       "feedback-dialog-title": "Submitter commentario",
+       "feedback-dialog-intro": "Usa le formulario sequente pro submitter tu commentario, le qual apparera in le pagina \"$1\" insimul a tu nomine de usator.",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error: Resultato del API non recognoscite",
        "feedback-error2": "Error: Modification fallite",
        "feedback-error3": "Error: Nulle responsa del API",
+       "feedback-error4": "Error: Impossibile adjunger le commentario sub le titulo specificate",
        "feedback-message": "Message:",
        "feedback-subject": "Subjecto:",
        "feedback-submit": "Submitter",
+       "feedback-terms": "Io comprende que mi information de agente usator include le information sur le version exacte de mi navigator del web e systema de operation e essera publicate insimul a mi commentario.",
+       "feedback-termsofuse": "Io accepta de fornir commentarios in accordo con le Conditiones de Uso.",
        "feedback-thanks": "Gratias! Tu evalutation ha essite publicate in le pagina \"[$2 $1]\".",
+       "feedback-thanks-title": "Gratias!",
+       "feedback-useragent": "Agente usator:",
        "searchsuggest-search": "Cercar",
        "searchsuggest-containing": "continente...",
        "api-error-badaccess-groups": "Tu non ha le permission de incargar files in iste wiki.",
        "log-name-pagelang": "Registro de cambios de lingua",
        "log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5.",
-       "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente apparentias. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar los e seliger le predefinite.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente lineas in <code>LocalSettings.php</code> pro activar tote le apparentias actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
-       "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar skins e seliger le predefinite.",
+       "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente {{PLURAL:$4|apparentia|apparentias}}. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar {{PLURAL:$4|lo|los e seliger le predefinite}}.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente {{PLURAL:$5|linea|lineas}} in <code>LocalSettings.php</code> pro activar {{PLURAL:$5|le apparentia|tote le apparentias}} actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
+       "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar apparentias e seliger le predefinite.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')",
        "mediastatistics": "Statisticas de multimedia",
        "json-error-recursion": "Il ha un o plure referentias recursive in le valor a codificar",
        "json-error-inf-or-nan": "Un o plure valores NAN o INF se trova in le valor a codificar",
        "json-error-unsupported-type": "Un valor de un typo que non pote esser codificate ha essite date",
+       "headline-anchor-title": "Ligamine a site section",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin extendite",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-thai": "Thailandese",
        "special-characters-group-lao": "Laotiano",
        "special-characters-group-khmer": "Cambodgiano",
-       "special-characters-title-minus": "signo minus"
+       "special-characters-title-endash": "lineetta en",
+       "special-characters-title-emdash": "lineetta em",
+       "special-characters-title-minus": "signo minus",
+       "mw-widgets-dateinput-no-date": "Nulle data seligite",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-new-page": "pagina non existe ancora",
+       "mw-widgets-titleinput-description-redirect": "redirection a $1"
 }
index 77914a0..2c0aa8d 100644 (file)
@@ -38,7 +38,9 @@
                        "Arifin.wijaya",
                        "Ahdan",
                        "Macofe",
-                       "Totosunarto"
+                       "Totosunarto",
+                       "Mirws",
+                       "Ilham"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "search-category": "(kategori $1)",
        "search-file-match": "(cocok dengan isi berkas)",
        "search-suggest": "Mungkin maksud Anda adalah: $1",
+       "search-rewritten": "Menampilkan hasil untuk $1. Cari bukannya untuk $2.",
        "search-interwiki-caption": "Proyek lain",
        "search-interwiki-default": "Hasil dari $1:",
        "search-interwiki-more": "(selanjutnya)",
        "booksources-text": "Di bawah ini adalah daftar pranala ke situs lain yang menjual buku baru dan bekas, dan mungkin juga mempunyai informasi lebih lanjut mengenai buku yang sedang Anda cari:",
        "booksources-invalid-isbn": "ISBN yang diberikan tampaknya tidak valid; periksa kesalahan penyalinan dari sumber asli.",
        "specialloguserlabel": "Pengguna:",
-       "speciallogtitlelabel": "Target (judul atau pengguna):",
+       "speciallogtitlelabel": "Target (judul atau{{ns:pengguna}}:nama pengguna untuk pengguna)",
        "log": "Catatan (Log)",
        "all-logs-page": "Semua log publik",
        "alllogstext": "Gabungan tampilan semua log yang tersedia di {{SITENAME}}.\nAnda dapat melakukan pembatasan tampilan dengan memilih jenis log, nama pengguna (sensitif kapitalisasi), atau judul halaman (juga sensitif kapitalisasi).",
        "linksearch-pat": "Pola pencarian:",
        "linksearch-ns": "Ruang nama:",
        "linksearch-ok": "Cari",
-       "linksearch-text": "Tanda bintang seperti \"*.wikipedia.org\" dapat digunakan.\nPerlu sedikitnya satu domain tingkat atas, misalnya \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol}} yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)",
+       "linksearch-text": "Tanda bintang seperti \"*.wikipedia.org\" dapat digunakan.\nPerlu sedikitnya satu domain tingkat atas, misalnya \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol}} yang didukung: $1 (menggunakan http:// bila protokol tidak ditentukan)",
        "linksearch-line": "$1 memiliki pranala dari $2",
        "linksearch-error": "''Wildcards'' hanya dapat digunakan di bagian awal dari nama host.",
        "listusersfrom": "Tampilkan pengguna mulai dari:",
        "emailuser": "Surel pengguna",
        "emailuser-title-target": "Kirim surel ke {{GENDER:$1|pengguna}} ini",
        "emailuser-title-notarget": "Kirim surel",
-       "emailpage": "Kirim surel ke pengguna ini",
        "emailpagetext": "Anda dapat menggunakan formulir di bawah ini untuk mengirimkan surel ke {{GENDER:$1|pengguna}} ini.\nAlamat surel yang Anda masukkan di [[Special:Preferences|preferensi akun Anda]] akan muncul sebagai alamat \"Dari\" dalam surel tersebut, sehingga penerima dapat langsung membalas kepada Anda.",
        "defemailsubject": "Surel {{SITENAME}} dari pengguna \"$1\"",
        "usermaildisabled": "Surel pengguna dinonaktifkan",
        "emailccsubject": "Salinan pesan Anda untuk $1: $2",
        "emailsent": "Surel terkirim",
        "emailsenttext": "Surel Anda telah dikirimkan.",
-       "emailuserfooter": "Email ini dikirimkan dengan $1 pada $2 dengan fungsi \"{{int:emailpage}}\" pada {{SITENAME}}.",
+       "emailuserfooter": "Email ini dikirimkan dengan $1 pada $2 dengan fungsi \"{{int:emailuser}}\" pada {{SITENAME}}.",
        "usermessage-summary": "Tinggalkan pesan sistem.",
        "usermessage-editor": "Penyampai pesan sistem",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Silahkan login untuk melihat atau mengedit item pada daftarjaga anda",
        "watchnologin": "Belum masuk log",
        "addwatch": "Tambahkan ke daftar pantauan",
-       "addedwatchtext": "Halaman \"[[:$1]]\" telah ditambahkan ke [[Special:Watchlist|daftar pantauan]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
+       "addedwatchtext": "\"[[:$1]]\" dan diskusinya telah ditambahkan ke [[Special:Watchlist|watchlist]] Anda.\nPerubahan-perubahan berikutnya pada halaman tersebut dan halaman pembicaraan terkaitnya akan tercantum di sini.",
        "addedwatchtext-short": "Halaman \"$1\" telah ditambahkan ke daftar pantauan Anda.",
        "removewatch": "Hapus dari daftar pantauan",
-       "removedwatchtext": "Halaman \"[[:$1]]\" telah dihapus dari [[Special:Watchlist|daftar pantauan]] Anda.",
+       "removedwatchtext": "\"[[:$1]]\" dan diskusinya telah dihapus dari [[Special:Watchlist|watchlist]] Anda.",
        "removedwatchtext-short": "Halaman \"$1\" telah dihapus dari daftar pantauan Anda.",
        "watch": "Pantau",
        "watchthispage": "Pantau halaman ini",
        "tooltip-ca-nstab-main": "Lihat halaman isi",
        "tooltip-ca-nstab-user": "Lihat halaman pengguna",
        "tooltip-ca-nstab-media": "Lihat halaman media",
-       "tooltip-ca-nstab-special": "Ini adalah halaman istimewa yang tidak dapat disunting.",
+       "tooltip-ca-nstab-special": "Ini adalah halaman istimewa, dan tidak dapat disunting.",
        "tooltip-ca-nstab-project": "Lihat halaman proyek",
        "tooltip-ca-nstab-image": "Lihat halaman berkas",
        "tooltip-ca-nstab-mediawiki": "Lihat pesan sistem",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
-       "special-characters-title-minus": "tanda kurang"
+       "special-characters-title-minus": "tanda kurang",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-HH",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index 215c489..8c07242 100644 (file)
@@ -11,7 +11,8 @@
                        "Renan",
                        "Valodnieks",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Ultracatenun:",
        "timezoneregion-europe": "Europe",
        "timezoneregion-indian": "Ocean Indian",
        "timezoneregion-pacific": "Ocean Pacific",
-       "youremail": "E-mail:",
+       "youremail": "Adresa e-pošte:",
        "username": "Nómine de usator:",
        "yourrealname": "Nómine real:",
        "yourlanguage": "Lingue:",
index a31224a..41d53e0 100644 (file)
                ]
        },
        "tog-underline": "Pinag-ugisan ti silpo:",
-       "tog-hideminor": "Ilemmeng dagiti bassit nga inurnos manipud ti kaudian a balbaliw",
-       "tog-hidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud ti kaudian a balbaliw",
-       "tog-newpageshidepatrolled": "Ilemmeng dagiti napatruliaan a panid manipud ti baro a listaan ti panid",
+       "tog-hideminor": "Ilemmeng dagiti bassit nga inurnos manipud iti kaudian a balbaliw",
+       "tog-hidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud iti kaudian a balbaliw",
+       "tog-newpageshidepatrolled": "Ilemmeng dagiti napatruliaan a panid manipud iti baro a listaan ti panid",
        "tog-extendwatchlist": "Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, saan laeng a ti kabiitan",
        "tog-usenewrc": "Dagiti grupo a panagbaliw babaen ti panid ti kaudian a balbaliw ken listaan ti bambantayan",
        "tog-numberheadings": "Automatiko a pabilangan dagiti paulo",
        "tog-showtoolbar": "Ipakita ti baras ti ramit ti panagurnos",
        "tog-editondblclick": "Urnosen dagiti panid iti mamindua a panagpindut",
-       "tog-editsectiononrightclick": "Pakabaelan ti panagurnos iti paset babaen ti panagpindut iti kanawan kadagiti titulo ti paset",
+       "tog-editsectiononrightclick": "Pakabaelan ti panagurnos iti seksion babaen ti panagpindut iti kanawan kadagiti titulo ti paset",
        "tog-watchcreations": "Agnayon kadagiti panid a pinartuatko ken papeles nga inkargak iti listaan ti bambantayak",
        "tog-watchdefault": "Agnayon kadagiti panid ken papeles nga inurnosko iti listaan ti bambantayak",
        "tog-watchmoves": "Agnayon kadagiti panid ken papeles nga inyalisko iti listaan ti bambantayak",
        "tog-minordefault": "Markaan amin dagiti inurnos a kas bassit babaen ti kasisigud",
        "tog-previewontop": "Ipakita ti panagipadas sakbay ti pagurnosan a kahon",
        "tog-previewonfirst": "Ipakita ti pinadas iti umuna a panagurnos",
-       "tog-enotifwatchlistpages": "Esuratannak no mabaliwan ti panid wenno papeles iti listaan dagiti bambantayak",
+       "tog-enotifwatchlistpages": "Esuratannak no mabaliwan ti panid wenno ti papeles iti listaan dagiti bambantayak",
        "tog-enotifusertalkpages": "Esuratannak no mabaliwan ti panid ti tungtungak",
        "tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panagurnos kadagiti panid ken papeles",
        "tog-enotifrevealaddr": "Iparang ti pagtaengan ti esuratko iti panagipakaaammo kadagiti esurat",
        "tog-shownumberswatching": "Ipakita ti bilang dagiti agbuybuya nga agar-aramat",
        "tog-oldsig": "Ti adda a pirma:",
-       "tog-fancysig": "Tratuen ti pirma a kas wikitext (nga awan ti automatiko a silpo)",
+       "tog-fancysig": "Tratuen ti pirma a kas wikitext (awanan iti automatiko a silpo)",
        "tog-uselivepreview": "Usaren ti agdama a panagipadas",
        "tog-forceeditsummary": "Pakaammuannak no sumrek iti blanko a pakabuklan ti panagurnos",
-       "tog-watchlisthideown": "Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan",
-       "tog-watchlisthidebots": "Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan",
-       "tog-watchlisthideminor": "Ilemmeng dagiti bassit nga inurnos manipud ti listaan ti bambantayan",
-       "tog-watchlisthideliu": "Ilemmeng dagiti inurnos babaen dagiti nakastrek nga agar-aramat manipud ti listaan ti bambantayan",
-       "tog-watchlisthideanons": "Ilemmeng dagiti inurnos babaen dagiti di ammo nga agar-aramat manipud ti listaan ti bambantayan",
-       "tog-watchlisthidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud ti listaan ti bambantayan",
+       "tog-watchlisthideown": "Ilemmeng dagiti inurnosko manipud iti listaan ti bambantayan",
+       "tog-watchlisthidebots": "Ilemmeng dagiti inurnos ti bot manipud iti listaan ti bambantayan",
+       "tog-watchlisthideminor": "Ilemmeng dagiti bassit nga inurnos manipud iti listaan ti bambantayan",
+       "tog-watchlisthideliu": "Ilemmeng dagiti inurnos babaen dagiti nakastrek nga agar-aramat manipud iti listaan ti bambantayan",
+       "tog-watchlisthideanons": "Ilemmeng dagiti inurnos babaen dagiti di ammo nga agar-aramat manipud iti listaan ti bambantayan",
+       "tog-watchlisthidepatrolled": "Ilemmeng dagiti napatruliaan nga inurnos manipud iti listaan ti bambantayan",
        "tog-ccmeonemails": "Patulodandak kadagiti kopia ti esurat nga ipatulodko kadagiti sabali nga agar-aramat",
        "tog-diffonly": "Saan nga iparang ti linaon ti panid dita baba dagiti pagiddiatan",
        "tog-showhiddencats": "Ipakita dagiti nailemmeng a kategoria",
        "category-empty": "<em>Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.</em>",
        "hidden-categories": "{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}",
        "hidden-category-category": "Nailemmeng a katkategoria",
-       "category-subcat-count": "{{PLURAL:$2|Daytoy a kategoria ket addaan laeng ti sumaganad a subkategoria.|Daytoy a kategoria ket addaan ti sumaganad a {{PLURAL:$1|a subkategoria|$1 a subkatkategoria}}, manipud ti $2 a dagup.}}",
-       "category-subcat-count-limited": "Daytoy a kategoria ket addaan ti sumaganad a {{PLURAL:$1|a subkategoria|$1 a subkatkategoria}}.",
-       "category-article-count": "{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad a {{PLURAL:$1|a panid ket|$1 a pampanid ket dagiti}} adda iti daytoy a kategoria, manipud ti $2 a dagup.}}",
-       "category-article-count-limited": "Ti sumaganad a {{PLURAL:$1|panid |$1 a pampanid}} ket adda iti agdama a kategoria.",
-       "category-file-count": "{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad a {{PLURAL:$1|a papeles ket|$1 a pappapeles ket dagiti}} adda iti daytoy a kategoria, ti $2 a dagup.}}",
-       "category-file-count-limited": "Ti sumaganad a {{PLURAL:$1|papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.",
+       "category-subcat-count": "{{PLURAL:$2|Daytoy a kategoria ket addaan laeng iti sumaganad a subkategoria.|Daytoy a kategoria ket addaan {{PLURAL:$1|iti sumaganad a  subkategoria|kadagiti sumaganad a $1 a subkategoria}}, manipud iti $2 a dagup.}}",
+       "category-subcat-count-limited": "Daytoy a kategoria ket addaan {{PLURAL:$1|iti sumaganad a subkategoria|kadagiti sumaganad a $1 a subkategoria}}.",
+       "category-article-count": "{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng iti sumaganad a panid.|{{PLURAL:$1|Ti sumaganad a panid|Dagiti sumaganad a $1 a panid}} ket adda iti daytoy a kategoria, manipud iti $2 a dagup.}}",
+       "category-article-count-limited": "{{PLURAL:$1|Ti sumaganad a panid|Dagiti sumaganad a $1 a panid}} ket adda iti agdama a kategoria.",
+       "category-file-count": "{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng iti sumaganad a papeles.|{{PLURAL:$1|Ti sumaganad a papeles|Dagiti sumaganad a $1 a papeles}} ket adda iti daytoy a kategoria, iti $2 a dagup.}}",
+       "category-file-count-limited": "{{PLURAL:$1|Ti sumaganad a papeles|Dagiti sumaganad a $1 a papeles}} ket adda iti agdama a kategoria.",
        "listingcontinuesabbrev": "tuloy.",
        "index-category": "Naipagsurotan a pampanid",
        "noindex-category": "Di naipagsurotan a pampanid",
        "variants": "Sabsabali a pagsasao",
        "navigation-heading": "Listaan ti pagdaliasatan",
        "errorpagetitle": "Biddut",
-       "returnto": "Agsubli idiay $1.",
-       "tagline": "Naggapo idiay {{SITENAME}}",
+       "returnto": "Agsubli iti $1.",
+       "tagline": "Manipud iti {{SITENAME}}",
        "help": "Tulong",
        "search": "Biruken",
        "searchbutton": "Biruken",
        "views": "Dagiti pangkitaan",
        "toolbox": "Ramramit",
        "userpage": "Kitaen ti panid ti agar-aramat",
-       "projectpage": "Kitaen ti panid ti gandat",
+       "projectpage": "Kitaen ti panid ti proyekto",
        "imagepage": "Kitaen ti panid ti papeles",
        "mediawikipage": "Kitaen ti panid ti mensahe",
        "templatepage": "Kitaen ti panid ti plantilia",
        "pool-errorunknown": "Di ammo a biddut",
        "pool-servererror": "Ti serbisio ti pagbilangan ti pagyanan ti pagur-urayan ket saan a magun-od ($1).",
        "poolcounter-usage-error": "Biddut ti panagusar: $1",
-       "aboutsite": "Maipanggep ti {{SITENAME}}",
+       "aboutsite": "Maipanggep iti {{SITENAME}}",
        "aboutpage": "Project:Maipanggep",
        "copyright": "Ti linaon ket magun-od babaen ti $1 malaksid no adda sabali a naibaga.",
        "copyrightpage": "{{ns:project}}:Dagiti karbengan ti kopia",
        "privacy": "Annuroten ti kinapribado",
        "privacypage": "Project:Annuroten ti kinapribado",
        "badaccess": "Biddut ti pammalubos",
-       "badaccess-group0": "Awan pammalubosmo a mangpataray ti kiniddawmo nga aramid.",
+       "badaccess-group0": "Awan pammalubosmo a mangpataray iti kiniddawmo nga aramid.",
        "badaccess-groups": "Ti kiniddawmo nga aramid ket limitado laeng kadagiti agar-aramat {{PLURAL:$2|iti grupo|iti maysa kadagiti grupo}}: $1.",
        "versionrequired": "Masapul ti bersion $1 ti MediaWiki",
        "versionrequiredtext": "Masapul ti bersion $1 ti MediaWiki tapno maaramat daytoy a panid. \nKitaen ti [[Special:Version|panid ti bersion]].",
        "ok": "Sige",
-       "retrievedfrom": "Naala manipud idiay \"$1\"",
+       "retrievedfrom": "Naala manipud iti \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Addaanka}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Addaanka}} $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|kadagiti $3 a sabali nga agar-aramat}} ($2).",
        "youhavenewmessagesmanyusers": "Addaanka $1 manipud kadagiti adu nga agar-aramat ($2).",
        "viewsourceold": "kitaen ti taudan",
        "editlink": "urnosen",
        "viewsourcelink": "kitaen ti taudan",
-       "editsectionhint": "Urnosen ti paset: $1",
+       "editsectionhint": "Urnosen ti seksion: $1",
        "toc": "Dagiti linaon",
        "showtoc": "ipakita",
        "hidetoc": "ilemmeng",
        "collapsible-collapse": "Rebbaen",
        "collapsible-expand": "Palawaen",
-       "confirmable-confirm": "Siguradoka kadi ?",
+       "confirmable-confirm": "{{GENDER:$1|Siguradoka}} kadi?",
        "confirmable-yes": "Wen",
        "confirmable-no": "Saan",
        "thisisdeleted": "Kitaen wenno ipulang $1?",
        "nstab-user": "Panid ti agar-aramat",
        "nstab-media": "Panid ti midia",
        "nstab-special": "Espesial a panid",
-       "nstab-project": "Panid ti gandat",
+       "nstab-project": "Panid ti proyekto",
        "nstab-image": "Papeles",
        "nstab-mediawiki": "Mensahe",
        "nstab-template": "Plantilia",
        "nosuchaction": "Awan ti kasta nga aramid",
        "nosuchactiontext": "Ti aramid a nainaganan babaen ti URL ket imbalido.\nMabalin a madi ti naimakiniliam nga URL, wenno sinurotmo ti saan a nasayaat a silpo.\nMabalinmo pay nga ibaga ti parikut ti sopwer nga us-usaren babaen ti {{SITENAME}}.",
        "nosuchspecialpage": "Awan ti kasta nga espesial a panid",
-       "nospecialpagetext": "<strong>Nagkiddawka ti imbalido nga espesial a panid.</strong>\n\nTi listaan dagiti umisu nga espesial a pampanid ket mabirukan iti [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nospecialpagetext": "<strong>Nagkiddawka ti imbalido nga espesial a panid.</strong>\n\nTi listaan dagiti umiso nga espesial a pampanid ket mabirukan iti [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Biddut",
-       "databaseerror": "Biddut iti database",
+       "databaseerror": "Biddut ti database",
        "databaseerror-text": "Adda napasamak a biddut ti panagusisa ti database.\nDaytoy ket mabalin a mangibagbaga ti parikut ti sopwer.",
        "databaseerror-textcl": "Adda napasamak a biddut ti pangusisa ti database.",
        "databaseerror-query": "Usisa: $1",
        "title-invalid-magic-tilde": "Ti kiniddaw a titulo ti panid ket aglaon ti imbalido a panagsasaruno ti salamangka a tilde (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Atiddog unay ti kiniddaw a titulo ti panid. Nasken daytoy a saan nga at-atiddog ngem $1 {{PLURAL:$1|a byte|kadagiti byte}} iti UTF-8",
        "title-invalid-leading-colon": "Ti kiniddaw a titulo ti panid ket aglaon ti maysa nga imbalido a dua a tuldek iti pagrugian.",
-       "perfcached": "Ti sumaganad a datos ket naidulin ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagan|dagiti $1 a nagbanagan}} ket magun-od idiay nagidulinan.",
+       "perfcached": "Ti sumaganad a datos ket naidulin ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagan|dagiti $1 a nagbanagan}} ket magun-od iti nagidulinan.",
        "perfcachedts": "Ti sumaganad a datos ket naidulin, ken naudi a napabaro idi $1. Ti kaadu {{PLURAL:$4|iti maysa a nagbanagan|kadagiti $4 a nagbanagan}} ket magun-od iti pagidulinan.",
        "querypage-no-updates": "Dagiti panangpabaro iti daytoy a panid ket agdama a nabaldado. \nSaan a mapasadiwa ita dagiti datos ditoy.",
        "viewsource": "Kitaen ti taudan",
        "actionthrottled": "Napabuntog ti aramid",
        "actionthrottledtext": "Para iti pagkontra ti spam, naipatinggaka nga agramid iti daytoy a tignay iti adu unay a beses iti nasiket nga oras, ken nalabsamon daytoy a patingga.\nPangngaasi nga ipadasmo manen no madamdama.",
        "protectedpagetext": "Nasalakniban daytoy a panid tapno mapawilan ti panagurnos wenno dagiti dadduma pay a tignay.",
-       "viewsourcetext": "Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:",
-       "viewyourtext": "Mabalinmo a makita ken tuladen ti taudan dagiti <strong>inurnosmo</strong> iti daytoy panid:",
-       "protectedinterface": "Daytoy a panid ket mangited iti testo ti interface para iti sopwer iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.\nTi aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
-       "editinginterface": "<strong>Ballaag:</strong> Ur-urnosem ti maysa a panid a maar-aramat a mangted iti testo ti interface para iti sopwer.\nDagiti panagsukat iti daytoy a panid ket maarigan ti langa ti interface ti agar-aramat para kadagiti sabali nga agar-aramat iti daytoy a wiki.",
-       "translateinterface": "Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.",
-       "cascadeprotected": "Daytoy a panid ket nasalaknibanen para iti panag-urnos ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban iti nalukatan a pagpilian ti \"sariap\":\n$2",
+       "viewsourcetext": "Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid.",
+       "viewyourtext": "Mabalinmo a makita ken tuladen ti taudan dagiti <strong>inurnosmo</strong> iti daytoy panid.",
+       "protectedinterface": "Daytoy a panid ket mangited iti teksto ti interface para iti sopwer iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panagabuso.\nTi aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a proyekto ti MediaWiki.",
+       "editinginterface": "<strong>Ballaag:</strong> Ur-urnosem ti maysa a panid a maar-aramat a mangted iti teksto ti interface para iti sopwer.\nDagiti panagsukat iti daytoy a panid ket maarigan ti langa ti interface ti agar-aramat para kadagiti sabali nga agar-aramat iti daytoy a wiki.",
+       "translateinterface": "Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a proyekto ti MediaWiki.",
+       "cascadeprotected": "Daytoy a panid ket nasalaknibanen manipud iti panagurnos gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} a nasalakniban iti nalukatan a pagpilian ti \"sariap\":\n$2",
        "namespaceprotected": "Awan ti pammalubosmo nga agurnos kadagiti panid iti nagan ti espasio ti <strong>$1</strong>.",
        "customcssprotected": "Awan ti pammalubosmo nga agurnos iti daytoy panid ti CSS, ngamin ket naglaon ti personal a pannakaisaad iti sabali agar-aramat.",
        "customjsprotected": "Awan ti pammalubosmo nga agurnos iti daytoy a panid ti JavaScript, ngamin ket naglaon ti personal a pannakaisaad iti sabali agar-aramat.",
        "myprivateinfoprotected": "Awan pammalubosmo nga agurnos iti pribado a pakaammom.",
        "mypreferencesprotected": "Awan pammalubosmo nga agurnos kadagiti kakaykayatam.",
        "ns-specialprotected": "Saan a mabalin nga urnosen dagiti espesial a panid.",
-       "titleprotected": "Daytoy a titulo ket nasalakniban manipud ti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket \"<em>$2</em>\".",
-       "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ket ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
-       "invalidtitle-knownnamespace": "Imbalido a titulo iti nagan ti espasio \"$2\" ken testo \"$3\"",
-       "invalidtitle-unknownnamespace": "Imbalido a titulo iti di ammo a nagan ti espasio a bilang $1 ken testo \"$2\"",
+       "titleprotected": "Daytoy a titulo ket nasalakniban manipud iti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket \"<em>$2</em>\".",
+       "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ta ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
+       "invalidtitle-knownnamespace": "Imbalido a titulo iti nagan ti espasio \"$2\" ken teksto \"$3\"",
+       "invalidtitle-unknownnamespace": "Imbalido a titulo iti di ammo a nagan ti espasio a bilang $1 ken teksto \"$2\"",
        "exception-nologin": "Saan a nakastrek",
        "exception-nologin-text": "Pangngaasi a sumrek tapno maserrekam daytoy a panid wenno tignay.",
        "exception-nologin-text-manual": "Pangngaasi a $1 tapno maserrekan daytoy a panid wenno tignay.",
        "createacct-realname": "Pudno a nagan (pagpilian)",
        "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
-       "createacct-reason-ph": "Apay nga agparpartuatka manen ti sabali a pakabilangan",
+       "createacct-reason-ph": "Apay nga agparpartuatka manen iti sabali a pakabilangan",
        "createacct-captcha": "Panagpatalged ti seguridad",
-       "createacct-imgcaptcha-ph": "Ikabil ti testo a makitam dita ngato",
+       "createacct-imgcaptcha-ph": "Ikabil ti teksto a makitam dita ngato",
        "createacct-submit": "Partuatem ti pakabilangam",
        "createacct-another-submit": "Agpartuat iti sabali a pakabilangan",
        "createacct-benefit-heading": "Ti {{SITENAME}} ket inar-aramid babaen ti tattao a kasla kenka.",
        "badretype": "Saan nga agpada dagiti inkabilmo a kontrasenias.",
        "userexists": "Maus-usaren ti inkabilmo a nagan.\nPangngaasi nga agpilika iti sabali a nagan.",
        "loginerror": "Biddut ti iseserrek",
-       "createacct-error": "Biddut ti panagpartuat ti pakabilangan",
-       "createaccounterror": "Saan a makapartuat ti pakabilangan: $1",
+       "createacct-error": "Biddut ti panagpartuat iti pakabilangan",
+       "createaccounterror": "Saan a makapartuat iti pakabilangan: $1",
        "nocookiesnew": "Napartuaten ti pakabilangan ti agar-aramat, ngem saanka a nakastrek.\nTi {{SITENAME}} ket agus-usar kadagiti galietas tapno maiserrek dagiti agar-aramat.\nNabaldado dagiti galietam.\nPangngaasi a pakabaelam ida, ken sumrekka nga agusar iti baro a naganmo ken kontrasenias.",
        "nocookieslogin": "Ti {{SITENAME}} ket agus-usar kadagiti galietas tapno maiserrek dagiti agar-aramat.\nNabaldado dagiti galietam.\nPangngaasi a pakabaelam ida ken padasem manen ti sumrek.",
        "nocookiesfornew": "Ti pakabilangan ti agar-aramat ket saan a napartuat, saanmi a mapasingkedan ti taudanna.\nSiguraduem a napakabaelan dagita galietam, ikarga manen daytoy a panid ken padasen manen.",
        "noname": "Saanmo a nainaganan ti umisu a nagan ti agar-aramat.",
        "loginsuccesstitle": "Balligi ti panagserrek",
        "loginsuccess": "<strong>Nakastrekkan iti {{SITENAME}} a kas ni \"$1\".</strong>",
-       "nosuchuser": "Awan ti agar-aramat nga agnagan ti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat iti baro a pakabilangan]].",
-       "nosuchusershort": "Awan ti agar-aramat nga agnagan ti \"$1\".\nKitaem ti panangiletram.",
+       "nosuchuser": "Awan ti agar-aramat nga agnagan iti \"$1\". \n\nDagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.\n\nKitaem ti panangiletram, wenno [[Special:UserLogin/signup|agpartuat iti baro a pakabilangan]].",
+       "nosuchusershort": "Awan ti agar-aramat nga agnagan iti \"$1\".\nKitaem ti panangiletram.",
        "nouserspecified": "Nasken nga inaganam ti nagan ti agar-aramat.",
        "login-userblocked": "Naserraan daytoy nga agar-aramat. Saan a mapalubosan ti sumrek.",
        "wrongpassword": "Saan a husto ti naikabil a kontrasenias. \nPangngaasi a padasen manen.",
        "passwordtooshort": "Dagiti kontrasenias ket nasken a saan a basbasit ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
        "passwordtoolong": "Dagiti kontrasenias ket nasken a saan nga at-atiddog ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
        "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.",
-       "password-login-forbidden": "Ti panag-usar iti daytoy a nagan ti agar-aramat ken kontrasenias ket naipariten.",
+       "password-login-forbidden": "Naipariten ti panagusar iti daytoy a nagan ti agar-aramat ken kontrasenias.",
        "mailmypassword": "Isaad manen ti kontrasenias",
        "passwordremindertitle": "Baro a temporario a kontrasenias para iti {{SITENAME}}",
-       "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw ti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili ti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
-       "noemail": "Awan ti esurat a pagtaengan a nairehistro para iti agar-aramat a ni \"$1\".",
+       "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw iti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili iti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
+       "noemail": "Awan ti esurat a pagtaengan a nairehistro para kenni agar-aramat \"$1\".",
        "noemailcreate": "Nasken a mangitedka ti pudno nga esurat a pagtaengan.",
        "passwordsent": "Naipatuloden ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan ti pannakaawatmo.",
-       "blocked-mailpassword": "Ti IP a pagtaengam ket naserraan manipud ti panagurnos, ken isu a saan a mapalubosan nga agusar ti annong ti panagipulang ti kontrasenias tapno mapawilan ti panag-abuso.",
-       "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.\nSakbay a maipatulod ti aniaman nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
-       "throttled-mailpassword": "Ti panangisaad manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas a {{PLURAL:$1|nga oras|$1 nga or-oras}}.\nTapno maipawilan ti panag-abuso, maysa laeng a panangisaad manen ti kontrasenias ti maipatulod iti kada {{PLURAL:$1|nga oras|$1 nga or-oras}}.",
+       "blocked-mailpassword": "Ti IP a pagtaengam ket naserraan manipud iti panagurnos, ken isu a saan a mapalubosan nga agusar ti annong ti panagipulang ti kontrasenias tapno mapawilan ti panagabuso.",
+       "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.\nSakbay a maipatulod ti ania man nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
+       "throttled-mailpassword": "Ti panangisaad manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas  {{PLURAL:$1|nga oras|a $1 nga or-oras}}.\nTapno maipawilan ti panagabuso, maysa laeng a panangisaad manen ti kontrasenias ti maipatulod iti tunggal {{PLURAL:$1|maysa nga oras|$1 nga or-oras}}.",
        "mailerror": "Biddut iti panangipatulod ti surat: $1",
        "acct_creation_throttle_hit": "Dagiti sumarungkar iti daytoy a wiki nga agus-usar ti IP a pagtaengan ket nakapartuat {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.\nA kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar ti IP a pagtaengan ket agdama a saanda a mabalin a makapartuat kadagiti pakabilangan.",
        "emailauthenticated": "Ti esurat a pagtaengam ket napatalgedan idi $2, $3.",
        "user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga esurat a pagtaengan.",
        "user-mail-no-body": "Pinadas nga inpatulod ti esurat nga awan ti maysa a linaonna wenno ababa unay a bagi.",
        "changepassword": "Baliwan ti kontrasenias",
-       "resetpass_announce": "Tapno malpas ti panagserrek, nasken a mangisaadka ti baro a kontrasenias.",
+       "resetpass_announce": "Tapno malpas ti panagserrek, nasken a mangisaadka iti baro a kontrasenias.",
        "resetpass_header": "Sukatan ti kontrasenias ti pakabilangan",
        "oldpassword": "Daan a kontrasenias:",
        "newpassword": "Baro a kontrasenias:",
        "resetpass-abort-generic": "Ti panagsukat ti kontrasenias ket pinasardeng babaen ti maysa a pagpaatiddog.",
        "resetpass-expired": "Nagpason ti kontraseniasmo. Pangngaasi a mangisaad ti baro a kontrasenias tapno makastrek.",
        "resetpass-expired-soft": "Nagpason ti kontraseniasmo, ken nasken a maisaad manen. Pangngaasi nga agpili tattan ti baro a kontrasenias, wenno pinduten ti \"{{int:resetpass-submit-cancel}}\"  tapno maisaad intono madamdama.",
-       "resetpass-validity-soft": "Saan nga umiso ti kontraseniasmo: $1\n\nAgpilika tattan ti baro a kontrasenias, wenno pinduten ti \"{{int:resetpass-submit-cancel}}\" tapno maisaad intono madamdama.",
+       "resetpass-validity-soft": "Saan nga umisu ti kontraseniasmo: $1\n\nAgpilika tattan ti baro a kontrasenias, wenno pinduten ti \"{{int:resetpass-submit-cancel}}\" tapno maisaad intono madamdama.",
        "passwordreset": "Isaad manen ti kontrasenias",
        "passwordreset-text-one": "Kompletuen daytoy a porma tapno makaawat iti temporario a kontrasenias babaen ti esurat.",
        "passwordreset-text-many": "{{PLURAL:$1|Agpunno ti maysa kadagiti pagikabilan tapno makaawat ti temporario a kontrasenias babaen ti esurat.}}",
        "resettokens-watchlist-token": "Tandaan para iti pakan ti web (Atom/RSS) kadagiti [[Special:Watchlist|panagbalbaliw ti pampanid iti listaan ti bambantayam]]",
        "resettokens-done": "Naisaad manen dagiti tandaan.",
        "resettokens-resetbutton": "Isaad manen  dagiti napili a tandaan",
-       "bold_sample": "Napuskol a testo",
-       "bold_tip": "Napuskol a testo",
-       "italic_sample": "Italiko a testo",
-       "italic_tip": "Italiko a testo",
+       "bold_sample": "Napuskol a teksto",
+       "bold_tip": "Napuskol a teksto",
+       "italic_sample": "Teksto nga italiko",
+       "italic_tip": "Teksto nga italiko",
        "link_sample": "Titulo ti silpo",
        "link_tip": "Akin-uneg a silpo",
        "extlink_sample": "http://www.example.com titulo ti silpo",
        "extlink_tip": "Akinruar a silpo (laglagipen ti http:// a pasakbay)",
-       "headline_sample": "Testo ti paulo",
+       "headline_sample": "Teksto ti paulo",
        "headline_tip": "Maika-2 nga agasmang ti paulo",
-       "nowiki_sample": "Isengngat ti saan a naporma a testo ditoy",
+       "nowiki_sample": "Isengngat ti saan a naporma a teksto ditoy",
        "nowiki_tip": "Saan nga ikaskaso ti pannakaporma ti wiki",
        "image_tip": "Naisengngat a papeles",
        "media_tip": "Silpo ti papeles",
        "preview": "Ipadas",
        "showpreview": "Ipakita ti ipadas",
        "showdiff": "Ipakita dagiti sinukatan",
-       "blankarticle": "<strong>Ballaag:</strong> Ti panid a parpatuatem ket blanko.\nNo pindutem manen ti \"{{int:savearticle}}\", ti panid ket mapartuatto nga awan ti aniaman a linaon.",
+       "blankarticle": "<strong>Ballaag:</strong> Ti panid a parpatuatem ket blanko.\nNo pindutem manen ti \"{{int:savearticle}}\", ti panid ket mapartuatto nga awan ti ania man a linaon.",
        "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti IP a pagtaengan ket publikonto a makita nga agaramidka iti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
        "anonpreviewwarning": "<em>Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a pakasaritaan ti panagurnos iti daytoy a panid.</em>",
        "missingsummary": "<strong>Palagip:</strong> Saanka a nakaited iti pakabuklan ti panagurnos.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
        "subject-preview": "Suheto/naipadas a paulo:",
        "previewerrortext": "Adda napasamak a maysa a biddut bayat a nagpadpadas kadagiti binawbaliwam.",
        "blockedtitle": "Naseraan ti agar-aramat",
-       "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti aniaman nga aramidem nga usisa.",
-       "autoblockedtext": "Ti IP a pagtaengam ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panag-usar daytoy.\n\nTi tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti aniaman nga aramidem nga usisa.",
+       "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
+       "autoblockedtext": "Ti IP a pagtaengam ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panagusar daytoy.\n\nTi tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
        "blockednoreason": "awan ti naited a rason",
        "whitelistedittext": "Pangngaasi a $1 tapno makaurnos kadagiti panid.",
        "confirmedittext": "Masapul a pasingkedam ti esurat sakbay a makaurnos kadagitoy a panid.\nPangngaasi nga isaad ken ipapudnom ti esuratmo babaen ti [[Special:Preferences|kakaykayatan ti agar-aramat]].",
-       "nosuchsectiontitle": "Saan a mabirukan ti paset",
-       "nosuchsectiontext": "Pinadasmo nga inurnos ti awan a paset.\nMabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.",
+       "nosuchsectiontitle": "Saan a mabirukan ti seksion",
+       "nosuchsectiontext": "Pinadasmo nga inurnos ti awan a seksion.\nMabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.",
        "loginreqtitle": "Masapul ti sumrek",
        "loginreqlink": "sumrek",
        "loginreqpagetext": "Pangngaasi a $1 tapno makitam dagiti sabali a panid.",
        "newarticle": "(Baro)",
        "newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
        "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
-       "noarticletext": "Awan ti agdama a testo daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
+       "noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid]</span>.",
        "noarticletext-nopermission": "Awan ti agdama  a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
        "missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "userpage-userdoesnotexist": "Ti pakabilangan ti agar-aramat ni \"$1\" ket saan a nakarehistro. \nPangngaasi a kitaem no kayatmo ti agpartuat/agurnos iti daytoy a panid.",
        "note": "<strong>Nota:</strong>",
        "previewnote": "<strong>Laglagipem a daytoy ket panagipadas laeng.</strong>\nDagiti sinukatam ket saan pay a naidulin!",
        "continue-editing": "Mapan idiay pagurnosan a lugar",
-       "previewconflict": "Daytoy a panagpadas ket mangipakita ti testo iti lugar ti akinngato a pangurnosan ti testo a kasla agparang no piliem nga idulin.",
+       "previewconflict": "Daytoy a panagpadas ket mangipakita ti teksto iti lugar ti akinngato a pangurnosan ti teksto a kasla agparang no piliem nga idulin.",
        "session_fail_preview": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>\nPangngaasi a padasen manen.\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
        "session_fail_preview_html": "<strong>Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.</strong>'\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut ti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
-       "token_suffix_mismatch": "<strong>Ti panagurnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panagurnos.</strong>\nTi panagurnos ket saan a naawat tapno mapawilan ti pannakadadael ti testo ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
+       "token_suffix_mismatch": "<strong>Ti panagurnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panagurnos.</strong>\nTi panagurnos ket saan a naawat tapno mapawilan ti pannakadadael ti teksto ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
        "edit_form_incomplete": "<strong>Adda dagiti paset ti pagurnosan a porma a saan a nakadanon dita server; mamindua a kitaen dagiti panagurnosmo ket sibubukel ken padasen manen.</strong>",
        "editing": "Ur-urnosen ti $1",
-       "creating": "Agparpartuat ti $1",
-       "editingsection": "Ur-urnosen ti $1 (paset)",
-       "editingcomment": "Ur-urnosen ti $1 (baro a paset)",
+       "creating": "Agparpartuat iti $1",
+       "editingsection": "Ur-urnosen ti $1 (seksion)",
+       "editingcomment": "Ur-urnosen ti $1 (baro a seksion)",
        "editconflict": "Agsinnungat a panagurnos: $1",
-       "explainconflict": "Adda sabali a nagsukat iti daytoy a panid idi nangrugika a nagurnos.\nTi akinngato a lugar ti testo ket aglaon ti testo ti panid iti agdama kaaddana.\nDagiti sinukatam ket maipakita iti akinbaba a lugar ti testo.\nNasken nga itiponmonto dagiti sinukatam iti adda a testo.\nTi <strong>laeng</strong> testo iti akinngato a lugar ti testo ti maidulinto no talmegam ti \"{{int:savearticle}}\".",
-       "yourtext": "Ti testom",
+       "explainconflict": "Adda sabali a nagsukat iti daytoy a panid idi nangrugika a nagurnos.\nTi akinngato a lugar ti teksto ket aglaon ti teksto ti panid iti agdama kaaddana.\nDagiti sinukatam ket maipakita iti akinbaba a lugar ti teksto.\nNasken nga itiponmonto dagiti sinukatam iti adda a teksto.\nTi <strong>laeng</strong> teksto iti akinngato a lugar ti teksto ti maidulinto no talmegam ti \"{{int:savearticle}}\".",
+       "yourtext": "Ti tekstom",
        "storedversion": "Rebision a naidulin",
        "nonunicodebrowser": "<strong>Ballaag: Ti pabasabasam ket saan a maitunos iti Unicode .</strong>\nAdda sabali a mausar tapno makaurnoska kadagiti panid: Ti saan nga-ASCII a karakter ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
-       "editingold": "<strong>Ballag: Ur-urnosem ti daan a rebision iti daytoy a panid.</strong>\nNo idulinmo, ti aniaman a naramid a binaliwan manipud iti daytoy a rebision ket mapukawto.",
+       "editingold": "<strong>Ballag: Ur-urnosem ti daan a rebision iti daytoy a panid.</strong>\nNo idulinmo, mapukawto ti ania man a naaramid a binaliwan manipud iti daytoy a rebision.",
        "yourdiff": "Paggigiddiatan",
-       "copyrightwarning": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket naikeddeng a naipablaak babaen ti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). \nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud ti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan.\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
-       "copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud ti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
+       "copyrightwarning": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket naikeddeng a naipablaak babaen ti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). \nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan.\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
+       "copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
        "editpage-cannot-use-custom-model": "Saan a mabaliwan ti modelo ti linaon iti daytoy a panid.",
-       "longpageerror": "<strong>Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
+       "longpageerror": "<strong>Biddut: Ti teksto nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
        "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador a nangrikep ket nangited iti daytoy a palawag: $1",
        "protectedpagewarning": "<strong>Ballaag: Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ditoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
-       "cascadeprotectedwarning": "<strong>Ballaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ngamin ket nairaman kadagiti sumaganad a nasalakniban iti sariap\n{{PLURAL:$1|a panid|a pampanid}}:",
+       "cascadeprotectedwarning": "<strong>Ballaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} a nasalakniban iti sariap:",
        "titleprotectedwarning": "<strong>Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan ti karbengan]] ket nasken a makapartuat iti daytoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "templatesused": "{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panid:",
        "templatesusedpreview": "{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panagpadas:",
        "hiddencategories": "Daytoy a panid ket kameng {{PLURAL:$1|ti 1 a nailemmeng a kategoria|dagiti $1 a nailemmeng a kategoria}}:",
        "nocreatetext": "Ginawidan ti {{SITENAME}} ti abilidad nga agpartuat kadagiti baro a panid.\nMabalinmo ti agsubli ken agurnos ti adda a panid, wenno [[Special:UserLogin|sumrek wenno agapartuat iti pakabilangan]].",
        "nocreate-loggedin": "Awan ti pammalubosmo nga agpartuat kadagiti baro a panid.",
-       "sectioneditnotsupported-title": "Saan a nasuportaran ti panagurnos ti paset",
-       "sectioneditnotsupported-text": "Saan a nasuportaran ti panagurnos ti paset iti daytoy a panid.",
+       "sectioneditnotsupported-title": "Saan a nasuportaran ti panagurnos iti seksion",
+       "sectioneditnotsupported-text": "Saan a nasuportaran ti panagurnos iti seksion iti daytoy a panid.",
        "permissionserrors": "Biddut ti pammalubos",
        "permissionserrorstext": "Awan ti pammalubosmo nga agaramid iti dayta, gapu ti sumaganad {{PLURAL:$1|a rason|a rasrason}}:",
        "permissionserrorstext-withaction": "Awan ti pammalubosmo nga $2, gapu ti sumaganad a {{PLURAL:$1|rason|rasrason}}:",
        "edit-hook-aborted": "Ti panagurnos ket pinasardeng babaen ti kawit.\nAwan ti intedna a palawag.",
        "edit-gone-missing": "Saan a mapabaro daytoy a panid.\nKasla met naikkaten.",
        "edit-conflict": "Agsinnungat a panagurnos.",
-       "edit-no-change": "Ti inurnosmo ket saan a naikaskaso ngamin ket awan ti naaramid a pannakasukat iti testo.",
+       "edit-no-change": "Ti inurnosmo ket saan a naikaskaso ngamin ket awan ti naaramid a pannakasukat iti teksto.",
        "postedit-confirmation-created": "Napartuaten ti panid.",
        "postedit-confirmation-restored": "Naipulangen ti panid.",
        "postedit-confirmation-saved": "Naidulinen ti inurnosmo.",
        "edit-already-exists": "Saan a makapartuat iti baro a panid.\nAdda met daytoyen.",
-       "defaultmessagetext": "Kasisigud a testo ti mensahe",
+       "defaultmessagetext": "Kasisigud a teksto ti mensahe",
        "content-failed-to-parse": "Napaay a mawaswas ti $2 a linaon para iti $1 a modelo: $3",
        "invalid-content-data": "Imbalido a datos ti linaon",
        "content-not-allowed-here": "Ti \"$1\" a linaon ket saan a maipalubos iti panid ti [[$2]]",
-       "editwarning-warning": "Ti ipapanaw iti daytoy a panid ket makapataud ti pannakapukaw kadagiti aniaman a binalbaliwam.\nNo nakastrekka, mabalinmo nga ibaldado daytoy a ballaag iti \"{{int:prefs-editing}}\" a paset kadagiti kakaykayatam.",
+       "editwarning-warning": "Ti ipapanaw iti daytoy a panid ket makapataud ti pannakapukaw kadagiti ania man a binalbaliwam.\nNo nakastrekka, mabalinmo nga ibaldado daytoy a ballaag iti \"{{int:prefs-editing}}\" a seksion kadagiti kakaykayatam.",
        "editpage-notsupportedcontentformat-title": "Ti pormat ti linaon ket saan a nasuportaran",
        "editpage-notsupportedcontentformat-text": "Ti pormat ti linaon ti $1 ket saan a nasuportaran babaen ti modelo ti linaon ti $2.",
        "content-model-wikitext": "wikitext",
-       "content-model-text": "naranas a testo",
+       "content-model-text": "naranas a teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Awan linaon a banag",
        "parser-unstrip-recursion-limit": "Nalabsan ti patingga ti panagdullit ti di-naukisan ($1)",
        "converter-manual-rule-error": "Adda biddut a naduktalan iti manual nga alagaden ti panagbalbaliw ti pagsasao",
        "undo-success": "Ti panag-urnos ket saan a maisubli.\nPangngaasi a kitaen ti panangipada dita baba tapno maammuan no daytoy ti kayatmo nga aramiden, ken kalpasanna idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.",
-       "undo-failure": "Ti inurnos ket saan a maipasubli gaputa adda dagiti nakisinnungat a patingnga a naurnos.",
+       "undo-failure": "Ti inurnos ket saan a maipasubli gapu ta adda dagiti nakisinnungat a patingnga a naurnos.",
        "undo-norev": "Saan a maibabawi ti naurnos ngamin ket awan daytoy wenno mabalin a naikkaten.",
        "undo-nochange": "Ti inurnos ket kasla naibabawin.",
        "undo-summary": "Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])",
        "undo-summary-username-hidden": "Isubli ti $1 a binaliwan babaen ti nailemmeng nga agar-aramat",
-       "cantcreateaccounttitle": "Saan a makapartuat ti pakabilangan",
-       "cantcreateaccount-text": "Ti panagpartuat ti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
-       "cantcreateaccount-range-text": "Ti panagpartuat ti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti '''$1''', a mairaman ti IP a pagtaengam ('''$4'''), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket ''$2''",
+       "cantcreateaccounttitle": "Saan a makapartuat iti pakabilangan",
+       "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
+       "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti '''$1''', a mairaman ti IP a pagtaengam ('''$4'''), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket ''$2''",
        "viewpagelogs": "Kitaen dagiti listaan para iti daytoy a panid",
        "nohistory": "Awan ti pakasaritaan ti panagurnos iti daytoy a panid.",
        "currentrev": "Kinaudi a rebision",
        "page_first": "umuna",
        "page_last": "naudi",
        "histlegend": "Panagpili ti diperensia: Markaan dagiti kahon ti radio kadagiti rebision tapno maipada ken pinduten ti enter wenno ti buton dita baba.<br />\nLeyenda: <strong>({{int:cur}})</strong> = naggidiatan ti kinaudi a rebision, <strong>({{int:last}})</strong> = naggidiatan ti sarsarunuen a rebision, <strong>{{int:minoreditletter}}</strong> = bassit nga urnos.",
-       "history-fieldset-title": "Agbasabasa ti pakasaritaan",
+       "history-fieldset-title": "Agbasabasa iti pakasaritaan",
        "history-show-deleted": "Naikkat laeng",
        "histfirst": "kadaanan",
        "histlast": "kabaruan",
        "history-feed-title": "Pakasaritaan ti rebision",
        "history-feed-description": "Pakasaritaan ti rebision para iti daytoy a panid ditoy a wiki",
        "history-feed-item-nocomment": "$1 idi $2",
-       "history-feed-empty": "Awan ti kiniddaw a panid.\nMabalin a naikkat manipud ti daytoy a wiki, wenno nanaganan manen.\nPadasem ti [[Special:Search|agbiruk ditoy a wiki]] para kadagiti maitutop a baro a panid.",
+       "history-feed-empty": "Awan ti kiniddaw a panid.\nMabalin a naikkat manipud iti daytoy a wiki, wenno nanaganan manen.\nPadasem ti [[Special:Search|agbiruk ditoy a wiki]] para kadagiti maitutop a baro a panid.",
        "history-edit-tags": "Urnosen dagiti etiketa kadagiti napili a rebision",
        "rev-deleted-comment": "(naikkat ti pakabuklan ti inurnos)",
        "rev-deleted-user": "(naikkat ti nagan ti agar-aramat)",
        "rev-deleted-event": "(naikkat ti listaan dagiti salaysay)",
        "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno IP a pagtaengan - ti inurnos ket nailemmeng manipud kadagiti kontribusion]",
-       "rev-deleted-text-permission": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
-       "rev-suppressed-text-permission": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
-       "rev-deleted-text-unhide": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
-       "rev-suppressed-text-unhide": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
-       "rev-deleted-text-view": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nMabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
-       "rev-suppressed-text-view": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nMabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
-       "rev-deleted-no-diff": "Saanmo a makita daytoy a paggiddiatan ngamin ket ti maysa a rebision ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
+       "rev-deleted-text-permission": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
+       "rev-suppressed-text-permission": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabalin a mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
+       "rev-deleted-text-unhide": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
+       "rev-suppressed-text-unhide": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
+       "rev-deleted-text-view": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nMabalinmo a kitaen; dagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
+       "rev-suppressed-text-view": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nMabalinmo a kitaen; dagiti salaysay ket mabirukan itiy [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
+       "rev-deleted-no-diff": "Saanmo a makita daytoy a paggiddiatan ngamin ket ti maysa a rebision ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "rev-suppressed-no-diff": "Saanmo a makita daytoy a paggiddiatan ngamin ket maysa kadagiti rebision ket <strong>naikkaten</strong>.",
-       "rev-deleted-unhide-diff": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a laeng a [$1 makita daytoy a paggiddiatan] no kayatmo ti agtuloy.",
-       "rev-suppressed-unhide-diff": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].\nMabalinmo pay a laeng a [$1 makita daytoy a paggiddiatan] no kayatmo ti agtuloy.",
-       "rev-deleted-diff-view": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>naikkaten</strong>.\nMabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
-       "rev-suppressed-diff-view": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>napasardeng</strong>..\nMabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
+       "rev-deleted-unhide-diff": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a laeng a [$1 makita daytoy a paggiddiatan] no kayatmo ti agtuloy.",
+       "rev-suppressed-unhide-diff": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].\nMabalinmo pay a laeng a [$1 makita daytoy a paggiddiatan] no kayatmo ti agtuloy.",
+       "rev-deleted-diff-view": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>naikkaten</strong>.\nMabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
+       "rev-suppressed-diff-view": "Maysa a rebision iti daytoy a paggiddiatan ket <strong>napasardeng</strong>..\nMabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
        "rev-delundel": "baliwan ti pannakakita",
        "rev-showdeleted": "ipakita",
        "revisiondelete": "Ikkaten/isubli dagiti naikkat a rebision",
        "revdelete-confirm": "Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ken ar-aramidem daytoy segun [[{{MediaWiki:Policy-url}}|ti annuroten]].",
        "revdelete-suppress-text": "Ti panagdepdep ket usaren <strong>laeng</strong> kadagiti sumaganad a kaso;\n* Makapataud ti libelo a pakaammo\n* Di maiparbeng a personal a pakaammo\n* : <em>dagiti adres ti balay ken numero ti telepono, dagiti numero ti nailian a pakaipakaammuan, kdpy.</em>",
        "revdelete-legend": "Isaad dagiti panangigawid ti panagkita",
-       "revdelete-hide-text": "Testo ti rebision",
+       "revdelete-hide-text": "Teksto ti rebision",
        "revdelete-hide-image": "Ilemmeng ti linaon ti papeles",
        "revdelete-hide-name": "Ilemmeng ti puntaan ken dagiti parametro",
        "revdelete-hide-comment": "Pakabuklan ti inurnos",
        "revdelete-hide-current": "Biddut ti pannakailemmeng ti banag a napetsado ti $2, $1: Daytoy ti kinaudi a rebision.\nSaan a mabalin a mailemmeng.",
        "revdelete-show-no-access": "Biddut ti panangipakita ti banag a petsado ti $2, $1: Daytoy ket namarkaan a \"nagawidan\".\nSaanmo a mabalin a serrekan.",
        "revdelete-modify-no-access": "Biddut ti panagpabaro ti banag a petsado ti $2, $1: Daytoy ket namarkaan a \"nagawidan\".\nSaanmo a mabalin a serrekan.",
-       "revdelete-modify-missing": "Biddut ti panagpabaro daytoy ID $1: Awan daytoy manipud ti database!",
-       "revdelete-no-change": "<strong>Ballaag:</strong> Daytoy a banag a napetsado ti $2, $1 ken addaan ti kiniddaw a panagkita ti pannakaisaad.",
+       "revdelete-modify-missing": "Biddut ti panagpabaro daytoy ID $1: Awan daytoy manipud iti database!",
+       "revdelete-no-change": "<strong>Ballaag:</strong> Daytoy a banag a napetsado ti $2, $1 ken addaan iti kiniddaw a panagkita ti pannakaisaad.",
        "revdelete-concurrent-change": "Biddut ti panagpabaro daytoy a banag a napetsado ti  $2, $1: Ti kasasaadna ket mabalin a nasukatanen ti sabali idi pinadasmo a pinabaro.\nPangngaasi a kitaen dagiti listaan.",
-       "revdelete-only-restricted": "Biddut ti panagilemmeng daytoy banag a napetsado ti $2, $1: Saanmo a maidepdep dagita iti panagkita dagiti adminitrador no saanmo a pilien ti maysa kadagiti pagpilian ti panagkita.",
+       "revdelete-only-restricted": "Biddut ti panagilemmeng daytoy banag a napetsado ti $2, $1: Saanmo a maidepdep dagita iti panagkita dagiti administrador no saanmo a pilien ti maysa kadagiti pagpilian ti panagkita.",
        "revdelete-reason-dropdown": "*Dagiti kadawyan a rason ti panagikkat\n** Panaglabsing ti karbengan ti kopia\n** Di maiparbeng a komentario wenno kabukbukodan a pakaammo\n** Di maiparbeng a nagan ti agar-aramat\n** Mabalin a pammadpadakes a pakaammo",
        "revdelete-otherreason": "Sabali/maipatinayon a rason:",
        "revdelete-reasonotherlist": "Sabali a rason",
        "mergelog": "Listaan ti panagtipon",
        "revertmerge": "Pagsinaen",
        "mergelogpagetext": "Dita baba ket ti listaan dagiti kaudian a panagtipon ti maysa a pakasaritaan ti panid iti sabali.",
-       "history-title": "Pakasaritaan a rebision iti \"$1\"",
-       "difference-title": "Paggiddiatan a nagbaetan dagiti rebision iti \"$1\"",
-       "difference-title-multipage": "Paggiddiatan a nagbaetan dagiti panid  \"$1\" ken \"$2\"",
+       "history-title": "Pakasaritaan ti rebision ti \"$1\"",
+       "difference-title": "Paggiddiatan a nagbaetan dagiti rebision ti \"$1\"",
+       "difference-title-multipage": "Paggiddiatan a nagbaetan dagiti panid \"$1\" ken \"$2\"",
        "difference-multipage": "(Paggiddiatan dagiti panid)",
        "lineno": "Linia $1:",
        "compareselectedversions": "Ipada dagiti pinili a rebision",
        "diff-multi-sameuser": "({{PLURAL:$1|Maysa nga agtengnga a rebision|Dagiti $1 nga agtengnga a rebision}} babaen ti isu met laeng nga agar-aramat a saan a naipakita)",
        "diff-multi-otherusers": "({{PLURAL:$1|Maysa nga agtengnga a rebision|Dagiti $1 nga agtengnga a rebision}} babaen {{PLURAL:$2|ti maysa a sabali nga agar-aramat|dagiti $2 nga agar-aramat}} a saan a naipakita)",
        "diff-multi-manyusers": "({{PLURAL:$1|Maysa nga agtengnga a rebision|Dagiti $1 nga agtengnga a rebision}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} ti saan a naipakita)",
-       "difference-missing-revision": "{{PLURAL:$2|Maysa a rebision|$2 kadagiti rebision}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a silpo ti paggiddiatan ti maysa a panid a naikkaten.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
-       "searchresults": "Dagiti nagbanagan ti panagbiruk",
-       "searchresults-title": "Dagiti nabirukan a nagbanagan para iti \"$1\"",
+       "difference-missing-revision": "{{PLURAL:$2|Maysa a rebision|$2 kadagiti rebision}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a silpo ti paggiddiatan ti maysa a panid a naikkaten.\nDagiti salaysay ket mabalin a mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
+       "searchresults": "Dagiti resulta ti panagbiruk",
+       "searchresults-title": "Dagiti resulta ti panagbiruk para iti \"$1\"",
        "titlematches": "Dagiti kapadpada a titulo ti panid",
-       "textmatches": "Dagiti agpapada a testo ti panid",
-       "notextmatches": "Awan dagiti kapadpada a testo ti panid",
+       "textmatches": "Dagiti agpapada a teksto ti panid",
+       "notextmatches": "Awan dagiti kapadpada a teksto ti panid",
        "prevn": "napalabas a {{PLURAL:$1|$1}}",
        "nextn": "sumaruno a {{PLURAL:$1|$1}}",
        "prev-page": "napalabas a panid",
        "searchprofile-images": "Multimidia",
        "searchprofile-everything": "Amin amin",
        "searchprofile-advanced": "Napasayaat",
-       "searchprofile-articles-tooltip": "Agbirukka idiay $1",
+       "searchprofile-articles-tooltip": "Agbirukka iti $1",
        "searchprofile-images-tooltip": "Agbirukka para iti papeles",
        "searchprofile-everything-tooltip": "Birukem amin a linaon (uray dagiti tungtungan a panid)",
        "searchprofile-advanced-tooltip": "Agbirukka kadagiti naiduma a nagan ti espasio",
        "search-result-size": "$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})",
        "search-result-category-size": "{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 a subkategoria|dagiti $2 a subkategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})",
-       "search-redirect": "(baw-ing ti $1)",
-       "search-section": "(paset $1)",
+       "search-redirect": "(baw-ing $1)",
+       "search-section": "(seksion $1)",
        "search-category": "(kategoria $1)",
        "search-file-match": "(maipada ti linaon a papeles)",
        "search-suggest": "Daytoy kadi: $1",
-       "search-interwiki-caption": "Dagiti kakabsat a gandat",
-       "search-interwiki-default": "Dagiti resulta manipud ti $1:",
+       "search-rewritten": "Agipakita para kadagiti resulta ti $1. Imbes ket nga agbiruk para iti $2.",
+       "search-interwiki-caption": "Dagiti kakabsat a proyekto",
+       "search-interwiki-default": "Dagiti resulta manipud iti $1:",
        "search-interwiki-more": "(adu pay)",
        "search-relatedarticle": "Mainaig",
        "searchrelated": "mainaig",
        "searchall": "amin",
-       "showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti <strong>1</strong> a nagbanagan|dagiti <strong>$1</strong> a nagbanagan}} a mangrugi ti #<strong>$2</strong>.",
-       "showingresultsinrange": "Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana ti #<strong>$3</strong>.",
+       "showingresults": "Maiparang dita baba agingga {{PLURAL:$1|iti <strong>1</strong> a nagbanagan|dagiti <strong>$1</strong> a nagbanagan}} a mangrugi iti #<strong>$2</strong>.",
+       "showingresultsinrange": "Mangipakpakita aginggana {{PLURAL:$1|iti <strong>1</strong> a resulta|dagiti <strong>$1</strong> a resulta}} iti sakop ti #<strong>$2</strong> aginggana iti #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Nagbanagan a <strong>$1</strong> iti <strong>$3</strong>|Dagiti nagbanagan a <strong>$1 - $2</strong> iti <strong>$3</strong>}}",
-       "search-nonefound": "Awan dagiti nagbanagan a maipada ti usisa.",
+       "search-nonefound": "Awan dagiti nagbanagan a maipada iti usisa.",
        "powersearch-legend": "Napasayat a panagbiruk",
        "powersearch-ns": "Agbiruk kadagiti nagan ti espasio:",
        "powersearch-togglelabel": "Markaan:",
        "powersearch-togglenone": "Awan",
        "powersearch-remember": "Lagipen ti napili para kadagiti masakbayan a panagbiruk",
        "search-external": "Akinruar a panagbiruk",
-       "searchdisabled": "Nabaldado ti panagbiruk iti {{SITENAME}}.\nMabalinmo itan ti agbiruk idiay Google.\nLaglagipem laeng a dagiti pagsurotan a linaon ti {{SITENAME}} ket mabalin a baak.",
+       "searchdisabled": "Nabaldado ti panagbiruk iti {{SITENAME}}.\nMabalinmo itan ti agbiruk iti Google.\nLaglagipem laeng a dagiti pagsurotan a linaon ti {{SITENAME}} ket mabalin a baak.",
        "search-error": "Adda napasamak a biddut bayat nga agbirbiruk: $1",
        "preferences": "Kakaykayatan",
        "mypreferences": "Kakaykayatan",
        "prefs-email": "Dagiti pagpilian ti esurat",
        "prefs-rendering": "Tabas",
        "saveprefs": "Idulin",
-       "restoreprefs": "Isubli amin dagiti kasisigud a pannakaisaad (kadagiti amin a paset)",
+       "restoreprefs": "Isubli amin dagiti kasisigud a pannakaisaad (kadagiti amin a seksion)",
        "prefs-editing": "Ur-urnosen",
        "rows": "Ar-aray:",
-       "columns": "Tuk-tukol:",
+       "columns": "Dagiti batong:",
        "searchresultshead": "Biruken",
-       "stub-threshold": "Pagpatinggaan para iti panagporma ti <a href=\"#\" class=\"stub\">pungol a silpo</a> (dagiti byte):",
+       "stub-threshold": "Pagpatinggaan para iti panagpormat iti <a href=\"#\" class=\"stub\">pungol a silpo</a> (dagiti byte):",
        "stub-threshold-disabled": "Nabaldado",
        "recentchangesdays": "Al-aldaw nga ipakita iti kaudian a balbaliw:",
        "recentchangesdays-max": "Kapaut nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}",
        "badsig": "Imbalido a naata a pirma.\nKitaen dagiti etiketa ti HTML.",
        "badsiglength": "Atiddog unay ti pirmam.\nMasapul a saan nga ad-adu ngem $1 {{PLURAL:$1| a karakter|a karkarakter}} ti kaatiddogna.",
        "yourgender": "Kasano kadi ti kayatmo a pannakaibaga?",
-       "gender-unknown": "Kaykayatko a saan nga ibaga",
+       "gender-unknown": "No maibagbagaka, agusarto ti sopwer kadagiti neutral a balikas ti gender no mabalin",
        "gender-male": "Isuna ket lalaki nga agur-urnos ti pampanid ti wiki",
        "gender-female": "Isuna ket babai nga agur-urnos ti pampanid ti wiki",
        "prefs-help-gender": "Ti panangisaad daytoy a kakaykayatan ket saan a nasken.\nTi sopwer ket agus-usar iti pategna tapno tawagannaka ken ibaganaka kadagiti sabali nga agus-usar iti maitunos gramatika ti henero.\nDaytoy a pakaammo ket makitanto iti publiko.",
        "prefs-help-prefershttps": "Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.",
        "prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
        "prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
-       "email-address-validity-valid": "Ti esurat a pagtaengan ket kasla umiso",
-       "email-address-validity-invalid": "Ikabil ti umiso nga esurat a pagtaengan",
+       "email-address-validity-valid": "Ti esurat a pagtaengan ket kasla umisu",
+       "email-address-validity-invalid": "Ikabil ti umisu nga esurat a pagtaengan",
        "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
        "userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
        "editinguser": "Suksukatan ti karbengan ni {{GENDER:$1|agar-aramat}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Urnosen dagiti grupo ti agar-aramat",
        "saveusergroups": "Idulin dagiti grupo ti agar-aramat",
-       "userrights-groupsmember": "Kameng iti:",
-       "userrights-groupsmember-auto": "Napudno a kameng iti:",
-       "userrights-groups-help": "Mabaliwam dagiti ayan a grupo ti agar-aramat:\n* Ti nakur-it a kahon ket kayatna a saoen nga adda ti agar-aramat dita a grupo.\n* Ti saan a nakur-it a kahon ket kayatna a saoen nga awan ti agar-aramat dita a grupo.\n* A * mangipakita a saanmo a maikkat ti grupo no nainayonmon, wenno pagbalittaden.",
+       "userrights-groupsmember": "Kameng ti:",
+       "userrights-groupsmember-auto": "Napudno a kameng ti:",
+       "userrights-groups-help": "Mabaliwam dagiti ayan a grupo ti agar-aramat:\n* Ti nakur-it a kahon ket kayatna a sawen nga adda ti agar-aramat dita a grupo.\n* Ti saan a nakur-it a kahon ket kayatna a sawen nga awan ti agar-aramat dita a grupo.\n* A * mangipakita a saanmo a maikkat ti grupo no nainayonmon, wenno pagbalittaden.",
        "userrights-reason": "Rason:",
        "userrights-no-interwiki": "Awan ti pammalubosmo nga agurnos ti karbengan ti agar-aramat kadagiti sabali a wiki.",
        "userrights-nodatabase": "Awan ti database a $1 wenno saan a lokal.",
        "right-read": "Basaen dagiti panid",
        "right-edit": "Agurnos kadagiti panid",
        "right-createpage": "Agpartuat kadagiti panid (saan a pagtutungtongan a pampanid)",
-       "right-createtalk": "Agpartuat ti pagtungtungan a pampanid",
+       "right-createtalk": "Agpartuat iti pagtungtungan a pampanid",
        "right-createaccount": "Agpartuat kadagiti baro a pakabilangan ti agar-aramat",
        "right-minoredit": "Markaan dagiti inurnos a kas bassit",
        "right-move": "Agiyalis kadagiti panid",
        "right-move-subpages": "Agiyalis kadagiti panid a kakuyog dagiti subpanidda",
        "right-move-rootuserpages": "Agiyalis kadagiti ramut a panid ti agar-aramat",
-       "right-move-categorypages": "Agiyalis ti pampanid ti kategoria",
+       "right-move-categorypages": "Agiyalis iti pampanid ti kategoria",
        "right-movefile": "Agiyalis kadagiti papeles",
        "right-suppressredirect": "Saan nga agpartuat kadagiti baw-ing manipud ti taudan ti pampanid no agiyalis kadagiti panid",
        "right-upload": "Agikarga kadagiti papeles",
        "right-reupload": "Agisurat manen kadagiti addan a papeles",
        "right-reupload-own": "Agisurat manen kadagiti addan a papeles a bukod nga inkarga",
-       "right-reupload-shared": "Lokal a mangtuon kadagiti papeles idiay pagbingayan a repsitorio ti midia",
-       "right-upload_by_url": "Agikarga kadagiti papeles manipud ti URL",
-       "right-purge": "Agpurga ti cache ti sitio para iti panid nga awan ti pammasingked",
-       "right-autoconfirmed": "Saan a mabanagan babaen dagiti patingga ti gatad a naibatay ti IP",
+       "right-reupload-shared": "Lokal a mangtuon kadagiti papeles iti pagbingayan a repsitorio ti midia",
+       "right-upload_by_url": "Agikarga kadagiti papeles manipud iti URL",
+       "right-purge": "Agpurga iti cache ti sitio para iti panid nga awan ti pammasingked",
+       "right-autoconfirmed": "Saan a mabanagan babaen dagiti patingga ti gatad a naibatay iti IP",
        "right-bot": "Matrato a kas maysa nga automatiko a proseso",
        "right-nominornewtalk": "Nga awanan ti bassit a panagurnos dagiti tungtungan a panid ti mangkalbit dagiti agpakabil ti baro a mensahe",
        "right-apihighlimits": "Agusar kadagiti nangatngato a patingga kadagiti usisa ti API.",
        "right-bigdelete": "Agikkat kadagiti panid nga addaan kadagiti dakkel a pakasaritaan",
        "right-deletelogentry": "Agikkat ken agisubli iti panagikkat kadagiti naisangsangayan a naikabil ti listaan",
        "right-deleterevision": "Agikkat ken agisubli kadagiti naisangayan a rebision ti panid",
-       "right-deletedhistory": "Agkita kadagiti naikabil a naikkat a pakasaritaan, nga awan kadagiti mainaig a testo",
-       "right-deletedtext": "Agkita kadagiti naikkat a testo ken dagiti nasukatan a nagbaetan dagiti naikkat a rebision",
+       "right-deletedhistory": "Agkita kadagiti naikabil a naikkat a pakasaritaan, nga awan kadagiti mainaig a teksto",
+       "right-deletedtext": "Agkita kadagiti naikkat a teksto ken dagiti nasukatan a nagbaetan dagiti naikkat a rebision",
        "right-browsearchive": "Agbiruk kadagiti naikkat a panid",
        "right-undelete": "Agisubli ti pannakaikkat ti panid",
-       "right-suppressrevision": "Agkita, agilemmeng ken agisubli ti pannakakita dagiti naisangayan a rebision dagiti panid manipud ti sinoman nga agar-aramat",
-       "right-viewsuppressed": "Agkita kadagiti rebision a nailemmeng manipud ti sinoman nga agar-aramat",
+       "right-suppressrevision": "Agkita, agilemmeng ken agisubli ti pannakakita dagiti naisangayan a rebision dagiti panid manipud iti sinoman nga agar-aramat",
+       "right-viewsuppressed": "Agkita kadagiti rebision a nailemmeng manipud iti sinoman nga agar-aramat",
        "right-suppressionlog": "Agkita kadagiti pribado a listaan",
        "right-block": "Agserra kadagiti sabali nga agar-aramat manipud iti panagurnos",
-       "right-blockemail": "Agserra iti agar-aramat manipud ti panagipatulod ti esurat",
-       "right-hideuser": "Agserra iti nagan ti agar-aramat, ken agilemmeng manipud ti publiko",
+       "right-blockemail": "Agserra iti agar-aramat manipud iti panagipatulod ti esurat",
+       "right-hideuser": "Agserra iti nagan ti agar-aramat, ken agilemmeng manipud iti publiko",
        "right-ipblock-exempt": "Labsanna dagiti serra ti IP, dagiti automatiko a serra ken dagiti sakop a serra.",
        "right-proxyunbannable": "Labsanna dagiti automatiko a serra dagiti pannakbagi",
        "right-unblockself": "Bukod nga agikkat it pannakaserra",
        "right-userrights-interwiki": "Agurnos kadagiti karbengan ti agar-aramat kadagiti agar-aramat iti sabsabali a wiki",
        "right-siteadmin": "Mangikandado ken manglukat iti database",
        "right-override-export-depth": "Agipan kadagiti panid a mairaman dagiti naisilpo a panid agingana iti kauneg ti 5",
-       "right-sendemail": "Agipatulod ti esurat kadagiti sabali nga agar-aramat",
+       "right-sendemail": "Agipatulod iti esurat kadagiti sabali nga agar-aramat",
        "right-passwordreset": "Agkita kadagiti esurat ti panangisaad manen ti kontrasenias",
-       "right-managechangetags": "Agpartuat ken agikkat kadagiti [[Special:Tags|etiketa]] manipud ti database",
+       "right-managechangetags": "Agpartuat ken agikkat kadagiti [[Special:Tags|etiketa]] manipud iti database",
        "right-applychangetags": "Ipakat dagiti [[Special:Tags|etiketa]] a mairaman dagiti nabaliwan",
        "right-changetags": "Agnayon ken agikkat kadagiti arbitario nga [[Special:Tags|etiketa]] kadagiti agmaymaysa a rebision ken dagiti naikabkabil iti listaan",
        "newuserlogpage": "Listaan ti panagpartuat ti agar-aramat",
        "action-createpage": "agpartuat kadagiti panid",
        "action-createtalk": "agpartuat kadagiti pagtungtungan a panid",
        "action-createaccount": "agpartuat iti pakabilangan daytoy nga agar-aramat",
-       "action-history": "agkita iti pakasaritaan daytoy a panid",
+       "action-history": "agkita iti pakasaritaan iti daytoy a panid",
        "action-minoredit": "agmarka iti daytoy nga inurnos a kas bassit",
        "action-move": "agiyalis iti daytoy a panid",
        "action-move-subpages": "agiyalis iti daytoy a panid, ken dagiti subpanidna",
        "action-movefile": "agiyalis iti daytoy a papeles",
        "action-upload": "agikarga iti daytoy a papeles",
        "action-reupload": "agsurat manen iti daytoy nga adda a papeles",
-       "action-reupload-shared": "mangtuon iti daytoy a papeles idiay pagbingayan a repositorio",
-       "action-upload_by_url": "agikarga iti daytoy a papeles manipud ti URL",
+       "action-reupload-shared": "mangtuon iti daytoy a papeles iti pagbingayan a repositorio",
+       "action-upload_by_url": "agikarga iti daytoy a papeles manipud iti URL",
        "action-writeapi": "agusar iti panagsurat ti API",
        "action-delete": "agikkat iti daytoy a panid",
        "action-deleterevision": "agikkat iti daytoy a rebision",
        "action-undelete": "agisubli iti pannakaikkat iti daytoy a panid",
        "action-suppressrevision": "agrepaso ken agisubli iti daytoy a nailemmeng a rebision",
        "action-suppressionlog": "agkita iti daytoy a pribado a listaan",
-       "action-block": "agserra iti daytoy nga agar-aramat manipud ti panagurnos",
+       "action-block": "agserra iti daytoy nga agar-aramat manipud iti panagurnos",
        "action-protect": "mangsukat kadagiti lessaad ti salaknib para iti daytoy a panid",
        "action-rollback": "napardas a mangisubli kadagiti inurnos ti kinaudi nga agar-aramat a nagurnos iti naisangsangayan a panid",
-       "action-import": "agala ti pampanid manipud ti sabali a wiki",
-       "action-importupload": "agala ti pampanid manipud ti naikarga a papeles",
+       "action-import": "agala ti pampanid manipud iti sabali a wiki",
+       "action-importupload": "agala ti pampanid manipud iti naikarga a papeles",
        "action-patrol": "agmarka kadagiti inurnos ti dadduma a kas napatruliaan",
        "action-autopatrol": "agmarka iti bukodmo nga inurnos a kas napatrulian",
        "action-unwatchedpages": "agkita ti listaan dagiti saan a nabambantayan a panid",
        "action-viewmyprivateinfo": "agkita iti bukodmo a pribado a pakaammo",
        "action-editmyprivateinfo": "agurnos iti bukodmo a pribado a pakaammo",
        "action-editcontentmodel": "urnosen ti modelo ti linaon iti panid",
-       "action-managechangetags": "agpartuat ken agikkat kadagiti etiketa manipud ti database",
+       "action-managechangetags": "agpartuat ken agikkat kadagiti etiketa manipud iti database",
        "action-applychangetags": "ipakat dagiti etiketa a mairaman dagiti nabaliwan",
        "action-changetags": "agnayon ken agikkat kadagiti arbitario nga etiketa kadagiti agmaymaysa a rebision ken dagiti naikabkabil iti listaan",
        "nchanges": "$1 {{PLURAL:$1|sinukatan|dagiti sinukatan}}",
-       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|manipud ti naudi a panagsarungkar}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|manipud iti naudi a panagsarungkar}}",
        "enhancedrc-history": "pakasaritaan",
        "recentchanges": "Kaudian a balbaliw",
        "recentchanges-legend": "Pagpilian iti kaudian a balbaliw",
        "newpageletter": "B",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 nga agbuybuya {{PLURAL:$1|nga agar-aramat|kadagiti agar-aramat}}]",
-       "rc_categories": "Patingga dagiti kategoria (pagsinaen iti \"|\")",
-       "rc_categories_any": "Ania man",
-       "rc-change-size-new": "$1 {{PLURAL:$1|a byte|kadagiti byte}} kalpasan ti panag-sukat",
-       "newsectionsummary": "/* $1 */ baro a paset",
+       "rc_categories": "Patingga dagiti kategoria (pagsinaen iti \"|\"):",
+       "rc_categories_any": "Ti ania man a napili",
+       "rc-change-size-new": "$1 {{PLURAL:$1|a byte|kadagiti byte}} kalpasan ti panagsukat",
+       "newsectionsummary": "/* $1 */ baro a seksion",
        "rc-enhanced-expand": "Ipakita dagiti salaysay",
        "rc-enhanced-hide": "Ilemmeng dagiti salaysay",
        "rc-old-title": "kasisigud nga inaramid a kas ti \"$1\"",
        "upload": "Agikarga iti papeles",
        "uploadbtn": "Agikarga iti papeles",
        "reuploaddesc": "Ukasen ti panagikarga ken agsubli idiay porma ti panagikarga",
-       "upload-tryagain": "Mangited ti napabaro a deskripsion ti papeles",
+       "upload-tryagain": "Mangited iti napabaro a deskripsion ti papeles",
        "uploadnologin": "Saan a nakastrek",
        "uploadnologintext": "Pangngaasi a $1 tapno makaikarga kadagiti papeles.",
        "upload_directory_missing": "Ti pagikargaan a direktorio ($1) ket awan ken saan a mabalin a mapartuat babaen ti webserver.",
        "upload-scripted-pi-callback": "Saan a maikarga ti papeles nga aglaon ti panagproseso ti instruksion iti estilo ti sabanas ti XML.",
        "uploaded-script-svg": "Nakabiruk ti maieskritu nga elemento ti \"$1\" iti naikarga a papeles ti SVG.",
        "uploaded-hostile-svg": "Nakabiruk ti saan a natalged a CSS iti elemento ti estilo ti naikarga a papeles ti SVG.",
+       "uploaded-event-handler-on-svg": "Ti panangisaad kadagiti gupit ti panagtengngel ti pasamak ti <code>$1=\"$2\"</code> ket saan a maipalubos kadagiti papeles ti SVG.$1",
+       "uploaded-href-attribute-svg": "Dagiti gupit ti href ti <code>&lt;$1 $2=\"$3\"&gt;</code> nga addaan iti saan a lokal a puntaan (kas ti http://, javascript:, kdpy) ket saan a maipalubos kadagiti papeles ti SVG.",
+       "uploaded-href-unsafe-target-svg": "Nakabiruk ti href iti saan a natalged a puntaan ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
+       "uploaded-animate-svg": "Nakabiruk ti etiketa ti \"animado\" a mabalin a mangbalbaliw iti href, nga agus-usar iti gupit ti \"manipud\" ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
+       "uploaded-setting-event-handler-svg": "Naserraan ti panangisaad ti kadagiti gupit ti panagtengngel ti pasamak, nakabiruk iti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-image-filter-svg": "Nakabiruk ti sagat ti ladawan nga addaan iti URL: <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
-       "uploadscriptednamespace": "Daytoy a papeles ti SVG ket aglaon ti maysa a saan a mabalin a nagan ti espasio ti \"$1\".",
+       "uploadscriptednamespace": "Daytoy a papeles ti SVG ket aglaon iti maysa a saan a mabalin a nagan ti espasio ti \"$1\".",
        "uploadinvalidxml": "Ti XML iti naikarga a papeles ket saan a maiwaswas.",
        "uploadvirus": "Ti papeles ket aglaon ti birus! \nDagiti salaysay: $1",
        "uploadjava": "Daytoy a papeles ket papeles ti ZIP nga aglaon ti Java .a klase ti papeles.\nTi panangikarga ti papales ti Java ket saan a maipalubos gapu ta makapataudda a manglabas kadagiti panangigawid ti seguridad.",
        "upload-success-subj": "Balligi ti panagikarga",
        "upload-success-msg": "Ti panagikargam manipud ti [$2] ket nagballigi. Daytoy ket magun-od ditoy [[:{{ns:file}}:$1]]",
        "upload-failure-subj": "Parikut ti panagikarga",
-       "upload-failure-msg": "Adda parikut ti panagikargam manipud ti [$2]:\n\n$1",
+       "upload-failure-msg": "Adda parikut ti panagikargam manipud iti [$2]:\n\n$1",
        "upload-warning-subj": "Ballaag ti panagikarga",
-       "upload-warning-msg": "Adda parikut iti panagikargam manipud ti [$2]. Mabalinmo ti agsubli iti [[Special:Upload/stash/$1|porma ti panagikarga]] tapno masimpa daytoy a parikut.",
+       "upload-warning-msg": "Adda parikut iti panagikargam manipud iti [$2]. Mabalinmo ti agsubli iti [[Special:Upload/stash/$1|porma ti panagikarga]] tapno masimpa daytoy a parikut.",
        "upload-proto-error": "Saan a husto a protokol",
        "upload-proto-error-text": "Ti adayo a panagikarga ket makasapul kadagiti URL a mangrugi iti <code>http://</code> wenno <code>ftp://</code>.",
        "upload-file-error": "Akin-uneg a biddut",
        "upload-misc-error-text": "Adda napasamak a di ammo a biddut idi las-ud ti panagikarga.\nPangngaasi a pasingkedan ti URL ket umisu ken maserrekan ken padasem manen.\nNo ti parikut ket agsubli latta, kontaken ti maysa nga [[Special:ListUsers/sysop|administrador]].",
        "upload-too-many-redirects": "Ti URL ket naglaon kadagiti adu unay a baw-ing",
        "upload-http-error": "Adda napasamak a biddut ti HTTP: $1",
-       "upload-copy-upload-invalid-domain": "Dagiti kopia a panagikarga ket saan a magun-od manipud ti daytoy a dominio.",
+       "upload-copy-upload-invalid-domain": "Dagiti kopia a panagikarga ket saan a magun-od manipud iti daytoy a dominio.",
+       "upload-dialog-title": "Agikarga iti papeles",
+       "upload-dialog-error": "Adda napasamak a biddut",
+       "upload-dialog-warning": "Adda napasamak a ballaag",
+       "upload-dialog-button-cancel": "Ukasen",
+       "upload-dialog-button-done": "Nalpasen",
+       "upload-dialog-button-save": "Idulin",
+       "upload-dialog-button-upload": "Agikarga",
+       "upload-dialog-label-select-file": "Pilien ti papeles",
+       "upload-dialog-label-infoform-title": "Dagiti salaysay",
+       "upload-dialog-label-infoform-name": "Nagan",
+       "upload-dialog-label-infoform-description": "Deskripsion",
+       "upload-dialog-label-usage-title": "Panagusar",
+       "upload-dialog-label-usage-filename": "Nagan ti papeles",
        "backend-fail-stream": "Saan a maipan ti papeles $1.",
        "backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
        "backend-fail-notexists": "Awan ti papeles ti $1.",
        "backend-fail-hashes": "Saan a makaala kadagiti hash ti papeles para iti panangipada.",
-       "backend-fail-notsame": "Addan ti awan kapada a papeles idiay \"$1\".",
+       "backend-fail-notsame": "Addan ti awan kapada a papeles iti \"$1\".",
        "backend-fail-invalidpath": "Ti \"$1\" ket imbalido a dalan ti pagidulinan.",
        "backend-fail-delete": "Saan a maikkat ti papeles ti \"$1\".",
        "backend-fail-describe": "Saan a mabaliwan ti metadata para iti papeles ti \"$1\".",
        "lockmanager-fail-acquirelock": "Saan a makaala ti kandado para iti \"$1\".",
        "lockmanager-fail-openlock": "Saan a malukatan ti kandado ti papeles para iti \"$1\".",
        "lockmanager-fail-releaselock": "Saan a maibbatan ti kandado para iti \"$1\".",
-       "lockmanager-fail-db-bucket": "Saan a makakontak ti umanay a kandado dagiti database idiay timba ti $1.",
+       "lockmanager-fail-db-bucket": "Saan a makakontak ti umanay a kandado dagiti database iti timba ti $1.",
        "lockmanager-fail-db-release": "Saan a maibbatan dagiti kandado iti database ti $1.",
-       "lockmanager-fail-svr-acquire": "Saan a makaala kadagiti kandado ti server ti $1.",
+       "lockmanager-fail-svr-acquire": "Saan a makaala kadagiti kandado iti server ti $1.",
        "lockmanager-fail-svr-release": "Saan a maibbatan dagiti kandado iti server ti $1.",
        "zip-file-open-error": "Adda napasamak a biddut idi lukluktan ti papeles para kadagiti panagkita ti ZIP.",
        "zip-wrong-format": "Ti nainagan a papeles ket saan a papeles ti ZIP.",
        "img-auth-nologinnWL": "Saanka a nakastrek ken ti \"$1\" ket awan idiay mabalin a listaan.",
        "img-auth-nofile": "Awan ti papeles ti \"$1\".",
        "img-auth-isdir": "Padpadasem ti mangserrek ti direktorio ti \"$1\".\nTi laeng panagserrek ti papeles ti maipalubos.",
-       "img-auth-streaming": "Agip-ipan ti \"$1\".",
-       "img-auth-public": "Ti annong ti img_auth.php ket ti mangiruar kadagiti papeles manipud ti pribado a wiki.\nDaytoy a wiki naaramid a kas publiko a wiki.\nPara iti kangatuan a seguridad, nabaldado ti img_auth.php.",
-       "img-auth-noread": "Ti agar-aramat ket awan ti pammalubosna nga agbasa ti \"$1\".",
+       "img-auth-streaming": "Agip-ipan iti \"$1\".",
+       "img-auth-public": "Ti annong ti img_auth.php ket ti mangiruar kadagiti papeles manipud iti pribado a wiki.\nDaytoy a wiki naaramid a kas publiko a wiki.\nPara iti kangatuan a seguridad, nabaldado ti img_auth.php.",
+       "img-auth-noread": "Ti agar-aramat ket awan ti pammalubosna nga agbasa iti \"$1\".",
        "http-invalid-url": "Imbalido nga URL: $1",
        "http-invalid-scheme": "Dagiti URL nga addaan iti \"$1\" a pamuspusan ket saan a masuportaran.",
        "http-request-error": "Ti panagkiddaw ti HTTP ket napaay gapu ti di ammo a biddut.",
        "upload-curl-error6-text": "Ti URL a naited ket saan a madanon.\nPangngaasi a kitaem manen no husto ti URL ken adda dayta a sitio.",
        "upload-curl-error28": "Nagsardeng ti panagikarga",
        "upload-curl-error28-text": "Ti sitio ket nabayag unay a simmungbat.\nPangngaasi a kitaen no naipatakder ti sito, aguray no madamdama ket padasen manen.\nBaka kayatmo a padasen iti saan a makumikom nga oras.",
-       "license": "Panaglisensia:",
-       "license-header": "Panaglisensia",
+       "license": "Lisensia:",
+       "license-header": "Lisensia",
        "nolicense": "Awan ti napili",
        "licenses-edit": "Urnosen dagiti pagpilian ti lisensia",
        "license-nopreview": "(Saan a magun-od ti panagipadas)",
-       "upload_source_url": "(ti pinilim a papeles manipud ti umiso, ken publiko a maserrekan nga URL)",
+       "upload_source_url": "(ti pinilim a papeles manipud ti umisu, ken publiko a maserrekan nga URL)",
        "upload_source_file": "(ti pinilim a papeles manipud ti kompiutermo)",
        "listfiles-delete": "ikkaten",
        "listfiles-summary": "Daytoy nga espesial a panid ket agiparang kadagiti amin a naikarga a papeles.",
        "listfiles_search_for": "Agbiruk para iti nagan ti midia:",
-       "listfiles-userdoesnotexist": "Ti pakabilangan ni \"$1\" ket saaan a nairehistro.",
+       "listfiles-userdoesnotexist": "Saan a nairehistro ti pakabilangan ni \"$1\".",
        "imgfile": "papeles",
        "listfiles": "Listaan ti papeles",
        "listfiles_thumb": "Bassit a ladawan",
        "filepage-nofile": "Awan ti agnagan ti kasta a papeles.",
        "filepage-nofile-link": "Awan ti agnagan ti kastoy a papeles, ngem mabalinmo ti [$1 agikarga].",
        "uploadnewversion-linktext": "Agikarga ti baro a bersion iti daytoy a papeles",
-       "shared-repo-from": "manipud ti $1",
+       "shared-repo-from": "manipud iti $1",
        "shared-repo": "ti pagbingbingayan a repositorio",
        "upload-disallowed-here": "Saanmo a masuratan manen daytoy a papeles.",
        "filerevert": "Isubli ti $1",
        "pageswithprop-text": "Daytoy a panid ket ilistana ti pampanid nga agus-usar ti naisangayan a tagikua ti panid.",
        "pageswithprop-prop": "Nagan ti tagikua:",
        "pageswithprop-submit": "Inkan",
-       "pageswithprop-prophidden-long": "atiddog a testo ti pateg ti tagikua a nailemmeng ($1)",
+       "pageswithprop-prophidden-long": "atiddog a teksto ti pateg ti tagikua a nailemmeng ($1)",
        "pageswithprop-prophidden-binary": "binario a pateg ti tagikua a nailemmeng ($1)",
        "doubleredirects": "Dagiti namindua a naibaw-ing",
        "doubleredirectstext": "Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabali a baw-ing a pampanid.\nIti tunggal maysa nga aray ket aglaon kadagiti silpo iti umuna ken maikadua a baw-ing, ken ti pay puntaan ti maikadua a baw-ing, nga isu ti \"pudno\" a puntaan ti panid, nga ti umuna a baw-ing ket isu koma ti pakaituduanna.\nNasolbaren dagiti <del>nakurosan</del> a naikabil.",
        "mostimages": "Dagiti papeles a kaaduan iti nakasilpo",
        "mostinterwikis": "Dagiti panid a kaaduan kadagiti interwiki",
        "mostrevisions": "Dagiti panid a kaaduan kadagiti rebision",
-       "prefixindex": "Amin a pampanid nga addaan iti pasaruno",
+       "prefixindex": "Amin a pampanid nga addaan iti pasakbay",
        "prefixindex-namespace": "Amin a pampanid nga addaan iti pasaruno (nagan ti espasio ti $1)",
-       "prefixindex-strip": "Ikkaten ti pasaruno iti listaan",
+       "prefixindex-strip": "Ikkaten ti pasakbay iti listaan",
        "shortpages": "Dagiti ababa a panid",
        "longpages": "Dagiti atiddog a panid",
        "deadendpages": "Dagiti ngudo a panid",
        "allarticles": "Amin a pampanid",
        "allinnamespace": "Amin a pampanid (nagan ti espasio ti $1)",
        "allpagessubmit": "Inkan",
-       "allpagesprefix": "Iparang dagiti pampanid nga adda pasarunona:",
+       "allpagesprefix": "Iparang dagiti pampanid nga addaan iti pasakbay:",
        "allpagesbadtitle": "Ti naited a titulo ti panid ket imbalido wenno adda idi ti sabali a pagsasao wenno interwiki a pasarunona.\nDaytoy ket mabalin nga aglaon iti maysa wenno ad-adu a karkarakter a saan a mausar kadagiti titulo.",
        "allpages-bad-ns": "Ti {{SITENAME}} ket awan iti nagan ti espasio iti \"$1\".",
        "allpages-hide-redirects": "Ilemmeng dagiti baw-ing",
        "deletedcontributions": "Dagiti naikkat a kontribusion ti agar-aramat",
        "deletedcontributions-title": "Dagiti naikkat a kontribusion ti agar-aramat",
        "sp-deletedcontributions-contribs": "dagiti kontribusion",
-       "linksearch": "Dagiti panagbiruk ti ruar a silpo",
+       "linksearch": "Panagbiruk kadagiti akinruar a silpo",
        "linksearch-pat": "Tabas ti panagbiruk:",
        "linksearch-ns": "Nagan ti espasio:",
        "linksearch-ok": "Biruken",
-       "linksearch-text": "Dagiti naatap a tarheta a kas ti \"*.wikipedia.org\" ket mabalin nga usaren.\nMasapul ti saan a basbassit ngem kangatuan a dominio, kas pagarigan \"*.org\".<br />\n{{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: <code>$1</code> (kasisigud iti http:// no awan ti nainaganan a protokol).",
+       "linksearch-text": "Dagiti naatap a tarheta a kas ti \"*.wikipedia.org\" ket mabalin nga usaren.\nMasapul ti saan a basbassit ngem kangatuan a dominio, kas pagarigan \"*.org\".<br />\n{{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: $1 (kasisigud iti http:// no awan ti nainaganan a protokol).",
        "linksearch-line": "Ti $1 ket naisilpo manipud ti $2",
        "linksearch-error": "Ti naatap a tarheta ket mabalin nga agparang laeng iti rugi ti nagan ti agsangaili.",
        "listusersfrom": "Iparang dagiti agar-aramat a mangrugi iti:",
        "emailuser": "Esuratan daytoy nga agar-aramat",
        "emailuser-title-target": "Esuratam daytoy nga {{GENDER:$1|agar-aramat}}",
        "emailuser-title-notarget": "Esuratan ti agar-aramat",
-       "emailpage": "Esuratan ti agar-aramat",
        "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti esurat a mensahe iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" a pagtaengan ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
        "defemailsubject": "Esurat ti {{SITENAME}} a naggapo kenni \"$1\"",
        "usermaildisabled": "Saanmo a mabalin ti agipatulod ti esurat",
        "emailccsubject": "Kopia ti mensahem kenni $1: $2",
        "emailsent": "Naipatuloden ti esurat",
        "emailsenttext": "Naipatuloden ti esurat a mensahem.",
-       "emailuserfooter": "Daytoy nga esurat ket impatulod babaen ni $1 kenni $2 iti \"{{int:emailpage}}\" nga annong iti {{SITENAME}}",
+       "emailuserfooter": "Daytoy nga esurat ket impatulod babaen ni $1 kenni $2 iti \"{{int:emailuser}}\" nga annong iti {{SITENAME}}",
        "usermessage-summary": "Pumanpanaw iti mesahe ti sistema.",
        "usermessage-editor": "Mensahero ti sistema",
        "watchlist": "Bambantayan",
        "watchlistanontext": "Pangngaasi a sumrek tapno makitam dagiti inurnosmo dita bambantayam.",
        "watchnologin": "Saan a nakastrek",
        "addwatch": "Inayon iti listaan ti bambantayan",
-       "addedwatchtext": "Ti panid iti \"[[:$1]]\" ket nainayonen idiay [[Special:Watchlist|listaan ti bambantayam]].\nDagiti masakbayan a panagsukat iti daytoy a panid ken dagiti mainaig a tungtunganna a panid ket mailistanto idiay.",
+       "addedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket nainayonen iti [[Special:Watchlist|listaan ti bambantayam]].",
        "addedwatchtext-short": "Ti panid ti \"$1\" ket nainayonen iti listaan ti bambantayam.",
        "removewatch": "Ikkaten manipud ti listaan ti bambantayan",
-       "removedwatchtext": "Daytoy a panid  \"[[:$1]]\" ket naikkat idiay [[Special:Watchlist|bambantayam]].",
+       "removedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket naikkaten manipud iti [[Special:Watchlist|listaan ti bambantayam]].",
        "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud ti listaan ti bambantayam.",
        "watch": "Bantayan",
        "watchthispage": "Bantayan daytoy a panid",
        "rollback-success": "Naibabawi dagiti panagurnos babaen ni $1;\nnaisubli manen ti naudi a rebision babaen ni $2.",
        "sessionfailure-title": "Napaay ti sesion",
        "sessionfailure": "Adda parikut ti sesion ti panagserrekmo;\ndaytoy nga aramid ket naibabawi a kas pagpawilan ti panaghijack ti sesion.\nAgsublika iti naggapuam a panid, ikargam manen ti panid ken padasen manen.",
+       "changecontentmodel": "Baliwan ti modelo ti linaon ti panid",
+       "changecontentmodel-legend": "Baliwan ti modelo ti linaon ti panid",
+       "changecontentmodel-title-label": "Titulo ti panid",
+       "changecontentmodel-model-label": "Baro a modelo ti linaon",
+       "changecontentmodel-reason-label": "Rason:",
+       "changecontentmodel-success-title": "Nabaliwan ti modelo ti linaon",
+       "changecontentmodel-success-text": "Nabaliwanen ti kita ti linaon ti [[:$1]].",
+       "changecontentmodel-cannot-convert": "Ti linaon iti [[:$1]] ket saan a mabaliwan iti kita ti $2.",
+       "changecontentmodel-nodirectediting": "Ti modelo ti linaon ti $1 ket saan a mangsuporta ti dagus a panagurnos",
+       "log-name-contentmodel": "Listaan ti panagbaliw ti modelo ti linaon",
+       "log-description-contentmodel": "Dagiti pasamak a mainaig kadagiti modelo ti linaon ti panid",
+       "logentry-contentmodel-change": "{{GENDER:$2|Binaliwan}} ni $1 ti modelo ti panid ti $3 manipud ti \"$4\" iti \"$5\"",
+       "logentry-contentmodel-change-revertlink": "isubli",
+       "logentry-contentmodel-change-revert": "isubli",
        "protectlogpage": "Listaan ti panagsalaknib",
        "protectlogtext": "Dita baba ket adda listaan dagiti sinukatan a salaknib ti panid.\nKitaen ti [[Special:ProtectedPages|listaan kadagiti nasalakniban a panid]] ti listaan kadagiti agdama a panagpataray a panagsalaknib ti panid.",
        "protectedarticle": "nasalakniban ti \"[[$1]]\"",
        "protect-locked-blocked": "Saanmo a mabalin a sukatan dagiti kita ti salaknib no naserraanka.\nAdda ditoy kadagiti agdama a kasasaad ti panid ti <strong>$1</strong>:",
        "protect-locked-dblock": "Ti kita ti salaknib ket saan a masukatan gapu ti agdama a kandado ti database.\nAdda ditoy kadagiti agdama a kasasaad ti panid ti <strong>$1</strong>:",
        "protect-locked-access": "Ti pakabilangam ket awan pammalubosna a mangsukat kadagiti agpang ti salaknib ti panid.\nDagitoy ti agdama a pannakaisaad para iti panid ti <strong>$1</strong>:",
-       "protect-cascadeon": "Daytoy a panid ket agdama a nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} iti nalukatan a salaknib ti sariap.\nDagiti panagbaliw iti agpang ti salaknib iti daytoy a panid ket saan a mabanagan ti salaknib ti sariap.",
+       "protect-cascadeon": "Daytoy a panid ket agdama a nasalakniban gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} nga addaan iti nalukatan a salaknib ti sariap.\nDagiti panagbaliw iti agpang ti salaknib iti daytoy a panid ket saan a mabanagan ti salaknib ti sariap.",
        "protect-default": "Palubosan amin nga agar-aramat",
        "protect-fallback": "Palubosan laeng dagiti agar-aramat nga adda iti \"$1\" a pammalubos",
        "protect-level-autoconfirmed": "Palubosan laeng dagiti automatiko a napasingkedan nga agar-aramat",
        "undeletepagetext": "Ti sumaganad a {{PLURAL:$1|panid ket naikkaten ngem|$1 pampanid ket naikkaten ngem}} adda pay naarkibo ken mabalin pay a maipasubli .\nTi arkibo ket mabalin a sagpaminsan a madalusan.",
        "undelete-fieldset-title": "Ipasubli dagiti rebision",
        "undeleteextrahelp": "Tapno maipasubli ti intero a pakasaritaan ti panid, ibatim a saan nga nakur-itan dagita kahon ken pinduten ti <strong><em>{{int:undeletebtn}}</em></strong>.\nTi agaramid ti napilian a panagisubli, ikur-it dagita napilim kadagiti kahon ti kayatmo nga ipasubli, ken pinduten ti <strong><em>{{int:undeletebtn}}</em></strong>.",
-       "undeleterevisions": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naarkibo",
+       "undeleterevisions": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naikkat",
        "undeletehistory": "No ipasublim daytoy a panid, amin dagiti rebision ket maipasubli iti pakasaritaan.\nKet no adda baro a panid a kanagnaganna a naaramid ti napalabas a panagikkat, dagiti naipasubli a rebision ket agparang iti napalabas a pakasaritaan.",
        "undeleterevdel": "Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti rebision ti papeles ket maikkatan ti bassit.\nIti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a rebision.",
        "undeletehistorynoadmin": "Daytoy a panid ket naikkaten.\nTi rason ti panagikkat ket naipakita iti pakabuklan dita baba, ken dagita a salaysay ti agar-aramat a nagurnos iti daytoy a panid sakbay a naikkat.\nTi husto a testo dagitoy a naikat a rebision ket magun-od laeng dagiti administrador.",
        "tooltip-pt-logout": "Rummuar",
        "tooltip-pt-createaccount": "Maaw-awis nga agpartuatka iti pakabilangan ken sumrek; nupay kasta, daytoy ket saan a nasken",
        "tooltip-ca-talk": "Pagtungtungan a maipapan ti linaon ti panid",
-       "tooltip-ca-edit": "Mabalinmo nga urnosen daytoy a panid. Pangngaasi nga aramatem ti buton ti panagipadas sakbay nga agidulin",
-       "tooltip-ca-addsection": "Mangirugi ti baro a paset",
+       "tooltip-ca-edit": "Urnosen daytoy a panid",
+       "tooltip-ca-addsection": "Mangirugi iti baro a seksion",
        "tooltip-ca-viewsource": "Nasalakniban daytoy a panid.\nMabalinmo a kitaen ti taudanna.",
        "tooltip-ca-history": "Dagiti napalabas a rebision iti daytoy a panid.",
        "tooltip-ca-protect": "Salakniban daytoy a panid",
        "tooltip-p-logo": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage-description": "Sarungkaran ti umuna a panid",
-       "tooltip-n-portal": "Maipapan ti gandat, ti aniaman a maaramidmo, no sadino ti pagbirukam kadagiti banbanag",
+       "tooltip-n-portal": "Maipapan iti proyekto, no ania ti maaramidmo, ti pagbirukan kadagiti banag",
        "tooltip-n-currentevents": "Agsapul ti pakaammo kadagiti agdama a paspasamak",
        "tooltip-n-recentchanges": "Listaan dagiti naudi a sinukatan iti wiki",
        "tooltip-n-randompage": "Agikarga iti pugto a panid",
        "tooltip-t-recentchangeslinked": "Kaudian a balbaliw kadagiti panid a naisilpo manipud ti daytoy a panid",
        "tooltip-feed-rss": "RSS a pakan para iti daytoy a panid",
        "tooltip-feed-atom": "Atom a pakan para iti daytoy a panid",
-       "tooltip-t-contributions": "Ti lstaan dagiti kontribusion iti daytoy nga agar-aramat",
+       "tooltip-t-contributions": "Ti listaan dagiti kontribusion iti daytoy nga agar-aramat",
        "tooltip-t-emailuser": "Patulodan ti esurat daytoy nga agar-aramat",
        "tooltip-t-info": "Adu pay a pakaammo a maipanggep iti daytoy a panid",
        "tooltip-t-upload": "Agikarga kadagiti papeles",
        "tooltip-ca-nstab-user": "Kitaen ti panid ti agar-aramat",
        "tooltip-ca-nstab-media": "Kitaen ti panid ti midia",
        "tooltip-ca-nstab-special": "Daytoy ket espesial a panid, saanmo a mismo a maurnos daytoy a panid",
-       "tooltip-ca-nstab-project": "Kitaen ti panid ti gandat",
+       "tooltip-ca-nstab-project": "Kitaen ti panid ti proyekto",
        "tooltip-ca-nstab-image": "Kitaen ti panid ti papeles",
        "tooltip-ca-nstab-mediawiki": "Kitaen ti mensahe ti sistema",
        "tooltip-ca-nstab-template": "Kitaen ti plantilia",
        "spam_reverting": "Ipasubli ti naudi a rebision nga awan dagiti linaon a silpo iti $1",
        "spam_blanking": "Amin dagiti rebision ket aglaon kadagiti silpo iti $1, iblanko",
        "spam_deleting": "Amin dagiti rebision ket aglaon kadagiti silpo iti $1, ik-ikkaten",
-       "simpleantispam-label": "Pammasingked ti anti-spam.\n<strong>SAAN</strong> a kargaan daytoy!",
+       "simpleantispam-label": "Pammasingked ti anti-spam.\n<strong>Saan</strong> a kargaan daytoy!",
        "pageinfo-title": "Pakaammo para iti \"$1\"",
        "pageinfo-not-current": "Pasensia, saan a mabalin ti mangited ti pakaammo para kadagiti daan a rebision.",
        "pageinfo-header-basic": "Kangrunaan a pakaammo",
        "pageinfo-robot-index": "Maipalubos",
        "pageinfo-robot-noindex": "Saan a maipalubos",
        "pageinfo-watchers": "Bilang dagiti agbuybuya ti panid",
+       "pageinfo-visiting-watchers": "Bilang dagiti agbuybuya ti panid a nangsarungkar kadagiti kaudian a balbaliw",
        "pageinfo-few-watchers": "Basbassit ngem $1 {{PLURAL:$1|ti agbuybuya|dagiti agbuybuya}}",
+       "pageinfo-few-visiting-watchers": "Mabalin nga adda wenno awan ti agbuybuya nga agar-aramat a nangsarungkar kadagiti kaudian a balbaliw",
        "pageinfo-redirects-name": "Bilang dagiti baw-ing iti daytoy a panid",
        "pageinfo-subpages-name": "Bilang dagiti subpanid iti daytoy a panid",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|baw-ing|bawbaw-ing}}; $3 {{PLURAL:$3|saan a baw-ing|saan a bawbaw-ing}})",
        "pageinfo-contentpage-yes": "Wen",
        "pageinfo-protect-cascading": "Dagiti panagsalaknib ket agsariap manipud ditoy",
        "pageinfo-protect-cascading-yes": "Wen",
-       "pageinfo-protect-cascading-from": "Dagiti panagsalaknib ket agsariap manipud ti",
+       "pageinfo-protect-cascading-from": "Dagiti panagsalaknib ket agsariap manipud iti",
        "pageinfo-category-info": "Pakaammo ti kategoria",
        "pageinfo-category-total": "Dagup a bilang ti kamkameng",
        "pageinfo-category-pages": "Bilang dagiti panid",
        "exif-ycbcrpositioning-1": "Ipatingnga",
        "exif-ycbcrpositioning-2": "Kaduana nagkita",
        "exif-dc-contributor": "Dagiti nakaaramid",
+       "exif-dc-coverage": "Maipapan iti espasio wenno temporal a sakop ti midia",
        "exif-dc-date": "Petsa (dagiti petsa)",
        "exif-dc-publisher": "Nangipablaak",
        "exif-dc-relation": "Mainaig a midia",
        "tag-filter-submit": "Sagat",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Et-etiketa}}]]: $2)",
        "tags-title": "Dagiti etiketa",
-       "tags-intro": "Daytoy a panid ket ilistana dagiti etiketa a mablin nga usaren ti sopwer a mangmarka iti urnos, ken dagiti kaibuksilanda.",
+       "tags-intro": "Daytoy a panid ket ilistana dagiti etiketa a mablin nga usaren ti sopwer a mangmarka iti inurnos, ken dagiti kaibuksilanda.",
        "tags-tag": "Nagan ti etiketa",
        "tags-display-header": "Tabas dagiti listaan ti panagsukat",
        "tags-description-header": "Napno a deskripsion ti kaibuksilan.",
        "tags-delete": "ikkaten",
        "tags-hitcount": "$1 {{PLURAL:$1|a sinukatan|a sinuksukatan}}",
        "tags-create-heading": "Agpartuat iti baro nga etiketa",
+       "tags-create-explanation": "Babaen ti kasisigud, dagiti kabarbaro a napartuat nga etiketa ket mabalinto a magun-od a mausar babaen dagiti agar-aramat ken dagiti bot.",
        "tags-create-tag-name": "Nagan ti etiketa:",
        "tags-create-reason": "Rason:",
        "tags-create-submit": "Agpartuat",
        "tags-create-no-name": "Nasken nga inaganam ti nagan ti etiketa.",
+       "tags-create-invalid-title-chars": "Dagiti nagan ti etiketa ket nasken a saan nga aglaon kadagiti karakter a saan a mabalin a mausar kadagiti titulo ti panid.",
        "tags-create-already-exists": "Addan ti etiketa ti \"$1\".",
+       "tags-create-warnings-above": "Nakasarak {{PLURAL:$2|iti sumaganad a ballaag|kadagiti sumaganad a ballaag}} idi nagpadas a nagpartuat iti etiketa ti \"$1\":",
        "tags-create-warnings-below": "Kayatmo kadi ti agtuloy nga agpartuat iti etiketa?",
        "tags-delete-title": "Ikkaten ti etiketa",
        "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud ti database.",
        "tags-deactivate-reason": "Rason:",
        "tags-apply-not-allowed-one": "Saan a maipalubos a manual a maipakat ti tiketa ti \"$1\".",
        "tags-apply-not-allowed-multi": "Saan a maipalubos a manual a maipakat {{PLURAL:$2|ti sumaganad nga etiketa|dagiti sumagand nga etiketa}}: $1",
+       "tags-update-add-not-allowed-one": "Saan a mabalin a manual a mainayon ti etiketa ti \"$1\".",
+       "tags-update-add-not-allowed-multi": "Saan a mabalin a manual a mainayon {{PLURAL:$2|ti sumaganad nga etiketa|dagiti sumaganad nga etiketa}}: $1",
        "tags-update-remove-not-allowed-one": "Ti etiketa ti \"$1\" ket saan a maipalubos a maikkat.",
        "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Ti sumaganad nga etiketa|Dagiti sumaganad nga etiketa}} ket saan a maipalubos a manual a maikkat: $1",
        "tags-edit-title": "Urnosen dagiti etiketa",
        "htmlform-cloner-create": "Agnayon pay ti adu",
        "htmlform-cloner-delete": "Ikkaten",
        "htmlform-cloner-required": "Saan a basbassit ngem maysa a pateg ti masapul.",
-       "sqlite-has-fts": "Ti $1 nga addaan iti suporta ti panagbiruk ti napno a testo",
-       "sqlite-no-fts": "Ti $1 nga awan iti suporta ti panagbiruk ti napno a testo",
+       "htmlform-title-badnamespace": "Ti [[:$1]] ket awan iti nagan ti espasio ti \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "Saan a mabalin a mapartuat a titulo ti panid ti \"$1\"",
+       "htmlform-title-not-exists": "Awan ti [[:$1]].",
+       "htmlform-user-not-exists": "Awan ti <strong>$1</strong>.",
+       "htmlform-user-not-valid": "Saan nga umiso a nagan ti agar-aramat ti <strong>$1</strong>.",
+       "sqlite-has-fts": "Ti $1 nga addaan iti suporta ti panagbiruk ti napno a teksto",
+       "sqlite-no-fts": "Ti $1 nga awan iti suporta ti panagbiruk ti napno a teksto",
        "logentry-delete-delete": "{{GENDER:$2|Inikkat}} ni $1 ti panid ti $3",
        "logentry-delete-restore": "Ni $1 ket {{GENDER:$2|insublina}} ti panid ti $3",
        "logentry-delete-event": "Ni $1 ket {{GENDER:$2|binaliwanna}} ti panagkita {{PLURAL:$5|iti listaan ti pasamak |dagiti $5 a listaan ti pasamak }} iti $3: $4",
        "logentry-upload-overwrite": "Ni $1 ket {{GENDER:$2|inkargana}} ti baro a bersion ti $3",
        "logentry-upload-revert": "Ni $1 ket {{GENDER:$2|inkargana}} ti $3",
        "log-name-managetags": "Listaan ti panagtaripato ti etiketa",
+       "logentry-managetags-create": "{{GENDER:$2|Nagpartuat}} ni $1 ti etiketa ti \"$4\"",
        "log-name-tag": "Listaan ti etiketa",
        "rightsnone": "(awan)",
        "revdelete-summary": "Pakabuklan ti inurnos",
        "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
        "feedback-error2": "Biddut: Napaay ti panagurnos",
        "feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
+       "feedback-error4": "Biddut:Saan a naipablak iti naited a titulo ti feedback",
        "feedback-message": "Mensahe:",
        "feedback-subject": "Suheto:",
        "feedback-submit": "Ited",
        "feedback-thanks": "Agyaman! Ti feedbackmo ket naipablaak iti panid \"[$2 $1]\".",
+       "feedback-thanks-title": "Agyamanak!",
+       "feedback-useragent": "Ahente ti agar-aramat:",
        "searchsuggest-search": "Biruken",
        "searchsuggest-containing": "naglaon ti...",
        "api-error-badaccess-groups": "Saanka mapalubosan nga agikarga kadagiti papeles iti daytoy a wiki.",
        "api-error-mustbeposted": "Akin-uneg a biddut: Ti kiddaw ket masapul ti HTTP POST.",
        "api-error-noimageinfo": "Balligi ti panagikarga, ngem ti server ket saan a nagited kadakami ti aniaman a pakaammo a maipanggep iti daytoy a papeles.",
        "api-error-nomodule": "Akin-uneg a biddut: Awan ti naisad a modulo ti panagikarga.",
-       "api-error-ok-but-empty": "Akin-uneg a biddut: Awan ti sungbat manipud ti server.",
+       "api-error-ok-but-empty": "Akin-uneg a biddut: Awan ti sungbat manipud iti server.",
        "api-error-overwrite": "Saan a maipalubos a suratan manen iti papeles nga addan.",
        "api-error-stashfailed": "Akin-uneg a biddut: Napaay ti server nga agidulin ti temporario a papeles.",
        "api-error-publishfailed": "Akin-uneg a biddut: Napaay ti server nga agipablaak ti temporario a papeles.",
        "limitreport-expansiondepth": "Kangatuan a kauneg ti panagpadakkel",
        "limitreport-expensivefunctioncount": "Bilang ti nangina nga annong ti parser",
        "expandtemplates": "Palawaen dagiti plantilia",
-       "expand_templates_intro": "Daytoy nga espesial a panid ket agala ti testo ken palawaenna amin dagiti plantilia iti unegna a minaig iti daytoy.\nPalawaenna pay dagiti nasuportaran a parser a pamay-an a kas ti\n<code><nowiki>{{</nowiki>#language:…}}</code> ken dagiti nadumaduma a kita a kas ti\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. \nIti kinapudno, palawaenna amin dagiti addaan iti doble a pangrikep.",
-       "expand_templates_title": "Titulo ti kontesto, para iti {{FULLPAGENAME}} kdpy.:",
-       "expand_templates_input": "Maikabil a testo:",
+       "expand_templates_intro": "Daytoy nga espesial a panid ket agala ti teksto ken palawaenna amin dagiti plantilia iti unegna a mainaig iti daytoy.\nPalawaenna pay dagiti nasuportaran a parser a pamay-an a kas ti\n<code><nowiki>{{</nowiki>#language:…}}</code> ken dagiti nadumaduma a kita a kas ti\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>. \nIti kinapudno, palawaenna amin dagiti addaan iti doble a pangrikep.",
+       "expand_templates_title": "Titulo ti konteksto, para iti {{FULLPAGENAME}} kdpy.:",
+       "expand_templates_input": "Maikabil a teksto:",
        "expand_templates_output": "Nagbanagan",
        "expand_templates_xml_output": "Maiparuar a XML",
        "expand_templates_html_output": "Naata a maiparuar a HTML",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Dagiti video",
        "mediastatistics-header-office": "Opisina",
+       "mediastatistics-header-text": "Tekstual",
        "json-error-unknown": "Adda idi parikut ti JSON. Biddut: $1",
        "json-error-state-mismatch": "Imbalido wenno nadadael a JSON",
        "json-error-syntax": "Biddut ti sintaksis",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "senial a panagkissay",
+       "mw-widgets-dateinput-no-date": "Awan ti napili a petsa",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
        "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1"
 }
index b9dbc03..5ec43fe 100644 (file)
        "jumptonavigation": "flakk",
        "jumptosearch": "leita",
        "view-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir notendur eru að reyna að skoða þessa síðu. \nVinsamlegast bíddu í smástund áður en þú reynir að sækja þessa síðu aftur.\n\n$1",
+       "generic-pool-error": "Því miður eru vefþjónarnir yfirhlaðnir í augnablikinu.\nOf margir eru að reyna að skoða þessa síðu.\nVinsamlegast bíddu áður en þú reynir að sækja þessa síðu aftur.",
        "pool-timeout": "Of löng bið efttir lás",
        "pool-queuefull": "Vefþjónninn er yfirhlaðinn í augnablikinu.",
        "pool-errorunknown": "Óþekkt villa",
        "actionthrottledtext": "Til þess að verjast ruslpósti, er ekki hægt að framkvæma þessa aðgerð of oft, og þú hefur farið fram yfir þau takmörk. Gjörðu svo vel og reyndu aftur eftir nokkrar mínútur.",
        "protectedpagetext": "Þessari síðu hefur verið læst til að koma í veg fyrir breytingar eða aðrar aðgerðir.",
        "viewsourcetext": "Þú getur skoðað og afritað kóða þessarar síðu:",
-       "viewyourtext": "Þú getur skoðað og afritað kóða '''breytinganna þinna''' yfir á þessa síðu:",
+       "viewyourtext": "Þú getur skoðað og afritað kóða <strong>breytinganna þinna</strong> yfir á þessa síðu.",
        "protectedinterface": "Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.\nTil þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/ translatewiki.net], staðfæringaverkefni MediaWiki",
        "editinginterface": "<strong>Aðvörun:</strong> Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.\nBreytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.",
-       "cascadeprotected": "Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er innifalin í eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:\n$2",
+       "cascadeprotected": "Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er ítengd eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:\n$2",
        "namespaceprotected": "Þú hefur ekki leyfi til að breyta síðum í '''$1''' nafnrýminu.",
        "customcssprotected": "Þú hefur ekki leyfi að breyta þessari CSS-umbrotsíðu, því hún hefur notendastillingar annars notanda.",
        "customjsprotected": "Þú hefur ekki leyfi til að breyta þessari JavaScript síðu, því hún hefur notendastillingar annars notanda.",
        "readonlywarning": "'''AÐVÖRUN: Gagnagrunninum hefur verið læst til að unnt sé að framkvæma viðhaldsaðgerðir, svo þú getur ekki vistað breytingar þínar núna.'''\nÞú ættir að klippa og líma textann yfir í textaskjal til þess að geyma hann til seinni tíma.\n\nStjórnandinn sem læsti honum gaf þessa skýringu: $1",
        "protectedpagewarning": "'''Viðvörun: Þessari síðu hefur verið læst svo aðeins notendur með möppudýraréttindi geti breytt henni.'''\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
        "semiprotectedpagewarning": "'''Athugið''': Þessari síðu hefur verið læst þannig að aðeins innskráðir notendur geti breytt henni.\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
-       "cascadeprotectedwarning": "'''Viðvörun:''' Þessari síðu hefur verið læst svo aðeins möppudýr geta breytt henni, því hún er innifalin í keðjuvörn eftirfarandi {{PLURAL:$1|síðu|síðna}}:",
+       "cascadeprotectedwarning": "<strong>Viðvörun:</strong> Þessari síðu hefur verið læst svo aðeins möppudýr geta breytt henni, því hún er ítengd keðjuvörn eftirfarandi {{PLURAL:$1|síðu|síðna}}:",
        "titleprotectedwarning": "''VIÐVÖRUN: Þessari síðu hefur verið læst svo aðeins [[Special:ListGroupRights|sérstakir notendur]] geta breytt henni.'''\nVerndunarskrá síðunnar er gefin fyrir neðan til tilvísunar.",
        "templatesused": "Snið {{PLURAL:$1|notað|notuð}} á þessari síðu:",
        "templatesusedpreview": "Snið {{PLURAL:$1|notað|notuð}} í forskoðuninni:",
        "edit-gone-missing": "Gat ekki uppfært síðu.\nSvo virðist sem henni hafi verið eytt.",
        "edit-conflict": "Breytingaárekstur.",
        "edit-no-change": "Breyting þín var hunsuð, því engin breyting var á textanum.",
+       "postedit-confirmation-created": "Síðan hefur verið búin til.",
        "postedit-confirmation-saved": "Breyting þín hefur verið vistuð.",
        "edit-already-exists": "Gat ekki skapað nýja síðu.\nHún er nú þegar til.",
        "defaultmessagetext": "Sjálfgefinn skilaboða texti",
        "history-feed-empty": "Síðan sem þú leitaðir að er ekki til.\nMöglegt er að henni hafi verið eytt út af þessari wiki síðu, eða endurnefnd.\nPrófaðu [[Special:Search|að leita á þessari wiki síðu]] að svipuðum síðum.",
        "rev-deleted-comment": "(breytingarágrip fjarlægt)",
        "rev-deleted-user": "(notandanafn fjarlægt)",
-       "rev-deleted-event": "(skráarbreyting fjarlægð)",
+       "rev-deleted-event": "(smáatriði atriðs fjarlægt)",
        "rev-deleted-user-contribs": "[notandanafn eða vistfang falið - breyting falin í framlögum]",
        "rev-deleted-text-permission": "Þessari útgáfu síðunnar hefur verið '''eytt'''.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingaskrá].",
        "rev-deleted-text-unhide": "Þessari útgáfu síðunnar hefur verið '''eytt'''.\nFrekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingaskrá].\nÞú getur enn skoðað [$1 þessa útgáfu] ef þú vilt halda áfram.",
        "badsig": "Ógild hrá undirskrift. Athugaðu HTML-kóða.",
        "badsiglength": "Undirskriftin er of löng.\nHún þarf að vera færri en $1 {{PLURAL:$1|stafur|stafir}}.",
        "yourgender": "Hvernig vilt þú helst lýsa þér?",
-       "gender-unknown": "Ã\89g vil heldur ekki gefa upp",
+       "gender-unknown": "Ã\9eegar aðrir minnast Ã¡ Ã¾ig mun hugbúnaðurinn nota kynlaus orð Ã¾ar sem Ã¾að er mögulegt",
        "gender-male": "Hann breytir wikisíðum",
        "gender-female": "Hún breytir wikisíðum",
        "prefs-help-gender": "Þessi stilling er valfrjáls. Notað til að aðgreina kynin í meldingum hugbúnaðarins. Þessar upplýsingar verða aðgengilegar öllum.",
        "userrights-lookup-user": "Yfirlit notandahópa",
        "userrights-user-editname": "Skráðu notandanafn:",
        "editusergroup": "Breyta notandahópum",
-       "editinguser": "Breyti réttindum '''[[User:$1|$1]]''' $2",
+       "editinguser": "Breyti réttindum {{GENDER:$1|notandans}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Breyta notandahópum",
        "saveusergroups": "Vista notandahóp",
        "userrights-groupsmember": "Meðlimur:",
        "newpageletter": "N",
        "boteditletter": "v",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|notandi skoðandi|$1 notendur skoðandi}}]",
-       "rc_categories": "Takmark á flokkum (aðskilja með \"|\")",
-       "rc_categories_any": "Alla",
+       "rc_categories": "Takmarka við flokka (aðskilja með \"|\"):",
+       "rc_categories_any": "Allt valið",
        "rc-change-size-new": "$1 {{PLURAL:$1|bæt|bæti}} eftir breytingu",
        "newsectionsummary": "Nýr hluti: /* $1 */",
        "rc-enhanced-expand": "Sýna upplýsingar",
        "linksearch-pat": "Leitarmynstur:",
        "linksearch-ns": "Nafnrými:",
        "linksearch-ok": "Leita",
-       "linksearch-text": "Algildisleit eins og \"*.wikipedia.org\" er leyfð.<br />\nLeitin þarf að minnsta kosti að innihalda rótarlén, eins og \"*.org\"\n{{PLURAL:$2|Studd samskiptaregla|Studdar samskiptareglur}}: <code>$1</code> (http:// sjálfgefið ef engin regla er valin).",
+       "linksearch-text": "Algildisleit eins og \"*.wikipedia.org\" er leyfð.<br />\nLeitin þarf að minnsta kosti að innihalda rótarlén, eins og \"*.org\"\n{{PLURAL:$2|Studd samskiptaregla|Studdar samskiptareglur}}: $1 (http:// sjálfgefið ef engin regla er valin).",
        "linksearch-line": "Tengt er í $1 á síðunni $2",
        "linksearch-error": "Algildistafir mega engöngu birtast í upphafi vefslóðarinnar.",
        "listusersfrom": "Sýna notendur sem byrja á:",
        "emailuser": "Senda þessum notanda tölvupóst",
        "emailuser-title-target": "Sendu þessum {{GENDER:$1|notanda}} tölvupóst",
        "emailuser-title-notarget": "Senda tölvupóst",
-       "emailpage": "Senda tölvupóst",
        "emailpagetext": "Hafi notandinn tilgreint netfang í stillingunum sínum er hægt að senda póst til {{GENDER:$1|hans|hennar|hans}} hér.\nPóstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]] birtist í \"Frá:\" hluta tölvupóstsins, svo að viðtakandi hans geti svarað beint til þín.",
        "defemailsubject": "{{SITENAME}} skilaboð frá notandanum \"$1\"",
        "usermaildisabled": "Netfang notenda er óvirkt",
        "emailccsubject": "Afrit af skilaboðinu þínu til $1: $2",
        "emailsent": "Sending tókst",
        "emailsenttext": "Skilaboðin þín hafa verið send.",
-       "emailuserfooter": "Þessi tölvupóstur var sendur af $1 til $2 með möguleikanum \"Senda notanda tölvupóst\" á {{SITENAME}}.",
+       "emailuserfooter": "Þessi tölvupóstur var sendur af $1 til $2 með möguleikanum \"{{int:emailuser}}\" á {{SITENAME}}.",
        "usermessage-summary": "Skil eftir meldingu.",
        "usermessage-editor": "Meldinga sendiboði",
        "watchlist": "Vaktlistinn",
        "watchlistanontext": "Vinsamlegast skráðu þig til að skoða eða breyta hlutum á vaktlistanum þínum.",
        "watchnologin": "Óinnskráð(ur)",
        "addwatch": "Bæta á vaktlistann",
-       "addedwatchtext": "Síðunni „[[:$1]]“ hefur verið bætt á [[Special:Watchlist|vaktlistann]] þinn.\nFrekari breytingar á henni eða spjallsíðu hennar munu verða sýndar þar.",
+       "addedwatchtext": "Síðunni „[[:$1]]“ og spjallsíðu hennar hafa verið bætt á [[Special:Watchlist|vaktlistann]] þinn.",
        "removewatch": "Fjarlægja af vaktlistanum",
-       "removedwatchtext": "Síðan „[[:$1]]“ hefur verið fjarlægð af [[Special:Watchlist|vaktlistanum þínum]].",
+       "removedwatchtext": "Síðan „[[:$1]]“ og spjallsíða hennar hafa verið fjarlægð af [[Special:Watchlist|vaktlistanum]] þínum.",
        "watch": "Vakta",
        "watchthispage": "Vakta þessa síðu",
        "unwatch": "Afvakta",
        "watchlist-details": "{{PLURAL:$1|$1 síða|$1 síður}} á vaktlistanum þínum, fyrir utan spjallsíður.",
        "wlheader-enotif": "Tilkynning með tölvupósti er virk.",
        "wlheader-showupdated": "Síðum sem hefur verið breytt síðan þú skoðaðir þær síðast eru '''feitletraðar'''.",
-       "wlnote": "Hér fyrir neðan {{PLURAL:$1|er síðasta <strong>$1</strong> breyting|eru síðustu <strong>$1</strong> breytingar}} {{PLURAL:$2|síðustu <strong>$2</strong> klukkutímann|síðastliðna <strong>$2</strong> klukkutímana}}, frá $3, $4.",
+       "wlnote": "Hér fyrir neðan {{PLURAL:$1|er síðasta <strong>$1</strong> breyting|eru síðustu <strong>$1</strong> breytingar}} {{PLURAL:$2|síðasta <strong>$2</strong> klukkutímann|síðustu <strong>$2</strong> klukkutímana}}, frá $3, $4.",
        "wlshowlast": "Sýna síðustu $1 klukkutíma, $2 daga",
        "watchlist-options": "Vaktlistastillingar",
        "watching": "Vakta...",
        "protect-locked-blocked": "Þú getur ekki breytt verndunarstigi á meðan þú ert bannaður.\nHérna er núverandi verndunarstig fyrir síðuna '''$1''':",
        "protect-locked-dblock": "Á meðan gangnabankinn er læstur er ekki hægt að breyta verndunarstigi.\nHér eru núverandi verndunarstig fyrir síðuna '''$1''':",
        "protect-locked-access": "Þú hefur ekki heimild til þess að vernda eða afvernda síður.\nNúverandi staða síðunnar er '''$1''':",
-       "protect-cascadeon": "Þessi síða er vernduð vegna þess að hún er innifalin í eftirfarandi {{PLURAL:$1|síðu, sem er keðjuvernduð|síðum, sem eru keðjuverndaðar}}.\nBreytingar á verndunarstigi þessarar síðu munu ekki hafa áhrif á keðjuverndunina.",
+       "protect-cascadeon": "Þessi síða er vernduð vegna þess að hún er ítengd eftirfarandi {{PLURAL:$1|síðu, sem er keðjuvernduð|síðum, sem eru keðjuverndaðar}}.\nBreytingar á verndunarstigi þessarar síðu munu ekki hafa áhrif á keðjuverndunina.",
        "protect-default": "Leyfa öllum notendum",
        "protect-fallback": "Leyfa eingöngu notendur með „$1“ réttindi",
        "protect-level-autoconfirmed": "Leyfa aðeins sjálkrafa staðfesta notendur",
        "thumbnail_image-missing": "Skránna vantar: $1",
        "import": "Flytja inn síður",
        "importinterwiki": "Flytja inn frá öðru wiki",
-       "import-interwiki-text": "Veldu Wiki-kerfi og síðutitil til að flytja inn.\nBreytingaupplýsingar s.s. dagsetningar og höfundanöfn eru geymd.\nAllir innflutningar eru skráð í [[Special:Log/import|innflutningsskránna]].",
+       "import-interwiki-text": "Veldu wiki og síðutitil til að flytja inn.\nDagsetningar og notendanöfn breytinganna verður haldið.\nAllir innflutningar frá öðrum wikum eru skráð í [[Special:Log/import|innflutningsskránna]].",
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
        "import-interwiki-templates": "Innifala öll snið með",
        "import-interwiki-submit": "Flytja inn",
        "importcantopen": "Get ekki opnað innflutt skjal",
        "importbadinterwiki": "Villa í tungumálatengli",
        "importsuccess": "Innflutningi lokið!",
-       "importnosources": "Engin uppspretta hefur verið valin og bein upphlöð breytingarskráa eru óvirk.",
+       "importnosources": "Engir wikar sem á að flytja inn frá hava verið valdir og bein upphlöð breytingarskráa eru óvirk.",
        "importnofile": "Engri skrá var hlaðið inn.",
        "importuploaderrorsize": "Upphleðsla skrárinnar mistókst.\nSkráin er stærri en leyfð hámarksstærð.",
        "importuploaderrorpartial": "Upphleðsla skráarinnar mistókst.\nSkráinni var eingöngu hlaðið inn að hluta.",
        "tooltip-pt-mycontris": "Listi yfir framlög þín",
        "tooltip-pt-login": "Þú ert hvattur/hvött til að innskrá þig, það er hinsvegar ekki skylda.",
        "tooltip-pt-logout": "Útskráning",
+       "tooltip-pt-createaccount": "Þú ert hvattur/hvött til að búa til aðgang og skrá þig inn, en það er ekki skylda.",
        "tooltip-ca-talk": "Spallsíða þessarar síðu",
-       "tooltip-ca-edit": "Þú getur breytt síðu þessari, vinsamlegast notaðu „forskoða“ hnappinn áður en þú vistar",
+       "tooltip-ca-edit": "Breyta þessari síðu",
        "tooltip-ca-addsection": "Bæta nýjum hluta við",
        "tooltip-ca-viewsource": "Síða þessi er vernduð. Þú getur þó skoðað frumkóða hennar.",
        "tooltip-ca-history": "Eldri útgáfur af síðunni.",
        "spam_reverting": "Tek aftur síðustu breytingu sem inniheldur ekki tengil á $1",
        "spam_blanking": "Allar útgáfur innihéldu tengla á $1, tæmi síðuna",
        "spam_deleting": "Allar útgáfur innihéldu tengla á $1, eyði síðunni",
-       "simpleantispam-label": "Kæfuvörn.\n<strong>EKKI</strong> fylla þetta út!",
+       "simpleantispam-label": "Kæfuvörn.\n<strong>ekki</strong> fylla þetta út!",
        "pageinfo-title": "Upplýsingar um $1",
        "pageinfo-not-current": "Því miður er ekki hægt að veita þessar upplýsingar um gamlar útgáfur.",
        "pageinfo-header-basic": "Grunnupplýsingar",
        "compare-revision-not-exists": "Umbeðin útgáfa er ekki til.",
        "dberr-problems": "Því miður!Tæknilegir örðugleikar eru á þessari síðu.",
        "dberr-again": "Reyndu að bíða í nokkrar mínútur og endurhladdu síðan síðuna.",
-       "dberr-info": "(Mistókst að hafa samband við gagnaþjón: $1)",
-       "dberr-info-hidden": "(Mistókst að hafa samband við gagnaþjón)",
+       "dberr-info": "(Mistókst að fá aðgang að gagnaþjóni: $1)",
+       "dberr-info-hidden": "(Mistókst að fá aðgang að gagnaþjóni)",
        "dberr-usegoogle": "Þú getur notað Google til að leita á meðan.",
        "dberr-outofdate": "Athugaðu að afrit þeirra gætu verið úreld.",
        "dberr-cachederror": "Þetta er afritað eintak af umbeðinni síðu og gæti verið úreld.",
        "revdelete-restricted": "hömlur settar á stjórnendur",
        "revdelete-unrestricted": "fjarlægja hömlur á stjórnendur",
        "logentry-block-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|afbannaði}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|breytti}} bann stillingum fyrir {{GENDER:$4|$3}}, rennur út $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|færði}} $3 á $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun",
index 3870cd1..5e2bc07 100644 (file)
                        "Purodha",
                        "TecnoMaster",
                        "Alexmar983",
-                       "Federico Mugnaini"
+                       "Federico Mugnaini",
+                       "Fpugliajno",
+                       "Fringio",
+                       "Aquatech",
+                       "Statix64",
+                       "CassiodoroVicinetti",
+                       "Bultro"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "actionthrottled": "Azione ritardata",
        "actionthrottledtext": "Come misura di sicurezza contro lo spam, l'esecuzione di alcune azioni è limitata a un numero massimo di volte in un determinato periodo di tempo, limite che in questo caso è stato superato. Si prega di riprovare tra qualche minuto.",
        "protectedpagetext": "Questa pagina è stata protetta per impedirne la modifica o altre operazioni.",
-       "viewsourcetext": "È possibile visualizzare e copiare il codice sorgente di questa pagina:",
-       "viewyourtext": "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
+       "viewsourcetext": "È possibile visualizzare e copiare il codice sorgente di questa pagina.",
+       "viewyourtext": "È possibile visualizzare e copiare il codice sorgente delle <strong>tue modifiche</strong> a questa pagina.",
        "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
        "editinginterface": "<strong>Attenzione:</strong> il testo di questa pagina fa parte dell'interfaccia utente del software di questo sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.",
        "translateinterface": "Per aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto MediaWiki per la localizzazione.",
-       "cascadeprotected": "Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":\n$2",
+       "cascadeprotected": "Su questa pagina non è possibile effettuare modifiche perché è inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":\n$2",
        "namespaceprotected": "Non si dispone dei permessi necessari per modificare le pagine del namespace '''$1'''.",
        "customcssprotected": "Non si dispone dei permessi necessari alla modifica di questa pagina CSS, in quanto contiene le impostazioni personali di un altro utente.",
        "customjsprotected": "Non si dispone dei permessi necessari alla modifica di questa pagina JavaScript, in quanto contiene le impostazioni personali di un altro utente.",
        "createacct-benefit-body2": "{{PLURAL:$1|pagina|pagine}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributore recente|contributori recenti}}",
        "badretype": "Le password inserite non coincidono tra loro.",
+       "usernameinprogress": "La creazione di account con questo nome utente è già in corso.\nSi prega di attendere.",
        "userexists": "Il nome utente inserito è già utilizzato.\nScegli un nome utente diverso.",
        "loginerror": "Errore durante l'accesso",
        "createacct-error": "Errore durante la creazione dell'utenza",
        "readonlywarning": "<strong>ATTENZIONE</strong>: il database è bloccato per manutenzione, non è momentaneamente possibile salvare le modifiche effettuate.\nPer non perderle, copiale in un file di testo e salvalo in attesa dello sblocco del database.\n\nL'amministratore che impostato il blocco ha fornito questa spiegazione: $1.",
        "protectedpagewarning": "'''Attenzione: questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "semiprotectedpagewarning": "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.\nL'ultimo elemento del registro è riportato di seguito per informazione:",
-       "cascadeprotectedwarning": "'''Attenzione:''' Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla. Ciò avviene perché la pagina è inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":",
+       "cascadeprotectedwarning": "<strong>Attenzione:</strong> Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla poiché è inclusa selezionando la protezione \"ricorsiva\" {{PLURAL:$1|nella pagina|nelle pagine}}:",
        "titleprotectedwarning": "'''Attenzione: questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "templatesused": "{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa pagina:",
        "templatesusedpreview": "{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa anteprima:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oggetto vuoto",
        "content-json-empty-array": "Array vuoto",
-       "duplicate-args-warning": "<strong>Avvertenza:</strong> [[:$1]] è chiamata [[:$2]] con più di un valore per il parametro \"$3\". Solo l'ultimo valore fornito sarà utilizzati.",
+       "duplicate-args-warning": "<strong>Avvertenza:</strong> [[:$1]] chiama [[:$2]] con più di un valore per il parametro \"$3\". Verrà utilizzato solo l'ultimo valore fornito.",
        "duplicate-args-category": "Pagine contenenti chiamate a template con parametri duplicati",
        "duplicate-args-category-desc": "La pagina contiene chiamate a template che utilizzano argomenti duplicati, come ad esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
        "history-feed-description": "Cronologia della pagina su questo sito",
        "history-feed-item-nocomment": "$1 il $2",
        "history-feed-empty": "La pagina richiesta non esiste; potrebbe essere stata cancellata dal sito o rinominata. Verificare con la [[Special:Search|pagina di ricerca]] se vi sono nuove pagine.",
-       "history-edit-tags": "Modifica le etichette delle versioni selezioniate",
+       "history-edit-tags": "Modifica le etichette delle versioni selezionate",
        "rev-deleted-comment": "(Oggetto della modifica rimosso)",
        "rev-deleted-user": "(nome utente rimosso)",
        "rev-deleted-event": "(dettagli del registro rimossi)",
        "search-category": "(categoria $1)",
        "search-file-match": "(corrispondenza nel contenuto del file)",
        "search-suggest": "Forse cercavi: $1",
+       "search-rewritten": "Mostrando i risultati per $1. Cerca invece per $2.",
        "search-interwiki-caption": "Progetti fratelli",
        "search-interwiki-default": "Risultati da $1:",
        "search-interwiki-more": "(altro)",
        "rows": "Righe:",
        "columns": "Colonne:",
        "searchresultshead": "Ricerca",
-       "stub-threshold": "Valore minimo per i <a href=\"#\" class=\"stub\">collegamenti agli stub</a>, in byte:",
+       "stub-threshold": "Soglia per i collegamenti agli abbozzi ($1):",
+       "stub-threshold-sample-link": "esempio",
        "stub-threshold-disabled": "Disattivato",
        "recentchangesdays": "Numero di giorni da mostrare nelle ultime modifiche:",
        "recentchangesdays-max": "(massimo $1 {{PLURAL:$1|giorno|giorni}})",
        "prefs-tabs-navigation-hint": "Suggerimento: è possibile utilizzare i tasti freccia sinistra e destra per spostarsi tra le schede nell'elenco delle schede.",
        "email-address-validity-valid": "L'indirizzo e-mail sembra valido",
        "email-address-validity-invalid": "Inserisci un indirizzo e-mail valido",
-       "userrights": "Gestione dei permessi relativi agli utenti",
+       "userrights": "Gestione dei permessi degli utenti",
        "userrights-lookup-user": "Gestione dei gruppi utente",
        "userrights-user-editname": "Inserire il nome utente:",
        "editusergroup": "Modifica gruppi utente",
        "recentchanges-label-unpatrolled": "Modifica non ancora verificata",
        "recentchanges-label-plusminus": "Variazione della pagina in numero di byte",
        "recentchanges-legend-heading": "'''Legenda:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi [[Special:NewPages|le nuove pagine]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi le [[Special:NewPages|nuove pagine]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[osservata da {{PLURAL:$1|un utente|$1 utenti}}]",
-       "rc_categories": "Limita alle categorie (separate da \"|\")",
-       "rc_categories_any": "Qualsiasi",
+       "rc_categories": "Limita alle categorie (separate da \"|\"):",
+       "rc_categories_any": "Qualsiasi fra quelle indicate",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte}} dopo la modifica",
        "newsectionsummary": "/* $1 */ nuova sezione",
        "rc-enhanced-expand": "Mostra dettagli",
        "uploaddisabledtext": "Il caricamento dei file non è attivo.",
        "php-uploaddisabledtext": "Il caricamento di file tramite PHP è disabilitato. Controlla la configurazione di file_uploads.",
        "uploadscripted": "Questo file contiene codice HTML o di script, che potrebbe essere interpretato erroneamente da un browser web.",
+       "upload-scripted-pi-callback": "Impossibile caricare un file che contiene istruzione di elaborazione in XML-stylesheet.",
        "uploaded-script-svg": "Trovato elemento di script \"$1\" nel file caricato in formato SVG.",
        "uploaded-hostile-svg": "Trovato CSS non sicuro nell'elemento di stile del file in formato SVG caricato.",
        "uploaded-event-handler-on-svg": "Impostazione gestione eventi ed attributi <code>$1=\"$2\"</code> non è consentito in file SGV",
        "uploaded-href-attribute-svg": "Attributi href <code>&lt;$1 $2=\"$3\"&gt;</code> com un bersaglio non locale (e.g. http://, javascript:, etc) non sono permessi file SGV",
        "uploaded-href-unsafe-target-svg": "Trovati href ad un bersaglio non sicuro <code>&lt;$1 $2=\"$3\"&gt;</code> caricato nel file SVG",
+       "uploaded-animate-svg": "Trovato il tag \"animate\" che potrebbe cambiare href, usando l'attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel file SVG caricato.",
+       "uploaded-setting-href-svg": "Utilizzare il tag \"set\" per aggiungere l'attributo \"href\" all'elemento parentale è bloccato.",
        "uploaded-image-filter-svg": "Trovato filtro immagine con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> nel file in formato SVG caricato.",
        "uploadscriptednamespace": "Questo file SVG contiene un namespace '$1' non consentito",
        "uploadinvalidxml": "Il codice XML nel file caricato non può essere elaborato.",
        "upload-too-many-redirects": "L'URL conteneva troppi redirect",
        "upload-http-error": "Si è verificato un errore HTTP: $1",
        "upload-copy-upload-invalid-domain": "Non è consentito il caricamento di copie da questo dominio.",
+       "upload-dialog-title": "Carica file",
+       "upload-dialog-error": "Si è verificato un errore",
+       "upload-dialog-warning": "Si è verificato un avviso",
+       "upload-dialog-button-cancel": "Annulla",
+       "upload-dialog-button-done": "Fatto",
+       "upload-dialog-button-save": "Salva",
+       "upload-dialog-button-upload": "Carica",
+       "upload-dialog-label-select-file": "Seleziona file",
+       "upload-dialog-label-infoform-title": "Dettagli",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrizione",
+       "upload-dialog-label-usage-title": "Utilizzo",
+       "upload-dialog-label-usage-filename": "Nome del file",
        "backend-fail-stream": "Impossibile trasmettere il file $1.",
        "backend-fail-backup": "Impossibile eseguire il backup del file $1 .",
        "backend-fail-notexists": "Il file $1 non esiste.",
        "booksources-text": "Di seguito sono elencati alcuni collegamenti verso siti esterni che vendono libri nuovi e usati, attraverso i quali è possibile ottenere maggiori informazioni sul testo cercato.",
        "booksources-invalid-isbn": "L'ISBN inserito sembra non essere valido; verificare che non siano stati commessi errori nel copiarlo dalla fonte originale.",
        "specialloguserlabel": "Azione effettuata da:",
-       "speciallogtitlelabel": "Azione effettuata su:",
+       "speciallogtitlelabel": "Azione effettuata su (titolo della pagina o {{ns:user}}:Nome utente):",
        "log": "Registri",
        "all-logs-page": "Tutti i registri pubblici",
        "alllogstext": "Presentazione unificata di tutti i registri di {{SITENAME}}.\nÈ possibile restringere i criteri di ricerca selezionando il tipo di registro, l'utente che ha eseguito l'azione, e/o la pagina interessata (entrambi i campi sono sensibili al maiuscolo/minuscolo).",
        "linksearch-pat": "Pattern di ricerca:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Cerca",
-       "linksearch-text": "È possibile fare uso di metacaratteri, ad esempio \"*.wikipedia.org\".\nÈ necessario almeno un dominio di primo livello, ad esempio \"*.org\".<br />\n{{PLURAL:$2|Protocollo supportato|Protocolli supportati}}: <code>$1</code> (predefinito http:// se nessun protocollo è specificato).",
+       "linksearch-text": "È possibile fare uso di metacaratteri, ad esempio \"*.wikipedia.org\".\nÈ necessario almeno un dominio di primo livello, ad esempio \"*.org\".<br />\n{{PLURAL:$2|Protocollo supportato|Protocolli supportati}}: $1 (predefinito http:// se nessun protocollo è specificato).",
        "linksearch-line": "$1 presente nella pagina $2",
        "linksearch-error": "I metacaratteri possono essere usati solo all'inizio dell'indirizzo.",
        "listusersfrom": "Mostra gli utenti a partire da:",
        "emailuser": "Invia una email all'utente",
        "emailuser-title-target": "Invia una email a questo {{GENDER:$1|utente}}",
        "emailuser-title-notarget": "Invia una email a un utente",
-       "emailpage": "Invia una email all'utente",
        "emailpagetext": "Usare il modulo sottostante per inviare un messaggio e-mail all'{{GENDER:$1|utente}} indicato. L'indirizzo specificato nelle [[Special:Preferences|preferenze]] del mittente apparirà nel campo \"Da:\" del messaggio per consentire al destinatario di rispondere direttamente.",
        "defemailsubject": "Messaggio da {{SITENAME}} dall'utente \"$1\"",
        "usermaildisabled": "e-mail utente disabilitata",
        "emailccsubject": "Copia del messaggio inviato a $1: $2",
        "emailsent": "Messaggio inviato",
        "emailsenttext": "Il messaggio e-mail è stato inviato.",
-       "emailuserfooter": "Questa email è stata inviata da $1 a $2 attraverso la funzione \"{{int:emailpage}}\" su {{SITENAME}}.",
+       "emailuserfooter": "Questa email è stata inviata da $1 a $2 attraverso la funzione \"{{int:emailuser}}\" su {{SITENAME}}.",
        "usermessage-summary": "Messaggio di sistema",
        "usermessage-editor": "Messaggero di sistema",
        "usermessage-template": "MediaWiki:MessaggioUtente",
        "watchlistanontext": "Per visualizzare e modificare l'elenco degli osservati speciali è necessario eseguire l'accesso.",
        "watchnologin": "Accesso non effettuato",
        "addwatch": "Aggiungi agli osservati speciali",
-       "addedwatchtext": "La pagina \"[[:$1]]\" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]].\nD'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede.",
+       "addedwatchtext": "\"[[:$1]]\" e la sua pagina di discussione sono state aggiunte alla propria [[Special:Watchlist|lista degli osservati speciali]].",
        "addedwatchtext-short": "La pagina \"$1\" è stata aggiunta alla propria lista degli osservati speciali.",
        "removewatch": "Rimuovi dagli osservati speciali",
-       "removedwatchtext": "La pagina \"[[:$1]]\" è stata rimossa dalla propria [[Special:Watchlist|lista degli osservati speciali]].",
+       "removedwatchtext": "\"[[:$1]]\" e la sua pagina di discussione sono state rimosse dalla propria [[Special:Watchlist|lista degli osservati speciali]].",
        "removedwatchtext-short": "La pagina \"$1\" è stata rimossa dalla propria lista degli osservati speciali.",
        "watch": "Segui",
        "watchthispage": "Segui questa pagina",
        "changecontentmodel-success-title": "Il modello di contenuto è stato modificato",
        "changecontentmodel-success-text": "Il tipo di contenuto di [[:$1]] è stato modificato.",
        "changecontentmodel-cannot-convert": "Il contenuto di [[:$1]] non può essere convertito in tipo $2.",
+       "changecontentmodel-nodirectediting": "Il modello di contenuto $1 non supporta la modifica diretta",
+       "log-name-contentmodel": "Registro delle modifiche del modello contenuti",
        "log-description-contentmodel": "Eventi relativi al modello di contenuto di una pagina",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|ha modificato}} il modello di contenuto della pagina $3 da \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "ripristina",
        "protect-locked-blocked": "Non è possibile modificare i livelli di protezione quando è attivo un blocco. Le impostazioni correnti per la pagina sono '''$1''':",
        "protect-locked-dblock": "Impossibile modificare i livelli di protezione durante un blocco del database.\nLe impostazioni correnti per la pagina sono '''$1''':",
        "protect-locked-access": "Non si dispone dei permessi necessari per modificare i livelli di protezione della pagina.\nLe impostazioni correnti per la pagina sono '''$1''':",
-       "protect-cascadeon": "Al momento questa pagina è bloccata perché viene inclusa {{PLURAL:$1|nella pagina indicata di seguito, per la quale|nelle pagine indicate di seguito, per le quali}} è attiva la protezione ricorsiva.\nLe modifiche al livello di protezione individuale della pagina, non avranno effetto sulle impostazioni derivanti dalla protezione ricorsiva.",
+       "protect-cascadeon": "Al momento questa pagina è bloccata perché inclusa {{PLURAL:$1|nella pagina indicata di seguito, per la quale|nelle pagine indicate di seguito, per le quali}} è attiva la protezione ricorsiva.\nLe modifiche al livello di protezione individuale della pagina, non avranno effetto sulle impostazioni derivanti dalla protezione ricorsiva.",
        "protect-default": "Autorizza tutti gli utenti",
        "protect-fallback": "Consentito solo agli utenti con permesso \"$1\"",
        "protect-level-autoconfirmed": "Consentito solo agli utenti autoconvalidati",
        "undeletepagetext": "{{PLURAL:$1|La pagina indicata di seguito è stata cancellata, ma è ancora in archivio e pertanto può essere recuperata|Le pagine indicate di seguito sono state cancellate, ma sono ancora in archivio e pertanto possono essere recuperate}}. L'archivio può essere svuotato periodicamente.",
        "undelete-fieldset-title": "Ripristina versioni",
        "undeleteextrahelp": "Per recuperare l'intera cronologia della pagina, lasciare tutte le caselle deselezionate e fare clic su '''''{{int:undeletebtn}}'''''.\nPer effettuare un ripristino selettivo, selezionare le caselle corrispondenti alle versioni da ripristinare e fare clic su '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Una versione|$1 versioni}} in archivio",
+       "undeleterevisions": "{{PLURAL:$1|Una versione cancellata|$1 versioni cancellate}}",
        "undeletehistory": "Recuperando questa pagina, tutte le sue versioni saranno ripristinate nella relativa cronologia.\nSe dopo la cancellazione è stata creata una nuova pagina con lo stesso titolo, le versioni recuperate saranno inserite nella cronologia precedente.",
        "undeleterevdel": "Il ripristino non verrà effettuato se determina la cancellazione parziale della versione attuale della pagina o del file interessato. In tal caso, è necessario rimuovere il segno di spunta o l'oscuramento dalle versioni cancellate più recenti.",
        "undeletehistorynoadmin": "Questa pagina è stata cancellata.\nIl motivo della cancellazione è mostrato qui sotto, assieme ai dettagli dell'utente che ha modificato questa pagina prima della cancellazione.\nIl testo contenuto nelle versioni cancellate è disponibile solo agli amministratori.",
        "tooltip-ca-nstab-main": "Vedi la voce",
        "tooltip-ca-nstab-user": "Vedi la pagina utente",
        "tooltip-ca-nstab-media": "Vedi la pagina del file multimediale",
-       "tooltip-ca-nstab-special": "Questa è una pagina speciale, non può essere modificata",
+       "tooltip-ca-nstab-special": "Questa è una pagina speciale e non può essere modificata",
        "tooltip-ca-nstab-project": "Vedi la pagina di servizio",
        "tooltip-ca-nstab-image": "Vedi la pagina del file",
        "tooltip-ca-nstab-mediawiki": "Vedi il messaggio di sistema",
        "spam_reverting": "Ripristinata l'ultima versione priva di collegamenti a $1",
        "spam_blanking": "Pagina svuotata, tutte le versioni contenevano collegamenti a $1",
        "spam_deleting": "Pagina cancellata, tutte le versioni contenevano collegamenti a $1",
-       "simpleantispam-label": "Controllo anti-spam.\n<strong>NON</strong> compilare!",
+       "simpleantispam-label": "Controllo anti-spam.\n<strong>NON</strong> riempirlo!",
        "pageinfo-title": "Informazioni per \"$1\"",
        "pageinfo-not-current": "Spiacente, ma è impossibile fornire quest'informazione per vecchie versioni.",
        "pageinfo-header-basic": "Informazioni di base",
        "pageinfo-robot-index": "Consentito",
        "pageinfo-robot-noindex": "Non consentito",
        "pageinfo-watchers": "Numero di utenti che hanno la pagina nei loro osservati speciali",
+       "pageinfo-visiting-watchers": "Numero degli osservatori della pagina che hanno visitato le modifiche recenti",
        "pageinfo-few-watchers": "Meno di $1 {{PLURAL:$1|osservatore|osservatori}}",
+       "pageinfo-few-visiting-watchers": "Ci potrebbero essere o non essere utenti che hanno visualizzato le modifiche recenti",
        "pageinfo-redirects-name": "Numero di redirect a questa pagina",
        "pageinfo-subpages-name": "Sottopagine di questa pagina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect}}; $3 {{PLURAL:$3|non redirect}})",
        "htmlform-cloner-create": "Aggiungi altro",
        "htmlform-cloner-delete": "Rimuovi",
        "htmlform-cloner-required": "È necessario almeno un valore.",
+       "htmlform-title-badnamespace": "[[:$1]] non si trova nel namespace \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" è il titolo di una pagina non creabile",
+       "htmlform-title-not-exists": "[[:$1]] non esiste.",
+       "htmlform-user-not-exists": "<strong>$1</strong> non esiste.",
+       "htmlform-user-not-valid": "<strong>$1</strong> non è un nome utente valido.",
        "sqlite-has-fts": "$1 con la possibilità di ricerca completa nel testo",
        "sqlite-no-fts": "$1 senza la possibilità di ricerca completa nel testo",
        "logentry-delete-delete": "$1 {{GENDER:$2|ha cancellato}} la pagina $3",
        "logentry-newusers-create2": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1",
        "logentry-newusers-byemail": "L'utenza $3 è stata {{GENDER:$2|creata}} da $1 e la password è stata inviata via email",
        "logentry-newusers-autocreate": "L'utenza $1 è stata {{GENDER:$2|creata}} automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|ha spostato}} le impostazioni di protezione da $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di $3 dal gruppo $4 al gruppo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5",
        "special-characters-title-endash": "lineetta enne",
        "special-characters-title-emdash": "lineetta emme",
        "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-no-date": "Nessuna data selezionata",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "questa pagina non esiste ancora",
        "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1"
 }
index b77811c..33a4652 100644 (file)
                        "朝彦",
                        "Otokoume",
                        "赤城。",
-                       "Sujiniku"
+                       "Sujiniku",
+                       "Azeha"
                ]
        },
        "tog-underline": "リンクの下線:",
-       "tog-hideminor": "最近の更新に細部の編集を表示しない",
-       "tog-hidepatrolled": "最近の更新に巡回済みの編集を表示しない",
-       "tog-newpageshidepatrolled": "新しいページの一覧に巡回済みのページを表示しない",
+       "tog-hideminor": "最近の更新に細部の編集を表示しない",
+       "tog-hidepatrolled": "最近の更新に巡回済みの編集を表示しない",
+       "tog-newpageshidepatrolled": "新しいページの一覧に巡回済みのページを表示しない",
        "tog-extendwatchlist": "ウォッチリストを拡張し、最新のものだけではなくすべての変更を表示",
-       "tog-usenewrc": "最近の更新とウォッチリストで複数の変更をページごとにまとめる",
+       "tog-usenewrc": "最近の更新とウォッチリストで複数の変更をページごとにまとめる",
        "tog-numberheadings": "見出しに番号を自動的に振る",
        "tog-showtoolbar": "編集用のツールバーを表示",
        "tog-editondblclick": "ダブルクリックでページを編集",
        "tog-editsectiononrightclick": "節見出しの右クリックで節を編集できるようにする",
-       "tog-watchcreations": "自分が作成したページやアップロードしたファイルをウォッチリストに追加",
-       "tog-watchdefault": "自分が編集したページやファイルをウォッチリストに追加",
-       "tog-watchmoves": "自分が移動したページやファイルをウォッチリストに追加",
-       "tog-watchdeletion": "自分が削除したページやファイルをウォッチリストに追加",
-       "tog-watchrollback": "ロールバックしたページをウォッチリストに追加",
-       "tog-minordefault": "ç´°é\83¨ã\81®ç·¨é\9b\86ã\81«既定でチェックを入れる",
+       "tog-watchcreations": "è\87ªå\88\86ã\81\8cä½\9cæ\88\90ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchdefault": "è\87ªå\88\86ã\81\8cç·¨é\9b\86ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchmoves": "è\87ªå\88\86ã\81\8c移å\8b\95ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchdeletion": "è\87ªå\88\86ã\81\8cå\89\8aé\99¤ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-watchrollback": "ã\83­ã\83¼ã\83«ã\83\90ã\83\83ã\82¯ã\81\97ã\81\9fã\83\9aã\83¼ã\82¸ã\82\92ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¿½å\8a ",
+       "tog-minordefault": "ç´°é\83¨ã\81®ç·¨é\9b\86ã\81\99ã\81¹ã\81¦ã\81«ã\80\81既定でチェックを入れる",
        "tog-previewontop": "プレビューを編集ボックスの前に配置",
        "tog-previewonfirst": "編集開始時にもプレビューを表示",
-       "tog-enotifwatchlistpages": "ウォッチリストにあるページやファイルが更新されたらメールを受け取る",
-       "tog-enotifusertalkpages": "自分のトークページが更新されたらメールを受け取る",
+       "tog-enotifwatchlistpages": "ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\81\82ã\82\8bã\83\9aã\83¼ã\82¸ã\82\84ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\82\89ã\80\81ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8b",
+       "tog-enotifusertalkpages": "è\87ªå\88\86ã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81\8cæ\9b´æ\96°ã\81\95ã\82\8cã\81\9fã\82\89ã\80\81ã\83¡ã\83¼ã\83«ã\82\92å\8f\97ã\81\91å\8f\96ã\82\8b",
        "tog-enotifminoredits": "ページやファイルへの細部の編集でもメールを受け取る",
        "tog-enotifrevealaddr": "通知メールで自分のメールアドレスを明示",
        "tog-shownumberswatching": "ページをウォッチしている利用者数を表示",
        "tog-oldsig": "既存の署名:",
        "tog-fancysig": "署名をウィキ文として扱う (自動リンクなし)",
        "tog-uselivepreview": "ライブプレビューを使用",
-       "tog-forceeditsummary": "要約欄が空欄の場合に確認をす",
+       "tog-forceeditsummary": "要約欄が空欄の場合に確認をうながす",
        "tog-watchlisthideown": "自分の編集をウォッチリストに表示しない",
        "tog-watchlisthidebots": "ボットによる編集をウォッチリストに表示しない",
        "tog-watchlisthideminor": "細部の編集をウォッチリストに表示しない",
        "underline-always": "常に付ける",
        "underline-never": "常に付けない",
        "underline-default": "外装またはブラウザーの既定値を使用",
-       "editfont-style": "編集エリアのフォント:",
+       "editfont-style": "編集エリアのフォント形式:",
        "editfont-default": "ブラウザーの設定を使用",
        "editfont-monospace": "等幅フォント",
        "editfont-sansserif": "サンセリフ体のフォント",
        "about": "解説",
        "article": "本文",
        "newwindow": "(新しいウィンドウで開きます)",
-       "cancel": "中止",
+       "cancel": "取り消し",
        "moredotdotdot": "続き...",
        "morenotlisted": "この一覧は完全ではありません。",
        "mypage": "ページ",
        "lastmodifiedat": "このページの最終更新日時は $1 $2 です。",
        "viewcount": "このページは {{PLURAL:$1|$1 回}}アクセスされました。",
        "protectedpage": "保護されたページ",
-       "jumpto": "移動:",
+       "jumpto": "移動:",
        "jumptonavigation": "案内",
        "jumptosearch": "検索",
        "view-pool-error": "申し訳ありませんが、現在サーバーに過大な負荷がかかっています。\nこのページを閲覧しようとする利用者が多すぎます。\nしばらく時間を置いてから、もう一度このページにアクセスしてみてください。\n\n$1",
        "nstab-image": "ファイル",
        "nstab-mediawiki": "メッセージ",
        "nstab-template": "テンプレート",
-       "nstab-help": "ヘルプ",
+       "nstab-help": "ヘルプページ",
        "nstab-category": "カテゴリ",
        "nosuchaction": "そのような操作はありません",
        "nosuchactiontext": "この URL で指定された操作は正しくありません。\nURL を間違って入力したか、正しくないリンクをたどった可能性があります。\n{{SITENAME}}が利用するソフトウェアのバグの可能性もあります。",
        "databaseerror-error": "エラー: $1",
        "laggedslavemode": "<strong>警告:</strong> ページに最新の編集が反映されていない可能性があります。",
        "readonly": "データベースがロックされています",
-       "enterlockreason": "ã\83­ã\83\83ã\82¯ã\81®ç\90\86ç\94±ã\81¨ã\83­ã\83\83ã\82¯è§£é\99¤ã\81®äº\88å®\9aã\82\92入力してください",
+       "enterlockreason": "ã\83­ã\83\83ã\82¯ã\81®ç\90\86ç\94±ã\81®å\85¥å\8a\9bã\81¨ã\80\81ã\83­ã\83\83ã\82¯è§£é\99¤ã\81®äº\88å®\9aã\82\92ã\80\81入力してください",
        "readonlytext": "データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。\n\nデータベースをロックした管理者による説明は以下の通りです: $1",
        "missing-article": "指定されたページ「$1」$2 の本文がデータベース内で見つかりませんでした。\n\n通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。\n\nそれ以外の操作でこのメッセージが表示された場合、ソフトウェアのバグである可能性があります。\n[[Special:ListUsers/sysop|管理者]]までその URL を添えてお知らせください。",
        "missingarticle-rev": "(版番号: $1)",
        "directoryreadonlyerror": "ディレクトリー「$1」は読み取り専用です。",
        "directorynotreadableerror": "ディレクトリー「$1」は読み取りできません。",
        "filenotfound": "ファイル「$1」が見つかりませんでした。",
-       "unexpected": "äº\88æ\9c\9fã\81\97ã\81ªã\81\84å\80¤ã\80\8c$1ã\80\8d\80\8c$2ã\80\8dã\81§ã\81\99ã\80\82",
+       "unexpected": "äº\88æ\9c\9fã\81\97ã\81ªã\81\84å\80¤ã\81§ã\81\99ã\80\82\80\8c$1ã\80\8d\80\8c$2ã\80\8d",
        "formerror": "エラー: フォームを送信できませんでした。",
        "badarticleerror": "このページでは要求された操作を行えません。",
        "cannotdelete": "ページまたはファイル「$1」を削除できませんでした。\n他の人が既に削除した可能性があります。",
        "no-null-revision": "ページ「$1」に新しい空編集の版を作成できませんでした。",
        "badtitle": "正しくないページ名",
        "badtitletext": "無効または空のページ名が指定されたか、言語間/ウィキ間リンクの方法に誤りがあります。\nページ名に使用できない文字が含まれている可能性があります。",
-       "title-invalid-empty": "指定されたページ名は空もしくは名前空間しか含んでいません。",
+       "title-invalid-empty": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81¯ç©ºã\81§ã\81\82ã\82\8bã\81\8bã\80\81ã\82\82ã\81\97ã\81\8fã\81¯å\90\8då\89\8d空é\96\93ã\81\97ã\81\8bå\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82",
        "title-invalid-utf8": "指定されたページ名が無効なUTF-8シーケンスを含んでいます。",
-       "title-invalid-interwiki": "指定されたページ名がページ名として使用できないウィキ間リンクを含んでいます。",
+       "title-invalid-interwiki": "æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸å\90\8dã\81\8cã\80\81ã\83\9aã\83¼ã\82¸å\90\8dã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81§ã\81\8dã\81ªã\81\84ã\82¦ã\82£ã\82­é\96\93ã\83ªã\83³ã\82¯ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99ã\80\82",
        "title-invalid-talk-namespace": "指定されたページは存在し得ないトークページです。",
        "title-invalid-characters": "指定されたページ名が無効な文字 \"$1\" を含んでいます。",
+       "title-invalid-relative": "タイトルは相対パスを持っています。相対ページタイトル(./, ../)は無効であり、なぜならば利用者のブラウザでは多くの場合に到達不能だからです。",
        "title-invalid-magic-tilde": "指定されたページ名は無効なチルダ文字列 (<nowiki>~~~</nowiki>) を含んでいます。",
        "title-invalid-too-long": "指定されたページ名が長すぎます。UTF-8エンコードで $1 バイト以下でなければなりません。",
-       "title-invalid-leading-colon": "指定されたページ名の先頭に無効なコロンが含まれています。",
+       "title-invalid-leading-colon": "指定されたページ名の先頭に無効なコロンが含まれています。",
        "perfcached": "以下のデータはキャッシュされており、最新ではない可能性があります。最大 $1 {{PLURAL:$1|件の結果}}がキャッシュされます。",
        "perfcachedts": "以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。",
        "querypage-no-updates": "ページの更新は無効になっています。\n以下のデータの更新は現在行われていません。",
        "actionthrottled": "操作が速度規制されました",
        "actionthrottledtext": "短時間にこの操作を大量に行ったため、スパム対策として設定されている制限を超えました。\n少し時間をおいてからもう一度操作してください。",
        "protectedpagetext": "このページは編集や他の操作ができないように保護されています。",
-       "viewsourcetext": "このページのソースの閲覧やコピーができます:",
-       "viewyourtext": "このページへの<strong>あなたの編集</strong>のソースの閲覧やコピーができます:",
+       "viewsourcetext": "このページのソースの閲覧やコピーができます",
+       "viewyourtext": "このページへの<strong>あなたの編集</strong>のソースの閲覧やコピーができます",
        "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
        "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。",
        "translateinterface": "すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
-       "cascadeprotected": "このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:\n$2",
+       "cascadeprotected": "このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}でトランスクルードのため読み込まれているので、編集できないように保護されています:\n$2",
        "namespaceprotected": "<strong>$1</strong>名前空間にあるページを編集する権限がありません。",
        "customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "customjsprotected": "この JavaScript ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "createacct-yourpasswordagain-ph": "パスワードを再入力",
        "remembermypassword": "このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})",
        "userlogin-remembermypassword": "ログイン状態を保持",
-       "userlogin-signwithsecure": "SSL (https) 接続を使用",
-       "yourdomainname": "ドメイン:",
+       "userlogin-signwithsecure": "安全な接続の使用",
+       "yourdomainname": "ã\81\82ã\81ªã\81\9fã\81®ã\83\89ã\83¡ã\82¤ã\83³:",
        "password-change-forbidden": "このウィキではパスワードを変更できません。",
-       "externaldberror": "認証データベースでエラーが発生した、または外部アカウントの更新が許可されていません。",
+       "externaldberror": "èª\8d証ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81§ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81\9fã\81\8bã\80\81ã\81¾ã\81\9fã\81¯å¤\96é\83¨ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®æ\9b´æ\96°ã\81\8c許å\8f¯ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\9bã\82\93ã\80\82",
        "login": "ログイン",
        "nav-login-createaccount": "ログインまたはアカウント作成",
        "userlogin": "ログインまたはアカウント作成",
        "createacct-benefit-body2": "{{PLURAL:$1|ページ}}",
        "createacct-benefit-body3": "最近の{{PLURAL:$1|投稿者数}}",
        "badretype": "入力したパスワードが一致しません。",
+       "usernameinprogress": "この利用者名のためのアカウント作成は、すでに進行中です。お待ちください。",
        "userexists": "入力した利用者名は既に使用されています。\n別の利用者名を指定してください。",
        "loginerror": "ログインのエラー",
        "createacct-error": "アカウント作成エラー",
        "nocookieslogin": "{{SITENAME}}ではログインに Cookie を使用します。\nCookie を無効にしているようです。\nCookie を有効にしてから、もう一度試してください。",
        "nocookiesfornew": "発信元を確認できなかったため、アカウントは作成されませんでした。\nCookieを有効にしていることを確認して、このページを再読込してもう一度試してください。",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "noname": "利用者名を正しく指定していません。",
+       "noname": "有効な利用者名が指定されていません。",
        "loginsuccesstitle": "ログイン成功",
        "loginsuccess": "<strong>{{SITENAME}}に「$1」としてログインしました。</strong>",
        "nosuchuser": "「$1」という名前の利用者は見当たりません。\n利用者名では大文字と小文字を区別します。\n綴りが正しいことを確認するか、[[Special:UserLogin/signup|新たにアカウントを作成]]してください。",
        "changeemail-none": "(なし)",
        "changeemail-password": "{{SITENAME}}のパスワード:",
        "changeemail-submit": "メールアドレスを変更",
-       "changeemail-throttled": "ログインの試行回数が多すぎます。\n$1待ってから再度試してください。",
+       "changeemail-throttled": "ログインの試行回数が多すぎます。\n$1待ってから再度試してください。",
        "resettokens": "トークンの再設定",
        "resettokens-text": "ここでは、アカウントに関連付けられた特定の非公開データにアクセスするためのトークンを再設定できます。\n\nトークンを誤って他人に教えてしまった場合やあなたのアカウントが侵害された場合は、必ず再設定してください。",
        "resettokens-no-tokens": "再設定できるトークンはありません。",
        "savearticle": "ページを保存",
        "preview": "プレビュー",
        "showpreview": "プレビューを表示",
-       "showdiff": "å·®å\88\86を表示",
+       "showdiff": "å¤\89æ\9b´を表示",
        "blankarticle": "<strong>警告:</strong>作成しようとしているページの内容がありません。{{Int:savearticle}}\"をもう一度クリックすると、中身の無いページが作成されます。",
        "anoneditwarning": "<strong>警告:</strong> ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。<strong>[$1 ログイン]</strong>または<strong>[$2 アカウントを作成]</strong>すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。",
        "anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
        "missingcommentheader": "<strong>注意:</strong> このコメントに対する題名/見出しが空欄です。\n「{{int:savearticle}}」ボタンをもう一度押すと、空のまま編集が保存されます。",
        "summary-preview": "要約のプレビュー:",
        "subject-preview": "題名/見出しのプレビュー:",
-       "previewerrortext": "変更のプレビューを処理中にエラーが発生しました。",
+       "previewerrortext": "å¤\89æ\9b´ã\81®ã\83\97ã\83¬ã\83\93ã\83¥ã\83¼ã\82\92å\87¦ç\90\86中ã\81«ã\80\81ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82",
        "blockedtitle": "利用者はブロックされています",
        "blockedtext": "<strong>この利用者名またはIPアドレスはブロックされています。</strong>\n\nブロックは$1によって実施されました。\nブロックの理由は <em>$2</em> です。\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\nこのブロックについて、$1もしくは他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]に問い合わせることができます。\nただし、[[Special:Preferences|個人設定]]で有効なメールアドレスが登録されていない場合、またはメール送信機能の使用がブロックされている場合、「この利用者にメールを送信」の機能は使えません。\n現在ご使用中のIPアドレスは$3、このブロックIDは#$5です。\nお問い合わせの際には、上記の情報を必ず書いてください。",
        "autoblockedtext": "このIPアドレスは、$1によりブロックされた利用者によって使用されたため、自動的にブロックされています。\n理由は次の通りです。\n\n:<em>$2</em>\n\n* ブロック開始日時: $8\n* ブロック解除予定: $6\n* ブロック対象: $7\n\n$1または他の[[{{MediaWiki:Grouppage-sysop}}|管理者]]にこのブロックについて問い合わせることができます。\n\nただし、[[Special:Preferences|個人設定]]に正しいメールアドレスが登録されていない場合、またはメール送信がブロックされている場合、「この利用者にメールを送信」機能を使用できないことに注意してください。\n\n現在ご使用中のIPアドレスは$3 、このブロックIDは#$5です。\nお問い合わせの際は、上記の情報を必ず書いてください。",
        "yourdiff": "差分",
        "copyrightwarning": "{{SITENAME}}への投稿はすべて、$2 (詳細は$1を参照)のもとで公開したと見なされることにご注意ください。\n自分が書いたものが他の人に容赦なく編集され、自由に配布されるのを望まない場合は、ここに投稿しないでください。<br />\nまた、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。\n<strong>著作権保護されている作品は、許諾なしに投稿しないでください!</strong>",
        "copyrightwarning2": "{{SITENAME}}への投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。\n自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。<br />\nまた、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。\n<strong>著作権保護されている作品は、許諾なしに投稿しないでください!</strong>",
+       "editpage-cannot-use-custom-model": "このページのコンテント・モデル(content model)を変更することは、できません。",
        "longpageerror": "<strong>エラー: 投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。</strong>\nこの編集内容は保存できません。",
        "readonlywarning": "<strong>警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。</strong>\n必要であれば文章をコピー&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。\n\nデータベースをロックした管理者による説明は以下の通りです: $1",
        "protectedpagewarning": "<strong>警告: このページは保護されているため、管理者権限を持つ利用者のみが編集できます。</strong>\n参考として以下に最後の記録を表示します:",
        "semiprotectedpagewarning": "<strong>注意:</strong> このページは保護されているため、登録利用者のみが編集できます。\n参考として以下に最後の記録を表示します:",
-       "cascadeprotectedwarning": "<strong>警告:</strong> このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者のみが編集できるように保護されています:",
+       "cascadeprotectedwarning": "<strong>警告:</strong> このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}からトランスクルードのため読み込まれているので、管理者権限を持つ利用者のみが編集できるように保護されています:",
        "titleprotectedwarning": "<strong>警告: このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。</strong>\n参考として以下に最後の記録を表示します:",
        "templatesused": "このページで使用されている{{PLURAL:$1|テンプレート}}:",
        "templatesusedpreview": "このプレビューで使用されている{{PLURAL:$1|テンプレート}}:",
        "currentrev-asof": "$1時点における最新版",
        "revisionasof": "$1時点における版",
        "revision-info": "$1時点における{{GENDER:$6|$2}}による版$7",
-       "previousrevision": "←前の版",
-       "nextrevision": "次ã\81®ç\89\88→",
+       "previousrevision": "← 古い版",
+       "nextrevision": "æ\96°ã\81\97ã\81\84ç\89\88 →",
        "currentrevisionlink": "最新版",
        "cur": "最新",
        "next": "次",
        "histlast": "最新",
        "historysize": "({{PLURAL:$1|$1バイト}})",
        "historyempty": "(空)",
-       "history-feed-title": "変更履歴",
+       "history-feed-title": "版の履歴",
        "history-feed-description": "このウィキのこのページに関する変更履歴",
        "history-feed-item-nocomment": "$2に$1による",
        "history-feed-empty": "要求されたページは存在しません。\nこのウィキから既に削除されたか、名前が変更された可能性があります。\n[[Special:Search|このウィキの検索]]で関連する新しいページを探してみてください。",
        "history-edit-tags": "選択した版のタグを編集",
        "rev-deleted-comment": "(要約は除去されています)",
        "rev-deleted-user": "(利用者名は除去されています)",
-       "rev-deleted-event": "(記録の詳細は除去されています)",
+       "rev-deleted-event": "(ログの詳細は除去されています)",
        "rev-deleted-user-contribs": "[利用者名またはIPアドレスは除去されました - その編集は投稿記録で非表示にされています]",
        "rev-deleted-text-permission": "この版は<strong>削除されています</strong>。\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
        "rev-suppressed-text-permission": "この版は<strong>秘匿されています</strong>。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
        "rev-suppressed-unhide-diff": "この差分の一方の版は<strong>秘匿されています</strong>。\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。\nこのまま[$1 この差分を閲覧]できます。",
        "rev-deleted-diff-view": "この差分の一方の版は<strong>削除されています</strong>。\nこの差分を閲覧できます。[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]に詳細情報があるかもしれません。",
        "rev-suppressed-diff-view": "この差分の一方の版は<strong>秘匿されています</strong>。\nこの差分を閲覧できます。[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 秘匿記録]に詳細情報があるかもしれません。",
-       "rev-delundel": "表示/非表示",
+       "rev-delundel": "表示/非表示 の変更",
        "rev-showdeleted": "表示",
        "revisiondelete": "版の削除と復元",
-       "revdelete-nooldid-title": "無効な対象版",
+       "revdelete-nooldid-title": "無効な対象版",
        "revdelete-nooldid-text": "この操作の対象となる版を指定していないか、指定した版が存在しないか、または最新版を非表示にしようとしています。",
        "revdelete-no-file": "指定されたファイルは存在しません。",
        "revdelete-show-file-confirm": "ファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を本当に閲覧しますか?",
        "revdelete-hide-user": "投稿者の利用者名/IPアドレス",
        "revdelete-hide-restricted": "他の利用者と同様に管理者からもデータを隠す",
        "revdelete-radio-same": "(変更しない)",
-       "revdelete-radio-set": "é\9d\9eå\85¬é\96\8b",
+       "revdelete-radio-set": "é\9a ã\81\99",
        "revdelete-radio-unset": "閲覧可能",
        "revdelete-suppress": "他の利用者と同様に管理者からもデータを隠す",
        "revdelete-unsuppress": "復元版に対する制限を除去",
        "search-category": "(カテゴリ $1)",
        "search-file-match": "(ファイルの内容との一致)",
        "search-suggest": "もしかして: $1",
+       "search-rewritten": "$1 の結果を表示しています。これは $2 の代わりに検索したものです。",
        "search-interwiki-caption": "姉妹プロジェクト",
        "search-interwiki-default": "$1からの結果:",
        "search-interwiki-more": "(続き)",
        "rows": "行数:",
        "columns": "列数:",
        "searchresultshead": "検索",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">スタブリンク</a>として表示する閾値 (バイト):",
+       "stub-threshold": "スタブリンク形式 ($1)として表示する閾値 :",
+       "stub-threshold-sample-link": "サンプル",
        "stub-threshold-disabled": "無効",
        "recentchangesdays": "最近の更新に表示する日数:",
        "recentchangesdays-max": "(最大 $1 {{PLURAL:$1|日|日間}})",
        "prefs-help-watchlist-token2": "これはあなたのウォッチリスト フィードの秘密のコードです。\nこのトークンを知っている人は誰でもあなたのウォッチリストを読めてしまうため、他の人に教えないでください。\n[[Special:ResetTokens|トークンを再設定する必要がある場合はここをクリックしてください]]。",
        "savedprefs": "個人設定を保存しました。",
        "timezonelegend": "タイムゾーン:",
-       "localtime": "ローカルの時刻:",
+       "localtime": "地域の時刻:",
        "timezoneuseserverdefault": "ウィキの既定を使用 ($1)",
        "timezoneuseoffset": "その他 (時差を指定)",
        "servertime": "サーバーの時刻:",
        "default": "既定",
        "prefs-files": "ファイル",
        "prefs-custom-css": "カスタムCSS",
-       "prefs-custom-js": "カスタムJS",
+       "prefs-custom-js": "カスタムJavaScript",
        "prefs-common-css-js": "すべての外装に共通のCSSとJavaScript:",
        "prefs-reset-intro": "このページを使用すると、自分の個人設定をこのサイトの初期設定に戻せます。\nこの操作は取り消せません。",
        "prefs-emailconfirm-label": "メールアドレスの確認:",
        "prefs-advancedediting": "全般オプション",
        "prefs-editor": "エディター",
        "prefs-preview": "プレビュー",
-       "prefs-advancedrc": "詳細設定",
-       "prefs-advancedrendering": "詳細設定",
+       "prefs-advancedrc": "詳細設定",
+       "prefs-advancedrendering": "詳細設定",
        "prefs-advancedsearchoptions": "詳細設定",
-       "prefs-advancedwatchlist": "詳細設定",
+       "prefs-advancedwatchlist": "詳細設定",
        "prefs-displayrc": "表示の設定",
        "prefs-displaywatchlist": "表示の設定",
        "prefs-tokenwatchlist": "トークン",
        "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n* 「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。",
        "userrights-reason": "理由:",
-       "userrights-no-interwiki": "他ウィキ上における利用者権限の編集権限はありません。",
+       "userrights-no-interwiki": "ä»\96ã\82¦ã\82£ã\82­ä¸\8aã\81«ã\81\8aã\81\91ã\82\8bå\88©ç\94¨è\80\85権é\99\90ã\81®ç·¨é\9b\86権é\99\90ã\81¯ã\80\81ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82",
        "userrights-nodatabase": "データベース$1は存在しないか、ローカル上にありません。",
        "userrights-nologin": "利用者権限を付与するには、管理者アカウントで[[Special:UserLogin|ログイン]]する必要があります。",
        "userrights-notallowed": "あなたには利用者権限を追加/除去する権限がありません。",
        "right-sendemail": "他の利用者にメールを送信",
        "right-passwordreset": "パスワード再設定メールを閲覧",
        "right-managechangetags": "[[Special:Tags|タグ]]のデータベースにおける作成および削除",
+       "right-applychangetags": "自分の編集に[[Special:Tags|タグ]]を適用する",
        "right-changetags": "個々の版とログエントリの任意の[[Special:Tags|タグ]]の追加と削除",
        "newuserlogpage": "アカウント作成記録",
        "newuserlogpagetext": "以下はアカウント作成の記録です。",
        "action-editcontentmodel": "ページのコンテンツモデルを編集",
        "action-managechangetags": "タグのデータベースにおける作成および削除",
        "action-applychangetags": "自分の編集にタグを適用する",
+       "action-changetags": "個々のリビジョン上およびログエントリ上での任意のタグについての追加と除去",
        "nchanges": "$1 {{PLURAL:$1|回の変更}}",
        "enhancedrc-since-last-visit": "最終閲覧以降 $1 {{PLURAL:$1|件}}",
        "enhancedrc-history": "履歴",
        "boteditletter": "ボ",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 人の利用者}}がウォッチしています]",
-       "rc_categories": "カテゴリを限定 (「|」で区切る)",
-       "rc_categories_any": "すべて",
+       "rc_categories": "カテゴリを限定 (「|」で区切る):",
+       "rc_categories_any": "選択したもの全部",
        "rc-change-size": "$1",
        "rc-change-size-new": "変更後は $1 {{PLURAL:$1|バイト}}",
        "newsectionsummary": "/* $1 */ 新しい節",
        "uploaddisabledtext": "ファイルのアップロードは、無効になっています。",
        "php-uploaddisabledtext": "ファイルのアップロードがPHPで無効化されています。\nfile_uploadsの設定を確認してください。",
        "uploadscripted": "このファイルは、ウェブブラウザーが誤って解釈してしまうおそれがあるHTMLまたはスクリプトコードを含んでいます。",
+       "upload-scripted-pi-callback": "XMLスタイルシート処理命令を含むファイルをアップロードできません。",
        "uploaded-script-svg": "アップロードされたSVGファイルにスクリプト可能な要素「$1」が見つかりました。",
        "uploaded-hostile-svg": "アップロードされたSVGファイルのスタイル要素に安全ではないCSSが見つかりました。",
+       "uploaded-event-handler-on-svg": "イベントハンドラをセットする属性 <code>$1=\"$2\"</code> は、SVGファイルを許可されていません。",
+       "uploaded-href-attribute-svg": "ローカル以外のターゲット(http://、javascript: など) と href 属性の <code>&lt;$1 $2=\"$3\"&gt;</code> は、SVGファイルで許可されません。",
+       "uploaded-href-unsafe-target-svg": "アップロードされたSVGファイルに、安全ではないターゲット <code>&lt;$1 $2=\"$3\"&gt;</code> の href が見つかりました。",
+       "uploaded-animate-svg": "アップロードされたSVGファイルに、「from」属性 <code>&lt;$1 $2=\"$3\"&gt;</code> を使用した、href を変更させる可能性がある「animate」タグが見つかりました。",
+       "uploaded-setting-event-handler-svg": "アップロードされたSVGファイルに、ブロックされているイベントハンドラ属性が設定された <code>&lt;$1 $2=\"$3\"&gt;</code> が見つかりました。",
+       "uploaded-setting-href-svg": "親要素に「href」属性を追加する「set」タグの使用がブロックされています。",
+       "uploaded-wrong-setting-svg": "リモート/データ/スクリプトのターゲットを任意の属性に追加する「set」タグの使用がブロックされています。アップロードされたSVGファイルに <code>&lt;set to=\"$1\"&gt;</code> が見つかりました。",
+       "uploaded-setting-handler-svg": "リモート/データ/スクリプトの「handler」属性を設定するSVGがブロックされています。アップロードされたSVGファイルに <code>$1=\"$2\"</code> が見つかりました。",
+       "uploaded-remote-url-svg": "リモート URL の任意のスタイルを設定するSVGがブロックされています。アップロードされたSVGファイルに <code>$1=\"$2\"</code> が見つかりました。",
+       "uploaded-image-filter-svg": "URL に画像フィルターが見つかりました: アップロードされたSVGファイルの <code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploadscriptednamespace": "この SVG ファイルは無効な名前空間「$1」を含んでいます。",
        "uploadinvalidxml": "アップロードされたファイルに含まれる XML が構文解析できませんでした。",
        "uploadvirus": "このファイルはウイルスを含んでいます!\n詳細: $1",
        "upload-too-many-redirects": "そのURLに含まれるリダイレクトが多すぎます",
        "upload-http-error": "HTTP エラー発生: $1",
        "upload-copy-upload-invalid-domain": "このドメインからのアップロードは許可されていません。",
+       "upload-dialog-title": "ファイルをアップロード",
+       "upload-dialog-error": "エラーが発生しました",
+       "upload-dialog-warning": "警告",
+       "upload-dialog-button-cancel": "中止",
+       "upload-dialog-button-done": "完了",
+       "upload-dialog-button-save": "保存",
+       "upload-dialog-button-upload": "アップロード",
+       "upload-dialog-label-select-file": "ファイル選択",
+       "upload-dialog-label-infoform-title": "詳細",
+       "upload-dialog-label-infoform-name": "名前",
+       "upload-dialog-label-infoform-description": "説明",
+       "upload-dialog-label-usage-title": "使用法",
+       "upload-dialog-label-usage-filename": "ファイル名",
        "backend-fail-stream": "ファイル $1 をストリームできませんでした。",
        "backend-fail-backup": "ファイル $1 をバックアップできませんでした。",
        "backend-fail-notexists": "ファイル $1 は存在しません。",
        "unusedimages": "使われていないファイル",
        "wantedcategories": "カテゴリページが存在しないカテゴリ",
        "wantedpages": "ページが存在しないリンク",
+       "wantedpages-summary": "そのページのみへのリダイレクトリンクを含むページを除いた、ほとんどリンクが存在しないページの一覧です。そのページへのリダイレクトリンクを含む存在しないページの一覧は、[[{{#special:BrokenRedirects}}|迷子のリダイレクトの一覧]]を参照してください。",
        "wantedpages-badtitle": "結果が、無効なページ名を含んでいます: $1",
        "wantedfiles": "ファイル情報ページが存在しないファイル",
        "wantedfiletext-cat": "以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。さらに、存在しないファイルを埋め込んでいるページは[[:$1]]に列挙されます。",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
        "specialloguserlabel": "実行者:",
-       "speciallogtitlelabel": "対象 (ページまたは利用者):",
+       "speciallogtitlelabel": "対象 (ページまたは{{ns:user}}:利用者のための利用者名):",
        "log": "記録",
        "all-logs-page": "すべての公開記録",
        "alllogstext": "{{SITENAME}}の取得できる記録をまとめて表示しています。\n記録の種類、実行した利用者 (大文字小文字は区別)、影響を受けたページ (大文字小文字は区別) による絞り込みができます。",
        "linksearch-pat": "検索パターン:",
        "linksearch-ns": "名前空間:",
        "linksearch-ok": "検索",
-       "linksearch-text": "「*.wikipedia.org」のようにワイルドカードを使用できます。\n少なくとも「*.org」のようなトップレベルドメインが必要です。<br />\n対応{{PLURAL:$2|プロトコル}}: <code>$1</code> (プロトコルを省略した場合の既定値は http:// )。",
+       "linksearch-text": "「*.wikipedia.org」のようにワイルドカードを使用できます。\n少なくとも「*.org」のようなトップレベルドメインが必要です。<br />\n対応{{PLURAL:$2|プロトコル}}: $1 (プロトコルを省略した場合の既定値は http:// )。",
        "linksearch-line": "$1 が $2 からリンクされています",
        "linksearch-error": "ワイルドカードはホスト名の先頭でのみ使用できます。",
        "listusersfrom": "最初に表示する利用者:",
        "emailuser": "この利用者にメールを送信",
        "emailuser-title-target": "この{{GENDER:$1|利用者}}にメールを送信",
        "emailuser-title-notarget": "利用者にメールを送信",
-       "emailpage": "利用者にメールを送信",
        "emailpagetext": "以下のフォームを使用してこの{{GENDER:$1|利用者}}にメールを送信できます。\n「差出人」として、[[Special:Preferences|利用者の個人設定]]で入力したメールアドレスが設定されます。これにより、受信者があなたに直接返信できるようになります。",
        "defemailsubject": "{{SITENAME}} 利用者「$1」からのメール",
        "usermaildisabled": "利用者メール機能は無効です",
        "emailccsubject": "$1 に送信したメールの控え: $2",
        "emailsent": "メールを送信しました",
        "emailsenttext": "メールを送信しました。",
-       "emailuserfooter": "このメールは$1から$2へ、{{SITENAME}}の「{{int:emailpage}}」機能で送信されました。",
+       "emailuserfooter": "このメールは$1から$2へ、{{SITENAME}}の「{{int:emailuser}}」機能で送信されました。",
        "usermessage-summary": "システムメッセージを残す。",
        "usermessage-editor": "システムメッセンジャー",
        "watchlist": "ウォッチリスト",
        "watchlistanontext": "ウォッチリストにある項目を閲覧または編集するには、ログインしてください。",
        "watchnologin": "ログインしていません",
        "addwatch": "ウォッチリストに追加",
-       "addedwatchtext": "ã\83\9aã\83¼ã\82¸ã\80\8c[[:$1]]ã\80\8dã\82\92[[Special:Watchlist|ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«è¿½å\8a ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82\nã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¾ã\81\9fã\81¯ã\81\9dã\81®ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81\8cå¤\89æ\9b´ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81¾ã\81\99。",
+       "addedwatchtext": "ã\80\8c[[:$1]]ã\80\8dã\81\8aã\82\88ã\81³ä»\98é\9a\8fã\81\99ã\82\8bè­°è«\96ã\83\9aã\83¼ã\82¸ã\82\92ã\80\81[[Special:Watchlist|ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88]]ã\81«è¿½å\8a ã\81\97ã\81¾ã\81\97ã\81\9f。",
        "addedwatchtext-short": "ページ「$1」をウォッチリストに追加しました。",
        "removewatch": "ウォッチリストから除去",
-       "removedwatchtext": "ã\83\9aã\83¼ã\82¸ã\80\8c[[:$1]]ã\80\8dを[[Special:Watchlist|ウォッチリスト]]から除去しました。",
+       "removedwatchtext": "ã\80\8c[[:$1]]ã\80\8dã\81\8aã\82\88ã\81³ä»\98é\9a\8fã\81\99ã\82\8bè­°è«\96ã\83\9aã\83¼ã\82¸を[[Special:Watchlist|ウォッチリスト]]から除去しました。",
        "removedwatchtext-short": "ページ「$1」をウォッチリストから除去しました。",
        "watch": "ウォッチ",
        "watchthispage": "このページをウォッチする",
        "rollback-success": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。",
        "sessionfailure-title": "セッションの失敗",
        "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。",
-       "changecontentmodel-title-label": "ページ タイトル",
+       "changecontentmodel": "ページのコンテント・モデルの変更",
+       "changecontentmodel-legend": "コンテンツモデルを変更",
+       "changecontentmodel-title-label": "ページ名",
        "changecontentmodel-model-label": "新しい コンテンツ モデル",
        "changecontentmodel-reason-label": "理由:",
+       "changecontentmodel-success-title": "コンテント・モデルは変更されました",
+       "changecontentmodel-success-text": "[[:$1]]のコンテント・タイプは変更されています。",
+       "changecontentmodel-cannot-convert": "[[:$1]]上のコンテントは$2の型には変換できません。",
+       "changecontentmodel-nodirectediting": "$1 コンテント・モデルは、ダイレクト編集をサポートしていません。",
+       "log-name-contentmodel": "コンテント・モデル変更記録",
+       "log-description-contentmodel": "ページのコンテント・モデルに関連するイベント",
+       "logentry-contentmodel-change": "$1 がページ $3 のコンテント・モデルを \"$4\" から \"$5\" に{{GENDER:$2|変更しました}}",
+       "logentry-contentmodel-change-revertlink": "差し戻し",
+       "logentry-contentmodel-change-revert": "差し戻し",
        "protectlogpage": "保護記録",
        "protectlogtext": "以下はページ保護に対する変更の記録です。\n現在、保護レベルを変更できるページについては[[Special:ProtectedPages|保護ページ一覧]]を参照してください。",
        "protectedarticle": "「[[$1]]」を保護しました",
        "protect-locked-blocked": "ブロックされている間は、保護レベルを変更できません。\nページ <strong>$1</strong> の現在の状態は以下の通りです:",
        "protect-locked-dblock": "データベースのロックが有効なため、保護レベルを変更できません。\nページ <strong>$1</strong> の現在の状態は以下の通りです:",
        "protect-locked-access": "アカウントに、ページの保護レベルを変更する権限がありません。\nページ <strong>$1</strong> の現在の状態は以下の通りです:",
-       "protect-cascadeon": "このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。\nこのページの保護レベルの変更は、カスケード保護には影響しません。",
+       "protect-cascadeon": "このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}からトランスクルードのため読み込まれているので、保護されています。\nこのページの保護レベルの変更は、カスケード保護には影響しません。",
        "protect-default": "すべての利用者に許可",
        "protect-fallback": "「$1」権限を持つ利用者のみに許可",
        "protect-level-autoconfirmed": "自動承認された利用者のみに許可",
        "undeletepagetext": "以下の{{PLURAL:$1|削除されたページ|​&#32;$1 件の削除されたページ}}は、保存版に残っているため復元できます。\n保存版は定期的に消去される可能性があります。",
        "undelete-fieldset-title": "削除された版の復元",
        "undeleteextrahelp": "すべての版を復元する場合は、どのボックスにもチェックを入れていない状態で<strong><em>{{int:undeletebtn}}</em></strong>をクリックしてください。\n特定の版を復元する場合は、復元する版のボックスにチェックを入れた状態で<strong><em>{{int:undeletebtn}}</em></strong>をクリックしてください。",
-       "undeleterevisions": "保存版に$1{{PLURAL:$1|版}}あります",
+       "undeleterevisions": "$1{{PLURAL:$1|版}}削除",
        "undeletehistory": "ページを復元すると、すべての版が履歴に復元されます。\n削除後に同じ名前で新しいページが作成されている場合、復元された版はそれに先行する履歴として表示されます。",
        "undeleterevdel": "版指定削除されている版がページまたはファイルの最新版となるような復元はできません。\nこの場合、版指定削除されている最新版のチェックを外すか、その版指定削除を解除する必要があります。",
        "undeletehistorynoadmin": "このページは削除されています。\n削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。\n管理者以外の利用者には、削除された各版の本文への制限がかけられています。",
        "tooltip-ca-nstab-main": "本文を閲覧",
        "tooltip-ca-nstab-user": "利用者ページを表示",
        "tooltip-ca-nstab-media": "メディアページを表示",
-       "tooltip-ca-nstab-special": "ã\81\93ã\82\8cã\81¯ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81\99ã\80\82編集はできません。",
+       "tooltip-ca-nstab-special": "ã\81\93ã\82\8cã\81¯ç\89¹å\88¥ã\83\9aã\83¼ã\82¸ã\81§ã\81\99ã\81®ã\81§ã\80\81編集はできません。",
        "tooltip-ca-nstab-project": "プロジェクトページを表示",
        "tooltip-ca-nstab-image": "ファイルページを表示",
        "tooltip-ca-nstab-mediawiki": "システムメッセージを表示",
        "spam_reverting": "$1へのリンクを含まない最新の版に差し戻し",
        "spam_blanking": "すべての版が$1へのリンクを含んでいます。白紙化します。",
        "spam_deleting": "すべての版が$1へのリンクを含んでいます。削除します。",
-       "simpleantispam-label": "ã\82¹ã\83\91ã\83 æ\94»æ\92\83é\98²æ­¢ç\94¨ã\81®ã\83\81ã\82§ã\83\83ã\82¯ã\81§ã\81\99ã\80\82\nã\81\93ã\81\93ã\81«å\80¤ã\82\92決ã\81\97ã\81¦å\85¥å\8a\9b<strong>ã\81\97ã\81ªã\81\84</strong>ã\81§ã\81\8fã\81 ã\81\95ã\81\84ã\80\82",
+       "simpleantispam-label": "ã\82¹ã\83\91ã\83 æ\94»æ\92\83é\98²æ­¢ç\94¨ã\81®ã\83\81ã\82§ã\83\83ã\82¯ã\81§ã\81\99ã\80\82\nã\81\91ã\81£ã\81\97ã\81¦ã\80\81ã\81\93ã\81\93ã\81«ã\81¯ã\80\81å\80¤ã\81®å\85¥å\8a\9bã\81¯<strong>ã\81\97ã\81ªã\81\84</strong>ã\81§ã\81\8fã\81 ã\81\95ã\81\84ï¼\81",
        "pageinfo-title": "「$1」の情報",
        "pageinfo-not-current": "申し訳ありませんが、過去の版の情報は表示できません。",
        "pageinfo-header-basic": "基本情報",
        "pageinfo-robot-index": "許可",
        "pageinfo-robot-noindex": "不許可",
        "pageinfo-watchers": "ページをウォッチリストに入れている人数",
+       "pageinfo-visiting-watchers": "ページをウォッチリストに入れていて最近の編集を訪問した人数",
        "pageinfo-few-watchers": "ウォッチしている利用者 $1 {{PLURAL:$1|人未満}}",
+       "pageinfo-few-visiting-watchers": "最近の編集を見に来ている人は、いないかもしれません。",
        "pageinfo-redirects-name": "このページへのリダイレクトの数",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "このページの下位ページの数",
        "tags-deactivate-reason": "理由:",
        "tags-deactivate-not-allowed": "タグ「$1」は無効化できません。",
        "tags-deactivate-submit": "無効化",
+       "tags-apply-no-permission": "あなたは変更と同時に変更タグを適応する権限がありません。",
        "tags-apply-not-allowed-one": "タグ \"$1\" の手動適用は認められていません。",
        "tags-apply-not-allowed-multi": "以下の {{PLURAL:$2|タグ}} は手動適用が認められていません: $1",
        "tags-update-no-permission": "あなたには個々の版または記録項目のタグの追加または除去を行う権限はありません。",
        "tags-edit-manage-link": "タグを管理",
        "tags-edit-revision-selected": "[[:$2]] の{{PLURAL:$1|選択された版}}:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|選択された記録項目}}:",
+       "tags-edit-revision-legend": "{{PLURAL:$1|この版|すべての $1 版}}から、タグを追加または除去",
+       "tags-edit-logentry-legend": "{{PLURAL:$1|この記録項目|すべての $1 記録項目}}から、タグを追加または除去",
        "tags-edit-existing-tags": "既存のタグ:",
        "tags-edit-existing-tags-none": "(なし)",
        "tags-edit-new-tags": "新しいタグ:",
        "tags-edit-success": "変更が正常に適用されました。",
        "tags-edit-failure": "変更は適用できませんでした: $1",
        "tags-edit-nooldid-title": "無効な対象版",
+       "tags-edit-nooldid-text": "この関数を実行しましたが、対象の版が指定されていない、あるいは指定された版が存在しません。",
        "tags-edit-none-selected": "追加または削除するには、少なくとも1つ以上のタグを選択してください。",
        "comparepages": "ページの比較",
        "compare-page1": "ページ 1",
        "htmlform-cloner-create": "さらに追加",
        "htmlform-cloner-delete": "除去",
        "htmlform-cloner-required": "少なくとも 1 つの値が必要です。",
+       "htmlform-title-badnamespace": "[[:$1]]は、\"{{ns:$2}}\"名前空間にありません。",
+       "htmlform-title-not-creatable": "\"$1\" は、作成可能なページ名では、ありません。",
+       "htmlform-title-not-exists": "[[:$1]] は存在しません。",
+       "htmlform-user-not-exists": "<strong>$1</strong>は存在しません。",
+       "htmlform-user-not-valid": "<strong>$1</strong>は有効な利用者名ではありません。",
        "sqlite-has-fts": "$1 (全文検索あり)",
        "sqlite-no-fts": "$1 (全文検索なし)",
        "logentry-delete-delete": "$1 がページ「$3」を{{GENDER:$2|削除しました}}",
        "revdelete-uname-unhid": "利用者名の可視化",
        "revdelete-restricted": "管理者に対する制限の適用",
        "revdelete-unrestricted": "管理者に対する制限の除去",
-       "logentry-block-block": "$1 が {{GENDER:$4|$3}} を$5{{GENDER:$2|ブロックしました}} $6",
+       "logentry-block-block": "$1 が {{GENDER:$4|$3}} を$5{{GENDER:$2|ブロックしました}} $6",
        "logentry-block-unblock": "$1 が {{GENDER:$4|$3}} の{{GENDER:$2|ブロックを解除しました}}",
        "logentry-block-reblock": "$1 が {{GENDER:$4|$3}} のブロックの期限を$5に{{GENDER:$2|変更しました}} $6",
        "logentry-suppress-block": "$1 が {{GENDER:$4|$3}} を$5で{{GENDER:$2|ブロックしました}} $6",
        "logentry-newusers-create2": "利用者アカウント $3 が $1 により{{GENDER:$2|作成されました}}",
        "logentry-newusers-byemail": "利用者アカウント $3 が $1 によって{{GENDER:$2|作成され}}、そのパスワードがメールで送信されました",
        "logentry-newusers-autocreate": "利用者アカウント $1 が自動的に{{GENDER:$2|作成されました}}",
+       "logentry-protect-move_prot": "$1 が保護設定を $4 から $3 に{{GENDER:$2|移動しました}}",
        "logentry-rights-rights": "$1 が $3 の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
        "logentry-rights-rights-legacy": "$1 が $3 の所属グループを{{GENDER:$2|変更しました}}",
        "logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}",
        "log-name-managetags": "タグ管理記録",
        "log-description-managetags": "このページは[[Special:Tags|タグ]]に関係する管理タスクをリストアップしています。ログには管理者によって手動で実行された操作の記録しか記載されていません。ウィキ・ソフトウェアによって、ログを残さずにタグが作成・削除されている場合があります。",
        "logentry-managetags-create": "$1 がタグ「$4」を{{GENDER:$2|作成しました}}",
+       "logentry-managetags-delete": "$1 がタグ \"$4\" を{{GENDER:$2|削除しました}}  ( $5 {{PLURAL:$5|版 または 記録項目|版 および/または 記録項目}} からの除去)",
+       "logentry-managetags-activate": "$1 がタグ \"$4\" の利用者およびボットによる使用を{{GENDER:$2|有効化しました}}。",
+       "logentry-managetags-deactivate": "$1 がタグ \"$4\" の利用者およびボットによる使用を{{GENDER:$2|無効化しました}}。",
        "log-name-tag": "タグ記録",
+       "log-description-tag": "このページには、個々の版またはエントリーの記録から、利用者を追加または削除した[[Special:Tags|タグ]]が表示されます。編集の一部、削除、同様の操作として発生したときの操作はタグ付けされず、記録には表示されません。",
        "logentry-tag-update-add-revision": "$1 がページ $3 の版 $4 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}",
        "logentry-tag-update-add-logentry": "$1 がページ $3 の記録項目 $5 に{{PLURAL:$7|タグ}} $6 を{{GENDER:$2|追加しました}}",
        "logentry-tag-update-remove-revision": "$1 がページ $3 の版 $4 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}",
        "logentry-tag-update-remove-logentry": "$1 がページ $3 の記録項目 $5 から{{PLURAL:$9|タグ}} $8 を{{GENDER:$2|除去しました}}",
+       "logentry-tag-update-revision": "$1 がページ「$3」の版 $4 でのタグを{{GENDER:$2|更新しました}} ($6 が{{PLURAL:$7|追加}}、$8 が{{PLURAL:$9|削除}})",
+       "logentry-tag-update-logentry": "$1 がページ「$3」のエントリー $5 での記録のタグを{{GENDER:$2|更新しました}} ($6 が{{PLURAL:$7|追加}}、$8 が{{PLURAL:$9|削除}})",
        "rightsnone": "(なし)",
        "revdelete-summary": "編集内容の要約",
        "feedback-adding": "ページへのフィードバックの追加...",
        "feedback-bugornote": "技術的な問題の詳細を説明する準備ができている場合は、[$1 バグ報告]をお願いします。\n準備ができていない場合は、下の簡易フォームを使用してください。あなたのコメントと利用者名が、ページ「[$3 $2]」に追加されます。",
        "feedback-cancel": "キャンセル",
        "feedback-close": "完了",
+       "feedback-external-bug-report-button": "技術的タスクをファイル",
        "feedback-dialog-title": "フィードバックの送信",
+       "feedback-dialog-intro": "以下のフォームでフィードバックを簡単に提出できます。あなたのコメントは利用者名と共に、ページ \"$1\" に追加されるでしょう。",
        "feedback-error-title": "エラー",
        "feedback-error1": "エラー: 認識できない結果を API が返しました",
        "feedback-error2": "エラー: 編集に失敗しました",
        "api-error-stashfailed": "内部エラー: サーバーは一時ファイルを格納できませんでした。",
        "api-error-publishfailed": "内部エラー: サーバーは一時ファイルを発行できませんでした。",
        "api-error-stasherror": "ファイルを未公開アップロードする際にエラーが発生しました。",
+       "api-error-stashedfilenotfound": "未公開場所からアップロードしようとしましたが、隠しファイルが見つかりませんでした。",
+       "api-error-stashpathinvalid": "隠しファイルのパスが無効です。",
        "api-error-stashfilestorage": "未公開ファイルを格納する際にエラーが発生しました。",
+       "api-error-stashzerolength": "長さが0であるため、サーバーはファイルを隠しておくことができませんでした。",
        "api-error-stashnotloggedin": "未公開ファイルを保存するにはログインが必要です。",
+       "api-error-stashwrongowner": "未公開場所にアクセスしようとしていたファイルは、あなたに属していません。",
+       "api-error-stashnosuchfilekey": "未公開場所にアクセスしようとしていたファイルのキーが存在しません。",
        "api-error-timeout": "サーバーが決められた時間内に応答しませんでした。",
        "api-error-unclassified": "不明なエラーが発生しました。",
        "api-error-unknown-code": "不明なエラー:「$1」",
        "expand_templates_generate_xml": "XML 構文解析ツリーを表示",
        "expand_templates_generate_rawhtml": "HTML ソースを表示",
        "expand_templates_preview": "プレビュー",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} ではHTMLソースが有効になっており、セッションデータの損失が生じているので、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、もう一度試してください。</strong>\nそれでも動作しない場合は、[[Special:UserLogout|ログアウト]]して再度ログインしてみてください。",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} ではHTMLソースが有効になっており、ログインしていないため、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、[[Special:UserLogin|ログイン]]してもう一度試してください。</strong>",
        "pagelanguage": "ページ言語選択",
        "pagelang-name": "ページ",
        "pagelang-language": "言語",
        "special-characters-title-endash": "en ダッシュ",
        "special-characters-title-emdash": "em ダッシュ",
        "special-characters-title-minus": "マイナス記号",
+       "mw-widgets-dateinput-no-date": "選択されたデータ無し",
        "mw-widgets-titleinput-description-new-page": "ページは存在しません",
        "mw-widgets-titleinput-description-redirect": "$1 へのリダイレクト"
 }
index 082db55..bc12e9a 100644 (file)
        "passwordreset": "Balèni setèl tembung sandhi",
        "passwordreset-text-one": "Lengkapana formulir iki kanggo nampa tembung sandhi sementara lewat layang elektronik.",
        "passwordreset-text-many": "{{PLURAL:$1|Isinen salah sijine kotak ing ngisor iki kanggo nampa tembung sandhi sementara lewat layang elektronik.}}",
-       "passwordreset-legend": "Balèni setèl tembung sandhi",
        "passwordreset-disabled": "Piranti kanggo mbalèni nyetèl tembung sandhi dipatèni nèng wiki iki.",
        "passwordreset-emaildisabled": "Fitur layang elektronik wis dipateni ing wiki iki.",
        "passwordreset-username": "Jeneng panganggo:",
        "resettokens": "Reset token",
        "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
        "resettokens-no-tokens": "Ora ana token sing bisa direset.",
-       "resettokens-legend": "Reset token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (nilai saiki: $2)",
        "resettokens-watchlist-token": "Token kangge sindikasi web (Atom/RSS) saking [[Special:Watchlist|pangowahan ing daptar pangawasan sampeyan]]",
        "randomincategory": "Sembarang kaca ing kategori",
        "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.",
        "randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].",
+       "randomincategory-submit": "Tumuju",
        "randomredirect": "Pangalihan sembarang",
        "randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".",
        "statistics": "Statistik",
        "nmembers": "$1 {{PLURAL:$1|anggota|anggota}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|revisi|revisi}}",
-       "nviews": "Wis kaping $1 {{PLURAL:$1|dituduhaké|dituduhaké}}",
        "nimagelinks": "Kanggo nèng {{PLURAL:$1|kaca|kaca}}",
        "ntransclusions": "kanggo nèng $1 {{PLURAL:$1|kaca|kaca}}",
        "specialpage-empty": "Ora ana sing perlu dilaporaké.",
        "linksearch-pat": "Pola panggolèkan:",
        "linksearch-ns": "Bilik nama:",
        "linksearch-ok": "Golèk",
-       "linksearch-text": "Tanda bintang seperti \"*.wikipedia.org\" dapat digunakan.\nPerlu sedikitnya satu domain tingkat atas, misalnya \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol}} yang didukung: <code>$1</code> (menggunakan http:// bila protokol tidak ditentukan)",
+       "linksearch-text": "Tanda bintang seperti \"*.wikipedia.org\" dapat digunakan.\nPerlu sedikitnya satu domain tingkat atas, misalnya \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol}} yang didukung: $1 (menggunakan http:// bila protokol tidak ditentukan)",
        "linksearch-line": "$1 disambung saka $2",
        "linksearch-error": "''Wildcards'' namung bisa dienggo ing bagéyan awal saka jeneng host.",
        "listusersfrom": "Tuduhna panganggo sing diawali karo:",
index b376f83..58c5ed7 100644 (file)
        "passwordreset": "პაროლის აღდგენა",
        "passwordreset-text-one": "შეავსეთ ეს ფორმა, რათა კვლავ დააყენოთ თქვენი პაროლი.",
        "passwordreset-text-many": "{{PLURAL:$1|ელ.ფოსტაზე დროებითი პაროლის მისაღებად შეავსეთ ერთ-ერთი ველი.}}",
-       "passwordreset-legend": "პაროლის აღდგენა",
        "passwordreset-disabled": "ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.",
        "passwordreset-emaildisabled": "ამ ვიკიში ელ.ფოსტის ფუნქციები გამორთულია.",
        "passwordreset-username": "მომხმარებლის სახელი:",
        "resettokens": "ტოკენების ჩამოყრა",
        "resettokens-text": "თქვენ შეგიძლიათ ჩამოყაროთ ტოკენები, რომლებიც შესაძლებლობას იძლევიან შესვლას განსაზღვრულ პირად მონაცემებში, დაკავშირებულს თქვენ ანგარიშთან აქ. \n\nთქვენ ეს აუცილებლად უნდა გააკეთოთ, თუ თქვენ ის შემთხვევით გააცანით სხვას ან თუკი თქვენი ანგარიში იქნა გატეხილი.",
        "resettokens-no-tokens": "არ არის ტოკენები ჩამოსაყრელად",
-       "resettokens-legend": "ტოკენების ჩამოყრა",
        "resettokens-tokens": "ჟეტონები:",
        "resettokens-token-label": "$1 (მიმდინარე მნიშვნელობა: $2)",
        "resettokens-watchlist-token": "ტოკენი ვებ-არხისთვის (Atom/RSS) [[Special:Watchlist|გვერდების ცვლილებები თქვენი კონტროლის სიაში]]",
        "randomincategory-nopages": "კატეგორიაში [[:კატეგორია:$1|$1]] გვერდები არაა.",
        "randomincategory-category": "კატეგორია:",
        "randomincategory-legend": "შემთხვევითი გვერდი კატეგორიაში",
+       "randomincategory-submit": "მიდი",
        "randomredirect": "ნებისმიერი გადამისამართება",
        "randomredirect-nopages": "სახელთა სივრცეში „$1“ არ არის გადამისამართებები.",
        "statistics": "სტატისტიკა",
        "linksearch-pat": "ძიების თარგი:",
        "linksearch-ns": "სახელთა სივრცე:",
        "linksearch-ok": "ძიება",
-       "linksearch-text": "შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, \"*.wikipedia.org\".\nუკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად \"*.org\"<br />\nმხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: <code>$1</code> (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)",
+       "linksearch-text": "შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, \"*.wikipedia.org\".\nუკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად \"*.org\"<br />\nმხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: $1 (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)",
        "linksearch-line": "ბმულები $1-ზე  $2-დან",
        "linksearch-error": "წარმოდგენილი სიმბოლოების გამოყენება შესაძლებელია მხოლოდ მისამართის დასაწყისში.",
        "listusersfrom": "აჩვენეთ მომხმარებლები, რომლებიც იწყებიან:",
        "special-characters-title-endash": "ტირე",
        "special-characters-title-emdash": "გრძელი ტირე",
        "special-characters-title-minus": "მინუსის ნიშანი",
+       "mw-widgets-dateinput-placeholder-day": "წწწწ-თთ-დდ",
+       "mw-widgets-dateinput-placeholder-month": "წწწწ-თთ",
        "mw-widgets-titleinput-description-new-page": "გვერდი ჯერ არ არსებობს",
        "mw-widgets-titleinput-description-redirect": "გადამისამართება $1-ზე"
 }
index bc86057..8b1a04d 100644 (file)
                        "Teak",
                        "Urhixidur",
                        "아라",
-                       "SalemB"
+                       "SalemB",
+                       "Mezgoug"
                ]
        },
-       "tog-underline": "Derrer izdayen:",
+       "tog-underline": "Aderrer n yezdayen:",
        "tog-hideminor": "Ffer ibeddlen ifessasen deg yibeddlen imaynuten",
        "tog-hidepatrolled": "Ffer ibeddlen iεessan deg yibeddlen imaynuten",
        "tog-newpageshidepatrolled": "Ffer isebtaren iɛessan gar umuɣ n isebtaren imaynuten",
        "passwordreset": "Awennez tikkelt nniḍen n awal uɛaddi",
        "passwordreset-text-one": "Ččur tiferkit agi iwakken ad wennezeḍ awal-ik/im n uɛaddi.",
        "passwordreset-text-many": "{{PLURAL:$1|Čcur yiwet n tiɣwezza iwakken ad rmeseḍ awal n uɛaddi uɛḍil deg tirawt.}}",
-       "passwordreset-legend": "Awennez tikkelt nniḍen n awal uɛaddi",
        "passwordreset-disabled": "Awennez n awal uɛaddi yensa deg uwiki agi.",
        "passwordreset-emaildisabled": "Tiseɣnin email nsant ɣef wiki agi.",
        "passwordreset-username": "Isem n useqdac",
        "resettokens": "Wennez tiddas",
        "resettokens-text": "D-agi tzemreḍ ad twennezeḍ tiddas i ɛemmeden ad kecmeḍ ar isefka usligen i qqenen ar amiḍan inek/inem.\n\nIlaq ad twennezeḍ tiddas ma tferqeḍ-ten s tuccḍa s umseqdac nniḍen neɣ ma amiḍan inek/inem yexṣer.",
        "resettokens-no-tokens": "Ulac tiddas an wennez.",
-       "resettokens-legend": "Wennez tiddas",
        "resettokens-tokens": "Tiddas :",
        "resettokens-token-label": "$1 (azal amiran : $2)",
        "resettokens-watchlist-token": "Tiddest i usuddem (Atom/RSS) web n [[Special:Watchlist|ibeddilen n isebtar n umuɣ inek/inem n uḍfar]]",
        "nmembers": "$1 {{PLURAL:$1|amaslad|imasladen}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|amaslad|imasladen}}",
        "nrevisions": "$1 {{PLURAL:$1|tasiwelt|tisiwal}}",
-       "nviews": "$1 {{PLURAL:$1|timeẓriwt|tuẓrin}}",
        "nimagelinks": "Yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}",
        "ntransclusions": "yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}",
        "specialpage-empty": "Asebter-agi d ilem.",
        "linksearch-pat": "Anadi n tanfalit :",
        "linksearch-ns": "Talluntin n isemawen :",
        "linksearch-ok": "Nadi",
-       "linksearch-text": "Isekkilen imeẓliyen am « *.wikipedia.org » zemren ad wetseqdecen.\nIlaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».<br />\n{{PLURAL:$2|Aneggaf yettwaɛqelen|Ineggafen yettwaɛqelen}}: <code>$1</code> (http:// s lexṣas ma ulac aneggaf).",
+       "linksearch-text": "Isekkilen imeẓliyen am « *.wikipedia.org » zemren ad wetseqdecen.\nIlaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».<br />\n{{PLURAL:$2|Aneggaf yettwaɛqelen|Ineggafen yettwaɛqelen}}: $1 (http:// s lexṣas ma ulac aneggaf).",
        "linksearch-line": "$1 yeqqen seg $2",
        "linksearch-error": "Tzemreḍ ad seqdeceḍ isekkilen usligen ala deg tazzwara n taɣult uselkim.",
        "listusersfrom": "Ssken imseqdacen seg:",
        "emailuser": "Azen e-mail i wemseqdac-agi",
        "emailuser-title-target": "Ceggaɛ tirawt i {{GENDER:$1|aseqdac agi|taseqdact agi}}",
        "emailuser-title-notarget": "Ceggaɛ tirawt i useqdac",
-       "emailpage": "Ceggaɛ tirawt i useqdac",
        "emailpagetext": "Tzemreḍ ad seqdeceḍ tiferkit ddaw agi iwakken ad ceggɛeḍ tirawt i {{GENDER:$1|umseqdac|tamseqdact}} agi.\nTansa e-mail id ekfeḍ deg [[Special:Preferences|iɣewwaren inek/inem]] ad tban deg urti \"Amceggaɛ\" n izen ; akka, anermas ad yezmer ak/akem yefk tiririt.",
        "defemailsubject": "{{SITENAME}} tirawt n useqdac « $1 »",
        "usermaildisabled": "Aceggaɛ n tira gar iseqdacen yensa",
index 5e56faf..a70f42d 100644 (file)
        "qbedit": "Өңдеу",
        "qbpageoptions": "Бұл бет",
        "qbmyoptions": "Беттерім",
-       "faq": "Жиі қойылатын сұрақтар",
+       "faq": "ЖҚС",
        "faqpage": "Project:Жиі қойылатын сұрақтар",
        "actions": "Әрекеттер",
        "namespaces": "Есім кеңістіктері",
        "jumpto": "Мұнда ауысу:",
        "jumptonavigation": "шарлау",
        "jumptosearch": "іздеу",
-       "view-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.\n\n$1",
+       "view-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nКүте тұрып осы бетке қайта қатынауға қайта әрекет жасаңыз.\n\n$1",
        "generic-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.",
        "pool-timeout": "Құлыпталу уақытын күту мерзімі өтті",
        "pool-queuefull": "Сұранымдар жинақтауышысы толық",
        "actionthrottled": "Әрекет бәсеңдетілді",
        "actionthrottledtext": "Спамға қарсы күрес есебінде осы әрекетті қысқа уақытта тым көп рет орындауыңыз шектелінді және бұл шектеу шамасынан асып кетіпсіз.\nБірнеше минуттан кейін қайта байқап көріңіз.",
        "protectedpagetext": "Бұл бет өңдеу немесе басқа әрекеттерді болдырмау үшін қорғалған.",
-       "viewsourcetext": "Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады:",
+       "viewsourcetext": "Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады.",
        "viewyourtext": "Осы беттен <strong>өңдемелеріңіздің</strong> қайнарын қарай және көшіре аласыз.",
        "protectedinterface": "Бұл бет осы уикидің бағдарламалық жасақтамасы үшін интерфейс мәтінін қамтамасыз етеді және қиянаттауды болдырмау үшін қорғалған. Барлық уикилер үшін аудармаларды қосу немесе өзгерту үшін [//translatewiki.net/ translatewiki.net] MediaWiki жерсіндіру жобасын қолданыңыз.",
        "editinginterface": "<strong>Ескерту:</strong> Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.\nБұл беттің өзгертілуі басқа қатысушыларға пайдаланушылық интерфейсін қалай көрінетіне әсер етеді.",
        "createacct-benefit-body2": "{{PLURAL:$1|бет|бет}}",
        "createacct-benefit-body3": "жуықтағы {{PLURAL:$1|қатысушы|қатысушы}}",
        "badretype": "Енгізген құпия сөздеріңіз бір-біріне сәйкес емес.",
+       "usernameinprogress": "Бұл қатысушы есіміне тіркелгі жасау әлдеқашан басталды. Күте тұрыңыз.",
        "userexists": "Енгізген қатысушы атыңыз әлдеқашан пайдалануда.\nӨзге атауды таңдаңыз.",
        "loginerror": "Кіру қатесі",
        "createacct-error": "Тіркелгі жасауада қате кетті",
        "passwordreset": "Құпия сөзді қайтару",
        "passwordreset-text-one": "Уақытша құпия сөзіңізді электрон пошта арқылы қабылдау үшін бұл пішінді толтырыңыз.",
        "passwordreset-text-many": "{{PLURAL:$1|Е-пошта арқылы уақытша құпия сөзді қабылдау үшін жолақтардың бірін толтырыңыз.}}",
-       "passwordreset-legend": "Құпия сөзді қайтару",
        "passwordreset-disabled": "Бұл уикиде құпия сөзді қайтару ажыратылған.",
        "passwordreset-emaildisabled": "E-mail мүмкіндігі бұл уикиде өшірілген.",
        "passwordreset-username": "Қатысушы аты:",
        "resettokens": "Байрақшаны ысыру",
        "resettokens-text": "Мұнда сіз құпия дерекке қатысты тіркелгіңізге қатынауға рұқсат ететін байрақшаны ысыра аласыз.\n\nЕгер сіздің тіркелгіңіз бұзылған болса, егер сіз абайсызда қандай да біреумен бөліссеңіз, сіз мұны істеуіңіз керек.",
        "resettokens-no-tokens": "Мұнда ысыруға байрақша жоқ.",
-       "resettokens-legend": "Байрақшаны ысыру",
        "resettokens-tokens": "Байрақша",
        "resettokens-token-label": "$1 (қазіргі мәні : $2)",
        "resettokens-watchlist-token": "(Atom/RSS) [[Special:Watchlist|сіздің бақылау тізіміңіздегі беттердегі өзгерістер]]дегі уеб тізбегі (Atom/RSS) үшін токен",
        "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "longpageerror": "<strong>ҚАТЕЛІК: Сақтамақшы болған мәтініңіздің көлемі {{PLURAL:$1|бір килобайт|$1 килобайт}} ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
-       "readonlywarning": "<strong>Ð\95СÐ\9aÐ\95РТУ: Ð\94еÑ\80екÒ\9bоÑ\80 Ñ\82еÑ\85никалÑ\8bÒ\9b Ð¶Ò±Ð¼Ñ\8bÑ\81Ñ\82аÑ\80 Ð¶Ð°Ñ\81аÑ\83 Ò¯Ñ\88Ñ\96н Ò\9bұлÑ\8bпÑ\82алÒ\93ан Ñ\81ондÑ\8bÒ\9bÑ\82ан Ð´Ó\99л Ò\9bазÑ\96Ñ\80 Ó©Ò£Ð´ÐµÐ¼ÐµÒ£Ñ\96здÑ\96 Ñ\81аÒ\9bÑ\82ай Ð°Ð»Ð¼Ð°Ð¹Ñ\81Ñ\8bз.</strong>\nÐ\9aейÑ\96н Ñ\81аÒ\9bÑ\82аÑ\83 Ò¯Ñ\88Ñ\96н Ð¼Ó\99Ñ\82Ñ\96нÑ\96Ò£Ñ\96здÑ\96 Ð¼Ó\99Ñ\82Ñ\96н Ñ\84айлÑ\8bна ÐºÓ©Ñ\88Ñ\96Ñ\80Ñ\96п Ð°Ð»Ñ\8bпÑ\83Ò£Ñ\8bзÒ\93а Ð±Ð¾Ð»Ð°Ð´Ñ\8b. \n\nÐ\90дминÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð¾Ð½Ñ\8b Ò\9bұлÑ\8bпÑ\82аÑ\83 Ñ\81ебебÑ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96дей Ñ\82Ò¯Ñ\81Ñ\96ндÑ\96Ñ\80едÑ\96: $1",
+       "readonlywarning": "<strong>ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.</strong>\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алуңызға болады. \n\nАдминстратор оны құлыптау себебін келесідей түсіндіреді: $1",
        "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде соңғы журнал жазбасы көрсетілген:",
        "semiprotectedpagewarning": "<strong>Ескерту:</strong> Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:",
        "cascadeprotectedwarning": "<strong>Ескерту:</strong> Бұл бет қорғалған, сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:",
        "search-category": "(Санат:$1)",
        "search-file-match": "(файлдың мазмұны сәйкес келеді)",
        "search-suggest": "Мүмкін осы болар: $1",
+       "search-rewritten": "$1 дегенге қатысты нәтижелер көрсетілуде. $2 дегенмен бірге іздеу.",
        "search-interwiki-caption": "Бауырлас жобалар",
        "search-interwiki-default": "$1 дегеннен нәтиже:",
        "search-interwiki-more": "(көбірек)",
        "userrights-lookup-user": "Қатысушы топтарын реттеу",
        "userrights-user-editname": "Қатысушы атын енгізіңіз:",
        "editusergroup": "Қатысушы топтарын өңдеу",
-       "editinguser": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|user}}есімді қатысушының құқықтарын өзгерту",
+       "editinguser": "<strong>[[User:$1|$1]]</strong> $2 {{GENDER:$1|есімді қатысушының}} қатысушы құқықтарын өзгерту",
        "userrights-editusergroup": "Қатысушы топтарын өңдеу",
        "saveusergroups": "Қатысушы топтарын сақтау",
        "userrights-groupsmember": "Мүшелігі:",
        "newpageletter": "Ж",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[бақылаған $1 қатысушы]",
-       "rc_categories": "Санаттарға шектеу (\"|\" белгісімен бөліктеңіз)",
-       "rc_categories_any": "Ð\9aез ÐºÐµÐ»Ð³ÐµÐ½",
+       "rc_categories": "Санаттарға шектеу («|» белгісімен бөлектеңіз):",
+       "rc_categories_any": "ТаңдалÒ\93аннÑ\8bÒ£ ÐºÐµÐ· ÐºÐµÐ»Ð³ÐµÐ½Ñ\96",
        "rc-change-size-new": "Өңдеуден кейінгі көлемі: $1 {{PLURAL:$1|байт|байт}}",
        "newsectionsummary": "/* $1 */ жаңа бөлім",
        "rc-enhanced-expand": "Толық ақпаратты көрсету",
        "upload-too-many-redirects": "URL шектен тыс жылжытуларға ие",
        "upload-http-error": "HTTP қатесі кездесті: $1",
        "upload-copy-upload-invalid-domain": "Бұл домейннен еселеп жүктеу қолжетімді емес.",
+       "upload-dialog-title": "Файл жүктеу",
+       "upload-dialog-error": "Белгісіз қате кездесті",
+       "upload-dialog-warning": "Ескерту кездесті",
+       "upload-dialog-button-cancel": "Қажет емес",
+       "upload-dialog-button-done": "Бітті",
+       "upload-dialog-button-save": "Сақтау",
+       "upload-dialog-button-upload": "Жүктеу",
+       "upload-dialog-label-select-file": "Файлды таңдау",
+       "upload-dialog-label-infoform-title": "Егжей-тегжейі",
+       "upload-dialog-label-infoform-name": "Атауы",
+       "upload-dialog-label-infoform-description": "Сипаттамасы",
+       "upload-dialog-label-usage-title": "Қолданылуы",
+       "upload-dialog-label-usage-filename": "Файл атауы",
        "backend-fail-stream": "«$1» файлы ақпады.",
        "backend-fail-backup": "«$1» файлының сақтық есесі жасалмады.",
        "backend-fail-notexists": "$1 файлы бар емес.",
        "randomincategory-nopages": "Бұлар [[:Category:$1]] беттері мес.",
        "randomincategory-category": "Санат:",
        "randomincategory-legend": "Санаттағы кездейсоқ бет",
+       "randomincategory-submit": "Өту",
        "randomredirect": "Кездейсоқ айдағыш",
        "randomredirect-nopages": "Бұл есім аясында еш айдағыш жоқ \"$1\".",
        "statistics": "Санақ",
        "nmembers": "$1 {{PLURAL:$1|мүше|мүше}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|мүше|мүше}}",
        "nrevisions": "$1 {{PLURAL:$1|түзету|түзету}}",
-       "nviews": "$1 {{PLURAL:$1|қаралу|қаралу}}",
        "nimagelinks": "$1 {{PLURAL:$1|бетте|бетте}} қолданылады",
        "ntransclusions": "$1 {{PLURAL:$1|бетте|бетте}} қолданылады",
        "specialpage-empty": "Бұл сұраныс бойынша нәтиже жоқ.",
        "emailuser": "Қатысушыға хат жазу",
        "emailuser-title-target": "Бұл {{GENDER:$1|қатысушы}} email-ы",
        "emailuser-title-notarget": "Қатысушы е-поштасы",
-       "emailpage": "Қатысушыға хат жазу",
        "emailpagetext": "Төмендегі пішін арқылы бұл {{GENDER:$1|қатысушыға}} е-пошта хабарламасын жөнелтуге болады.\n[[Special:Preferences|Қатысушы баптауыңызда]] енгізген е-пошта мекенжайыңыз «Кімнен» деген бас жолағында көрінеді, сондықтан хат алушысы тура жауап бере алады.",
        "defemailsubject": "«$1» есімді қатысушының {{SITENAME}} е-поштасының хаты",
        "usermaildisabled": "Қатысушының электронды поштасы қосылмаған",
        "emailccsubject": "$1 дегенге хатыңыздың көшірмесі: $2",
        "emailsent": "Хат жөнелтілді",
        "emailsenttext": "Е-пошта хатыңыз жөнелтілді.",
-       "emailuserfooter": "Бұл электронды хатты {{SITENAME}} сайтындағы «{{int:emailpage}}» функцияцы арқылы $1 деген $2 дегенге жіберген.",
+       "emailuserfooter": "Бұл электронды хатты {{SITENAME}} сайтындағы «{{int:emailuser}}» функцияцы арқылы $1 деген $2 дегенге жіберген.",
        "usermessage-summary": "Жүйе хабарламасы қалдырылуда.",
        "usermessage-editor": "Жүйе мессенжері",
        "watchlist": "Бақылау тізімі",
        "rollback-success": "$1 өңдемелерінен қайтарды;\n$2 соңғы нұсқасына қайта өзгертті.",
        "sessionfailure-title": "Сеанс сәтсіз болды",
        "sessionfailure": "Кіру сессиясында шатақ болған сияқты;\nсессияға шабуылдаудардан қорғану үшін, осы әрекет тоқтатылды.\n«Артқа» дегенді басыңыз, және бетті қайта жүктеңіз де, қайта байқап көріңіз.",
+       "changecontentmodel-title-label": "Бет атауы",
+       "changecontentmodel-model-label": "Жаңа мағлұмат қалпы",
+       "changecontentmodel-reason-label": "Себебі:",
+       "logentry-contentmodel-change-revertlink": "қайтару",
+       "logentry-contentmodel-change-revert": "қайтару",
        "protectlogpage": "Қорғау журналы",
        "protectlogtext": "Төменде беттердің қорғау/қорғамау тізімі берілген.\nАғымдағы қорғау әректтер бар беттер үшін [[Special:ProtectedPages|қорғалған беттер тізімін]] қараңыз.",
        "protectedarticle": "«[[$1]]» бетін қорғады",
        "undeletepagetext": "Келесі {{PLURAL:$1|бет жойылған бірақ|$1 бет жойылған бірақ}} мағлұматы мұрағатта бар\nжәне қалпына келтіруге болады. Мұрағат ұдайы тазаланып тұруы мүмкін.",
        "undelete-fieldset-title": "Нұсқаларды қалпына келтіру",
        "undeleteextrahelp": "Толық бет тарихын қалпына келтіру үшін барлық құсбелгі көздерді босатып <strong><em>{{int:undeletebtn}}</em></strong> батырмасын нұқыңыз.\nБөлектеумен қалпына келтіруді орындау үшін қалпына келтіру керек түзетулеріне сәйкес көздерге құсбелгімен белгілеп <strong><em>{{int:undeletebtn}}</em></strong> батырмасын басыңыз.",
-       "undeleterevisions": "$1 түзету мұрағатталды",
+       "undeleterevisions": "$1 {{PLURAL:$1|нұсқа|нұсқа}} жойылды",
        "undeletehistory": "Егер бетті қалпына келтірсеңіз тарихындағы барлық түзетулер де қалпына келтіріледі. Егер жоюдан соң дәл солай атауымен жаңа бет басталса қалпына келтірілген түзетулер бұрынғы өңделу тарихында көрсетіледі.",
        "undeleterevdel": "Егер бұл үстіңгі бетте аяқталса, не файл түзетуі жарым-жартылай жойылған болса, жою болдырмауы орындалмайды.\nОсындай жағдайларда, ең жаңа жойылған түзетуін алып тастауыңыз не жасыруын болдырмауыңыз жөн.",
        "undeletehistorynoadmin": "Бұл бет жойылған.\nЖою себебі алдындағы өңдеген қатысушылар егжей-тегжейлерімен бірге төмендегі қысқаша мазмұндамасында көрсетілген.\nМына жойылған түзетулерін көкейкесті мәтіні тек әкімшілерге жетімді.",
        "tooltip-whatlinkshere-invert": "Бұл белгіні қойсаңыз таңдалған есім кеңістігіндегі беттердегі сілтемелерді жасырады.",
        "namespace_association": "Қатысты есім аясы",
        "tooltip-namespace_association": "Бұл белгіні қойсаңыз кейде таңдалған есім кеңістігіне қатысты талқылау немесе бастауыш есім кеңістігіндегі өзгерістер қосылып көрсетіледі",
-       "blanknamespace": "Ð\9dегÑ\96згÑ\96 Ð±ÐµÑ\82Ñ\82еÑ\80ден",
+       "blanknamespace": "Ð\9dегÑ\96згÑ\96 Ð±ÐµÑ\82Ñ\82еÑ\80дегÑ\96",
        "contributions": "{{GENDER:$1|Қатысушы}} үлестері",
        "contributions-title": "$1 есімді қатысушының үлесі",
        "mycontris": "Үлесім",
        "tooltip-pt-logout": "Шығу",
        "tooltip-pt-createaccount": "Біз сізге есептік жазба бастауды және кіруді ұсынамыз,ол міндетті емес.",
        "tooltip-ca-talk": "Мағлұмат бетті талқылау",
-       "tooltip-ca-edit": "Бұл бетті өңдей аласыз. Сақтаудың алдында «Қарап шығу» батырмасын нұқыңыз.",
+       "tooltip-ca-edit": "Бұл бетті өңдеу",
        "tooltip-ca-addsection": "Жаңа бөлім бастау",
        "tooltip-ca-viewsource": "Бұл бет қорғалған. Қайнарын қарай аласыз.",
        "tooltip-ca-history": "Бұл беттін соңғы нұсқалары.",
        "anonymous": "{{SITENAME}} тіркелгісіз {{PLURAL:$1|қатысушысы|қатысушылары}}",
        "siteuser": "{{SITENAME}} қатысушы $1",
        "anonuser": "{{SITENAME}} анонимді қатысушы: $1",
-       "lastmodifiedatby": "Бұл бетті $3 қатысушы соңғы өзгерткен кезі: $2, $1.",
+       "lastmodifiedatby": "Бұл бетті $3 есімді қатысушы соңғы өзгерткен кезі: $2, $1.",
        "othercontribs": "Шығарма негізін $1 жазған.",
        "others": "басқалар",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|қатысушысы|қатысушылары}} $1",
        "pageinfo-robot-index": "рұқсат берілген",
        "pageinfo-robot-noindex": "рұқсат етілмеген",
        "pageinfo-watchers": "Бетті қараушылар саны",
+       "pageinfo-visiting-watchers": "Соңғы өңдемеден кейінгі бетті қараушылар саны",
        "pageinfo-few-watchers": "$1 азырақ {{PLURAL:$1|қараушы|қараушы}}",
        "pageinfo-redirects-name": "Бұл бетке бағытталғандар саны",
        "pageinfo-subpages-name": "Бұл беттің төменгі беттер саны",
        "file-info": "файл өлшемі: $1, MIME түрі: $2",
        "file-info-size": "$1 × $2 нүкте, файл өлшемі: $3, MIME түрі: $4",
        "file-info-size-pages": "$1 × $2 нүкте (пиксел), Файл өлшемі: $3, MIME түрі: $4, $5 {{PLURAL:$5|бет|бет}}",
-       "file-nohires": "Ð\96оÒ\93аÑ\80Ñ\8b ÐºÐµÒ£ÐµÐ¹Ñ\82Ñ\96лÑ\96мдегÑ\96 нұсқалары жоқ.",
+       "file-nohires": "Ð\96оÒ\93аÑ\80Ñ\8b Ð°Ð¶Ñ\8bÑ\80аÑ\82Ñ\8bлÑ\8bмдÑ\8b нұсқалары жоқ.",
        "svg-long-desc": "SVG файлы, кесімді $1 × $2 (пиксел) нүкте, файл өлшемі: $3",
        "svg-long-desc-animated": "SVG қозғалысты файлы, кесімді $1 × $2 нүкте, файл өлшемі: $3",
        "svg-long-error": "жарамсыз SVG файлы: $1",
        "version-libraries": "Орнатылған кітапхана",
        "version-libraries-library": "Кітапхана",
        "version-libraries-version": "Нұсқасы",
+       "version-libraries-license": "Лицензиясы",
+       "version-libraries-description": "Сипаттамасы",
+       "version-libraries-authors": "Автор(лары)",
        "redirect": "Файл, қатысушы, бет немесе нұсқа ID-і бойынша бағыттаулар",
        "redirect-legend": "Файл немесе бетке айдатулар",
        "redirect-summary": "Бұл арнайы бет файлға (файл атауы берілген), бетке (нұсқа ID-і немесе бет ID-і берілген), не қатысушы бетіне бағыттайды (қатысушы сандық ID-і берілген). Қолданылуы: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], немесе [[{{#Special:Redirect}}/user/101]].",
        "htmlform-cloner-create": "Тағы қосу",
        "htmlform-cloner-delete": "Аластау",
        "htmlform-cloner-required": "Кемінде бір мән қажет етеді.",
+       "htmlform-title-badnamespace": "[[:$1]] беті «{{ns:$2}}» есім кеңістігінде емес.",
+       "htmlform-title-not-creatable": "«$1» беті бастауға болатын бет атауы емес",
+       "htmlform-title-not-exists": "[[:$1]] беті жоқ.",
+       "htmlform-user-not-exists": "<strong>$1</strong> есімді қатысушы жоқ.",
+       "htmlform-user-not-valid": "<strong>$1</strong> жарамды қатысушы есімі емес.",
        "sqlite-has-fts": "$1 дегенмен барлық мәтінде іздеуді қолдайды",
        "sqlite-no-fts": "$1дегенсіз барлық мәтінде іздеуді қолдайды",
        "logentry-delete-delete": "$1 $3 деген бетті {{GENDER:$2|жойды}}",
        "logentry-suppress-event-legacy": "$1 $3 бетіндегі журнал оқиғаларының көрінулігін құпия түрде {{GENDER:$2|өзгертті}}",
        "logentry-suppress-revision-legacy": "$1 $3 бетіндегі нұсқалардың көрінулігін құпия түрде {{GENDER:$2|өзгертті}}",
        "revdelete-content-hid": "мағлұматын жасырыды",
-       "revdelete-summary-hid": "өңдеу түйіндемесі жасырылған",
-       "revdelete-uname-hid": "қатысушы есімі жасырылған",
+       "revdelete-summary-hid": "өңдеу түйіндемесін жасырды",
+       "revdelete-uname-hid": "қатысушы есімін жасырды",
        "revdelete-content-unhid": "мағлұматы жасырылмаған",
        "revdelete-summary-unhid": "өңдеу түйіндемесі жасырылмаған",
        "revdelete-uname-unhid": "қатысушы есімі жасырылмаған",
        "revdelete-unrestricted": "әкімшілерден тиымдарды аластады",
        "logentry-block-block": "$1 {{GENDER:$4|$3}} дегенді $5 $6 мерзімге {{GENDER:$2|бұғаттады}}",
        "logentry-block-unblock": "$1 {{GENDER:$4|$3}} деген қатысушыны {{GENDER:$2|бұғатынан босатты}}",
-       "logentry-block-reblock": "$1 {{GENDER:$4|$3}} дегеннің бұғаттау параметрлерін біту уақытын $5 $6 мерзіміне {{GENDER:$2|өзгерті}}",
+       "logentry-block-reblock": "$1 {{GENDER:$4|$3}} Ð´ÐµÐ³ÐµÐ½Ð½Ñ\96Ò£ Ð±Ò±Ò\93аÑ\82Ñ\82аÑ\83 Ð¿Ð°Ñ\80амеÑ\82Ñ\80леÑ\80Ñ\96н Ð±Ñ\96Ñ\82Ñ\83 Ñ\83аÒ\9bÑ\8bÑ\82Ñ\8bн $5 $6 Ð¼ÐµÑ\80зÑ\96мÑ\96не {{GENDER:$2|өзгеÑ\80Ñ\82Ñ\82Ñ\96}}",
        "logentry-suppress-block": "$1 {{GENDER:$4|$3}} дегенді $5 $6 мерзімге {{GENDER:$2|бұғаттады}}",
        "logentry-suppress-reblock": "$1 {{GENDER:$4|$3}} есімді қатысушының бұғаттау параметрлерінің біту уақытын $5 $6 мерзіміне {{GENDER:$2|өзгертті}}",
        "logentry-import-upload": "$1 $3 файл жүктемесі арқылы {{GENDER:$2|импорттады}}",
        "logentry-newusers-create2": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}}",
        "logentry-newusers-byemail": "$1 $3 деген аккаунт {{GENDER:$2|тіркеді}} және құпия сөзі е-пошта арқылы жіберілді",
        "logentry-newusers-autocreate": "$1 қатысушы аккаунтын автоматты түрде {{GENDER:$2|тіркеді}}",
+       "logentry-protect-move_prot": "$1 protection settings from $4 дегеннен $3 дегенге қорғалу баптауларын {{GENDER:$2|жылжытты}}",
        "logentry-rights-rights": "$1 $3 үшін топ мүшелігін $4 дегеннен $5 дегенге {{GENDER:$2|өзгертті}}",
-       "logentry-rights-rights-legacy": "$1 $3 үшін топ мүшелігін {{GENDER:$2|өзгерті}}",
+       "logentry-rights-rights-legacy": "$1 $3 Ò¯Ñ\88Ñ\96н Ñ\82оп Ð¼Ò¯Ñ\88елÑ\96гÑ\96н {{GENDER:$2|өзгеÑ\80Ñ\82Ñ\82Ñ\96}}",
        "logentry-rights-autopromote": "$1 $4 дегенен $5 дегенге автоматты түрде {{GENDER:$2|деңгейі көтерілген}}",
        "logentry-upload-upload": "$1 $3 файлын {{GENDER:$2|жүктеді}}",
        "logentry-upload-overwrite": "$1 $3 дегеннің жаңа нұсқасын {{GENDER:$2|жүктеді}}",
        "special-characters-group-khmer": "Кхмер",
        "special-characters-title-endash": "дефис",
        "special-characters-title-emdash": "сызықша",
-       "special-characters-title-minus": "минус белгісі"
+       "special-characters-title-minus": "минус белгісі",
+       "mw-widgets-dateinput-no-date": "Ай-күн таңдалмаған",
+       "mw-widgets-dateinput-placeholder-day": "ЖЖЖЖ-АА-КК",
+       "mw-widgets-dateinput-placeholder-month": "ЖЖЖЖ-АА",
+       "mw-widgets-titleinput-description-new-page": "бет жоқ екен",
+       "mw-widgets-titleinput-description-redirect": "$1 дегенге бағыттату"
 }
index 5b18c9b..6acf87f 100644 (file)
@@ -32,6 +32,7 @@
        "tog-watchdefault": "បន្ថែម​ទំព័រទាំងឡាយ​ដែលខ្ញុំកែប្រែ​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ",
        "tog-watchmoves": "បន្ថែម​ទំព័រ​ទាំងឡាយដែលខ្ញុំប្តូរទីតាំង​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ",
        "tog-watchdeletion": "បន្ថែម​ទំព័រទាំងឡាយ​ដែលខ្ញុំលុបចោល​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ",
+       "tog-watchrollback": "បន្ថែមទំព័រដែលខ្ញុំបានមូលត្រឡប់ទៅកាន់បញ្ជីតាមដានរបស់ខ្ញុំ",
        "tog-minordefault": "ចំណាំ​គ្រប់កំណែប្រែ​របស់ខ្ញុំ​ថាជា​កំណែប្រែតិចតួច",
        "tog-previewontop": "បង្ហាញ​ការមើលមុន​ពីលើ​ប្រអប់​កែប្រែ",
        "tog-previewonfirst": "បង្ហាញ​ការមើលមុនសម្រាប់កំណែប្រែ​ដំបូងគេ",
@@ -54,7 +55,7 @@
        "tog-diffonly": "កុំបង្ហាញខ្លឹមសារទំព័រនៅពីក្រោមតារាងប្រៀបធៀបចំណុចខុសគ្នា",
        "tog-showhiddencats": "បង្ហាញចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានលាក់",
        "tog-norollbackdiff": "បំភ្លេច​ភាព​ខុស​គ្នា​បន្ទាប់​ពី​អនុវត្តការ​ស្ដារវិញ",
-       "tog-useeditwarning": "á\9e\9fá\9e¼á\9e\98á\9e\96á\9f\92á\9e\9aá\9e\98á\9e¶á\9e\93â\80\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8b á\9e\96á\9f\81á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\85á\9e¶á\9e\80á\9e\85á\9f\81á\9e\89â\80\8bá\9e\96á\9e¸â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8aá\9f\84á\9e\99á\9e\98á\9e·á\9e\93â\80\8bá\9e\94á\9e¶á\9e\93á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶â\80\8bá\9e\91á\9e»á\9e\80á\9e\94á\9f\86លាស់ប្ដូរ​នានា​",
+       "tog-useeditwarning": "á\9e\9fá\9e¼á\9e\98á\9e\96á\9f\92á\9e\9aá\9e\98á\9e¶á\9e\93â\80\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8b á\9e\96á\9f\81á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\85á\9e¶á\9e\80á\9e\85á\9f\81á\9e\89â\80\8bá\9e\96á\9e¸â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8aá\9f\84á\9e\99á\9e\98á\9e·á\9e\93â\80\8bá\9e\94á\9e¶á\9e\93á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶â\80\8bá\9e\91á\9e»á\9e\80á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ​នានា​",
        "tog-prefershttps": "ប្រើប្រាស់ការតភ្ជាប់មានសុវត្ថិភាពជានិច្ចពេលកត់ឈ្មោះចូល",
        "underline-always": "ជានិច្ច",
        "underline-never": "កុំឲ្យសោះ",
        "view": "មើល",
        "view-foreign": "មើលលើ $1",
        "edit": "កែប្រែ",
+       "edit-local": "កែប្រែចំណារពន្យល់ដើម",
        "create": "បង្កើត",
+       "create-local": "ចំណារពន្យល់ដើម",
        "editthispage": "កែប្រែទំព័រនេះ",
        "create-this-page": "បង្កើតទំព័រនេះ",
        "delete": "លុបចោល",
        "jumpto": "លោតទៅ៖",
        "jumptonavigation": "ការណែនាំ",
        "jumptosearch": "ស្វែងរក",
-       "view-pool-error": "á\9e\9fá\9e¼á\9e\98á\9e¢á\9e\97á\9f\90á\9e\99á\9e\91á\9f\84á\9e\9fá\9f\94 á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86រើការមានការមមាញឹកខ្លាំងពេកនៅពេលនេះ។\n\nមានអ្នកប្រើប្រាស់ជាច្រើនកំពុងព្យាយាមចូលមើលទំព័រនេះ។\n\nសូមរង់ចាំមួយភ្លែតសិនរួចសាកល្បងចូលមកកាន់ទំព័រនេះឡើងវិញ។\n\n$1",
+       "view-pool-error": "á\9e\9fá\9e¼á\9e\98á\9e¢á\9e\97á\9f\90á\9e\99á\9e\91á\9f\84á\9e\9fá\9f\94 á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9e\98á\9f\92រើការមានការមមាញឹកខ្លាំងពេកនៅពេលនេះ។\n\nមានអ្នកប្រើប្រាស់ជាច្រើនកំពុងព្យាយាមចូលមើលទំព័រនេះ។\n\nសូមរង់ចាំមួយភ្លែតសិនរួចសាកល្បងចូលមកកាន់ទំព័រនេះឡើងវិញ។\n\n$1",
        "pool-errorunknown": "កំហុសមិនស្គាល់",
        "aboutsite": "អំពី{{SITENAME}}",
        "aboutpage": "Project:អំពី",
        "filerenameerror": "មិនអាចប្តូរឈ្មោះឯកសារពី\"$1\" ទៅ \"$2\"បានទេ។",
        "filedeleteerror": "មិនអាចលុបឯកសារ\"$1\"បានទេ។",
        "directorycreateerror": "មិនអាចបង្កើតថត\"$1\"បានទេ។",
+       "directoryreadonlyerror": "ថត \"$1\" គឺសម្រាប់តែអានចេញទេ។",
+       "directorynotreadableerror": "ថត \"$1\" មិនអាចអានបានទេ។",
        "filenotfound": "រក​ឯកសារ \"$1\" មិនឃើញទេ។",
        "unexpected": "តម្លៃ​មិនបានរំពឹងទុក៖ \"$1\"=\"$2\"។",
        "formerror": "បញ្ហា៖ មិនអាចដាក់ស្នើ​សំណុំបែបបទ",
        "actionthrottled": "សកម្មភាពត្រូវបានកម្រិត",
        "actionthrottledtext": "ក្រោមវិធានការប្រឆាំងស្ប៉ាម​ អ្នកត្រូវបាន​គេកំហិតមិនឱ្យ​ធ្វើសកម្មភាពនេះ​ច្រើនដងពេកទេ​ក្នុងរយៈពេលខ្លីមួយ។\n\nសូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។",
        "protectedpagetext": "ទំព័រនេះបានត្រូវការពារមិនឱ្យកែប្រែ​ឬធ្វើសកម្មភាពផ្សេងទៀតលើវា។",
-       "viewsourcetext": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\98á\9e¾á\9e\9bá\9e\93á\9e·á\9e\84á\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84á\9e\80á\9e¼á\9e\8aá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9f\96",
-       "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់'''ការកែប្រែរបស់អ្នក'''មកកាន់ទំព័រនេះ៖",
+       "viewsourcetext": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\98á\9e¾á\9e\9bá\9e\93á\9e·á\9e\84á\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84á\9e\80á\9e¼á\9e\8aá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9f\94",
+       "viewyourtext": "អ្នកអាចមើលនិងចម្លងកូដរបស់<strong>ការកែប្រែរបស់អ្នក</strong>មកកាន់ទំព័រនេះ។",
        "protectedinterface": "ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។\nដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។",
        "editinginterface": "<strong>ប្រយ័ត្ន៖</strong> អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បន្លាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើននាក់ ដែលប្រើប្រាស់វិគីនេះ។",
        "translateinterface": "ដើម្បីបន្ថែមឬកែប្រែការបកប្រែសម្រាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគម្រោងបកប្រែវិគីមេឌា។",
-       "cascadeprotected": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9e\96á\9e¸á\9e\80á\9e¶á\9e\9aá\9e\80á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\9cá\9e¶á\9e\98á\9e¶á\9e\93{{PLURAL:$1|á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a, á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93}} á\9e\8aá\9f\82á\9e\9bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9e\87á\9e¶á\9e\98á\9e½á\9e\99á\9e\87á\9f\86á\9e\9aá\9e¾á\9e\9f\"ជាបណ្ដាក់\"៖\n$2",
-       "namespaceprotected": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91'''$1'''ទេ។",
+       "cascadeprotected": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9aá\9e\98á\9e·á\9e\93á\9e¢á\9f\84á\9e\99á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8aá\9f\84á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\9cá\9e¶á\9e\98á\9e¶á\9e\93á\9e\94á\9e\84á\9f\92á\9e\80á\9e\94á\9f\8b{{PLURAL:$1|á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9b\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9b}} á\9e\94á\9e¶á\9e\93á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\87á\9e\98á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\87á\9e¶á\9e\80á\9e¶á\9e\9aá\9e\80á\9e¶á\9e\9aá\9e\96á\9e¶á\9e\9a\"ជាបណ្ដាក់\"៖\n$2",
+       "namespaceprotected": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\9bá\9f\86á\9e á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\87á\9e¶<strong>$1</strong>ទេ។",
        "customcssprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ CSS នេះទេ ព្រោះវាផ្ទុកការកំណត់ផ្ទាល់ខ្លួនផ្សេងៗរបស់អ្នកប្រើប្រាស់ម្នាក់ផ្សេងទៀត។",
        "customjsprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ JavaScript នេះទេ ព្រោះវាផ្ទុកការកំណត់ផ្ទាល់ខ្លួនផ្សេងៗរបស់អ្នកប្រើប្រាស់ម្នាក់ផ្សេងទៀត។",
        "mycustomcssprotected": "អ្នកមិនមាន​ការអនុញ្ញាត​ក្នុងការកែប្រែទំព័រ CSS នេះទេ។",
        "createaccount-text": "មានអ្នកផ្សេងបានបង្កើតគណនីជាឈ្មោះ \"$2\" លើ{{SITENAME}}($4) ព្រមទាំងពាក្យសំងាត់ \"$3\" ដោយប្រើអាសយដ្ឋានអ៊ីមែលរបស់អ្នកហើយ។\n\nអ្នកគួរតែកត់ឈ្មោះចូលហើយផ្លាស់ប្តូរពាក្យសំងាត់របស់អ្នកនៅពេលនេះ។\n\nអ្នកអាចបំភ្លេចពីសារនេះ ប្រសិនបើ​គណនីនេះត្រូវបានបង្កើតដោយមានបញ្ហា។",
        "login-throttled": "អ្នកបានកត់ឈ្មោះចូលមិនបានសម្រេចច្រើនដងពេកហើយ។​\n\nសូមរងចាំរយៈពេល$1 មុនពេលសាកល្បងម្ដងទៀត។",
        "login-abort-generic": "អ្នកចុះឈ្មោះចូលមិនបានសម្រេចទេ។ ការចុះឈ្មោះចូលត្រូវបានបោះបង់។",
+       "login-migrated-generic": "គណនីរបស់អ្នកត្រូវបានផ្ទេរចេញហើយ ហើយអត្តនាមរបស់អ្នកក៏គ្មាននៅក្នុងវិគីនេះតទៅទៀតដែរ។",
        "loginlanguagelabel": "ភាសា៖ $1",
        "createacct-another-realname-tip": "អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។",
        "pt-login": "កត់ឈ្មោះចូល",
        "anoneditwarning": "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។ បើសិនជាអ្នក <strong>[$1 កត់ឈ្មោះចូល]</strong> ឬ <strong>[$2 បង្កើតគណនី]</strong> នោះការកែប្រែរបស់អ្នកនឹងត្រូវភ្ចាប់ជាមួយអត្តនាមរបស់អ្នកផង នឹងមានផលប្រយោជន៍ផ្សេងទៀតផង។",
        "anonpreviewwarning": "<em>អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។</em>",
        "missingsummary": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។\n\nបើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
+       "selfredirect": "<strong>ប្រយ័ត្ន៖</strong> អ្នកកំពុងតែបញ្ជូនបន្តទំព័រនេះទៅកាន់ទំព័រខ្លួនឯង។\n\nប្រហែលជាអ្នកបានផ្ដល់ទំព័រគោលដៅសម្រាប់បញ្ជូនបន្តខុខ ឬប្រហែលជាអ្នកកំពុងកែប្រែទំព័រខុស។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀត តំណភ្ជាប់បញ្ជូនបន្តនឹងត្រូវបង្កើតឡើងបែបនេះ។",
        "missingcommenttext": "សូមវាយបញ្ចូលយោបល់មួយនៅខាងក្រោម។",
        "missingcommentheader": "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ឱ្យនូវ ប្រធានបទ/ចំណងជើង របស់មតិយោបល់នេះទេ។\nបើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
        "summary-preview": "ការមើលជាមុនរបស់ចំណារពន្យល់:",
        "readonlywarning": "'''ប្រយ័ត្ន:មូលដ្ឋានទិន្នន័យត្រូវបានចាក់សោសម្រាប់ការរក្សាទុក ដូច្នេះអ្នកនឹងមិនអាចរក្សាទុករាល់កំណែប្រែរបស់អ្នកបានទេឥឡូវនេះ។'''\nសូមអ្នកចម្លងអត្ថបទ រួចដាក់ទៅក្នុងឯកសារដែលជាអត្ថបទ ហើយបន្ទាប់មករក្សាវាទុកនៅពេលក្រោយ។\n\nអ្នកអភិបាលដែលបានចាក់សោវា បានផ្ដល់នូវការពន្យល់ដូចតទៅ៖ $1",
        "protectedpagewarning": "'''ប្រយ័ត្ន៖ ទំព័រនេះ​ត្រូវបានចាក់សោ។ ដូច្នេះ​មានតែ​អ្នកប្រើប្រាស់​ដែល​មាន​អភ័យឯកសិទ្ឋិ​ជាអ្នកអភិបាលទេទើបអាច​កែប្រែ​វាបាន។'''\n\nខាងក្រោមនេះជាកំណត់ហេតុចូលចុងក្រោយ៖",
        "semiprotectedpagewarning": "'''សម្គាល់់៖''' ទំព័រនេះ​បានត្រូវ​ចាក់សោ។ ដូច្នេះ​មានតែអ្នកប្រើប្រាស់​ដែលបានចុះឈ្មោះ​ទេទើបអាចកែប្រែ​វា​បាន។\n\nខាងក្រោមនេះជាកំណត់ហេតុចូលចុងក្រោយ៖",
-       "cascadeprotectedwarning": "ប្រយ័ត្ន​៖ ទំព័រ​នេះ​ត្រូវ​បាន​ចាក់​សោ​ ដូច្នោះ​ហើយ​មាន​តែ​អ្នក​ប្រើ​ប្រាស់​ដែល​មាន​សិទ្ធិ​ជា​អ្នក​អភិបាល​ប៉ុណ្ណោះ​ អាច​កែ​ប្រែ​បាន។ ពីព្រោះ​ទំព័រ​នេះ​ត្រូវ​បាន​រួម​បញ្ចូល​ទៅ​ក្នុង​\n{{PLURAL:$1|ទំព័រ​}}ដែលការ​ពារ​ជា​ថ្នាក់ (cascade-protected)៖",
-       "titleprotectedwarning": "'''ប្រយ័ត្ន៖ ទំព័រនេះត្រូវបានចាក់សោ។ ដូច្នេះមានតែ[[Special:ListGroupRights|អ្នកមានសិទ្ធពិសេស]]ប៉ុណ្ណោះទើបអាចបង្កើតវាបាន។'''\n\nខាងក្រោមនេះជាកំណត់ហេតុចូលចុងក្រោយ៖",
+       "cascadeprotectedwarning": "<strong>ប្រយ័ត្ន​៖</strong>  ទំព័រ​នេះ​ត្រូវ​បាន​ការណារ ដូច្នោះ​ហើយ​មាន​តែ​អ្នក​ប្រើ​ប្រាស់​ដែល​មាន​សិទ្ធិ​ជា​អ្នក​អភិបាល​ប៉ុណ្ណោះ​ទើបអាច​កែ​ប្រែ​បាន។ ពីព្រោះ​ទំព័រ​នេះ​ត្រូវ​បាន​បង្កប់បញ្ចូល​ទៅ​ក្នុង​{{PLURAL:$1|ទំព័រ|ទំព័រ​​}}ដែលការ​ពារ​បណ្ដាក់៖",
+       "titleprotectedwarning": "<strong>ប្រយ័ត្ន៖ ទំព័រនេះត្រូវបានការពារ។ ដូច្នេះមានតែ[[Special:ListGroupRights|អ្នកមានសិទ្ធិពិសេស]]ប៉ុណ្ណោះទើបអាចបង្កើតវាបាន។</strong>\n\nខាងក្រោមនេះជាកំណត់ហេតុចូលចុងក្រោយ៖",
        "templatesused": "{{PLURAL:$1|ទំព័រគំរូ|ទំព័រគំរូទាំងឡាយដែល}}ប្រើនៅក្នុងទំព័រនេះ៖",
        "templatesusedpreview": "{{PLURAL:$1|ទំព័រគំរូ​|ទំព័រគំរូ​ទាំងឡាយដែល​}}ប្រើ​ក្នុងការមើលមុននេះ៖",
        "templatesusedsection": "{{PLURAL:$1|ទំព័រគំរូ|ទំព័រគំរូទាំងឡាយ}}ដែលមានប្រើក្នុងផ្នែកនេះ៖",
        "timezoneregion-pacific": "មហាសមុទ្រប៉ាស៊ីហ្វិក",
        "allowemail": "ទទួលអ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃទៀត",
        "prefs-searchoptions": "ស្វែងរក",
-       "prefs-namespaces": "á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91",
+       "prefs-namespaces": "á\9e\9bá\9f\86á\9e á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87",
        "default": "លំនាំដើម",
        "prefs-files": "ឯកសារ",
        "prefs-custom-css": "កែតំរូវ CSS",
        "prefs-registration": "កាលបរិច្ឆេទចុះឈ្មោះ៖",
        "yourrealname": "ឈ្មោះពិត៖",
        "yourlanguage": "ភាសា៖",
-       "yourvariant": "ជម្រើសភាសាខ្លឹមសារ៖",
+       "yourvariant": "ជម្រើសសណ្ដានភាសាខ្លឹមសារ៖",
+       "prefs-help-variant": "សណ្ដានភាសាដែលអ្នកចង់ប្រើសម្រាប់បង្ហាញខ្លឹមសារទំព័រក្នុងវិគីនេះ។",
        "yournick": "ហត្ថលេខាថ្មី៖",
        "prefs-help-signature": "រាល់វិចារនៅលើទំព័រពិភាក្សានានា​គួរតែមានចុះហត្ថលេខាដោយប្រើ \"<nowiki>~~~~</nowiki>\" ដែលនឹងបំលែង​ចេញជាហត្ថលេខា​របស់អ្នក​ជាមួយនឹងកាលបរិច្ឆេទ។",
        "badsig": "ហត្ថលេខាឆៅមិនត្រឹមត្រូវ។សូមពិនិត្យមើលស្លាក​ HTML ។",
        "prefs-tokenwatchlist": "កូនសោរ",
        "prefs-diffs": "ភាពខុសគ្នា",
        "prefs-help-prefershttps": "ចំណង់ចំណូលចិត្តនេះនឹងមានប្រសិទ្ធិភាពពេលអ្នកកត់ឈ្មោះចូលលើកក្រោយ។",
+       "prefswarning-warning": "អ្នកបានកែប្រែចំណង់ចំណូលចិត្តតែមិនទាន់បានរក្សាទុកទេ។ បើសិនជាអ្នកចាកចេញពីទំព័រនេះដោយមិនបានចុច \"$1\" ទេនោះចំណង់ចំណូលចិត្តរបស់អ្នកនឹងមិនត្រូវបន្ទាន់សម័យទេ។",
        "email-address-validity-valid": "អាសយដ្ឋានអ៊ីមែលហាក់មានសុពលភាព",
        "email-address-validity-invalid": "បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាព",
        "userrights": "ការគ្រប់គ្រងសិទ្ធិអ្នកប្រើប្រាស់",
        "newpageletter": "ថ្មី",
        "boteditletter": "យន្ត",
        "number_of_watching_users_pageview": "[មាន{{PLURAL:$1|អ្នកប្រើប្រាស់|អ្នកប្រើប្រាស់}}$1នាក់កំពុងមើល]",
-       "rc_categories": "á\9e\80á\9e\98á\9f\92á\9e\9aá\9e·á\9e\8fá\9e\91á\9e¸á\9e\8fá\9e¶á\9f\86á\9e\84á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98\9e\81á\9e\8eá\9f\92á\9e\8cá\9e\8aá\9f\84á\9e\99á\9e\9fá\9e\89á\9f\92á\9e\89á\9e¶ \"|\")",
+       "rc_categories": "á\9e\80á\9f\86á\9e á\9e·á\9e\8fá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\85á\9f\86á\9e\8eá\9e¶á\9e\8fá\9f\8bá\9e\90á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\80á\9f\92á\9e\9aá\9e»á\9e\98\9e\81á\9e\8eá\9f\92á\9e\8cá\9e\8aá\9f\84á\9e\99á\9e\9fá\9e\89á\9f\92á\9e\89á\9e¶ \"|\")á\9f\96",
        "rc_categories_any": "មួយណាក៏បាន",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|បៃ|បៃ}} បន្ទាប់ពីបន្លាស់ប្ដូរ",
        "uploaderror": "បញ្ហាក្នុងការផ្ទុកឡើង",
        "upload-recreate-warning": "''ប្រយ័ត្ន៖ ឯកសារដែលមានឈ្មោះដូចគ្នានេះត្រូវបានលុបចោលឬប្ដូរទីតាំង។'''\n\nកំណត់ហេតុស្ដីពីការលុបចោលនិងការប្ដូរទីតាំងរបស់ទំព័រនេះមានបង្ហាញនៅទីនេះ៖",
        "uploadtext": "សូមប្រើប្រាស់សំនុំបែបបទខាងក្រោមដើម្បីផ្ទុកឯកសារ​ឡើង។\n\nដើម្បីមើល ឬស្វែងរកឯកសារដែលបានផ្ទុកឡើងពីពេលមុន សូមចូលទៅ[[Special:FileList|បញ្ជីឯកសារដែលបានផ្ទុកឡើង]]។ ការផ្ទុកឡើងវិញ​នូវឯកសារបង្ហាញនៅក្នុង[[Special:Log/upload|កំណត់ហេតុនៃការផ្ទុកឯកសារឡើង]] និងការលុបចោលឯកសារមានបង្ហាញនៅក្នុង[[Special:Log/delete|កំណត់ហេតុនៃការលុប]]។\n\n\nដើម្បីដាក់រូបភាពទៅក្នុងទំព័រ សូមប្រើប្រាស់តំណភ្ជាប់ក្នុងទម្រង់ដូចខាងក្រោម៖\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ឈ្មោះឯកសារ.jpg]]</nowiki></code>'''ដើម្បីប្រើប្រាស់ទម្រង់ពេញលេញនៃឯកសារ\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ឈ្មោះឯកសារ.png|200px|thumb|left|ឃ្លាពិពណ៌នា]]</nowiki></code>''' ដោយប្រើប្រាស់ទំហំ​២០០ភីកសែលក្នុងប្រអប់នៅ​គេមខាងធ្វេង​ជាមួយនឹង​ឃ្លារៀបរាប់អំពីឯកសារនេះ។\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ឈ្មោះឯកសារ.ogg]]</nowiki></code>''' ដើម្បីតភ្ជាប់​ដោយផ្ទាល់ទៅឯកសារនេះ​ដោយមិនបង្ហាញឯកសារ។",
-       "upload-permitted": "ប្រភេទឯកសារដែលត្រូវបានអនុញ្ញាត៖ $1 ។",
-       "upload-preferred": "ប្រភេទឯកសារដែលគួរប្រើប្រាស់៖ $1 ។",
-       "upload-prohibited": "ប្រភេទឯកសារដែលត្រូវបានហាម៖ $1 ។",
+       "upload-permitted": "{{PLURAL:$2|ប្រភេទ|ប្រភេទ}}ឯកសារដែលត្រូវបានអនុញ្ញាត៖ $1 ។",
+       "upload-preferred": "{{PLURAL:$2|ប្រភេទ|ប្រភេទ}}ឯកសារដែលគួរប្រើប្រាស់៖ $1 ។",
+       "upload-prohibited": "{{PLURAL:$2|ប្រភេទ|ប្រភេទ}}ឯកសារដែលត្រូវបានហាម៖ $1 ។",
        "uploadlogpage": "កំណត់ហេតុនៃការផ្ទុកឡើង",
        "uploadlogpagetext": "ខាងក្រោមនេះ​ជាបញ្ជីនៃការផ្ទុកឡើង​ថ្មីបំផុត។\n\nសូមមើល [[Special:NewFiles|វិចិត្រសាលរូបភាពថ្មីៗ]] ដើម្បីមើលដោយផ្ទាល់ភ្នែក។",
        "filename": "ឈ្មោះឯកសារ",
        "upload-misc-error-text": "បញ្ហាដែលមិនស្គាល់មួយបានកើតឡើងនៅក្នុងកំឡុងពេលផ្ទុកឡើង។\n\nចូរផ្ទៀងផ្ទាត់ថា URL គឺមានសុពលភាពហើយអាចដំណើរការ រួចហើយ​ព្យាយាមម្តងទៀត។\n\nប្រសិនបើបញ្ហានៅតែកើតឡើង សូមទាក់ទងទៅ[[Special:ListUsers/sysop|អ្នកអភិបាល]]។",
        "upload-too-many-redirects": "URLនេះមានតំណភ្ជាប់បញ្ជូនបន្តច្រើនពេកហើយ",
        "upload-http-error": "មានកំហុសHTTPមួយបានកើតឡើង៖ $1",
+       "upload-dialog-title": "ផ្ទុកឯកសារឡើង",
+       "upload-dialog-error": "មានបញ្ហាកើតឡើង",
+       "upload-dialog-warning": "មានការព្រមាន",
+       "upload-dialog-button-cancel": "បោះបង់",
+       "upload-dialog-button-done": "រួចរាល់",
+       "upload-dialog-button-save": "រក្សាទុក",
+       "upload-dialog-button-upload": "ផ្ទុកឡើង",
+       "upload-dialog-label-select-file": "ជ្រើសរើសឯកសារ",
+       "upload-dialog-label-infoform-title": "ព័ត៌មាន​លំអិត",
+       "upload-dialog-label-infoform-name": "ឈ្មោះ​",
+       "upload-dialog-label-infoform-description": "ការ​ពិពណ៌នា",
+       "upload-dialog-label-usage-title": "បម្រើបម្រាស់",
+       "upload-dialog-label-usage-filename": "ឈ្មោះឯកសារ",
        "backend-fail-notexists": "គ្មានឯកសារ \"$1\" ទេ។",
        "backend-fail-notsame": "ឯកសារដែលមិនដូចគ្នាបេះបិទមួយមានរួចហើយនៅ \"$1\"។",
        "backend-fail-delete": "មិនអាចលុបឯកសារ \"$1\" បានទេ។",
        "randomincategory-nopages": "គ្មានទំព័រណាមួយក្នុងចំណាត់ថ្នាក់ក្រុម [[:Category:$1|$1]] ទេ។",
        "randomincategory-category": "ចំណាត់ថ្នាក់ក្រុម៖",
        "randomincategory-legend": "ទំព័រចៃដន្យក្នុងចំណាត់ថ្នាក់ក្រុម",
+       "randomincategory-submit": "ទៅ",
        "randomredirect": "ទំព័របញ្ជូនបន្តចៃដន្យ",
        "randomredirect-nopages": "គ្មានទំព័របញ្ជូនបន្តណាមួយនៅក្នុងប្រភេទ \"$1\" ទេ។",
        "statistics": "ស្ថិតិ",
        "statistics-users-active-desc": "អ្នក​ប្រើប្រាស់​ដែល​បាន​អនុវត្ត​សកម្មភាព​ក្នុង​{{PLURAL:$1|ថ្ងៃ​}}ចុង​ក្រោយ​",
        "doubleredirects": "ទំព័របញ្ជូនបន្តទ្វេដង",
        "doubleredirectstext": "ទំព័រនេះរាយឈ្មោះទំព័រដែលបញ្ជូនបន្តទៅទំព័របញ្ជូនបន្ដផ្សេងទៀត។\n\nជួរនីមួយៗមានតំនភ្ជាប់ទៅកាន់ទំព័របញ្ជូនបន្តទី១និងទី២ ព្រមជាមួយទំព័រគោលដៅរបស់ទំព័របញ្ជូនបន្តទី២(ដែលជាធម្មតានេះក៏ជាទំព័រគោលដៅ\"ពិត\"របស់ទំព័របញ្ជូនបន្តទី១ដែរ)។",
-       "double-redirect-fixed-move": "[[$1]] á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e\80á\9e\85á\9f\81á\9e\89á\9f\94\n\ná\9e\9cá\9e¶á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\91á\9f\85 [[$2]]",
-       "double-redirect-fixed-maintenance": "កំពុងជួសជុលការបញ្ជូនបន្តផ្ទួនគ្នាពី [[$1]] ទៅ [[$2]] ។",
+       "double-redirect-fixed-move": "[[$1]] á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9e¸á\9e\8fá\9e¶á\9f\86á\9e\84á\9f\94\ná\9e\9cá\9e¶á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\9fá\9e\98á\9f\90á\9e\99á\9e\93á\9e·á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9e\89á\9f\92á\9e\87á\9e¼á\9e\93á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\91á\9f\85 [[$2]]á\9f\94",
+       "double-redirect-fixed-maintenance": "កំពុងជួសជុលការបញ្ជូនបន្តផ្ទួនគ្នាពី [[$1]] ទៅ [[$2]]ដោយស្វ័យប្រវត្តិ ក្រោមកិច្ចថែទាំជាប្រចាំ ។",
        "double-redirect-fixer": "អ្នកជួសជុលការបញ្ជូនបន្ត",
        "brokenredirects": "ការបញ្ជូនបន្តដែលខូច",
        "brokenredirectstext": "ការបញ្ជូនបន្ដដូចតទៅនេះ​សំដៅទៅ​ទំព័រដែលមិនមាន៖",
        "pager-older-n": "{{PLURAL:$1|ចាស់ជាង$1}}",
        "suppress": "អធិការ",
        "querypage-disabled": "ទំព័រពិសេសនេះត្រូវបានបិទមិនអោយប្រើដោយសារមូលហេតុដំណើរការ។",
+       "apihelp": "ជំនួយAPI",
+       "apihelp-no-such-module": "រកមិនឃើញម៉ូឌុល \"$1\" ទេ។",
        "booksources": "ប្រភពសៀវភៅ",
        "booksources-search-legend": "ស្វែងរកប្រភពសៀវភៅ",
        "booksources-isbn": "លេខ​កូដ​សៀវ​ភៅ​ ISBN ៖",
        "linksearch-pat": "ស្វែងរកគំរូ៖",
        "linksearch-ns": "លំហឈ្មោះ៖",
        "linksearch-ok": "ស្វែងរក",
-       "linksearch-text": "Wildcards ដូចជា \"*.wikipedia.org\" អាចប្រើបាន។\nតំរូវអោយមានយ៉ាងហោចណាស់អោយមានដូម៉ែនកំរិតលើគេ ឧទាហរណ៍ \"*.org\"។<br />\n{{PLURAL:$2ប្រូតូខូល|ប្រូតូខូល}}ប្រើបាន៖ <code>$1</code>  (តាមលំនាំដើមជា http:// ប្រសិនបើគ្មានបញ្ជាក់ប្រូតូខូល)។",
+       "linksearch-text": "Wildcards ដូចជា \"*.wikipedia.org\" អាចប្រើបាន។\nតំរូវអោយមានយ៉ាងហោចណាស់អោយមានដូម៉ែនកំរិតលើគេ ឧទាហរណ៍ \"*.org\"។<br />\n{{PLURAL:$2ប្រូតូខូល|ប្រូតូខូល}}ប្រើបាន៖ $1  (តាមលំនាំដើមជា http:// ប្រសិនបើគ្មានបញ្ជាក់ប្រូតូខូល)។",
        "linksearch-line": "$1បានតភ្ជាប់ពី$2",
        "listusersfrom": "បង្ហាញអ្នកប្រើប្រាស់ចាប់ផ្តើមពី៖",
        "listusers-submit": "បង្ហាញ",
        "emailuser": "ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ",
        "emailuser-title-target": "ផ្ញើសារទៅកាន់ {{GENDER:$1|អ្នកប្រើប្រាស់}} នេះ",
        "emailuser-title-notarget": "ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់",
-       "emailpage": "ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់",
        "emailpagetext": "អ្នក​អាច​ប្រើសំនុំ​បែប​បទ​ខាង​ក្រោម​ក្នុង​ការ​ផ្ញើ​សារ​ជា​អ៊ីមែល​ទៅ​កាន់​{{GENDER:$1|អ្នកប្រើប្រាស់}}នេះ។\nអាសយដ្ឋាន​អ៊ីមែល​ដែល​អ្នក​បាន​វាយ​បញ្ចូល​ក្នុង [[Special:Preferences|ចំណង់ចំណូលចិត្តរបស់អ្នក]]នឹង​បង្ហាញ​ជា​អាសយដ្ឋាន​អ៊ីមែល \"From\" ដូច្នោះ​អ្នក​ទទួល​នឹង​អាច​ឆ្លើយ​តប​ទៅ​អ្នក​វិញ​ដោយ​ផ្ទាល់​។",
        "defemailsubject": "អ៊ីមែល{{SITENAME}}ពី \"$1\"",
        "usermaildisabled": "មិនប្រើអ៊ីមែល",
        "emailccsubject": "ច្បាប់ចម្លងនៃសារដែលអ្នកផ្ញើទៅកាន់ $1 ៖ $2",
        "emailsent": "អ៊ីមែលត្រូវបានផ្ញើទៅហើយ",
        "emailsenttext": "សារអ៊ីមែលរបស់អ្នកត្រូវបានផ្ញើរួចហើយ។",
-       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"{{int:emailpage}}\"របស់{{SITENAME}}។",
+       "emailuserfooter": "អ៊ីមែលនេះត្រូវបានផ្ញើដោយ$1ទៅកាន់$2ដោយប្រើមុខងារ\"{{int:emailuser}}\"របស់{{SITENAME}}។",
        "usermessage-summary": "ទម្លាក់សារក្នុងប្រព័ន្ធ",
        "usermessage-editor": "ប្រព័ន្ធផ្ញើសារ",
        "watchlist": "បញ្ជីតាមដាន",
        "watchlistanontext": "សូមកត់ឈ្មោះចូលដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។",
        "watchnologin": "មិនទាន់កត់ឈ្មោះចូលទេ",
        "addwatch": "បន្ថែមទៅបញ្ជីតាមដាន",
-       "addedwatchtext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a \"[[:$1]]\" á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\91á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8b[[Special:Watchlist|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93]]á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9bá\9f\84á\9e\80á\9e¢á\9f\92á\9e\93á\9e\80á\9e á\9e¾á\9e\99 á\9f\94 á\9e\9aá\9e¶á\9e\9bá\9f\8bá\9e\80á\9e¶á\9e\9aá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\93á\9f\83á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87 á\9e\9aá\9e½á\9e\98á\9e\91á\9e¶á\9f\86á\9e\84á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\97á\9e¶á\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9cá\9e¶á\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9a á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\93á\9f\85á\9e\91á\9e¸á\9e\93á\9f\84á\9f\87។",
+       "addedwatchtext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a \"[[:$1]]\" á\9e\93á\9e·á\9e\84á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\97á\9e¶á\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9cá\9e¶á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9e\93á\9f\92á\9e\90á\9f\82á\9e\98á\9e\91á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8b[[Special:Watchlist|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93]]á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9bá\9f\84á\9e\80á\9e¢á\9f\92á\9e\93á\9e\80á\9e á\9e¾á\9e\99 ។",
        "addedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានបន្ថែមទៅក្នុងបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "removewatch": "ដកចេញពីបញ្ជីតាមដាន",
-       "removedwatchtext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a \"[[:$1]]\" á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e\80á\9e\85á\9f\81á\9e\89á\9e\96á\9e¸[[Special:Watchlist|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9bá\9f\84á\9e\80á\9e¢á\9f\92á\9e\93á\9e\80]]á\9e á\9e¾á\9e\99 ។",
+       "removedwatchtext": "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a \"[[:$1]]\" á\9e\93á\9e·á\9e\84á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e·á\9e\97á\9e¶á\9e\80á\9f\92á\9e\9fá\9e¶á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9cá\9e¶á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\8aá\9e\80á\9e\85á\9f\81á\9e\89á\9e\96á\9e¸[[Special:Watchlist|á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93]]á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9bá\9f\84á\9e\80á\9e¢á\9f\92á\9e\93á\9e\80á\9e á\9e¾á\9e\99។",
        "removedwatchtext-short": "ទំព័រ \"$1\" ត្រូវបានដកចេញបញ្ជីតាមដានរបស់អ្នកហើយ។",
        "watch": "តាមដាន",
        "watchthispage": "តាមដានទំព័រនេះ",
        "movenotallowedfile": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងឯកសារនានាទេ។",
        "cant-move-user-page": "អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យប្ដូរទីតាំងទំព័រអ្នកប្រើប្រាស់នានា(ដាច់ពីអនុទំព័ររបស់វា)ទេ។",
        "cant-move-to-user-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រអ្នកប្រើប្រាស់មួយទេ (លើកលែងតែទៅកាន់ទំព័ររងមួយ)។",
+       "cant-move-category-page": "អ្នកមិនត្រូវបាន​អនុញ្ញាត​ឱ្យ​ប្តូរទីតាំងទំព័រចំណាត់ថ្នាក់ក្រុម​ទេ។",
+       "cant-move-to-category-page": "អ្នកគ្មានការអនុញ្ញាតអោយប្ដូរទីតាំងទំព័រមួយទៅកាន់ទំព័រចំណាត់ថ្នាក់ក្រុមមួយទេ។",
        "newtitle": "ទៅចំណងជើងថ្មី៖",
        "move-watch": "តាមដានទំព័រនេះ",
        "movepagebtn": "ប្ដូរទីតាំង",
        "thumbnail-temp-create": "មិនអាចបង្កើតឯកសារកូនរូបភាពបណ្ដោះអាសន្ន",
        "thumbnail-dest-create": "មិនអាចរក្សាទុកកូនរូបភាពនៅទីតាំងគោលដៅបានទេ",
        "thumbnail_invalid_params": "តួលេខ កូនទំព័រ គ្មានសុពលភាព",
+       "thumbnail_toobigimagearea": "ឯកសារដែលមានវិមាត្រធំជាង $1",
        "thumbnail_dest_directory": "មិនអាចបង្កើតថតឯកសារតាមគោលដៅបានទេ",
        "thumbnail_image-type": "មិនស្គាល់ប្រើជាមួយឯកសារប្រភេទនេះទេ",
        "thumbnail_image-missing": "ឯកសារហាក់ដូចជាកំពុងបាត់ខ្លួន៖$1",
        "import": "ការនាំចូលទំព័រ",
-       "importinterwiki": "á\9e\80á\9e¶á\9e\9aá\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e¢á\9e\93á\9f\92á\9e\8fá\9e\9aá\9e\9cá\9e·á\9e\82á\9e¸",
+       "importinterwiki": "á\9e\80á\9e¶á\9e\9aá\9e\93á\9e¶á\9f\86á\9e\85á\9e¼á\9e\9bá\9e\96á\9e¸á\9e\9cá\9e·á\9e\82á\9e¸á\9e\8aá\9e\91á\9f\83",
        "import-interwiki-sourcewiki": "វិគីប្រភព៖",
        "import-interwiki-sourcepage": "ទំព័រប្រភព៖",
        "import-interwiki-history": "ចម្លង គ្រប់កំណែចាស់ នៃទំព័រនេះ",
        "tooltip-pt-logout": "កត់ឈ្មោះចេញ",
        "tooltip-pt-createaccount": "អ្នកត្រូវបានលើកទឹកចិត្តបង្កើតគណនីនិងកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។",
        "tooltip-ca-talk": "ការពិភាក្សា​អំពីទំព័រខ្លឹមសារ​នេះ",
-       "tooltip-ca-edit": "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85â\80\8bá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\93á\9f\81á\9f\87 á\9f\94 á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\94á\9f\8aá\9e¼á\9e\8fá\9e»á\9e\84 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¾á\9e\9bá\9e\98á\9e»á\9e\93' á\9e\98á\9e»á\9e\93á\9e\93á\9e¹á\9e\84â\80\8bá\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\91á\9e»á\9e\80â\80\8bá\9e\9cá\9e¶  á\9f\94",
+       "tooltip-ca-edit": "á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87",
        "tooltip-ca-addsection": "ចាប់​ផ្ដើមផ្នែកថ្មីមួយក្នុងទំព័រពិភាក្សានេះ",
        "tooltip-ca-viewsource": "ទំព័រ​នេះ​បានត្រូវការពារ ។ អ្នកអាច​មើល​អក្សរកូដ​របស់វាបាន ។",
        "tooltip-ca-history": "កំណែកន្លងមករបស់ទំព័រនេះ ។",
        "pageinfo-protect-cascading-yes": "បាទ/ចាស",
        "pageinfo-protect-cascading-from": "ការការពារត្រូវបានដាក់ជាថ្នាក់ពី",
        "pageinfo-category-info": "ព័ត៌មានចំណាត់ថ្នាក់ក្រុម",
+       "pageinfo-category-total": "ចំនួនសមាជិកសរុប",
        "pageinfo-category-pages": "ចំនួនទំព័រ",
        "pageinfo-category-subcats": "ចំនួនកូនចំណាត់ថ្នាក់ក្រុម",
        "pageinfo-category-files": "ចំនួនឯកសារ",
        "markaspatrolleddiff": "ចំណាំថាបានល្បាត",
        "markaspatrolledtext": "ចំណាំទំព័រនេះថាបានល្បាត",
        "markedaspatrolled": "បានចំណាំថាបានល្បាត",
-       "rcpatroldisabled": "á\9e\94á\9f\86លាស់ប្តូរថ្មីៗនៃការតាមដានមិនត្រូវបានអនុញ្ញាតទេ",
+       "rcpatroldisabled": "á\9e\94á\9e\93á\9f\92លាស់ប្តូរថ្មីៗនៃការតាមដានមិនត្រូវបានអនុញ្ញាតទេ",
        "markedaspatrollederror": "មិនអាចគូសចំណាំថាបានល្បាត",
        "patrol-log-page": "កំណត់ហេតុនៃការតាមដាន",
        "patrol-log-header": "នេះជាកំណត់ហេតុនៃកំណែ​ប្រែ​ដែល​បាន​តាមដាន",
        "newimages-summary": "ទំព័រពិសេសនេះបង្ហាញឯកសារដែលផ្ទុកឡើងចុងក្រោយគេ។",
        "newimages-legend": "តម្រងការពារ",
        "newimages-label": "ឈ្មោះរូបភាព៖",
-       "noimages": "គ្មានអ្វីសំរាប់មើលទេ។",
+       "newimages-showbots": "បង្ហាញការផ្ទុកឡើងដោយរូបយន្ត",
+       "noimages": "គ្មានអ្វីសម្រាប់មើលទេ។",
        "ilsubmit": "ស្វែងរក",
        "bydate": "តាមកាលបរិច្ឆេទ",
        "sp-newimages-showfrom": "បង្ហាញឯកសារថ្មីៗចាប់ពី$2 $1",
        "months": "{{PLURAL:$1|$1 ខែ|$1 ខែ}}",
        "years": "{{PLURAL:$1|$1 ឆ្នាំ|$1 ឆ្នាំ}}",
        "ago": "$1 មុន",
-       "just-now": "á\9e¢á\9f\86បាញ់មិញនេះ",
+       "just-now": "á\9e¢á\9e\98á\9f\92បាញ់មិញនេះ",
        "hours-ago": "$1 {{PLURAL:$1|ម៉ោង|ម៉ោង}}មុន",
        "minutes-ago": "$1 {{PLURAL:$1|នាទី|នាទី}}មុន",
        "seconds-ago": "$1 {{PLURAL:$1|វិនាទី|វិនាទី}}មុន",
        "exif-bitspersample": "",
        "exif-orientation": "ទិស",
        "exif-planarconfiguration": "ការរៀបចំទិន្នន័យ",
-       "exif-xresolution": "Resolution ផ្ដេក (Horizontal resolution)",
-       "exif-yresolution": "Resolution បញ្ឈរ​ (Vertical resolution)",
+       "exif-xresolution": "ភាពម៉ត់ផ្ដេក",
+       "exif-yresolution": "ភាពម៉ត់បញ្ឈរ​",
        "exif-stripoffsets": "ទីតាំងទិន្នន័យរូបភាព",
        "exif-jpeginterchangeformatlength": "ទំហំជាបៃនៃទិន្នន័យJPEG",
        "exif-datetime": "កាលបរិច្ឆេទ​និង​ពេលវេលា​នៃ​ការផ្លាស់ប្តូរ​​ឯកសារ",
        "confirm-watch-top": "បន្ថែមទំព័រនេះ​ទៅក្នុងបញ្ជីតាមដាន​របស់អ្នកឬ?",
        "confirm-unwatch-button": "យល់ព្រម",
        "confirm-unwatch-top": "ដកទំព័រនេះចេញពីបញ្ជីតាមដានរបស់ខ្ញុំឬ?",
+       "quotation-marks": "«$1»",
        "imgmultipageprev": "← ទំព័រមុន",
        "imgmultipagenext": "ទំព័របន្ទាប់ →",
        "imgmultigo": "ទៅ!",
        "imgmultigoto": "ទៅកាន់ទំព័រ$1",
+       "img-lang-default": "(ភាសាតាមលំនាំដើម)",
+       "img-lang-info": "បង្ហាញរូបភាពនេះជា$1។ $2",
        "img-lang-go": "ទៅ",
        "ascending_abbrev": "លំដាប់ឡើង",
        "descending_abbrev": "លំដាប់ចុះ",
        "size-kilobytes": "$1គីឡូបៃ",
        "size-megabytes": "$1មេកាបៃ",
        "size-gigabytes": "$1ជីកាបៃ",
-       "lag-warn-normal": "á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\90á\9f\92á\9e\98á\9e¸á\9e\87á\9e¶á\9e\84 {{PLURAL:$1|second|á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸}}អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
+       "lag-warn-normal": "á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\80á\9f\92á\9e\9aá\9f\84á\9e\99 {{PLURAL:$1|á\9e\98á\9e½á\9e\99á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸|á\9e\9cá\9e·á\9e\93á\9e¶á\9e\91á\9e¸}}á\9e\98á\9e»á\9e\93 អាចមិនត្រូវបានបង្ហាញក្នុងបញ្ជីនេះ​។",
        "lag-warn-high": "ដោយសារប្រព័ន្ធបំរើការមូលដ្ឋានទិន្នន័យមានភាពយឺតយ៉ាវខ្លាំង បន្លាស់ប្ដូរដែលថ្មីជាង $1 វិនាទីមិនអាចបង្ហាញនៅក្នុងបញ្ជីនេះបានទេ។",
        "watchlistedit-normal-title": "កែប្រែបញ្ជីតាមដាន",
        "watchlistedit-normal-legend": "ដកចំណងជើងចេញពីបញ្ជីតាមដាន",
        "watchlistedit-raw-removed": "{{PLURAL:$1|១ចំណងជើងបានត្រូវ|$1ចំណងជើងបានត្រូវ}}ដកចេញ៖",
        "watchlistedit-clear-title": "បានសម្អាតបញ្ចីតាមដាន",
        "watchlistedit-clear-legend": "សម្អាតបញ្ជីតាមដាន",
+       "watchlistedit-clear-explain": "ចំណងជើងទាំងអស់នេះនឹងត្រូវលុបចេញពីបញ្ជីតាមដានរបស់អ្នក",
+       "watchlistedit-clear-titles": "ចំណងជើង៖",
+       "watchlistedit-clear-submit": "សម្អាតបញ្ជីតាមដាន (មិនអាចត្រឡប់វិញបានទេ!)",
+       "watchlistedit-clear-done": "បញ្ជីតាមដានរបស់អ្នកត្រូវបានសម្អាតហើយ។",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|ចំណងជើងមួយ|ចំណងជើងចំនួួន $1}} ត្រូវបានលុបចោល៖",
+       "watchlistedit-too-many": "ទំព័រមានច្រើនពេកមិនអាចបង្ហាញអស់នៅទីនេះទេ។",
+       "watchlisttools-clear": "សម្អាតបញ្ជីតាមដាន",
        "watchlisttools-view": "មើលបន្លាស់ប្ដូរពាក់ព័ន្ធ",
        "watchlisttools-edit": "មើលនិងកែប្រែបញ្ជីតាមដាន",
        "watchlisttools-raw": "កែប្រែបញ្ជីតាមដានឆៅ",
        "specialpages-group-maintenance": "របាយការណ៍នានាអំពីតំហែទាំ",
        "specialpages-group-other": "ទំព័រពិសេសៗផ្សេងៗទៀត",
        "specialpages-group-login": "កត់ឈ្មោះចូល / បង្កើតគណនី",
-       "specialpages-group-changes": "á\9e\94á\9f\86លាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ",
+       "specialpages-group-changes": "á\9e\94á\9e\93á\9f\92លាស់ប្តូរថ្មីៗនិងកំណត់ហេតុ",
        "specialpages-group-media": "របាយការណ៍មេឌានិងការផ្ទុកឯកសារ",
        "specialpages-group-users": "អ្នកប្រើប្រាស់និងសិទ្ធិ",
        "specialpages-group-highuse": "ទំព័រដែលត្រូវបានប្រើច្រើន",
        "compare-title-not-exists": "ចំណងជើងដែលអ្នកផ្ដល់អោយមិនមានទេ។",
        "dberr-problems": "សូមអភ័យទោស! វិបសាយនេះកំពុងជួបបញ្ហាបច្ចេកទេស។",
        "dberr-again": "សូមរង់ចាំប៉ុន្មាននាទីសិនហើយផ្ទុកឡើងវិញម្ដងទៀត។",
-       "dberr-info": "(មិនអាចទាក់ទងទៅប្រភពទិន្នន័យរបស់ប្រព័ន្ធបំរើការបានទេ៖ $1)",
+       "dberr-info": "(មិនអាចទាក់ទងទៅប្រភពទិន្នន័យបានទេ៖ $1)",
+       "dberr-info-hidden": "(មិនអាចទាក់ទងទៅប្រភពទិន្នន័យបានទេ)",
        "dberr-usegoogle": "អ្នកអាចសាកស្វែងរកតាមរយៈហ្គូហ្គល(Google)ជាបណ្ដោះអាសន្នសិន។",
        "dberr-outofdate": "សូមចំណាំ​​ថា​ លិបិក្រម​នៃ​មាតិការ​របស់យើងប្រហែលជាហួស​សម័យ​។​",
        "dberr-cachederror": "នេះ​គឺ​ជា​ច្បាប់​ចម្លង​ដែលបាន​ដាក់ទៅសតិភ្ជាប់នៃ​ទំព័រ​ដែលបានស្នើសុំ​ និងប្រហែលជាមិនទាន់សម័យ។",
        "feedback-subject": "កម្មវត្ថុ ៖",
        "feedback-submit": "ដាក់ស្នើ",
        "feedback-thanks": "សូមអរគុណ! មតិយោបល់របស់អ្នកត្រូវបានដាក់ផ្សាយនៅលើទំព័រ \"[$2 $1]\"។",
+       "feedback-thanks-title": "សូមអរគុណ!",
        "searchsuggest-search": "ស្វែងរក​",
        "searchsuggest-containing": "ដែលមានពាក្យ...",
        "api-error-badaccess-groups": "អ្នកគ្មានការអនុញ្ញាតអោយផ្ទុកឯកសារឡើងទៅក្នុងវិគីនេះទេ។",
        "expand_templates_ok": "យល់ព្រម",
        "expand_templates_remove_comments": "ដកចេញ វិចារនានា",
        "expand_templates_preview": "បង្ហាញការមើលជាមុន",
+       "pagelanguage": "ឧបករណ៍ជ្រើសរើសភាសាទំព័រ",
+       "pagelang-language": "ភាសា",
+       "pagelang-use-default": "ប្រើភាសាតាមលំនាំដើម",
+       "right-pagelang": "ប្ដូរភាសាទំព័រ",
+       "log-name-pagelang": "កំណត់ហេតុបន្លាស់ប្ដូរភាសា",
+       "log-description-pagelang": "នេះជាកំណត់ហេតុបន្លាស់ប្ដូរភាសាទំព័រ។",
        "special-characters-group-latin": "អក្សរឡាតាំង",
        "special-characters-group-latinextended": "អក្សរឡាតាំងផ្សេងទៀត",
        "special-characters-group-ipa": "អក្ខរក្រមសំលេងអន្តរជាតិ",
        "special-characters-group-thai": "អក្សរថៃ",
        "special-characters-group-lao": "អក្សរឡាវ",
        "special-characters-group-khmer": "អក្សរខ្មែរ",
-       "special-characters-title-minus": "សញ្ញាដក"
+       "special-characters-title-minus": "សញ្ញាដក",
+       "mw-widgets-dateinput-no-date": "គ្មានកាលបរិច្ឆេទត្រូវបានជ្រើសរើស",
+       "mw-widgets-titleinput-description-new-page": "ទំព័រមិនទាន់មាននៅឡើយទេ",
+       "mw-widgets-titleinput-description-redirect": "បញ្ជូនបន្តទៅ $1"
 }
index a50a321..8176256 100644 (file)
@@ -24,7 +24,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Pavanaja",
-                       "Ananth subray"
+                       "Ananth subray",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "ಕೊಂಡಿಗಳ ಕೆಳಗೆ ಗೆರೆ ತೋರಿಸಿ",
        "hiddencategories": "ಈ ಪುಟವು {{PLURAL:$1|೧ ಗುಪ್ತ ವರ್ಗಕ್ಕೆ|$1 ಗುಪ್ತ ವರ್ಗಗಳಿಗೆ}} ಸೇರಿದೆ:",
        "nocreatetext": "{{SITENAME}} ಅಲ್ಲಿ ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ಕೆಲವು ನಿಬಂಧನೆಗಳಿವೆ.\nನೀವು ಹಿಂದಿರುಗಿ ಆಗಲೇ ಅಸ್ಥಿತ್ವದಲ್ಲಿರುವ ಪುಟವೊಂದನ್ನು ಸಂಪಾದಿಸಿ, ಅಥವ [[Special:UserLogin|ಲಾಗ್ ಇನ್ ಆಗಿ ಅಥವ ಹೊಸ ಸದಸ್ಯರಾಗಿ]].",
        "nocreate-loggedin": "ಹೊಸ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ.",
+       "sectioneditnotsupported-title": "ವಿಭಾಗ ಸಂಪಾದನೆಗೆ ಬೆಂಬಲವಿಲ್ಲ",
+       "sectioneditnotsupported-text": "ಈ ಪುಟದಲ್ಲಿ ವಿಭಾಗ ಸಂಪಾದನೆಗೆ ಬೆಂಬಲವಿಲ್ಲ.",
        "permissionserrors": "ಅನುಮತಿ ದೋಷ",
        "permissionserrorstext": "ನಿಮಗೆ ಅದನ್ನು ಮಾಡಲು ಅನುಮತಿ ಇಲ್ಲ, ಅದಕ್ಕೆ {{PLURAL:$1|ಕಾರಣ|ಕಾರಣಗಳು}}:",
        "permissionserrorstext-withaction": "$2 ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ, ಅದಕ್ಕೆ {{PLURAL:$1|ಕಾರಣ|ಕಾರಣಗಳು}}:",
        "recreate-moveddeleted-warn": "'''ಎಚ್ಚರಿಕೆ: ಹಿಂದೆ ಅಳಿಸಲಾದ ಪುಟವನ್ನು ನೀವು ಮತ್ತೆ ಸೃಷ್ಟಿಸುತ್ತಿರುವಿರಿ.'''\n\nಈ ಪುಟವನ್ನು ಸಂಪಾದಿಸಲು ಸಮರ್ಪಕ ಕಾರಣವಿದೆಯೆ ಎಂದು ದಯವಿಟ್ಟು ಆಲೋಚಿಸಿ.\nಪುಟದ ಅಳಿಸುವಿಕೆ ದಿನಚರಿಯನ್ನು ಈ ಕೆಳಗೆ ನೀಡಲಾಗಿದೆ:",
        "moveddeleted-notice": "ಈ ಪುಟವು ಅಳಿಸಲ್ಪಟ್ಟಿದೆ.\nಈ ಪುಟದ ಅಳಿಸುವಿಕೆಯ ದಾಖಲೆಯನ್ನು ಕೆಳಗೆ ತೋರಿಸಲಾಗಿದೆ.",
+       "log-fulllog": "ಪೂರ್ಣ ದಾಖಲೆ ವೀಕ್ಷಿಸಿ",
+       "edit-hook-aborted": "ಕೊಕ್ಕೆ ಸ್ಥಗಿತಗೊಳಿಸಲಾಗಿದೆ ಸಂಪಾದಿಸಿ .\nಇದು ಯಾವುದೇ ವಿವರಣೆ ನೀಡಿದರು .",
        "edit-gone-missing": "ಪುಟವನ್ನು ಪ್ರಸ್ತುತಗೊಳಿಸಲು ಸಾದ್ಯವಿಲ್ಲ, ಪುಟವು ಬಹುಶ: ಅಳಿಸಲ್ಪಟ್ಟಿರಬಹುದು",
        "edit-conflict": "ಸಂಪಾದನಾ ಘರ್ಷಣೆ.",
        "edit-no-change": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಕಡೆಗಣಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಪಠ್ಯದಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆ ಮಾಡಲಾಗಿಲ್ಲ್ಲ",
+       "postedit-confirmation-created": "ಈ ಪುಟ ಸೃಷ್ಟಿಸಲಾಗಿದೆ.",
+       "postedit-confirmation-restored": "ಪುಟವನ್ನು ಪುನಃಸ್ಥಾಪಿಸಲಾಗಿದೆ.",
        "postedit-confirmation-saved": "ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗಿದೆ.",
        "edit-already-exists": "ಹೊಸ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗಲಿಲ್ಲ.\nಅದು ಆಗಲೆ ಅಸ್ಥಿತ್ವದಲ್ಲಿದೆ.",
        "content-model-wikitext": "ವಿಕಿ ಪಠ್ಯ",
        "history-feed-description": "ವಿಕಿಯ ಈ ಪುಟದ ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ",
        "history-feed-item-nocomment": "$1 $2 ಅಲ್ಲಿ",
        "history-feed-empty": "ನೀವು ಕೋರಿರುವ ಪುಟ ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇಲ್ಲ.\nಅದು ವಿಕಿಯಿಂದ ಅಳಿಸಲ್ಪಟ್ಟಿರಬಹುದು ಅಥವ ಪುನರ್ನಾಮಕಾರಣಗೊಂಡಿರಬಹುದು.\nಸಂಬಂಧಿತ ಹೊಸ ಪುಟಗಳನ್ನು [[Special:Search|ಹುಡುಕಲು ಪ್ರಯತ್ನಿಸಿ]].",
-       "rev-deleted-comment": "(ಕಮೆ೦ಟ್ ತೆಗೆದು ಹಾಕಲಾಗಿದೆ)",
+       "rev-deleted-comment": "ಬದಲಾಯಿಸಿದ ಸಾರಾಂಶ ತೆಗೆದುಹಾಕಲಾಗಿದೆ",
        "rev-deleted-user": "(ಬಳಕೆದಾರ ಹೆಸರು ತಗೆಯಲ್ಪಟ್ಟಿದೆ)",
        "rev-deleted-event": "(ದಾಖಲೆ ಕ್ರಿಯೆ ತೆಗೆಯಲಾಯಿತು)",
        "rev-delundel": "ತೋರಿಸು/ಅಡಗಿಸು",
        "rev-showdeleted": "ತೋರಿಸು",
        "revdelete-show-file-submit": "ಹೌದು",
        "revdelete-legend": "ಕಾಣಿಸುವಿಕೆಯ ನಿಬಂಧನೆಗಳನ್ನು ನಿಶ್ಚಯಿಸು",
-       "revdelete-hide-text": "ಬದಲಾವಣà³\86ಯ à²ªà² à³\8dಯವನà³\8dನà³\81 à²\85ಡà²\97ಿಸà³\81",
+       "revdelete-hide-text": "ಪರಿಷà³\8dà²\95ರಣà³\86 à²ªà² à³\8dಯ",
        "revdelete-hide-image": "ಫೈಲಿನಲ್ಲಿರುವ ಮಾಹಿತಿಯನ್ನು ಅಡಗಿಸು",
        "revdelete-hide-name": "ಕಾರ್ಯ ಮತ್ತು ಗುರಿಗಳನ್ನು ಅಡಗಿಸು",
        "revdelete-hide-comment": "ಸಾರಾಂಶವನು ಬದಲಾಯಿಸಿ",
-       "revdelete-hide-user": "ಸà²\82ಪಾದà²\95ರ à²¬à²³à²\95à³\86ಯ à²¹à³\86ಸರà³\81/IP à²\85ಡà²\97ಿಸà³\81",
-       "revdelete-hide-restricted": "à²\88 à²¨à²¿à²¬à²\82ಧನà³\86à²\97ಳನà³\8dನà³\81 à²¨à²¿à²°à³\8dವಾಹà²\95ರಿà²\97à³\82 à²\85ನà³\8dವಯಿಸà³\81 à²®à²¤à³\8dತà³\81 à²\88 interface à²\97à³\86 à²¬à³\80à²\97 à²¹à²¾à²\95ು",
+       "revdelete-hide-user": "ಸà²\82ಪಾದà²\95ರ à²¬à²³à²\95à³\86ಯ à²¹à³\86ಸರà³\81/IP à²µà²¿à²³à²¾à²¸",
+       "revdelete-hide-restricted": "ನಿರà³\8dವಾಹà²\95ರಿà²\82ದ à²®à²¤à³\8dತಿತರರಿà²\82ದ à²¬à²\82ದ à²®à²¾à²¹à²¿à²¤à²¿à²¯à²¨à³\8dನà³\81 à²\85ಡà²\97ಿಸು",
        "revdelete-radio-same": "(ಬದಲಾಯಿಸಬೇಡಿ)",
        "revdelete-radio-set": "ಅಡಗಿದ",
-       "revdelete-radio-unset": "à²\87ಲà³\8dಲ",
+       "revdelete-radio-unset": "à²\97à³\8bà²\9aರ",
        "revdelete-suppress": "ನಿರ್ವಾಹಕರಿಂದ ಮತ್ತಿತರರಿಂದ ಬಂದ ಮಾಹಿತಿಯನ್ನು ಅಡಗಿಸು",
        "revdelete-unsuppress": "ಪುನಃ ಸ್ಥಾಪಿಸಿದ ಬದಲಾವಣೆಗಳ ಮೇಲಿನ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆ",
        "revdelete-log": "ಕಾರಣ:",
-       "revdelete-submit": "ಆಯ್ಕೆ ಮಾಡಿದ ಬದಲಾವಣೆಗೆ ಅನ್ವಯಿಸು",
+       "revdelete-submit": "ಆಯ್ಕೆ ಮಾಡಿದ ಬದಲಾವಣೆಗೆ ಅನ್ವಯಿಸು{{PLURAL:$1|revision|revisions}}",
        "revdel-restore": "ಕಾಣಿಸುವಿಕೆಯನ್ನು ಬದಲಾಯಿಸು",
        "pagehist": "ಪುಟದ ಇತಿಹಾಸ",
        "deletedhist": "ಅಳಿಸಲ್ಪಟ್ಟ ಇತಿಹಾಸ",
        "compareselectedversions": "ಆಯ್ಕೆ ಮಾಡಿದ ಆವೃತ್ತಿಗಳನ್ನು ಹೊಂದಾಣಿಕೆ ಮಾಡಿ ನೋಡಿ",
        "showhideselectedversions": "ಆಯ್ದ ಆವೃತ್ತಿಗಳನ್ನು ತೋರಿಸು/ಅಡಗಿಸು",
        "editundo": "ಹಿಂದಿನಂತೆ",
+       "diff-empty": "( ಯಾವುದೇ ವ್ಯತ್ಯಾಸವಿಲ್ಲ )",
        "searchresults": "ಶೋಧನೆಯ ಫಲಿತಾಂಶಗಳು",
        "searchresults-title": "\"$1\" ಅನ್ನು ಹುಡುಕಿದ ಫಲಿತಾಂಶಗಳು",
        "titlematches": "ಹೊಂದಿಕೆಯಿರುವ ಪುಟ ಶೀರ್ಷಿಕೆಗಳು",
        "notextmatches": "ಯಾವ ಪುಟದ ಪಠ್ಯದಲ್ಲೂ ಹೋಲಿಕೆಗಳಿಲ್ಲ",
        "prevn": "ಹಿಂದಿನ {{PLURAL:$1|$1}}",
        "nextn": "ಮುಂದಿನ {{PLURAL:$1|$1}}",
+       "prev-page": "ಹಿಂದಿನ ಪುಟ",
+       "next-page": "ಮುಂದಿನ ಪುಟ",
        "prevn-title": "ಹಿಂದಿನ $1 {{PLURAL:$1|ಫಲಿತಾಂಶ|ಫಲಿತಾಂಶಗಳು}}",
        "nextn-title": "ಮುಂದಿನ $1 {{PLURAL:$1|ಫಲಿತಾಂಶ|ಫಲಿತಾಂಶಗಳು}}",
        "shown-title": "ಪ್ರತಿ ಪುಟದಲ್ಲಿಯೂ $1 {{PLURAL:$1|result|results}} ತೋರಿಸು",
        "search-section": "(ವಿಭಾಗ $1)",
        "search-suggest": "ನೀವು ಇದನ್ನು ಹುಡುಕುತ್ತಿರುವಿರೆ: $1",
        "search-interwiki-caption": "ಬಳಗದ ಇತರ ಯೋಜನೆಗಳು",
-       "search-interwiki-default": "$1 ಫಲಿತಾಂಶಗಳು:",
+       "search-interwiki-default": "ಫಲಿತಾಂಶಗಳು $1:",
        "search-interwiki-more": "(ಹೆಚ್ಚು)",
        "search-relatedarticle": "ಸಂಬಂಧಿತ",
        "searchrelated": "ಸಂಬಂಧಿತ",
        "prefs-skin": "ಚರ್ಮ",
        "skin-preview": "ಮುನ್ನೋಟ",
        "datedefault": "ಯಾವುದೇ ಪ್ರಾಶಸ್ತ್ಯ ಇಲ್ಲ",
+       "prefs-labs": "ಲ್ಯಾಬ್ಸ್ ವೈಶಿಷ್ಟ್ಯಗಳು",
        "prefs-user-pages": "ಸದಸ್ಯರ ಪುಟಗಳು",
        "prefs-personal": "ಬಳಕೆದಾರರ ಬಗ್ಗೆ",
        "prefs-rc": "ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳು",
        "prefs-watchlist": "ವೀಕ್ಷಣಾಪಟ್ಟಿ",
+       "prefs-editwatchlist": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ಸಂಪಾದಿಸು",
        "prefs-watchlist-days": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸಲಾಗುವ ದಿನಗಳು:",
        "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "prefs-watchlist-edits": "ವಿಸ್ತೃತ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ತೋರಿಸಬೇಕಾದ ಗರಿಷ್ಠ ಬದಲಾವಣೆಗಳು:",
        "prefs-changeemail": "ಮಿಂಚಂಚೆ ವಿಳಾಸವನ್ನು ಬದಲಾಯಿಸಿ",
        "prefs-setemail": "ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಸ್ಥಾಪಿಸಿ",
        "prefs-email": "ಇ-ಅಂಚೆ ಇಚ್ಛೆಗಳು",
+       "prefs-rendering": "ಗೋಚರ",
        "saveprefs": "ಉಳಿಸಿ",
        "prefs-editing": "ಸಂಪಾದನೆ",
        "rows": "ಸಾಲುಗಳು:",
        "savedprefs": "ನಿಮ್ಮ ಇಚ್ಛೆಗಳನ್ನು ಉಳಿಸಲಾಯಿತು.",
        "timezonelegend": "ಸಮಯ ವಲಯ:",
        "localtime": "ಸ್ಥಳೀಯ ಸಮಯ:",
-       "servertime": "ಸರ್ವರ್ ಕಾಲ",
+       "servertime": "ಸರ್ವರ್ ಕಾಲ:",
        "guesstimezone": "ಬ್ರೌಸರ್ ಇಂದ ತುಂಬು",
        "timezoneregion-africa": "ಆಫ್ರಿಕ",
        "timezoneregion-america": "ಅಮೇರಿಕ",
        "prefs-namespaces": "ನಾಮವರ್ಗಗಳು",
        "default": "ಮೂಲಸ್ಥಿತಿ",
        "prefs-files": "ಫೈಲುಗಳು",
+       "prefs-custom-css": "ಕಸ್ಟಮ್ ಸಿಎಸ್ಎಸ್",
+       "prefs-custom-js": "ಕಸ್ಟಮ್ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್",
+       "prefs-emailconfirm-label": "ಮಿಂಚಂಚೆ ದೃಢೀಕರಣ",
        "youremail": "ಇ-ಅಂಚೆ:",
-       "username": "ಸದಸ್ಯತ್ವದ ಹೆಸರು:",
+       "username": "{{GENDER:$1|ಸದಸ್ಯತ್ವದ ಹೆಸರು}}:",
        "prefs-memberingroups": "ಈ {{PLURAL:$1|ಗುಂಪಿನ|ಗುಂಪುಗಳ}} ಸದಸ್ಯ:",
+       "prefs-registration": "ನೋಂದಣಿ ಸಮಯ:",
        "yourrealname": "ನಿಜ ಹೆಸರು:",
        "yourlanguage": "ಭಾಷೆ:",
        "yournick": "ಸಹಿ:",
        "prefs-i18n": "ಅಂತರರಾಷ್ಟ್ರೀಕರಣ",
        "prefs-signature": "ಸಹಿ",
        "prefs-dateformat": "ದಿನಾಂಕ ಶೈಲಿ",
-       "prefs-advancedediting": "ಪರಿಣತ à²\87à²\9aà³\8dà²\9bೆಗಳು",
+       "prefs-advancedediting": "ಸಾಮಾನà³\8dಯ à²\86ಯà³\8dà²\95ೆಗಳು",
        "prefs-editor": "ಸಂಪಾದಕ",
        "prefs-preview": "ಮುನ್ನೋಟ",
        "prefs-advancedrc": "ಪರಿಣತ ಇಚ್ಛೆಗಳು",
        "group-all": "(ಎಲ್ಲವೂ)",
        "group-user-member": "ಬಳಕೆದಾರ",
        "group-autoconfirmed-member": "ಸ್ವಧೃಡೀಕೃತ ಬಳಕೆದಾರ",
-       "group-bot-member": "ಬಾಟ್",
-       "group-sysop-member": "ನಿರ್ವಾಹಕ",
+       "group-bot-member": "{{ಲಿಂಗ:$1|ಬೋಟ್}}",
+       "group-sysop-member": "{{ಲಿಂಗ:$1|ಮಾಜಿ ಆಡಳಿತಗಾರ}}",
        "group-bureaucrat-member": "ಮೇಲ್ವಿಚಾರಕ",
        "group-suppress-member": "ನಿಗ ಇಡುವವ",
        "grouppage-user": "{{ns:project}}:ಬಳಕೆದಾರರು",
        "right-deletedtext": "ಆಳಿಸಿದ ಪಠ್ಯ ಮತ್ತು ಅಳಿಸಿದ ಆವೃತ್ತಿಗಳ ನಡುವಿನ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "right-browsearchive": "ಅಳಿಸಲಾಗಿರುವ ಪುಟಗಳನ್ನು ಹುಡುಕಿ",
        "right-undelete": "ಆಳಿಸಿದ ಪುಟವನ್ನು ಉಳಿಸಿ",
+       "right-suppressionlog": "ಖಾಸಗಿ ದಾಖಲೆಗಳು ವೀಕ್ಷಿಸಿ",
        "right-block": "ಬೇರೆ ಬಳಕೆದಾರರು ಸಂಪಾದಿಸದಂತೆ ನಿರ್ಬಂಧಿಸು",
        "right-blockemail": "ಬಳಕೆದಾರನು ಇ-ಅಂಚೆ ಕಳುಹಿಸುವುದನ್ನು ತಡೆಗಟ್ಟು",
+       "right-editmyoptions": "ನಿಮ್ಮ ಆದ್ಯತೆಗಳನ್ನು ಸಂಪಾದಿಸಿ",
        "right-import": "ಬೇರೆ ವಿಕಿಗಳಿಂದ ಪುಟಗಳನ್ನು ಆಮದು ಮಾಡು",
        "right-unwatchedpages": "ಪಹರೆಯಿಲ್ಲದ ಪುಟಗಳ ಪಟ್ಟಿಯನ್ನು ವೀಕ್ಷಿಸಿ",
        "right-mergehistory": "ಪುಟಗಳು ಇತಿಹಾಸದಲ್ಲಿ ವಿಲೀನಗೊಳಿಸಿ",
        "action-createpage": "ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸು",
        "action-createtalk": "ಚರ್ಚಾ ಪುಟಗಳನ್ನು ಸೃಷ್ಟಿಸು",
        "action-createaccount": "ಈ ಬಳಕೆದಾರ ಖಾತೆಯನ್ನು ರಚಿಸಿ",
+       "action-history": "ಈ ಪುಟದ ಇತಿಹಾಸವನ್ನು ವೀಕ್ಷಿಸಿ",
        "action-minoredit": "ಈ ತಿದ್ದುಪಡಿಯನ್ನು ಚಿಕ್ಕದೆಂದು ಗುರುತಿಸಿ",
        "action-move": "ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
        "action-move-subpages": "ಈ ಪುಟವನ್ನು ಮತ್ತು ಅದರ ಉಪಪುಟಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
        "action-deleterevision": "ಈ ಆವೃತ್ತಿಯನ್ನು ಅಳಿಸು",
        "action-browsearchive": "ಅಳಿಸಲಾಗಿರುವ ಪುಟಗಳನ್ನು ಹುಡುಕು",
        "action-undelete": "ಈ ಪುಟವನ್ನು ಅಳಿಸಬೇಡ",
+       "action-suppressionlog": "ಖಾಸಗಿ ದಾಖಲೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
        "action-block": "ಈ ಸದಸ್ಯರನ್ನು ಸಂಪಾದಿಸಲು ಆಗದಂತೆ ನಿರ್ಭಂಧಿಸಿ",
        "action-protect": "ಈ ಪುಟದ ಸಂರಕ್ಷಣೆ ಮಟ್ಟಗಳನ್ನು ಬದಲಾಯಿಸಲು",
        "action-import": "ಇನ್ನೊಂದು ವಿಕಿಯಿಂದ ಪುಟಗಳನ್ನು ಆಮದು ಮಾಡು",
        "rc_categories_any": "ಯಾವುದೇ",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ಬದಲಾವಣೆಯ ನಂತರ",
        "newsectionsummary": "/* $1 */ ಹೊಸ ವಿಭಾಗ",
-       "rc-enhanced-expand": "ವಿವರಗಳನ್ನು ತೋರಿಸು (JavaScript ಬೇಕಾಗುತ್ತದೆ)",
+       "rc-enhanced-expand": "ವಿವರಗಳನ್ನು ತೋರಿಸು",
        "rc-enhanced-hide": "ವಿವರಗಳನ್ನು ಅಡಗಿಸು",
        "recentchangeslinked": "ಸಂಬಂಧಪಟ್ಟ ಬದಲಾವಣೆಗಳು",
        "recentchangeslinked-feed": "ಸಂಬಂಧಪಟ್ಟ ಬದಲಾವಣೆಗಳು",
        "sourcefilename": "ಮೂಲ ಫೈಲಿನ ಹೆಸರು:",
        "upload-maxfilesize": "ಗರಿಷ್ಠ ಫೈಲು ಗಾತ್ರ: $1",
        "upload-description": "ಕಡತ ವಿವರಣೆ",
+       "upload-options": "ಅಪ್ಲೋಡ್ ಆಯ್ಕೆಗಳು",
        "watchthisupload": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
        "filewasdeleted": "ಈ ಹೆಸರಿನ ಫೈಲು ಮುಂಚೆ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿ ಅದನ್ನು ಆನಂತರ ಅಳಿಸಲಾಗಿತ್ತು.\nಇದನ್ನು ಮತ್ತೊಮ್ಮೆ ಅಪ್ಲೋಡ್ ಮಾಡುವ ಮುನ್ನ ನೀವು $1 ಅನ್ನು ಪರೀಕ್ಷಿಸಬೇಕು.",
        "upload-success-subj": "ಯಶಸ್ವಿ ಅಪ್ಲೋಡ್",
+       "upload-failure-subj": "ಅಪ್ಲೋಡ್ ಸಮಸ್ಯೆ",
        "upload-warning-subj": "ಅಪ್ಲೋಡ್ ಎಚ್ಚರಿಕೆ",
        "upload-file-error": "ಆಂತರಿಕ ದೋಷ",
        "upload-file-error-text": "ಸರ್ವರ್‍ನಲ್ಲಿ ತಾತ್ಕಾಲಿಕ ಫೈಲನ್ನು ಸೃಷ್ಟಿಸುವಲ್ಲಿ ಒಂದು ಆಂತರಿಕ ದೋಷವಾಯಿತು.\nದಯವಿಟ್ಟು ವ್ಯವಸ್ಥಾಪಕರೊಬ್ಬರನ್ನು ಸಂಪರ್ಕಿಸಿ.",
        "uploadstash-refresh": "ಕಡತಗಳ ಪಟ್ಟಿಯನ್ನು ಪುನಃ ಭಾರಹೇರಿಸಿ",
        "img-auth-accessdenied": "ಅನುಮತಿ ನಿರಾಕರಿಸಲಾಗಿದೆ",
        "img-auth-nofile": "ಕಡತ \"$1\" ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.",
+       "img-auth-streaming": "ಸ್ಟ್ರೀಮಿಂಗ್ \"$1\".",
        "upload-curl-error6": "URL ಅನ್ನು ತಲುಪಲು ಆಗಲಿಲ್ಲ",
        "upload-curl-error6-text": "ನೀಡಲ್ಪಟ್ಟ URL ಅನ್ನು ತಲುಪಲು ಆಗಲಿಲ್ಲ.\nಈ URL ಸರಿಯಿದೆ ಮತ್ತು ಆ ತಾಣ ಕಾರ್ಯ ಮಾಡುತ್ತಿದೆ ಎಂದು ಮತ್ತೊಮ್ಮೆ ಪರೀಕ್ಷಿಸಿ.",
        "upload-curl-error28": "ಅಪ್ಲೋಡ್ ಕಾಲಾವಧಿ ಮೀರಿದೆ",
        "license": "ಪರವಾನಗಿ:",
        "license-header": "ಪರವಾನಗಿ",
        "nolicense": "ಆಯ್ಕೆ ಇಲ್ಲ",
+       "licenses-edit": "ಪರವಾನಗಿ ಆಯ್ಕೆಗಳನ್ನು ಸಂಪಾದಿಸಿ",
        "license-nopreview": "(ಪೂರ್ವವೀಕ್ಷಣೆ ಲಭ್ಯವಿಲ್ಲ)",
        "upload_source_url": " (ಒಂದು ಮನ್ನಿತ, ಸಾರ್ವಜನಿಕವಾಗಿ ಎಟಕುವ URL)",
        "upload_source_file": " (ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿರುವ ಒಂದು ಫೈಲು)",
-       "listfiles-summary": "ಈ ವಿಶೇಷ ಪುಟವು ಎಲ್ಲಾ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ.\nವಸ್ತುಸ್ಥಿತಿಯಲ್ಲಿ, ಕೊನೆಯದಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳು ಪಟ್ಟಿಯ ಪ್ರಾರಂಭದಲ್ಲಿ ಕಾಣುತ್ತವೆ.\nಪಟ್ಟಿಯ ವಿಭಾಗದ ತಲೆಬರಹವನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದರೆ ಪಟ್ಟಿಯ ರಚನೆ ಬದಲಾಗುತ್ತದೆ.",
+       "listfiles-delete": "ಅಳಿಸು",
+       "listfiles-summary": "ಈ ವಿಶೇಷ ಪುಟದಲ್ಲಿ ಎಲ್ಲಾ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ .",
+       "listfiles_search_for": "ಮಾಧ್ಯಮ ಹೆಸರು ಹುಡುಕಿ",
        "imgfile": "ಫೈಲು",
        "listfiles": "ಚಿತ್ರಗಳ ಪಟ್ಟಿ",
        "listfiles_thumb": "ಕಿರುನೋಟ",
        "filepage-nofile": "ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ",
        "filepage-nofile-link": "ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ಆದರೆ ನೀವು ಇದನ್ನು [$1 ನಕಲೆರಿಸಬಹುದು ]",
        "uploadnewversion-linktext": "ಈ ಫೈಲಿನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ",
+       "shared-repo-from": "ರಿಂದ $1",
        "upload-disallowed-here": "ನೀವು ಈ ಕಡತವನ್ನು ಪುನರ್ಲೇಖಿಸಲು ಸಾದ್ಯವಿಲ್ಲ.",
        "filerevert": "$1 ಹಿಂದಿನಂತಾಗಿಸು",
        "filerevert-comment": "ಕಾರಣ:",
        "unusedtemplateswlh": "ಇತರ ಕೊಂಡಿಗಳು",
        "randompage": "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
        "randompage-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುಟವೂ ಇಲ್ಲ.",
+       "randomincategory-category": "ವರ್ಗ:",
        "randomincategory-submit": "ಹೋಗು",
        "randomredirect": "ಯದೃಚ್ಛಿಕ ಪುನರ್ನಿರ್ದೇಶಿತ ಪುಟ",
        "randomredirect-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುನರ್ನಿರ್ದೇಶನಗಳೂ ಇಲ್ಲ.",
        "statistics-files": "ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳು",
        "statistics-edits-average": "ಪುಟದ ಸರಾಸರಿ ಮಾರ್ಪಡಿಕೆಗಳು",
        "statistics-users-active": "ಸಕ್ರಿಯ ಬಳಕೆದಾರರು",
+       "pageswithprop-prop": "ಆಸ್ತಿಯ ಹೆಸರು:",
        "pageswithprop-submit": "ಹೋಗು",
        "doubleredirects": "ಮರುಕಳಿಸಿದ ಪುನರ್ನಿರ್ದೇಶನಗಳು",
        "brokenredirects": "ಮುರಿದ ರಿಡೈರೆಕ್ಟ್‌ಗಳು",
        "brokenredirects-delete": "ಅಳಿಸಿ",
        "withoutinterwiki": "ಬೇರೆ ಭಾಷೆಗಳಿಗೆ ಸಂಪರ್ಕ ಹೊಂದಿರದ ಪುಟಗಳು",
        "withoutinterwiki-summary": "ಈ ಕೆಳಗಿನ ಪುಟಗಳು ಅವುಗಳ ಇತರ ಭಾಷೆಯಲ್ಲಿರುವ ಪುಟಗಳಿಗೆ ಕೊಂಡಿಯನ್ನು ಹೊಂದಿಲ್ಲ:",
+       "withoutinterwiki-legend": "ಪೂರ್ವಪ್ರತ್ಯಯಗಳು",
        "withoutinterwiki-submit": "ತೋರಿಸು",
        "fewestrevisions": "ಅತ್ಯಂತ ಕಡಿಮೆ ಬದಲಾವಣೆಗಳನ್ನು ಹೊಂದಿರುವ ಪುಟಗಳು",
        "nbytes": "$1 {{PLURAL:$1|ಬೈಟ್|ಬೈಟ್‍ಗಳು}}",
        "protectedpages-noredirect": "ಪುನರ್ನಿದೇಶನಗಳನ್ನು ಅಡಗಿಸಿ",
        "protectedpagesempty": "ಈ ನಿಯಮಾವಳಿಗಳಲ್ಲಿ ಯಾವ ಪುಟವೂ ಸಂರಕ್ಷಿತವಾಗಿಲ್ಲ.",
        "protectedpages-page": "ಪುಟ",
+       "protectedpages-expiry": "ಮುಕ್ತಾಯ",
+       "protectedpages-performer": "ರಕ್ಷಿಸುವ ಬಳಕೆದಾರ",
+       "protectedpages-params": "ರಕ್ಷಣೆ ನಿಯತಾಂಕಗಳು",
        "protectedpages-reason": "ಕಾರಣ",
        "protectedpages-unknown-timestamp": "ಅಜ್ಞಾತ",
        "protectedpages-unknown-performer": "ಅಜ್ಞಾತ ಬಳಕೆದಾರ",
        "move": "ಸ್ಥಳಾಂತರಿಸಿ",
        "movethispage": "ಈ ಪುಟವನ್ನು ಸ್ಥಳಾಂತರಿಸಿ",
        "unusedcategoriestext": "ಈ ಕೆಳಗಿನ ವರ್ಗ ಪುಟಗಳು ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇದ್ದರೂ ಬೇರೆ ಯಾವ ಪುಟವಾಗಲಿ ಅಥವ ವರ್ಗವಾಗಲಿ ಅವನ್ನು ಉಪಯೋಗಿಸುತ್ತಿಲ್ಲ.",
+       "notargettitle": "ಯಾವುದೇ ಗುರಿಯಿಲ್ಲ",
        "pager-newer-n": "{{PLURAL:$1|ಹೊಸ ೧|ಹೊಸ $1}}",
        "pager-older-n": "{{PLURAL:$1|ಹಳೆ ೧|ಹಳೆ $1}}",
        "suppress": "ನಿಗಾ ಇಡುವವ",
        "booksources": "ಪುಸ್ತಕದ ಮೂಲಗಳು",
        "booksources-search-legend": "ಪುಸ್ತಕ ಮೂಲಗಳಿಗೆ ಹುಡುಕು",
        "booksources-search": "ಹುಡುಕು",
-       "specialloguserlabel": "ಸದಸà³\8dಯ:",
-       "speciallogtitlelabel": "ಶೀರ್ಷಿಕೆ:",
+       "specialloguserlabel": "ಸಾಧà²\95 :",
+       "speciallogtitlelabel": "ಶೀರ್ಷಿಕೆ (ಶೀರ್ಷಿಕೆ ಅಥವಾ ಬಳಕೆದಾರ ):",
        "log": "ದಾಖಲೆಗಳು",
-       "all-logs-page": "à²\8eಲà³\8dಲಾ à²¦à²¾à²\96ಲà³\86à²\97ಳà³\81",
+       "all-logs-page": "à²\8eಲà³\8dಲಾ à²¸à²¾à²°à³\8dವà²\9cನಿà²\95 à²¦à²¾à²\96ಲà³\86",
        "logempty": "ದಾಖಲೆಗಳಲ್ಲಿ ಇದಕ್ಕೆ ಹೋಲುವ ಯಾವ ವಸ್ತುವೂ ಇಲ್ಲ.",
        "log-title-wildcard": "ಈ ಪದಗಳಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಶೀರ್ಷಿಕೆಗಳನ್ನು ಹುಡುಕು",
        "allpages": "ಎಲ್ಲ ಪುಟಗಳು",
        "allpagesbadtitle": "ನೀವು ಕೋರಿದ ಪುಟದ ಶೀರ್ಷಿಕೆ ಸಿಂಧುವಲ್ಲದ್ದು ಅಥವ ಖಾಲಿ ಅಥವ ಸರಿಯಾದ ಕೊಂಡಿಯಲ್ಲದ ಅಂತರ-ಭಾಷೆ/ಅಂತರ-ವಿಕಿ ಸಂಪರ್ಕವಾಗಿದೆ.\nಅದರಲ್ಲಿ ಒಂದು ಅಥವ ಹೆಚ್ಚು ಶೀರ್ಷಿಕೆಯಲ್ಲಿ ಬಳಸಲು ನಿಷಿದ್ಧವಾಗಿರುವ ಅಕ್ಷರಗಳು ಇರಬಹುದು.",
        "allpages-bad-ns": "{{SITENAME}} ಅಲ್ಲಿ \"$1\" ಪುಟಪ್ರಬೇಧ ಇಲ್ಲ.",
        "allpages-hide-redirects": "ಪುನರ್ನಿದೇಶನಗಳನ್ನು ಅಡಗಿಸಿ",
+       "cachedspecial-refresh-now": "ಇತ್ತೀಚಿನ ವೀಕ್ಷಿಸಿ",
        "categories": "ವರ್ಗಗಳು",
        "categoriespagetext": "ಈ ಕೆಳಗಿನ ವರ್ಗಗಳು ಪುಟಗಳನ್ನು ಅಥವ ಮೀಡಿಯಗಳನ್ನು ಹೊಂದಿವೆ.\n[[Special:UnusedCategories|ಅನುಪಯೋಗಿತ ವರ್ಗಗಳು]] ಇಲ್ಲಿ ತೋರಲಾಗಿಲ್ಲ.\nಇದನ್ನೂ ನೋಡಿ: [[Special:WantedCategories|ಬೇಕಾಗಿರುವ ವರ್ಗಗಳು]].",
        "categoriesfrom": "ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ವರ್ಗಗಳನ್ನು ತೋರಿಸು:",
        "special-categories-sort-count": "ಎಣಿಕೆಯ ಪ್ರಕಾರ ಜೋಡಿಸು",
        "special-categories-sort-abc": "ಅಕ್ಷರಮಾಲೆಯ ಪ್ರಕಾರ ಜೋಡಿಸು",
+       "deletedcontributions": "ಅಳಿಸಲಾಗಿದೆ ಕಾಣಿಕೆಗಳನ್ನು",
        "sp-deletedcontributions-contribs": "ಕಾಣಿಕೆಗಳು",
        "linksearch": "ಹೊರಗಿನ ಸಂಪರ್ಕಗಳು",
        "linksearch-ns": "ನಾಮವರ್ಗ:",
        "listusersfrom": "ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಬಳಕೆದಾರರನ್ನು ತೋರಿಸು:",
        "listusers-submit": "ತೋರು",
        "listusers-noresult": "ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.",
+       "listusers-blocked": "(ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ)",
        "activeusers": "ಸಕ್ರಿಯ ಸದಸ್ಯರ ಪಟ್ಟಿ",
        "activeusers-noresult": "ಯಾವ ಬಳಕೆದಾರರೂ ಸಿಗಲಿಲ್ಲ.",
        "listgrouprights": "ಬಳಕೆದಾರ ಗುಂಪು ಹಕ್ಕುಗಳು",
        "listgrouprights-helppage": "Help:ಗುಂಪು ಹಕ್ಕುಗಳು",
        "listgrouprights-members": "(ಸದಸ್ಯರ ಪಟ್ಟಿ)",
        "listgrouprights-addgroup-all": "ಎಲ್ಲಾ ಗುಂಪುಗಳನ್ನು ಸೇರಿಸಿ",
+       "listgrouprights-removegroup-all": "ಎಲ್ಲಾ ಗುಂಪುಗಳನ್ನು ತೆಗೆದುಹಾಕಿ",
        "listgrouprights-namespaceprotection-namespace": "ನಾಮವರ್ಗ",
        "trackingcategories-name": "ಸಂದೇಶದ ಹೆಸರು",
        "trackingcategories-nodesc": "ಯಾವುದೇ ವಿವರಣೆಯಿಲ್ಲ.",
        "mailnologintext": "ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇ-ಅಂಚೆ ಕಳುಹಿಸಲು ನೀವು [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಿರಬೇಕು ಮತ್ತು ನಿಮ್ಮ [[Special:Preferences|ಪ್ರಾಶಸ್ತ್ಯಗಳ ಪುಟದಲ್ಲಿ]] ಒಂದು ಧೃಡೀಕೃತ ಇ-ಅಂಚೆ ವಿಳಾಸ ನೀಡಿರಬೇಕು.",
        "emailuser": "ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆ ಕಳಿಸಿ",
        "emailuser-title-notarget": "ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
-       "emailpage": "ಸದಸ್ಯರಿಗೆ ವಿ-ಅ೦ಚೆ ಕಳಿಸಿ",
        "defemailsubject": "ವಿಕಿಪೀಡಿಯ ವಿ-ಅ೦ಚೆ",
        "usermaildisabled": "ಬಳಕೆದಾರರ ಮಿಂಚಂಚೆಯನ್ನು ನಿಷ್ಕ್ತಿಯಗೊಳಿಸಲಾಗಿದೆ",
        "noemailtitle": "ಯಾವುದೇ ಇ-ಅಂಚೆ ವಿಳಾಸ ಇಲ್ಲ",
        "deletereason-dropdown": "*ಸಾಮಾನ್ಯ ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳು\n** ಸಂಪಾದಕರ ಕೋರಿಕೆ\n** ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಉಲ್ಲಂಘನೆ\n** Vandalism",
        "delete-edit-reasonlist": "ಅಳಿಸುವಿಕೆ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು",
        "rollbacklink": "ತೊಡೆದುಹಾಕು",
+       "changecontentmodel": "ಪುಟದ ವಿಷಯ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸಿ",
+       "changecontentmodel-legend": "ವಿಷಯ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸಿ",
+       "changecontentmodel-title-label": "ಪುಟ ಶೀರ್ಷಿಕೆ",
+       "changecontentmodel-model-label": "ಹೊಸ ವಿಷಯ ಮಾದರಿ",
+       "changecontentmodel-reason-label": "ಕಾರಣ:",
+       "changecontentmodel-success-title": "ವಿಷಯ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ",
+       "logentry-contentmodel-change-revertlink": "ಹಿಂದಿನಂತಾಗಿಸು",
+       "logentry-contentmodel-change-revert": "ಹಿಂದಿನಂತಾಗಿಸು",
        "protectlogpage": "ಸಂರಕ್ಷಣೆ ದಿನಚರಿ",
        "protectedarticle": "\"[[$1]]\" ಸಂರಕ್ಷಿಸಲಾಗಿದೆ.",
        "modifiedarticleprotection": "\"[[$1]]\" ಪುಟದ ಸಂರಕ್ಷಣೆ ಮಟ್ಟವನ್ನು ಬದಲಾಯಿಸಲಾಯಿತು",
        "undelete-search-prefix": "ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಪುಟಗಳನ್ನು ತೋರು:",
        "undelete-search-submit": "ಹುಡುಕು",
        "undelete-no-results": "ಅಳಿಸುವಿಕೆ ದಾಖಲೆಯಲ್ಲಿ ಹೋಲುವ ಯಾವ ಪುಟಗಳೂ ದೊರಕಲಿಲ್ಲ.",
+       "undelete-show-file-submit": "ಹೌದು",
        "namespace": "ಹೆಸರಿನ ಬಗೆ:",
        "invert": "ಆಯ್ಕೆಯನ್ನು ತಿರುಗಿಸು",
        "blanknamespace": "(ಮುಖ್ಯ)",
        "contributions-title": "$1 ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು",
        "mycontris": "ಕಾಣಿಕೆಗಳು",
        "contribsub2": "$1 ($2) ಗೆ",
-       "uctop": " (ಮೇಲಕ್ಕೆ)",
+       "uctop": "(ಪ್ರಸಕ್ತ)",
        "month": "ಈ ತಿಂಗಳಿಂದ (ಮತ್ತು ಮುಂಚಿನ):",
        "year": "ಈ ವರ್ಷದಿಂದ (ಮತ್ತು ಮುಂಚಿನ):",
        "sp-contributions-newbies": "ಹೊಸ ಖಾತೆಗಳ ಕಾಣಿಕೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು",
        "blocklist": "ನಿರ್ಬಂಧಿಸಲಾಗಿರುವ ಸದಸ್ಯರು",
        "ipblocklist": "ನಿರ್ಬಂಧಿಸಲಾಗಿರುವ ಸದಸ್ಯರು",
        "ipblocklist-legend": "ತಡೆಹಿಡಿಯಲಾದ ಬಳಕೆದಾರನನ್ನು ಹುಡುಕು",
+       "blocklist-target": "ಗುರಿ",
+       "blocklist-expiry": "ಮುಕ್ತಾಯ",
        "blocklist-reason": "ಕಾರಣ",
        "ipblocklist-submit": "ಹುಡುಕು",
        "infiniteblock": "ಅನಂತ",
        "block-log-flags-nocreate": "ಖಾತೆ ಸೃಷ್ಟಿ ತಡೆಹಿಡಿಯಲಾಗಿದೆ",
        "block-log-flags-noemail": "ಇ-ಅಂಚೆ ತಡೆಹಿಡಿಯಲಾಗಿದೆ",
        "ipb_already_blocked": "\"$1\" ಆಗಲೆ ತಡೆ ಹಿಡಿಯಲಾಗಿದೆ",
+       "proxyblocker": "ಪ್ರಾಕ್ಸಿ ಬ್ಲಾಕರ್",
        "lockdb": "ಡೇಟಾಬೇಸ್ ಅನ್ನು ಮುಚ್ಚು",
        "unlockdb": "ಡೇಟಾಬೇಸ್ ಅನ್ನು ತೆಗೆ",
        "lockdbtext": "ಡೇಟಾಬೇಸ್ ಅನ್ನು ಮುಚ್ಚುವುದರಿಂದ ಎಲ್ಲಾ ಬಳಕೆದಾರರೂ ಪುಟಗಳ ಸಂಪಾದನೆ, ತಮ್ಮ ಪ್ರಾಶಸ್ತ್ಯಗಳ ಬದಲಾವಣೆ, ವೀಕ್ಷಣಾ ಪಟ್ಟಿಗಳ ಸಂಪಾದನೆ, ಮತ್ತು ಇತರ ಡೇಟಾಬೇಸ್‍ನಲ್ಲಿ ಬದಲಾವಣೆಗಳು ಬೇಕಾಗುವ ಕಾರ್ಯಗಳನ್ನು ಮಾಡಲು ಆಗದಂತಾಗುತ್ತದೆ.\nದಯವಿಟ್ಟು ಇದನ್ನು ನೀವು ಮಾಡಬಯಸುವಿರಿ, ಮತ್ತು ಡೇಟಾಬೇಸ್ ಮೇಲಿನ ನಿಮ್ಮ ಕಾರ್ಯಗಳು ಮುಗಿದ ಮೇಲೆ ಅದನ್ನು ಮತ್ತೆ ತೆಗೆಯುವಿರಿ ಎಂದು ಖಾತ್ರಿ ಮಾಡಿ.",
        "thumbnail_error": "ಮುನ್ನೋಟ ಚಿತ್ರವನ್ನು ಸೃಷ್ಟಿಸುವಲ್ಲಿ ದೋಷ: $1",
        "import": "ಪುಟಗಳನ್ನು ಅಮದು ಮಾಡಿ",
        "import-interwiki-submit": "ಆಮದು",
+       "import-upload-filename": "ಕಡತದ ಹೆಸರು",
        "import-comment": "ಟಿಪ್ಪಣಿ :",
        "importstart": "ಪುಟಗಳು ಆಮದಾಗುತ್ತಿದೆ...",
        "import-revision-count": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
        "import-nonewrevisions": "ಎಲ್ಲಾ ಬದಲಾವಣೆಗಳನ್ನೂ ಮುಂಚೆಯೆ ಆಮದು ಮಾಡಲಾಗಿದೆ.",
        "importlogpage": "ಆಮದುಗಳ ದಾಖಲೆ",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಗಳು}}",
+       "javascripttest-pagetext-unknownaction": "ಅಪರಿಚಿತ ಕ್ರಮ \"$1\"",
        "tooltip-pt-userpage": "ನಿಮ್ಮ ಸದಸ್ಯ ಪುಟ",
        "tooltip-pt-anonuserpage": "ನೀವು ಸಂಪಾದನೆ ಮಾಡುತ್ತಿರುವ ipಯ ಬಳಕೆದಾರ ಪುಟ",
        "tooltip-pt-mytalk": "ನಿಮ್ಮ ಚರ್ಚೆ ಪುಟ",
        "tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
        "tooltip-pt-createaccount": "ನೀವು ಹೊಸ ಖಾತೆಯನ್ನು ತೆರೆದು ಲಾಗಿನ್ ಆಗುವುದನ್ನು ಹುರಿದುಂಬಿಸುತ್ತೇವೆ; ಆದಾಗ್ಯೂ, ಇದು ಅವಶ್ಯವೇನಲ್ಲ",
        "tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟದ ಬಗ್ಗೆ ಚರ್ಚೆ",
-       "tooltip-ca-edit": "à²\88 à²ªà³\81à²\9fವನà³\8dನà³\81 à²¨à³\80ವà³\81 à²¸à²\82ಪಾದಿಸಬಹà³\81ದà³\81. à²\89ಳಿಸà³\81ವ à²®à³\81ನà³\8dನ à²®à³\81ನà³\8dನà³\8bà²\9fವನà³\8dನà³\81 à²\89ಪಯà³\8bà²\97ಿಸಿ.",
+       "tooltip-ca-edit": "à²\88 à²ªà³\81à²\9fವನà³\8dನà³\81 à²¬à²¦à²²à²¾à²¯à²¿à²¸à²¿",
        "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-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-diff": "ನೀವು ಮಾಡಿದ ಬದಲಾವಣೆಗಳನ್ನು ತೋರುತ್ತದೆ.",
        "tooltip-compareselectedversions": "ಆರಿಸಿದ ಎರಡು ಆವೃತ್ತಿಗಳ ಮಧ್ಯದ ವ್ಯತ್ಯಾಸಗಳನ್ನು ನೋಡು.",
        "tooltip-watch": "ಈ ಪುಟವನ್ನು ನಿಮ್ಮ ವೀಕ್ಷಣಾ ಪಟ್ಟಿಗೆ ಸೇರಿಸು",
+       "tooltip-watchlistedit-normal-submit": "ಶೀರ್ಷಿಕೆಗಳನ್ನು ತೆಗೆ",
+       "tooltip-watchlistedit-raw-submit": "ವೀಕ್ಷಣಾಪಟ್ಟಿಗೆ ಸೇರಿಸಿ",
        "tooltip-upload": "ಅಪ್ಲೋಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸು",
        "tooltip-rollback": "ಕೊನೆ ಸಂಪಾದಕರ ಎಲ್ಲಾ ಸಂಪಾದನೆಗಳನ್ನು ಅಳಿಸುಹಾಕುತ್ತದೆ",
        "tooltip-undo": "\"ವಜಾ ಮಾಡಿ\" ಈ ಸಂಪಾದನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯ ಗೊಳಿಸಿ ಸಂಪಾದನಾ ಪುಟವನ್ನು ಮುನ್ನೋಟದೊಂದಿಗೆ ತೆರೆಯುತ್ತದೆ.\nಇಲ್ಲಿ ಸಾರಾಂಶದಲ್ಲಿ ಕಾರಣವನ್ನು ಸೇರಿಸುವ ಅನುಮತಿ ಇದೆ.",
+       "tooltip-preferences-save": "ಆಯ್ಕೆಗಳು ಉಳಿಸಿ",
        "tooltip-summary": "ಚಿಕ್ಕ ಸಾರಾಂಶ ಒಂದನ್ನು ಸೇರಿಸಿ",
        "anonymous": "{{SITENAME}} ತಾಣದ ಅನಾಮಧೇಯ {{PLURAL:$1|ಬಳಕೆದಾರ|ಬಳಕೆದಾರರು}}",
        "siteuser": "{{SITENAME}} ಬಳಕೆದಾರ $1",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1",
        "creditspage": "ಪುಟದ ಗೌರವಗಳು",
        "simpleantispam-label": "ಆಂಟಿ-ಸ್ಪ್ಯಾಮ್ ಪರೀಕ್ಷೆ.\nಇದನ್ನು ತುಂಬ <strong>ಬೇಡಿ</strong>!",
+       "pageinfo-title": "ಮಹಿತಿ \"$1\"",
+       "pageinfo-header-basic": "ಮೂಲಭೂತ ಮಾಹಿತಿ",
+       "pageinfo-header-edits": "ಇತಿಹಾಸ ಸಂಪಾದಿಸಿ",
+       "pageinfo-header-restrictions": "ಪುಟ ರಕ್ಷಣೆ",
+       "pageinfo-display-title": "ತಲೆಬರಹ ಪ್ರದರ್ಶಿಸು",
+       "pageinfo-article-id": "ಪುಟದ ID",
+       "pageinfo-robot-index": "ಅನುಮತಿಸು",
+       "pageinfo-robot-noindex": "ಅನುಮತಿಸಲಾಗಿಲ್ಲ",
+       "pageinfo-firstuser": "ಪುಟ ಸೃಷ್ಟಿಕರ್ತ",
+       "pageinfo-firsttime": "ಪುಟ ಸೃಷ್ಟಿಯ ದಿನಾಂಕ",
+       "pageinfo-lastuser": "ಇತ್ತೀಚಿನ ಸಂಪಾದಕ",
+       "pageinfo-lasttime": "ಇತ್ತೀಚಿಗೆ ಬದಲಾಯಿಸಿ ದಿನಾಂಕ",
+       "pageinfo-edits": "ಒಟ್ಟು ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ",
        "pageinfo-toolboxlink": "ಪುಟದ ಮಾಹಿತಿ",
        "pageinfo-redirectsto": "ಪುನರ್ನಿರ್ದೇಶನ:",
+       "pageinfo-redirectsto-info": "ಮಾಹಿತಿಯನ್ನು",
+       "pageinfo-contentpage-yes": "ಹೌದು",
+       "pageinfo-protect-cascading-yes": "ಹೌದು",
+       "pageinfo-category-pages": "ಪುಟಗಳ ಸಂಖ್ಯೆ",
+       "pageinfo-category-subcats": "ಉಪವರ್ಗಗಳು ಸಂಖ್ಯೆ",
+       "pageinfo-category-files": "ಕಡತಗಳ ಸಂಖ್ಯೆ",
        "deletedrevision": "ಹಳೆ ಆವೃತ್ತಿ $1 ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ",
        "filedeleteerror-short": "ಈ ಫೈಲನ್ನು ಅಳಿಸುವುದರಲ್ಲಿ ದೋಷ: $1",
        "filedeleteerror-long": "ಫೈಲನ್ನು ಅಳಿಸುವಾಗ ಉಂಟಾದ ದೋಷಗಳು:\n\n$1",
        "svg-long-desc": "SVG ಫೈಲು, ಸುಮಾರಾಗಿ $1 × $2 ಚಿತ್ರಬಿಂದುಗಳು, ಫೈಲಿನ ಗಾತ್ರ: $3",
        "show-big-image": "ಮೂಲ ಕಡತ",
        "show-big-image-size": "$1 × $2 ಪಿಕ್ಸೆಲ್‌ಗಳು",
+       "file-info-gif-looped": "ಲೂಪ್",
+       "file-info-png-looped": "ಲೂಪ್",
        "newimages": "ಹೊಸ ಫೈಲುಗಳ ಪ್ರದರ್ಶನ",
        "imagelisttext": "ಕೆಳಗೆ ಇರುವುದು '''$1''' {{PLURAL:$1|ಫೈಲಿನ|ಫೈಲುಗಳ}} ಪಟ್ಟಿ, $2 ಏರ್ಪಾಟಾಗಿದೆ.",
        "newimages-summary": "ಈ ವಿಶೇಷ ಪುಟವು ಕೊನೆಯದಾಗಿ ಅಪ್ಲೋಡ್ ಆಗಿರುವ ಫೈಲುಗಳನ್ನು ತೋರುತ್ತದೆ",
        "ilsubmit": "ಹುಡುಕು",
        "bydate": "ದಿನಾಂಕಕ್ಕನುಗುಣವಾಗಿ",
        "sp-newimages-showfrom": "$2, $1 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಹೊಸ ಫೈಲುಗಳನ್ನು ತೋರು",
+       "just-now": "ಇದೀಗ",
+       "monday-at": "ಸೋಮವಾರ $1",
+       "tuesday-at": "ಮಂಗಳವಾರ $1",
+       "wednesday-at": "ಬುಧವಾರ $1",
+       "thursday-at": "ಗುರುವಾರ $1",
+       "friday-at": "ಶುಕ್ರವಾರ $1",
+       "saturday-at": "ಶನಿವಾರ $1",
+       "sunday-at": "ರವಿವಾರ $1",
+       "yesterday-at": "ನಿನ್ನೆ $1",
        "bad_image_list": "ವ್ಯವಸ್ಥೆಯ ಆಕಾರ ಈ ರೀತಿ:\n\nಪಟ್ಟಿಯಲ್ಲಿರುವ ದಾಖಲೆಗಳನ್ನು (* ಇಂದ ಪ್ರಾರಂಭವಾಗುವ ಸಾಲುಗಳು) ಮಾತ್ರ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.\nಪ್ರತಿ ಸಾಲಿನ ಮೊದಲ ಕೊಂಡಿಯು ಒಂದು ದೋಷಯುಕ್ತ ಫೈಲಿಗೆ ಕೊಂಡಿಯಾಗಿರಬೇಕು.\nಅದೇ ಸಾಲಿನ ಮುಂದಿನ ಎಲ್ಲಾ ಕೊಂಡಿಗಳನ್ನು ಪರಿಗಣನೆಯಿಂದ ವಿನಾಯತಿ ಮಾಡಲಾಗುತ್ತದೆ, ಅಂದರೆ ಎಲ್ಲಿ ಪುಟಗಳ ಒಳಗೆ ಫೈಲು ಇರುತ್ತದೆಯೊ ಅಲ್ಲಿ.",
        "metadata": "ಮೇಲ್ದರ್ಜೆ ಮಾಹಿತಿ",
        "metadata-help": "ಈ ಫೈಲಿನಲ್ಲಿ ಹೆಚ್ಚಿನ ಮಾಹಿತಿ ಇದೆ. ಪ್ರಾಯಶಃ ಫೈಲನ್ನು ಸೃಷ್ಟಿಸಲು ಉಪಯೋಗಿಸಲಾದ ಡಿಜಿಟಲ್ ಕ್ಯಾಮೆರದಿಂದ ಅಥವ ಸ್ಕ್ಯಾನರ್ ಇಂದ ಈ ಮಾಹಿತಿ ಸೇರಿಸಲ್ಪಟ್ಟಿದೆ.\nಮೂಲಪ್ರತಿಯಿಂದ ಈ ಫೈಲು ಮಾರ್ಪಾಟಾಗಿದ್ದಲ್ಲಿ, ಈ ಮಾಹಿತಿ ಮಾರ್ಪಟ್ಟ ಫೈಲಿನ ವಿವರಗಳಿಗೆ ಸರಿಯಾಗಿ ಹೊಂದದೆ ಇರಬಹುದು.",
        "exif-artist": "ಕರ್ತೃ",
        "exif-copyright": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು",
        "exif-exifversion": "Exif ಆವೃತ್ತಿ",
-       "exif-pixelydimension": "ಸಿà²\82ಧà³\81ವಾದ ಚಿತ್ರದ ಅಗಲ",
-       "exif-pixelxdimension": "ಸಿà²\82ಧà³\81ವಾದ ಚಿತ್ರದ ಎತ್ತರ",
+       "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಅಗಲ",
+       "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ",
        "exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ",
        "exif-relatedsoundfile": "ಸಂಬಂಧಿತ ಧ್ವನಿ ಫೈಲು",
        "exif-datetimeoriginal": "ಮಾಹಿತಿ ಸೃಷ್ಟಿಯಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ",
        "exif-gpsspeedref": "ವೇಗದ ಘಟಕ",
        "exif-gpsareainformation": "GPS ಪ್ರದೇಶದ ಹೆಸರು",
        "exif-gpsdatestamp": "GPS ದಿನಾಂಕ",
+       "exif-keywords": "ಪ್ರಮುಖ ಪದಗಳು",
+       "exif-source": "ಆಕರ",
+       "exif-languagecode": "ಭಾಷೆ",
        "exif-iimcategory": "ವರ್ಗ",
        "exif-label": "ಗುರುತು ಪಟ್ಟಿ",
        "exif-copyrighted": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಸ್ಥಿತಿ",
        "exif-componentsconfiguration-0": "ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇಲ್ಲ",
        "exif-meteringmode-0": "ತಿಳಿದಿಲ್ಲ",
        "exif-meteringmode-1": "ಸರಾಸರಿ",
+       "exif-meteringmode-5": "ವಿನ್ಯಾಸ",
        "exif-meteringmode-255": "ಇತರ",
        "exif-lightsource-0": "ತಿಳಿದಿಲ್ಲ",
        "exif-lightsource-1": "ದಿನದ ಬೆಳಕು",
        "htmlform-selectorother-other": "ಇತರ",
        "htmlform-no": "ಇಲ್ಲ",
        "htmlform-yes": "ಹೌದು",
+       "htmlform-title-not-exists": "[[:$1]] ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ಅಳಿಸಲಾಯಿತು}} ಪುಟ $3",
        "revdelete-restricted": "ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು",
        "revdelete-unrestricted": "ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು",
index 8d8ac37..7791798 100644 (file)
@@ -50,7 +50,9 @@
                        "Ysjbserver",
                        "LiteHell",
                        "Lefion",
-                       "Leeheonjin"
+                       "Leeheonjin",
+                       "Hwangjy9",
+                       "Kurousagi"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "broken-file-category": "깨진 파일 링크가 포함된 문서",
        "about": "소개",
        "article": "본문",
-       "newwindow": "(ì\83\88 ì°½ì\9c¼ë¡\9c ì\97´ë¦¼)",
+       "newwindow": "(ì\83\88 ì°½ì\97\90ì\84\9c ì\97´ë¦¼)",
        "cancel": "취소",
        "moredotdotdot": "더 보기...",
        "morenotlisted": "이 목록은 완성되지 않았습니다.",
        "pool-queuefull": "풀 대기열이 가득 찼습니다",
        "pool-errorunknown": "알 수 없는 오류",
        "pool-servererror": "풀 카운터 서비스는 사용할 수 없습니다 ($1).",
-       "poolcounter-usage-error": "ì\96´ë²\95 ì\97\90ë\9f¬: $1",
+       "poolcounter-usage-error": "ì\82¬ì\9a©ë²\95 ì\98¤ë¥\98: $1",
        "aboutsite": "{{SITENAME}} 소개",
        "aboutpage": "Project:소개",
        "copyright": "내용은 별도로 명시하지 않을 경우 $1에 따라 사용할 수 있습니다.",
        "badaccess-group0": "요청한 명령을 실행할 권한이 없습니다.",
        "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게 제한됩니다: $1.",
        "versionrequired": "미디어위키 $1 버전 필요",
-       "versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참하세요.",
+       "versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참하세요.",
        "ok": "확인",
        "retrievedfrom": "원본 주소 \"$1\"",
        "youhavenewmessages": "다른 사용자로부터의 $1가 {{PLURAL:$3|있습니다}}. ($2)",
        "no-null-revision": "\"$1\" 문서에 대한 새 빈 판을 만들 수 없습니다",
        "badtitle": "잘못된 제목",
        "badtitletext": "요청한 문서 제목이 잘못되었거나, 비어있거나, 잘못된 인터위키 제목으로 링크했습니다.\n문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.",
+       "title-invalid-empty": "요청한 페이지의 제목이 비거나 이름공간밖에 안 들어있습니다.",
+       "title-invalid-utf8": "요청한 페이지 제목에 잘못된 UTF-8 글자가 있습니다.",
+       "title-invalid-interwiki": "요청한 페이지 제목에 제목에는 사용될 수 없는 위키간 링크가 있습니다.",
+       "title-invalid-talk-namespace": "요청한 페이지 제목이 존재하지 않는 토론 문서를 가리킵니다.",
+       "title-invalid-characters": "요청된 문서 제목이 잘못된 문자를 포함하고 있습니다: \"$1\".",
        "perfcached": "다음 자료는 캐시된 것이며 최신이 아닐 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 한 개|결과 $1개}}가 있습니다.",
        "perfcachedts": "다음 자료는 캐시된 것으로, $1에 마지막으로 업데이트되었습니다. 캐시에 최대 {{PLURAL:$4|결과 한 개|결과 $4개}}가 있습니다.",
        "querypage-no-updates": "이 문서의 갱신이 현재 중지되어 있습니다.\n자료가 잠시 갱신되지 않을 것입니다.",
        "actionthrottled": "동작 중지",
        "actionthrottledtext": "스팸을 막기 위해 짧은 시간 동안 이 작업을 너무 많이 수행하는 것을 막고 있습니다.\n제한을 넘었으니 몇 분 뒤에 새로 시도하세요.",
        "protectedpagetext": "이 문서는 편집하거나 다른 명령을 할 수 없도록 보호되어 있습니다.",
-       "viewsourcetext": "문서의 원본을 보거나 복사할 수 있습니다:",
-       "viewyourtext": "이 문서에 남긴 '''내 편집''' 내용을 보거나 복사할 수 있습니다:",
+       "viewsourcetext": "문서의 원본을 보거나 복사할 수 있습니다.",
+       "viewyourtext": "이 문서로의 <strong>당신의 편집</strong>의 원본을 보고 복사할 수 있습니다.",
        "protectedinterface": "이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.\n모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
-       "editinginterface": "<strong>경고</strong>: 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.",
+       "editinginterface": "<strong>경고:</strong> 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.\n이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.",
        "translateinterface": "모든 위키를 위해 번역을 추가하거나 바꾸려면, 미디어위키 지역화 프로젝트인 [//translatewiki.net/ translatewiki.net]을 사용해 주시기 바랍니다.",
-       "cascadeprotected": "이 문서는 다음 \"연쇄적\" 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다:\n$2",
-       "namespaceprotected": "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
+       "cascadeprotected": "이 문서는 다음 \"연쇄적\" 보호가 걸린 {{PLURAL:$1|문서|문서들}}에 포함되어 있어 함께 보호됩니다:\n$2",
+       "namespaceprotected": "<strong>$1</strong> 이름공간의 문서를 편집할 수 있는 권한이 없습니다.",
        "customcssprotected": "여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.",
        "customjsprotected": "여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 자바스크립트 문서를 편집할 수 없습니다.",
        "mycustomcssprotected": "이 CSS 문서를 편집할 권한이 없습니다.",
        "exception-nologin": "로그인하지 않음",
        "exception-nologin-text": "이 문서에 접근하거나 이 동작을 수행하려면 로그인하세요.",
        "exception-nologin-text-manual": "이 문서에 접근하거나 이 명령을 수행하려면 $1하세요.",
-       "virus-badscanner": "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
+       "virus-badscanner": "잘못된 설정: 알 수 없는 바이러스 검사기: <em>$1</em>",
        "virus-scanfailed": "검사 실패 (코드 $1)",
        "virus-unknownscanner": "알 수 없는 안티 바이러스:",
        "logouttext": "<strong>이제 로그아웃했습니다.</strong>\n\n브라우저 캐시를 지울 때까지 일부 문서에서 아직 로그인이 되어 있는 것처럼 보일 수 있음에 유의하세요.",
        "createacct-benefit-body2": "{{PLURAL:$1|문서}}",
        "createacct-benefit-body3": "최근 {{PLURAL:$1|기여자}}",
        "badretype": "입력한 비밀번호가 일치하지 않습니다.",
+       "usernameinprogress": "이 사용자 이름에 대한 계정 생성이 이미 시작되었습니다. 기다려 주세요.",
        "userexists": "입력한 사용자 계정 이름이 이미 사용되고 있습니다.\n다른 이름을 선택하세요.",
        "loginerror": "로그인 오류",
        "createacct-error": "계정 만들기 오류",
        "createaccounterror": "계정을 만들수 없습니다: $1",
        "nocookiesnew": "사용자 계정을 만들었지만, 아직 로그인하고 있지 않습니다.\n{{SITENAME}}에서는 로그인 정보를 저장하기 위해 쿠키를 사용합니다.\n지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.\n로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.",
        "nocookieslogin": "{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.\n쿠키가 비활성되어 있습니다.\n쿠키 사용을 활성화한 다음 다시 시도하세요.",
-       "nocookiesfornew": "ì\9a\94ì²­ì\9d\98 ì¶\9cì²\98를 í\99\95ì\9d¸í\95  ì\88\98 ì\97\86기 ë\95\8c문ì\97\90 ì\82¬ì\9a©ì\9e\90 ê³\84ì \95ì\9d´ ë§\8cë\93¤ì\96´ì§\80ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤.\nì¿ í\82¤ë¥¼ í\97\88ì\9a©í\95\9c ê²\83ì\9d\84 í\99\95ì\9d¸í\95\9c í\9b\84ì\97\90 이 문서를 새로 고치고 나서 다시 시도하세요.",
+       "nocookiesfornew": "ì\9a\94ì²­ì\9d\98 ì¶\9cì²\98를 í\99\95ì\9d¸í\95  ì\88\98 ì\97\86기 ë\95\8c문ì\97\90 ì\82¬ì\9a©ì\9e\90 ê³\84ì \95ì\9d´ ë§\8cë\93¤ì\96´ì§\80ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤.\nì¿ í\82¤ë¥¼ í\99\9cì\84±í\99\94í\95\9c ê²\83ì\9d\84 í\99\95ì\9d¸í\95\98ê³ , 이 문서를 새로 고치고 나서 다시 시도하세요.",
        "noname": "사용자 계정 이름이 올바르지 않습니다.",
        "loginsuccesstitle": "로그인 성공",
-       "loginsuccess": "'''{{SITENAME}}에 \"$1\" 계정으로 로그인했습니다.'''",
+       "loginsuccess": "<strong>{{SITENAME}}에 \"$1\" 계정으로 로그인했습니다.</strong>",
        "nosuchuser": "\"$1\" 사용자가 존재하지 않습니다.\n사용자 계정 이름은 대소문자를 구별합니다.\n철자가 맞는지 확인해주세요. [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].",
        "nosuchusershort": "이름이 \"$1\"인 사용자는 없습니다.\n철자가 맞는지 확인하세요.",
        "nouserspecified": "사용자 계정 이름을 입력하지 않았습니다.",
        "changeemail": "이메일 주소 바꾸기",
        "changeemail-text": "이메일 주소를 바꾸려면 이 양식을 채우세요. 이 바뀜을 확인하기 위해 비밀번호를 입력해야 합니다.",
        "changeemail-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
-       "changeemail-oldemail": "현재 이메일 주소 :",
+       "changeemail-oldemail": "현재 이메일 주소:",
        "changeemail-newemail": "새 이메일 주소:",
        "changeemail-none": "(없음)",
        "changeemail-password": "{{SITENAME}} 비밀번호:",
        "link_sample": "링크 제목",
        "link_tip": "안쪽 링크",
        "extlink_sample": "http://www.example.com 사이트 이름",
-       "extlink_tip": "바깥 링크 (주소 앞에 http://가 있어야 합니다)",
+       "extlink_tip": "바깥 링크 (http://를 앞에 붙여야 합니다)",
        "headline_sample": "제목",
        "headline_tip": "2단계 문단 제목",
        "nowiki_sample": "여기에 위키 문법을 사용하지 않을 글을 적어 주세요",
        "image_tip": "파일 넣기",
        "media_tip": "파일 링크하기",
        "sig_tip": "내 서명과 현재 시각",
-       "hr_tip": "가로 줄 (되도록 사용하지 말아 주세요)",
+       "hr_tip": "가로 줄 (되도록 사용하지 말아주세요)",
        "summary": "요약:",
        "subject": "주제/제목:",
        "minoredit": "사소한 편집입니다",
        "blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: $2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "autoblockedtext": "당신의 IP 주소는 $1 사용자가 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:$2\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "blockednoreason": "이유를 입력하지 않음",
-       "whitelistedittext": "문서를 편집하려면 $1해야 합니다.",
+       "whitelistedittext": "문서를 편집하기 전에  $1해야 합니다.",
        "confirmedittext": "문서를 고치려면 이메일 인증 절차가 필요합니다.\n[[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.",
        "nosuchsectiontitle": "문단을 찾을 수 없음",
        "nosuchsectiontext": "존재하지 않는 문단을 편집하려 했습니다.\n이 문서를 보는 동안 문단이 이동되었거나 삭제되었을 수 있습니다.",
        "loginreqlink": "로그인",
        "loginreqpagetext": "다른 문서를 보기 위해서는 $1해야 합니다.",
        "accmailtitle": "비밀번호를 보냈습니다",
-       "accmailtext": "[[User talk:$1|$1]] 사용자의 비밀번호를 임의로 만들어 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.",
+       "accmailtext": "[[User talk:$1|$1]] 사용자의 비밀번호를 임의로 만들어 $2(으)로 보냈습니다. 로그인하고 나서 <em>[[Special:ChangePassword|비밀번호를 바꿀]]</em> 수 있습니다.",
        "newarticle": "(새 문서)",
-       "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+       "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
        "anontalkpagetext": "----\n여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.\n익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.\nIP 주소는 여러 사용자가 공유할 수 있습니다.\n자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.",
        "noarticletext": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],\n이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,\n문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.",
        "noarticletext-nopermission": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.",
        "missing-revision": "\"{{FULLPAGENAME}}\"이라는 문서의 #$1판이 존재하지 않습니다.\n\n이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.\n자세한 내용은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 확인할 수 있습니다.",
-       "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하려면 계정이 존재하는지 확인해주세요.",
+       "userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하기 전에 계정이 존재하는지 확인해주세요.",
        "userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
-       "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참하십시오:",
+       "blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참하십시오:",
        "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
        "usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
        "userjspreview": "'''사용자 자바스크립트 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
        "sitecsspreview": "'''이 CSS의 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
        "sitejspreview": "'''이 자바스크립트 코드의 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
-       "userinvalidcssjstitle": "'''경고''': \"$1\" 스킨은 없습니다.\n.css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.",
+       "userinvalidcssjstitle": "<strong>경고:</strong> \"$1\" 스킨은 없습니다.\n.css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.",
        "updated": "(바뀜)",
-       "note": "'''참고:'''",
+       "note": "<strong>참고:</strong>",
        "previewnote": "'''이 화면은 미리 보기입니다.'''\n편집한 내용은 아직 저장하지 않았습니다!",
        "continue-editing": "편집 영역으로 가기",
        "previewconflict": "이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.",
        "explainconflict": "문서를 편집하는 도중에 누군가 이 문서를 고쳤습니다.\n위쪽의 문서가 지금 바뀐 문서이고, 아래쪽의 문서가 당신이 편집한 문서입니다.\n아래쪽의 내용을 위쪽에 적절히 합쳐 주시기 바랍니다.\n\"{{int:savearticle}}\"을 누르면 '''위쪽의 편집 내역만''' 저장됩니다.",
        "yourtext": "당신의 편집",
        "storedversion": "현재 문서",
-       "nonunicodebrowser": "'''경고: 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''\n아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
+       "nonunicodebrowser": "<strong>경고: 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.</strong>\n아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
        "editingold": "<strong>경고: 이 문서의 오래된 판을 편집하고 있습니다.</strong>\n이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.",
        "yourdiff": "차이",
        "copyrightwarning": "{{SITENAME}}에서의 모든 기여는 $2 라이선스로 배포된다는 점을 유의해 주세요 (자세한 내용에 대해서는 $1 문서를 읽어주세요).\n만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
        "copyrightwarning2": "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.\n만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />\n또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).\n'''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
        "longpageerror": "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''\n저장할 수 없습니다.",
        "readonlywarning": "'''경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
-       "protectedpagewarning": "'''경고: 이 문서는 관리자만 편집할 수 있도록 보호되어 있습니다.'''\n이 문서의 최근 기록을 참고하십시오:",
-       "semiprotectedpagewarning": "'''참고:''' 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.\n이 문서의 최근 기록을 참고하십시오:",
-       "cascadeprotectedwarning": "'''경고''': 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
-       "titleprotectedwarning": "'''경고: 이 문서는 잠겨 있어, 문서를 만드려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.'''\n아래 문서의 최근 기록을 참고하십시오:",
+       "protectedpagewarning": "<strong>경고: 이 문서는 관리자 권한이 있는 사용자만 편집할 수 있도록 보호되어 있습니다.</strong>\n이 문서의 최근 기록을 참조하십시오:",
+       "semiprotectedpagewarning": "<strong>참고:</strong> 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.\n이 문서의 최근 기록을 참조하십시오:",
+       "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
+       "titleprotectedwarning": "<strong>경고: 이 문서는 잠겨 있어, 문서를 만드려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.</strong>\n아래 문서의 최근 기록을 참조하십시오:",
        "templatesused": "이 문서에서 사용한 {{PLURAL:$1|틀}}:",
        "templatesusedpreview": "이 미리 보기에서 사용하고 있는 {{PLURAL:$1|틀}}:",
        "templatesusedsection": "이 문단에서 사용하고 있는 {{PLURAL:$1|틀}}:",
        "content-json-empty-array": "빈 배열",
        "duplicate-args-category": "중복된 인수를 사용한 틀의 호출을 포함한 문서",
        "duplicate-args-category-desc": "문서에 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>나 <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>와 같은, 인수를 중복하여 사용한 틀 호출을 포함합니다.",
-       "expensive-parserfunction-warning": "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.\n\n$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
+       "expensive-parserfunction-warning": "<strong>경고:</strong> 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.\n\n$2개 보다 적게 {{PLURAL:$2|써야}} 하지만 {{PLURAL:$1|지금은 $1개를 쓰고 있습니다}}.",
        "expensive-parserfunction-category": "느린 파서 함수 호출을 너무 많이 하는 문서",
-       "post-expand-template-inclusion-warning": "'''경고:''' 틀 포함 크기가 너무 큽니다.\n일부 틀은 포함되지 않을 수 있습니다.",
+       "post-expand-template-inclusion-warning": "<strong>경고:</strong> 틀 포함 크기가 너무 큽니다.\n일부 틀은 포함되지 않을 수 있습니다.",
        "post-expand-template-inclusion-category": "사용한 틀의 크기가 지나치게 큰 문서의 목록",
-       "post-expand-template-argument-warning": "'''경고:''' 이 문서는 전개하면 크기가 너무 큰 틀 인수가 하나 이상 포함되어 있습니다.\n이 인수는 생략했습니다.",
+       "post-expand-template-argument-warning": "<strong>경고:</strong> 이 문서는 전개하면 크기가 너무 큰 틀 인수가 하나 이상 포함되어 있습니다.\n이 인수는 생략했습니다.",
        "post-expand-template-argument-category": "생략된 틀 변수를 포함한 문서",
        "parser-template-loop-warning": "재귀적인 틀이 발견되었습니다: [[$1]]",
        "parser-template-recursion-depth-warning": "틀 반복 깊이 제한을 초과함 ($1)",
        "revdelete-show-no-access": "$1 $2 판을 보이는 데 오류 발생: 이 판은 \"제한\"으로 표시되어 있습니다.\n여기에 접근할 수 없습니다.",
        "revdelete-modify-no-access": "$1 $2 판을 고치는 데 오류 발생: 이 판은 \"제한\"으로 표시되어 있습니다.\n여기에 접근할 수 없습니다.",
        "revdelete-modify-missing": "판 ID $1을 수정하는 중 오류 발생: 데이터베이스에 존재하지 않습니다!",
-       "revdelete-no-change": "'''경고:''' $1 $2에 해당하는 항목은 이미 같은 보이기 설정이 설정되어 있습니다.",
+       "revdelete-no-change": "<strong>경고:</strong> $1 $2에 해당하는 항목은 이미 요청한 보이기 설정이 설정되어 있습니다.",
        "revdelete-concurrent-change": "$1 $2에 수정된 항목을 새로 고치면서 오류 발생: 이런 현상은 당신이 문서를 편집하고 있을 때 다른 사람이 문서를 편집했기 때문에 발생합니다.\n관련 기록을 확인해 보세요.",
        "revdelete-only-restricted": "$1 $2 버전 숨기기 오류: 다른 숨기기 설정을 같이 설정하지 않고 관리자가 보지 못하도록 특정 판을 숨길 수 없습니다.",
        "revdelete-reason-dropdown": "*일반적인 삭제 이유\n** 저작권 침해\n** 부적절한 의견과 개인 정보\n** 부적절한 이름\n** 잠재적인 비방 정보",
        "revdelete-edit-reasonlist": "삭제 이유 편집",
        "revdelete-offender": "판 작성자:",
        "suppressionlog": "숨기기 기록",
-       "suppressionlogtext": "다음은 관리자로부터 숨겨진 내용에 관한 삭제와 차단 기록입니다.\n현재 차단된 사용자 목록을 보려면 [[Special:BlockList|차단된 사용자 목록]]을 참하세요.",
+       "suppressionlogtext": "다음은 관리자로부터 숨겨진 내용에 관한 삭제와 차단 기록입니다.\n현재 차단된 사용자 목록을 보려면 [[Special:BlockList|차단된 사용자 목록]]을 참하세요.",
        "mergehistory": "문서 역사 합치기",
-       "mergehistory-header": "이 문서는 한 문서에서 다른 문서로 문서 역사를 합치게 할 것입니다.\n이전 문서를 역사적 기록으로 계속 남겨둘 것인지 확인해주세요.",
+       "mergehistory-header": "이 페이지는 새 문서 안으로 한 원본 문서의 편집 역사를 합치게 됩니다.\n이전 문서의 바뀜을 역사적 기록으로 계속 남겨둘 것인지 확인해주세요.",
        "mergehistory-box": "두 문서의 판 합치기:",
        "mergehistory-from": "원본 문서:",
        "mergehistory-into": "대상 문서:",
        "mergehistory-invalid-destination": "대상 문서는 올바른 제목이어야 합니다.",
        "mergehistory-autocomment": "[[:$1]] 문서를 [[:$2]] 문서로 합침",
        "mergehistory-comment": "[[:$1]] 문서를 [[:$2]] 문서로 합침: $3",
-       "mergehistory-same-destination": "원본 문서 이름과 대상 문서 이름은 달라야 합니다",
+       "mergehistory-same-destination": "원본 문서 이름과 대상 문서 이름은 같을 수 없습니다",
        "mergehistory-reason": "이유:",
        "mergelog": "합치기 기록",
        "revertmerge": "합치기 해제",
        "search-category": "(분류 $1)",
        "search-file-match": "(내용이 일치하는 파일 있음)",
        "search-suggest": "$1 문서를 찾고 있으신가요?",
+       "search-rewritten": "$1의 결과를 보여주고 있습니다. $2를 대신 검색합니다.",
        "search-interwiki-caption": "자매 프로젝트",
        "search-interwiki-default": "$1로부터의 결과:",
        "search-interwiki-more": "(더 보기)",
        "powersearch-togglenone": "모두 제외",
        "powersearch-remember": "향후 검색에 선택 기억하기",
        "search-external": "바깥 검색",
-       "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google(구글)을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
+       "searchdisabled": "{{SITENAME}} 검색이 비활성화되어 있습니다.\n검색이 작동하지 않는 동안에는 Google을 통해 검색할 수 있습니다.\n검색 엔진의 내용은 최신이 아닐 수 있다는 점을 참고하세요.",
        "search-error": "검색하는 동안 오류가 발생했습니다: $1",
        "preferences": "사용자 환경 설정",
        "mypreferences": "환경 설정",
        "badsig": "서명이 잘못되었습니다.\nHTML 태그를 확인하세요.",
        "badsiglength": "서명이 너무 깁니다.\n서명은 $1 {{PLURAL:$1|글자}}보다 짧아야 합니다.",
        "yourgender": "어떤 성별로 표시되는 것을 선호합니까?",
-       "gender-unknown": "ë°\9dí\9e\88ê³  ì\8b¶ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤",
+       "gender-unknown": "ë\8b¹ì\8b ì\9d\84 ì\96¸ê¸\89í\95  ë\95\8c, ì\86\8cí\94\84í\8a¸ì\9b¨ì\96´ë\8a\94 ê°\80ë\8a¥í\95\9c í\95\9c ì\84± ì¤\91립ì \81ì\9d¸ ë\8b¨ì\96´ë¥¼ ì\82¬ì\9a©í\95  ê²\83ì\9e\85ë\8b\88ë\8b¤.",
        "gender-male": "위키 문서를 편집하는 남자입니다",
        "gender-female": "위키 문서를 편집하는 여자입니다",
        "prefs-help-gender": "이 환경 설정은 선택 사항입니다.\n소프트웨어는 적절한 성별 문법을 사용하여 다른 사용자에게 당신을 언급하는 것을 해결하기 위해 사용됩니다.\n이 정보는 공개됩니다.",
        "right-edit": "문서 편집",
        "right-createpage": "문서 만들기 (토론 문서 제외)",
        "right-createtalk": "토론 문서 만들기",
-       "right-createaccount": "새 계정 만들기",
+       "right-createaccount": "새 사용자 계정 만들기",
        "right-minoredit": "사소한 편집으로 표시",
        "right-move": "문서 옮기기",
        "right-move-subpages": "문서와 하위 문서 옮기기",
        "newpageletter": "새글",
        "boteditletter": "봇",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|사용자}} $1명이 주시하고 있음]",
-       "rc_categories": "다음 분류로 제한 (\"|\"로 구분)",
-       "rc_categories_any": "모두",
+       "rc_categories": "다음 분류로 제한 (\"|\"로 구분):",
+       "rc_categories_any": "선택된 것 중 아무거나",
        "rc-change-size-new": "바꾼 후 $1 {{PLURAL:$1|바이트}}",
-       "newsectionsummary": "새 주제: /* $1 */",
+       "newsectionsummary": "/* $1 */ 새 문단",
        "rc-enhanced-expand": "자세한 내용 보기",
        "rc-enhanced-hide": "자세한 기록 숨기기",
        "rc-old-title": "처음에 \"$1\"라는 제목으로 만들어졌습니다",
        "upload-too-many-redirects": "URL이 너무 많은 넘겨주기를 포함하고 있습니다.",
        "upload-http-error": "HTTP 오류 발생: $1",
        "upload-copy-upload-invalid-domain": "이 도메인에 속하지 않는 웹사이트의 파일을 올릴 수 없습니다.",
+       "upload-dialog-title": "파일 올리기",
+       "upload-dialog-error": "오류가 발생했습니다",
+       "upload-dialog-warning": "경고가 일어났습니다",
+       "upload-dialog-button-cancel": "취소",
+       "upload-dialog-button-done": "완료",
+       "upload-dialog-button-save": "저장",
+       "upload-dialog-button-upload": "올리기",
+       "upload-dialog-label-select-file": "파일을 선택해주세요.",
+       "upload-dialog-label-infoform-title": "자세한 사항",
+       "upload-dialog-label-infoform-name": "이름",
+       "upload-dialog-label-infoform-description": "설명",
+       "upload-dialog-label-usage-title": "사용",
+       "upload-dialog-label-usage-filename": "파일 이름",
        "backend-fail-stream": "\"$1\" 파일을 스트림할 수 없습니다.",
        "backend-fail-backup": "\"$1\" 파일을 백업할 수 없습니다.",
        "backend-fail-notexists": "$1 파일이 존재하지 않습니다.",
        "uploadstash-refresh": "파일 목록을 새로 고침",
        "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.",
        "img-auth-accessdenied": "접근이 거부됨",
-       "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 을 참하십시오.",
+       "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 을 참하십시오.",
        "img-auth-notindir": "요청한 경로가 설정한 올리기 디렉터리에 없습니다.",
        "img-auth-badtitle": "\"$1\"에서 올바른 제목을 만들 수 없습니다.",
        "img-auth-nologinnWL": "로그인하지 않았으며 \"$1\" 파일은 화이트리스트에 존재하지 않습니다.",
        "filehist-user": "사용자",
        "filehist-dimensions": "크기",
        "filehist-filesize": "파일 크기",
-       "filehist-comment": "ë\8d§글",
+       "filehist-comment": "ë\8c\93글",
        "imagelinks": "이 파일을 사용하는 문서",
        "linkstoimage": "다음 {{PLURAL:$1|문서 $1개}}가 이 파일을 가리키고 있습니다:",
        "linkstoimage-more": "$1개 이상의 {{PLURAL:$1|문서}}가 이 파일을 가리키고 있습니다.\n다음 목록은 이 파일을 {{PLURAL:$1|가리키는 처음 문서 $1개}}만 보여주고 있습니다.\n이 파일을 가리키는 [[Special:WhatLinksHere/$2|모든 문서 목록]]을 볼 수 있습니다.",
        "unusedimages": "사용하지 않는 파일 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
-       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참하세요.",
+       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참하세요.",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "wantedfiles": "필요한 파일 목록",
        "wantedfiletext-cat": "다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.",
        "newpages": "새 문서 목록",
        "newpages-username": "사용자 이름:",
        "ancientpages": "오래된 문서 목록",
-       "move": "ì\98®ê¸°ê¸°",
+       "move": "ì\9d´ë\8f\99",
        "movethispage": "이 문서 옮기기",
        "unusedimagestext": "다음은 어떠한 문서도 사용하지 않는 파일의 목록입니다.\n다른 사이트에서 URL 접근을 통해 파일을 사용할 수 있기 때문에, 아래 목록에 있는 파일도 실제로 사용 중일 가능성이 있다는 점을 주의해주세요.",
        "unusedcategoriestext": "사용하지 않는 분류 문서의 목록입니다.",
        "booksources-isbn": "ISBN:",
        "booksources-search": "검색",
        "booksources-text": "아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다.",
-       "booksources-invalid-isbn": "ì\9e\85ë ¥í\95\9c ISBNì\9d´ ì\9e\98못ë\90\9c ê²\83ì\9c¼ë¡\9c ë³´ì\9e\85ë\8b\88ë\8b¤. ì\9b\90본과 ë\8c\80ì¡°í\95´ 보세요.",
+       "booksources-invalid-isbn": "ì\9e\85ë ¥í\95\9c ISBNì\9d´ ì\98¬ë°\94르ì§\80 ì\95\8aì\9d\80 ê²\83ì\9c¼ë¡\9c ë³´ì\9e\85ë\8b\88ë\8b¤. ì\9b\90본과 ë\8c\80ì¡°í\95´ ë¬¸ì \9cê°\80 ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95´보세요.",
        "specialloguserlabel": "작업 수행자:",
        "speciallogtitlelabel": "대상 (제목 또는 사용자):",
        "log": "기록 목록",
        "cachedspecial-viewing-cached-ts": "현재 이 문서는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.",
        "cachedspecial-refresh-now": "최신 버전 보기.",
        "categories": "분류 목록",
-       "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참하세요.",
+       "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참하세요.",
        "categoriesfrom": "다음으로 시작하는 분류를 보여주기:",
        "special-categories-sort-count": "갯수 순으로 정렬",
        "special-categories-sort-abc": "알파벳순으로 정렬",
        "linksearch-pat": "검색 패턴:",
        "linksearch-ns": "이름공간:",
        "linksearch-ok": "검색",
-       "linksearch-text": "\"*.wikipedia.org\"와 같이 와일드 카드를 사용할 수 있습니다.\n적어도 \"*.org\"와 같이 최상위 도메인을 입력해야 합니다.<br />\n지원하는 {{PLURAL:$2|프로토콜}}: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)",
+       "linksearch-text": "\"*.wikipedia.org\"와 같이 와일드 카드를 사용할 수 있습니다.\n적어도 \"*.org\"와 같이 최상위 도메인을 입력해야 합니다.<br />\n지원하는 {{PLURAL:$2|프로토콜}}: $1 (프로토콜을 지정하지 않을 때 기본값은 http://)",
        "linksearch-line": "$2에서 $1 을 링크하고 있습니다.",
        "linksearch-error": "와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.",
        "listusersfrom": "다음으로 시작하는 사용자 보기:",
        "activeusers-hidesysops": "관리자를 숨기기",
        "activeusers-noresult": "사용자가 없습니다.",
        "listgrouprights": "사용자 권한 목록",
-       "listgrouprights-summary": "다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.\n각각의 권한에 대해서는 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]를 참하세요.",
+       "listgrouprights-summary": "다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.\n각각의 권한에 대해서는 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]를 참하세요.",
        "listgrouprights-key": "범례:\n* <span class=\"listgrouprights-granted\">부여된 권한</span>\n* <span class=\"listgrouprights-revoked\">해제된 권한</span>",
        "listgrouprights-group": "그룹",
        "listgrouprights-rights": "권한",
        "emailuser": "이메일 보내기",
        "emailuser-title-target": "이 {{GENDER:$1|사용자}}에게 이메일 보내기",
        "emailuser-title-notarget": "사용자에게 이메일 보내기",
-       "emailpage": "사용자에게 이메일 보내기",
        "emailpagetext": "이 {{GENDER:$1|사용자}}가 환경 설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다.\n이메일을 받은 사용자가 바로 답장할 수 있도록 하기 위해 [[Special:Preferences|사용자 환경 설정]]에 적은 이메일 주소가 \"보내는 사람\" 정보에 들어갑니다. 따라서 받는 사람이 당신에게 직접 답장을 보낼 수 있습니다.",
        "defemailsubject": "\"$1\" 사용자가 보낸 {{SITENAME}} 이메일",
        "usermaildisabled": "사용자 이메일 비활성화됨",
        "emailccsubject": "$1에게 보낸 메시지의 복사본: $2",
        "emailsent": "이메일 보냄",
        "emailsenttext": "이메일을 보냈습니다.",
-       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"{{int:emailpage}}\" 기능을 통해 보냈습니다.",
+       "emailuserfooter": "이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 \"{{int:emailuser}}\" 기능을 통해 보냈습니다.",
        "usermessage-summary": "시스템 메시지 남기기",
        "usermessage-editor": "시스템 메신저",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "주시문서 목록을 보거나 고치려면 로그인하세요.",
        "watchnologin": "로그인하지 않음",
        "addwatch": "주시문서 목록에 추가",
-       "addedwatchtext": "\"[[:$1]]\" 문서를 [[Special:Watchlist|주시문서 목록]]에 추가했습니다.\n앞으로 이 문서나 관련된 토론 문서가 바뀌면 보일 것입니다.",
+       "addedwatchtext": "\"[[:$1]]\" 문서와 그 토론 문서가 [[Special:Watchlist|주시문서 목록]]에 추가되었습니다.",
        "addedwatchtext-short": "\"$1\" 문서를 주시문서 목록에 추가했습니다.",
        "removewatch": "주시문서 목록에서 제거",
-       "removedwatchtext": "\"[[:$1]]\" 문서를 [[Special:Watchlist|주시문서 목록]]에서 뺐습니다.",
+       "removedwatchtext": "\"[[:$1]]\" 문서와 그 토론 문서가 [[Special:Watchlist|주시문서 목록]]에서 제거되었습니다.",
        "removedwatchtext-short": "\"$1\" 문서를 주시문서 목록에 제거했습니다.",
        "watch": "주시",
        "watchthispage": "주시하기",
        "logentry-contentmodel-change-revertlink": "되돌리기",
        "logentry-contentmodel-change-revert": "되돌리기",
        "protectlogpage": "문서 보호 기록",
-       "protectlogtext": "아래의 목록은 문서 보호에 관한 바뀜에 대한 기록입니다.\n현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참하세요.",
+       "protectlogtext": "아래의 목록은 문서 보호에 관한 바뀜에 대한 기록입니다.\n현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참하세요.",
        "protectedarticle": "사용자가 \"[[$1]]\" 문서를 보호했습니다",
        "modifiedarticleprotection": "사용자가 \"[[$1]]\" 문서의 보호 설정을 바꿨습니다",
        "unprotectedarticle": "사용자가 \"[[$1]]\" 문서를 보호 해제했습니다",
        "protect-locked-blocked": "차단된 동안에는 보호 설정을 바꿀 수 없습니다.\n'''$1''' 문서의 보호 설정은 다음과 같습니다:",
        "protect-locked-dblock": "데이터베이스가 잠겨 문서 보호 설정을 바꿀 수 없습니다.\n'''$1''' 문서의 현재 설정은 다음과 같습니다:",
        "protect-locked-access": "문서 보호 수준을 바꿀 권한이 없습니다.\n'''$1''' 문서의 권한은 다음과 같습니다.",
-       "protect-cascadeon": "다음 {{PLURAL:$1|문서}}에 연쇄적 보호가 작동하고 있어 그 문서에 속한 이 문서도 현재 보호됩니다.\n이 문서의 보호 설정을 바꾸는 것은 연쇄적 보호에는 영향을 주지 않습니다.",
+       "protect-cascadeon": "다음 {{PLURAL:$1|문서|문서들}}에 연쇄적 보호가 작동하고 있어 그 문서에 속한 이 문서도 현재 보호됩니다.\n이 문서의 보호 설정을 바꾸는 것은 연쇄적 보호에는 영향을 주지 않습니다.",
        "protect-default": "모든 사용자에게 허용",
        "protect-fallback": "\"$1\" 권한의 사용자만 허용",
        "protect-level-autoconfirmed": "자동 인증된 사용자만 허용",
        "undeletepagetext": "다음 {{PLURAL:$1|문서는 삭제되었지만|문서 $1개는 삭제되었지만}} 아직 보관되어 있고 되살릴 수 있습니다.\n보관된 문서는 주기적으로 삭제될 것입니다.",
        "undelete-fieldset-title": "문서 되살리기",
        "undeleteextrahelp": "문서 역사 전체를 되살리려면 모든 체크박스의 선택을 해제하고 '''{{int:undeletebtn}}'''를 누르세요.\n특정한 버전만 되살리려면 되살리려는 버전을 선택하고 '''{{int:undeletebtn}}'''를 누르세요.",
-       "undeleterevisions": "{{PLURAL:$1|판}} $1개가 보존되어 있습니다",
+       "undeleterevisions": "{{PLURAL:$1|판|판들}} $1개가 보존되어 있습니다",
        "undeletehistory": "문서를 되살리면 모든 역사가 같이 복구됩니다.\n문서가 삭제된 뒤 같은 이름의 문서가 만들어졌다면, 복구되는 역사는 지금 역사의 과거 부분에 나타날 것입니다.",
        "undeleterevdel": "복구하려는 문서의 최신판이 삭제되어 있는 경우 문서를 되살릴 수 없습니다.\n이러한 경우 삭제된 최신판 문서의 확인 상자를 선택 해제하거나 숨김을 해제해야 합니다.",
        "undeletehistorynoadmin": "이 문서는 삭제되었습니다.\n삭제된 이유와 삭제되기 전에 이 문서를 편집한 사용자가 아래에 나와 있습니다.\n삭제된 문서의 내용을 보려면 관리자 권한이 필요합니다.",
        "lockedbyandtime": "({{GENDER:$1|$1}} 사용자가 $2 $3에 잠금)",
        "move-page": "$1 옮기기",
        "move-page-legend": "문서 옮기기",
-       "movepagetext": "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 된 문서로 옮길 수 있습니다.\n원래의 문서는 새 문서로 넘겨주는 링크로만 남게 되고,\n원래 이름을 가리키는 넘겨주기는 자동으로 갱신됩니다.\n만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]를 확인해주세요.\n당신은 링크와 가리키는 대상이 서로 일치하도록 해야 하는 책임을 집니다.\n\n만약 이미 있는 문서의 이름을 새 이름으로 입력했을 때는 그 문서가 넘겨주기 문서이고 문서 역사가 없어야만 이동이 됩니다. 그렇지 않을 경우에는 이동되지 '''않습니다'''.\n이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.\n\n'''주의!'''\n자주 사용하는 문서를 이동하면 해결하기 어려운 문제를 일으킬 수도 있습니다.\n이동하기 전에 반드시 이 문서를 이동해도 문제가 없는지 확인해주세요.",
-       "movepagetext-noredirectfixer": "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 된 문서로 옮길 수 있습니다.\n원래의 문서는 새 문서로 넘겨주는 링크로만 남게 됩니다.\n[[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]를 확인해주세요.\n당신은 링크와 가리키는 대상이 서로 일치하도록 해야 하는 책임을 집니다.\n\n만약 이미 있는 문서의 이름을 새 이름으로 입력했을 때는 그 문서가 넘겨주기 문서이고 문서 역사가 없어야만 이동이 됩니다. 그렇지 않을 경우에는 이동되지 '''않습니다'''.\n이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.\n\n'''주의!'''\n자주 사용하는 문서를 이동하면 해결하기 어려운 문제를 일으킬 수도 있습니다.\n이동하기 전에 반드시 이 문서를 이동해도 문제가 없는지 확인해주세요.",
+       "movepagetext": "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 된 문서로 옮길 수 있습니다.\n원래의 문서는 새 문서로 넘겨주는 링크로만 남게 되고,\n원래 이름을 가리키는 넘겨주기는 자동으로 갱신됩니다.\n만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]를 확인해주세요.\n당신은 링크와 가리키는 대상이 서로 일치하도록 해야 하는 책임을 집니다.\n\n만약 이미 있는 문서의 이름을 새 이름으로 입력했을 때는 그 문서가 넘겨주기 문서이고 문서 역사가 없어야만 이동이 됩니다. 그렇지 않을 경우에는 이동되지 <strong>않습니다</strong>.\n이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.\n\n<strong>주의!</strong>\n자주 사용하는 문서를 이동하면 해결하기 어려운 문제를 일으킬 수도 있습니다.\n이동하기 전에 반드시 이 문서를 이동해도 문제가 없는지 확인해주세요.",
+       "movepagetext-noredirectfixer": "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 된 문서로 옮길 수 있습니다.\n원래의 문서는 새 문서로 넘겨주는 링크로만 남게 됩니다.\n[[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]를 확인해주세요.\n당신은 링크와 가리키는 대상이 서로 일치하도록 해야 하는 책임을 집니다.\n\n만약 이미 있는 문서의 이름을 새 이름으로 입력했을 때는 그 문서가 넘겨주기 문서이고 문서 역사가 없어야만 이동이 됩니다. 그렇지 않을 경우에는 이동되지 <strong>않습니다</strong>.\n이것은 실수로 옮긴 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.\n\n<strong>주의!</strong>\n자주 사용하는 문서를 이동하면 해결하기 어려운 문제를 일으킬 수도 있습니다.\n이동하기 전에 반드시 이 문서를 이동해도 문제가 없는지 확인해주세요.",
        "movepagetalktext": "딸린 토론 문서도 자동으로 이동합니다. 하지만 다음의 경우는 '''이동하지 않습니다''':\n* 이동할 이름으로 된 문서가 이미 있는 경우\n* 아래의 선택을 해제하는 경우\n\n이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
        "movearticle": "문서 옮기기:",
-       "moveuserpage-warning": "'''경고:''' 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 '''않는다'''는 점을 참고하세요.",
+       "moveuserpage-warning": "<strong>경고:</strong> 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 <strong>않는다</strong>는 점을 참고하세요.",
        "movecategorypage-warning": "<strong>경고:</strong> 분류 문서를 옮기려고 합니다. 해당 문서만 옮겨지고 옛 분류에 있는 문서는 새 분류 안에 다시 분류되지 <em>않음</em>을 참고하세요.",
        "movenologintext": "문서를 이동하려면 [[Special:UserLogin|로그인]]해야 합니다.",
        "movenotallowed": "문서를 옮길 권한이 없습니다.",
        "delete_and_move_text": "== 삭제 필요 ==\n이동하려는 제목으로 된 \"[[:$1]]\" 문서가 이미 존재합니다.\n삭제하고 이동할까요?",
        "delete_and_move_confirm": "네. 문서를 삭제합니다",
        "delete_and_move_reason": "\"[[$1]]\"에서 문서를 이동하기 위해 삭제함",
-       "selfmove": "ì\9d´ë\8f\99í\95\98ë ¤ë\8a\94 ì \9c목ì\9d´ ì\9b\90ë\9e\98 ì \9c목과 ê°\99ì\8aµë\8b\88ë\8b¤.\nê°\99ì\9d\80 ì \9c목ì\9c¼ë¡\9cë\8a\94 옮길 수 없습니다.",
+       "selfmove": "ì\9b\90ë\9e\98 ì \9c목과 ì\9d´ë\8f\99í\95\98ë ¤ë\8a\94 ì \9c목ì\9d´ ê°\99ì\8aµë\8b\88ë\8b¤.\nê°\99ì\9d\80 ì \9c목ì\9c¼ë¡\9cë\8a\94 ë¬¸ì\84\9c룰 옮길 수 없습니다.",
        "immobile-source-namespace": "\"$1\" 이름공간에 속한 문서는 이동시킬 수 없습니다.",
        "immobile-target-namespace": "\"$1\" 이름공간에 속한 문서는 이동시킬 수 없습니다.",
        "immobile-target-namespace-iw": "인터위키 링크를 넘어 문서를 옮길 수 없습니다.",
        "imageinvalidfilename": "새 파일 이름이 잘못되었습니다.",
        "fix-double-redirects": "원래 제목을 가리키는 넘겨주기를 새로 고침",
        "move-leave-redirect": "옮긴 뒤 넘겨주기를 남기기",
-       "protectedpagemovewarning": "'''경고:''' 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.\n최근의 기록을 참고용으로 제공합니다:",
-       "semiprotectedpagemovewarning": "'''참고:''' 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.\n최근 기록 내용을 참고용로 제공합니다:",
+       "protectedpagemovewarning": "<strong>경고:</strong> 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.\n최근의 기록을 참조를 위해 아래에 제공합니다:",
+       "semiprotectedpagemovewarning": "<strong>참고:</strong> 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.\n최근 기록 내용을 참조를 위해 아래에 제공합니다:",
        "move-over-sharedrepo": "== 파일이 존재함 ==\n[[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 옮기면 공용의 파일을 덮어쓰게 될 것입니다.",
        "file-exists-sharedrepo": "선택한 파일 이름은 공용 저장소에서 사용 중입니다.\n다른 이름을 선택하세요.",
        "export": "문서 내보내기",
        "exporttext": "특정 문서와 그 문서의 편집 역사를 XML 파일로 만들 수 있습니다. 이렇게 만들어진 파일은 다른 미디어위키에서 [[Special:Import|문서 가져오기]] 기능을 통해 가져갈 수 있습니다.\n\n문서를 내보내려면, 내보내려는 문서 제목을 한 줄에 하나씩 입력해주세요. 그리고 문서의 전체 역사가 필요한지, 혹은 현재 버전만이 필요한지를 선택해 주세요.\n\n특정 문서를 내보내려면, 예를 들어 \"[[{{MediaWiki:Mainpage}}]]\" 문서를 내보내려면 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 링크를 사용할 수도 있습니다.",
        "exportall": "모든 문서를 내보내기",
        "exportcuronly": "현재 버전만 포함하고, 전체 역사는 포함하지 않음",
-       "exportnohistory": "----\n'''참고:''' 전체 문서 역사를 내보내는 기능은 성능 문제로 인해 비활성되어 있습니다.",
+       "exportnohistory": "----\n<strong>참고:</strong> 전체 문서 역사를 내보내는 기능은 성능 문제로 인해 비활성되어 있습니다.",
        "exportlistauthors": "각각 문서마다 모든 기여자의 목록을 포함",
        "export-submit": "내보내기",
        "export-addcattext": "분류에 있는 문서 추가:",
        "importfailed": "가져오기 실패: <nowiki>$1</nowiki>",
        "importunknownsource": "알 수 없는 가져오기 원본 유형",
        "importcantopen": "파일을 열 수 없습니다.",
-       "importbadinterwiki": "인터위키 링크가 잘못되었습니다.",
+       "importbadinterwiki": "인터위키 링크가 잘못되었습니다",
        "importsuccess": "가져오기 완료!",
        "importnosources": "문서를 가져올 출처 위키가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.",
        "importnofile": "가져오기 파일이 올려지지 않았습니다.",
        "tooltip-ca-nstab-main": "본문 보기",
        "tooltip-ca-nstab-user": "사용자 문서 보기",
        "tooltip-ca-nstab-media": "미디어 문서 보기",
-       "tooltip-ca-nstab-special": "이 문서는 특수 문서로, 문서 자체를 편집할 수 없습니다",
+       "tooltip-ca-nstab-special": "이 문서는 특수 문서로, 편집할 수 없습니다",
        "tooltip-ca-nstab-project": "프로젝트 문서 보기",
        "tooltip-ca-nstab-image": "파일 문서 보기",
        "tooltip-ca-nstab-mediawiki": "시스템 메시지 보기",
        "tooltip-diff": "자신이 바꾼 내용 보기",
        "tooltip-compareselectedversions": "이 문서에서 선택한 두 판 간의 차이를 비교",
        "tooltip-watch": "이 문서를 주시문서 목록에 추가",
-       "tooltip-watchlistedit-normal-submit": "항목 제거하기",
+       "tooltip-watchlistedit-normal-submit": "항목 제거",
        "tooltip-watchlistedit-raw-submit": "주시문서 목록 새로 고침",
        "tooltip-recreate": "문서를 편집하는 중 삭제되어도 새로 만들기",
        "tooltip-upload": "파일 올리기",
        "pageinfo-robot-index": "허용됨",
        "pageinfo-robot-noindex": "불허됨",
        "pageinfo-watchers": "문서를 주시하는 사용자 수",
-       "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명 ë¯¸ë§\8c",
+       "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명ë³´ë\8b¤ ì \81ì\9d\8c",
        "pageinfo-redirects-name": "이 문서의 넘겨주기 수",
        "pageinfo-redirects-value": "$1개",
        "pageinfo-subpages-name": "이 문서의 하위 문서 수",
        "filedelete-archive-read-only": "웹 서버의 \"$1\" 파일 저장 위치에 쓰기 권한이 없습니다.",
        "previousdiff": "← 이전 편집",
        "nextdiff": "다음 편집 →",
-       "mediawarning": "'''경고''': 이 파일에 악성 코드가 포함되어 있을 수 있습니다.\n파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
+       "mediawarning": "<strong>경고:</strong> 이 파일에 악성 코드가 포함되어 있을 수 있습니다.\n파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
        "imagemaxsize": "그림 최대 크기:<br />(파일 문서에 적용되는 기능)",
        "thumbsize": "섬네일 크기:",
        "widthheightpage": "$1 × $2, $3{{PLURAL:$3|쪽}}",
        "file-info-png-looped": "반복됨",
        "file-info-png-repeat": "$1{{PLURAL:$1|번}} 재생됨",
        "file-info-png-frames": "$1 {{PLURAL:$1|프레임}}",
-       "file-no-thumb-animation": "'''참고: 기술적인 제한으로 인해 이 파일의 섬네일은 애니메이션을 지원하지 않습니다.'''",
-       "file-no-thumb-animation-gif": "'''참고: 기술적인 제한으로 인해 고해상도 GIF 그림 섬네일은 애니메이션을 지원하지 않습니다.'''",
+       "file-no-thumb-animation": "<strong>참고: 기술적인 제한으로 인해 이 파일의 섬네일은 애니메이션을 지원하지 않습니다.</strong>",
+       "file-no-thumb-animation-gif": "<strong>참고: 기술적인 제한으로 인해 고해상도 GIF 그림 섬네일은 애니메이션을 지원하지 않습니다.</strong>",
        "newimages": "새 파일 목록",
        "imagelisttext": "{{PLURAL:$1|파일}} '''$1'''개를 $2순으로 정렬한 목록입니다.",
        "newimages-summary": "이 특수 문서는 최근에 올라온 파일을 나열하고 있습니다.",
        "scarytranscludefailed": "[$1 틀을 불러오는 데에 실패했습니다]",
        "scarytranscludefailed-httpstatus": "[$1 틀을 가져오는 데 실패했습니다: HTTP $2]",
        "scarytranscludetoolong": "[URL이 너무 깁니다]",
-       "deletedwhileediting": "'''경고''': 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
+       "deletedwhileediting": "<strong>경고:</strong> 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
        "confirmrecreate": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 삭제 이유는 다음과 같습니다:\n: $2\n문서를 다시 만들어야 하는지 확인해주세요.",
        "confirmrecreate-noreason": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 문서를 다시 만들어야 하는지 확인해주세요.",
        "recreate": "새로 만들기",
        "watchlistedit-normal-title": "주시문서 목록 편집하기",
        "watchlistedit-normal-legend": "주시문서 목록에서 문서 제거하기",
        "watchlistedit-normal-explain": "주시문서 목록에 있는 문서의 제목이 아래에 나와 있습니다.\n주시문서 목록에서 제거하려는 문서가 있으면 각 항목의 확인 상자를 선택한 다음 \"{{int:Watchlistedit-normal-submit}}\"를 클릭해주세요.\n또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
-       "watchlistedit-normal-submit": "í\95­ëª© ì\82­ì \9c",
+       "watchlistedit-normal-submit": "í\95­ëª© ì \9cê±°",
        "watchlistedit-normal-done": "{{PLURAL:$1|문서 1개|문서 $1개}}를 주시문서 목록에서 제거했습니다:",
        "watchlistedit-raw-title": "주시문서 목록 직접 편집하기",
        "watchlistedit-raw-legend": "주시문서 목록 직접 편집하기",
        "watchlisttools-edit": "주시문서 목록 보기/편집하기",
        "watchlisttools-raw": "주시문서 목록 직접 편집하기",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|토론]])",
-       "duplicate-defaultsort": "'''경고:''' 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
+       "duplicate-defaultsort": "<strong>경고:</strong> 기본 정렬 키 \"$2\"가 이전의 기본 정렬 키 \"$1\"를 덮어쓰고 있습니다.",
        "duplicate-displaytitle": "<strong>경고:</strong> \"$2\" 제목 표시는 기존의 표시되는 제목 \"$1\"을 덮어씁니다.",
        "invalid-indicator-name": "<strong>오류:</strong> 문서 상태 표시기의 <code>name</code> 특성은 비어 있지 않아야 합니다.",
        "version": "버전",
        "version-poweredby-others": "그 외 다른 개발자",
        "version-poweredby-translators": "translatewiki.net 번역자",
        "version-credits-summary": "[[Special:Version|미디어위키]]에 기여한 다음 사람에게 감사드립니다.",
-       "version-license-info": "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.\n\n미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참하십시오.\n\n당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
+       "version-license-info": "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.\n\n미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참하십시오.\n\n당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
        "version-software": "설치된 소프트웨어",
        "version-software-product": "제품",
        "version-software-version": "버전",
        "tags-delete-submit": "이 태그를 영구히 삭제",
        "tags-delete-not-allowed": "확장 기능에서 정의된 태그는 확장 기능 설정에서 허용되지 않은 이상 삭제할 수 없습니다.",
        "tags-delete-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+       "tags-activate-title": "태그 활성화",
+       "tags-activate-question": "\"$1\" 태그를 활성화하려고 합니다.",
        "tags-activate-reason": "이유:",
+       "tags-activate-not-allowed": "\"$1\" 태그를 활성화할 수 없습니다.",
        "tags-activate-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+       "tags-activate-submit": "활성화",
+       "tags-deactivate-title": "태그 비활성화",
+       "tags-deactivate-question": "\"$1\" 태그를 비활성화하려고 합니다.",
        "tags-deactivate-reason": "이유:",
+       "tags-deactivate-not-allowed": "\"$1\" 태그를 비활성화할 수 없습니다.",
        "tags-deactivate-submit": "비활성화",
        "tags-update-remove-not-allowed-one": "\"$1\" 태그를 제거하는 것은 허용되지 않습니다.",
        "tags-edit-title": "태그 편집",
        "htmlform-cloner-create": "더 추가",
        "htmlform-cloner-delete": "제거",
        "htmlform-cloner-required": "적어도 하나의 값이 필요합니다.",
+       "htmlform-title-badnamespace": "[[:$1]] 문서는 \"{{ns:$2}}\" 이름공간에 없습니다.",
+       "htmlform-title-not-creatable": "\"$1\"은 만들 수 없는 문서 제목입니다.",
+       "htmlform-title-not-exists": "[[:$1]] 문서는 존재하지 않습니다.",
+       "htmlform-user-not-exists": "<strong>$1</strong> 문서는 존재하지 않습니다.",
+       "htmlform-user-not-valid": "<strong>$1</strong>은 올바른 사용자 이름이 아닙니다.",
        "sqlite-has-fts": "$1 (본문 전체 검색 지원)",
        "sqlite-no-fts": "$1 (본문 전체 검색 지원 제외)",
        "logentry-delete-delete": "$1 사용자가 $3 문서를 {{GENDER:$2|삭제했습니다}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
        "logentry-suppress-block": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자를 $5 $6 설정으로 차단했습니다.",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|사용자가}} {{GENDER:$4|$3}} 사용자의 차단을 $5 $6 설정으로 변경했습니다.",
+       "logentry-import-upload": "$1 사용자가 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
+       "logentry-import-interwiki": "$1 사용자가 $3을 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
        "logentry-merge-merge": "$1 사용자가 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
        "logentry-move-move": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮겼습니다}}",
        "logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}",
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-byemail": "$3 사용자 계정을 $1님이 {{GENDER:$2|만들었고}} 비밀번호는 이메일로 보냈습니다",
        "logentry-newusers-autocreate": "$1 사용자 계정을 자동으로 {{GENDER:$2|만들었습니다}}",
+       "logentry-protect-move_prot": "$1 사용자가 보호 설정을 $4에서 $3으로 {{GENDER:$2|옮겼습니다}}",
        "logentry-rights-rights": "$1 사용자가 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-rights-legacy": "$1 사용자가 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
        "logentry-rights-autopromote": "$1 사용자의 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
        "special-characters-group-khmer": "크메르어",
        "special-characters-title-endash": "en 대시",
        "special-characters-title-emdash": "em 대시",
-       "special-characters-title-minus": "빼기 기호"
+       "special-characters-title-minus": "빼기 기호",
+       "mw-widgets-dateinput-no-date": "선택된 날짜 없음",
+       "mw-widgets-titleinput-description-new-page": "문서가 존재하지 않습니다",
+       "mw-widgets-titleinput-description-redirect": "$1 문서로 넘겨주기"
 }
index 453d189..ee0c69e 100644 (file)
        "linksearch-pat": "Излеуге шаблон:",
        "linksearch-ns": "Ат алам:",
        "linksearch-ok": "Таб",
-       "linksearch-text": "\"*.wikipedia.org\" кибик символлла хайырландырыргъа боллукъдула.\nЭм азы бла огъары дараджаны домени керекди, юлгюге: \"*.org\".<br />\nДагъан болгъан протоколла: <code>$1</code> (протокол белгиленмеген эсе, тынгылау бла http:// боллукъду)",
+       "linksearch-text": "\"*.wikipedia.org\" кибик символлла хайырландырыргъа боллукъдула.\nЭм азы бла огъары дараджаны домени керекди, юлгюге: \"*.org\".<br />\nДагъан болгъан протоколла: $1 (протокол белгиленмеген эсе, тынгылау бла http:// боллукъду)",
        "linksearch-line": "$1-ге  $2-ден джибериу берилгенди",
        "linksearch-error": "Джокерле къуру адреслени аллында хайырланыргъа боллукъдула.",
        "listusersfrom": "Бу бла башланнган къошулуучуланы кёргюз:",
        "spambot_username": "Спамны ариулау",
        "spam_reverting": "$1 бла джибериую болмагъан ахыр версиягъа къайтылады",
        "spam_blanking": "Бютеу версияла $1 бетге джибериу тутадыла, ариуланадыла",
-       "simpleantispam-label": "Ð\90нÑ\82и-Ñ\81пам Ñ\81Ñ\8bнаÑ\83.\nÐ\9cÑ\83нÑ\83 '''Ñ\82олÑ\82Ñ\83Ñ\80Ð\9cÐ\90'''!",
+       "simpleantispam-label": "СпамгÑ\8aа ÐºÑ\8aаÑ\80Ñ\88Ñ\87Ñ\8b Ñ\81Ñ\8bнаÑ\83.\nÐ\9cÑ\83нÑ\83 Ñ\82олÑ\82Ñ\83Ñ\80<strong>Ð\9cÐ\90</strong>!",
        "pageinfo-title": "«$1» бетни юсюнден информация",
        "pageinfo-header-basic": "Баш билгиле",
        "pageinfo-header-edits": "Тюрлениу тарих",
index 3c65082..63652c3 100644 (file)
@@ -7,7 +7,8 @@
                        "Reedy",
                        "Rentenirer",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "TTO"
                ]
        },
        "tog-underline": "Dun de Lengks ongerschtriische:",
@@ -27,7 +28,7 @@
        "tog-watchrollback": "Donn Sigge beim schtantepee retuur Nämme vun Änderonge automattesch för ming Oppaßlėß vörschlonn",
        "tog-minordefault": "Dun all ming Änderonge jehdes Mohl als klein Mini-Änderonge vörschlonn",
        "tog-previewontop": "Zeisch de Vör-Aanseesch övver däm Fäld för der Täx enzejävve aan.",
-       "tog-previewonfirst": "Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan",
+       "tog-previewonfirst": "Zeisch de Vör-Aanseesch tirek för et eetste Mohl beim Beärbeijde aan",
        "tog-enotifwatchlistpages": "Scheck mer en <i lang=\"en\">e-mail</i>, wann en Sigg us minge Oppaßlėß verändert woode es",
        "tog-enotifusertalkpages": "Scheck mer en <i lang=\"en\">e-mail</i>, wann ming Klaaf_Sigg jeändert weed",
        "tog-enotifminoredits": "Scheck mer och en <i lang=\"en\">e-mail</i> för de klein Mini-Änderonge",
        "december-date": "$1. Dezämber",
        "pagecategories": "{{PLURAL:$1|Saachjropp|Saachjroppe|nix}}",
        "category_header": "Atikkele en dä Saachjropp „$1“",
-       "subcategories": "Ungerjruppe",
+       "subcategories": "Ongerjroppe",
        "category-media-header": "Dateije en dä Saachjropp „$1“",
        "category-empty": "''En dä Saachjropp heh sin kein Sigge un kein Datteije.''",
        "hidden-categories": "Verschtoche Saachjropp{{PLURAL:$1||e|e }}",
        "hidden-category-category": "Verschtoche Saachjroppe",
-       "category-subcat-count": "En dä Saachrupp heh {{PLURAL:$2|es ein Ungerjrupp dren:|sin $2 Ungerjruppe dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeich:|sinn_er kein Ungerjruppe dren.}}",
+       "category-subcat-count": "En dä Saachjropp heh {{PLURAL:$2|es ein Ongerjropp dren:|sin $2 Ongerjroppe dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun wehde $1 heh|ävver dovun weed heh keine}} aanjezeijsch:|sinn_er kein Ongerjroppe dren.}}",
        "category-subcat-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Ungerjrupp dren:|sin $1 Ungerjruppe dren:|sin kein Ungerjruppe dren.}}",
        "category-article-count": "En dä Saachjropp heh {{PLURAL:$2|es ein Sigg dren:|sin $2 Sigge dren, {{PLURAL:$1|un dovun weed heh nur ein|un dovun weede $1 heh|ävver dovun weed heh keine}} aanjezeijsch:|sin kein Sigge dren.}}",
        "category-article-count-limited": "En dä Saachrupp heh {{PLURAL:$1|es ein Sigg dren:|sin $1 Sigge dren:|es kein Sigg dren.}}",
        "searchbutton": "em Tex",
        "go": "Lohß Jonn!",
        "searcharticle": "Sigg",
-       "history": "Versione",
-       "history_short": "Versione",
+       "history": "Väsjohne",
+       "history_short": "Väsjohne",
        "updatedmarker": "(jeändert)",
-       "printableversion": "För ze Drocke",
+       "printableversion": "För ze Dröcke",
        "permalink": "Ne Permalink noh heh",
        "print": "Drocke",
        "view": "Beloore",
        "newpage": "Neu Sigg",
        "talkpage": "Övver di Sigg heh schwahde",
        "talkpagelinktext": "Klaaf",
-       "specialpage": "Extrasigg",
+       "specialpage": "Äxtrasigg",
        "personaltools": "Metmaacher Werkzüch",
        "articlepage": "Aanluure wat op dä Sigg drop steiht",
        "talk": "Klaafe",
        "currentevents-url": "Project:Et Neuste",
        "disclaimers": "Henwies",
        "disclaimerpage": "Project:Impressum",
-       "edithelp": "Hölp för et Bearbeide",
+       "edithelp": "Hölp för et Beärbeijde",
        "helppage-top-gethelp": "Hölp",
        "mainpage": "Haupsigg",
        "mainpage-description": "Haupsigg",
        "versionrequiredtext": "De Väsjohn $1 vum MehdijaWikki sing Projramme es nühdich, öm di Sigg heh bruche ze künne. Süsch op [[Special:Version|de Väsjohns_Sigg]], wat mer heh för ene Schtand han.",
        "ok": "Jot!",
        "pagetitle": "$1 — {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "←&nbsp;$1",
        "retrievedfrom": "Di Sigg heh stamp vun „$1“.",
        "youhavenewmessages": "Do häs $1 ($2).",
        "readonly": "De Daatebank es jesperrt",
        "enterlockreason": "Jevv aan, woröm un för wie lang dat de Daatebank jesperrt wääde soll",
        "readonlytext": "De Daatebank es jesperrt. Neu Saache dren avspeichere jeiht jrad nit, un ändere och nit. Dä Jrund: „$1“",
-       "missing-article": "Dä Tex för de Sigg „$1“ $2 kunnte mer nit en de Daatebank finge.\nDe Sigg es villeich fottjeschmesse oder ömjenannt woode.\nWann dat nidd esu sin sollt, dann hadder villeich ene Fähler en de Soffwär jefunge.\nVerzällt et enem [[Special:ListUsers/sysop|Wiki_Köbes]],\nun doht em och de URL vun dä Sigg heh sage.",
-       "missingarticle-rev": "(Version Numero: $1)",
+       "missing-article": "Dä Tex för de Sigg „$1“ $2 kunnte mer nit en de Daatebank fenge.\nDe Sigg es velleisch fottjeschmeße udder ömjenannt woode.\nWann dat nidd esu sin sullt, dann had_Der velleich ene Fähler em Projramm vum Wikke jefonge.\nVerzälld et enem [[Special:ListUsers/sysop|Wiki_Köhbeß]],\nun doht em och dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> vun dä Sigg heh sare.",
+       "missingarticle-rev": "(Väsjohn Numero: $1)",
        "missingarticle-diff": "(Ongerscheed zwesche de Versione $1 un $2)",
        "readonly_lag": "De Daatebank es för en koote Zigg automattesch jesperrt, för de Daate vun de ongerjeodente Rääschner mem Houprääschner avzejliiche.",
        "internalerror": "De Wiki-Soffwär hät ene Fähler jefunge",
        "title-invalid-magic-tilde": "En dä jewönschte Övverschreff för di Sigg es de Reih uß 4 Tilde (<nowiki>~~~</nowiki>) un di es onjöltesch.",
        "title-invalid-too-long": "Di jewönschte Övverschreff för di Sigg es zoh lang. Se darref nit mih wi {{PLURAL:$1|ein|$1|kei}} <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Byte{{PLURAL:$1||s|}}</i> lang sin, em Kohd <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Däm Unicode singe Universal Coded Character Set + Transformation Format—8-Bit\">UTF-8</i>.",
        "title-invalid-leading-colon": "En dä jewönschter Övverschrevv för di Sigg es ene onjöllteje Dubbelpungk aam Aanfang dren.",
-       "perfcached": "Di Daate heh noh kumme usem Zweschespeicher (cache) un künnte nit mieh janz de allerneuste sin.\n{{PLURAL:$1|Bloß ein Antwoot es|Nit mieh wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.",
-       "perfcachedts": "De Daate heenoh kumme usem Zweschespeicher (<i lang=\"en\">cache</i>) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.\n{{PLURAL:$4|Bloß ein Antwoot es|Nit mieh wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.",
+       "perfcached": "Di Dahte heh noh kumme uss_em Zweschespeischer (<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„Zwescheschpeijscher “\">cache</i>) un künnte nit mih janz de allerneuste sin.\n{{PLURAL:$1|Bloß ein Antwoot es|Nit mih wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.",
+       "perfcachedts": "De Daate heenoh kumme usem Zweschespeicher (<i lang=\"en\">cache</i>) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.\n{{PLURAL:$4|Bloß ein Antwoot es|Nit mih wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.",
        "querypage-no-updates": "'''Heh di Sigg weed nit mih op ene neue Schtand jebraat.'''",
        "viewsource": "Wikitex aanluure",
        "viewsource-title": "Der Wikkitäx vun dä Sigg „$1“ belohre.",
        "actionthrottled": "Dat ka'mer nit esu öff maache",
        "actionthrottledtext": "Dat darf mer nor en jeweße Zahl Mole hengerenander maache. Do bes jrad aan de Jrenz jekumme. Kannze jo en e paar Menutte widder probeere.",
        "protectedpagetext": "Di Sigg es jeschöz, un mer kann se nit änndere.",
-       "viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere:",
-       "viewyourtext": "Do kanns Ding Änderonge aan heh dä Sigg beloore un kopeere:",
+       "viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere.",
+       "viewyourtext": "Mer kann de Quälle vun de eije Ännderonge aan heh dä Sigg beloore un kopeere.",
        "protectedinterface": "Op dä Sigg heh schteihd ene Täx uß dä Schnettschtäll vun de Wikki nom Minsch. Dröm es däh och jäje Ännderonge jeschöz, domet keine Meßß domet aanjestallt weed.",
        "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wikki.\nDenk dran, heh Änndere deit et\nUßsinn un de Wöht ändere, met dänne et Wikki op de Metmaacher un de\nBesöhker aankütt!",
        "translateinterface": "Övversäzonge för <stron>alle</strong> Wikis jonn blohß op [//translatewiki.net/ translatewiki.net], woh mer MedijaWiki övversaz weed.",
        "welcomeuser": "Wellkumme $1!",
        "welcomecreation-msg": "Dinge Zohjang es enjerescht.\nWann De wells, künnts De Ding [[Special:Preferences|Enschtällonge aanpaße]].",
        "yourname": "Metmaacher_Naame:",
-       "userlogin-yourname": "Der Metmaacher_Name",
-       "userlogin-yourname-ph": "Donn Dinge Metmaachername aanjevve",
+       "userlogin-yourname": "Der Metmaacher_Nahme",
+       "userlogin-yourname-ph": "Donn Dinge Metmaachernahme aanjävve",
        "createacct-another-username-ph": "Jivv ene Metmaacher_Nahme aan",
        "yourpassword": "Paßwoot:",
        "userlogin-yourpassword": "Et Paßwoot",
        "createacct-benefit-body2": "{{PLURAL:$1|Sigg|Sigge|Sigge }}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktive Metmaacher}}",
        "badretype": "Ding zwëij ennjejovve Paßßwööter sinn nit ejaal. Do muss De Dich för ein entscheide.",
+       "usernameinprogress": "En Zohjang för heh dä Nahme för ene Metmaacher es ald ongewähß. Donn noch jät wahde.",
        "userexists": "Ene Metmaacher met däm Name jidd et ald.\nDo muss Der ene andere Name usdenke.",
        "loginerror": "Fähler beim Enlogge",
        "createacct-error": "Fähler beim Zohjang-Aanlääje",
        "createaccount-text": "Einer hät Desch als Metmaacher „$2“ {{GRAMMAR:em|{{SITENAME}}}} aanjemälldt.\nDat es e Wikki, un De fengks et onger däm URL:\n $4\nDat Paßwoot „$3“ hät sesch dat Wiki för Desch usjewörfelt.\nDon jlisch enlogge un donn et änndere.\n\nWann Dat all böömesch Dörver för Desch sin, da fojeß heh di\ne-mail eijfach. Wann De en däm Wikki nit metmaache wells, och.",
        "login-throttled": "Do häs zo öff, zo vill, un zo lang en de letzde Zick probeet, ennzelogge.\nWaad e Wielsche ävver $1, ih dat De et wider versöhks.",
        "login-abort-generic": "Dat Enlogge hät nit jeflup.",
-       "login-migrated-generic": "Dinge Zohjang zom Wikki es verändert woode un Dinge Metmaacher_Nahme jidd_et heh nit mieh.",
+       "login-migrated-generic": "Dinge Zohjang zom Wikki es verändert woode un Dinge Metmaacher_Nahme jidd_et heh nit mih.",
        "loginlanguagelabel": "Schprohch: $1",
        "suspicious-userlogout": "Do bes '''nit''' ußjelogg.\nEt süht us, wi wann ene kappodde Brauser udder <i lang=\"en\">proxy</i>ẞööver met Zwescheschpeischer noh däm Ußlogge jefrooch hät.",
        "createacct-another-realname-tip": "Dä reschteje Nahme kam_mer fott lohße.\n\nWann dä aanjejovve es, weet_e jebruch, öm öffentlesch de Schriiver för Beidrääsch ze nänne.",
        "user-mail-no-addy": "Do häs versöhg en <i lang=\"en\">e-mail</i> der ohne en Adräß ze verschecke",
        "user-mail-no-body": "En dä <i lang=\"en\">e-mail</i> schteiht nix udder zoh winnisch dren.",
        "changepassword": "Passwood *",
-       "resetpass_announce": "Do moß jäz e neu Paßwoot för op Duur aanjevve.",
+       "resetpass_announce": "Do moß jäz e neu Paßwoot för op Duur aanjävve.",
        "resetpass_text": "<!-- Donn der Täx hee dobei -->",
        "resetpass_header": "Neu Passwood faßlääje",
        "oldpassword": "Et ahle Passwood:",
        "resetpass-submit-cancel": "Nix donn!",
        "resetpass-wrong-oldpass": "Dat Zweschepaßwood udder dat aktoälle Paßwood stemmp nit.\nMöjjelesch, Do häs Ding Paßwood ald jetuusch, künnt och sin,\nDo häs Der enzwesche e neu Zweschepaßwood jehollt.",
        "resetpass-recycled": "Donn för Ding neu Paßwoot jät anders aanjävve, wi Ding Paßwoot vun jäz.",
-       "resetpass-temp-emailed": "Do beß jez enjelogg med ennem Zweschepasswoot, wat De övver e-mail krääje häs. Dat kanns De nit einfar_esu behallde. Alsu donn jetz e neu Passwoot för op Duur aanjevve.",
+       "resetpass-temp-emailed": "Do beß jez enjelogg med ennem Zweschepasswoot, wat De övver e-mail krääje häs. Dat kanns De nit einfar_esu behallde. Alsu donn jetz e neu Passwoot för op Duur aanjävve.",
        "resetpass-temp-password": "Zweschepasswood:",
        "resetpass-abort-generic": "E Zohsazprojramm häd_et nit zohjelohße, et Paßwoot ze ändere.",
        "resetpass-expired": "Di Paßwood es afjeloufe. Donn jetz e neu Passwoot för et Enlogg faßlääje.",
        "accmailtitle": "Passwood verscheck.",
        "accmailtext": "En automattesch un zofällesch neu ußjewörfelt Passwood för dä\nMetmaacher „[[User talk:$1|$1]]“ es noh „$2“ jescheck woode.\n\nDat Passwoot för dä neue Zojang kanns De op dä {{int:Specialpage}} zom\n„[[Special:ChangePassword|{{int:resetpass}}]]“ ändere,\nwann De wider enjelogg bes.",
        "newarticle": "(Neu)",
-       "newarticletext": "Ene Link op en Sigg, wo noch nix drop steiht, weil et se noch jar nit jitt, hät Dich noh heh jebraht.\nÖm di Sigg aanzelähje, schriev heh unge en dat Feld eren, un dun dat dann avspeichere.\nLuur op de [$1 Sigge met Hölp] noh, wann De mieh dodrüvver wesse wells.\nWann De jar nit heh hen kumme wollts, dann jangk zeröck op di Sigg, wo De herjekumme bes, Dinge Brauser hät ene Knopp doför.",
+       "newarticletext": "Ene Link op en Sigg, wo noch nix drop steiht, weil et se noch jar nit jitt, hät Dich noh heh jebraht.\nÖm di Sigg aanzelähje, schriev heh unge en dat Feld eren, un dun dat dann avspeichere.\nLuur op de [$1 Sigge met Hölp] noh, wann De mih doh drövver weßße wells.\nWann De jar nit heh hen kumme wollts, dann jangk zeröck op di Sigg, wo De herjekumme bes, Dinge Brauser hät ene Knopp doför.",
        "anontalkpagetext": "----\n<i>Dat heh es de Klaaf Sigg för ene namenlose Metmaacher. Dä hät sich noch keine Metmaacher Name jejovve un\nenjerich, ov deit keine bruche. Dröm bruche mer sing IP Adress öm It oder In en uns Lisste fasszehalde.\nSu en IP Adress kann vun janz vill Metmaacher jebruch wääde, un eine Metmaacher kann janz flöck\nzwesche de ungerscheidlichste IP Adresse wähßele, womöchlich ohne dat hä et merk. Wann Do jetz ene namenlose\nMetmaacher bes, un fings, dat heh Saache an Dich jeschrevve wääde, wo Do jar nix met am Hot häs, dann bes Do\nwahrscheinlich och nit jemeint. Denk villeich ens drüvver noh, datte Dich [[Special:UserLogin/signup|anmelde]] deis,\ndomet De dann donoh nit mieh met esu en Ömständ ze dun häs, wie de andere namenlose Metmaacher heh. Wann de aanjemelldt bes un deis [[Special:UserLogin|enlogge]], dann kam_mer Desch och fun alle andere Metmaacher ongerschejde.</i>",
        "noarticletext": "<span class=\"plainlinks\">Em Momang es keine Täx op heh dä Sigg. Jangk en de Täxte vun ander Sigge [[Special:Search/{{PAGENAME}}|noh däm Titel söhke]], udder [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} donn en de Logböscher donoh loore], udder [{{FULLURL:{{FULLPAGENAME}}|action=edit}} fang di Sigg aan] ze schrieve, udder jangk zeröck woh De heer kohms. Do hät Dinge Brauser ene Knopp för.</span>",
        "noarticletext-nopermission": "Op dä Sigg es em Momang nix drop.\nDo kanns noh däm Tittel vun heh dä Sigg [[Special:Search/{{PAGENAME}}|em Tex op ander Sigge söhke]],\nudder en dä zopaß <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbööscher nohloore]</span>.",
-       "missing-revision": "En Version $1 vun dä Sigg „{{FULLPAGENAME}}“ jidd_et nit.\n\nEsu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob en Sigg follesch, di zweschedren fottjeschmeße woode es.\nMieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].",
+       "missing-revision": "En Version $1 vun dä Sigg „{{FULLPAGENAME}}“ jidd_et nit.\n\nEsu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob en Sigg follesch, di zweschedren fottjeschmeße woode es.\nMih doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].",
        "userpage-userdoesnotexist": "Enne Metmaacher „<nowiki>$1</nowiki>“ ham_mer nit, beß De sescher, dat De di Metmaachersigg verhaftesch änndere udder aanlähje wellß?.",
        "userpage-userdoesnotexist-view": "Ene Metmaacher mem Nahme „$1“ hät sesch noch nih aanjemeldt",
        "blocked-notice-logextract": "Dä Metmaacher es jraad jesperrt.\nHeh kütt der neuste Enndraach drövver uss_em Logbooch övver et Metmaacher_Sperre:",
        "nonunicodebrowser": "<strong>Opjepaß:</strong>\nDinge Brauser kann nit öhntlesch met däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"a standard for the consistent encoding, representation, and handling of text expressed in most of the world's writing systems\">UNICODE</i> un singe Bochstahbe ömjonn.\nBes esu johd un nemm ene andere Brauser för heh di Sigg!",
        "editingold": "'''Opjepaß:<br />\nDo bes en ahle, övverhollte, Väsjohn vun dä Sigg heh aam ändere.\nWann De di avschpeischere deihs,\nwi se es,\ndann jonn all di Ännderonge fleute,\ndi zikdämm aan dä Sigg jemaht wohde sin.\nAlsu:\nBes De verhaftesch secher, wat_De mähs?\n'''",
        "yourdiff": "Ungerscheide",
-       "copyrightwarning": "Ding Beidrähsch schtonn unger de $2, süch $1. Wann De nit han wells, dat Dinge Tex ömjemodelt weed, un söns wohin verdeilt, dun en hee nit speichere. Mem Avspeichere sähs De och zo, dat et vun Dir selvs es, un/oder Do dat Rääch häs, en hee zo verbreide. Wann et nit stemmp, oder Do kanns et nit nohwiese, kann Dich dat en dr Bau bränge!",
-       "copyrightwarning2": "De Beidrähsch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt\noder fottjeschmesse wääde. Wann Der dat nit rääch es, schriev nix. Et es och nüdich, dat et vun Dir selvs es, oder dat Do dat Rääch häs, et hee öffentlich wigger ze jevve. Süch $1. Wann et nit stemmp, oder Do kanns et nit nohwihse, künnt Dich dat en dr Bau bränge!",
+       "copyrightwarning": "Ding Beijdrähsch schtonn onger de $2, süch $1. Wann De nit han wells, dat Dinge Täx ömjemohdelt weed, un söns wohin verdeilt, dun en heh nit schpeischere. Mem Avspeischere sähs De och zo, dat et vun Dir selvs es, un/udder Do dat Rääch häs, en heh zo verbreide. Wann et nit schtemmp, udder Do kanns et nit nohwiese, kann Desch dat en dr Bau bränge!",
+       "copyrightwarning2": "De Beijdrähsch {{GRAMMAR:en|{{SITENAME}}}} künne vun andere Metmaacher ömjemodelt\nudder fottjeschmeße wähde. Wann Der dat nit rääch es, schriiv nix. Et es och nühdesch, dat et vun Der selvs es, oder dat Do dat Rääsch häs, et heh öffentlich wigger ze jävve. Süch $1. Wann et nit schtemmp, oder Do kanns et nit nohwihse, künnt Desch dat en der Bou bränge!",
        "longpageerror": "'''Janz schlemme Fähler:'''\nDä Tex, dä De heh jescheck häs, dä es {{PLURAL:$1|ein|$1|kei}} Kilobyte jruuß.\nDat {{PLURAL:$2|es mieh wie ei|sin mieh wie $2|es kei}} Kilobyte. Dat künne mer nit speichere!",
-       "readonlywarning": "'''Opjepass:'''\nDe Daatebank es jesperrt woode, wo Do ald am Ändere wohs.\nDä.\nJetz kanns De Ding Änderunge nit mieh faßhallde lohße.\nDun se bei Dir om Rechner faßhalde un versöhg et schpäder noch ens.\n\nNävvebei, dä Datenbank-Köbes hät för et Sperre och ene Jrund aanjejovve: $1",
+       "readonlywarning": "<strong>Opjepass:<strong>\nDe Daatebank es jesperrt woode, wo Do ald am Ändere wohs.\nDä.\nJetz kanns De Ding Änderunge nit mih faßhallde lohße.\nDun se bei Dir om Rechner faßhalde un versöhg et schpäder noch ens.\n\nNävvebei, dä Datenbank-Köbes hät för et Sperre och ene Jrund aanjejovve: $1",
        "protectedpagewarning": "<strong>Opjepass: Di Sigg heh es jähje Veränderonge jeschöz. Blohß de Wikki-Köbeße künne se änndere.</strong>\nHeh kütt der neuste Enndraach em Logbohch för di Sigg:",
        "semiprotectedpagewarning": "<strong>Opjepass:</strong> Di Sigg heh es halv jeschpächt, wi mer sage, dat heiß, Do muss aanjemeldt un enjelogg sin, wann De dran ändere wells.\nHeh kütt der neuste Enndrach em Logbohch doh drövver:",
-       "cascadeprotectedwarning": "<strong>Opjepaß:</strong> Di Sigg es jeschöz, un nur de Wikki_Köhbeße künne se änndere. Se es en en Schotz-Kaskahd enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:",
+       "cascadeprotectedwarning": "<strong>Opjepaß:</strong> Di Sigg es jeschöz, un nur de Wikki_Köhbeße künne se änndere. Dat es, weil se angeschwoh ennjeföhsch weed. Se es en en Schotz-Kaskahd enjebonge, zosamme met dä {{PLURAL:$1|Sigg|Sigge}}:",
        "titleprotectedwarning": "<span style=\"text-transform:uppercase\"> Opjepaß! </span> Di Sigg heh is jesperrt woode. Bloß [[Special:ListGroupRights|bestemmpte]] Metmaacher dörve di Sigg neu aanläje.'''\nHeh kütt der neuste Enndrach em Logbooch doh drövver:",
        "templatesused": "{{PLURAL:$1|De Schablohn|De $1 Schablohne|Kein Schablohn}}, di en dä Sigg heh jebruch {{PLURAL:$1|weed|wähde|weed}}, sinn:",
        "templatesusedpreview": "{{PLURAL:$1|De Schablohn|Schablohne|-nix-}} en dä Vör_Aanseesch heh:",
        "template-protected": "(jeschöz)",
        "template-semiprotected": "(halfjeschöz - tabu för neu Metmaacher un ohne Enlogge)",
        "hiddencategories": "Di Sigg heh is en {{PLURAL:$1|dä verschtoche Saachjropp: |dä $1 verschtoche Saachjroppe: |keij verschtoche Saachjroppe dren.}}",
-       "edittools": "<!-- Dä Tex hee zeich et Wiki unger däm Texfeld zom „Ändere/Bearbeide“ un beim Texfeld vum „Huhlade“. -->",
+       "edittools": "<!-- Dä Täx heh zeisch et Wikki onger däm Täxfeld zom „Ändere/Beärbeijde“ un beim Täxfeld vum „Huhlade“ ann. -->",
        "nocreatetext": "Sigge neu aanläje es nor müjjelich, wann de [[Special:UserLogin|enjelogg]] bes. Der ohne kanns De ävver Sigge ändere, di ald doh sin.",
        "nocreate-loggedin": "Do häs nit dat Rääch, neu Sigge aanzelääje.",
        "sectioneditnotsupported-title": "Afschnedde Ändere is nit zohjelohße",
        "permissionserrors": "Dat jeit nit, dat darfs De nit.",
        "permissionserrorstext": "Do häs nit dat Rääch, dat ze maache, {{PLURAL:$1|dä Jrund es:|de Jründe sin:|oohne Jrund.}}",
        "permissionserrorstext-withaction": "Do häs nit dat Rääch $2, {{PLURAL:$1|dä Jrond es:|de Jrönde sin:|ävver ohne aanjävbahre Jrond.}}",
-       "recreate-moveddeleted-warn": "'''Opjepaß:''' Do bes om bäste Wääsch, en Sigg neu aanzelähje, di doför ald ens fottjeschmeße woode wohr.\n\nBes förseschtesch un övverlääsch Der, of dat en johde Ideh es, di Sigg widder opzemaache. Domet De Bescheid weiß, heh de Endrääsh em Logbohch vum Sigge-Ömnänne, un em Logbohch vum Sigge-Fottschmieße mem Jrond, woröm di Sigg dohmohls fottjeschmesse woode es:",
+       "recreate-moveddeleted-warn": "'''Opjepaß:''' Do bes om bäste Wääsch, en Sigg neu aanzelähje, di doför ald ens fottjeschmeße woode wohr.\n\nBes förseschtesch un övverlääsch Der, of dat en johde Ideh es, di Sigg widder opzemaache. Domet De Bescheid weiß, heh de Endrääsh em Logbohch vum Sigge-Ömnänne, un em Logbohch vum Sigge-Fottschmihße mem Jrond, woröm di Sigg dohmohls fottjeschmeße woode es:",
        "moveddeleted-notice": "Heh di Sigg es fottjeschmeße.\nE Schtök uß dä Logböhscher fum Sigge_Fottschmihße un fum Sigge-Ömnänne för di Sigg kütt jäz, en dä Hoffnung, dat dat hellef.",
        "log-fulllog": "Donn dat janze Logbohch aanlohre",
        "edit-hook-aborted": "Et Ändere wood affjebroche övver ene sujenannte „Hoke“ en de ẞoffwäer.\nEne Jrond weße mer nit.",
        "content-model-json": "<i lang=\"en\" xml:lang=\"en\" title=\"JavaScript Object Notation\">JSON</i>",
        "content-json-empty-object": "Nix dren",
        "content-json-empty-array": "Nix dren",
-       "duplicate-args-warning": "<strong>Opjepaß:</strong> [[:$1]] röhf [[:$2]] met mih wi eijnem Wäät för der Parramehter „$3“ op. Blohß der läzde wäät vun dänne weed opjenumme un jebruch.",
+       "duplicate-args-warning": "<strong>Opjepaß:</strong> [[:$1]] röhf [[:$2]] met mih wi eijnem Wäät för der Parramehter „$3“ op. Blohß der läzde Wäät vun dänne weed opjenumme un jebruch.",
        "duplicate-args-category": "Sigge met dubbelt aanjejovve Parramehtere för Schablohne.",
        "duplicate-args-category-desc": "Sigge met Oprohve vun Schablohne met dubbelt aanjejovve Parramehtere dren, alsu esu jät wi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> un <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Opjepaß:</strong> Di Sigg heh määt zovill Opwand met Paaser-Funkßjohne.\n\n{{PLURAL:$2|Eine Oproof|Beß $2 Oproofe|Keine Oproof}} es älaup, {{PLURAL:$1|un eine Oproof|ävver $1 Oproofe|un keine Oproof}} määt di Sigg em Momang.",
        "expansion-depth-exceeded-category": "Sigge, woh de \"expansion depth\" övverschredde es",
        "expansion-depth-exceeded-category-desc": "Dat heh es de Saachjropp för Sigge, woh de \"expansion depth\" övverschreddde es.",
        "expansion-depth-exceeded-warning": "Heh di Sigg hät de \"expansion depth\" övverschredde",
-       "parser-unstrip-loop-warning": "Ene Befähl em Täx betrick sesch op sesch sellef.",
+       "parser-unstrip-loop-warning": "Ene Befähl em Täx betrek sesch op sesch sällefs.",
        "parser-unstrip-recursion-limit": "Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.",
        "converter-manual-rule-error": "Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprohche.",
        "undo-success": "De Änderong könnte mer zeröck nämme. Belohr Der de Ungerscheide un dann donn di Sigg avspeijschere, wann De dängks, et es en Ohdenong esu.",
        "undo-norev": "Do kam_mer nix zeröck nämme. Di väsjohn jidd_et nit, udder se es verschtoche udder fottjeschmeße woode.",
        "undo-nochange": "Di Änderong schingk ald retuur jemaat woode ze sin.",
        "undo-summary": "De Änderong $1 fum [[Special:Contributions/$2|$2]] ([[User talk:$2|Klaaf]]) zeröck jenomme.",
-       "undo-summary-username-hidden": "Nemm di Väsjohn $1 vun enem verschtoche Metmaacher widder retuur.",
+       "undo-summary-username-hidden": "Nemm di Väsjohn $1 vun enem verschtoche Metmaacher widder retuhr.",
        "cantcreateaccounttitle": "Kann keine Zojang enrichte",
        "cantcreateaccount-text": "Dä [[User:$3|$3]] hät verbodde, dat mer sich vun dä IP-Adress '''$1''' uß als ene neue Metmaacher aanmelde könne soll.\n\nAls Jrund för et Sperre es enjedraare: ''$2''",
        "cantcreateaccount-range-text": "Ne neue Metmaacher aanmälde vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße em Berett vun <strong>$1</strong>, woh de Dinge dren es, wood vum {{GENDER:$3|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$3|$3]] verbodde.\nDer Jrond: <em><$2</em>\n\nDing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß es: <strong>$4</strong>",
        "viewpagelogs": "De Logböcher för heh di Sigg beloore",
-       "nohistory": "Et jitt kei fottjeschmesse, zeröckhollba Versione vun dä Sigg.",
+       "nohistory": "Et jitt kei fottjeschmeße, zeröckhollbaa Väsjohne vun dä Sigg.",
        "currentrev": "Neuste Väsjohn",
        "currentrev-asof": "De neuste Version fum $2 öm $3 Uhr",
        "revisionasof": "De Version vum $2 öm $3 Uhr",
        "histlast": "de Neuste",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Bytes|0 Byte}})",
        "historyempty": "(leddich)",
-       "history-feed-title": "De Versione",
+       "history-feed-title": "De Väsjohne",
        "history-feed-description": "Ähler Versione vun dä Wikisigg",
        "history-feed-item-nocomment": "$1 aam $3 öm $4 Uhr",
-       "history-feed-empty": "De aanjefrochte Sigg jitt et nit. Künnt sin, dat se enzwesche fottjeschmesse udder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söke looße]], öm de zopass, neu Sigge ze finge.",
+       "history-feed-empty": "De aanjefrochte Sigg jidd et nit. Künnt sin, dat se enzwesche fottjeschmeße udder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söhke looße]], öm de zopaß, neuje Sigge ze fenge.",
        "history-edit-tags": "Donn de Makehronge vun de ußjesöhk Väsjohne beärbeide",
        "rev-deleted-comment": "(„Koot Zosammejefass, Quell“ usjeblendt)",
        "rev-deleted-user": "(Metmaacher_Nahme ußjebländt)",
        "revdelete-selected-text": "Di ußjesöhk Väsjohn{{PLURAL:$1||e|}} vun [[:$2]]:",
        "revdelete-selected-file": "Di ußjesöhk Väsjohn{{PLURAL:$1||e|}} vun dä Dattei [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Dä ußjewählte Logbohch_Endrach|De Ußjewählte Logbohch_Endrähsch|kein Logbohch_Endrähsch}}:",
-       "revdelete-text-text": "Fottjeschmeße Väsjohne blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
+       "revdelete-text-text": "Fottjeschmeße Väsjohne blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mih drop zohjrihfe.",
        "revdelete-text-file": "Fottjeschmeße Väsjohne vun Datteije blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
        "logdelete-text": "Fottjeschmeße Endrääsch en de Logbööscher blieve en dä Leß met de vörrije Väsjohne, ävver zom Deil kann de Öffentleschkeit nit mieh drop zohjriehfe.",
        "revdelete-text-others": "De Wiki_Kööbeße künne emmer noch drop zohjriefe un künne och wider för alle seeschbaa maache, wat jäz verschtoche es, esu lang wi kein äxtra Beschränkonge jemaat woodte.",
        "logdelete-success": "'''Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.'''",
        "logdelete-failure": "'''Däm Enndraach em Logbohch sing Seeschbaakeit kunnte mer nit ändere:''' $1",
        "revdel-restore": "Verschteische udder seeschba maache",
-       "pagehist": "Älldere Versione",
-       "deletedhist": "Fottjeschmesse Versione",
+       "pagehist": "Älldere Väsjohne",
+       "deletedhist": "Fottjeschmeße Väsjohne",
        "revdelete-hide-current": "Ene Fähler es opjetodde beim Verschteische. De Version vum $1 öm $2 Uhr es de neuste Version, un kann dröm nit verschtoche wääde.",
        "revdelete-show-no-access": "Ene Fähler es opjetodde beim Aanloore. De Version vum $1 öm $2 Uhr es verschtoche, un De häß dröm keine Zohjang doh drop.",
        "revdelete-modify-no-access": "Ene Fähler es opjetodde beim Ändere. De Version vum $1 öm $2 Uhr es verschtoche, un De häß dröm keine Zohjang doh drop.",
        "mergehistory-empty": "Mer han kei Versione för zesammezeläje",
        "mergehistory-success": "{{PLURAL:$3|Ein Version es|$3 Versione sen|Kei Version wood}} fun „[[:$1]]“ noh „[[:$2]]“ övverdraare un domet zosamme jelaat.",
        "mergehistory-fail": "Dat Versione zesamme läje is nit müjjelisch. Don ens di Sigge un de Zigge pröfe!",
-       "mergehistory-fail-toobig": "Mieh wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
+       "mergehistory-fail-toobig": "Mih wi {{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohne}} wöödte zesamme jelaat. Esu vill künne mer nit, un maache mer nit.",
        "mergehistory-no-source": "En Ursprungssigg „$1“ jidd_et nit.",
        "mergehistory-no-destination": "En Zielsigg „$1“ jidd_et nit.",
        "mergehistory-invalid-source": "De Ursprungssigg ier Name moß och ene reschtijje Siggetittel sin.",
        "mergehistory-same-destination": "De Quell-Sigg un de Ziel-Sigg dörve nit deselve Sigg sinn.",
        "mergehistory-reason": "Der Jrond:",
        "mergelog": "Logbohch fum Sigge zesamme Lähje",
-       "revertmerge": "Dat Zosammelääje widder retuur maache",
+       "revertmerge": "Dat Zosammelääje widder retuhr maache",
        "mergelogpagetext": "Dat heh es dat Logbohch fun de zesammejelaate Väsjohne fun Sigge",
        "history-title": "Älder Versione vun dä Sigg „$1“",
        "difference-title": "Ongerscheide zwesche Versione vun dä Sigg „$1“",
        "difference-title-multipage": "Ongerscheide zwesche dä Sigge „$1“ un „$2“",
        "difference-multipage": "(Ongerscheide zwesche Sigge)",
        "lineno": "Reih $1:",
-       "compareselectedversions": "Dun de markeete Version verjliche",
+       "compareselectedversions": "Dun de markehte Väsjohn verjliiche",
        "showhideselectedversions": "De ußjewählte Versione aanzeije udder vershteiche",
        "editundo": "De läzde Änderong zeröck nämme",
        "diff-empty": "(Keine Ongerscheid)",
        "diff-multi-sameuser": "(Mer don hee {{PLURAL:$1|eij Väsjohn|$1 Väsjohne|keij Väsjohn}} dozwesche nit zeije.   Se {{PLURAL:$1|es|sin|wöhr}} vum sällve Metmaacher)",
        "diff-multi-otherusers": "(Mer don hee {{PLURAL:$1|eij Väsjohn|$1 Väsjohne|keij Väsjohn}} dozwesche vun {{PLURAL:$2|einem|$2 ongerscheidlijje|keinem}} Metmaacher nit zeije)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ein Version|$1 Versione|kei Version}} dozwesche vun mieh wi {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} wääde nit jezeish)",
-       "difference-missing-revision": "{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.\n\nEsu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob der Ongerscheid zwesche de Versione vun en Sigg follesch, di zweschedren fottjeschmeße woode es.\nMieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].",
+       "difference-missing-revision": "{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.\n\nEsu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob der Ongerscheid zwesche de Versione vun en Sigg follesch, di zweschedren fottjeschmeße woode es.\nMih doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].",
        "searchresults": "Wat beim Söke eruskom",
        "searchresults-title": "Noh „$1“ jesoht.",
        "titlematches": "Zopass Üvverschrefte",
        "search-category": "({{int:Category}} $1)",
        "search-file-match": "(en dä Dattei dren)",
        "search-suggest": "Häß De „$1“ jemeint?",
+       "search-rewritten": "Mer zeije wat för „$1“ eruß kohm.\nDonn anschtatt vun däm noh „$2“ söhke.",
        "search-interwiki-caption": "Schwesterprojekte",
        "search-interwiki-default": "Op $1 woodte heh di Träffer jefonge:",
        "search-interwiki-more": "(mih)",
        "prefs-editwatchlist-raw": "De Oppaßleß en rüh beärbeijde:",
        "prefs-editwatchlist-clear": "Donn Ding Oppaßleß läddesch maache",
        "prefs-watchlist-days": "Aanzahl Dähsch för en ming Oppaßleß aanzezeije:",
-       "prefs-watchlist-days-max": "Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääch|keine Daach}}",
+       "prefs-watchlist-days-max": "Nit mih wie {{PLURAL:$1|eine Daach|$1 Dääch|keine Daach}}",
        "prefs-watchlist-edits": "Aanzahl Änderonge för en minge verjrößerte Oppaßleß aanzezeije:",
        "prefs-watchlist-edits-max": "Nit mih wie 1000",
        "prefs-watchlist-token": "Oppaßleß_Kännzeijsche:",
        "prefs-rendering": "Et Sigge-Aanzeije",
        "saveprefs": "Faßhalde",
        "restoreprefs": "Donn en alle Afschnedde alles op der Schtandatt retuur schtälle",
-       "prefs-editing": "Beim Bearbeide",
+       "prefs-editing": "Beim Beärbeijde",
        "rows": "Reihe:",
        "columns": "Spalte:",
        "searchresultshead": "Beim Söhke",
-       "stub-threshold": "Lengks  zopaß för <a href=\"#\" class=\"stub\">klein Sigge</a> fomatehre av esu vill Bytes:",
+       "stub-threshold": "Lengks zopaß för klein Sigge ($1) fomatehre av esu vill <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>:",
+       "stub-threshold-sample-link": "Beijschpell_Lengk",
        "stub-threshold-disabled": "Ußjeschalldt",
        "recentchangesdays": "de Aanzahl Dähsch en de Leß met de „Neuste Änderonge“ — als Standatt:",
-       "recentchangesdays-max": "(Nit mieh wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})",
+       "recentchangesdays-max": "(Nit mih wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})",
        "recentchangescount": "Aanzahl Änderonge en de Leß, als Schtandad:",
        "prefs-help-recentchangescount": "Dat ömfaß de „{{int:recentchanges}}“, de Versione uß de Fojangeheit, un de Logbööcher.",
        "prefs-help-watchlist-token2": "Dat heh es dä jeheime Schlößel för dä <i lang=\"en\" xml:lang=\"en\">Atom</i>- udder <i lang=\"en\" xml:lang=\"en\">RSS</i>-Kanaal met de Änderonge aan Sigge en Dinger Oppaßleß\nWä dä kännt, kann Ding Oppaßleß lässe, alsu halld_en för Desch.\nDo kann Der [[Special:ResetTokens|ene neue Schlößel maache lohße]], wann nüüdesch.",
        "badsig": "Di Ungeschreff jëijd_esu nit — luer noh dem HTML do_dren un maach et rėshtėsh.",
        "badsiglength": "Ding „Ungerschref“ es zoo lang. Et dörve nit nieh wi {{PLURAL:$1|eij|$1|keij}} Zeische do dren sin.",
        "yourgender": "Wi wells De, dat et Wiki övver Desch kalle deiht:",
-       "gender-unknown": "Wann övver Desch jeschwadt weed, dann der ohne dorschbleck ze lohße, ov Kääl udder Weesch bes, esu wi: „dä Metmaacher Su-wi-De-heiß schriiv em Wiki met.“",
+       "gender-unknown": "Wann övver Desch jeschwahdt weed, dann der ohne dorschblecke ze lohße, ov de ene Kääl udder e Weesch bes, esu wi: „dä Metmaacher Su-wi-De-heijß schrihv em Wiki met.“",
        "gender-male": "Dä Su-wi-De-heiß schriiv och em Wiki met.",
        "gender-female": "Dat Su-wi-De-heiß schriiv heh em Wiki met.",
        "prefs-help-gender": "* Moß mer nit aanjävve, un dat kritt de janne Welt ze sinn, nit nur Do allein.",
        "email": "<i lang=\"en\">e-mail</i>",
-       "prefs-help-realname": "Dinge rechteje Nahme kanns De fott lohße.\nWann De en ävver nenne wells, dann kann dä jebruch weede, öm Ding Beidrähch domet ze schmöcke.",
+       "prefs-help-realname": "Dinge rechteje Nahme kanns De fott lohße.\nWann De en ävver nenne wells, dann kann dä jebruch wähde, öm Ding Beijdrähschdomet ze schmöke.",
        "prefs-help-email": "Ding <i lang=\"en\">e-mail</i> Adress - kanns De fottlooße, un se es för Andre nit ze sinn - mäht et ävver müjjelich, Der e neu Passwoot ze schecke, wann De et ens verjäße häß.",
        "prefs-help-email-others": "Do kannß och zohlohße, dat mer Der domet övver Ding Metmaacherklaafsigg en <i lang=\"en\">e-mail</i> schecke kann. Esu künne ander Metmaacher met Der en Kontak kumme, ohne dat se Dinge Name oder Ding <i lang=\"en\">e-Mail</i> Adress kenne mööte.",
-       "prefs-help-email-required": "Do moß en <i lang=\"en>e-mail</i>-Addräß aanjevve.",
+       "prefs-help-email-required": "Do moß en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß aanjävve.",
        "prefs-info": "Jrundlare",
        "prefs-i18n": "Schprohche-Enschtällonge",
        "prefs-signature": "Ongerschreff",
        "userrights-unchangeable-col": "{{PLURAL:$1:Di Jropp|Jroppe|kein Jropp doh}}, di De nit ändere kanns",
        "userrights-irreversible-marker": "$1 *",
        "userrights-conflict": "Ene Andere hät di Rääschde ald verändert. Loor, wad_eruß kohm un versöhg_et norr_ens, wann nüüdesch.",
-       "userrights-removed-self": "Do häs Dng Rääsch dohzoh jraad drannjejovve, dröm kanns De heh di Sigg nit mieh oproofe.",
+       "userrights-removed-self": "Do häs Ding Rääsch dohzoh jraad drannjejovve, dröm kanns De heh di Sigg nit mih oprohfe.",
        "group": "Jropp:",
        "group-user": "Metmaacher",
        "group-autoconfirmed": "Bestätichte Metmaacher",
        "group-bot": "Bots",
        "group-sysop": "Wiki-Köbesse",
-       "group-bureaucrat": "Bürrokrade",
+       "group-bureaucrat": "Bürrokrahde",
        "group-suppress": "Kontrollettis",
        "group-all": "(jeede)",
        "group-user-member": "{{GENDER:$1|Metmaacher|Metmaacherėn}}",
        "grouppage-autoconfirmed": "{{ns:project}}:Bestätichte Metmaacher",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Wiki Köbes",
-       "grouppage-bureaucrat": "{{ns:project}}:Bürrokrad",
+       "grouppage-bureaucrat": "{{ns:project}}:Bürrokrahd",
        "grouppage-suppress": "{{ns:project}}:Kontrolletti",
        "right-read": "Sigge lesse",
        "right-edit": "Sigge ändere",
        "right-deleterevision": "Einzel Versione fun Sigge fottschmiiße un zeröck holle",
        "right-deletedhistory": "Fottjeschmeße Versione vun Sigge opleßte lohße — dat zeich ävver nit der Tex aan",
        "right-deletedtext": "Fotjeschmeße Täx un Ungerscheid zwesche de verschtoche Versione aanloore",
-       "right-browsearchive": "Noh fottjeschmesse Sigge söke",
+       "right-browsearchive": "Noh fottjeschmeße Sigge söhke",
        "right-undelete": "Fottjeschmeße Sigge widder zeröck holle",
        "right-suppressrevision": "Väsjohne vun Sigge belohre, verschteische, un zeröck holle, di sujaa för de Wiki-Köhbeße verschtoche sin",
        "right-viewsuppressed": "Beloor de Väsjohne, di vun jeedem verschtoche sin.",
        "right-hideuser": "Ene Metmaacher sperre un em singe Name versteiche",
        "right-ipblock-exempt": "Es ußjenomme vun automatesche Sperre, vun Sperre fun IP-Adresse, un vun Sperre vun Bereiche vun IP-Adresse",
        "right-proxyunbannable": "Es ußjenomme fun automatische Sperre fun Proxy-Servere",
-       "right-unblockself": "Retuur nämme, wam_mer sellver jesperrt woode es",
+       "right-unblockself": "Retuhr nämme, wam_mer sellver jesperrt woode es",
        "right-protect": "Sigge schöze, jeschözde Sigge änndere, un der iere Schoz widder ophevve",
        "right-editprotected": "Sigge ändere, di met „{{int:protect-level-sysop}}“ jezöz sin",
        "right-editsemiprotected": "Sigge met däm Schoz „{{int:protect-level-autoconfirmed}}“ ändere",
        "right-viewmyprivateinfo": "ding eije päsöhnlesche Dahte belohre, wi de Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> udder Dinge ääschte Nahme",
        "right-editmyprivateinfo": "ding eije päsöhnlesche Dahte ändere, wi de Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> udder der ääschte Nahme",
        "right-editmyoptions": "De eije Enschtällonge ändere",
-       "right-rollback": "All de letzte Änderunge fom letzte Metmaacher aan ene Sigg retur maache",
-       "right-markbotedits": "Retur jemahte Änderonge als Bot_Änderong makkehre",
+       "right-rollback": "All de letzte Ännderonge vum läzde Metmaacher aan ene Sigg retuhr maache",
+       "right-markbotedits": "Retuhr jenumme Ännderonge als Ännderonge vun Bots makkehre",
        "right-noratelimit": "Kein Beschränkonge dorsch Jränze (<i lang=\"en\">[http://www.mediawiki.org/wiki/Manual:%24wgRateLimits $wgRateLimits]</i>)",
        "right-import": "Sigge uß ander Wikis empochteere",
        "right-importupload": "Sigge övver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Dattei-Huhlahde empotteere",
        "action-history": "de Leß met de fröhjere Väsohne vun heh dä Sigg ze belohre",
        "action-minoredit": "heh di Änderong als klein „mini“ ze makkehre",
        "action-move": "di Sigg ömzebenänne",
-       "action-move-subpages": "hee di Sigg un ier Ongersigge ömzebenänne",
+       "action-move-subpages": "heh di Sigg un ier Ongersigge ömzebenänne",
        "action-move-rootuserpages": "enem Metmaacher sing (Houp)-Metmaacher-Sigg ömzenänne",
        "action-move-categorypages": "Sigge vun Saachjroppe ömzebenänne",
        "action-movefile": "Di Dattei ömnänne",
        "action-upload": "heh di Dattei huhzelahde",
        "action-reupload": "hee di Dattei, di et ald jitt, ußzetuusche",
-       "action-reupload-shared": "hee di Datei „för“ di ze säze, di et en de jemeinsame Biblijoteek ald jitt",
+       "action-reupload-shared": "heh di Datei „för“ di ze säze, di et en dä jemeinsamme Biblijoteek ald jitt",
        "action-upload_by_url": "heh di Dattei fun en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> erövver träke ze lohße",
        "action-writeapi": "dat API zom Schriive ze bruche",
        "action-delete": "heh di Sigg fottzeschmiiße",
        "action-suppressionlog": "heh dat jeheime Logbohch aanzelohre",
        "action-block": "hee dämm Metmaacher et Sigge Ändere ze verbeede",
        "action-protect": "hee dä Sigg iere Sigge-Schotz ze ändere",
-       "action-rollback": "all de letzte Änderunge fom letzte Metmaacher aan ene beshtemmpte Sigg flöck retur ze maache",
+       "action-rollback": "all de läzde Ännderonge vum läzde Metmaacher aan ene beschtemmpte Sigg flöck retuur ze maache",
        "action-import": "Sigge uss_enem andere Wiki ze empotteere",
        "action-importupload": "Sigge uss_ene huhjelaade Dattei ze empotteere",
        "action-patrol": "anderlüx Änderonge als „nohjelohrt“ ze makkehre",
        "rcshowhidemine-hide": "verschteihsche",
        "rclinks": "Zeisch de läzde {{int:pipe-separator}}$1{{int:pipe-separator}} Änderonge us de läzde {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}} $3.",
        "diff": "Ongerscheid",
-       "hist": "Versione",
+       "hist": "Väsjohne",
        "hide": "Ußblände!",
        "show": "Zeije:",
        "minoreditletter": "M",
        "boteditletter": "B",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|eine|$1|kein}} Oppasser]",
-       "rc_categories": "Nor de Saachjroppe (met „|“ dozwesche):",
-       "rc_categories_any": "All, wat mer han",
+       "rc_categories": "Bejränz op de Saachjroppe (schrihv „|“ dozwesche):",
+       "rc_categories_any": "Öhndseijne vun dä aanjejovve Saachjroppe",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes|Bytes}} noh dem Ändere",
        "newsectionsummary": "Neu Avschnet /* $1 */",
        "uploadjava": "Dat es en Sammel_Dattei em ZIP-Fommaat, woh en Java-.class-Datei dren shtich.\nJava-Datteie huhlaade es nit zohjelohße, weil mer domet de Enshtellunge ömjonn kann, di der ẞörver schöze un däm sing Sescherheit jarranteere.",
        "upload-source": "Wo de Daate herkumme",
        "sourcefilename": "Dattei zem huhlahde:",
-       "sourceurl": "<i lang=\"en\">URL</i> för vun eronger ze laade",
+       "sourceurl": "<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>  för vun eronger ze lahde",
        "destfilename": "Unger däm Datteinahme avschpeijschere:",
        "upload-maxfilesize": "Der jrühtßte müjjelesche Ömfang för en Dattei es $1.",
        "upload-description": "Övver di Dattei",
        "upload-options": "Ennschtällonge för et Laade",
        "watchthisupload": "Op di Dattei oppaßße",
-       "filewasdeleted": "Onger däm Nahme wohd ald ens en Dattei huhjelahde. Di es enzwesche ävver widder fottjeschmesse woode. Luhr leever eets ens en et $1 ih dat De se dann avschpeischere deihs.",
+       "filewasdeleted": "Onger däm Nahme wohd ald ens en Dattei huhjelahde. Di es enzwesche ävver widder fottjeschmeße woode. Luhr leever eets ens en et $1 ih dat De se dann avschpeischere deihs.",
        "filename-bad-prefix": "Dä Datei ier Name fängk met '''„$1“''' aan. dat eß fä jewöhnlesch ene Name, dä en dijjitaale Kammerra iere Belder jitt. Esu en Name donn uns esu winnisch verzälle, dat mer se nit jän em Wiki han wulle.\nBes esu joot un jiff dä enne Name, wo mer mieh met aanfange, öm ze wesse, wat en dä Datei dren es.",
        "filename-prefix-blacklist": " #<!-- Lohß di Reih jenou esu wie se es! --> <pre>\n#  Syntax:\n#   * Alles zwesche em #-Zeiche bes nohm Engk vun de Reih es ene Kommäntaa\n#   * Jede Reih met jet dren es ene typpesche Aanfang för ene Datteiname,\n#   * dä automattesch vun ene Dijjitahlkammera kütt\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # - et ein udder andere mobile Tellefohn -\nIMG # - alljemein üplesch -\nJD # Jenoptik\nMGP # Pentax\nPICT # - diverse -\n #</pre> <!-- Lohß di Reih jenou esu wie se es! -->",
        "upload-success-subj": "Et Huhlade hät jeflupp",
        "upload-too-many-redirects": "Zoh vill Ömleitunge en däm <i lang=\"en\">URL</i>",
        "upload-http-error": "Ene <i lang=\"en\">HTTP</i>-Fäähler es opjetrodde: $1",
        "upload-copy-upload-invalid-domain": "Fun dä Domain künne mer nix noh heh huh laade. Di es nit zohjelohße.",
+       "upload-dialog-title": "Dateij huhlahde",
+       "upload-dialog-error": "Ene Fähler es opjetrodde",
+       "upload-dialog-warning": "En Warnong wood ußjejovve.",
+       "upload-dialog-button-cancel": "Ophühre!",
+       "upload-dialog-button-done": "Jedonn",
+       "upload-dialog-button-save": "Faßhalde",
+       "upload-dialog-button-upload": "Lohß Jonn!",
+       "upload-dialog-label-select-file": "De ußjesöhk Dattei",
+       "upload-dialog-label-infoform-title": "Eijnzelheijte",
+       "upload-dialog-label-infoform-name": "Nahme",
+       "upload-dialog-label-infoform-description": "Äkliehrong",
+       "upload-dialog-label-usage-title": "Der Jebruch",
+       "upload-dialog-label-usage-filename": "Dä Dattei iehre Nahme",
        "backend-fail-stream": "Mer kunnte di Dattei $1 nit övverdraare.",
        "backend-fail-backup": "Mer kunnte kein Sescherongskopih vun dä Dattei $1 maache.",
        "backend-fail-notexists": "En Dattei $1 jidd et nit.",
        "backend-fail-alreadyexists": "En Dattei $1 jidd et ald.",
        "backend-fail-store": "Mer kunnte di Dattei $1 nit onger $2 affschpeischere.",
        "backend-fail-copy": "Mer kunnte di Dattei $1 nit noh $2 koppėėere.",
-       "backend-fail-move": "Mer kunnte di Dattei $1 nit op $2 ömdäufe.",
+       "backend-fail-move": "Mer kunnte di Dattei „$1“ nit op „$2“ ömdäufe.",
        "backend-fail-opentemp": "Mer kunnte de Zweschedattei no opmaache.",
        "backend-fail-writetemp": "Mer kunnte nit en de Zweschedattei schriive.",
        "backend-fail-closetemp": "Mer kunnte de Zweschedattei no zohmaache.",
        "filepage-nofile-link": "Et jit kein Datei met dämm Nahme, ävver De kanns se [$1 huhlaade].",
        "uploadnewversion-linktext": "Dun en neuj väsjohn vun dä Dattei huhlahde",
        "shared-repo-from": "uß $1",
-       "shared-repo": "ene jemeinsame Beshtand",
+       "shared-repo": "ene jemeinsamme Beschtand",
        "shared-repo-name-wikimediacommons": "Wikkimeedija Commons",
        "filepage.css": "/* Heh dat CSS küdd op Sigge övver Dateije, och di vun ander Wikis jehollt woode sin. */",
        "upload-disallowed-here": "Do kanns heh di Dattei nit övverschriive.",
        "filedelete-submit": "Fottschmieße",
        "filedelete-success": "'''„$1“''' es fottjeschmeße.",
        "filedelete-success-old": "Fun dä Datei '''„[[Media:$1|$1]]“''' es jäz di Version fum $2 öm $3 Uhr fottjeschmeße woode.",
-       "filedelete-nofile": "„$1“''' jidd_et nit.",
+       "filedelete-nofile": "<strong>$1</strong> jidd_et nit.",
        "filedelete-nofile-old": "Fun '''„$1“''' ham_mer kein arschiveete Version met dä Eijeschaffte.",
        "filedelete-otherreason": "Ander Jrund oder Zosätzlich:",
        "filedelete-reason-otherlist": "Ne andere Jrund",
        "filedelete-maintenance": "Datteie Fottschmiiße un widder zerök Holle jeiht jez jrad nit, mer hann Waadong.",
        "filedelete-maintenance-title": "Di Dattei künne mer nit fottschmiiße",
        "mimesearch": "Dateije övver dänne ehre <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot söhke",
-       "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot ußjesöhk wähde.\nMer moß der Medijetüp un der Ongertüp aanjevve mem scheive Schtresch derzwesche, zem Bejschpell: <code xml:lang=\"en\" lang=\"en\">image/jpeg</code> udder <code xml:lang=\"en\" lang=\"en\">text/*</code> udder esu.",
+       "mimesearch-summary": "Op hee dä {{int:nstab-special}} könne de Dateie noh de <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot ußjesöhk wähde.\nMer moß de Zoot Medije un de Ongerzppd aanjävve mem scheive Schtresch derzwesche, zem Bejschpell: <code xml:lang=\"en\" lang=\"en\">image/jpeg</code> udder <code xml:lang=\"en\" lang=\"en\">text/*</code> udder esu.",
        "mimetype": "<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Multi-Purpose Internet Mail Extensions\">MIME</i>-Zoot:",
        "download": "eronger laade",
        "unwatchedpages": "Sigge, wo keiner drop oppass",
        "unusedtemplates": "Schablohne uder Bauschteijn, di nit jebruch wähde",
        "unusedtemplatestext": "Hee sin all de Schablohne opjeleß, di em Appachtameng „{{ns:template}}“ sin, di nit en ander Sigge enjeföhsch wähde. Ih De jet dovun fottschmiiß, dängk drahn, se künnte och op en ander Aat jebruch wähde, un luhr Der dä iehr andere Lengks aan!",
        "unusedtemplateswlh": "ander Lengks",
-       "randompage": "Zofällije Sigg",
+       "randompage": "En zohfälleje Sigg",
        "randompage-nopages": "En {{PLURAL:$2|dem Appachtemang|dä Appachtemangs|keinem Appachtemang}} „$1“ sin ja kein Sigge dren.",
        "randomincategory": "En zohfälleje Sigg us ener Saachjropp",
        "randomincategory-invalidcategory": "„$1“ es keine jölteje Nahme för en Saachjropp.",
        "booksources-text": "Hee noh küdd_en Leßß met Websigge,\nwo mir {{GRAMMAR:Dative fun|{{SITENAME}}}} nix wigger med ze donn hänn,\nwo mer jät övver Böösher erfaare\nun zom Dëijl och Böösher koufe kann.\nDoför moßß De Desh mannshmool allodengs eetß ennß aanmällde,\nwat Koßte un Jefaare met sesh brenge künndt.\nWo_t jëijdt,\njonn di Lengkß hee tirrägg_op dat Booch,\nwadd_Er am Sööke sidt.",
        "booksources-invalid-isbn": "De ISBNummer schingk verkeeht ze sin. Loohr ens donoh, woh se häe kütt.",
        "specialloguserlabel": "Dä Metmaacher, dä et jedonn hät:",
-       "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Name)",
+       "speciallogtitlelabel": "Betroffe wohr: (dä Tittel vun ener Sigg udder enem Metmaacher singe Nahme)",
        "log": "Logböcher ehr Opzeichnunge (all)",
        "all-logs-page": "All de öffentlich Logböcher",
        "alllogstext": "Dat heh es en jesampte Less us all dä Logböhscher {{GRAMMAR:en|{{SITENAME}}}}.\nDä Logböhscher ehre Enhald kam_mer all noh de Aat, de Metmaacher,\noder de Sigge ehr Name, un esu, einzel zoteht aanluhre.\nBei dä Name moß mer op Jruß- un Kleinschreff aachjävve.",
        "allpages-hide-redirects": "Ömleidonge fott lohße",
        "cachedspecial-viewing-cached-ttl": "Dat heh küdd ussem Zewescheschpeischer un kann bes op $1 alt sin.",
        "cachedspecial-viewing-cached-ts": "Dat heh küdd ussem Zewescheschpeischer un nünnt nidd om neuste Schtand sin.",
-       "cachedspecial-refresh-now": "De neuste Version.",
+       "cachedspecial-refresh-now": "De neuste Väsjohn.",
        "categories": "Saachjroppe",
        "categoriespagetext": "Heh {{PLURAL:$1|es nur en Saachjropp|sin nur Saachjroppe|es kein Saachjropp}} jeleß, woh jät dren {{PLURAL:$1|es|es|wöhr}}. Mer han_er eije Leßte för de\n[[Special:UnusedCategories|Saachjropp met nix dren]], un de\n[[Special:WantedCategories|jewönschte un nit aanjelaate Saachjroppe]].",
        "categoriesfrom": "Zeijsch Saachjroppe vun heh af:",
        "special-categories-sort-count": "Zoteere noh de Aanzahl",
        "special-categories-sort-abc": "Zoteere nohm Alphabett",
-       "deletedcontributions": "Fottjeschmesse Versione",
-       "deletedcontributions-title": "Fottjeschmesse Versione",
+       "deletedcontributions": "Fottjeschmeße Väsjohne",
+       "deletedcontributions-title": "Fottjeschmeße Väsjohne",
        "sp-deletedcontributions-contribs": "Beijdrääsch",
        "linksearch": "Lėngkß noh ußerhallef söhke",
        "linksearch-pat": "Sök noh:",
        "linksearch-ns": "Appachtemang:",
        "linksearch-ok": "Söhke",
-       "linksearch-text": "Beim Söke künnd_Er Schtäänsche aanjevve för e Schtöcksche fun ennem Nahme, wo mer nit jenou weiß, wi et heiß udder wat me nit kenne deit, zem Beischpöll esu: <code>http://*.example.com</code> un ene bövverschte Name för en Domain moß aanjejovve sin, zem Beishpöll esu: <code>http://*.org</code> \n\n{{PLURAL:$2|Dat Brauserprotokoll, wat|De Brauserprotokolle, di|Kein Brauserprotokolle, di}} mer beim Söhke aanjävve kann, sin: <code>$1</code>, un der Schtandatt es <code>http://</code> wann nix aanjejovve es.",
+       "linksearch-text": "Beim Söke künnd_Er Schtähnsche aanjävve för e Schtöcksche fun ennem Nahme, wo mer nit jenou weiß, wi et heiß udder wat me nit kenne deit, zem Beischpöll esu: <code>http://*.example.com</code> un ene bövverschte Name för en Domain moß aanjejovve sin, zem Beishpöll esu: <code>http://*.org</code> \n\n{{PLURAL:$2|Dat Brauserprotokoll, wat|De Brauserprotokolle, di|Kein Brauserprotokolle, di}} mer beim Söhke aanjävve kann, sin: $1, un der Schtandatt es <code>http://</code> wann nix aanjejovve es.",
        "linksearch-line": "„$2“ hät ene Link op $1",
        "linksearch-error": "Shternshe kam_mer nor aam Aanfang fum Domain-Name bruche.",
        "listusersfrom": "Zeich de Metmaacher vun:",
        "listgrouprights-group": "Jropp",
        "listgrouprights-rights": "Räächte",
        "listgrouprights-helppage": "Help:Jrupperäächte",
-       "listgrouprights-members": "(opliste)",
+       "listgrouprights-members": "(oplte)",
        "listgrouprights-addgroup": "Metmaacher en {{PLURAL:$2|de Metmaacher-Jropp|de Metmaacher-Jroppe|kein Metmaacher-Jropp}} $1 erin donn",
        "listgrouprights-removegroup": "Metmaacher us {{PLURAL:$2|dä Metmaacher_Jropp|de Metmaacher_Jroppe|jaa kei Metmaacher_Jropp}} $1 eruß nämme",
        "listgrouprights-addgroup-all": "Metmaacher en alle Metmaacher-Jroppe erin donn",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
        "trackingcategories-desc": "Bedengonge för enjeschloße ze sin",
        "noindex-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne nit opjenumme wähde, weil dat Zauberwoot <code><nowiki>__NOINDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es.",
-       "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwies nit vun de Robots dorschsöhk weed.",
+       "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwihs nit vun de Robots dorschsöhk weed.",
        "post-expand-template-inclusion-category-desc": "Nohdämm a paa Schablohne enjesaz woode sen, hät di Sigg mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß. Et sin nit alle Oprohve vun Schablohne opjelöhß.",
        "post-expand-template-argument-category-desc": "Di Sigg hät mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß, nohdämm dä Wäät för ene Parramehter — jät met drei jeschweifte Klammere drömeröm, wi <code>{{{Dengenskersche}}}</code> — enjesaz woode es.",
        "expensive-parserfunction-category-desc": "Di Sigg hät zoh vill düüre Befähle met Pahserfonxjuhne, för e Beijschpell esu jät, wi <code xml:lang=\"en\" lang=\"en\">#ifexist</code>. Mih doh drövver schteihd em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Handbohch].",
        "emailuser": "E-mail aan dä Metmaacher",
        "emailuser-title-target": "<i lang=\"en\">E-mail</i> aan {{GENDER:$1|dä Metmaacher|di Metmaacherėn|dä Metmaacher|di Metmaacherėn|dä Metmaacher}} $1",
        "emailuser-title-notarget": "Verschegg en <i lang=\"en\">e-mail</i> aan ene Metmaacher",
-       "emailpage": "Verscheck <i lang=\"en\">e-mail</i> aan ene Metmaacher",
        "emailpagetext": "Wann {{GENDER:$1|dä Metmaacher heh|dat heh|heh dä Metmaacher|sei|dat heh}} en Adräß för sing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>aanjejovve hätt en singe Enstellunge, un di deihd et och, dann kanns De met däm Fomular heh unge en einzel <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> aan {{GENDER:$1|inn|it|dä Metmaacher|heh di Metmaacherėn|et}} schecke.\n\nDing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß, di De en [[Special:Preferences|Ding eije Enstellunge]] aanjejovve häs, di weed als em Afsender sing Adräß enjedrare.\nDomet kann, wä di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i> kritt, drop antwoote, un di Antwood jeiht tirek aan Desch.\nAlles klor?",
        "defemailsubject": "e-mail fum $1 {{GRAMMAR:fun|{{SITENAME}}}}.",
        "usermaildisabled": "De <i lang=\"en\">e-mail</i> zwesche Metmaachere es ußjeschalt",
        "emailccsubject": "En Kopie vun Dinger E-Mail aan $1: $2",
        "emailsent": "De <i lang=\"en\">e-mail</i> es ongerwähs",
        "emailsenttext": "Ding E-Mail es jetz lossjescheck woode.",
-       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailpage}}“ jebruch.",
+       "emailuserfooter": "Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.",
        "usermessage-summary": "En Nohreesch vum Wiki afjelivvert.",
        "usermessage-editor": "Name vum Metmaacher för de Täxte un Nohreshte vum Wiki ze beärbeide",
        "watchlist": "ming Oppaßleß",
        "watchlistanontext": "Do moß enlogge, domet de en Ding Oppaßleß erenluhre kanns, oder jät drahn änndere.",
        "watchnologin": "Nit enjelogg",
        "addwatch": "En de Oppaßleß don",
-       "addedwatchtext": "Di Sigg „[[:$1]]“ es jetz en Dinge [[Special:Watchlist|Oppaßleß]].\nWann di Sigg udder ier Klaafsigg verändert weed, kütt dat af jäz heh en di Oppaßleß.",
+       "addedwatchtext": "Di Sigg „[[:$1]]“ un dä ier Klaafsigg sin jäz en Dinge [[Special:Watchlist|Oppaßleß]].",
        "addedwatchtext-short": "De Sigg  „$1“ es en Ding Oppaßleß openumme.",
        "removewatch": "Us de Oppaßleß nämme",
-       "removedwatchtext": "Di Sigg „[[:$1]]“ es jäz us de [[Special:Watchlist|Oppaßless]] erusjenomme.",
+       "removedwatchtext": "Di Sigg „[[:$1]]“ n di Klaafsigg derzoh sin jäz us Dinge [[Special:Watchlist|Oppaßless]] erusjenomme.",
        "removedwatchtext-short": "De Sigg  „$1“ es uß Dinge Oppaßleß eruß jenumme.",
        "watch": "Drobb oppaßße",
        "watchthispage": "Op di Sigg oppaßße",
        "unwatch": "Nimeh drobb oppaßße",
        "unwatchthispage": "Nit mih op di Sigg oppaßße",
        "notanarticle": "Keine Atikkel",
-       "notvisiblerev": "Di Version es fottjeschmesse",
+       "notvisiblerev": "Di Väsjohn es fottjeschmeße",
        "watchlist-details": "Do häß {{PLURAL:$1|ein Sigg|$1 Sigge|kein Sigg}} en Dinge Oppaßleß{{PLURAL:$1|, un di Klaafsigg dohzoh|, un de Klaafsigge dohzoh|}}.",
        "wlheader-enotif": "Et <i lang=\"en\">e-mail</i> Schecke es enjeschalt.",
        "wlheader-showupdated": "Wann se Einer jeändert hätt, zickdäm De se et letzte Mol aanjeluurt häs, sin di Sigge <strong>extra markeet</strong>.",
        "enotif_lastvisited": "Lohr onger „$1“ - doh fengks de all di Ännderonge zigg Dingem läzde Besohch heh.",
        "enotif_lastdiff": "Loor op $1 för heh di Änderong aan_ze_lohre.",
        "enotif_anon_editor": "Dä namelose Metmaacher $1",
-       "enotif_body": "Leeven $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\n{{int:summary}} „$PAGESUMMARY“ $PAGEMINOREDIT\n\nDo kanns dä Metmaacher „$PAGEEDITOR“ aanschpräsche:\n* Övver e-mail: $PAGEEDITOR_EMAIL\n* Em Wiki: $PAGEEDITOR_WIKI\n\nDo kreß vun jetz aan kein e-mail mieh, bes dat Do\nDer di Sigg aanjeluurt häs wann De enjelogg bes,\noch wann se norr_ens verändert weed. Do kanns ävver\noch all di Märker för e-mail för di Sigge en Dinger\nOppaßleß op eimohl ändere.\n\nEne schöne Jrohß {{GRAMMAR:vun|{{SITENAME}}}}.\n\n-- \nÖm de Enschtällonge för Nohreeschte aan Desch ze ändere,\njangk op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nDo kanns heh Ding Oppaßleß ändere:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nÖm di Sigg vun Dinger Oppaßleß ze schmieße:\n$UNWATCHURL\n\nDo kanns heh noh Hölp luhre:\n$HELPPAGE",
+       "enotif_body": "Leeven $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\n{{int:summary}} „$PAGESUMMARY“ $PAGEMINOREDIT\n\nDo kanns dä Metmaacher „$PAGEEDITOR“ aanschpräsche:\n* Övver e-mail: $PAGEEDITOR_EMAIL\n* Em Wiki: $PAGEEDITOR_WIKI\n\nDo kreß vun jetz aan kein e-mail mih, bes dat Do\nDer di Sigg aanjeluurt häs wann De enjelogg bes,\noch wann se norr_ens verändert weed. Do kanns ävver\noch all di Märker för e-mail för di Sigge en Dinger\nOppaßleß op eimohl ändere.\n\nEne schöne Jrohß {{GRAMMAR:vun|{{SITENAME}}}}.\n\n-- \nÖm de Enschtällonge för Nohreeschte aan Desch ze ändere,\njangk op:\n{{canonicalurl:{{#special:Preferences}}}}\n\nDo kanns heh Ding Oppaßleß ändere:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nÖm di Sigg vun Dinger Oppaßleß ze schmiiße:\n$UNWATCHURL\n\nDo kanns heh noh Hölp luhre:\n$HELPPAGE",
        "created": "neu aanjelaht",
        "changed": "jeändert",
        "deletepage": "Schmiiß di Sigg jäz fott",
        "rollback": "Em Läzde sing Änderonge zeröcknämme",
        "rollbacklink": "All dem Läzde sing Änderonge zeröckdrihje",
        "rollbacklinkcount": "{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
-       "rollbacklinkcount-morethan": "{{PLURAL:$1|Mieh wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
+       "rollbacklinkcount-morethan": "{{PLURAL:$1|Mih wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme",
        "rollbackfailed": "Dat Zeröcknemme jingk scheiv",
        "cantrollback": "De läzde Änderong zeröckzenemme es nit müjjelich. Dä läzde Schrihver es dä eijnzeje, dä aan dä Sigg heh jht jedonn hät!",
        "alreadyrolled": "Mer künne de letzte Änderonge vun dä Sigg „[[:$1]]“ vum Metmaacher „[[User:$2|$2]]“ ([[User talk:$2|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nimieh zeröcknemme, dat hät ene Andere enzwesche ald jedon, udder de Sigg ömjeändert.\n\nDe Neuste Änderong aan dä Sigg es jetz vun däm Metmaacher „[[User:$3|$3]]“ ([[User talk:$3|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Bei dä Änderong schtundt: „''$1''“.",
-       "revertpage": "Änderunge vun däm Metmaacher „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|däm sing Klaafsigg]]) fottjeschmesse, un doför de letzte Version vum „[[User:$1|$1]]“ widder zeröckjehollt",
+       "revertpage": "Änderunge vun däm Metmaacher „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|däm sing Klaafsigg]]) fottjeschmeße, un doför de lätzde Väsjohn vum „[[User:$1|$1]]“ widder zeröckjehollt",
        "revertpage-nouser": "Änderunge vun enem Metmaacher, däm singe Name vershtoche es, retuur jemaat op de letzte Version {{GENDER:$1|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$1|$1]]",
        "rollback-success": "De Änderungen vum $1 zeröckjenumme, un dobei de letzte Version vum $2 widder jehollt.",
        "sessionfailure-title": "Fähler met dä Daate vum Enlogge",
        "sessionfailure": "Et jov wall e täschnesch Problehm met Dingem Login. Dröm ham_mer dat us Vörseesch jäz nix jemaht, domet mer nit velleich Ding Änderong däm verkihrte Metmaacher ongerjubele. Jangk zeröck un versöhk et noch ens.",
        "changecontentmodel-title-label": "Dä Sigg ier Övverschreff",
        "changecontentmodel-reason-label": "Der Jrond:",
-       "changecontentmodel-title-cantexist": "Mer kann kein  Sigge en $1 aanlähje.",
        "logentry-contentmodel-change-revertlink": "retuhr_nämme",
        "logentry-contentmodel-change-revert": "retuhr_nämme",
        "protectlogpage": "Logbohch vum Sigge Schötze",
        "restriction-level-autoconfirmed": "nur aanjemeldte Metmaacher, di ald en Zick dobei sin",
        "restriction-level-all": "jeede",
        "undelete": "Fottjeschmessene Krom aanluure odder zeröck holle",
-       "undeletepage": "Fottjeschmesse Sigge aanluure un widder zeröckholle",
+       "undeletepage": "Fottjeschmeße Sigge aanluure un widder zeröckholle",
        "undeletepagetitle": "'''He dat sin de fottjeschmeße Versione fun [[:$1|$1]]'''",
-       "viewdeletedpage": "Fottjeschmesse Sigge aanzeije",
-       "undeletepagetext": "{{PLURAL:$1|De Sigg heenoh es|De $1 Sigge heenoh sin|De 0 Sigge heenoh sin}} fottjeschmesse, mer künne se ävver immer noch usem Müllemmer eruskrose.",
+       "viewdeletedpage": "Fottjeschmeße Sigge aanzeije",
+       "undeletepagetext": "{{PLURAL:$1|De Sigg hehnoh es|De $1 Sigge hehnoh sin|De 0 Sigge hehnoh sin}} fottjeschmeße, mer künne se ävver immer noch uss_em Möllämmer eruskrohse.",
        "undelete-fieldset-title": "Versione zeröck holle",
        "undeleteextrahelp": "Öm de janze Sigg met all ehre Versione widder ze holle, looß all de Versione ohne Hökche, un klick op „<strong  style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletebtn}}</strong>“.<br />\nÖm bloß einzel Väsjohne zeröckzeholle, maach Hökche aan di Väsjohne, di De widder han wells, un dann dun „<strong style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletebtn}}</strong>“ kleke.<br />\nOp „<strong style=\"padding:2px; background-color:#ddd; color:black\">{{int:Undeletereset}}</strong>“\nkleks De, wann De all Ding Höhksche un Ding „{{int:Undeletecomment}}“ widder fott han wells.",
-       "undeleterevisions": "{{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} en et Archiv jedon",
-       "undeletehistory": "Wann De di Sigg widder zeröckhölls,\ndann kriss De all de fottjeschmesse Väsjohne widder.\nWann enzwesche en neu Sigg unger däm ahle Nahme enjereesch woode es, dann wähde de zeröckjehollte Väsjohne einfach als zohsätzlije äldere Väsjohne för di neu Sigg ennjereesch. Di neuje Sigg weed nit äsäz.",
+       "undeleterevisions": "{{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} fott jenumme.",
+       "undeletehistory": "Wann De di Sigg widder zeröckhölls,\ndann kriss De all de fottjeschmeße Väsjohne widder.\nWann enzwesche en neu Sigg onger däm ahle Nahme enjereesch woode es, dann wähde de zeröckjehollte Väsjohne einfach als zohsätzlije äldere Väsjohne för di neu Sigg ennjereesch. Di neuje Sigg weed nit äsäz.",
        "undeleterevdel": "Dat Zeröckholle flupp nit, wann de neuste Väsjohn verschtoche es udder verschtoche Aandeile do dren sin. En esu en Fäll darrf de neuste Väsjohn kei Höhksche krijje, udder se moß eets ens en en nommahle Väsjohn ömjewandelt wääde, di nit mih verschtoche es.",
-       "undeletehistorynoadmin": "Di Sigg es fottjeschmeße woode. Dä Jrund döför es en de Liss unge ze finge, jenau esu wie de Metmaacher, wo de Sigg verändert han, ih dat se fottjeschmesse wood. Wat op dä Sigg ehre fottjeschmesse ahle Versione stundt, dat künne nor de Wiki-Köbesse noch aansinn (un och widder zeröckholle)",
+       "undeletehistorynoadmin": "Di Sigg es fottjeschmeße woode. Dä Jrond döför es en dä Leß onge ze fenge, jenau esu wi de Metmaacher, di di  Sigg verändert han, ih dat se fottjeschmeße wood. Wat op dä Sigg ehre fottjeschmeße ahle Väsjohne schtundt, dat künne blohß de Wiki-Köbeße noch aansinn, un och widder zeröckholle.",
        "undelete-revision": "Fottjeschmeße Version fun dä Sigg „$1“ fum $4 öm $5 Uhr, et letz jeändert fum $3:",
-       "undeleterevision-missing": "De Version stemmp nit. Dat wor ene verkihrte Link, oder de Version wood usem Archiv zeröck jehollt, oder fottjeschmesse.",
+       "undeleterevision-missing": "De Väsjohn schtemmp nit. Dat wor ene verkihrte Lengk, udder di Väsjohn wood uss_em Aschihf zeröck jehollt, udder fottjeschmeße.",
        "undelete-nodiff": "Mer han kei ällder Version jefonge.",
        "undeletebtn": "Zeröckholle!",
        "undeletelink": "aanloore odder widder zeröckholle",
        "undeletedfiles": "{{PLURAL:$1|Ein Datei|<strong>$1</strong> Dateie|<strong>Kein</strong> Dateie}} zeröckjehollt",
        "cannotundelete": "<strong>Dä.</strong> Et Zeröckholle jing donävve.\n\n$1",
        "undeletedpage": "<strong>De Sigg „$1“ es jetz widder do</strong>\nLuur Der et [[Special:Log/delete|Logbohch met de fottjeschmeße Sigge]] aan, do häs De de Neuste fottjeschmeße un widder herjehollte Sigge.",
-       "undelete-header": "Loor Der [[Special:Log/delete|{{LCFIRST:{{int:deletionlog}}}}]] aan, doh fengks De de och neulesch fottjeschmesse Sigge.",
-       "undelete-search-title": "Noh fottjeschmesse Sigge söke",
-       "undelete-search-box": "Noh fottjeschmesse Sigge söke",
+       "undelete-header": "Loor Der [[Special:Log/delete|{{LCFIRST:{{int:deletionlog}}}}]] aan, doh fengks De de och neulesch fottjeschmesße Sigge.",
+       "undelete-search-title": "Noh fottjeschmeße Sigge söhke",
+       "undelete-search-box": "Noh fottjeschmeße Sigge söhke",
        "undelete-search-prefix": "Zeisch Sigge, di aanfange met:",
        "undelete-search-submit": "Söhke",
        "undelete-no-results": "Mer han em Aschiif kei Sigg, wo dä Bejreff drop paß, womet De am Söke beß.",
        "undelete-error": "Ene Fähler es opjetrodde beim Zerökholle",
        "undelete-error-short": "Fähler beim Zerökholle fun dä Dattei $1",
        "undelete-error-long": "Mer wollte en Datei widder zeröckholle, ävver dobei sin_er Fääler opjefalle:\n\n$1",
-       "undelete-show-file-confirm": "Wells De dä Datei „<nowiki>$1</nowiki>“ ier fottjeschmesse Version vum $2 öm $3 Uhr verhaftesch sinn?",
+       "undelete-show-file-confirm": "Wells De dä Dattei „<nowiki>$1</nowiki>“ ier fottjeschmeße Väsjohn vum $2 öm $3 Uhr verhaftesch sinn?",
        "undelete-show-file-submit": "Jo",
        "namespace": "Appachtemang:",
        "invert": "don di Ußwahl ömdrihje",
        "namespace_association": "mem zohjehühreje Appachtemang",
        "tooltip-namespace_association": "Maach e Höhksche, öm dat Appachtemang, wat zom ußjewählte Appachtemang doh zohjehööt — entweeder de Klaafsigge udder de nomaale Sigge — zohsäzlesch ußzewähle.",
        "blanknamespace": "(Atikkele)",
-       "contributions": "{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm}} $1 {{GENDER:$1|singe|singe|singe|iere|singe}} Beidrähsch",
-       "contributions-title": "Beidrähsch fum  $1",
-       "mycontris": "Beidrähch",
+       "contributions": "{{GENDER:$1|Däm Metmaacher|Däm|Däm Metmaacher|Dä Metmaacherėn|Däm}} $1 {{GENDER:$1|singe|singe|singe|iere|singe}} Beijdrähsch",
+       "contributions-title": "Beijdrähsch fum $1",
+       "mycontris": "Beijdrähsch",
        "contribsub2": "För {{GENDER:$3|dä|et|dä Metmaacher|de|dat}} $1: $1 ($2)",
        "contributions-userdoesnotexist": "Ene Metmaacher mem Nahme „$1“ ham_mer nit.",
        "nocontribs": "Mer han kein Änderunge jefonge, en de Logböcher, di do paße dähte.",
        "year": "Beß Johr:",
        "sp-contributions-newbies": "Nor neu Metmaacher ier Beidräg zeije",
        "sp-contributions-newbies-sub": "För neu Metmaacher",
-       "sp-contributions-newbies-title": "Neu Metmaacher ier Beidrähsch",
+       "sp-contributions-newbies-title": "Neu Metmaacher ier Beijdrähsch",
        "sp-contributions-blocklog": "Logbohch met de Metmaacher ier Schpärre",
        "sp-contributions-suppresslog": "verschtoche Beidrääch",
-       "sp-contributions-deleted": "Fottjeschmesse Beidrääsch",
+       "sp-contributions-deleted": "Fottjeschmeße Beijdrähsch",
        "sp-contributions-uploads": "huhjelaade Dateie",
        "sp-contributions-logs": "Logböcher",
        "sp-contributions-talk": "Klaaf",
        "ipaddressorusername": "<i lang=\"en\">IP</i>-Adress oder Metmaacher Name:",
        "ipbexpiry": "Duur, för wie lang",
        "ipbreason": "Aanlass:",
-       "ipbreason-dropdown": "* Alljemein Jrönd för et Sperre\n** hät fekeehte Behouptunge udder Leeje en Atikele jeschrevve\n** hät Sigge fottjeschmesse udder leddig jemaat\n** hält sesch iewesch nit aan de Rejelle övver de Links op anger Websigge un jäje der Link-SPAM\n** hät Sigge met Shtuß udder Kauderwelsch drop aajelaat udder Keu en Sigge jedonn\n** deit Metmaacher bedrohe, beleijije, udder schlääsch maache\n** hät mieh wie eine Metmaachername un deit domet Schmuu maache\n* Op der Name betrocke Jrönd\n** esu ene Metmaacher_Nahme wolle mer nit\n* Op en IP-Adräß betrocke Jrönd\n** dat es en Proxy-ẞööver övver dänn de Lück zo vill Driß aanjestellt han",
+       "ipbreason-dropdown": "* Alljemein Jrönd för et Schpärre\n** hät fekeehte Behouptunge udder Leeje jeschrevve\n** hät Sigge fottjeschmeße udder läddesch jemaat\n** hält sesch ihwesch nit aan de Räjelle övver de Lengks op annder Wäbsigge un jäje der Lengk-<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„för jewöhnlesch angmaß övverdrahre Nohreeschte udder Meddeijlonge, di wä se kritt jaa nit han well,“\">SPAM</i>\n** hät Sigge met Schtuß udder Kauderwelsch drop aajelaat udder Keu en Sigge jedonn\n** deit Metmaacher bedrohe, beleijije, udder schlääsch maache\n** hät mih wi eine Metmaachernahme un deit domet Schmuu maache\n* Op der Nahme betrocke Jrönd\n** esu ene Metmaacher_Nahme wolle mer nit\n* Op en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß betroke Jrönd\n** dat es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„ene ẞööver en de Nohberschaff, ene Zweschedrääjer udder Zwescheschpeijscher, ene Vermeddelongsrääschner“\">proxy</i>-ẞööver dää de Lück zoh vill Driß aanjeställt han",
        "ipb-hardblock": "Enjelogg Metmaacher dörfe vun heh dä <i lang=\"en\">IP</i>-Addräß kein Sigge ändere",
        "ipbcreateaccount": "Et Neu-Aanmelde verbeede",
        "ipbemailban": "Et <i lang=\"en\">e-mail</i>-Verschecke ongerbenge",
        "blocklink": "schpärre",
        "unblocklink": "widder freijevve",
        "change-blocklink": "Sperr ändere",
-       "contribslink": "Beidrähsch",
+       "contribslink": "Beijdrähsch",
        "emaillink": "Scheck en <span lang=\"en\">e-mail</span>",
        "autoblocker": "Bes automattisch jesperrt. Ding <i lang=\"en\" xml:lang=\"en\">IP</i>_Adress wood vör kootem noch vun däm Metmaacher „[[User:$1|$1]]“ jebruch. Dä es jesperrt woode wäje: „$2“",
        "blocklogpage": "Logbohch met Metmaacher-Schpärre",
        "movepage-page-exists": "En Sigg „$1“ ham_mer ald, un di bliif och beshtonn, mer don se nit ottomatėsch ußtuusche.",
        "movepage-page-moved": "Di eejemoolijje Sigg „$1“ es jëz op „$2“ ömjenannt.",
        "movepage-page-unmoved": "Mer kůnnte di Sigg „$1“ nit op „$2“ ömnënne.",
-       "movepage-max-pages": "Mer han jëtz {{PLURAL:$1|ëijn Sigg|$1 Sigge|kein Sigg}} ömjenanndt. Mieh jeiht nit automatėsch.",
+       "movepage-max-pages": "Mer han jëtz {{PLURAL:$1|ëijn Sigg|$1 Sigge|kein Sigg}} ömjenanndt. Mih jeiht nit automatėsch.",
        "movelogpage": "Logbohch vum Sigge Ömnänne",
        "movelogpagetext": "Heh sin de Neuste ömjenannte Sigge opjeliss, un wä et jedon hät.",
        "movesubpage": "{{PLURAL:$1|Ungersigg|Ungersigge|Ungersigge}}",
        "delete_and_move": "Fottschmieße un Ömnenne",
        "delete_and_move_text": "== Dä! Dubbelte Name ==\nDi Sigg „[[:$1]]“ jitt et ald. Wollts De se fottschmieße, öm heh di Sigg ömnenne ze künne?",
        "delete_and_move_confirm": "Jo, dun di Sigg fottschmieße.",
-       "delete_and_move_reason": "Fottjeschmesse, öm de Sigg [[$1]] ömnenne ze künne.",
+       "delete_and_move_reason": "Fottjeschmeße, öm di Sigg „[[$1]]“ ömbenänne ze künne.",
        "selfmove": "Du Doof! - dä ahle Name un dä neue Name es däselve - do hät et Ömnenne winnich Senn.",
        "immobile-source-namespace": "Sigge en dämm Appachtemang „$1“ künne nit ömjenannt wääde",
        "immobile-target-namespace": "Sigge künne nit en dat Appachtemang „$1“ erenn ömjenannt wääde",
        "thumbnail_image-type": "Di Zoot Beld künne mer nit met ömjonn",
        "thumbnail_gd-library": "Vun dä <i lang=\"en\">GD</i> Projramm_Biplijotheek fäählt en Funkßuhn: „$1“",
        "thumbnail_image-missing": "Di Dattei schingk nit doh ze sin: <code>$1</code>",
-       "thumbnail_image-failure-limit": "Mieh wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.",
+       "thumbnail_image-failure-limit": "Mih wi {{PLURAL:$1|eine Versohch|$1 Versohche|keine Versohch}} dat Minnibelldsche ze zeije. Versöhg_et schpääder widder.",
        "import": "Sigge Emporteere",
        "importinterwiki": "Empottehre uss_enem andere Wikki",
        "import-interwiki-text": "Wähl e Wikki un en Sigg zem Emportehre uß.\nEt Dattum vun de Väsiohne un de Metmaacher_Nahme vun de Schriever wähde dobei metjenomme.\nAll de Empochte vun andere Wikkis wähde em [[Special:Log/import|Logbohch vum Empottehre]] faßjehallde.",
        "import-comment": "Jrond:",
        "importtext": "Dun de Daate met däm „[[Special:Export|Export]]“ vun doh vun enem Wiki Exporteere un - etwa bei Dir om Rechner - avspeichere, un dann heh wider huhlade.",
        "importstart": "Ben Sigge am emporteere …",
-       "import-revision-count": "({{PLURAL:$1|ein Version|$1 Versione|kein Version}})",
+       "import-revision-count": "({{PLURAL:$1|ein Väsjohn|$1 Väsjohne|kein Väsjohn}})",
        "importnopages": "Kein Sigg för ze Emporteere jefunge.",
        "imported-log-entries": "{{PLURAL:$1|Eine Enndraach woodt|$1 Enndrääsch woodte|Keine Enndraach wood}} en et Logbooch empotteert.",
        "importfailed": "Dat Importeere es donevve jejange: $1",
        "tooltip-ca-protect": "Donn di Sigg schöze",
        "tooltip-ca-unprotect": "Donn dä Schoz vun dä Sigg heh verändere udder ophävve.",
        "tooltip-ca-delete": "Donn di Sigg fottschmiiße",
-       "tooltip-ca-undelete": "Don de Änderunge widder zerök holle, di aan dä Sigg heh jemat woode wore, ih dat se fottjeschmesse wood",
+       "tooltip-ca-undelete": "Don de Änderunge widder zerök holle, di aan dä Sigg heh jemat woode wohre, ih dat se fottjeschmeße wood",
        "tooltip-ca-move": "Donn di Sigg ömbenänne",
        "tooltip-ca-watch": "Don di Sigg en Ding Oppaßleß opnämme",
        "tooltip-ca-unwatch": "Schmihß di Sigg us Dinge eije Oppaßleß eruß",
        "tooltip-ca-nstab-main": "Don dä Enhallt vun dä Sigg aanzeije",
        "tooltip-ca-nstab-user": "Donn di Metmaachersigg aanzeije",
        "tooltip-ca-nstab-media": "Don de Sigg övver en Mediendatei aanzeije",
-       "tooltip-ca-nstab-special": "Dat is en {{int:nstab-special}}. Do kam'mer nix draan verändere.",
+       "tooltip-ca-nstab-special": "Dat is en {{int:nstab-special}}. Do kam_mer nix draan verändere.",
        "tooltip-ca-nstab-project": "Donn di Projäksigg aanzeije",
        "tooltip-ca-nstab-image": "Don di Sigg övver heh di Dattei aanzeije",
        "tooltip-ca-nstab-mediawiki": "En Täx vum MehdijaWikki-System aanzeije",
        "tooltip-diff": "Zeijsch Ding Änderonge aam Täx aan.",
        "tooltip-compareselectedversions": "Dun de Ungerscheid zwesche dä beids usjewählde Versione zeije.",
        "tooltip-watch": "Op di Sigg heh oppaßße.",
-       "tooltip-watchlistedit-normal-submit": "Donn  de Titele met Hökche eruß schmieße.",
+       "tooltip-watchlistedit-normal-submit": "Donn de Titele met Höhkche eruß schmiiße.",
        "tooltip-watchlistedit-raw-submit": "Oppaßleß neu fasshallde",
-       "tooltip-recreate": "En fottjeschmesse Sigg widder zeröckholle",
+       "tooltip-recreate": "En fottjeschmeße Sigg widder zeröckholle",
        "tooltip-upload": "Mem Dattei-Huhlaade loßlääje",
        "tooltip-rollback": "Nemmp alle Ännderonge zeröck, di dä Läzde jemaat hät, dä aan dä heh Sigg övverhoup jet jedonn hät. Deiht nimmih frohre, un mähd automattesch ene Endrahch onger „{{int:Summary}}“ en et Logbohch eren.",
        "tooltip-undo": "„{{UCfirst:{{int:editundo}}}}“ määt der förije Zohschtand\nfun dä Sigg op, zom Beärbeijde un widder Affschpeischere.\nEsu kam_mer noch en Aanmärkong en „{{int:summary}}“ maache.",
        "group-user.css": "/* Dat CSS heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
        "group-bot.css": "/* Dat CSS heh aan dä Stell krijje nur de Bot-Projrammee jescheck */",
        "group-sysop.css": "/* Dat CSS heh aan dä Stell krijje nur dem Wiki sing Köbeße jescheck */",
-       "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokraate jescheck */",
+       "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokrahde jescheck */",
        "common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
        "group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
        "group-user.js": "/* De JavaSkreppte heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
-       "group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
+       "group-bot.js": "/* De JavaSkreppte fun heh krijje bloß de Bots jescheck */",
        "group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
-       "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokraate jescheck */",
+       "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokrahde jescheck */",
        "anonymous": "Namelose {{PLURAL:$1|Metmaacher|Metmaacher|Metmaacher}} vun {{GRAMMAR:Dat|{{SITENAME}}}}",
        "siteuser": "{{SITENAME}}-Metmaacher $1",
        "anonuser": "dä nameloose Metmaacher $1 {{GRAMMAR:Genitive vum|{{SITENAME}}}}",
        "others": "ander",
        "siteusers": "{{PLURAL:$2|däm|de|keine}} {{PLURAL:$2|Metmaacher|Metmaachere|Metmaacher}} $1 aan {{GRAMMAR:Dat|{{SITENAME}}}}",
        "anonusers": "{{PLURAL:$2|dä|de|keine}} nameloose Metmaacher $1 vun de translatewiki.net",
-       "creditspage": "Övver de Metmaacher un dänne ehr Beidrähsch för heh di Sigg",
+       "creditspage": "Övver de Metmaacher un dänne ehr Beijdrähsch för heh di Sigg",
        "nocredits": "För di Sigg ham_mer nix en de Leß.",
        "spamprotectiontitle": "SPAM_Schotz",
        "spamprotectiontext": "De Sigg, di de avschpeicchere wells, di weed vun onsem Projramm zom Schoz jähje der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„för jewöhnlesch angmaß övverdrahre Nohreeschte udder Meddeijlonge, di wä se kritt jaa nit han well,“\">SPAM</i> nit durchjelooße. Dat kütt mihts vun enem Link op en främde Sigg, di op de \n„Schwazze Leß“ schteiht.",
        "spam_reverting": "De läzde Väsjohn ohne de Lengks op „$1“ widder zerröckjehollt.",
        "spam_blanking": "All di Väsjohne hatte Lengks op „$1“, di sin jäz erus jemaht.",
        "spam_deleting": "All di Versione met Lenks op „$1“ wääde fott jeschmeße",
-       "simpleantispam-label": "Donn heh nix endraare!",
+       "simpleantispam-label": "Donn heh <strong>nix</strong> endrahre!",
        "pageinfo-title": "Övver di Sigg: „$1“",
        "pageinfo-not-current": "Esu en Aanjahbe künne mer övver ällder Väsjohne vun Sigge nit maache.",
        "pageinfo-header-basic": "Jrundlääje Aanjabe",
        "pageinfo-robot-index": "zohjelohße",
        "pageinfo-robot-noindex": "verbodde",
        "pageinfo-watchers": "De Aanzahl Oppaßßer för di Sigg",
-       "pageinfo-visiting-watchers": "De Aanzahl Metmaacher, di op heh di Sigg oppaße un och de {{lcfirst:{{int:recentchanges}}}} belohre",
+       "pageinfo-visiting-watchers": "De Aanzahl Metmaacher, di op heh di Sigg oppaße un och de {{lcfirst:{{int:recentchanges}}}} belohrt han",
        "pageinfo-few-watchers": "Et jidd_er winnijer wi {{PLURAL:$1|eine|$1|keine}} Oppaßer.",
        "pageinfo-few-visiting-watchers": "Et künnd ene Metmaacher javve, dä op heh di Sigg oppaß un och de {{lcfirst:{{int:recentchanges}}}} belohrt — udder och nit.",
        "pageinfo-redirects-name": "Ömleidonge op heh di Sigg",
        "patrol-log-header": "<!-- -->",
        "log-show-hide-patrol": "$1 et Logbuch vum Sigge nohlooere",
        "log-show-hide-tag": "Donn et Logbohch vun de Makkehronge $1",
-       "deletedrevision": "De ahl Version „$1“ es fottjeschmesse",
+       "deletedrevision": "De ahle Väsjohn „$1“ es fottjeschmeße",
        "filedeleteerror-short": "Fähler bem Dattei-Fottschmiiße: $1",
        "filedeleteerror-long": "Bem Fosooch, de Dattei fottzeschmihße, hatte mer Fähler:\n\n$1",
        "filedelete-missing": "De Datei „$1“ künne mer nit fottschmieße, Leevje, di jidd_et janit.",
        "confirmemail_needlogin": "Do muss Dich $1, för de E-Mail Adress ze bestätije.",
        "confirmemail_success": "Ding E-Mail Adress es jetz bestätich.\nJetz künns De och noch enlogge. Vill Spass!",
        "confirmemail_loggedin": "Ding Addräß fö de <i lang=\"en\">e-mail</i> es jäz beschtäätesch!",
-       "confirmemail_subject": "Dun Ding e-mail Adress för {{GRAMMAR:Akkusativ|{{SITENAME}}}} bestäteje.",
-       "confirmemail_body": "Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" {{GRAMMAR:vun|{{SITENAME}}}}\nsin, un hät en E-Mail Adress aanjejovve.\n\nÖm jetz klor ze krije, dat di e-mail Adräß un dä neue Metmaacher och\nzosamme jehüre, muss dä Neue en singem Brauser dä Link:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding e-mail Adräß aanjejovve hät, do bruchs de\njar nix ze don. De e-mail Adräß kann nit jebruch wääde, ih dat se nit\nbestätich es. Do kanns ävver och op he dä Lengk jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adräß nit bestätije wells.",
+       "confirmemail_subject": "Don Ding e-mail-Adräß för {{GRAMMAR:Akkusativ|{{SITENAME}}}} beschtähteje.",
+       "confirmemail_body": "Künnt johd sin, Do wors et selver. Vun dä IP_Adräß $1 hät sich\njedenfalls einer jemäldt, un well dä Metmaacher \"$2\" {{GRAMMAR:vun|{{SITENAME}}}}\nsin, un hät en e-mail-Adräss aanjejovve.\n\nÖm jetz klor ze krije, dat di e-mail Adräß un dä neue Metmaacher och\nzosamme jehüre, muss dä Neue en singem Brauser dä Link:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann De et bes.\n\nWann nit Do, sondern söns wä Ding e-mail-Adräß aanjejovve hät, do bruchs de\njar nix ze don. De e-mail-Adräß kann nit jebruch wähde, ih dat se\nbeschtähtesch es. Do kanns ävver och op heh dä Lengk jon:\n\n$5\n\nDomet deiß De tirek sahre, dat De di Adräß nit beschtähteje wells.",
        "confirmemail_body_changed": "Künnt jod sin, Do wors et selver. Vun de IP_Adräß $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nsin, un hät en neu Adress för sing e-mail aanjejovve.\n\nÖm jetz klor ze krije, dat di neu Adräß un dä Metmaacher och\nzosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nwidder aanzschallde, moss dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding E-Mail Adress aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit bestätich es.\nDo kanns ävver och op heh dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adress nit bestätije wells.",
-       "confirmemail_body_set": "Künnt jod sin, Do wors et selver. Vun dä IP_Adress $1 hät op\njede Fall einer för dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nheh di Adräß för däm sing e-mail aanjejovve.\n\nÖm jäz kloh ze krije, dat di neu Adräß un dä Metmaacher och\nzosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\naanzschallde, moß dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann dat sing\nReeschteschkeit hät.\n\nWann nit Do, sondern söns wä Ding Addräß för de e-Mail aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit bestätesch es.\nDo kanns ävver och op heh dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adräß nit bestäteje wells.",
+       "confirmemail_body_set": "Künnt johd sin, Do wors et sällver. Vun dä IP-Adräß $1 hät op\njede Fall einer för dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nheh di Adräß för däm sing e-mail aanjejovve.\n\nÖm jäz kloh ze kreje, dat di neu Adräß un dä Metmaacher och\nzosamme jehühre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\naanzschallde, moß dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann dat sing\nReeschteschkeijt hät.\n\nWann nit Doh, sönders söns wä Ding Addräß för de e-Mail aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit beschtähtesch es.\nDo kanns ävver och op heh dä Lengk jon:\n\n$5\n\nDomet deiß De tirek vermällde, dat De di Adräß nit beschtähteje wells.",
        "confirmemail_invalidated": "Et Beschtähtejje för di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß es afjebroche wohde, un di Adräß es '''nit''' beschtähtesch.",
        "invalidateemail": "E-Mail-Adress nit bestätich",
        "scarytranscludedisabled": "[Et Enbinge per Interwiki es avjeschalt]",
        "autoredircomment": "Leit öm op „[[$1]]“",
        "autosumm-new": "De Sigg wood neu aanjelaat met däm Aanfang: $1",
        "autosumm-newblank": "En läddijje Sigg wood aanjelaat",
-       "size-bytes": "$1&nbsp;Bytes",
+       "size-bytes": "$1&nbsp;<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Binary Digit\">{{PLURAL:$1|Byte|Bytes|Byte}}</i>",
        "size-kilobytes": "$1&nbsp;KB",
        "size-megabytes": "$1&nbsp;MB",
        "size-gigabytes": "$1&nbsp;GB",
        "size-exabytes": "$1&nbsp;EB",
        "size-zetabytes": "$1&nbsp;ZB",
        "size-yottabytes": "$1&nbsp;YB",
-       "size-pixel": "$1&nbsp;Pixelle",
+       "size-pixel": "$1&nbsp;{{PLURAL:$1|Pixel|Pixelle|Pixel}}",
        "size-kilopixel": "$1&nbsp;Killopixelle",
        "size-megapixel": "$1&nbsp;Mejapixelle",
        "size-gigapixel": "$1&nbsp;Jijapixelle",
        "watchlistedit-normal-title": "Oppaßleß beärbeijde",
        "watchlistedit-normal-legend": "Övverschreffte uß de Oppaßleß eruß lohße",
        "watchlistedit-normal-explain": "Dat sin de Endräsch en Dinge Oppaßleß.\nÖm einzel Titelle loßß ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.\nDo kanns Ding Oppassleß och [[Special:EditWatchlist/raw|en rüh beärbeide]].",
-       "watchlistedit-normal-submit": "Jangk de Titele met Hökche eruß schmieße",
+       "watchlistedit-normal-submit": "Jangk de Titele met Höhkche eruß schmiiße",
        "watchlistedit-normal-done": "{{PLURAL:$1|Eine Sigge_Övverschreff es|<strong>$1</strong> Sigge_Övverschreffte sin|Keine Sigge_Övverschreff es}} us Dinge Opaßless erus jefloore:",
        "watchlistedit-raw-title": "Rüh Oppaßleß beärbeide",
        "watchlistedit-raw-legend": "Rüh Oppaßleß beärbeide",
-       "watchlistedit-raw-explain": "Dat sin de Endrähsch in Dinge Oppaßles en rüh.\nÖm einzel Titelle loßß ze wähde, kanns de de Reije met inne eruß schmieße, ov läddich maache.\nÖm neu Titelle  dobei ze don, schriev neu Reije dobei. Jede Titel moss en en Reih för sijj_allein shtonn.\nWanns De fädig bes, dann deuß De dä Knopp „{{int:Watchlistedit-raw-submit}}“.\nNatörlesch kanns De di Les och — met Dingem Brauser singe ''<span lang=\"en\">Copy&amp;Paste</span>''-Funkßjohn — komplett kopeere odder ußtuusche.\nDe könnts Ding Oppaßless ävver och [[Special:EditWatchlist|övver e Fomulaa met Kässjer un Hökscher beärbeide]].",
+       "watchlistedit-raw-explain": "Dat sin de Endrähsch in Dinge Oppaßles en rüh.\nÖm einzel Sigge loßß ze wähde, kanns De de Reije met inne eruß schmiiße ov läddich maache.\nÖm neu Sigge dobei ze don, schriev neu Reije dobei. Jede Sigg moss en en Reih för sijj_allein schtonn.\nWanns De fädig bes, dann deuß De dä Knopp „{{int:Watchlistedit-raw-submit}}“.\nNatörlesch kanns De di Les och — met Dingem Brauser singe ''<span lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„Koppehre un Ennföhje“\">Copy&amp;Paste</span>''-Funkßjohn — komplett kopeere odder ußtuusche.\nDe künnts Ding Oppaßless ävver och [[Special:EditWatchlist|övver e Fomulaa met Kässjer un Hökscher beärbeide]].",
        "watchlistedit-raw-titles": "Endrähsch:",
        "watchlistedit-raw-submit": "Oppaßleß neu faßhallde",
        "watchlistedit-raw-done": "Ding Oppaßßleß es fassjehallde.",
        "version-poweredby-credits": "Dat Wiki heh löp met <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001–$1 $2.",
        "version-poweredby-others": "sönß wää",
        "version-poweredby-translators": "de Övversäzer em translatewiki.net",
-       "version-credits-summary": "Mer bedanke ons för dänne iehr Beidrähsch zom [[Special:Version|MehdijaWikki]] bei:",
+       "version-credits-summary": "Mer bedanke ons för dänne iehr Beijdrähsch zom [[Special:Version|MehdijaWikki]] bei:",
        "version-license-info": "MediaWiki es e frei Projramm. Mer kann et unmolesteet wigger verdeile, un mer kann et verändere, wi mer löstich es, wam_mer sesch dobei aan de <i lang=\"en\">GNU General Public License</i> (jenerälle öffentlesche Lizänz noh GNU) hallde deiht, wi se vun der <i lang=\"en\">Free Software Foundation</i> (Steftung för frei Soffwäer) veröffentlesch woode es. Dobei kam_mer sesch ußsöhke of mer sesch aan de Version 2 dovun hallde deiht, udder öhnz en späädere Fassung.\n\nMediaWiki weed verdeilt met dä Hoffnung, dat et för jet jood es, ävver <span style=\"text-transform:uppercase\">der ohne jeede Jarantie</span>, un esujaa ohne ene unjesaate Jedangke, et künnt <span style=\"text-transform:uppercase\">ze verkoufe</span> sin udder <span style=\"text-transform:uppercase;\">för öhndsene bestemmpte Zweck ze jebruche</span>. Loor Der de jenannte Lizänz aan, wann De mieh Einzelheite weße wells.\n\nDo sullts en [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun dä <i lang=\"en\">GNU General Public License</i>] zosamme met däm Projramm krääje han, un wann nit, schrief aan de: <i lang=\"en\">Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA </i> udder [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liß se em Internet noh].",
        "version-software": "Installeete Soffwäer",
        "version-software-product": "Produk",
        "version-libraries-library": "Projrammsammlong",
        "version-libraries-version": "Väsjohn",
        "version-libraries-license": "Lėzänz",
+       "version-libraries-description": "Wat se deiht",
        "version-libraries-authors": "Schrihver",
        "redirect": "Ömleide op en Dattei, ene Metmaacher udder de Väsjohn vun ener Sigg",
        "redirect-legend": "Ömleide ob_en Dattei udder Sigg",
        "specialpages-group-other": "Ander {{int:nstab-special}}e",
        "specialpages-group-login": "Enlogge udder Aanmälde",
        "specialpages-group-changes": "Läzde Änderonge un Logböhscher",
-       "specialpages-group-media": "Dateie — Huhlaade un Opliste",
+       "specialpages-group-media": "Dateije — Huhlahde un Opleßte",
        "specialpages-group-users": "Metmaacher un denne ier Rääschte",
        "specialpages-group-highuse": "Öff jebruch…",
-       "specialpages-group-pages": "Siggeliste",
+       "specialpages-group-pages": "Siggeleste",
        "specialpages-group-pagetools": "Werrekzüch för Sigge",
        "specialpages-group-wiki": "Werrekzüch un Daate vum Syßteem",
        "specialpages-group-redirects": "{{int:nstab-special}}e, di ömleide, söhke, un fenge",
        "tags-delete-submit": "Onzeröckhollbaa fottschmiiße!",
        "tags-delete-not-allowed": "Kännzeijsche, di övver Zohsazprojramme faßjelaat wääde, kam_mer blß fottschmiiße, wann dat Zohsazprojramm et zohlöht.",
        "tags-delete-not-found": "E Kännzeijsche „$1“ jidd_et nit.",
-       "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mieh wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
+       "tags-delete-too-many-uses": "Dat Kännzeijsche „$1“ es för {{PLURAL:$2|mih wi ein Väsjohn|övver $2 Väsjohn|kein Väsjohn}} em jebruch, dröm kam_mer et nit fottschmiiße.",
        "tags-delete-warnings-after-delete": "Dat Kännzeijsche „$1“ es fottjeschmeße, ävver {{PLURAL:$2|ei Problem|$2 Probleme|kein Problem}} es opjevalle:",
        "tags-activate-title": "Kännzeijsche aanschallde",
        "tags-activate-question": "Do bes om bäßte Wähsch, et Kännzeijsche „$1“ aanzeschallde.",
        "comparepages": "Sigge verjliesche",
        "compare-page1": "De ein Sigg",
        "compare-page2": "De ander Sigg",
-       "compare-rev1": "de ein Version",
+       "compare-rev1": "de ein Väsjohn",
        "compare-rev2": "de ander Väsjohn",
        "compare-submit": "Verjlieshe!",
        "compare-invalid-title": "De aanjejovve Övverschreff es nit jöltesch",
        "htmlform-cloner-create": "Mih derbei donn",
        "htmlform-cloner-delete": "Fottnämme",
        "htmlform-cloner-required": "Winnischsdens eine Wääd es nühdesch.",
+       "htmlform-title-badnamespace": "[[:$1]] es nit em Appachetmang „{{ns:$2}}“.",
+       "htmlform-title-not-creatable": "„$1“ en kein Övverschreff, för di me en Sigg aanlähje künnt",
+       "htmlform-title-not-exists": "[[:$1]] jidd_et nit.",
+       "htmlform-user-not-exists": "<strong>$1</strong> jidd_et nit.",
+       "htmlform-user-not-valid": "<strong>$1</strong> es keine jöltejje Nahme för ene Metmaacher.",
        "sqlite-has-fts": "Version $1 (un kann en janze Täxte söhke)",
        "sqlite-no-fts": "Version $1 (kann ävver nit en janze Täxte söhke)",
        "logentry-delete-delete": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ fottjeschmeße.",
        "logentry-newusers-create2": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $3 wood {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.",
        "logentry-newusers-byemail": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} aanjelaat un {{GENDER:$4|sing|em sing|däm sing|dä iehr|däm sing}} Paßwoot met der <i lang=\"en>e-mail</i> verscheck.",
        "logentry-newusers-autocreate": "{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood automattesch {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.",
+       "logentry-protect-move_prot": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät de Enschtällong vum schoz vun dä Sigg „$4“ noh dä Sigg „$3“ övvenumme",
        "logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
        "logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
        "logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
        "rightsnone": "(nix)",
        "revdelete-summary": "dä Täx en „{{int:summary}}“",
        "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
-       "feedback-back": "Retuur",
+       "feedback-back": "Retuhr",
        "feedback-bugcheck": "Joot. Donn op jeede Vall nohlooer, dat dat bes jäz noch nit [$1 bikannt wohr].",
        "feedback-bugnew": "Hann esch nohjelooert. Esch jävven ene neue Fähler enn.",
        "feedback-bugornote": "Wann de em Bejreff bes, övver e täschnesch Problehm ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].\nSöns, nemm dat koote Fommulaa heh dronger.\nWat De doh ennjiß, kütt met Dingem Metmaachername un Dingem Brauser op di Sigg „[$3 $2]“ drop.",
        "api-error-duplicate-popup-title": "Di {{PLURAL:$1|Dattei es|Datteie sen|Dattei es}} ald doh.",
        "api-error-empty-file": "En dä huhjelaade Dattei wohr jaa_nix dren.",
        "api-error-emptypage": "Neu läddijje Sigge aanzelääje es verbodde.",
-       "api-error-fetchfileerror": "Fähler: Beim eronger Laade hät jät nit jeflupp.",
+       "api-error-fetchfileerror": "Fähler: Beim eronger Lahde hät jät nit jeflupp.",
        "api-error-fileexists-forbidden": "En Dattei mem Name „$1“ es ald doh un mer künne se nit övverschriive.",
        "api-error-fileexists-shared-forbidden": "En Dattei mem Name „$1“ es ald en ene jemeinsamme Sammlong, un mer künne se nit övverschriive.",
        "api-error-file-too-large": "De huhjelaade Dattei wohr ze jruß.",
        "limitreport-postexpandincludesize-value": "{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}",
        "limitreport-templateargumentsize": "Der Ömvang vun de Parrameeterre vun Schablohne",
        "limitreport-templateargumentsize-value": "{{PLURAL:$1|ein|$1|kein}} vun {{PLURAL:$2|einem Byte|$2 Bytes|keinem Byte}}",
+       "limitreport-expansiondepth": "Deefste Ußdehnong beim Öplühse",
        "limitreport-expansiondepth-value": "$1 vun $2",
        "limitreport-expensivefunctioncount": "Oproofe vun „düüre“ Fonxjuhne em Paaser",
        "limitreport-expensivefunctioncount-value": "$1 vun $2",
        "special-characters-title-endash": "Ene Halfjeviertschtresch",
        "special-characters-title-emdash": "Ene Jeviertschtresch",
        "special-characters-title-minus": "Et Winnijer-Zeische",
+       "mw-widgets-dateinput-no-date": "Kein Dattom es ußjewählt",
        "mw-widgets-titleinput-description-new-page": "di Sigg jidd_et noch nit",
        "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“"
 }
index 3683d61..ddf03c9 100644 (file)
        "note": "<strong>Nîşe:</strong>",
        "previewnote": "'''Ji bîr neke ku ev tenê pêşdîtinek e.'''\nGuhertinên te hê nehatine tomarkirin!",
        "continue-editing": "Here qada sazandinê",
-       "editing": "$1 te guherandin",
+       "editing": "$1 tê guherandin",
        "creating": "$1 tê çêkirin",
        "editingsection": "Tê guherandin: $1 (beş)",
        "editingcomment": "$1 (beşek nû) tê guherandin.",
        "tooltip-pt-mycontris": "Lîsteya beşdariyên min",
        "tooltip-pt-logout": "Derkeve",
        "tooltip-ca-talk": "Gotûbêj li ser rûpela naverokê",
-       "tooltip-ca-edit": "Vê rûpelê biguherîne! Berê qeydkirinê bişkoka \"Pêşdîtin\"",
+       "tooltip-ca-edit": "Vê rûpelê biguherîne",
        "tooltip-ca-addsection": "Beşekê zêde bike.",
        "tooltip-ca-viewsource": "Ev rûpel tê parastin.\nTu dikarî tenê li çavkaniyê binêrî.",
        "tooltip-ca-history": "Guhertoyên berê yên vê rûpelê",
        "tooltip-n-mainpage": "Here Destpêkê",
        "tooltip-n-mainpage-description": "Here Destpêkê",
        "tooltip-n-portal": "Agahdarî li ser {{SITENAME}}, tu dikarî çi bikî, tu dikarî çi li ku bîbînî",
+       "tooltip-n-currentevents": "Der barê bûyerên dawî de agahîyên nûjen bibîne",
        "tooltip-n-recentchanges": "Lîsteya guherandinên dawî di vê wîkiyê da",
        "tooltip-n-randompage": "Rûpeleka ketober bar bike",
        "tooltip-n-help": "Bersivên ji bo pirsên te.",
index 0a78ffd..0dec0a0 100644 (file)
                        "Викиней",
                        "아라",
                        "Askar Nazyrov",
-                       "Macofe"
+                       "Macofe",
+                       "Janatkg"
                ]
        },
        "tog-underline": "Шилтемелердин алдын сызуу:",
        "tog-hideminor": "Соңку өзгөрүүлөрдүн тизмесинен майда өзгөрүүлөрдү жашыруу",
        "tog-hidepatrolled": "Соңку өзгөрүүлөрдүн тизмесинен күзөттөлгөн оңдоолорду жашыруу",
        "tog-newpageshidepatrolled": "Жаңы барактар тизмесинен күзөттөлгөн барактарды жашыруу",
+       "tog-hidecategorization": "Барактардын категорияларын жашыруу",
        "tog-extendwatchlist": "Бүт өзгөртүүлөрдү камтыган кеңири көзөмөл тизмеси, эң соңкуларды гана эмес",
        "tog-usenewrc": "Өзгөртүүлөрдү соңку өзгөрүүлөргө жана көзөмөл тизмеме топтоо (JavaScript талап кылынат)",
        "tog-numberheadings": "Башжазууларды автоматтык түрдө номердөө",
@@ -71,8 +73,8 @@
        "saturday": "Ишемби",
        "sun": "Жк",
        "mon": "Дш",
-       "tue": "Ше",
-       "wed": "Ша",
+       "tue": "Шей",
+       "wed": "Шар",
        "thu": "Бш",
        "fri": "Жм",
        "sat": "Иш",
        "category-subcat-count-limited": "Бул категорияда {{PLURAL:$1|$1|$1|$1}} ички категория бар.",
        "category-article-count": "{{PLURAL:$2|Бул категория төмөнкү баракты камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|барак|$1 барак}} бар.}}",
        "category-article-count-limited": "Бул категорияда {{PLURAL:$1|$1 барак}} бар.",
-       "category-file-count": "{{PLURAL:$2|Бул категория төмөнкү файлды камтыйт.|Бул категорияда жалпы $2, төмөнкү {{PLURAL:$1|файл|$1 файл}} бар.}}",
+       "category-file-count": "{{PLURAL:$2|Ð\91Ñ\83л ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\82өмөнкү Ñ\84айлдÑ\8b Ð³Ð°Ð½Ð° ÐºÐ°Ð¼Ñ\82Ñ\8bйÑ\82.|Ð\91Ñ\83л ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ð¶Ð°Ð»Ð¿Ñ\8b $2, Ñ\82өмөнкү {{PLURAL:$1|Ñ\84айл|$1 Ñ\84айл}} Ð±Ð°Ñ\80.}}",
        "category-file-count-limited": "Бул категорияда {{PLURAL:$1|$1|$1|$1}} файл бар.",
        "listingcontinuesabbrev": "уланд.",
        "index-category": "Индекстелген барактар",
        "search": "Издөө",
        "searchbutton": "Издөө",
        "go": "Өтүү",
-       "searcharticle": "Ð\90лга",
+       "searcharticle": "Ð\91аÑ\88Ñ\82а",
        "history": "Барактын тарыхы",
        "history_short": "Тарыхы",
        "updatedmarker": "менин акыркы жолу кирүүмдөн кийин жаңыртылган",
        "personaltools": "Жеке аспаптар",
        "articlepage": "Макаланы кароо",
        "talk": "Талкуу",
-       "views": "Көрсөтүүлөр",
+       "views": "Кароолор",
        "toolbox": "Аспаптар",
        "userpage": "Катышуучунун барагын кароо",
        "projectpage": "Долбоор барагын кароо",
        "viewhelppage": "Жардам алуу",
        "categorypage": "Категория барагын кароо",
        "viewtalkpage": "Талкууну кароо",
-       "otherlanguages": "Ð\91ашка тилдерде",
+       "otherlanguages": "башка тилдерде",
        "redirectedfrom": "($1 барагынан багытталды)",
        "redirectpagesub": "Багыттама барак",
        "lastmodifiedat": "Бул барак соңку жолу $1, $2 өзгөртүлгөн.",
        "disclaimers": "Жоопкерчиликтен баш тартуу",
        "disclaimerpage": "Project:Жоопкерчиликтен баш тартуу",
        "edithelp": "Оңдоп-түзөөгө жардам",
-       "mainpage": "Баш барак",
-       "mainpage-description": "Баш барак",
+       "helppage-top-gethelp": "Жардам",
+       "mainpage": "Башбарак",
+       "mainpage-description": "Башбарак",
        "policy-url": "Project:Эрежелер",
        "portal": "Жамаат порталы",
        "portal-url": "Project:Жамаат порталы",
        "hidetoc": "жашыруу",
        "collapsible-collapse": "Түрүү",
        "collapsible-expand": "жаюу",
+       "confirmable-yes": "Ооба",
+       "confirmable-no": "Жок",
        "thisisdeleted": "$1 көрүү же калыбына келтирүү?",
        "viewdeleted": "Көрүү $1?",
        "restorelink": "{{PLURAL:$1|$1 өчүрүлгөн оңдоо}}",
        "site-rss-feed": "$1 RSS тилкеси",
        "site-atom-feed": "$1 Atom агымы",
        "page-rss-feed": "«$1» — RSS-лента",
-       "page-atom-feed": "«$1» — Atom-лента",
+       "page-atom-feed": "«$1» — Atom-тасмасы",
        "red-link-title": "$1 (мындай барак жок)",
        "sort-descending": "Кемүү боюнча иргөө",
        "sort-ascending": "Өсүү боюнча иргөө",
        "yourname": "Колдонуучу аты:",
        "userlogin-yourname": "Колдонуучунун аты",
        "userlogin-yourname-ph": "Колдонуучу атыңызды териңиз",
+       "createacct-another-username-ph": "Колдонуучу атыңызды териңиз",
        "yourpassword": "Сырсөз:",
        "userlogin-yourpassword": "Сырсөз",
        "userlogin-yourpassword-ph": "Сырсөзүңүздү териңиз",
        "createacct-yourpassword-ph": "Сырсөздү териңиз",
        "yourpasswordagain": "Сырсөздү кайра терүү:",
        "createacct-yourpasswordagain": "Сырсөздү тастыктаңыз",
-       "createacct-yourpasswordagain-ph": "Сырсөздү кайра киргизиңиз",
+       "createacct-yourpasswordagain-ph": "Сырсөздү кайрадан териңиз",
        "remembermypassword": "Бул браузерде колдонуучу атымды ($1 {{PLURAL:$1|күнгө}} чейин сактоо)",
        "userlogin-remembermypassword": "Мени системге кирген боюнча калтыр",
        "userlogin-signwithsecure": "Коопсуз байланышты колдонуу",
        "gotaccount": "Катталгансызбы? '''$1'''.",
        "gotaccountlink": "Кирүү",
        "userlogin-resetlink": "Кирүүчү маалыматарыңызды эсиңизден чыгардыңызбы?",
-       "userlogin-resetpassword-link": "Сырсөздү алмаштыруу",
+       "userlogin-resetpassword-link": "Сырсөздү унуттуңузбу?",
        "userlogin-loggedin": "Сиз эчак эле {{GENDER:$1|$1}} деп киргенсиз.\nБашка колдонуучунун атынан кириш үчүн асытдагы форманы колдонуңуз.",
        "createacct-emailrequired": "Эмейл дарек",
-       "createacct-emailoptional": "Эмейл дарек (милдеттүү эмес)",
-       "createacct-email-ph": "Эмейл дарегиңизди киргизиңиз",
+       "createacct-emailoptional": "Email дарек (милдеттүү эмес)",
+       "createacct-email-ph": "Email дарегиңизди жазыңыз",
+       "createacct-another-email-ph": "E-mail дарек териңиз",
        "createaccountmail": "Убактылуу түзүлгөн сырсөздү колдон жана аны көрсөтүлгөн эмейл дарекке жөнөт",
        "createacct-realname": "Чыныгы ысымы (милдеттүү эмес)",
        "createaccountreason": "Себеби:",
        "createacct-captcha": "Коопсуздук текшерүүсү",
        "createacct-imgcaptcha-ph": "Жогорудагы текстти териңиз",
        "createacct-submit": "Катталыңыз",
-       "createacct-benefit-heading": "{{SITENAME}} Ñ\81из Ñ\81Ñ\8bÑ\8fкÑ\82Ñ\83Ñ\83 ÐºÐ¸Ñ\88илер тарабынан түзүлгөн.",
+       "createacct-benefit-heading": "{{SITENAME}} Ñ\81из Ñ\81Ñ\8bÑ\8fкÑ\82Ñ\83Ñ\83 Ð°Ð´Ð°Ð¼Ð´Ð°р тарабынан түзүлгөн.",
        "createacct-benefit-body1": "{{PLURAL:$1|оңдоо|оңдоолор}}",
        "createacct-benefit-body2": "{{PLURAL:$1|барак|барактар}}",
-       "createacct-benefit-body3": "акыркы {{PLURAL:$1|салым|салымдар}}",
+       "createacct-benefit-body3": "соңку {{PLURAL:$1|салым|салымдар}}",
        "badretype": "Сиз терген сырсөздөр дал келишпейт",
        "userexists": "Сиз тандаган колдонуучу ат бош эмес.\nСураныч, башка атты тандаңыз.",
        "loginerror": "Кирүү катасы",
        "loginlanguagelabel": "Тили: $1",
        "suspicious-userlogout": "Сиздин чыгуу талабыңыз сиздин браузериңиздин туура эмес аткарылышынан же прокси кеширлөөсүнөн улам аткарылган жок.",
        "pt-login": "Кирүү",
+       "pt-login-button": "Кирүү",
+       "pt-createaccount": "Катталуу",
        "pt-userlogout": "Чыгуу",
        "php-mail-error-unknown": "PHP'нин mail() функциясындагы белгисиз ката.",
        "changepassword": "Сырсөздү өзгөртүү",
        "resetpass-submit-cancel": "Жокко чыгаруу",
        "resetpass-temp-password": "Убактылуу сырсөз:",
        "resetpass-expired": "Сиздин сырсөзүңүз эскирген. Сураныч жаңы сырсөзүңүз менен кириңиз.",
-       "passwordreset": "Сырсөздү түшүрүү",
+       "passwordreset": "Сырсөздү жоюу",
        "passwordreset-text-one": "Сырсөздү алмаштыруу үчүн бул үлгүнү толтуруңуз.",
-       "passwordreset-legend": "Сырсөздү түшүрүү",
        "passwordreset-disabled": "Бул уикиде сырсөздү түшүрүү мүмкүнчүлүгү өчүрүлгөн.",
        "passwordreset-username": "Колдонуучу аты:",
        "passwordreset-domain": "Домен:",
        "nowiki_sample": "Форматталбаган текстти бул жерге киргизиңиз",
        "nowiki_tip": "Уики-форматтоого көңүл бурбоо",
        "image_tip": "Кыстарылган файл",
-       "media_tip": "Файлга шилтеме",
+       "media_tip": "Файл шилтемеси",
        "sig_tip": "Кол тамгаңыз жана убакыт мөөрү",
        "hr_tip": "Туура сызык (жыш колдонбоңуз)",
        "summary": "Жыйынтыгы:",
        "accmailtitle": "Сырсөз жөнөтүлдү.",
        "accmailtext": " [[User talk:$1|$1]] үчүн сырсөз $2 ге жөнөтүлдү.",
        "newarticle": "(Жаңы)",
-       "newarticletext": "Сиз ачыла элек баракка шилтемени бастыңыз.\nБул баракты түзүү үчүн, ылдый жактагы терезеге жаза баштаңыз (кошумча маалымат алуу үчүн [$1 жардам барагын] караңыз).\nЭгерде Сиз бул жерге жаңылыштык менен кирип калган болсоңуз, анда браузериңиздеги '''артка''' баскычын басыңыз.",
+       "newarticletext": "Сиз али түзүлө элек баракка шилтемени бастыңыз.\nБул баракты түзүү үчүн, ылдый жактагы терезеге жаза баштаңыз (кошумча маалымат алуу үчүн [$1 жардам барагын] караңыз).\nЭгерде Сиз бул жерге жаңылыштык менен кирип калган болсоңуз, анда браузериңиздеги '''артка''' баскычын басыңыз.",
        "noarticletext": "Азыр бул баракта текст жок.\nСиз [[Special:Search/{{PAGENAME}}|ушул аталыш менен баракты изде]] башка барактарда \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тийиштүү жазууларды таба аласыз],\nже '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} ошондой аталыш менен барак ача аласыз]'''</span>.",
-       "noarticletext-nopermission": "Ð\90зÑ\8bÑ\80 Ð±Ñ\83л Ð±Ð°Ñ\80акÑ\82а Ñ\82екÑ\81Ñ\82 Ð¶Ð¾Ðº.\nСиз [[Special:Search/{{PAGENAME}}|бÑ\83л Ð°Ñ\82 Ð¶Ó©Ð½Ò¯Ð½Ð´Ó© Ñ\8dÑ\81кеÑ\80Ñ\82үүлөÑ\80дү]] Ð±Ð°Ñ\88ка Ð±Ð°Ñ\80акÑ\82аÑ\80дан Ñ\82аба Ð°Ð»Ð°Ñ\81Ñ\8bз, Ð¶Ðµ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ñ\82ийиÑ\88Ñ\82Ò¯Ò¯ Ð¶Ñ\83Ñ\80налдаÑ\80дÑ\8bн Ð¶Ð°Ð·Ñ\83Ñ\83лаÑ\80Ñ\8bн Ñ\82аба Ð°Ð»Ð°Ñ\81Ñ\8bз]</span>. Ð\91Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83га Ñ\83кÑ\83кÑ\82аÑ\80Ñ\8bÒ£Ñ\8bз жок.",
+       "noarticletext-nopermission": "Ð\90зÑ\8bÑ\80 Ð±Ñ\83л Ð±Ð°Ñ\80акÑ\82а Ñ\82екÑ\81Ñ\82 Ð¶Ð¾Ðº.\nСиз [[Special:Search/{{PAGENAME}}|бÑ\83л Ð°Ñ\82 Ð¶Ó©Ð½Ò¯Ð½Ð´Ó© Ñ\8dÑ\81кеÑ\80Ñ\82үүлөÑ\80дү]] Ð±Ð°Ñ\88ка Ð±Ð°Ñ\80акÑ\82аÑ\80дан Ñ\82аба Ð°Ð»Ð°Ñ\81Ñ\8bз, Ð¶Ðµ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ñ\82ийиÑ\88Ñ\82Ò¯Ò¯ Ð¶Ñ\83Ñ\80налдаÑ\80дÑ\8bн Ð¶Ð°Ð·Ñ\83Ñ\83лаÑ\80Ñ\8bн Ñ\82аба Ð°Ð»Ð°Ñ\81Ñ\8bз]</span>. Ð\91Ñ\83л Ð±Ð°Ñ\80акÑ\82Ñ\8b Ð¶Ð°Ñ\80аÑ\82Ñ\83Ñ\83га Ñ\83кÑ\83гÑ\83Ò£Ñ\83з жок.",
        "userpage-userdoesnotexist": "\"$1\" Мындай колдонуучу катталган эмес. Сураныч, ушул баракты түзүүнү же оңдогонду каалганыңыз анык болсун",
        "updated": "(Жаңыртылды)",
        "note": "'''Эскертме:'''",
        "moveddeleted-notice": "Бул барак өчүрүлгөн.\nМаалымат үчүн төмөндө өчүрүүлөрдүн жана өзгөртүүлөрдүн тизмеси берилген.",
        "log-fulllog": "Журналды бүтүн бойдон көрүү",
        "edit-conflict": "Оңдоолор конфликти",
+       "postedit-confirmation-created": "Барак түзүлдү.",
        "postedit-confirmation-saved": "Оңдооңуз сакталды",
        "edit-already-exists": "Жаңы барак түзүү мүмкүн эмес. Мындай барак бар",
        "defaultmessagetext": "Жарыяланбасча текст",
        "post-expand-template-argument-category": "Калыптардын аттатылган жүйөлөрүн камтыган барактар",
        "parser-template-loop-warning": "Калыптарда илмек бар:[[$1]]",
        "cantcreateaccounttitle": "Эсеп жазуусун түзүү мүмкүн эмес",
-       "viewpagelogs": "Бул барактын журналдарын көрсөтүү",
+       "viewpagelogs": "Бул барактын журналдарын көрүү",
        "nohistory": "Бул барактын өзгөртүүлөр тарыхы жок",
        "currentrev": "Соңку версиясы",
        "currentrev-asof": "$1 -га соңку версиясы",
        "revisionasof": "$1 -деги абалы",
-       "revision-info": "$1 карата $2 тарабынан жасалган версия",
+       "revision-info": "$1 карата  {{GENDER:$6|$2}}$7 тарабынан жасалган версия",
        "previousrevision": "← Мурунку версиясы",
        "nextrevision": "Жаңыраак версиясы →",
        "currentrevisionlink": "Соңку версиясы",
        "revdelete-hide-comment": "Оңдоо баяндамасын жашыруу",
        "revdelete-hide-user": "Редактордун катышуучу атын/IP-дарегин жашыруу",
        "revdelete-radio-same": "(өзгөртпөө)",
-       "revdelete-radio-set": "Ð\9eоба",
-       "revdelete-radio-unset": "Ð\96ок",
+       "revdelete-radio-set": "Ð\96аÑ\88Ñ\8bÑ\80Ñ\83Ñ\83н",
+       "revdelete-radio-unset": "Ð\90Ñ\88кеÑ\80е",
        "revdelete-log": "Себеби:",
        "revdel-restore": "көрүнүшүн өзгөртүү",
        "pagehist": "Барактын тарыхы",
        "mergehistory-from": "Баштапкы барак:",
        "mergehistory-into": "Максаттык барак:",
        "mergehistory-submit": "Версияларды бириктирүү",
+       "mergehistory-no-source": "$1 барагынын булагы жок.",
        "mergehistory-invalid-source": "Баштапкы барагынын башжазуусу туура болушу керек.",
        "mergehistory-invalid-destination": "Максаттык барагынын башжазуусуу туура бар болуш керек.",
        "mergehistory-same-destination": "Баштапкы жана максаттык барактары окшош эмес болуш керек",
        "compareselectedversions": "Тандалган версияларды салыштыруу",
        "showhideselectedversions": "Тандалган версияларды көрсөтүү/жашыруу",
        "editundo": "жокко чыгаруу",
-       "searchresults": "Издөө жыйынтыктары",
-       "searchresults-title": "\"$1\" үчүн издөө жыйынтыктары",
+       "diff-empty": "(Айырма жок)",
+       "searchresults": "Издөө жыйынтыгы",
+       "searchresults-title": "\"$1\" үчүн издөө жыйынтыгы",
        "prevn": "абалкы {{PLURAL:$1|$1}}",
        "nextn": "соңку {{PLURAL:$1|$1}}",
+       "next-page": "кийинки барак",
        "prevn-title": "Абалкы $1 {{PLURAL:$1|жыйынтык}}",
        "nextn-title": "Кийинки $1 {{PLURAL:$1|жыйынтык}}",
        "shown-title": "Барактан $1 {{PLURAL:$1|жыйынтыкты}} көрсөтүү",
        "searchmenu-exists": "'''Бул Уикиде \"[[:$1]]\" деп аталган барак бар.'''",
        "searchmenu-new": "'''Бул Уикиде \"[[:$1]]\" барагын түз!'''",
        "searchprofile-articles": "Негизги барактар",
-       "searchprofile-images": "Мултимедиа",
-       "searchprofile-everything": "Баары",
+       "searchprofile-images": "Ð\9cÑ\83лÑ\8cÑ\82имедиа",
+       "searchprofile-everything": "Баардыгы",
        "searchprofile-advanced": "Кеңейтилген",
-       "searchprofile-articles-tooltip": "$1 -де издөө",
+       "searchprofile-articles-tooltip": "$1 -ден издөө",
        "searchprofile-images-tooltip": "Файлдарды издөө",
        "searchprofile-everything-tooltip": "Баардык барактардан (талкуу барактарды кошо) издөө",
-       "searchprofile-advanced-tooltip": "Ð\91елгиленген Ð°Ñ\82алÑ\8bÑ\88 Ð¼ÐµÐ¹ÐºÐ¸Ð½Ð´Ð¸ÐºÑ\82еÑ\80инде издөө",
+       "searchprofile-advanced-tooltip": "Ð\91елгиленген Ð°Ñ\82алÑ\8bÑ\88 Ð¼ÐµÐ¹ÐºÐ¸Ð½Ð´Ð¸ÐºÑ\82еÑ\80инен издөө",
        "search-result-size": "$1 ({{PLURAL:$2|1 сөз|$2 сөздөр}})",
        "search-result-category-size": "{{PLURAL:$1|1 мүчө|$1 мүчөлөр}} ({{PLURAL:$2|1 ички категория|$2 ички категориялар}}, {{PLURAL:$3|1 файл|$3 файлдар}})",
        "search-redirect": "($1 багыттама)",
        "search-section": "($1 бөлүмү)",
+       "search-category": "($1 категория)",
        "search-suggest": "Балким, издегениңиз бул: $1",
        "search-interwiki-caption": "Тектеш долбоорлор",
        "search-interwiki-default": "$1 жыйын.:",
        "search-interwiki-more": "(көбүрөөк)",
        "search-relatedarticle": "Байланыштуу",
        "searchrelated": "байланыштуу",
-       "searchall": "бааÑ\80ы",
+       "searchall": "жалпÑ\8bÑ\81ы",
        "search-nonefound": "Талапка төп маалымат табылган жок.",
        "powersearch-legend": "Кеңейтилген издөө",
        "powersearch-ns": "Аталыш мейкиндиктеринен издөө:",
        "action-userrights": "бүткүл колдонуучулардын укуктарын оңдоо",
        "action-sendemail": "электрондук каттарды жөнөтүү",
        "nchanges": "$1 {{PLURAL:$1|өзгөрүү|өзгөрүүлөр}}",
+       "enhancedrc-history": "тарыхы",
        "recentchanges": "Соңку өзгөрүүлөр",
        "recentchanges-legend": "Соңку өзгөртүүлөрдүн ырастоолору",
        "recentchanges-summary": "Уикидеги соңку өзгөрүүлөрдү ушул барактан көзөмөлдө.",
        "rcnotefrom": "'''$2''' -тан өзгөрүүлөр ылдый жакта ('''$1''' чейин көрсөтүлдү).",
        "rclistfrom": "$3 $2 күнүнөн баштап жаңы өзгөртүүлөрдү көрсөтүү",
        "rcshowhideminor": "Майда оңдоолорду $1",
+       "rcshowhideminor-show": "Көрсөтүү",
+       "rcshowhideminor-hide": "Жашыруу",
        "rcshowhidebots": "ботторду $1",
+       "rcshowhidebots-show": "Көрсөтүү",
+       "rcshowhidebots-hide": "Жашыруу",
        "rcshowhideliu": "$1 катталган колдонуучу",
+       "rcshowhideliu-hide": "Жашыруу",
        "rcshowhideanons": "$1 жашыруун колдонуучу",
+       "rcshowhideanons-show": "Көрсөтүү",
+       "rcshowhideanons-hide": "Жашыруу",
        "rcshowhidepatr": "Күзөттөө алдындагы оңдоолорду $1",
        "rcshowhidemine": "Оңдоолорумду $1",
+       "rcshowhidemine-show": "Көрсөтүү",
+       "rcshowhidemine-hide": "Жашыруу",
        "rclinks": "Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү<br />$3",
        "diff": "айырма",
        "hist": "тарыхы",
        "filehist-user": "Колдонуучу",
        "filehist-dimensions": "Өлчөмдөр",
        "filehist-filesize": "Файл өлчөмү",
-       "filehist-comment": "Ð\9aомменÑ\82аÑ\80ий",
+       "filehist-comment": "Ð\96оÑ\80Ñ\83м",
        "imagelinks": "Файлды колдонуу",
        "linkstoimage": "Бул файлга болгон {{PLURAL:$1|шилтеме|$1 шилтемелер}} :",
        "nolinkstoimage": "Бул файлга шилтеме берген барак жок.",
        "movethispage": "Бул барактын атын өзгөртүү",
        "pager-newer-n": "{{PLURAL:$1|жаңыраак 1|жаңыраак $1}}",
        "pager-older-n": "{{PLURAL:$1|эскирээк 1|эскирээк $1}}",
-       "booksources": "Китеп тууралуу маалыматтар",
+       "booksources": "Китеп булактары",
        "booksources-search-legend": "Китеп тууралуу маалыматтарды издөө",
+       "booksources-search": "Издөө",
        "specialloguserlabel": "Аткаруучу:",
        "speciallogtitlelabel": "Максаты (аталышы же колдонуучу):",
        "log": "Журналдар",
        "whatlinkshere-page": "Барак:",
        "linkshere": "'''[[:$1]]''' барагына шилтеме берген барактар:",
        "nolinkshere": "'''[[:$1]]''' барагына шилтеме берген барак жок.",
-       "isredirect": "Ð\91агыттама барак",
+       "isredirect": "багыттама барак",
        "istemplate": "бириктирүү",
        "isimage": "файл шилтемеси",
        "whatlinkshere-prev": "{{PLURAL:$1|мурунку}}",
        "whatlinkshere-hidetrans": "$1 бириктирүүлөр",
        "whatlinkshere-hidelinks": "Шилтемелерди $1",
        "whatlinkshere-hideimages": "$1 файл шилтемелери",
-       "whatlinkshere-filters": "ЧÑ\8bпкалар",
+       "whatlinkshere-filters": "ЭлекÑ\82ер",
        "block": "Колдонуучуну бөгөттөө",
        "blockip": "Колдонуучуну бөгөттөө",
        "blockip-legend": "Колдонуучуну бөгөттөө",
        "movepagebtn": "Барактын атын өзгөртүү",
        "pagemovedsub": "Барактын аты өзгөртүлдү",
        "movepage-moved-redirect": "Багыттама түзүлдү.",
-       "movelogpage": "Аталыштарды өзгөртүү тарыхы",
+       "movelogpage": "Аталыштарды өзгөртүү журналы",
        "movereason": "Себеп:",
        "revertmove": "кайтаруу",
        "delete_and_move": "Өчүрүү же атын өзгөртүү",
        "tooltip-ca-watch": "Бул баракты көзөмөл тизмеңизге кошуңуз",
        "tooltip-ca-unwatch": "Бул баракты көзөмөл тизмеңизден алып салыңыз",
        "tooltip-search": "{{SITENAME}} издөө",
-       "tooltip-search-go": "Так Ñ\83Ñ\88Ñ\83ндай Ð°Ñ\82алÑ\8bÑ\88Ñ\82агÑ\8b Ð±Ð°Ñ\80акÑ\82Ñ\8b ÐºÓ©Ñ\80Ñ\81өтүү",
-       "tooltip-search-fulltext": "УÑ\88Ñ\83л Ñ\82екÑ\81Ñ\82 Ð±Ð°Ñ\80 барактарды издөө",
+       "tooltip-search-go": "ЭгеÑ\80де Ð±Ð°Ñ\80 Ð±Ð¾Ð»Ñ\81о, Ñ\82ак Ñ\83Ñ\88Ñ\83ндай Ð°Ñ\82алÑ\8bÑ\88Ñ\82агÑ\8b Ð±Ð°Ñ\80акка өтүү",
+       "tooltip-search-fulltext": "УÑ\88Ñ\83л Ñ\82екÑ\81Ñ\82 ÐºÐ°Ñ\82Ñ\8bÑ\88кан барактарды издөө",
        "tooltip-p-logo": "Башбаракка өтүү",
        "tooltip-n-mainpage": "Башбаракка өтүү",
        "tooltip-n-mainpage-description": "Башбаракка өтүү",
        "tooltip-n-portal": "Долбоор тууралуу, эмне жасай аласыз, кайдан тапса болот",
        "tooltip-n-currentevents": "Учурдагы окуялар тууралуу кошумча маалымат табуу",
-       "tooltip-n-recentchanges": "уикидеги соңку өзгөртүүлөрдүн тизмеси",
+       "tooltip-n-recentchanges": "Уикидеги соңку өзгөртүүлөрдүн тизмеси",
        "tooltip-n-randompage": "Тушкелди баракты ачып кара",
        "tooltip-n-help": "Маалымат алуу үчүн",
-       "tooltip-t-whatlinkshere": "Ушул жерге шилтемеси бар бардык уики барактардын тизмеси",
+       "tooltip-t-whatlinkshere": "Ушул жерге шилтемеленген бардык уики барактардын тизмеси",
        "tooltip-t-recentchangeslinked": "Бул барактан шилтеме берилген барактардагы соңку өзгөрүүлөр",
-       "tooltip-feed-atom": "Бул барак үчүн Atom агымы",
+       "tooltip-feed-atom": "Бул барак үчүн Atom тасмасы",
        "tooltip-t-contributions": "Бул колдонуучунун салымдарынын тизмеси",
        "tooltip-t-emailuser": "Бул колдонуучуга кат жиберүү",
        "tooltip-t-upload": "Файлдарды жүктөө",
-       "tooltip-t-specialpages": "Ð\91аÑ\80дÑ\8bк ÐºÑ\8bзмаÑ\82Ñ\82Ñ\8bк Ð±Ð°Ñ\80акÑ\82аÑ\80дÑ\8bн тизмеги",
-       "tooltip-t-print": "Бул барактын басып чыгарууга ылайыктуу түрү",
+       "tooltip-t-specialpages": "Ð\9aÑ\8bзмаÑ\82Ñ\82Ñ\8bк Ð±Ð°Ñ\80акÑ\82аÑ\80дÑ\8bн Ð¶Ð°Ð»Ð¿Ñ\8b тизмеги",
+       "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-project": "Долбоор барагын көрүү",
        "tooltip-ca-nstab-image": "Файл барагын кароо",
        "tooltip-ca-nstab-mediawiki": "Системалык билдирүүсүн кароо",
-       "tooltip-ca-nstab-template": "Ð\9aалÑ\8bпÑ\82Ñ\8b ÐºÐ°Ñ\80оо",
+       "tooltip-ca-nstab-template": "Ð\9aалÑ\8bбÑ\8bн ÐºÓ©Ñ\80Ò¯Ò¯",
        "tooltip-ca-nstab-help": "Жардам барагын кароо",
        "tooltip-ca-nstab-category": "Категория барагын кароо",
        "tooltip-minoredit": "Муну майда оңдоо деп белгилөө",
        "pageinfo-protect-cascading-yes": "Ооба",
        "patrol-log-page": "Күзөттөө журналы",
        "previousdiff": "← Эскирээк оңдоо",
-       "nextdiff": "Жаңыраак оңдоо →",
+       "nextdiff": "Жаңы оңдоо →",
        "file-info-size": "$1 × $2 пиксель, файлдын көлөмү: $3, MIME түрү: $4",
        "file-nohires": "Мындан чоңураак чечим жок.",
        "svg-long-desc": "SVG файл, шарттуу түрдө $1 × $2 пиксел, файлдын көлөмү: $3",
        "svg-long-error": "туура эмес SVG-файл: $1",
        "show-big-image": "Толук чечими",
+       "show-big-image-size": "$1 × $2 пиксел",
        "newimages": "Жаңы файлдардын галереясы",
        "newimages-legend": "Чыпка",
        "newimages-label": "Файл аты (же анын жартысы):",
        "exif-iimcategory-soi": "Социалдык маселелер",
        "exif-iimcategory-spo": "Спорт",
        "exif-iimcategory-wea": "Аба-ырайы",
-       "namespacesall": "бааÑ\80ы",
-       "monthsall": "бааÑ\80ы",
+       "namespacesall": "жалпÑ\8bÑ\81ы",
+       "monthsall": "жалпÑ\8bÑ\81ы",
        "confirmemail": "Электрондук даректи аныктоо",
        "confirmemail_loggedin": "Электрондук дарегиңиз аныкталды.",
        "recreate": "Кайрадан түзүү",
        "watchlisttools-view": "Тийиштүү өзгөрүүлөрдү кароо",
        "watchlisttools-edit": "Көзөмөл тизмесин кароо жана оңдоо",
        "watchlisttools-raw": "Жетиле элек көзөмөл тизмени оңдоо",
+       "signature": "[[{{ns:колдонуучу}}:$1|$2]] ([[{{ns:колдонуучу_баарлашуу}}:$1|баарлашуу]])",
        "duplicate-defaultsort": "'''Эскертүү:''' \"$2\" белгиленген ылгоочу ачкыч \"$1\" мурунку белгиленген ылгоочу ачкычты жокко чыгарат.",
        "version": "Версия",
        "version-extensions": "Орнотулган кеңейтүүлөр",
        "htmlform-submit": "Жөнөтүү",
        "htmlform-reset": "Өзгөртүүлөрдү жокко чыгаруу",
        "htmlform-selectorother-other": "Башка",
-       "logentry-delete-delete": "$1 колдонуучу $3 барагын өчүрдү",
+       "logentry-delete-delete": "$1 $3 барагын {{GENDER:$2|өчүрдү}}",
        "revdelete-content-hid": "мазмун жашырылган",
        "revdelete-summary-hid": "оңдоонун баяндамасы жашырылган",
        "revdelete-uname-hid": "катышуучу аты жашырылган",
        "logentry-newusers-create": "$1 эсеп жазуусу түзүлдү",
        "logentry-newusers-create2": "$1 эсеп жазуусун түздү",
        "logentry-newusers-autocreate": "Автоматтуу түрдө $1 эсеп жазуусу түзүлдү",
+       "logentry-upload-upload": "$1 $3 жактан {{GENDER:$2|жүктөлдү}}",
        "rightsnone": "(жок)",
        "feedback-adding": "Баракка пикирди кошуу…",
        "feedback-bugnew": "Мен текшердим. Жаңы ката жөнүндө маалымдоо",
index a5e8183..12a3699 100644 (file)
@@ -60,7 +60,7 @@
        "editfont-monospace": "Tipografía que cuvre lugar fikso",
        "editfont-sansserif": "Tipografía sans-serif",
        "editfont-serif": "Tipografía serif",
-       "sunday": "Alḥad",
+       "sunday": "Alhadh",
        "monday": "Lunes",
        "tuesday": "Martes",
        "wednesday": "Miércoles",
@@ -79,7 +79,7 @@
        "march": "Março",
        "april": "Abril",
        "may_long": "Mayo",
-       "june": "Juño",
+       "june": "Junio",
        "july": "Julio",
        "august": "Agosto",
        "september": "Setiembre",
        "emailuser": "Embia korreo elektroniko a este usuario",
        "emailuser-title-target": "Embiar un korreo elektroniko a {{Gender:$1|este usuario|esta usuaria}}",
        "emailuser-title-notarget": "Embiar un korreo elektroniko a un usuario",
-       "emailpage": "Embiar un korreo elektroniko a un usuario",
        "defemailsubject": "Korreo elektroniko del usuario \"$1\" de {{SITENAME}}",
        "emailusername": "Nombre de usuario:",
        "emailfrom": "De:",
        "watchlisttools-view": "Ver los trocamientos",
        "watchlisttools-edit": "Ver i trocar tu lista de escogidas",
        "watchlisttools-raw": "Troca tu lista de escogidas en crudo",
-       "hebrew-calendar-m1": "Tishre",
-       "hebrew-calendar-m2": "Ḥeshvan",
+       "hebrew-calendar-m1": "Tishri",
+       "hebrew-calendar-m2": "Ḥeshván",
+       "hebrew-calendar-m4": "Teveth",
+       "hebrew-calendar-m6": "Adhar",
+       "hebrew-calendar-m6a": "Adhar I",
+       "hebrew-calendar-m6b": "Adhar II",
+       "hebrew-calendar-m7": "Nissán",
+       "hebrew-calendar-m8": "Iyyar",
+       "hebrew-calendar-m9": "Siván",
+       "hebrew-calendar-m10": "Tammuz",
        "hebrew-calendar-m1-gen": "Tishre",
        "hebrew-calendar-m2-gen": "Ḥeshvan",
        "duplicate-defaultsort": "'''Aviso:''' la klave primaria para ordenamiento \"$2\" anula la primera \"$1\"",
index dd301a3..a2ac898 100644 (file)
        "actionthrottled": "Dës Aktioun gouf gebremst",
        "actionthrottledtext": "Fir géint de Spam virzegoen, ass dës Aktioun sou programméiert datt Dir se an enger kuerzer Zäit nëmme limitéiert dacks maache kënnt. Dir hutt dës Limite iwwerschratt. Versicht et w.e.g. an e puer Minutten nach eng Kéier.",
        "protectedpagetext": "Dës Säit ass fir Ännerungen an aner Aktioune gespaart.",
-       "viewsourcetext": "Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:",
-       "viewyourtext": "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
+       "viewsourcetext": "Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren.",
+       "viewyourtext": "Dir kënnt de Quelltext vun <strong>Ären Ännerungen</strong> op dëser Säit kucken a kopéieren.",
        "protectedinterface": "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.\n\nFir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
        "editinginterface": "<strong>Opgepasst:</strong> Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn.",
        "translateinterface": "Fir Iwwersetzunge fir all Wikien z'änneren oder dobäizesetze benotzt w.e.g.  [//translatewiki.net/ translatewiki.net], de Projet fir d'Lokalisatioun vu MediaWiki.",
        "readonlywarning": "'''OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte gespaart, dofir kënnt Dir Är Ännerungen den Ament net ofspäicheren.'''\nDir kënnt den Text kopéieren an an een Textfichier drasetzen an deen ofspäicheren fir méi spéit.\n\nDen Administrateur den d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
        "protectedpagewarning": "'''OPGEPASST: Dës Säit gouf gespaart a kann nëmme vun engem Administrateur geännert ginn.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "semiprotectedpagewarning": "'''Bemierkung:''' Dës Säit gouf sou gespaart, datt nëmme ugemellt Benotzer s'ännere kënnen. Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
-       "cascadeprotectedwarning": "'''Opgepasst:''' Dës Säit gouf gespaart a kann nëmme vu Benotzer mat Administreursrechter geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
+       "cascadeprotectedwarning": "<strong>Opgepasst:</strong> Dës Säit gouf gespaart a kann nëmme vu Benotzer mat Administrateursrechter geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
        "titleprotectedwarning": "'''OPGEPASST: Dës Säit gouf gespaart sou datt [[Special:ListGroupRights|spezifesch Rechter]] gebraucht gi fir se uleeën ze kënnen.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "templatesused": "{{PLURAL:$1|Schabloun|Schablounen}} déi op dëser Säit am Gebrauch sinn:",
        "templatesusedpreview": "{{PLURAL:$1|Schabloun|Schablounen}} déi an dëser nach net gespäicherter Versioun benotzt {{PLURAL:$1|gëtt|ginn}}:",
        "search-category": "(Kategorie $1)",
        "search-file-match": "(Inhalt vum Fichier passt)",
        "search-suggest": "Mengt Dir: $1",
+       "search-rewritten": "D'Resultater fir $1 gi gewisen. Amplaz no $2 sichen.",
        "search-interwiki-caption": "Schwësterprojeten",
        "search-interwiki-default": "Resultater vu(n) $1:",
        "search-interwiki-more": "(méi)",
        "rows": "Zeilen",
        "columns": "Kolonnen",
        "searchresultshead": "Sichen",
-       "stub-threshold": "Maximum (a Byte) bei deem e Link nach ëmmer am <a href=\"#\" class=\"stub\">Skizze-Format</a> gewise gëtt:",
+       "stub-threshold": "Maximum bei deem e Link nach ëmmer am Skizze-Format ($1) gewise gëtt:",
+       "stub-threshold-sample-link": "Beispill",
        "stub-threshold-disabled": "Desaktivéiert",
        "recentchangesdays": "Deeg déi an de Rezenten Ännerungen ugewise ginn:",
        "recentchangesdays-max": "(Maximal $1 {{PLURAL:$1|Dag|Deeg}})",
        "newpageletter": "N",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 Benotzer {{PLURAL:$1|iwwerwaacht|iwwerwaachen}}]",
-       "rc_categories": "Nëmme Säiten aus de Kategorien (getrennt mat \"|\"):",
-       "rc_categories_any": "All",
+       "rc_categories": "Limitéieren op d'Kategorie (getrennt mat \"|\"):",
+       "rc_categories_any": "Aus iergendenger vun den erausgesichten",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} no der Ännerung",
        "newsectionsummary": "Neien Abschnitt /* $1 */",
        "upload-too-many-redirects": "Et waren zevill Viruleedungen fir d'URL do",
        "upload-http-error": "Et ass en HTTP-Feeler geschitt: $1",
        "upload-copy-upload-invalid-domain": "Vun dësem Domain ass d'Eropluede vu Kopien net méiglech.",
+       "upload-dialog-title": "Fichier eroplueden",
+       "upload-dialog-error": "Et ass e Feeler geschitt",
+       "upload-dialog-warning": "Eng Warnung gouf ausgeschwat",
+       "upload-dialog-button-cancel": "Ofbriechen",
+       "upload-dialog-button-done": "Fäerdeg",
+       "upload-dialog-button-save": "Späicheren",
+       "upload-dialog-button-upload": "Eroplueden",
+       "upload-dialog-label-select-file": "Fichier eraussichen",
+       "upload-dialog-label-infoform-title": "Detailer",
+       "upload-dialog-label-infoform-name": "Numm",
+       "upload-dialog-label-infoform-description": "Beschreiwung",
+       "upload-dialog-label-usage-title": "Benotzung",
+       "upload-dialog-label-usage-filename": "Numm vum Fichier",
        "backend-fail-stream": "De Fichier $1 konnt net iwwerdroe ginn.",
        "backend-fail-backup": "De Fichier $1 konnt net geséchert ginn.",
        "backend-fail-notexists": "De Fichier $1 gëtt et net.",
        "booksources-text": "Hei ass eng Lëscht mat Linken op Internetsäiten, déi nei a gebraucht Bicher verkafen. Do kann et sinn datt Dir méi Informatiounen iwwer déi Bicher fannt déi Dir sicht.",
        "booksources-invalid-isbn": "D'ISBN-Nummer déi Dir uginn hutt schéngt net gëlteg ze sinn. Kuckt w.e.g. no ob beim Kopéiere kee Feeler geschitt ass.",
        "specialloguserlabel": "Aktive Benotzer:",
-       "speciallogtitlelabel": "Zil (Titel oder Benotzer):",
+       "speciallogtitlelabel": "Zil (Titel oder {{ns:user}}:Benotzernumm fir e Benotzer):",
        "log": "Logbicher",
        "all-logs-page": "All ëffentlech Logbicher",
        "alllogstext": "Dëst ass eng kombinéiert Lëscht vu Logbicher op {{SITENAME}}.\nDir kënnt d'Siche limitéieren wann Dir e Log-Typ, e Benotzernumm (case-senisitive) oder déi gefrote Säit (och case-senisitive) agitt.",
        "linksearch-pat": "Sich-Critère:",
        "linksearch-ns": "Nummraum:",
        "linksearch-ok": "Sichen",
-       "linksearch-text": "\"Wildcards\" wéi zum Beispill \"*.example.com\" kënne benotzt ginn.\nEt muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. \".org\".<br />\nËnnerstëtzte {{PLURAL:$2|Protokoll|Protekoller}}: <code>$1</code> (http:// gëtt benotzt wann näischt spezifizéiert gëtt).",
+       "linksearch-text": "\"Wildcards\" wéi zum Beispill \"*.example.com\" kënne benotzt ginn.\nEt muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. \".org\".<br />\nËnnerstëtzte {{PLURAL:$2|Protokoll|Protekoller}}: $1 (http:// gëtt benotzt wann näischt spezifizéiert gëtt).",
        "linksearch-line": "$1 verlinkt vun $2",
        "linksearch-error": "Wildcards (*,?) kënnen nëmmen am Ufank vum Host-Numm benotzt ginn.",
        "listusersfrom": "D'Benotzer weisen, ugefaange bei:",
        "emailuser": "Dësem Benotzer eng E-Mail schécken",
        "emailuser-title-target": "{{GENDER:$1|Dëser Benotzerin|Dësem Benotzer}} eng Mail schécken",
        "emailuser-title-notarget": "Dem Benotzer eng E-Mail schécken",
-       "emailpage": "Dem Benotzer eng E-Mail schécken",
        "emailpagetext": "Dir kënnt mat dësem Formulaire {{GENDER:$1|dësem Benotzer}} en E-Mail-Message schécken.\nD'E-Mail-Adress, déi Dir an [[Special:Preferences|Ären Astellungen]] aginn hutt, steet an der \"From\" Adress vun der Mail, sou datt den Destinataire Iech direkt äntwerte kann.",
        "defemailsubject": "{{SITENAME}} E-Mail vum Benotzer \"$1\"",
        "usermaildisabled": "Benotzer E-Mail ausgeschalt",
        "emailccsubject": "Kopie vun denger Noriicht un $1: $2",
        "emailsent": "E-Mail geschéckt",
        "emailsenttext": "Är E-Mail gouf fortgeschéckt.",
-       "emailuserfooter": "Dës E-Mail gouf vum $1 dem $2 geschéckt dobäi gouf d'Funktioun \"{{int:emailpage}}\" op {{SITENAME}} benotzt.",
+       "emailuserfooter": "Dës E-Mail gouf vum $1 dem $2 geschéckt dobäi gouf d'Funktioun \"{{int:emailuser}}\" op {{SITENAME}} benotzt.",
        "usermessage-summary": "Benoriichtegung hannerloossen.",
        "usermessage-editor": "Benoriichtegungs-System",
        "watchlist": "Iwwerwaachungslëscht",
        "watchlistanontext": "Loggt Iech a fir Elementer op Ärer Iwwerwaachungslëscht ze gesinn oder z'änneren.",
        "watchnologin": "Net ageloggt",
        "addwatch": "Op d'Iwwerwaachungslëscht derbäisetzen",
-       "addedwatchtext": "D'Säit \"[[:$1]]\" gouf op är [[Special:Watchlist|Iwwerwaachungslëscht]] gesat.\nAll weider Ännerungen op dëser Säit an der associéierter Diskussiounssäit ginn hei opgelëscht.",
+       "addedwatchtext": "\"[[:$1]]\" a seng Diskussiounssäit goufen op Är [[Special:Watchlist|Iwwerwaachungslëscht]] gesat.",
        "addedwatchtext-short": "D'Säit \"$1\" gouf op Är Iwwerwaachungslëscht derbäigesat.",
        "removewatch": "Vun der Iwwerwaachungslëscht erofhuelen",
-       "removedwatchtext": "D'Säit \"[[:$1]]\" gouf vun [[Special:Watchlist|ärer Iwwerwaachungslëscht]] erofgeholl.",
+       "removedwatchtext": "\"[[:$1]]\" a seng Diskussiounssäit goufe vun Ärer [[Special:Watchlist|Iwwerwaachungslëscht]] erofgeholl.",
        "removedwatchtext-short": "D'Säit \"$1\" gouf vun Ärer Iwwerwaachungslëscht erofgeholl.",
        "watch": "Iwwerwaachen",
        "watchthispage": "Dës Säit iwwerwaachen",
        "rollback-success": "D'Ännerunge vum $1 goufen zréckgesat op déi lescht Versioun vum $2.",
        "sessionfailure-title": "Setzungsfeeler",
        "sessionfailure": "Et schéngt e Problem mat Ärer Loginseance ze ginn;\nDës Aktioun gouf aus Sécherheetsgrënn ofgebrach, fir ze verhënneren datt Är Seance piratéiert ka ginn.\nKlickt w.e.g. op \"Zréck\" a luet déi Säit vun där Dir komm sidd nei, a versicht et dann nach eng Kéier.",
+       "changecontentmodel": "De Modell vum Inhalt vun enger Säit änneren",
        "changecontentmodel-legend": "Modell vun enger Säit mat Inhalt änneren",
        "changecontentmodel-title-label": "Titel vun der Säit",
        "changecontentmodel-model-label": "Neie Modell vun enger Säit mat Inhalt",
        "changecontentmodel-reason-label": "Grond:",
+       "changecontentmodel-success-title": "De Modell vum Inhalt gouf geännert",
        "changecontentmodel-success-text": "Den Typ vum Inhalt vu(n) [[:$1]] gouf geännert.",
-       "changecontentmodel-title-cantexist": "Et ass net méiglech enger Säit den Numm $1 ze ginn.",
+       "logentry-contentmodel-change-revertlink": "zrécksetzen",
+       "logentry-contentmodel-change-revert": "zrécksetzen",
        "protectlogpage": "Protektiounslogbuch",
        "protectlogtext": "Dëst ass d'Lëscht vun de Säitespären.\nKuckt d'[[Special:ProtectedPages|Lëscht vun de gespaarte Säite]] fir eng Lëscht vun den aktuelle Säitespären.",
        "protectedarticle": "huet \"[[$1]]\" gespaart",
        "undeletepagetext": "Dës {{PLURAL:$1|Säit gouf |Säite goufe}} geläscht mä sinn nach ëmmer am Archiv a kënne vun Administrateure restauréiert ginn. D'Archiv gëtt periodesch eidel gemaach.",
        "undelete-fieldset-title": "Versioune restauréieren",
        "undeleteextrahelp": "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casë mat engem Krop a klickt op '''''{{int:undeletebtn}}'''''.\nFir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|1 Versioun|$1 Versiounen}} archivéiert",
+       "undeleterevisions": "{{PLURAL:$1|1 Versioun|$1 Versioune}} geläscht",
        "undeletehistory": "Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.\nWann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.",
        "undeleterevdel": "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.\nA sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.",
        "undeletehistorynoadmin": "Dës Säit gouf geläscht. De Grond fir d'Läsche gesitt der ënnen, zesumme mat der Iwwersiicht vun den eenzele Versioune vun der Säit an hiren Auteuren. Déi verschidden Textversioune kënnen awer just vun Administrateure gekuckt a restauréiert ginn.",
        "ip_range_invalid": "Ongëltegen IP Block.",
        "ip_range_toolarge": "Späre vu Beräicher déi méi grouss wéi /$1 si sinn net erlaabt.",
        "proxyblocker": "Proxy blocker",
-       "proxyblockreason": "Ã\84r IP-Adress gouf gespaart, well si een oppene Proxy ass. Kontaktéiert w.e.g. Ã¤ren Internet-Provider oder Ã¤rs Systemadministrateuren und informéiert si iiwwer dëses méigleche Sécherheetsprobleem.",
+       "proxyblockreason": "Ã\84r IP-Adress gouf gespaart, well si een oppene Proxy ass. Kontaktéiert w.e.g. Ã¤ren Internet-Provider oder Ã\84r Systemadministrateuren an informéiert si iwwer dëse méigleche Sécherheetsproblem.",
        "sorbsreason": "Är IP Adress steet als oppene Proxy an der schwaarzer Lëscht (DNSBL) déi vu {{SITENAME}} benotzt gëtt.",
        "sorbs_create_account_reason": "Är IP-Adress steet als oppene Proxy an der schwaarzer Lëscht déi op {{SITENAME}} benotzt gëtt. DIr kënnt keen neie Benotzerkont opmaachen.",
        "xffblockreason": "Eng IP-Adress am X-Forwarded-For-Header gouf gespaart, entweder Är oder déi vum Proxyserver deen Dir benotzt. De Grond vun der Spär war: $1",
        "tooltip-ca-nstab-main": "Contenu vun der Säit weisen",
        "tooltip-ca-nstab-user": "Benotzersäit weisen",
        "tooltip-ca-nstab-media": "Mediesäit weisen",
-       "tooltip-ca-nstab-special": "Dëst ass eng Spezialsäit. Si kann net geännert ginn.",
+       "tooltip-ca-nstab-special": "Dëst ass eng Spezialsäit a si kann net geännert ginn",
        "tooltip-ca-nstab-project": "Portalsäit weisen",
        "tooltip-ca-nstab-image": "Billersäit weisen",
        "tooltip-ca-nstab-mediawiki": "Systemmessage weisen",
        "spam_reverting": "Déi lescht Versioun ouni Linken op $1 restauréieren.",
        "spam_blanking": "An alle Versioune ware Linken op $1, et ass elo alles gebotzt.",
        "spam_deleting": "All Versioune mat Linken op $1 gi geläscht",
-       "simpleantispam-label": "Anti-Spam Kontroll.\nFëllt dëst '''NET''' aus!",
+       "simpleantispam-label": "Anti-Spam Kontroll.\nFëllt dëst <strong>NET</strong> aus!",
        "pageinfo-title": "Informatioun iwwer \"$1\"",
        "pageinfo-not-current": "Pardon, et ass onméiglech dës Informatioun fir al Versiounen ze weisen.",
        "pageinfo-header-basic": "Basisinformatiounen",
        "tags-create-reason": "Grond:",
        "tags-create-submit": "Uleeën",
        "tags-create-no-name": "Dir musst den Numm vun enger Markéierung (tag) uginn.",
+       "tags-create-invalid-chars": "An den Nimm vun de Markéierungen däerfe keng Kommaen (<code>,</code>) oder schif Strécher (<code>/</code>) sinn.",
        "tags-create-already-exists": "D'Markéierung (tag) ''$1'' gëtt et schonn.",
        "tags-create-warnings-above": "Dës {{PLURAL:$2|Warnung ass|Warnunge si}} beim Versuch d'Markéierung (tag) \"$1\" unzeleeën.",
        "tags-delete-title": "Markéierung (tag) läSchen",
        "htmlform-cloner-create": "Méi derbäisetzen",
        "htmlform-cloner-delete": "Ewechhuelen",
        "htmlform-cloner-required": "Mindestens ee Wäert ass obligatoresch.",
+       "htmlform-title-badnamespace": "[[:$1]] ass net am Nummraum \"{{ns:$2}}\".",
+       "htmlform-title-not-exists": "[[:$1]] gëtt et net.",
+       "htmlform-user-not-exists": "<strong>$1</strong> gëtt et net.",
+       "htmlform-user-not-valid": "<strong>$1</strong> ass kee valabele Benotzernumm.",
        "sqlite-has-fts": "$1 ënnerstëtzt d'Volltextsich",
        "sqlite-no-fts": "$1 ënnerstëtzt d'Volltextsich net",
        "logentry-delete-delete": "$1 {{GENDER:$2|huet}} d'Säit $3 geläscht",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-minus": "Minus-Zeechen",
+       "mw-widgets-dateinput-no-date": "Keen Datum erausgesicht",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Säit gëtt et nach net",
        "mw-widgets-titleinput-description-redirect": "viruleeden op $1"
 }
index 8372a30..896496b 100644 (file)
        "resetpass-wrong-oldpass": "'t Hujig of tiedelik wachwaord is ongeljig.\nMeugelik höbs doe dien wachwaord al gewiezig of 'n nuuj tiedelik wachwaord aangevraog.",
        "resetpass-temp-password": "Tiedelik wachwaord:",
        "passwordreset": "Wachwaord obbenuuts insjtèlle",
-       "passwordreset-legend": "Wachwaord obbenuuts insjtèlle",
        "passwordreset-disabled": "'t Is hie neet meugelik óm die wachwaord óbbenuits in te sjtelle.",
        "passwordreset-username": "Gebroekersnaam:",
        "passwordreset-domain": "Domein:",
        "nlinks": "$1 {{PLURAL:$1|verwiezing|verwiezinge}}",
        "nmembers": "$1 {{PLURAL:$1|lid|lede}}",
        "nrevisions": "$1 {{PLURAL:$1|herzening|herzeninge}}",
-       "nviews": "{{PLURAL:$1|eine kieër|$1 kieër}} bekeke",
        "nimagelinks": "Gebroek op $1 {{PLURAL:$1|pagina|pagina's}}",
        "ntransclusions": "Gebroek op $1 {{PLURAL:$1|pagina|pagina's}}",
        "specialpage-empty": "Deze pagina is laeg.",
        "linksearch-pat": "Zeukpatroon:",
        "linksearch-ns": "Naamruumde:",
        "linksearch-ok": "Zeuk",
-       "linksearch-text": "Wildcards wie \"*.wikipedia.org\" of \"*.org\" zeen toegestaon.\nHaet mèndestes e toepleveldomein, wie beveurbeildj \"*.org\".<br />\nÓngerstäönendje protocolle: <code>$1</code> (veug dees neet tou in dien zeukópdrach).",
+       "linksearch-text": "Wildcards wie \"*.wikipedia.org\" of \"*.org\" zeen toegestaon.\nHaet mèndestes e toepleveldomein, wie beveurbeildj \"*.org\".<br />\nÓngerstäönendje protocolle: $1 (veug dees neet tou in dien zeukópdrach).",
        "linksearch-line": "$1 gelink vanaaf $2",
        "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
        "listusersfrom": "Tuin gebroekers vanaaf:",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Cambodzjaans"
+       "special-characters-group-khmer": "Cambodzjaans",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 339c21d..90ccf3f 100644 (file)
        "userloginnocreate": "ڤامین ئوٙمائن",
        "logout": "د ساموٙنە دئرئوٙمائن",
        "userlogout": "د ساموٙنە دئرئوٙمائن",
-       "notloggedin": "Ù\86بÙ\88Ù\99Û\95 Ø¨Û\8cاÛ\8cیت ڤامین",
+       "notloggedin": "Ù\86أبÙ\88Ù\99Ø£ Ø¨Û\8cائیت ڤامین",
        "userlogin-noaccount": "یئ گئل حئساڤ ناریت؟",
        "userlogin-joinproject": "ڤأصل بوٙییت {{SITENAME}}",
        "nologin": "یئ گئل حئساڤ کاریاری ناريت؟$1",
        "userexists": "نوم کاریاری دە بییە ئیسئنی ڤئ کار گئرئتە بییە.\nلوطف بأکیت یئ گئل نوم هأنی نە ڤئرداریت.",
        "loginerror": "خأطا ڤامین ئوٙمائن",
        "createacct-error": "خأطا راس کئردئن حئساڤ",
-       "createaccounterror": "Ù\86بÙ\88ئÙ\87 Ø­Ø³Ø§Ù\88 Ø±Ø§Ø³ Ø¨Ù\83Ù\8aد:$1",
-       "nocookiesnew": "حساÙ\88 Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ø¨Û\8cØ\8cاÙ\85ا Ø´Ù\85ا Ù\88اÙ\85ئÙ\86 Ù\86Û\8cاÙ\85اÛ\8cئتÙ\87.{{Ù\86Ù\88Ù\85 Ù\85اÙ\84Ú¯Ù\87}} Ø¯ Ú©Ù\88Ú©Û\8cا Ø³Û\8c Ø§Ù\88Ù\85ائÙ\86 Ø¯ Ø³Û\8cستÙ\85 Ú©Ø§Ø±Û\8cارÛ\8cا Ù\88Ù\87 Ú©Ø§Ø± Ù\85Û\8cئرÙ\87 .Ú©Ù\88Ú©Û\8cا Ø´Ù\85ا Ø¯ Ú©Ø§Ø± Ø§Ù\81تائÙ\87\84Ø·Ù\81Ù\86 Ù\88ا Ú©Ø§Ø±Ø´Ù\88 Ø¨Ù\88Ù\86Û\8cتØ\8c Ø§Ù\88سÙ\87 Ù\88ا Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c ØªØ§Ø²Ù\87 Ù\88 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\87Ù\86Û\8c Ø¨Û\8cاÛ\8cت Ù\88ا Ù\85ئن.",
-       "nocookieslogin": "{{نوم مالگه}} د کوکیا سی وامئن اومائن کاریاریا وه کار میئره. کوکیا شما د کار افتائه.\nلطف بکید د کارشو بونیت و دوواره تلاش بکید.",
-       "nocookiesfornew": "حساÙ\88 Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ù\86بÛ\8cÙ\87Ø\8c Ø³Û\8c Û\8cÙ\87 Ø§Û\8cÙ\85ا Ù\86تÙ\88Ù\86Û\8cÙ\85 Ø³Ø±Ú\86Ø´Ù\85Ù\87 Ù\88Ù\86Ù\87 Ù\85ئکÙ\85 Ø¨Ú©Û\8cÙ\85.\nÙ\85Ø·Ù\85ئÙ\86 Ø¨Ù\88ئÛ\8cت Ú©Ù\87 Ú©Ù\88Ú©Û\8cا Ú©Ù\86شتگر Ø¨Û\8cÙ\86Ù\87Ø\8c Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø¯ Ù\86Ù\88 Ø³Ù\88ار Ø¨Ú©Û\8cد Ù\88 Ø¯ Ù\86Ù\88 ØªÙ\84اش Ø¨Ú©Û\8cد.",
+       "createaccounterror": "Ù\86أبÙ\88Ù\99Û\95 Ø­Ø¦Ø³Ø§Ú¤ Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت:$1",
+       "nocookiesnew": "حئساڤ Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³Øª Ø¨Û\8cØ\8c Ú¤Ø£Ù\84Û\8c Ø´Ù\88Ù\85ا Ù\86Û\8cÙ\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86.کارÛ\8cارÛ\8c Ø±Ø§Ø³ Ø¨Û\8cØ\8cاÙ\85ا Ø´Ù\85ا Ù\88اÙ\85ئÙ\86 Ù\86Û\8cاÙ\85اÛ\8cئتÙ\87.{{SITENAME}} Ú©Ù\88Ù\99Ú©Û\8cا Ù\86Û\95 Ø³Û\8c Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ø¯ Ø³Ø§Ù\85Ù\88Ù\99Ù\86Û\95 Ú©Ø§Ø±Û\8cارÛ\8cاڤئ Ú©Ø§Ø± Ù\85ئÛ\8cرÛ\95.\nÚ©Ù\88Ù\99Ú©Û\8cا Ø´Ù\88Ù\85ا Ù\86اکÙ\88Ù\99Ù\86ئشتگأر Ø¨Û\8cÙ\86Û\95.\nÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ú¤Ø¦Ù\86Ù\88Ù\99Ù\86Û\95 Ú©Ù\88Ù\86ئشتگأر Ø¨Ø£Ú©Û\8cتØ\8c Ø¦Ù\88Ù\99سئ Ú¤Ø§ Û\8cئ Ú¯Ø¦Ù\84 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ù\88 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\87Ø£Ù\86Û\8c Ø¨Û\8cاÛ\8cÛ\8cت Ú¤Ø§Ù\85Û\8cن.",
+       "nocookieslogin": "{{SITENAME}} کوٙکیا نە سی ئوٙمائن د ساموٙنە کاریاریاڤئ کار مئیرە.\nکوٙکیا شوما ناکوٙنئشتگأر بینە.\nلوطف بأکیت ڤئنوٙنە کونئشتگأر بأکیت و د نۊ تئلاش بأکیت.",
+       "nocookiesfornew": "حئساڤ Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ù\86أبÛ\8cÛ\95Ø\8c Ø³Û\8c Û\8cÛ\95 Ù\86Û\95 Ú©Ø¦ Ø¦Û\8cÙ\85ا Ù\86ئÙ\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cÙ\85 Ø³Ø£Ø±Ú\86ئشÙ\85Û\95 Ú¤Ø¦Ù\86Û\95 Ù¾Ù\88شت Ø±Ø§Ø³ Ú©Ø§Ø±Û\8c Ø¨Ø£Ú©Û\8cÙ\85.\nÙ\85Ù\88Ø·Ù\85أئÙ\86 Ø¨Ù\88Ù\99Û\8cÛ\8cت Ú©Ø¦ Ú©Ù\88Ù\99Ú©Û\8cا Ú©Ù\88Ù\86ئشتگأر Ø¨Û\8cÙ\86Û\95Ø\8c Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø¯ Ù\86Ù\88Ù\99 Ø³Ù\88Ù\99ڤار Ø¨Ø£Ú©Û\8cت Ù\88 Ù\87Ø£Ù\86Û\8c ØªØ¦Ù\84اش Ø¨Ø£Ú©Û\8cت.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "noname": "Ø´Ù\85ا Û\8cÙ\87 Ú¯Ù\84 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø®Ù\88 Ù\86ارÛ\8cت",
-       "loginsuccesstitle": "اÙ\88Ù\85ائÙ\86 Ø¯ Ø³Ø§Ù\85Ù\88Ù\86Ù\87 Ù\85Ù\88Ù\81Ù\82 بی",
-       "loginsuccess": "Ø´Ù\85ا Ø§Û\8cسÙ\87 Ù\88ارد Ø¨Û\8cتÙ\87 {{SITENAME}} د چی\"$1\".'",
-       "nosuchuser": "چنی کاریاری و نوم  \"$1\" نئیش.\nنوم کاریاری وه حرفیا حساس هئ.\nروشت نیسنن تونه وارسی بکید،یا [[ویجه:وامین اومائن کاریار/ثوت نام کردن|یه گل حساو تازه راس بکید]].",
-       "nosuchusershort": "چنو کاریاری وا ای نوم $1 نی ئیش.\nنیسنن تونه دوواره نئری بکیتو",
-       "nouserspecified": "Ø´Ù\85ا Ø¨Ø§Û\8cد Û\8cÙ\87 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c ØªÛ\8cارÛ\8c Ø¨Ú©Û\8cت",
-       "login-userblocked": "کاریار قلف بیه.وامین اومائن اجازه نی ئن",
-       "wrongpassword": "رازینه گواردن غلط وارد بیه.\nهنی تلاش بکید",
-       "wrongpasswordempty": "رازینه گواردنی که دئیت حالیه.د نؤ تلاش بکیت",
-       "passwordtooshort": "رازینه گواردن با حداقل  {{PLURAL:$1|1 character|$1 characters}}          با",
-       "passwordtoolong": "رازینه گواردن نواس بیشتر د {{PLURAL:$1|1 character|$1 characters}} با.",
-       "password-name-match": "رازینه گواردنتو با د نوم کاریاری فرخ داشتوه",
-       "password-login-forbidden": "وه کار گرتن ای پاسوردو نوم کاریاری قدقن بیه.",
-       "mailmypassword": "د Ù\86Û\88 Ù\88ارد Ù\83ردÙ\86 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردن",
-       "passwordremindertitle": "رازینه گواردن موقت تازه سی {{SITENAME}}",
-       "passwordremindertext": "یه نفر(شات خوتو،د تیرنشون آی پی $1) یه گل رازینه گواردن هنی سی {{نوم دیارگه}}($4) حاسته.یه گل رازینه گواردن موقتی سی کاریاری\"$2\" دروس بیه و د \"$3\" جاگر بیه. ار قصدتو یه بیه،شما واس ایسه روئیت وامین و یه گل رازینه گواردن هنی انتخاو بکید.\nرازینه گورادن موقتی د  {{PLURAL:$5|یه رو|$5 رو}}  تموم بوئه.\n\nار یه نفر هنی یه حاست داشتوئه،یا ار رازینه گورادن تونه د ویرتو اوما، و ار نحاستیت ونه آلشت بکیت، شما شایت د ای پیغوم تیه پوش بکیت و بحایت د وه کار بسن رازینه گواردن دماترتو دماداری بکیت.",
-       "noemail": "Ù\87Û\8cÚ\86 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø§Û\8c Ø³Û\8c Ú©Ø§Ø±Û\8cار $1 Ø¶Ù\81Ø· Ù\86بÛ\8cÙ\87.",
-       "noemailcreate": "Ø´Ù\85ا Ø¨Ø§Û\8cد Û\8cÙ\87 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø®Ù\88 Ù\81راÙ\87Ù\85 Ø¨Ú©Û\8cد",
-       "passwordsent": "یه گل رازینه گواردن هنی سی تیرنشون انجومانامه ای که \"$1\" واش ثوت نام کرده بی کل بیه.\nخواهش میکیم هنی رویئت وامین و اوسه بئریتش.",
-       "blocked-mailpassword": "نها آی پی شما سی ویرایشت گرته بیه، و",
-       "eauthentsent": "یه گل انجومانامه پشت راس کردنی د یه گل تیرنشون ویجه کل بیه.\nدما یه که یه گل انجومانامه هنی د حساو کل بوئه، شما واس دما رئنمونی نه د انجومانامه بئریت، سی یه که حساو شما راستکی پشت راست بوئه.",
-       "throttled-mailpassword": "یه گل رازینه گواردن دواره زنه بیه ایسه کل بیه، د آخری {{PLURAL:$1|ساعت|$1 ساعتیا}}.\nسی نهاگری د اذیت دئن،فقط یه گل رازینه گواردن د انجومانامه دواره زنه بیه د هر {{PLURAL:$1|ساعت|$1 ساعتیا}} کل بیه.",
-       "mailerror": "خطا Ø¯Ø§Ø±Ù\87 Ú©Ù\84 Ù\85Ù\88ئÙ\87:$1",
-       "acct_creation_throttle_hit": "سیل کریا ای ویکی تیرنشون آی پی شما وه کار گرتنه د روز دمایی {{PLURAL:$1|1 حساو|$1 حساویا}} نه دروس کردنه، و وه د بیشترونه صلا دئن د ای دوره گاتی انجوم بیه.\nد نتیجه، سیل کریایی که د ای تیرنشون آی پی وه کار گرتنه نمی تونن  حساویا بیشتری د ای گات دروس بکن.",
-       "emailauthenticated": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªÙ\88Ù\86Ù\87 Ø¯ $2 Ø³Û\8c 3$ Ù\85ئکÙ\85 Ø¨Û\8cÙ\87.",
-       "emailnotauthenticated": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø´Ù\85ا ØªØ§ Ø§Û\8cسÙ\87 Ù¾Ø´Øª Ø±Ø§Ø³Ú¯Ø±Û\8c Ù\86بÛ\8cÙ\87.\nÙ\87Ù\86Û\8c Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø§Û\8c Ø³Û\8c Ú\86Û\8cا Ø±Û\8c Ø¨Ù\87 Ù\86Ù\87ا Ú©Ù\84 Ù\86بÛ\8cÙ\87.",
-       "noemailprefs": "یه گل تیرنشون انجومانامه د الویتیاتو سی یه که ای ویجه گیا کار بکن انتخاو بکیت.",
-       "emailconfirmlink": "پشت راس کردن تیرنشون انجومانامه",
-       "invalidemailaddress": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø­Ø§Ø³ØªÙ\86Û\8c Ù\86ئ Ø´Ú©Ù\84 Ù\88Ù\87 Ú\86Ù\88ئÙ\87 Ø®Ù\88ئÛ\8c Ù\86ارÙ\87.\nÙ\84Ø·Ù\81Ù\86 Û\8cÙ\87 Ú¯Ù\84 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ú\86Ù\88ئÙ\87 Ø¯Ø§Ø± Ù\88ارد Ø¨Ú©Û\8cت Û\8cا Ø§Û\8c Ø±Ø´Ù\86Ù\87 Ú¯Ù\87 Ù\86Ù\87 Ø­Ø§Ù\84Û\8c Ø¨نیت.",
-       "cannotchangeemail": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ø­Ø³Ø§Ù\88 Ù\86تÙ\88Ù\86Ù\87 Ø¯ Ø§Û\8c Ù\88Û\8cÚ©Û\8c Ø¢Ù\84شت Ø¨Ù\88ئÙ\87.",
-       "emaildisabled": "اÛ\8c Ù\85اÙ\84Ú¯Ù\87 Ù\86تÙ\88Ù\86Ù\87 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ú©Ù\84 Ù\86Ù\85Û\8c Ú©Ù\87",
-       "accountcreated": "حساÙ\88 راس بی",
-       "accountcreatedtext": "حساÙ\88 Ú©Ø§Ø±Û\8cارÛ\8c Ø³Û\8c [[{{ns:کارÛ\8cار}}:$1|$1]] ([[{{ns:کارÛ\8cار Ú\86Ú© Ú\86Ù\86Ù\87}}:$1|Ú\86Ú© Ú\86Ù\86Ù\87]]) Ø¯Ø±Ù\88س Ø¨Û\8cÙ\87.",
-       "createaccount-title": "حساÙ\88 Ø±Ø§Ø³ Ú©Ø±Ø¯Ù\87 Ø³Û\8c  {{SITENAME}}",
-       "createaccount-text": "یه نفر وا تیرنشون انجونامه تو یه گل حساو راس کرده{{نوم دیارگه}} ($4) نومشه نیائه\"$2\", با پاسورد \"$3\".\nشما همی ایسه باید روئیت وامین و رازینه گواردتونه آلشت بکیت.\n\nار شما ای پیغوم نه وش التفات نکیت، د راس بیین ای حساو خطا دروس موئه.",
-       "login-throttled": "Ø´Ù\85ا Ø§Û\8cسÙ\86Û\8c Ù\81رÙ\87 Ø³Û\8c Ù\88اÙ\85Û\8cÙ\86 Ø§Ù\88Ù\85ائÙ\86 ØªÙ\84اش Ú©Ø±Ø¯Û\8cتÙ\87.\n$1 Ù\84Ø·Ù\81Ù\86 Ø³Û\8c ØªÙ\84اش Ù\87Ù\86Û\8c ØµØ¨Ø± Ø¨Ú©Û\8cد",
-       "login-abort-generic": "اومائن وامین تو شکست حرد-شکست حرده",
-       "login-migrated-generic": "حساÙ\88 Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\85ا Ø¬Ø§ Ù\88Ù\87 Ø¬Ø§ Ø¨Û\8cÙ\87Ø\8c Ù\88 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\85ا Ø¯Û\8cÙ\87 Ø¯ Ø§Û\8c Ù\88یکی نیئش.",
+       "noname": "Ø´Ù\88Ù\99Ù\85ا Û\8cئ Ú¯Ø¦Ù\84 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø®Ù\88Ù\99 ØªÛ\8cار Ù\86أکئردÛ\8cتÛ\95.",
+       "loginsuccesstitle": "ئÙ\88Ù\99Ù\85ائÙ\86 Ú¤Ø§Ù\85Û\8cÙ\86 Ø®Ù\88Ù\99 بی",
+       "loginsuccess": "Ø´Ù\88Ù\99Ù\85ا Ø¦Û\8cسئ Ø¦Ù\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86 {{SITENAME}} د چی\"$1\".'",
+       "nosuchuser": "چئنی کاریاری ڤا نوم\"$1\" نیئش.\nنوم کاریاری ڤئ حأرفیا حأساسە.\nرأڤئشت نیسأنئن توٙنە ڤارئسی بأکست،یا [[Special:ڤامین ئوٙمائن کاریار/ثأڤت نام کئردئن|یئ گئل حئساڤ تازه راس بأکیت]].",
+       "nosuchusershort": "چئنی کاریاری ڤا نوم $1 نی.\nنیسأنئن خوتوٙنە ڤارئسی بأکیت.",
+       "nouserspecified": "Ø´Ù\88Ù\85ا Ú¤Ø§Ø³ Û\8cئ Ú¯Ø¦Ù\84 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c ØªÛ\8cار Ø¨Ø£Ú©Û\8cت.",
+       "login-userblocked": "کاریا قولف بییە . شوما صئلا ڤامین ئوٙمائن ناریت.",
+       "wrongpassword": "رازینە گوڤاردئنئتوٙ نە ئشتئڤا دأییتە.\nد نۊ تئلاش بأکیت.",
+       "wrongpasswordempty": "رازینە گوڤاردئنئتوٙ نە حالی دأییتە.\nد نۊ تئلاش بأکیت.",
+       "passwordtooshort": "رازینە گوڤاردئنئتوٙ با کأمتروٙنە {{PLURAL:$1|1 کاراکتئر|$1 کاراکتئریا}} با",
+       "passwordtoolong": "رازینە گوڤاردئنئتوٙ نە ڤاس بیشتئر د {{PLURAL:$1|1 کاراکتئر|$1 کاراکتئریا}} با",
+       "password-name-match": "رازینە گوڤاردئنئتوٙ بایأد ڤا نوم کاریاریتوٙ فأرخ داشتوٙە.",
+       "password-login-forbidden": "ڤئ کارگئرئتئن ئی نوم کاریاری و رازینە گوڤاردئن قأدئقأن بییە.",
+       "mailmypassword": "د Ù\86Û\8a Ø¯Ø£Ø¦Ù\86 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئن",
+       "passwordremindertitle": "رازینە گوڤاردئن موڤأتی تازه سی {{SITENAME}}",
+       "passwordremindertext": "یئ نأفأر (گاسی خوتوٙ،د تیرنئشوٙن آی پی $1) یئ گئل رازینە گوڤاردئن هأنی سی {{SITENAME}}($4) حاستە.یئ گئل رازینە گوڤاردئن موڤأقأتی سی کاریاری\"$2\" رأڤأندیاری بیە و د \"$3\" جاگئر بییە. أر یە نە حاستیتە،شما بایأد ئیسئ روٙییت ڤامین و یئ گئل رازینە گوڤاردئن هأنی نە ئنتئخاڤ بأکیت.\nرازینە گوڤاردئن موڤأقأتی د {{PLURAL:$5|یئ روٙ|$5 روٙزیا}}  تأموٙم بوٙە.\n\nأر یئ نأفأر هأنی ئی حاست نە داشتوٙە، یا أر رازینە گوڤاردئن توٙنە د ڤیرتوٙ ئوٙما، و أر حاستیت ڤئنە آلئشت کاری بأکیت، گاسی شوما د ئی پئیغوم تیە پوٙشی بأکیت و بئحایت ڤئ کار گئرئتئن رازینە گوڤاردئن دئماتریتوٙ نە دئماداری بأکیت.",
+       "noemail": "Ù\87Û\8cÚ\86 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Û\8cÛ\8c Ø³Û\8c Ú©Ø§Ø±Û\8cار $1 Ø¶Ø£Ù\81Ø· Ù\86أبÛ\8cÛ\95.",
+       "noemailcreate": "Ø´Ù\88Ù\85ا Ø¨Ø§Û\8cأد Û\8cئ Ú¯Ø¦Ù\84 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86Û\95 Ø¬Ø§Ø¯Û\8cار Ø³Û\8c Ø®Ù\88تÙ\88Ù\99 Ø¯Ø§Ø´ØªÙ\88Ù\99Û\8cÛ\8cت.",
+       "passwordsent": "یئ گئل رازینە گوڤاردئن هأنی کئل بییە سی تیرنئشوٙن أنجومانامە یی کئ \"$1\" ڤاش ثأڤت نام کئردە.\nخاهئشت می کیم هأنی روٙییت ڤامین و ئوٙسئ بئریتئش.",
+       "blocked-mailpassword": "نئها آی پی شوما سی ڤیرایئشت کاری گئرئتە بییە، هأنی صئلا یە نە نارە کئ د رازینە گوڤاردئن د نۊ کئل بییە سی نئهاگئری د گأن کاری نارە.",
+       "eauthentsent": "یئ گئل أنجومانامە پوشت راست کئردئنی د یئ گئلٛ تیرنئشوٙن ڤیجە کئل بییە.\nدئما یە کئ یئ گئل أنجومانامە هأنی د حئساڤ کئل بوٙأ، شوما ڤاس دئما رأدیارکونی نە د أنجومانامە بئیریت، سی یە کئ حئساڤ شوما راستأکی پوشت راست بوٙأ.",
+       "throttled-mailpassword": "یئ گئل رازینە گوڤاردئن د نۊ زئنە بییە و ئیسئ کئل بییە، د آخئری {{PLURAL:$1|ساعأت|$1 ساعأتیا}}.\nسی نئهاگئری د أذیأت بییئن، فأقأط یئ گئل رازینە گوڤاردئن د أنجومانامە د نۊ زئنە بییە د هأر {{PLURAL:$1|ساعأت|$1 ساعأتیا}} کئل بییە.",
+       "mailerror": "خأطا Ø¯ Ú©Ø¦Ù\84 Ø¨Û\8cÛ\8cئÙ\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95:$1",
+       "acct_creation_throttle_hit": "سئل کاریا ئی ڤیکی تیرنئشوٙن آی پی شوما نە ڤئ کار گئرئتئنە د روٙز دئمایی {{PLURAL:$1|1 حئساڤ|$1 حئساڤیا}} نە رأڤأندیاری کئردئنە، و ڤئ د بیشتأروٙنە صئلا دأئنە د ئی دورە گاتی أنجوم بییە.\nد نأتیجە، سئل کاریایی کئ د ئی تیرنئشوٙن آی پی ڤئ کار گئرئتئنە نئمی توٙنئن حئساڤیا بیشتأری نە د ئی گات دوروس بأکأن.",
+       "emailauthenticated": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªÙ\88Ù\99 Ø¯ $2 Ø³Û\8c 3$ Ù¾Ù\88شت Ø±Ø§Ø³Ú©Ø§Ø±Û\8c Ø¨Û\8cÛ\8cÛ\95.",
+       "emailnotauthenticated": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ø´Ù\88Ù\85ا ØªØ§ Ø¦Û\8cسئ Ù¾Ù\88شت Ø±Ø§Ø³ Ú©Ø§Ø±Û\8c Ù\86أبÛ\8cÛ\8cÛ\95.\nÙ\87Ø£Ù\86Û\8c Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Û\8cÛ\8c Ø³Û\8c Ø¦Û\8c Ú\86Û\8cا Ú©Ø¦ Ù\87اÙ\86 Ø±Û\8c Ù\86ئÙ\87ا Ú©Ø¦Ù\84 Ù\86أبÛ\8cÛ\8cÛ\95.",
+       "noemailprefs": "یئ گئل تیرنئشوٙن أنجومانامە د چیا نازار شوما سی یە کئ ئی خوصوٙصیأتیا کار بأکأن ئنتئخاڤ بأکیت.",
+       "emailconfirmlink": "تیرنئشوٙن أنجومانامە توٙنە پوشت راسکاری بأکیت",
+       "invalidemailaddress": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ù\82Ø£Ú¤Ù\88Ù\99Ù\84 Ø¨Û\8cئÙ\86Û\8c Ù\86Û\8c Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ú\86Û\8c Ø¯ Ú¤Û\8cر Ù\88 Ø¨Ø§Ú¤Ø£Ø± Ù\85Û\8cا Ú©Ø¦ Ú¤Ø¦ Ø´Û\8cÚ¤Û\95 Ø®Ù\88Ù\99Û\8cÛ\8c Ù\86ارÛ\95.\nÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Û\8cئ Ú¯Ø¦Ù\84 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ú\86Ù\88Ù\99Ø£ Ø¯Ø§Ø± Ù\86Û\95 Ø¨Ø£Ø²Ø£Ù\86Û\8cت Û\8cا Ø¦Û\8c Ø¬Ø§Ú¯Û\95 Ù\86Û\95 Ø­Ø§Ù\84Û\8c Ø¨Ø£نیت.",
+       "cannotchangeemail": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ø­Ø¦Ø³Ø§Ú¤ Ø¯ Ø¦Û\8c Ú¤Û\8cÚ©Û\8c Ø¢Ù\84ئشت Ú©Ø§Ø±Û\8c Ù\86أبÙ\88Ù\99Ø£.",
+       "emaildisabled": "ئÛ\8c Ø¯Û\8cارگÛ\95 Ù\86ئÙ\85Û\8c ØªÙ\88Ù\99Ù\86Û\95 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ú©Ø¦Ù\84 Ø¨Ø£Ú©Û\95.",
+       "accountcreated": "حئساڤ راس بی",
+       "accountcreatedtext": "حئساڤ Ú©Ø§Ø±Û\8cارÛ\8c Ø³Û\8c [[{{ns:کارÛ\8cار}}:$1|$1]] ([[{{ns:کارÛ\8cار Ú\86Ø£Ú© Ú\86ئÙ\86Û\95}}:$1|Ú\86Ø£Ú© Ú\86ئÙ\86Û\95]]) Ø¯Ù\88رÙ\88س Ø¨Û\8cÛ\8cÛ\95.",
+       "createaccount-title": "حئساڤ Ø³Û\8c {{SITENAME}} Ø±Ø§Ø³ Ø¨Û\8c",
+       "createaccount-text": "یئ نأفأر ڤا تیرنئشوٙن أنجومانامە توٙ یئ گئل حساڤ راس کئردە {{SITENAME}} ($4) و ئوسئ نومئشە نیاە \"$2\"، ڤا رازینە گوڤاردئن \"$3\".\nشوما هأمی ئیسئ بایأد روییت ڤامین و ر ازینە گوڤاردئن خوتوٙنە آلئش کاری بأکیت.\n\nأر شوما د ئی پئیغوم ئلتئفات نأکیت، د گات رأڤأندیاری ئی حئساڤ خأطا پیش میا.",
+       "login-throttled": "Ø´Ù\88Ù\85ا ØªØ§ Ø¦Û\8cسئ Ø³Û\8c Ú¤Ø§Ù\85Û\8cÙ\86 Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ù\81ئرÛ\95 ØªØ¦Ù\84اش Ú©Ø¦Ø±Ø¯Û\8cتÛ\95.\n$1 Ù\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ø³Û\8c ØªØ¦Ù\84اش Ù\87Ø£Ù\86Û\8c Ú¯Ù\88رÛ\8c Ø¨Ø¦Ø³Û\8cت.",
+       "login-abort-generic": "ڤامین ئوٙمائن توٙ ناخوش سأرنجوم بی- گأن بی",
+       "login-migrated-generic": "حئساڤ Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\88Ù\85ا Ø¬Ø§ Ú¤Ø¦ Ø¬Ø§ Ø¨Û\8cÛ\8cÛ\95Ø\8c Ù\88 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\88Ù\85ا Ø¯Û\95 Ø¯ Ø¦Û\8c Ú¤یکی نیئش.",
        "loginlanguagelabel": "زوٙن:$1",
-       "suspicious-userlogout": "درحاست وه در رئتن شما انکار بیه سی یه کل وه نظر میا که د یه گل دووارته نیئر گن یا یه گل پروکسی که ها د ویرگه نهو کل بیه",
-       "createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار   سی کاریاش وه کار گرته بوئه.",
+       "suspicious-userlogout": "د حاست ڤئ دأر رأتئن شوما تیە پوشی بییە سی یە کئ ڤئ نأظأر یما کئ ڤئ سی یئ گئل دوڤارتە نیأر گأن یا یئ گئل پوروکسی کئ ها د ڤیرگە کأش کئل بییە.",
+       "createacct-another-realname-tip": "نوم راستأکی دئل ڤئ حاییە.\nأر شوما ڤئنە نئها ئمایە بأکیت، یە سی هوم نئسبأت دأئن کاریاری سی کاریاش ڤئ کار گئرئتئ بوٙە.",
        "pt-login": "ڤامین ئوٙمائن",
        "pt-login-button": "ڤامین ئوٙمائن",
-       "pt-createaccount": "يه گل حساو راس بكيد",
-       "pt-userlogout": "د Ø³Ø§Ù\85Ù\88Ù\86Ù\87 Ø¯Ø±Ø§Ù\88مائن",
-       "php-mail-error-unknown": "خطا Ù\86ادÛ\8cار Ù\85Û\8cÙ\86 Ø¢Ù\84شت Ù\88Ù\86 PHP's mail()",
-       "user-mail-no-addy": "سی کل کردن انجومانامه د یه گل انجومانامه بی تیرنشون کنشتگری بیه",
-       "user-mail-no-body": "سی کل کردن انجومانامه وا مینونه حالی یا کؤچک بیئن سی دلیل غیر علقمنی تلاش بکید.",
-       "changepassword": "رازÛ\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\86Ù\87 Ø¢Ù\84شت Ø¨Ù\83Ù\8aت",
-       "resetpass_announce": "سی تموم کردن وا مین اومائن، شما باید یه گل رازینه گواردن هنی وارد بکیتو.",
+       "pt-createaccount": "حئساڤ راس بأکیت",
+       "pt-userlogout": "د Ø³Ø§Ù\85Ù\88Ù\99Ù\86Û\95 Ø¯Ø¦Ø±Ø¦Ù\88Ù\99مائن",
+       "php-mail-error-unknown": "خأطا Ù\86ادÛ\8cار Ø¯ Ø¢Ù\84ئشتگئر PHP's mail()",
+       "user-mail-no-addy": "سی کئل کئردئن أنجومانامە د یئ گئل أنجومانامە بی تیرنئشوٙن أنجومانامه تئلاش بییە.",
+       "user-mail-no-body": "سی کئل کئردئن أنجومانامە ڤا مینوٙنە حالی یا کوچئک بییئن سی دألیل یا غئر مأنطئقی بییئن ڤئ تئلاش بأکیت.",
+       "changepassword": "رارÛ\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\86Û\95 Ø¢Ù\84ئشت Ø¨Ø£Ú©Û\8cت",
+       "resetpass_announce": "سی تأموم کئردئن ڤامین ئوٙمائن، شوما بایأد یئ گئل رازینە گوڤاردئن هأنی نە بأزئنیت.",
        "resetpass_text": "<!-- یه گل نیسسه ایچه اضاف بکیت -->",
-       "resetpass_header": "رازینه گواردن حساوتونه آلشت بکید",
-       "oldpassword": "رازینه گواردن قدیمی:",
-       "newpassword": "رازینه گواردن تازه:",
-       "retypenew": "رازینه گواردن تازه نه دوواره انجومیارنیسی :",
-       "resetpass_submit": "رازینه گواردن بنیت و وامین بیایت",
-       "changepassword-success": "رازینه گواردن شما د خوئی آلشت بی",
-       "changepassword-throttled": "Ø´Ù\85ا Ø§Û\8cسÙ\86Û\8c Ù\81رÙ\87 Ø³Û\8c Ù\88اÙ\85Û\8cÙ\86 Ø§Ù\88Ù\85ائÙ\86 ØªÙ\84اش Ú©Ø±Ø¯Û\8cتÙ\87.\n$1 Ù\84Ø·Ù\81Ù\86 Ø³Û\8c ØªÙ\84اش Ù\87Ù\86Û\8c ØµØ¨Ø± Ø¨Ú©Û\8cد",
-       "resetpass_forbidden": "رازینه گواردناتون نتونن آلشت بوئن",
-       "resetpass-no-info": "Ø´Ù\85ا Ø¨Ø§ Ø¨Û\8cاÛ\8cت Ø¯ Ø³Ø§Ù\85Ù\88Ù\86Ù\87 ØªØ§ Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø¯Ø³Ø±Ø³Û\8c Ø¯Ø§Ø´ØªÙ\88Û\8cت",
-       "resetpass-submit-loggedin": "رازÛ\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\86Ù\87 Ø¢Ù\84شت Ø¨Ù\83Ù\8aت",
+       "resetpass_header": "رازینە گوڤاردئن حئساڤئ توٙنە آلئشت بأکیت",
+       "oldpassword": "رازینە گوڤاردئن دئمایی:",
+       "newpassword": "رازینە گوڤاردئن تازە:",
+       "retypenew": "رازینە گوڤاردئن تازە نئ د نۊ أنجومیارنیسی بأکیت:",
+       "resetpass_submit": "رازینە گوڤاردئن نە بأزئنیت و بیاییت ڤامین",
+       "changepassword-success": "رازینە گوڤاردئن شوما ڤا خوٙیی آلئشت کاری بی!",
+       "changepassword-throttled": "Ø´Ù\88Ù\85ا ØªØ§ Ø¦Û\8cسئ Ø³Û\8c Ú¤Ø§Ù\85Û\8cÙ\86 Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ù\81ئرÛ\95 ØªØ¦Ù\84اش Ú©Ø¦Ø±Ø¯Û\8cتÛ\95.\n$1 Ù\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ø³Û\8c ØªØ¦Ù\84اش Ù\87Ø£Ù\86Û\8c Ú¯Ù\88رÛ\8c Ø¨Ø¦Ø³Û\8cت.",
+       "resetpass_forbidden": "نأبوٙە رازینە گوڤاردنیانە آلئشتکاری بأکیت",
+       "resetpass-no-info": "Ø´Ù\88Ù\85ا Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¯ Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¯Ø£Ø³Ø±Ø¦Ø³Û\8c Ø¯Ø§Ø´ØªÙ\88Ù\99Û\8cÛ\8cت Ø¨Ø§Ø³ Ø¨Û\8cاÛ\8cÛ\8cت Ú¤Ø§Ù\85Û\8cÙ\86.",
+       "resetpass-submit-loggedin": "رارÛ\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\86Û\95 Ø¢Ù\84ئشت Ø¨Ø£Ú©Û\8cت",
        "resetpass-submit-cancel": "أنجوم شیڤئستئن",
-       "resetpass-wrong-oldpass": "رازینه گواردن تازه یا موقتی نامعتور.\nشات شما ایسنی یا رازینه گواردن خوتونه د خوئی آلشت دئیته یا یه گل رازینه گواردن موقت هنی درحاست دئیته.",
-       "resetpass-recycled": "لطفن رازینه گواردن خوتونه سی چیا تر د رازینه گواردن ایسنی د نو زنه بکیت",
-       "resetpass-temp-emailed": "Ø´Ù\85ا Ù\88ا Û\8cÙ\87 Ú¯Ù\84 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ù\85Ù\88Ù\82تÛ\8c Ú©Ù\87 Ø§Ù\86جÙ\88Ù\85ا Ú¯Ø± Ø¨Û\8cÙ\87  Ø§Ù\88Ù\85اÛ\8cتÙ\87 Ù\88اÙ\85Û\8cÙ\86.\nسÛ\8c ØªÙ\85Ù\88Ù\85 Ú©Ø±Ø¯Ù\86 Ø§Ù\88Ù\85ائÙ\86 Ù\88اÙ\85Û\8cÙ\86Ø\8c Û\8cÙ\87 Ú¯Ù\84 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\87Ù\86Û\8c Ø¯ Ø§Û\8cÚ\86Ù\87  Ø¬Ø§Ú¯Ø± Ø¨کیت.",
-       "resetpass-temp-password": "رازینه گواردن موقت:",
-       "resetpass-abort-generic": "Ø¢Ù\84شت Ø¯Ø¦Ù\86 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\88ا Û\8cÙ\87 Ú¯Ù\84 Ù\81رÙ\87 Ù¾Ù\88Ø´ Ø®Ø±Ù\88 Ø¨Û\8cÙ\87.",
-       "resetpass-expired": "رازینه گواردن شما منقضی بیه. لطفن یه گل رازینه گواردن هنی سی وامین اومائن جاگری بکیت.",
-       "resetpass-expired-soft": "رازینه گواردن شما منقضی بیه و واس د نو زنه با. لطفن یه گل رازینه هنی انتخاو بکیت، یا سی د نو زنه کردن د نهاتر د ایچه \"{{int:resetpass-submit-cancel}}\" بپورنیت.",
-       "resetpass-validity-soft": "رازینه گواردتون تو معتور نئ:$1\n\nلطفن یه گل رازینه گواردن هنی انتخاو بکیت، یا ری ایچه \"{{int:resetpass-submit-cancel}}\" سی د نو زنه کردن وه د نهاتر بپورنیت.",
-       "passwordreset": "د Ù\86Û\88 Ù\88ارد Ù\83ردÙ\86 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردن",
-       "passwordreset-text-one": "اÛ\8c Ù\86Ù\88Ù\85 Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø³Û\8c Ú¯Ø±ØªÙ\86 Û\8cÙ\87 Ú¯Ù\84 Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ù\85Ù\88Ù\82تÛ\8c Ù\88ا Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ù¾Ø± Ø¨کیت.",
-       "passwordreset-text-many": "{{PLURAL:$1|یه گل د رشنه گه یا نه سی یه که رازینه گواردن موقتی وا انجومانامه گرته بوئه پر بکیت}}",
-       "passwordreset-disabled": "نو کرد رازینه گواردن د ای ویکی ناکشتگر بیه.",
-       "passwordreset-emaildisabled": "چی یا هنی انجومانامه د ای ویکی ناکشتگر بیه.",
+       "resetpass-wrong-oldpass": "رازینە گوڤاردئن تازە یا موڤأقأتی نادیارە.\nگاسی شوما ئیسئنی یا یا رازینە گوڤاردئن خوتوٙنە د خوٙیی آلئشت دأئیتە یا یئ گئل رازینە گوڤاردئن موڤأقأت هأنی حاستیتە.",
+       "resetpass-recycled": "لوطف بأکیت رازینە گوڤاردئن خوتوٙنە سی چیا هأنی د رازینە گوڤاردئن ئیسئنی د نۊ زئنە بأکیت.",
+       "resetpass-temp-emailed": "Ø´Ù\88Ù\85ا Ú¤Ø§ Û\8cئ Ú¯Ø¦Ù\84 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\85Ù\88ڤأÙ\82أتÛ\8c Ø¦Ù\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86.\nسÛ\8c Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ú¤Ø¦ Ø¯Ø£Ø±Ø\8c Û\8cئ Ú¯Ø¦Ù\84 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\87Ø£Ù\86Û\8c Ù\86Û\95 Ø¦Û\8cÚ\86ئ Ø¬Ø§Ú¯Ø¦Ø±(Ù\85Û\8cزÙ\88Ù\99Ù\86کارÛ\8c) Ø¨Ø£کیت.",
+       "resetpass-temp-password": "رازینە گوڤاردئن موڤأقأت:",
+       "resetpass-abort-generic": "Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ú¤Ø§ Û\8cئ Ú¯Ø¦Ù\84 Ø¯Ø¦Ù\85ادÛ\8cس Ø®Ø¦Ø±Ø§Ú¤ Ø¨Û\8cÛ\8cÛ\95.",
+       "resetpass-expired": "گات دیاری رازینە گوڤاردئن شوما تأموم بییە. لوطف بأکیت یئ گئل رازینە گوڤاردئن هأنی نە سی ڤامین ئوٙمائن میزوٙنکاری بأکیت.",
+       "resetpass-expired-soft": "گات دیاری رازینە گوڤاردئن شوما تأموم بییە و باس د نۊ زئنە با. لوطف بأکیت یئ گئل رازینە گوڤاردئن هأنی نە ئنتئخاڤ بأکیت، یا سی د نۊ زئنە کئردئن د نئهاتئر د ئیچئ \"{{int:resetpass-submit-cancel}}\" بأپوٙرنیت.",
+       "resetpass-validity-soft": "رازینە گوڤاردئن توٙ نادیاره:$1\n\n لوطف بأکیت یئ گئل رازینە گوڤاردئن هأنی نە ئنتئخاڤ بأکیت، یا سی د نۊ زئنە کئردئن د نئهاتئر د ئیچئ \"{{int:resetpass-submit-cancel}}\" بأپوٙرنیت.",
+       "passwordreset": "د Ù\86Û\8a Ø¯Ø£Ø¦Ù\86 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئن",
+       "passwordreset-text-one": "ئÛ\8c Ù\86Ù\88Ù\85 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø³Û\8c Ú¯Ø¦Ø±Ø¦ØªØ¦Ù\86 Û\8cئ Ú¯Ø¦Ù\84 Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\85Ù\88ڤأÙ\82أت Ú¤Ø§ Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªÙ\88Ù\99 Ù¾Ù\88ر Ø¨Ø£کیت.",
+       "passwordreset-text-many": "{{PLURAL:$1|یئ گئل د جاگە یا نە سی گئرئتئن رازینە گوڤاردئن موڤأقأتی نە ڤا أنجومانامە گئرئتە بوٙأ پور بأکیت.}}",
+       "passwordreset-disabled": "نۊ کئردئن رازینە گوڤاردئن د ئی ڤیکی ناکونئشگأر بییە.",
+       "passwordreset-emaildisabled": "چیا هأنی کئ هان د أنجومانامە د ئی ڤیکی ناکونئشتگأر بینە.",
        "passwordreset-username": "نوم کاریاری:",
        "passwordreset-domain": "پوشگئر",
-       "passwordreset-capture": "اÙ\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ù\86تÛ\8cجÙ\87 Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86Û\8cتÙ\88؟",
-       "passwordreset-capture-help": "ار Ø´Ù\85ا Ø§Û\8c Ø¬Ø¹Ù\88Ù\87 Ù\86Ù\87 Ù\88ارسÛ\8c Ø¨Ú©Û\8cد. Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ù\88 Ø®Ù\88ئÛ\8c Ø§Ù\88سÙ\87 Ú©Ù\87 Ø³Û\8c Ú©Ø§Ø±Û\8cار Ú©Ù\84 Ø¨Û\8cÙ\87 Ø¨Ù\88ئÙ\87 Ø¨Ù\88Û\8cÙ\86Û\8cتش.",
-       "passwordreset-email": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87",
-       "passwordreset-emailtitle": "جزئیات حساو ها د {{نوم مالگه}}",
-       "passwordreset-emailtext-ip": "یه کسی(شات خوتو، وا تیرنشون آی پی $1) سی د نو زنه کردن رازینه گواردن تو د {{SITENAME}}  درحاست کرده($4).\nسی کاریار «$2» یه گل رازینه گواردن موقتی دروس بیه و و هؤمبراور «$3» ئه.\nار تمارزو تو یه بیه ایسه باید بیایت وامین سامونه و یه گل رازینه گواردن هنی بهاییت\nرازینه گواردن شما د طیل {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\n\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
-       "passwordreset-emailtext-user": "کاریار $1 د {{SITENAME}} د نو زنه کردن رازینه گواردن شمانه د{{SITENAME}} ($4) کرده. {{PLURAL:$3|حساو|حساویا}} کاریاری که هان د هار د وا ای تیرنشون انجومانامه ها د ارتواط:\n\n$2\n\n{{PLURAL:$3|ای رازینه گواردن موقت|ای رازینه گواردنیا موقت}} تا {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
-       "passwordreset-emailelement": "نوم کاریاری: $1\nرازینه گواردن موقتی: $2",
-       "passwordreset-emailsent": "رازینه گواردن هنی سی انجومانامه کل بیه.",
-       "passwordreset-emailsent-capture": "رازینه گواردن تازه تو د انجومانامه تو که د هار نشو دئه بیه کل بیه",
-       "passwordreset-emailerror-capture": "رازینه گواردن د انجومانامه د نو زنه کننه راس بیه، و وه د هار دیاری می که، اما کل بیین وه د{{GENDER:$2|کاریار}} شکست حرده:$1",
-       "changeemail": "اÙ\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªÙ\88 Ù\86Ù\87 Ø¢Ù\84شت Ø¨Ú©Û\8cد",
-       "changeemail-text": "اÛ\8c Ù\86Ù\88Ù\85 Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ø³Û\8c Ø¢Ù\84شت Ø¯Ø¦Ù\86 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªÙ\88 Ù¾Ø± Ø¨Ú©Û\8cت. Ø´Ù\85ا Ø³Û\8c Ù¾Ø´Øª Ø±Ø§Ø³ Ú©Ø±Ø¯Ù\86 Ø§Û\8c Ø¢Ù\84شت Ù\88اس Ø±Ø§Ø²Û\8cÙ\86Ù\87 Ú¯Ù\88اردÙ\86 Ø®Ù\88تÙ\88Ù\86Ù\87 Ù\88ارد Ø¨Ú©یت.",
-       "changeemail-no-info": "Ø´Ù\85ا Ø¨Ø§ Ø¨Û\8cاÛ\8cت Ø¯ Ø³Ø§Ù\85Ù\88Ù\86Ù\87 ØªØ§ Ø¯ Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø¯Ø³Ø±Ø³Û\8c Ø¯Ø§Ø´ØªÙ\88Û\8cت",
-       "changeemail-oldemail": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªØ§Ø²Ù\87 Ø¨Ø§Ù\88:",
-       "changeemail-newemail": "تÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªØ§Ø²Ù\87:",
+       "passwordreset-capture": "Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ù\86أتÛ\8cجÛ\95 Ù\86Û\95 Ø³Ø¦Ù\84 Ø¨Ø£Ú©Û\8cت؟",
+       "passwordreset-capture-help": "أر Ø´Ù\88Ù\85ا Ø¦Û\8c Ø¬Ø£Ú¤Û\95 Ù\86ئ Ú¤Ø§Ø±Ø¦Ø³Û\8c Ø¨Ø£Ú©Û\8cت.Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 (ڤا Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ù\85Ù\88ڤأÙ\82أتÛ\8c) Ø¬Ù\88Ù\99رÛ\8c Ú©Ø¦ Ø³Û\8c Ú©Ø§Ø±Û\8cارÛ\8cا Ù\87Ø£Ù\86Û\8c Ú©Ø¦Ù\84 Ø¨Û\8cÛ\8cÛ\95 Ø¯Û\8cارÛ\8c Ù\85Û\8cÚ©Û\95.",
+       "passwordreset-email": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95",
+       "passwordreset-emailtitle": "جوزئیات حئساڤ ها د {{نوم مالگە}}",
+       "passwordreset-emailtext-ip": "یە کئسی(گاسی خوتوٙ، ڤا تیرنئشوٙن آی پی $1) د نۊ زئنە کئردئن رازینە گوڤاردئنئتوٙ د {{SITENAME}} حاستیتە($4).\nسی کاریار «$2» یئ گئل رازینە گوڤاردئن موڤأقتی رأڤأندیاری بییە و هومبأراڤأر «$3» ە.\nأر دالئتوٙ یە بییە ئیسئ ڤاس بیائیت ڤامین ساموٙنە و یئ گئل رازینە گوڤاردئن هأنی بئهایت.\n رازینە گوڤاردئن {{PLURAL:$3|ئی رازینە یا گوڤاردئن موڤأقأتی|ئی رازینە یا گوڤاردئن موڤأقأتی}} شوما د گات {{PLURAL:$5|یئ روٙ|$5 روٙ}} باطئل بوٙە.\n\nأر کأسی هأنی چئن حاستی داشتە یا یە کئ رازینە گوڤاردئن دئمایی شوما د ڤیرئتوٙ ئوٙما و دە نئمیهایت ڤئنە آلئشت کاری بأکیت، می توٙنیت د ئی پئیغوم تیە پوٙشی بأکیت و هأموٙ رازینە گوڤاردئن دئمایی نە بونیت د کار.",
+       "passwordreset-emailtext-user": "کاریار $1 د {{SITENAME}} د نۊ زئنە کئردئن رازینە گوڤاردئن شومانە د{{SITENAME}} ($4) حاستە. {{PLURAL:$3|حئساڤ|حئساڤیا}} کاریاری کئ هان د هار و ڤا ئی تیرنئشوٙن أنجومانامە هان د ئرتئڤاط:\n\n$2\n\n رازینە گوڤاردئن {{PLURAL:$3|ئی رازینە یا گوڤاردئن موڤأقأتی|ئی رازینە یا گوڤاردئن موڤأقأتی}} شوما د گات {{PLURAL:$5|یئ روٙ|$5 روٙ}} باطئل بوٙە.\nأر کأسی هأنی چئن حاستی داشتە یا یە کئ رازینە گوڤاردئن دئمایی شوما د ڤیرئتوٙ ئوٙما و دە نئمیهایت ڤئنە آلئشت کاری بأکیت، می توٙنیت د ئی پئیغوم تیە پوٙشی بأکیت و هأموٙ رازینە گوڤاردئن دئمایی نە بونیت د کار.",
+       "passwordreset-emailelement": "نوم کاریاری: $1\nرازینە گوڤاردئن موڤأقتی: $2",
+       "passwordreset-emailsent": "یئ گئل رازینە گوڤاردئن هأنی سی أنجومانامە کئل بییە.",
+       "passwordreset-emailsent-capture": "رازینە گوڤاردئن تازە توٙ سی أنجومانامە توٙ کئ ها د هار کئل بییە.",
+       "passwordreset-emailerror-capture": "رازینە گوڤاردئن د أنجومانامە د نۊ زئنە کون کئل بییە،و ڤئ د هار دیاری میکە، ڤألی کئل بییئن ڤئ سی {{GENDER:$2|کاریار}} ناخوش سأرنجوم بییە:$1",
+       "changeemail": "Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªÙ\88Ù\99Ù\86Û\95 Ø¢Ù\84ئشت Ú©Ø§Ø±Û\8c Ø¨Ø£Ú©Û\8cت",
+       "changeemail-text": "ئÛ\8c Ù\86Ù\88Ù\85 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86ئ Ø³Û\8c Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªÙ\88Ù\99 Ù¾Ù\88ر Ø¨Ø£Ú©Û\8cت. Ø´Ù\88Ù\85ا Ø³Û\8c Ù¾Ù\88شت Ø±Ø§Ø³ Ú©Ø§Ø±Û\8c Ø¦Û\8c Ø¢Ù\84ئشت Ø¨Ø§Û\8cأد Ø±Ø§Ø²Û\8cÙ\86Û\95 Ú¯Ù\88ڤاردئÙ\86 Ø®Ù\88تÙ\88Ù\99Ù\86Û\95 Ø¨Ø£Ø²Ø¦Ù\86یت.",
+       "changeemail-no-info": "Ø´Ù\88Ù\85ا Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¯ Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¯Ø£Ø³Ø±Ø¦Ø³Û\8c Ø¯Ø§Ø´ØªÙ\88Ù\99Û\8cÛ\8cت Ø¨Ø§Ø³ Ø¨Û\8cاÛ\8cÛ\8cت Ú¤Ø§Ù\85Û\8cÙ\86.",
+       "changeemail-oldemail": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ø¦Û\8cسئÙ\86Û\8c:",
+       "changeemail-newemail": "تÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªØ§Ø²Û\95:",
        "changeemail-none": "(هيش كوم)",
-       "changeemail-password": "{{SITENAME}} رازینه گواردن شما:",
-       "changeemail-submit": "Ø¢Ù\84شت Ú©Ø±Ø¯Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87",
-       "changeemail-throttled": "Ø´Ù\85ا Ø§Û\8cسÙ\86Û\8c Ù\81رÙ\87 Ø³Û\8c Ù\88اÙ\85Û\8cÙ\86 Ø§Ù\88Ù\85ائÙ\86 ØªÙ\84اش Ú©Ø±Ø¯Û\8cتÙ\87.\n$1 Ù\84Ø·Ù\81Ù\86 Ø³Û\8c ØªÙ\84اش Ù\87Ù\86Û\8c ØµØ¨Ø± Ø¨Ú©Û\8cد.",
-       "resettokens": "تازه کردن نشونه یا",
-       "resettokens-text": "Ø´Ù\85ا Ø³Û\8c ØµÙ\84ا Ø¯Ø¦Ù\86 Ø¯Ø³Ø±Ø³Û\8c Ù\88Ù\87 Ø±Ø³Û\8cÙ\86Ù\87 Û\8cا Ø®ØµÙ\88صÛ\8c Ú©Ù\87 Ù\87ا Ø¯ Ø­Ø³Ø§Ù\88 Ø§Û\8cÚ\86Ù\86Û\8c ØªÙ\88 Ù\85Û\8c ØªÙ\88Ù\86Û\8cت Ø¯Û\8cارگرÛ\8cا Ù\86Ù\87 Ø¯ Ù\86Ù\88 Ø²Ù\86Ù\87 Ø¨Ú©Û\8cت.\n\nØ´Ù\85ا Ø§Ù\88سÙ\86Û\8c Ù\88اس Ø§Û\8c Ú©Ø§Ø± Ø¨Ú©Û\8cت Ú©Ù\87 Ø±Ø³Û\8cÙ\86Ù\87 Û\8cا Ø´Ù\85ا Ø³Û\8c Û\8cÙ\87 Ú©Ø³Û\8c ØªØ± Ø¨Ø¦Ø± Ø¨Û\8cÙ\87 Û\8cا Ø¯ Ø­Ø³Ø§Ù\88 Ø´Ù\85ا Ú\86Ù\84 Ø¨Û\8cÙ\87.",
-       "resettokens-no-tokens": "Ù\87Û\8cÚ\98 Ù\86Ø´Ù\88Ù\86Ù\87 Ø§Û\8c Ø³Û\8c ØªØ§Ø²Ù\87 Ú©Ø±Ø¯Ù\86 Ù\86ئ.",
-       "resettokens-tokens": "Ù\86Ø´Ù\88Ù\86Ù\87 یا:",
-       "resettokens-token-label": "$1 (ارزشت ØªØ§Ø²Ù\87: $2)",
-       "resettokens-watchlist-token": "دÛ\8cارگر Ø³Û\8c Ø­Ø±Ø¯Ù\86Û\8c ØªÙ\88رگÙ\87(اتÙ\85/آر Ø§Ø³ Ø§Ø³) Ø³Û\8c [[Ù\88Û\8cجÙ\87:سÛ\8cÙ\84 Ø¨Ø±Ú¯|Ø¢Ù\84شت Ø¯Ø¦Ù\86 Ø¨Ù\84Ú¯Ù\87 Û\8cا Ø¯ Ø³Û\8cÙ\84 Ø¨Ø±Ú¯ØªÙ\88]]",
-       "resettokens-done": "Ù\86Ø´Ù\88Ù\86Ù\87 Û\8cا ØªØ§Ø²Ù\87 Ø¨Û\8cÙ\87.",
-       "resettokens-resetbutton": "Ù\86Ø´Ù\88Ù\86Ù\87 Û\8cا Ø§Ù\86تخاÙ\88 Ø¨Û\8cÙ\87 ØªØ§Ø²Ù\87 Ø¨Ù\88ئÙ\86",
-       "bold_sample": "نیسسه توپر بیه",
-       "bold_tip": "Ù\86Û\8cسسÙ\87 ØªÙ\88پر Ø¨Ù\8aÙ\87",
-       "italic_sample": "Ù\86Û\8cسسÙ\87 Ù\83ج Ù\83Ù\88Ù\84Ù\87",
-       "italic_tip": "Ù\86Û\8cسسÙ\87 Ù\83ج Ù\83Ù\88Ù\84Ù\87",
-       "link_sample": "داسÙ\88Ù\86 Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88ند",
-       "link_tip": "هوم پیوند مینجایی",
-       "extlink_sample": "http://www.example.com Ø¯Ø§Ø³Ù\88Ù\86 Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88ند",
-       "extlink_tip": "هوم پیوند خارجی(د ویر داشتو)",
-       "headline_sample": "سرخط Ù\86Û\8cسسÙ\87",
-       "headline_tip": "رÛ\8cرتراز 2 Ø®Ø· Ø³Ø± Ù\88ن",
-       "nowiki_sample": "د Ø§Û\8cÚ\86Ù\87 Û\8cÙ\87 Ú¯Ù\84 Ù\86Û\8cسسÙ\87 Ø¨Û\8c Ø´Ù\84Ú© Ù\88ارد Ø¨Ú©Û\8cد",
-       "nowiki_tip": "Ø´Ù\84Ú© Ù\88Û\8cÚ©Û\8c Ù\86Ù\87 Ù\86دÛ\8cد Ø¨Ú¯Ø±",
+       "changeemail-password": "رازینە گوڤاردئن{{SITENAME}} شوما:",
+       "changeemail-submit": "Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95",
+       "changeemail-throttled": "Ø´Ù\88Ù\85ا Ø³Û\8c Ú¤Ø§Ù\85Û\8cÙ\86 Ø¦Ù\88Ù\99Ù\85ائÙ\86 Ù\81ئرÛ\95 ØªØ¦Ù\84اش Ú©Ø¦Ø±Ø¯Û\8cتÛ\95.\n$1 Ù\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ø³Û\8c ØªØ¦Ù\84اش Ù\87Ø£Ù\86Û\8c Ú¯Ù\88رÛ\8c Ø¨Ø¦Ø³Û\8cت.",
+       "resettokens": "تازە کاری نئشوٙنە یا",
+       "resettokens-text": "Ø´Ù\88Ù\85اس Ø³Û\8c ØµØ¦Ù\84ا Ø¯Ø£Ø¦Ù\86 Ø¯Ø£Ø³Ø±Ø³Û\8c Ú¤Ø¦ Ø¯Ø§Ø¯Û\95 Û\8cا Ø®Ù\88صÙ\88Ù\99صÛ\8c Ú©Ø¦ Ù\87اÙ\86 Ø¯ Ø­Ø¦Ø³Ø§Ú¤ Ø¦Û\8cÚ\86ئÙ\86Û\8c ØªÙ\88Ù\99 Ù\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cت Ø¯Û\8cارگأرÛ\8cا Ù\86Û\95 Ø¯ Ù\86Û\8a Ø²Ø¦Ù\86Û\95 Ø¨Ø£Ú©Û\8cت.\n\nئÙ\88Ù\99سئ Ø´Ù\88Ù\85ا Ø¨Ø§Û\8cأد Ø¦Û\8c Ú©Ø§Ø± Ù\86Û\95 Ø£Ù\86جÙ\88Ù\85 Ø¨Ø¦Û\8cت Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¯Ø§Ø¯Û\95 Û\8cا Ø´Ù\88Ù\85ا Û\8cا Ú¤Ø§ Ú©Ø¦Ø³Û\8c Ù\87Ø£Ù\86Û\8c Ø¨Ø£Ù\87رکارÛ\8c Ø¨Û\8cÛ\8cÛ\95 Û\8cا Û\8cÛ\95 Ú©Ø¦ Ø¯ Ø­Ø¦Ø³Ø§Ú¤ Ø´Ù\88Ù\85ا Ú\86Ù\88Ù\84 Ø¨Û\8cÛ\8cÛ\95.",
+       "resettokens-no-tokens": "Ù\87Û\8cÚ\86 Ù\86ئشÙ\88Ù\99Ù\86Û\95 Û\8cÛ\8c Ø³Û\8c Ø¯ Ù\86Û\8a Ø²Ø¦Ù\86Û\95 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ù\86Û\8c.",
+       "resettokens-tokens": "Ù\86ئشÙ\88Ù\99Ù\86Û\95 یا:",
+       "resettokens-token-label": "$1 (أرزاÛ\8cئشت ØªØ§Ø²Û\95: $2)",
+       "resettokens-watchlist-token": "دÛ\8cارگأر Ø³Û\8c Ø­Ù\88ڤاÙ\84 Ø­Ù\88Ù\99Ù\86 ØªÙ\88رگÛ\95(أتÙ\88Ù\85/آر Ø¦Ø³ Ø¦Ø³) Ø³Û\8c [[Special:سئÛ\8cÙ\84 Ø¨Ø£Ø±Ú¯|Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا Ø¯ Ø³Ø¦Û\8cÙ\84 Ø¨Ø£Ø±Ú¯Ø¦ØªÙ\88Ù\99]]",
+       "resettokens-done": "Ù\86ئشÙ\88Ù\99Ù\86Û\95 Û\8cا ØªØ§Ø²Ù\87 Ø¨Û\8cÛ\8cÙ\86Û\95",
+       "resettokens-resetbutton": "Ù\86ئشÙ\88Ù\99Ù\86Û\95 Ú¯Ù\88Ù\84ئ Ú¤Ù\88رÚ\86Û\8cÛ\95 Ø¯ Ù\86Ù\88Ù\99 Ø²Ø¦Ù\86Û\95 Ø¨Û\8cÙ\86Û\95",
+       "bold_sample": "نیسسە توٙپور",
+       "bold_tip": "Ù\86Û\8cسئسÛ\95 ØªÙ\88Ù\99Ù¾Ù\88ر",
+       "italic_sample": "Ù\86Û\8cسئسÛ\95 Ú©Ø£Ø¬ Ù\88 Ú©Ù\88Ù\84Û\95",
+       "italic_tip": "Ù\86Û\8cسئسÛ\95 Û\8cا Ú©Ø£Ø¬ Ù\88 Ú©Ù\88Ù\84Û\95",
+       "link_sample": "داسÙ\88Ù\99Ù\86 Ù\87Ù\88Ù\85 Ù¾Ø¦Û\8cڤأند",
+       "link_tip": "هوم پئیڤأند مینجایی",
+       "extlink_sample": "http://www.example.com Ø¯Ø§Ø³Ù\88Ù\99Ù\86 Ù\87Ù\88Ù\85 Ù¾Ø¦Û\8cڤأند",
+       "extlink_tip": "هوم پئیڤأند خارئجی(د ڤیر داشتوٙئیت)",
+       "headline_sample": "سأرخأط Ù\86Û\8cسئسÛ\95",
+       "headline_tip": "رÛ\8cتئراز 2 Ø®Ø£Ø· Ø³Ø£Ø±Ú¤Ø£ن",
+       "nowiki_sample": "د Ø¦Û\8cÚ\86ئ Û\8cئ Ú¯Ø¦Ù\84 Ù\86Û\8cسئسÛ\95 Ø¨Û\8c Ø´Ø¦Ú©Ù\84 Ú¤Ø§Ø±Ø¦Ø¯ Ø¨Ø£Ú©Û\8cت.",
+       "nowiki_tip": "د Ø´Ø¦Ú©Ù\84 Ú¤Û\8cÚ©Û\8c ØªÛ\8cÛ\95 Ù¾Ù\88Ù\99Ø´Û\8c Ø¨Ø£Ú©",
        "image_sample": "Example.jpg",
-       "image_tip": "جاÙ\86Û\8cا Ú\86ار Ù\82ر Ú¯Ø±ØªÙ\87",
+       "image_tip": "جاÙ\86Û\8cا Ú\86ار Ù\82ئر Ú¯Ø¦Ø±Ø¦ØªÛ\95",
        "media_sample": "Example.ogg",
-       "media_tip": "جانیا هوم پیوند",
-       "sig_tip": "اÙ\85ضا Ø´Ù\85ا Ù\88ا گاتدیس",
-       "hr_tip": "خط Ø¢Ø³Ù\88 Ù\88Ù\86Ù\87(سÙ\88ا Ø³Ù\88ا Ù\88Ù\87 Ú©Ø§Ø± Ø¨Û\8cئرشÙ\88)",
-       "summary": "چكسته",
-       "subject": "موضو/سر خط:",
-       "minoredit": "يه ويرايشت كؤچكيه",
-       "watchthis": "ديئن ای بلگه",
-       "savearticle": "اÙ\85اÛ\8cÛ\8cÙ\87 Ú©Ø±Ø¯Ù\86 Ø¨Ù\84Ú¯Ù\87",
-       "preview": "پيش سيل",
-       "showpreview": "Ù¾Ù\8aØ´ Ø³Û\8cÙ\84 Ù\86Ø´Ù\88Ù\86 Ø¨Ù\8aئÙ\87",
-       "showdiff": "آلشتيانه نشون بيئه",
+       "media_tip": "جانیا هوم پئیڤأند",
+       "sig_tip": "ئÙ\85ضا Ø´Ù\88Ù\85ا Ú¤ا گاتدیس",
+       "hr_tip": "خأط Ø¢Ø³Ù\88Ù\99 Ú¤Ø£Ù\86Û\95(جئگا Ø¬Ø¦Ú¯Ø§ Ú¤Ø¦ Ú©Ø§Ø± Ú¯Ø¦Ø±Ø¦ØªØ¦Ù\86)",
+       "summary": "چئکئسە",
+       "subject": "ذاسوٙن/سأرتال:",
+       "minoredit": "یە یئ گئل ڤیرایئشت کوچئکە",
+       "watchthis": "دیئن ئی بألگە",
+       "savearticle": "ئÙ\85اÛ\8cÛ\95 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø¨Ø£Ù\84Ú¯Û\95",
+       "preview": "پيش سئيل",
+       "showpreview": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£Ø¦Ù\86 Ù¾Û\8cØ´ Ø³Ø¦Û\8cÙ\84",
+       "showdiff": "نئشوٙ دأئن آلئشت کاریا",
        "blankarticle": "<strong>زنئار:</strong> بلگه ای که شما دروس کردیته حالیه.\nار شما د نو ری \"{{int:savearticle}}\" بپورنیت, بلگه وه شکل که هیچ مینونه ای دش نبا دروس بوئه.",
-       "anoneditwarning": "<strong>زئÙ\86ار:</strong> Ø´Ù\85ا Ù\87Ù\86Û\8c Ù\86Û\8cÙ\88Ù\85اتÙ\87 Ù\88اÙ\85Û\8cÙ\86. ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\85ا Ù\87ر Ú¯Ø§ØªÛ\8c Ú©Ù\87 Ø¢Ù\84شتÛ\8c Ø±Ø§Ø³ Ø¨Ú©Û\8cت Ø³Û\8c Ú©Ù\84 Ø®Ù\84Ú© Ø¯Û\8cارÙ\87. Ø§Ø± <strong>[$1 Ø±Ù\88ئÛ\8cت Ù\88اÙ\85Û\8cÙ\86]</strong> Û\8cا <strong>[$2 Û\8cÙ\87 Ú¯Ù\84 Ø­Ø³Ø§Ù\88 Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ø¨Ú©Û\8cت]</strong>Ø\8c Ù\88Û\8cراÛ\8cشتÛ\8cا Ø´Ù\85ا Ù\88Ù\87 Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø®Ù\88تÙ\88Ù\86 Ø¯Û\8cارÛ\8c Ù\85Û\8c Ú©Ù\87Ø\8c Ù\88 Ù\88ا Ú\86Û\8cا Ø¨Û\8cتر Ù\87Ù\86Û\8c.",
-       "anonpreviewwarning": "<em>Ø´Ù\85ا Ù\86Û\8cÙ\88Ù\85ائتÙ\87 Ù\88اÙ\85Û\8cÙ\86. ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\85ا Ø¯ Ù\88Û\8cرگار Ù\88Û\8cراÛ\8cشت Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ø§Ù\85اÛ\8cÛ\8cÙ\87 Ø¨Ù\88ئÙ\87.</em>",
-       "missingsummary": "<strong>د ویر ونا:</strong> شما هنی یه گل چکسته ویرایشتی نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
-       "selfredirect": "<strong>هشدار:</strong> شما د حال و بار آلشت دئن لا بلگه وه خوش هیئن.\nشایت دال اشتوایی سی آلشت دئن لا نه انتخاو کردیته، یا شایت بلگه نه اشتوایی ویرایشت می کیت.\n\nار ری \"{{int:savearticle}}\" دوبار بپورنیت، آلشت دئن لا دروس بوئه.",
-       "missingcommenttext": "لطفن د ایچه ویر و باور بیئتو",
-       "missingcommentheader": "<strong>د ویر ونا:</strong> شما هنی یه گل موضوع/سرخط سی ای ویر و باور نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
-       "summary-preview": "چکسته پیش سیل:",
-       "subject-preview": "پیش سیل موضو سرخط",
-       "previewerrortext": "یه گل خطا د گاتی که شما میهاستیت یه گل پیش سیل د آلشتیاتو داشتوین پیش اومائه.",
-       "blockedtitle": "کاریار نهاگری بیه",
-       "blockedtext": "<strong>Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\85ا Û\8cا ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\85ا Ù\82Ù\84Ù\81 Ø¨Û\8cÙ\87.</strong>\n\n\n$1 Ù\88Ù\86Ù\87 Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\87.\nدÙ\84Û\8cÙ\84 Ù\87ا Ø¯ Ø§Û\8cÚ\86Ù\87<em>$2</em>.\n\nشرÙ\88 Ø¯ Ù\82Ù\84Ù\81 Ø¨Û\8cÛ\8cÙ\86:$8\nآخر Ù\82Ù\84Ù\81 Ø¨Û\8cÛ\8cÙ\86:$6\nکارÛ\8cار Ù\88رتÛ\8cÙ\87 Ù\82Ù\84Ù\81 Ø¨Û\8cÙ\87:$7\n\nØ´Ù\85ا Ù\85Û\8c ØªÙ\88Ù\86Û\8cت Ù\88ا $1 Û\8cا [[{{MediaWiki:Grouppage-sysop}}|دÛ\8cÙ\88Ù\88Ù\86دار]] Ù\87Ù\86Û\8c Ù¾Û\8cÙ\88Ù\86د Ø¨Ø¦Ø±Û\8cت Ù\88 Ø³Û\8c Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\86 Ú\86Ú© Ú\86Ù\86Ù\87 Ø¨Ø²Ù\86Û\8cت.\nاÙ\84Ù\88ت Ø¯ Ù\88Û\8cر Ø¯Ø§Ø´ØªÙ\88Û\8cت Ú©Ù\87 Ø´Ù\85ا Ù\86Ù\85Û\8c ØªÙ\88Ù\86Û\8cت Ø¯ Ø®ØµÙ\88صÛ\8cت Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ú©Ù\84 Ú©Ø±Ø¯Ù\86 Ø³Û\8c Ø§Û\8c Ú©Ø§Ø±Ø¨Ø± Ø§Ø³ØªÙ\81ادÙ\87 Ø¨Ú©Û\8cت Ù\85ئر  Û\8cÙ\87 Ú¯Ù\84 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 Ù\85عتÙ\88ر Ø¯ [[Special:Preferences|ترجÛ\8cØ­Û\8cا Ú©Ø§Ø±Û\8cارÛ\8c]] Ø®Ù\88تÙ\88 Ù\85عÙ\84Ù\88Ù\85 Ú©Ø±Ø¯Ù\87 Ø¨Ù\88Û\8cت Ù\88 Ø¨Ø§Û\8cد Ø§Ù\85کاÙ\86 Ù\88Ù\87 Ú©Ø§Ø± Ø¨Ø³ØªÙ\86 Ù\88Ù\87 Ù\86Ù\87 Ø¯Ø§Ø´ØªÙ\88Û\8cتÙ\88\nتÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø¢Û\8c Ù¾Û\8c Ø§Û\8cسÙ\86Û\8c Ø´Ù\85ا $3 Ø¦Ù\87Ø\8c Ù\88 Ù\86Ù\88Ù\85 Ø¯Û\8cارکÙ\86 Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\86 #$5 Ø¦Ù\87.\nÙ\84Ø·Ù\81ا Ù\87Ù\85Ù\87 Ø¬Ø²Ø¦Û\8cات Ù\86Ù\87 Ø¯ Ù\87ر Ø­Ø§Ø³ØªÙ\87 Ø§Û\8c Ú©Ù\87 Ø¯Ø§Ø±Û\8cت Ø¨Ù\88ئیت.",
-       "autoblockedtext": "نوم کاریاری شما یا تیرنشون آی پی شما سی یه که یه گل کاریاری هنی وه کارش بسته خودانجومن قلف بیه $1 ونه قلف کرده.\nدلیل ها د ایچه\n\n:<em>$2</em>.\n\nشرو د قلف بیین:$8\nآخر قلف بیین:$6\nکاریار ورتیه قلف بیه:$7\n\nشما می تونیت وا $1 یا [[{{MediaWiki:Grouppage-sysop}}|دیووندار]] هنی پیوند بئریت و سی قلف کردن چک چنه بزنیت.\n\nالوت د ویر داشتویت که شما نمی تونیت د خصوصیت انجومانامه کل کردن سی ای کاربر استفاده بکیت مئر  یه گل تیرنشون انجومانامه معتور د [[Special:Preferences|ترجیحیا کاریاری]] خوتو دیاری کرده بویت و باید امکان وه کار بستن وه نه داشتویت.\n\nتیرنشون آی پی ایسنی شما $3 ئه، و نوم دیارکن قلف کردن #$5 ئه.\nلطفا همه جزئیات نه د هر حاسته ای که داریت بوئیت.",
-       "blockednoreason": "Ù\87Û\8cÚ\98 Ø¯Ù\84Û\8cÙ\84Û\8c Ø¯Ø¦Ù\87 Ù\86بÛ\8cÙ\87",
-       "whitelistedittext": "شما باید $1 سی ویرایشت بلگیا",
-       "confirmedittext": "Ø´Ù\85ا Ù\88اس Ø¯Ù\85ا Ù\88Û\8cراÛ\8cشت Ú©Ø±Ø¯Ù\86 Ø¨Ù\84Ú¯Ù\87 Û\8cا ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø§Ù\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87 ØªÙ\88Ù\86Ù\87 Ù¾Ø´Øª Ø±Ø§Ø³ Ø¨Ú©Û\8cت.\nÙ\84Ø·Ù\81ا Û\8cÙ\87 Ú¯Ù\84 ØªÛ\8cرÙ\86Ø´Ù\88Ù\86 Ø®Ù\88 Ø³Û\8c [[Special:اÙ\88Ù\84Ù\88Û\8cتÛ\8cا|اÙ\88Ù\84Ù\88Û\8cتÛ\8cا Ú©Ø§Ø±Û\8cار]] Ø¨نیت.",
-       "nosuchsectiontitle": "نبوئه بشخ پیدا بوئه",
-       "nosuchsectiontext": "Ø´Ù\85ا Ø³Û\8c Ù\88Û\8cراÛ\8cشت Ú©Ø±Ø¯Ù\86 Ø¬Ø§Û\8cÛ\8c Ú©Ù\87 Ù\88جÙ\88د Ù\86ارÙ\87 ØªÙ\84اش Ú©Ø±Ø¯Û\8cتÙ\87.\nشات Ù\88Ù\87 Ø§Ù\88سÙ\87 Ú©Ù\87 Ø´Ù\85ا Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\87 Ù\85Û\8c Ø¯Û\8cئتÙ\87 Ø¬Ø§ Ù\88Ù\87 Ø¬Ø§ Ø¨Û\8cÙ\87 Û\8cا Ù¾Ø§Ú©Ø³Ø§ Ø¨Û\8cÙ\87.",
-       "loginreqtitle": "وامین اومائن لازمه",
-       "loginreqlink": "وا مین اومائن",
-       "loginreqpagetext": "$1 لطف بکید بلگه یا هنی نه بوینیت",
-       "accmailtitle": "رازینه گواردن کل بی",
-       "accmailtext": "یه گل رازینه گواردن شامسکی سی[[چک چنه کاریار:$1|$1]] سی $2 کل بیه.بوئه وه نه د گات وه کار بستن بلگه اومائن وامین د <em>[[Special:آلشت دئن رازینه گواردن|آلشت دئن رازینه گواردن]]</em>  آلشت دئه بوئه.",
-       "newarticle": "تازه",
-       "newarticletext": "Ø´Ù\85ا Ù\88ادÙ\85ا Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88Ù\86دÛ\8c Ù\87ئÛ\8cت Ú©Ù\87 Ù\88جÙ\88د Ù\86ارÙ\87.\nسÛ\8c Ø±Ø§Ø³ Ú©Ø±Ø¯Ù\86 Ø¨Ù\84Ú¯Ù\87.شرÙ\88 Ø¯ Ù\86Û\8cسÙ\86Ù\86 Ù\85ئÙ\86 Ø¬Ø¹Ù\88Ù\87 Ù\87ارÛ\8c Ø¨Ú©Û\8cد(سÛ\8cÙ\84[$1 ] Ø³Û\8c Ø¯Ù\88Ù\86سÙ\85Ù\86Û\8c Ø¨Û\8cشتر Ø¨Ú©Û\8cد).\nار Ø´Ù\85ا Ø³Û\8c Ø§Ø´ØªÙ\88ا Ú©Ø±Ø¯Ù\86 Ù\87اÛ\8cئÙ\86 Ø§Û\8cÚ\86Ù\87Ø\8c Ø¯Ú¯Ù\85Ù\87 Ù\88ادÙ\85ا Ø±Ø¦ØªÙ\86 Ø¯Ù\88ارتÙ\87 Ù\86Û\8cئر ØªÙ\88Ù\86Ù\87 Ø¨Ù¾Ù\88رنیت.",
+       "anoneditwarning": "<strong>زئÙ\86ار:</strong> Ø´Ù\88Ù\85ا Ù\87Ø£Ù\86Û\8c Ù\86Û\8cÙ\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86. ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\88Ù\85ا Ø³Û\8c Ù\87أر Ú¯Ø§ØªÛ\8c Ú©Ø¦ Ø¢Ù\84ئشتکارÛ\8c Ø¨Ø£Ú©Û\8cت Ø³Û\8c Ú©Ù\88Ù\84 Ø®Ø£Ù\84Ú© Ø¯Û\8cارÛ\8c Ù\85Û\8c Ú©Û\95. Ø£Ø± <strong>[$1 Ø±Ù\88ئÛ\8cت Ú¤Ø§Ù\85Û\8cÙ\86]</strong> Û\8cا <strong>[$2 Û\8cئ Ú¯Ø¦Ù\84 Ø­Ø¦Ø³Ø§Ú¤ Ú©Ø§Ø±Û\8cارÛ\8c Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت]</strong>Ø\8c Ú¤Û\8cراÛ\8cئشتÛ\8cا Ø´Ù\88Ù\85ا Ú¤Ø¦ Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø®Ù\88تÙ\88Ù\99 Ø¯Û\8cارÛ\8c Ù\85Û\8c Ú©Û\95 Ù\88 Ø³Û\8c Ø´Ù\88Ù\85ا Ø¨Û\8cتأرÛ\95.",
+       "anonpreviewwarning": "<em>Ø´Ù\88Ù\85ا Ù\86Û\8cÙ\88Ù\99Ù\85اÛ\8cتÛ\95 Ú¤Ø§Ù\85Û\8cÙ\86. ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\88Ù\85ا Ø¯ Ú¤Û\8cرگار Ú¤Û\8cراÛ\8cئشت Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¦Ù\85اÛ\8cÛ\95 Ø¨Ù\88Ù\99Û\95.</em>",
+       "missingsummary": "<strong>ڤیر دیارکو:</strong> شوما هأنی یئ گئل چئکئسە ڤیرایئشتی نە نئها ئمایە کاری نأکئردیتە.\nأر شوما د نۊ د ری \"{{int:savearticle}}\" بأپوٙرنیت، ڤیرایئشت کاری شوما حالی ئمایە بوٙە.",
+       "selfredirect": "<strong>هوشدار:</strong> شوما د حال و بال ڤاگأردوٙنی ئی بألگە د خوش هیین.\nگاسی دال ئشتئڤایی سی ڤاگأردوٙنی ئنتئخاڤ کئردیتە، یا گاسی بألگە نە ئشتئڤایی ڤیرایئشت کاری می کیت.\nأر ری \"{{int:savearticle}}\" دۊ گئل بأپوٙرنیت، ڤاگأردوٙنی راس موٙە.",
+       "missingcommenttext": "لوطف بأکیت ئیچئ ڤیر و باڤأرئ خوتوٙنە بأنیست.",
+       "missingcommentheader": "<strong>د ڤیر ڤونا:</strong> شوما هأنی یئ گئل داسوٙن/سأرڤأن سی ئی ڤیر و باڤأر نئها ئمایە نأکئردیتە.\nأر شوما یئ گئل هأنی ری \"{{int:savearticle}}\" بأپوٙرنیت، ڤیرایئشت کاری شوما حالی ئمایە بوٙە.",
+       "summary-preview": "چئکئسە پیش سئیل:",
+       "subject-preview": "داسوٙن/پیش سئیل سأرخأط:",
+       "previewerrortext": "یئ گئل خأطا د گاتی کئ شوما میهاستیت یئ گئل پیش سئل د آلئشتیاتوٙ داشتوٙین پیش ئوٙماە.",
+       "blockedtitle": "کاریار نئهاگئری بی",
+       "blockedtext": "<strong>Ù\86Ù\88Ù\85 Ú©Ø§Ø±Û\8cارÛ\8c Ø´Ù\88Ù\85ا Û\8cا ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¢Û\8c Ù¾Û\8c Ø´Ù\88Ù\85ا Ù\86ئÙ\87اگئرÛ\8c Ø¨Û\8cÛ\8cÛ\95.</strong>\n\n\n$1 Ú¤Ø¦Ù\86Û\95 Ù\86ئÙ\87اگئرÛ\8c Ú©Ø¦Ø±Ø¯Û\95.\nدأÙ\84Û\8cÙ\84ئش Ù\87ا Ø¯ Ø¦Û\8cÚ\86ئ<em>$2</em>.\n\nØ´Ù\88رÙ\88Ù\99 Ø¯ Ù\86ئÙ\87اگئرÛ\8c:$8\nآخئر Ù\86ئÙ\87اگئرÛ\8c:$6\nکارÛ\8cارÛ\8c Ú©Ø¦ Ù\87ا Ú¤Ø£Ø±ØªÛ\8cÛ\95 Ù\88 Ù\86ئÙ\87اگئرÛ\8c Ø¨Û\8cÛ\8cÛ\95:$7\n\nØ´Ù\88Ù\85ا Ù\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cت Ú¤Ø§ $1 Û\8cا [[{{MediaWiki:Grouppage-sysop}}|سأردÛ\8cÚ¤Ù\88Ù\99Ù\86کار]] Ù\87Ø£Ù\86Û\8c Ù¾Ø¦Û\8cڤأÙ\86د Ø¨Ø¦Û\8cرÛ\8cت Ù\88 Ø³Û\8c Ù\86ئÙ\87اگئرÛ\8c Ú¤Ø§ Ú¤Ø¦ Ú\86Ø£Ú© Ú\86ئÙ\86Û\95 Ú©Ø§Ø±Û\8c Ø¨Ø£Ú©Û\8cت.\nØ£Ù\84ڤأت Ø¯ Ú¤Û\8cر Ø¯Ø§Ø´ØªÙ\88Ù\99ئÛ\8cت Ú©Ø¦ Ø´Ù\88Ù\85ا Ù\86ئÙ\85Û\8c ØªÙ\88Ù\99Ù\86Û\8cت Ø®Ù\88صÛ\89صÛ\8cأت Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ú©Ø¦Ù\84 Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø³Û\8c Ø¦Û\8c Ú©Ø§Ø±Û\8cار Ù\86Û\95 Ú¤Ø¦ Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cتØ\8c Ù\85أر Û\8cÛ\95 Ú©Ø¦ Û\8cئ Ú¯Ø¦Ù\84 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 Ù\86ازار Ù\86Û\95 [[Special:Preferences|تأرجÛ\8cحات Ú©Ø§Ø±Û\8cارÛ\8c]] Ø®Ù\88تÙ\88Ù\99 Ø¯Û\8cارÛ\8c Ú©Ø¦Ø±Ø¯Ø¦Ù\88Ù\99Û\8cت Ù\88 ØªÙ\88Ù\99Ù\86ئستÙ\88Ù\99Û\8cت Ú¤Ø¦ Ù\86Û\95 Ú¤Ø¦ Ú©Ø§Ø± Ø¨Ø¦Û\8cرÛ\8cت .\nتÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø¢Û\8c Ù¾Û\8c Ø¦Û\8cسئÙ\86Û\8c Ø´Ù\88Ù\85ا $3Û\95Ø\8c Ù\88 Ù\86Ù\88Ù\85 Ø¯Û\8cارکÙ\88Ù\86 Ù\86ئÙ\87اگئرÛ\8c #$5 Û\95.\nÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Ù\87Ø£Ù\85Û\95 Ú\86Û\8cاÙ\86Û\95 Ø¯ Ù\87أر Ø­Ø§Ø³ØªÛ\95 Û\8cÛ\8c Ú©Ø¦ Ø¯Ø§Ø±Û\8cت Ø¨Ù\88Ù\99ئیت.",
+       "autoblockedtext": "<strong>نوم کاریاری شوما یا تیرنئشوٙن آی پی شوما سی یە کئ یئ گئل کاریاری هأنی ڤئ نە ڤئ کار گئرئتە خودأنجومأن ڤئ دأس $1 نئهاگئری بییە.</strong>\n\n\n$1 ڤئنە نئهاگئری کئردە.\nدألیلئش ها د ئیچئ\n<em>$2</em>.\n\nشوروٙ د نئهاگئری:$8\nآخئر نئهاگئری:$6\nکاریاری کئ ها ڤأرتیە و نئهاگئری بییە:$7\n\nشوما می توٙنیت ڤا $1 یا [[{{MediaWiki:Grouppage-sysop}}|سأردیڤوٙنکار]] هأنی پئیڤأند بئیریت و سی نئهاگئری ڤا ڤئ چأک چئنە کاری بأکیت.\nألڤأت د ڤیر داشتوٙئیت کئ شوما نئمی توٙنیت خوصۉصیأت أنجومانامە کئل کئردئن سی ئی کاریار نە ڤئ کار بئیریت، مأر یە کئ یئ گئل تیرنئشوٙن أنجومانامە نازار نە [[Special:Preferences|تأرجیحات کاریاری]] خوتوٙ دیاری کئردئوٙیت و توٙنئستوٙیت ڤئ نە ڤئ کار بئیریت .\nتیرنئشوٙن آی پی ئیسئنی شوما $3ە، و نوم دیارکون نئهاگئری #$5 ە.\nلوطف بأکیت هأمە چیانە د هأر حاستە یی کئ داریت بوٙئیت.",
+       "blockednoreason": "Ù\87Û\8cÚ\86 Ø¯Ø£Ù\84Û\8cÙ\84Û\8c Ú¯Ù\88تÛ\95 Ù\86أبÛ\8cÛ\8cÛ\95",
+       "whitelistedittext": "$1 لوطف بأکیت بألگە یا نە ڤیرایئشت کاری بأکیت.",
+       "confirmedittext": "Ø´Ù\88Ù\85ا Ø¨Ø§Û\8cأد Ø¯Ø¦Ù\85ا Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Û\8cا ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95 ØªÙ\88Ù\99Ù\86Û\95 Ù¾Ù\88شت Ø±Ø§Ø³ Ø¨Ø£Ú©Û\8cت.\nÙ\84Ù\88Ø·Ù\81 Ø¨Ø£Ú©Û\8cت Û\8cئ Ú¯Ø¦Ù\84 ØªÛ\8cرÙ\86ئشÙ\88Ù\99Ù\86 Ù\86ازار Ø³Û\8c [[Special:Ú\86Û\8cا Ù\85Ù\88Ù\87ئÙ\85تئر|Ú\86Û\8cا Ù\85Ù\88Ù\87ئÙ\85تئر Ø³Û\8c Ú©Ø§Ø±Û\8cار]] Ø¨Ø£نیت.",
+       "nosuchsectiontitle": "بأرجا پئیدا نأبوٙە",
+       "nosuchsectiontext": "Ø´Ù\88Ù\85ا Ø³Û\8c Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ø¬Ø§Û\8cÛ\8c Ú©Ø¦ Ú¤Ù\88جÙ\88Ù\99د Ù\86ارÛ\95 ØªØ¦Ù\84اش Ú©Ø¦Ø±Ø¯Û\8cتÛ\95.\nگاسÛ\8c Ú¤Ø¦ Ø¦Ù\88Ù\99سئ Ú©Ø¦ Ø´Ù\88Ù\85ا Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\95 Ø¯Ø¦Û\8cتÛ\95 Ø¬Ø§ Ú¤Ø¦ Ø¬Ø§ Ø¨Û\8cÛ\8cÛ\95 Û\8cا Ù¾Ø§Ú©Ø³Ø§ Ø¨Û\8cÛ\8cÛ\95.",
+       "loginreqtitle": "ڤامین ئوٙمائن گأرأکە",
+       "loginreqlink": "ڤامین ئوٙمائن",
+       "loginreqpagetext": "$1 لوطف بأکیت بألگە یا هأنی نە سئیل بأکیت.",
+       "accmailtitle": "رازینە گوڤاردئن کئل بی",
+       "accmailtext": "یئ گئل رازینە گوڤاردئن شامسأکی سی[[User talk:$1|$1]] سی $2 کئل بییە.بوٙە ڤئنە د گات ڤئ کار گئرئتئن بألگە ڤامین ئوٙمائن <em>[[Special:آلئشت دأئن رازینە گوڤاردئن|آلئشت دأئن رازینە گوڤاردئن]]</em> آلئشت کاری با.",
+       "newarticle": "تازە",
+       "newarticletext": "Ø´Ù\88Ù\85ا Ù\87اÛ\8cÛ\8cÙ\86 Ú¤Ø§ Ø¯Ø¦Ù\85ا Ù\87Ù\88Ù\85 Ù¾Ø¦Û\8cڤأÙ\86دÛ\8c Ú©Ø¦ Ú¤Ù\88جÙ\88Ù\99د Ù\86ارÛ\95.\nسÛ\8c Ø±Ø£Ú¤Ø£Ù\86دÛ\8cارÛ\8c Ø¨Ø£Ù\84Ú¯Û\95.Ø´Ù\88رÙ\88Ù\99 Ø¨Ø£Ú©Û\8cت Ù\85Û\8cÙ\86ئ Ø¬Ø£Ú¤Û\95 Ù\87ارÛ\8c Ø¨Ø£Ù\86Û\8cسÛ\8cت (سÛ\8c Ø¯Ù\88Ù\99Ù\86ئسئÙ\86 Ø¨Û\8cشتئر Ø³Ø¦Û\8cÙ\84 [$1 ] Ø¨Ø£Ú©Û\8cت).\nأر Ø´Ù\88Ù\85ا Ø³Û\8c Ø¦Ø´ØªØ¦Ú¤Ø§ Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ù\87ائÛ\8cت Ø¦Û\8cÚ\86ئØ\8c Ø±Û\8c Ø¯Ù\88Ú¯Ù\85Û\95 Ú¤Ø§Ø¯Ø¦Ù\85ا Ø±Ø£ØªØ¦Ù\86 Ø¯Ù\88ڤارتÛ\95 Ù\86Û\8cأر Ø¨Ø£Ù¾Ù\88Ù\99رنیت.",
        "anontalkpagetext": "----",
-       "noarticletext": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د[[Special:Search/{{PAGENAME}}|بگردید]] د ای بلگه یا د بلگیا هنی یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هنی پی جوری بوئه]</span>، <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} یای ای بلگه نه ویرایشت بکید]</span>.",
-       "noarticletext-nopermission": "د تازه یا د ای بلگه نیسسه نی.\nشما می تونیت د [[Special:Search/{{PAGENAME}}|بگردید]] د ای بلگه یا د بلگیا هنی یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}   د هنی پی جوری بوئه]</span> اما شما حق ناریتو ای بلگه نه راس بکیت.",
-       "missing-revision": "وانئیری #$1 د بلگه ای که نومش ونه \"{{FULLPAGENAME}}\" وجود ناره.\n\nشایت بانی جاونه وه وا یه گل ویرگار وه هنگوم نبیه که د یه گل بلگه پاکسا بیه هوم پیوند بیه بوئه.\nشایت جزئیات د   [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]  پیدا بوئن.",
-       "userpage-userdoesnotexist": "حساو کاریاری\"$1\" ثوت نام نبیه.\nار میهایت ای بلگه نه بسازیتو یا ویرایشت بکیت یه گل وارسی انجوم بئیت.",
-       "userpage-userdoesnotexist-view": "حساو کارور\"$1\" ثوت نبیه.",
-       "blocked-notice-logextract": "ای کاریار ایسنی دسرسی ناره.\nآخری پهرستنومه قلف ورودی د هار ایچه سی سرچشمه آماده بیه:",
-       "clearyourcache": "<strong>د ویر داشتویت:</strong> نها اماییه کاری, شات مژبور وه وه کار ونن ویرگه نهو دوارته نیئر خوتو سی دیئن ای آلشتیا بوئیت .\n* <strong>فایرفاکس/ سفری:</strong> بپورنیت ری<em>شیفت</em> اوسه که می پورنیت<em>د نو سوار بوئه</em>یا هنی ری <em>Ctrl-F5</em> بپورنیت یا<em>Ctrl-R</em> (<em>⌘-R</em> د سامونه مک)\n* <strong>گوگل کروم:</ strong>بپورنیت ری <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> یا د سامونه)\n* <strong>اینترنت اکسپلورر:</strong> <em>Ctrl</em> واداریت اوسه که می پورنیت ری <em>Refresh</em>, یل بپورنیت ری<em>Ctrl-F5</em>\n* <strong>اوپرا:</strong> ویرگه نهو نه د <em>اوزاریا→ اولویتیا پاک بکیت</em>",
-       "usercssyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن سی اس اس تازه دما اماییه کاری وه کار بیئریت.",
-       "userjsyoucanpreview": "<strong>نکته:</strong> د دگمه \"{{int:showpreview}}\" سی آزماشت کردن دما اماییه کاری جاوا اسکریپت تازه وه کار بیئریت.",
-       "usercsspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت سی اس اس کاریاری تونه پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
-       "userjspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت جاوا اسکریپت کاریاری تونه پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
-       "sitecsspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت ای سی اس اس  نه فقط پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
-       "sitejspreview": "<strong>د ویر داشتوئیت که شما فقط می تونیت ای ای جاوا اسکریپت نه فقط پیش سیل بکیت. وه د ایسنی هنی اماییه نبیه!</strong>",
-       "userinvalidcssjstitle": "<strong>زئنار:</strong> پوسه \"$1\" نیئش.\nسی اس اس جاونه و بلگه یا جاوا اسکریپت  سرون وا حرف کؤچک نه وه کار بسته، همچنو{{ns:کاریار}}:فو/وکتور.سی اس اس چی د ضد{{ns:کاریار}}:فو/وکتور. سی اس اسه.",
-       "updated": "(تازه بيه)",
-       "note": "'''نيسنن:'''",
-       "previewnote": "فقط ای پیش سیل د ویرتو با.\nآلشتیاتو هنی اماییه نبیه.",
-       "continue-editing": "رو د راساگه ویرایشت",
-       "previewconflict": "ورگشت پیش سیل د نیسسه د راساگه وارو ویرایشت چی شکل دیار بیین بوئه ار شما وه نه سی اماییه کردن انتخاو بکیت.",
-       "session_fail_preview": "<strong>د بدبختی ما سی یه که رسینه یا جلسه مونه د دس دئیمه نمی تونیم کار پردازشت ویرایشت شمانه انجوم بیئمو.</strong>\nلطفن هنی تلاش بکیت.\nار هنی کار وه دروس کار نکرد،[[Special:UserLogout|اومائن وه در]] نه ازمایشت بکیت و د نو بیایت وامین.",
-       "session_fail_preview_html": "<strong>د بدبختی ما سی یه که رسینه یا جلسه مونه د دس دئیمه نمی تونیم کار پردازشت ویرایشت شمانه انجوم بیئمو.</strong>\nلطفن هنی تلاش بکیت.\n\n<em>سی یه که {{نوم دیارگه}} یه گل ردیف اچ تی ام ال کنشتگر بیه داره، پیش سیل سی یه که د دس حمله یا جاوا اسکریپ د امون با قام کرده بیه..</em>\n\n<strong>ار وه گات قانونی تلاش سی ویرایشته،لطفا د نو تلاش بکیت.</strong>\nار هنی کار وه دروس کار نکرد،[[Special:UserLogout|اومائن وه در]] نه ازمایشت بکیت و د نو بیایت وامین.",
-       "token_suffix_mismatch": "<strong>ویرایشتیا شما سی یه که دووارته نئر شما نیسسه یا نقطه نیائن نه د رازینه امنیتی ویرایشت د یک تیچسه.</strong>\nویرایشت سی یه که د خراو بیئن نیسسه بلگه نهاگری با رد بیه.\nای رخ ون د گاتیایی پیش میا که شما د یه گل رسینه جا پروکسی استفاده می کیت.",
-       "edit_form_incomplete": "<strong>پاره ای د ویرایشتا وه رسینه جا نمی رسن، هنی وارسی بکیت سی یه که بوینیت ویرایشتیا شما خوئه و هنی تلاش بکیت .</strong>",
-       "editing": "د حال و بال ويرايشت$1",
-       "creating": "راس كردن $1",
-       "editingsection": "د حال و بال ویرایشت$1(بشخ)",
-       "editingcomment": "د حال و بال ویرایشت$1(بهرجا تازه)",
-       "editconflict": "تضاد د ویرایشت:$1",
-       "explainconflict": "داوسه که شما شرو د ویرایشت ای بلگه کردیته، یه نفر هنی ای بلگه نه آلشت دئه.\nراساگه وارو نیسسه بلگه نیسسه نه چی یه که وجود داشتوه د ور میئره.\nآلشتیا شما د نیسسه هاری نشو دئه هئ.\nشما با آلشتیاتونه د نیسسه که هئش یکی بکید.\nفقط متنی که ها د رو د گاتی که شما\"{{رقم:اماییه کاری گوتار}}\" نه گزارشت می کید اماییه بوئه",
-       "yourtext": "نیسسه شما",
-       "storedversion": "دوواره دیئن انبار بیه.",
-       "nonunicodebrowser": "<strong>زئنار:دووارته نئر شما وا نیسسه یا یونیکد سازگاری ناره.</strong>\nیه گل راحل وه کار گرته بیه سی یه که شما بلگه یا نه وا امنیت ویرایشت بکیت:\nنیسه یا غیر-ASCII  د پایه رازینه یا 16 تایی دتو نشو دئه بوئه.",
-       "editingold": "<strong>زئنار:شما داریت یه گل وانئری نا به هنگوم بیه نه سی ای بلگه ویرایشت می کید</strong>\nار شما ونه اماییه بکیت،هر آلشتی که د اول سی ای وانئری انجوم بیه گم بوئه.",
-       "yourdiff": "فرخيا",
-       "copyrightwarning": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
-       "copyrightwarning2": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
-       "longpageerror": "<strong>خطا:نیسسه شما  {{PLURAL:$1|یه کلوبایت|$1 کلوبایت}}  درازی نه دئه، که ونو د بیشرونه انازه{{PLURAL:$2|یه کلوبایت|$2 کلوبایت}} گپترن.</strong>\nنبوئه وه اماییه با.",
-       "readonlywarning": "<strong>زئنار:رسینه گا سی واداشت قلف بیه، سی یه نه که شما ایسه نمی تونیت ویرایشتیاتونه اماییه بکیت.</strong>\nشات شما بحایت که نیسسه خوتونه د جانیا نیسسه ای وردار بدیس بکیت و ونه سی نهاتر اماییه بکیت.\n\nدیوونداری که ونه قلف کرده چنی گوته:$1",
-       "protectedpagewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
+       "noarticletext": "د ئیسئنیا د ئی بألگؤ نیسئسە یی ڤوجوٙد ناشتە.\nشوما می توٙنیت د[[Special:Search/{{PAGENAME}}|بگردید]] د ئی بألگە یا د بألگە هأنی یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هأنی نە پئی جوری بوٙە]</span>، <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} یا ئی بألگە نە ڤیرایئشت بأکیت]</span>.",
+       "noarticletext-nopermission": "د ئیسئنیا د ئی بألگؤ نیسئسە یی ڤوجوٙد ناشتە.\nشوما می توٙنیت د[[Special:Search/{{PAGENAME}}|بگردید]] د ئی بألگە یا د بألگە هأنی یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د هأنی نە پئی جوری بوٙە]</span>، <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}}</span>.ڤألی شوما صئلا یە نە کئ ئی بألگە نە راس بأکیت ناریت.",
+       "missing-revision": "ڤانئیأری #$1 د بألگە یی کئ نومئش ڤئنە \"{{FULLPAGENAME}}\" ڤوجوٙد نارە.\n\nگاسی سی یئ گئل ڤیرگار ڤئ هئنگوم نأبییە کئ د یئ گئل بألگە پاکسا بییە هوم پئیڤأند بییە رأڤأندیاری بییە.\nگاسی جوزئیات د[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log] دیاری بأکأن.",
+       "userpage-userdoesnotexist": "حئساڤ کاریاری \"$1\" ثأڤت نأم نأبییە.\nأر میھایت ئی بألگە نئ بأسازیت یا ڤیرایئشت کاری بأکیت یئ گئل ڤارئسی أنجوم بئیتوٙ.",
+       "userpage-userdoesnotexist-view": "حئساڤ کاریاری \"$1\" ثأڤت نأبییە.",
+       "blocked-notice-logextract": "ئی کاریار د ئیسئنی نئھاگئری بییە.\nآخئری پئرئستنوٙمە نئھاگئری ڤامین یاریا د ھار سی سأرچئشمە آمادە کاری بییە:",
+       "clearyourcache": "<strong>د ڤیر داشتوٙیت:</strong> نئها ئمایە کاری،گاسی شوما مأژبوٙر د ڤئ کار ڤأنئن ڤیرگە قام بییە دوڤارتە نییأر خوتوٙ سی دیئن ئی آلئشتکاری بوٙئیت.\n* <strong>فایئرفاکس/ سأفأری:</strong> بأپوٙرنیت ری<em>شیفت</em> ئوٙسئ کئ می پوٙرنیت <em> ڤئ د نۊ سۊڤار موٙە </em>یا ھأنی ری <em>Ctrl-F5</em> بأپوٙرنیت یا<em>Ctrl-R</em> (<em>⌘-R</em> د ساموٙنە مأک)\n* <strong>گوٙگئل کئروم:</ strong>بأپوٙرنیت ری <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> یا د ساموٙنە)\n* <strong>ئینتئرنئت ئکسپئلورئر:</strong> <em>Ctrl</em> نە ڤاداریت ئوٙسئ کئ می پوٙرنیت <em>ری کئلیت رئفرئش</em>،یا ڤاداشتیتە<em>Ctrl-F5</em>\n* <strong>اوپرا:</strong> ڤیرگە قام بییە د <em>أڤزاریا→ ئولأڤی یأتیانە پاکسا بأکیت</em>",
+       "usercssyoucanpreview": "<strong>چی ڤأرتیە گئر:</strong>  دوگمە\"{{int:showpreview}}\" سی ئزماشت کاری سی ئس ئس تازە دئما ئمایە کاری ڤئ کار بئیریت.",
+       "userjsyoucanpreview": "<strong>چی ڤأرتیە گئر:</strong>  دوگمە\"{{int:showpreview}}\" سی ئزماشت کاری جاڤا ئسکئریپت تازە دئما ئمایە کاری ڤئ کار بئیریت.",
+       "usercsspreview": "<strong>د ڤیر داشتوٙئیت کئ شوما فأقأط می توٙنیت سی ئس ئس کاریاری توٙنە پیش سئیل بأکیت. ڤئ ئیسئنی ئمایە نأبییە!</strong>",
+       "userjspreview": "<strong>د ڤیر داشتوٙئیت کئ شوما فأقأط می توٙنیت جاڤا ئسکئریپت کاریاری توٙنە پیش سئیل بأکیت. ڤئ ئیسئنی ئمایە نأبییە!</strong>",
+       "sitecsspreview": "<strong>د ڤیر داشتوٙئیت کئ شوما فأقأط می توٙنیت ئی سی ئس ئس کاریاری توٙنە پیش سئیل بأکیت. ڤئ ئیسئنی ئمایە نأبییە!</strong>",
+       "sitejspreview": "<strong>د ڤیر داشتوٙئیت کئ شوما فأقأط می توٙنیت ئی جاڤا ئسکئریپت کاریاری توٙنە پیش سئیل بأکیت. ڤئ ئیسئنی ئمایە نأبییە!</strong>",
+       "userinvalidcssjstitle": "<strong>زئنار:</strong> پوٙسە \"$1\" نیئش.\nسی ئس ئس جاڤأنە و بألگە یا جاڤا ئسکئریپت سأربألگ ڤا حأرفیا کوچئک نە ڤئ کار گئرئتە، ھأمچئنی {{ns:کاریار}}:فو/ڤئکتور.سی ئس ئس چی د ری ڤئ ری {{ns:کاریار}}:فو/ڤئکتور. سی ئس ئسە.",
+       "updated": "(ڤئ هئنگوم سازی بییە)",
+       "note": "'''نیسأنئن:'''",
+       "previewnote": "فأقأط ئی پیش سئیل د ڤیرتوٙ با.\nآلئشت کاریاتوٙ ھأنی ئمایە نأبینە",
+       "continue-editing": "رو د راساگە ڤیرایئشت کاری",
+       "previewconflict": "ڤئرگأشت پیش سئیل د نیسئسە د راساگە ڤارو ڤیرایئشت کاری چی شئکل دیار بییئن بوٙەأر شوما  ڤئ نە سی ئمایە کئردئن ئنتئخاڤ بأکیت.",
+       "session_fail_preview": "<strong>د بأخت گأن سی یە کئ رئسینە یا نئشأسجا نە د دأس دأئیمە نئمی توٙنیم کار پأردازئشت ڤیرایئشت کاری شومانە أنجوم بئمینوٙ.</strong>\nلوطف بأکیت یئ گئل ھأنی تئلاش بأکیت.\nأر ھأنی ڤئ دوروس کار نأکئرد،[[Special:UserLogout|ئوٙمائن ڤئ دأر]] نە ئزمایئشت بأکیت و د نۊ بیائیت ڤامین.",
+       "session_fail_preview_html": "<strong>د بأخت گأن سی یە کئ رئسینە یا نئشأسجا نە د دأس دأئیمە نئمی توٙنیم کار پأردازئشت ڤیرایئشت کاری شومانە أنجوم بئمینوٙ.</strong>\n\n\n<em>سی یە کئ {{SITENAME}} یئ گئل رأگ ئچ تی ئم ئل کونئشتکار بییە دارە، پیش سئیل سی یە کئ د دأس چول کاریا جاڤا ئسکئریپت لیز داشتوٙە نئھوٙ بییە..</em>\n\nلوطف بأکیت یئ گئل ھأنی تئلاش بأکیت.\nأر ھأنی ڤئ دوروس کار نأکئرد،[[Special:UserLogout|ئوٙمائن ڤئ دأر]] نە ئزمایئشت بأکیت و د نۊ بیائیت ڤامین.",
+       "token_suffix_mismatch": "<strong>ڤیرایئشتیا شوما سی یە کئ دوڤارتە نیأر شوما نیسئسە یا نوقطە نیائن نە د رازینە أمینیأتی ڤیرایئشت د یأک تیچئسە رأد میکە.</strong>\nڤیرایئشت سی یە کئ د خئراڤ بییئن نیسئسە بألگە نئھاگئری با رأد بییە.\nئی روخ ڤأن د گاتیایی پیش میا کئ شوما یئ گئل  رئسینە جا پوروکسی نە ڤئ کار بئیریت.",
+       "edit_form_incomplete": "<strong>پارە یی د ڤیرایئشتیا ڤئ رئسینە جا نئمی رئسئن، د نۊ ڤارئسی بأکیت سی یە کئ د خوٙ بییئن ڤیرایئشتیا خوتوٙ ڤارئسیاری بأکیت و د نۊ تئلاش بأکیت.</strong>",
+       "editing": "د حال و بال ڤیرایئشت $1",
+       "creating": "راس کئردئن $1",
+       "editingsection": "د حال و بال ڤیرایئشت $1 (بأرجا$1)",
+       "editingcomment": "د حال و بال ڤیرایئشت $1 (بأرجا تازە)",
+       "editconflict": "ری ڤئ ری کاری د ڤیرایئشت: $1",
+       "explainconflict": "د گاتی کئ شوما شوروٙ د ڤیرایئشت کاری د بألگە کئردیتە، یئ کأس ھأنی ئی بألگە نئ آلئشت دئە.\nراساگە ڤارو نیسئسە بألگە، نیسئسە نە چی یە کئ ڤوجوٙد داشتوٙە د ڤأر گئرئتە.\nآلئشتکاریا شوم د نیسئسە ھاری دیاری میکە.\nشوما بایأد آلئشت کاریاتوٙنە د نیسئسە یی کئ ھیش سأریأک بأکیت.\nفأقأط نیسئسە یی کئ ھا د ڤارو د گاتی کئ شوما\"{{int:savearticle}}\" نە گوزارئشت میکیت ئمایە بوٙە.",
+       "yourtext": "نیسئسە شوما",
+       "storedversion": "ڤانئیأری ئمایە بییە",
+       "nonunicodebrowser": "<strong>د ڤیرئتوٙبا:دوڤارتە نیأر شوما ڤا نیسئسە یا یوٙنیکود سازئگاری نارە.</strong>\nیئ گئل را حأل ڤئ کار گئرئتئ بییە سی یە کئ شوما بألگە یا نە ڤا أمنیأت ڤیرایئشت بأکیت:\nنیسئسە یا غئر-ASCII  د پایە رازینە یا 16 تایی سی توٙ دیاری میکە.",
+       "editingold": "<strong>د ڤیرئتوٙ با:شوما داریت یئ گئل ڤانئیأری ڤئ ھئنگوم نأبییە نە سی ئی بألگە ڤیرایئشت کاری میکید.</strong>\nأر شوما ڤئنە ئمایە بأکیت، ھأر آلئشت کاری کئ د أڤأل سی ئی ڤانئیأری أنجوم بییە نادیار موٙە.",
+       "yourdiff": "فأرخیا",
+       "copyrightwarning": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
+       "copyrightwarning2": "لوطف بأکیت د ڤیر داشتوٙئیت کئ ئیچئ فأرض یأنە کئ ھأمە ھومیاریا شوما ڤا{{SITENAME}} د حال و بال «$2» دأرتیچ بوٙە(سی چیا تئر روئیت د $1).\nأر نئمیھایت کئ نیسئسە یا توٙ کئ فئرە ڤیرایئشت کاری بیینە و دئلحا دأرتیچ بان، د ئیچئ کئلئشوٙ نأکیت.<br />\nھأمچئنی شوما داریت ڤئ ئیما قول مئیت کئ خوتوٙ ڤئنوٙنە نیسأنیتە، یا ڤئنە د ڤئنوٙنە د یئ گئل سأرچئشمە آزاد ڤا بأرکئرد ھأمأگوٙنی یا چیایی چی ڤئ گئرتیتە.\n'''آرئنگیایی کئ صئلا دأرتیچئسئن (copyright) ھا دئشوٙ بی صئلا کئل نأکیت!'''",
+       "editpage-cannot-use-custom-model": "شیڤە مینوٙنە یا ئی بألگە نأتوٙنە آلئشتکاری بوٙە.",
+       "longpageerror": "<strong>خأطا:نیسئسە شوما {{PLURAL:$1|یە کئلوٙبایت|$1 کئلوبایت}} دئرازا نە دأە، کئ ڤئنوٙ د بیشتأروٙنە أنازە {{PLURAL:$2|یە کئلوبایت|$2 کئلوبایت}} گأپتأرئن.</strong>\nنأبوٙە ڤئ ئمایە با.",
+       "readonlywarning": "<strong>د ڤیر داشتوٙئیت:رئسینە گا سی ڤاداشت کاری نئھاگئری بییە، سی یە نە کئ شوما ئیسە نئمی توٙنیت ڤیرایئشت کاریاتوٙنە ئمایە بأکیت.</strong>\nگاسی شوما بئھایت کئ نیسئسە خوتوٙنە د جانیا نیسئسە یی ڤوردار بئدیس بأکیت و ڤئنە سی نئھاتئر ئمایە بأکیت.\n\nدیڤوٙنداری کئ د ڤئ نئھاگئری کئردە چئنی گوتە:$1",
+       "protectedpagewarning": "<strong>د ڤیر داشتوٙئیت:ئی بألگە سی یە پأر و پیم بییە کئ فأقأط کاریاریایی کئ دأسرئسی دیڤوٙنداری دارئن بأتوٙنئن دئش ڤیرایئشت کاری بأکأن..</strong>\nآخئری سیاە سی سأرچئشمە یا د ھار ئمایە کاری بییە:",
        "semiprotectedpagewarning": "<strong>د ویر داشتویت:</strong> ای بلگه سی یه که فقط کاریاریا ثوت نام کرده تونستون دش ویرایشت بکه ن پر و پیم بیه.\nآخرین پهرستنومه دئه بیه سی سرچشمه هار نها اماییه بیه:",
-       "cascadeprotectedwarning": "<strong>زئÙ\86ار:</strong> Ø§Û\8c Ø¨Ù\84Ú¯Ù\87",
+       "cascadeprotectedwarning": "<strong>زئÙ\86ار:</strong> Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Ø¦ Ø¯Ø£Ø³ Ú©Ø§Ø±Û\8cارÛ\8cاÛ\8cÛ\8c Ú©Ø¦ ØµØ¦Ù\84ا Ø³Ø£Ø±Ø¯Û\8cÚ¤Ù\88Ù\99Ù\86کارÛ\8c Ø¯Ø§Ø±Ù\86 Ù\85Û\8c ØªÙ\88Ù\99Ù\86Û\95 Ú¤Û\8cراÛ\8cئشت Ú©Ø§Ø±Û\8c Ø¨Ù\88Ù\99Û\95 Ø³Û\8c Û\8cÛ\95 Ú©Ø¦ Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Ø¦ Ø±Ø£Ú¤Ø¦Ø´Øª ØªØ§Ù\81 Ù\86ئÙ\85اÛ\8cÛ\8c Ù¾Ø£Ø± Ù\88 Ù¾Û\8cÙ\85 Ú©Ø§Ø±Û\8c Ø¨Û\8cÛ\8cÛ\95 {{PLURAL:$1|بأÙ\84Ú¯Û\95|بأÙ\84Ú¯Û\95 Û\8cا}}:",
        "titleprotectedwarning": "<strong>زئنار:ای بلگه پر و پیم بیه سی یه که[[ویجه:نوم گه حقوق گرو|حقوق ویجه]] باید ونه دروس بکن .</strong>\nآخرین پهرستنومه دئه بیه سی سرچشمه دئن نهااماییه بیه:",
        "templatesused": "{{PLURAL:$1|چوئه|چوئه یا}} د ای بلگه وه کار گرته بیه:",
        "templatesusedpreview": "{{PLURAL:$1|چوئه|چوئه یا}}استفاده بیه د ای پیش سیل:",
        "templatesusedsection": "{{PLURAL:$1|چوئه|چوئه یا}} وه کار گرته بیه د ای بخش:",
-       "template-protected": "(پر Ù\88 Ù¾Û\8cÙ\85 Ø¨Ù\8aÙ\87)",
-       "template-semiprotected": "نصم و نیمه پر و پیم بیه",
+       "template-protected": "(پأر Ù\88 Ù¾Û\8cÙ\85 Ø¨Û\8cÛ\8cÛ\95)",
+       "template-semiprotected": "(نئصم و نیمە پأر و پیم بییە)",
        "hiddencategories": "ای بلگه يه اندوم د{{PLURAL:$1|1 hidden category|$1 hidden categories}}: هئ",
        "edittools-upload": "-",
        "nocreatetext": "{{نوم مالگه}} سی راس کردن بلگه یا تازه محدود بیه.\nشما تونید روئیت وادما و بلگه ای که هئیش ویرایشت بکید ، یا [[ویجه:وامین اومائن کاریار|بیایت وامین یا یه گل حساو بسازیت]].",
-       "nocreate-loggedin": "Ø´Ù\85ا Ø­Ù\82 Ù\86ارÛ\8cت  Ú©Ù\87 Ø¨Ù\84Ú¯Ù\87 Û\8cا ØªØ§Ø²Ù\87 Ù\86Ù\87 Ø±Ø§Ø³ Ø¨Ú©Û\8cد.",
+       "nocreate-loggedin": "Ø´Ù\88Ù\85ا ØµØ¦Ù\84ا Ø±Ø§Ø³ Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø¨Ø£Ù\84Ú¯Û\95 ØªØ§Ø²Û\95 Ù\86Û\95 Ù\86ارÛ\8cت.",
        "sectioneditnotsupported-title": "ویرایشت بهرجا حامین داری نبوئه",
-       "sectioneditnotsupported-text": "ویرایشت بهرجایی د ای بلگه نئیش.",
-       "permissionserrors": "خطا Ø§Ø¬Ø§Ø²Ù\87 Ø¯Ø¦Û\8cن",
+       "sectioneditnotsupported-text": "ڤیرایئشت بأرجایی د ئی بألگە نیئش.",
+       "permissionserrors": "خأطا ØµØ¦Ù\84ا Ø¯Ø£Ø¦ن",
        "permissionserrorstext": "شما حق ناریت ونه انجوم بیئت, سی{{PLURAL:$1|دلیل|دلیلیا}} نهایی:",
        "permissionserrorstext-withaction": "شما سی $2 اجازه ناریت\nسی نهاگری {{PLURAL:$1|دلیل|دلیلیا}}:",
        "recreate-moveddeleted-warn": "'''زنهار شما بلگه ای که وادما پاکسا بیه هنی راس کردیته'''\nشما باید دونسه بایت که آیا هنی سی نها گرتن ویرایشت ای بلگه خوئه.\nپاکسا بیئن و جمشت سی ای بلگه سی فراغتتو آماده بیه:",
        "moveddeleted-notice": "ای بلگه پاکسا بیه.\nپاکسا بین و جمشت ای بلگه سی سرچشمه دئین آماده بیه",
-       "log-fulllog": "دیئن همه پهرستنومه یا",
-       "edit-hook-aborted": "ویرایشت وا قلاو نهاگری بیه.\nهیچ توضیئ سیش نئ.",
+       "log-fulllog": "دیئن هأمە پئهئرستنوٙمە یا",
+       "edit-hook-aborted": "ڤیرایئشت ڤا قولاڤ نئھاگئری بییە.\nھیچ توضیی سیش نی.",
        "edit-gone-missing": "نبوئه ای بلگه نه وه هنگوم بکیت.\nوه نظر میا که وه پاکسا بیه.",
-       "edit-conflict": "مخالفت نه ویرایشت بکید",
+       "edit-conflict": "ری ڤئ ری کاری د ڤیرایئشت.",
        "edit-no-change": "سی یه که آلشتیا د یه گل نیسسه دروس بیه د ویرایشت شما تیه پوشی بیه.",
-       "postedit-confirmation-created": "بلگه دروس بیه.",
-       "postedit-confirmation-restored": "بلگه د نو اماییه بیه.",
-       "postedit-confirmation-saved": "ویرایشتتو اماییه بی",
+       "postedit-confirmation-created": "بألگە دوروس بییە.",
+       "postedit-confirmation-restored": "بألگە د نۊ ئمایە بییە.",
+       "postedit-confirmation-saved": "ڤیرایئشتئتوٙ ئمایە بی.",
        "edit-already-exists": "نبوئه یه گل بلگه تازه راس بکید.\nوه هئیش.",
        "defaultmessagetext": "نیسسه پیغوم پیش فرض",
        "content-failed-to-parse": "د یک تیچیسن چیا مئن $2 د مدل $1:$3",
-       "invalid-content-data": "دÙ\86سÙ\85Ù\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 Ù\86اÙ\85عتÙ\88ر",
+       "invalid-content-data": "دÙ\88Ù\86ئسÙ\85Ø£Ù\86Û\8c Ù\85Û\8cÙ\86Ù\88Ù\99Ù\86Û\95 Ù\86ادÛ\8cار",
        "content-not-allowed-here": " مینونه\"$1\" سی بلگه [[$2]] صلا نه دئه بیه",
        "editwarning-warning": "ار ای بلگه نه ول بکیت هر آلشتی که دئیته پاک بوئه.\nار شما هاییت وا مین،شما می تونیت ای زئنار نه د \"{{int:prefs-editing}}\" که ها د بخش اولویتیا شما ناکشتگر بکیت.",
        "editpage-notsupportedcontentformat-title": "شلک مینونه دماگری نبیه",
        "editpage-notsupportedcontentformat-text": "وضع و بار مینونه $1 د مدل مینونه $2 حامین نبوئه.",
-       "content-model-wikitext": "ويكی نیسسه",
-       "content-model-text": "Ù\86Û\8cسسÙ\87 Ø³Ø§Ø¯Ù\87",
-       "content-model-javascript": "جاوا اسكريپت",
+       "content-model-wikitext": "ڤیکی نیسئسە",
+       "content-model-text": "Ù\86Û\8cسئسÛ\95 Ø³Ø§Ø¯Û\95",
+       "content-model-javascript": "جاڤا ئسکئریپت",
        "content-model-css": "سی اس اس",
-       "content-json-empty-object": "سرتاÙ\84 حالی",
-       "content-json-empty-array": "آرایه حالی",
+       "content-json-empty-object": "داسÙ\88Ù\99Ù\86 حالی",
+       "content-json-empty-array": "آرایە حالی",
        "duplicate-args-category": "بلگه یا یی که چک چنه کاریا دو کونه نه د چوئه یا واحونیشو وه کار میئرن",
        "duplicate-args-category-desc": "بلگه یی که آرگومان دوکونه داره چی، <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>زئنار:</strong>ای بلگه مینونه دار واحونی دستوریا مئن اشکافت فره ای هئ.\n\nانازه و باید د کمتر با$2 {{PLURAL:$2|واحونی|واحونیا}}، ایسه {{PLURAL:$1|$1 واحونی|$1 واحونیا}}ئه.",
        "cantcreateaccounttitle": "نبوئه حساو راس بکید",
        "cantcreateaccount-text": "حساو دروس بیه و ا ای تیرنشون آی پی(<strong>$1</strong>) وه دس ای [[کاریار:$3|$3]] قلف بیه.\n\n\nدلیل دئه بیه وا $3 ها د<em>$2</em>",
        "cantcreateaccount-range-text": "حساو دروس بیه وا تیرنشون آی پی که د پوشینه '''$1''' ، که وه ئم مینونه دار تیرنشون آی پی شما ئم هئ('''$4''')، وه دس [[کاریار:$3|$3]]قلف بیه.\n\nدلیل دئه بیه وا $3، \"$2\" ئه.",
-       "viewpagelogs": "سی ای بلگه بوینتو.",
+       "viewpagelogs": "سئیل پئرئستنوٙمە یا ئی بألگە بأکیت",
        "nohistory": "هیچ ویرگار ویرایشتی د ای بلگه نئ.",
        "currentrev": "آخرین دوواره دیئن",
        "currentrev-asof": "آخري وانئری چی $1",
        "revisionasof": "دوواره ديئن $1",
        "revision-info": "دوواره سیل بیه چی $1 وا $2",
-       "previousrevision": "اصلاح دمايی",
-       "nextrevision": "تازه تری وانئری",
-       "currentrevisionlink": "آخرÛ\8c Ù\88اÙ\86ئری",
-       "cur": "تازه باو",
-       "next": "نيایی",
-       "last": "دمايی",
-       "page_first": "اÙ\88لی",
-       "page_last": "آخر",
+       "previousrevision": "ڤانئیأری دئمایی←",
+       "nextrevision": "ڤانئیأری تازە تئر",
+       "currentrevisionlink": "آخئرÛ\8c Ú¤Ø§Ù\86ئÛ\8cØ£ری",
+       "cur": "تازە باڤ",
+       "next": "نئهایی",
+       "last": "دئمایی",
+       "page_first": "أڤئلی",
+       "page_last": "آخئر",
        "histlegend": "انتخاو فرخدار:جعویا رادیو نه سی دوواره دیئن و وارسی نشو دار بکید و یا ری رئتن کلیک بکید .<br />\nشرح نوشته: '''({{int:cur}})''' = وا آخری دوواره دیئن فرخ داره '''({{ int:last}})'''= وا دواره دیئن انجوم دئنی فرخ داره  '''{{int:minoreditletter}}''' =ویرایشت کؤچک.",
        "history-fieldset-title": "ویرگار دوارته نیئری",
        "history-show-deleted": "فقط پاكسا بيه",
        "rev-deleted-diff-view": "وانئری ای بلگه <strong>پاکسا بیه</strong>.\nجزئیات هان د  [{{fullurl:{{#Special:Log}}/پاکسا کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساکردن].",
        "rev-suppressed-diff-view": "وانئری بلگه <strong>پاکساگری</strong>.\nجزئیات هان د  [{{fullurl:{{#Special:Log}}/پاکساگری کردن|بلگه={{نوم کامل بلگه}}}} پهرستنومه پاکساگری کردن].",
        "rev-delundel": "آلشت حال و بال ديئن",
-       "rev-showdeleted": "Ù\86Ø´Ù\88 Ø¯ئن",
+       "rev-showdeleted": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
        "revisiondelete": "پاکسا کردن/زنه کردن وانئریا",
        "revdelete-nooldid-title": "وانیری تمارزی بیه نامعتوره",
        "revdelete-nooldid-text": "شما وانئریا حاسنی نه سی انجوم دئن ای کار ره ون تیاری نکردیته، یا وانئریا تیارگر بیه وجود نارن، یا یه که شما میهایت وانئری ایسنی نه قام بکیت.",
        "revdelete-no-file": "جانیا تیار بیه وجود ناره.",
        "revdelete-show-file-confirm": "شما د دل میهایت که وانئری پاکسا بیه ای جانیا نه بونیت \"<nowiki>$1</nowiki>\" د $2 تا $3؟",
-       "revdelete-show-file-submit": "هری",
-       "revdelete-selected-text": "{{PLURAL:$1|وانیری گل گر بیه|وانیری گل گر بیه}} د [[:$2]]:",
-       "revdelete-selected-file": "{{PLURAL:$1|وانیری گل گر بیه|وانیری گل گر بیه}} د [[:$2]]:",
-       "logdelete-selected": "{{PLURAL:$1|پهرستنومه رخ ونیا انتخاو بیه|پهرستنومه رخ ونیا انتخاو بیه}}:",
+       "revdelete-show-file-submit": "Ù\87أرÛ\8c",
+       "revdelete-selected-text": "{{PLURAL:$1|ڤانئیأری گول گئر بییە|ڤانئیأریا گول گئر بییە}} د [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|ڤانئیأری گول گئر بییە جانیا|ڤانئیأریا گول گئر بییە جانیا}} د [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|پئھرئستنوٙمە روخ ڤأن گول گئر بییە|پئھرئستنوٙمە روخ ڤأنیا گول گئر بییە}}:",
        "revdelete-text-text": "وانئریا پاکسا بیه هنی د بلگه ویرگار دیاری می کن،اما به شیا مینونه یاشو د مین خلک دیار نیئن.",
        "revdelete-text-file": "وانئریا پاکسا بیه هنی د بلگه ویرگار دیاری می کن،اما به شیا مینونه یاشو د مین خلک دیار نیئن.",
        "logdelete-text": "وانئریا پاکسا بیه هنی د بلگه ویرگار دیاری می کن،اما به شیا مینونه یاشو د مین خلک دیار نیئن.",
        "revdelete-radio-unset": "دیینی",
        "revdelete-suppress": "پاکساگری کردن رسینه یا سی دیوونداریا و کسونا تر",
        "revdelete-unsuppress": "محدودیتیانه د وانیریا امباربیه جا وه جا بکید",
-       "revdelete-log": "دلیل:",
+       "revdelete-log": "دألیل:",
        "revdelete-submit": "سی {{PLURAL:$1|وانیری|وانیریا}} انتخاو بیه وه کار بوریتو",
        "revdelete-success": "'''دیئن وانیری وه خوئی وه هنگوم بی.'''",
        "revdelete-failure": "'''دیئن وانیری وه خوئی وه هنگوم نبی:'''$1",
        "logdelete-success": "پهرستنومه دیار بیین د خوئی میزونکاری بی.",
        "logdelete-failure": "پهرستنومه دیار بیین نبوئه میزونکاری با. $1",
        "revdel-restore": "آلشت حال و بال ديئن",
-       "pagehist": "ويرگار بلگه",
-       "deletedhist": "ویرگار پاکسا بیه",
+       "pagehist": "ڤیرگار بألگە",
+       "deletedhist": "ڤیرگار پاکسا بییە",
        "revdelete-hide-current": "خطا د قام کردن چی که ها د ویرگار $2 ساعت $1: ای نسقه، نسقه ایسنی یه و نبوئه نهوش بکیت.",
        "revdelete-show-no-access": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: ای نسقه نشون «مئن تنگلا بیئن» داره و شما نمی تونیت وه ش دسرسی داشتویت.",
        "revdelete-modify-no-access": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: ای نسقه نشون «مئن تنگلا بیئن» داره و شما نمی تونیت وه ش دسرسی داشتویت.",
        "revdelete-concurrent-change": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: وه ویر و باور میا که د او گاتی که شما سی آلشت دئن حال و بار وه سعی می کردیته، حال و بارش وه دس کسی تر آلشت دئه بیه.\nلطفن پهرستنومه یا نه وارسی بکیت.",
        "revdelete-only-restricted": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: شما نیمی تونیت چیانه د ورتیه دیوونداریا قام بکیتو مر یه که یه گل د گزینه یا دیاری کردن هنی نه انتخاو بکیت.",
        "revdelete-reason-dropdown": "*دلیلیا جاونه سی پاکسا کردن\n** تیه پوشی د حق درتیچ کردن\n** ویر و باور یا دونسمنیا شخصی نامناسو\n** نوم کاریاری نامناسو\n** دونسمنیا فره تنادار",
-       "revdelete-otherreason": "دلیل هنی:",
-       "revdelete-reasonotherlist": "دلیل هنی",
+       "revdelete-otherreason": "دألیل ھأنی:",
+       "revdelete-reasonotherlist": "دألیل ھأنی",
        "revdelete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
        "revdelete-offender": "نیسنه وانیری:",
        "suppressionlog": "پهرستنومه پاکساگری",
        "mergehistory-autocomment": " [[:$1]]وا[[:$2]] یکی بیه",
        "mergehistory-comment": " [[:$1]]وا[[:$2]] یکی بیه:$3",
        "mergehistory-same-destination": "سرچشمه و بلگه یا مقصد نبوئه یکی بوئن",
-       "mergehistory-reason": "دليل:",
+       "mergehistory-reason": "دأليل:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "سریک سازی پهرستنومه",
        "revertmerge": "بی لوئه",
        "next-page": "بلگه نهایی",
        "prevn-title": "پيشتر $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
        "nextn-title": "نيايی $1 {{PLURAL:$1|نتيجه|نتيجيا}}",
-       "shown-title": "Ù\86Ø´Ù\88Ù\86 Ø¯Ø¦Ù\86 $1 {{PLURAL:$1|Ù\86تÙ\8aجÙ\87\86تÙ\8aجÙ\87}} Ø³Û\8c Ù\87ر Ø¨Ù\84Ú¯Ù\87",
+       "shown-title": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£Ø¦Ù\86 $1 {{PLURAL:$1|Ù\86أتÛ\8cجÛ\95\86أتÛ\8cجÛ\95}} Ø³Û\8c Ù\87أر Ø¨Ø£Ù\84Ú¯Û\95",
        "viewprevnext": "ديئن ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''ایچه بلگه ای هئ وه نوم\"[[:$1]]\" که ها د ای ویکی'''",
        "searchmenu-new": "'''ای بلگه نه راس كو \"[[:$1]]\" د ای  ويكي!'''",
        "searchprofile-everything-tooltip": "همه مینونه یا نه پی جوری كو (شاملا بلگيا چك چنه)",
        "searchprofile-advanced-tooltip": "نوم جايا نوم ديار بگرد",
        "search-result-size": "$1 ({{PLURAL:$2|1 کلیمه|$2 کلیمه یا}})",
-       "search-result-category-size": "{{PLURAL:$1|1 Ø§Ù\86دÙ\88Ù\85|$1 Ø§Ù\86دÙ\88Ù\85Û\8cا}} ({{PLURAL:$2|1 Ø²Û\8cردسÙ\87|$2 Ø²Û\8cردسÙ\87 Û\8cا}}, {{PLURAL:$3|1 جانیا|$3 جانیایا}}",
+       "search-result-category-size": "{{PLURAL:$1|1 Ø£Ù\86دÙ\88Ù\85|$1 Ø£Ù\86دÙ\88Ù\85Û\8cا}} ({{PLURAL:$2|1 Ø²Û\8cردأسÛ\95|$2 Ø²Û\8cردأسÛ\95 Û\8cا}}Ø\8c {{PLURAL:$3|1 جانیا|$3 جانیایا}}",
        "search-redirect": "(ورگشتن $1)",
        "search-section": "(بهرجا $1)",
        "search-category": "(دسه $1)",
        "search-interwiki-more": "(بیشتر)",
        "search-relatedarticle": "مرتوط",
        "searchrelated": "مرتوط",
-       "searchall": "همه",
+       "searchall": "ھأمە",
        "showingresults": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2'''.",
        "showingresultsinrange": "نمائشت بیشترونه {{PLURAL:$1|'''۱''' نتیجه|'''$1''' نتیجه}} د هار، شرو د شماره'''$2''' تا شماره '''$3'''.",
        "search-showingresults": "{{PLURAL:$4|نتیجه یا<strong>$1</strong> د <strong>$3</strong>|نتیجه یا<strong>$1 - $2</strong د <strong>$3</strong>}}",
        "search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
        "powersearch-legend": "پی جوری پیشکرده",
        "powersearch-ns": "د نوم جايا نوم ديار پی جوری بک:",
-       "powersearch-togglelabel": "Ú\86Ù\83 Ù\83ردن:",
-       "powersearch-toggleall": "همه",
+       "powersearch-togglelabel": "ڤارئسÛ\8c Ú©Ø¦Ø±Ø¯Ø¦ن:",
+       "powersearch-toggleall": "هأمە",
        "powersearch-togglenone": "هيش كوم",
        "powersearch-remember": "د ویر داشتن انتخاو سی پی جوریا نهایی",
        "search-external": "پی جوری د در",
        "searchdisabled": "مئن جوری د {{SITENAME}} کنشتگر نئ.\nموقتاً می تونیت مئن جوری Google نه بونیت وه کار.\nد ویرتو با که نتیجه یایی که د مئن جوری وا او روشت وه دست میان شایت وه روز نبان.",
        "search-error": "یه گل خطا سی اوسنی که پی جوری می کردیت اتفاق افتائه:$1",
-       "preferences": "خصوصيات هنی",
-       "mypreferences": "چیا هنی",
-       "prefs-edits": "Ø´Ù\85ارÙ\87 Ù\88Û\8cراÛ\8cشتا:",
+       "preferences": "خوصوٙیات هأنی",
+       "mypreferences": "خوصوٙیات هأنی",
+       "prefs-edits": "Ø´Ù\88Ù\85ارÛ\95 Ú¤Û\8cراÛ\8cئشتÛ\8cا:",
        "prefsnologintext2": "لطف بکیت بیایت وامین و ترجیحات خوتونه آلشت بئیت.",
        "prefs-skin": "پوس",
-       "skin-preview": "پیش سیل",
+       "skin-preview": "پیش سئیل",
        "datedefault": "هیچ ترجیحات دش نئ",
        "prefs-labs": "گزینشتیا ازماشتی",
-       "prefs-user-pages": "بلگه یا کاریار",
-       "prefs-personal": "پروفایل کاریار",
-       "prefs-rc": "Ø¢Ù\84شتÛ\8cا ØªØ§Ø²Ù\87 Ø¨Ø§Ù\88",
-       "prefs-watchlist": "سیل برگ",
-       "prefs-editwatchlist": "ویرایشت سیل برگ",
+       "prefs-user-pages": "بألگە کاریار",
+       "prefs-personal": "جانیاگە کاریار",
+       "prefs-rc": "Ø¢Ù\84ئشتÛ\8cا Ø¦Û\8cسئÙ\86Û\8c",
+       "prefs-watchlist": "سئیل بأرگ",
+       "prefs-editwatchlist": "ڤیرایئشت سئیل بأرگ",
        "prefs-editwatchlist-label": "داده یا نه د سیل برگ خوتو ویرایشت بکیت:",
        "prefs-editwatchlist-edit": "داسونانه سیل بکیت و ونونه د سیل برگ خوتو ورداریت",
-       "prefs-editwatchlist-raw": "ویرایشت ردیفی سیل برگ",
-       "prefs-editwatchlist-clear": "سیل برگه تونه پاک بکیت",
+       "prefs-editwatchlist-raw": "ڤیرایئشتکاری رأدیفی سئیل بأرگ",
+       "prefs-editwatchlist-clear": "سئیل بأرگئ توٙنە پاک بأکیت",
        "prefs-watchlist-days": "روزیا نه د سیل برگ نشو دئه بو:",
        "prefs-watchlist-days-max": "$1 بیشترونه {{PLURAL:$1|روز|روزیا}}",
        "prefs-watchlist-edits": "بیشترونه انازه آلشتیایی که د سیل برگ گپ بیه نشو دئه بیه:",
        "prefs-watchlist-edits-max": "شماره بیشترونه:1000",
        "prefs-watchlist-token": "نشونه سیل برگ:",
-       "prefs-misc": "شيوسن",
+       "prefs-misc": "شیڤئسئن",
        "prefs-resetpass": "رازینه گواردن نه آلشت بكيت",
        "prefs-changeemail": "تیرنشون انجومانامه تو نه آلشت بکید",
        "prefs-setemail": "يه گل انجومانامه بنیت",
        "prefs-email": "چیا هنی انجومانامه",
-       "prefs-rendering": "شلک و ری",
-       "saveprefs": "اÙ\85اÛ\8cÛ\8cÙ\87 Ù\83ردن",
+       "prefs-rendering": "شیڤە",
+       "saveprefs": "ئÙ\85اÛ\8cÛ\95 Ú©Ø¦Ø±Ø¯Ø¦ن",
        "restoreprefs": "د نو زنه کردن همه میزونکاریا پیش فرض(د همه جایا)",
-       "prefs-editing": "د حال و بال ویرایشت",
-       "rows": "ردÙ\8aÙ\81Ù\8aا:",
+       "prefs-editing": "د حال و بال ڤیرایئشت",
+       "rows": "رأگÛ\8cا:",
        "columns": "ستينا:",
-       "searchresultshead": "پی جوری",
+       "searchresultshead": "پئی جوٙری",
        "stub-threshold": "آستونه ویرایشتیا د یک دیسسه<a href=\"#\" class=\"stub\">ناقص</a> (بایت):",
-       "stub-threshold-disabled": "د كار ونن",
+       "stub-threshold-disabled": "ناکونئشتگأر بییە",
        "recentchangesdays": "روزیا آلشتیا تازه باو نه نشو بیه:",
        "recentchangesdays-max": "$1 بیشترونه {{PLURAL:$1|روز|روزیا}}",
        "recentchangescount": "انازه ویرایشتیایی که دیاری می که:",
        "timezoneregion-indian": "جهوناو هند",
        "timezoneregion-pacific": "جهوناو آروم",
        "allowemail": "انجومانامه نه سی کاریاریا هنی کنشتگر کو",
-       "prefs-searchoptions": "پی جوری",
+       "prefs-searchoptions": "پئی جوٙری",
        "prefs-namespaces": "نوم جایا",
        "default": "پيش فرض",
        "prefs-files": "جانیایا",
        "prefs-common-css-js": " سی اس اس/جاوا اسکریپت بهر بیه سی همه پوسه یا:",
        "prefs-reset-intro": "شما می تونیت ای بلگه سی د نو زنه کردن ترجیحات خوت وه شکل تیارگه پیش فرض وه کار بوونیت.\nیه ورئشت پذیر نئ.",
        "prefs-emailconfirm-label": "پش راست کردن انجومانامه:",
-       "youremail": "اÙ\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87:",
+       "youremail": "Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95:",
        "username": "{{GENDER:$1|نوم کاریاری}}:",
-       "prefs-memberingroups": "{{GENDER:$2|اÙ\86دÙ\88Ù\85}}  {{PLURAL:$1|گرÙ\88Û\8cا|گرÙ\88یا}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Ø£Ù\86دÙ\88Ù\85}}  {{PLURAL:$1|دأسÛ\95|دأسÛ\95 یا}}:",
        "prefs-memberingroups-type": "$1",
        "prefs-registration": "گات ثوت نام:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "نوم راستكی:",
-       "yourlanguage": "زون:",
+       "yourlanguage": "زÙ\88Ù\99Ù\86:",
        "yourvariant": "مینونه آلشتگر زون:",
        "prefs-help-variant": "قسه وری انتخاوی شما سی نمائشت مینونه بلگه یا د ای ویکی.",
        "yournick": "امضا تازه:",
        "badsig": "امضا خؤم بی اعتوار.\nسردیسیا اچ تی ام ال نه وارسی بکیت.",
        "badsiglength": "امضا شما فره گپه.\nدرازا امضا باید کمتر  د $1 {{PLURAL:$1|نیسه}} بوئه.",
        "yourgender": "شما بیشتر میهایت که چه جوری گوته بوئه؟",
-       "gender-unknown": "مه میهام چی یی نموئم",
+       "gender-unknown": "د گاتی کئ شوما میائیت ڤا ڤیرئموٙ، نأرم أفزار دوبیشتأر  کألمیە یا جئنس خومثا نە ڤئ کار مئیرە",
        "gender-male": "وه(پیا) بلگه یا ویکی نه ویرایشت می که",
        "gender-female": "وه(زئنه)بلگه یا ویکی نه ویرایشت می که",
        "prefs-help-gender": "انجوم دئن ای میزونکاری دل به هاییه.\nنرم افزار سی هشاره درست وه جنسیت و گوتن شما سی کسونا تر د شکل درست وه کار بسن یه گل دستور زون یه نه وه کار می بنه.\nای دونسمنیا سی کل خلک دیارن.",
-       "email": "اÙ\86جÙ\88Ù\85اÙ\86اÙ\85Ù\87",
+       "email": "Ø£Ù\86جÙ\88Ù\85اÙ\86اÙ\85Û\95",
        "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو نوم راستکی وه کار گرته بوئه.",
        "prefs-help-email": "تیرنشون ایمیل دل بهاییه.اما سی وایافت رازینه گواردن دش میهایتش.شما باید رازینه گواردنتونه د ویر بوریت",
        "prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین انجومانامه مین یه هوم پیوند د بلگه کاریاری یا بلگه چک چنه تو انتخاو بکید.تیرنشون انجومانامه تونه د گاتی که کاریاریا هنی وا تو پیوند می گرن دیار نی.",
        "prefs-help-email-required": "تیرنشون انجومانامه واس با.",
        "prefs-info": "دونسمنیا اولیه",
        "prefs-i18n": "جهون ولاتمنی",
-       "prefs-signature": "امضا",
+       "prefs-signature": "ئمضا",
        "prefs-dateformat": "شلک گات",
        "prefs-timeoffset": "جا وه جایی گاتی",
        "prefs-advancedediting": "گزینه یا خلکمنی",
        "prefs-editor": "ويرايشتگر",
-       "prefs-preview": "پیش سیل",
+       "prefs-preview": "پیش سئیل",
        "prefs-advancedrc": "گزینه یا پیشکرده",
        "prefs-advancedrendering": "گزینه یا پیشکرده",
        "prefs-advancedsearchoptions": "گزینه یا پیشکرده",
        "userrights-lookup-user": "دسه یا کاروری نه دیوون داری بکیت",
        "userrights-user-editname": "یه گل نوم کاریاری وارد بکیت:",
        "editusergroup": "ویرایشت گرویا کاریاری",
-       "editinguser": "Ø¢Ù\84شت Ø¯Ø¦Ù\86 Ø­Ù\82Ù\88Ù\82 Ú©Ø§Ø±Û\8cارÛ\8c Ú©Ø§Ø±Û\8cار'''[[کاریار:$1|$1]]''' $2",
+       "editinguser": "Ø¢Ù\84ئشت Ø¯Ø£Ø¦Ù\86 Ø­Ù\88Ù\82Ù\88Ù\99Ù\82 Ú©Ø§Ø±Û\8cارÛ\8c Ú©Ø§Ø±Û\8cار '''[[کاریار:$1|$1]]''' $2",
        "userrights-editusergroup": "ویرایشت گرویا کاریاری",
        "saveusergroups": "اماییه کردن گرویا کاریاری",
        "userrights-groupsmember": "اندوم:",
        "userrights-groupsmember-auto": "اندوم ضمنی:",
        "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "شما می تونیت دسه یای که ای کاریار ها دشو آلشت بئیتو:\n* جعوه نشودار وه ای مئنیه که کاریار ها د او دسه.\n* جعوه بی نشون وه ای مئنیه که کاریار د او دسه نئ.\n* نشون* د ای مئنیه که ار شما او دسه نه اضاف بکیتو د نهاتر نموئه ؤردارینش یا برعسگش.",
-       "userrights-reason": "دليل:",
+       "userrights-reason": "دألیل:",
        "userrights-no-interwiki": "شما سی ویرایشت حقوق کاریار د ویکی یا هنی دسرسی ناریت.",
        "userrights-nodatabase": "پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.",
        "userrights-nologin": "شما باید وا یه گل حساو کاریاری دیووندار [[Special:UserLogin|روئیت وامین ]] تا تونستوییت حقوق کاریاری کاریار نه گماشته کاری بکیت.",
        "userrights-irreversible-marker": "$1*",
        "userrights-conflict": "تعارض دسرسیا کاریاری! لطف بکیت یه گل وارسی انجوم بئیت و آلشتانه پشت راس بکیت.",
        "userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.",
-       "group": "گرو",
+       "group": "جأرغە",
        "group-user": "کاریاریا",
-       "group-autoconfirmed": "کاریاریا خود پش راست بیه",
-       "group-bot": "بتیا",
-       "group-sysop": "دÛ\8cÙ\88Ù\88Ù\86داریا",
+       "group-autoconfirmed": "کاریاریا خود پوشت راس بییە",
+       "group-bot": "بوتیا",
+       "group-sysop": "سأردÛ\8cÚ¤Ù\88Ù\99Ù\86Ú©اریا",
        "group-bureaucrat": "بروکراتیا",
-       "group-suppress": "تیه پایا",
-       "group-all": "(همه)",
+       "group-suppress": "تیە پایا",
+       "group-all": "(هأمە)",
        "group-user-member": "{{GENDER:$1|کاریار}}",
        "group-autoconfirmed-member": "{{GENDER:$1|کاریار خودانجومکار}}",
        "group-bot-member": "{{حنس:$1|بوت}}",
        "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
        "right-sendemail": "سی کاریاریا هنی انجومانامه کل بکید",
        "right-passwordreset": "رازینه گواردن انجومانامه د نو دئه بیه نه بوینیت",
-       "right-managechangetags": "راس Ú©Ø±Ø¯Ù\86[[Special:سردÛ\8cسÛ\8cا|سردÛ\8cسÛ\8cا]] Ù¾Ø§Ú©Ø³Ø§ Ú©Ø±Ø¯Ù\86 Ø¯ Ø±Ø³Û\8cÙ\86Ù\87 جا",
+       "right-managechangetags": "راس Ú©Ø¦Ø±Ø¯Ø¦Ù\86 [[Special:سأردÛ\8cسÛ\8cا|سأردÛ\8cسÛ\8cا]] Ù¾Ø§Ú©Ø³Ø§ Ú©Ø¦Ø±Ø¯Ø¦Ù\86 Ø¯ Ø±Ø¦Ø³Û\8cÙ\86Û\95 جا",
        "right-applychangetags": "وه کار گرتن [[Special:سردیسیا|سردیسیا]] واگرد آلشتیا هر کومشو",
        "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
        "newuserlogpage": "راس بیه وا کاریار",
        "action-changetags": "اضاف کردن یا جا وه جاکاری سردیسیا دل وه حایی د وانئریا و پهرستنومه یا شخصی",
        "nchanges": "$1 {{PLURAL:$1|آلشت|آلشتیا}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|د آخری دیئن}}",
-       "enhancedrc-history": "ويرگار",
-       "recentchanges": "Ø¢Ù\84شتÛ\8cا Ø§Û\8cسنی",
+       "enhancedrc-history": "ڤیرگار",
+       "recentchanges": "Ø¢Ù\84ئشتÛ\8cا Ø¦Û\8cسئنی",
        "recentchanges-legend": "گزینه یا آلشتیا ایسنی",
        "recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
        "recentchanges-noresult": "هیژ آلشتی د درازا دوره دیار بیه وا ای معیاریا یکی نبی.",
        "rcshowhidebots-show": "نشو دئن",
        "rcshowhidebots-hide": "قام کردن",
        "rcshowhideliu": "$1 کاریاریا ثوت نام کرده",
-       "rcshowhideliu-show": "Ù\86Ø´Ù\88 Ø¯ئن",
-       "rcshowhideliu-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
+       "rcshowhideliu-show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
+       "rcshowhideliu-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
        "rcshowhideanons": "کاریار نادیار $1",
-       "rcshowhideanons-show": "Ù\86Ø´Ù\88 Ø¯ئن",
-       "rcshowhideanons-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
+       "rcshowhideanons-show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
+       "rcshowhideanons-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
        "rcshowhidepatr": "$1 ویرایشتیا تیه پرس بیه",
-       "rcshowhidepatr-show": "Ù\86Ø´Ù\88 Ø¯ئن",
-       "rcshowhidepatr-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
-       "rcshowhidemine": "ويرايشتيا مه$1",
-       "rcshowhidemine-show": "Ù\86Ø´Ù\88 Ø¯ئن",
-       "rcshowhidemine-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
+       "rcshowhidepatr-show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
+       "rcshowhidepatr-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
+       "rcshowhidemine": "ڤیرایئشتیا مئ $1",
+       "rcshowhidemine-show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
+       "rcshowhidemine-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
        "rclinks": "آخرین آلشتیا $1 نشو بیه د اخرین روزیا $2",
-       "diff": "فرخ",
-       "hist": "ويرگار",
-       "hide": "قام كردن",
-       "show": "Ù\86Ø´Ù\88 Ø¯ئن",
+       "diff": "Ù\81أرخ",
+       "hist": "ڤیرگار",
+       "hide": "قام کئردئن",
+       "show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
        "minoreditletter": "م",
        "newpageletter": "ن",
        "boteditletter": "ب",
        "recentchangeslinked-toolbox": "آلشتیا ته یک",
        "recentchangeslinked-title": "آلشتیا تی یکی د $1",
        "recentchangeslinked-summary": "ای نوم گه تازه د بلگیایی که وا بلگیا ویجه هوم پیوند بینه آلشت بیه(یا سی اندومیا دسه بنی بیه)\nبلگیا یی که هان [[Special:Watchlist|your watchlist]]و گپ بینه",
-       "recentchangeslinked-page": "نوم بلگه:",
+       "recentchangeslinked-page": "نوم بألگە:",
        "recentchangeslinked-to": "آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه",
-       "upload": "سوار کردن جانیا",
-       "uploadbtn": "سوار کردن جانیا",
+       "upload": "سوڤار کئردئن جانیا",
+       "uploadbtn": "سوڤار کئردئن جانیا",
        "reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد",
        "upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا",
        "uploadnologin": "وارد نبیه",
        "uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.",
        "upload_directory_missing": "نشونگه سوارکرد ($1) وجود ناره و نبوئه دروسش بکی.",
        "upload_directory_read_only": "نشونگه سوارکرد($1) د لا سرور قاول نیسنن نئ.",
-       "uploaderror": "خطا Ø¯ Ø³Ù\88ار Ú©Ø±Ø¯ن",
+       "uploaderror": "خأطا Ø¯ Ø³Ù\88ڤار Ú©Ø¦Ø±Ø¯Ø¦ن",
        "upload-recreate-warning": "'''زئنار: جانیایی که وه ای نومه یا پاکسا بیه یا جا وه جا بیه.'''\n\nسی رائتی، نومگه پاکساگری و جا وه جا کردن ای بلگه ها د هار:",
        "uploadtext": "دسی دئین جانیایی که  د دماتر سوار بینه روئیت وه  [[Special:FileList|نوم گه جانیایا]] . د نو سوارکردن  د [[Special:Log/upload|نوم گه سوارکردیا]] و پاکساگری جانیایا د [[Special:Log/delete|deletion log]] جاگئر موئه.\n\nنها یه که یه گل جانیانه سوار کردیت می تونیت د سه شکل هاری وه نه د بلگه یا وه کار بونیت:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' سی به کار بسن نسقه کامل جانیا\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' سی به کار بسن یه گل نسقه 200 پیکسلی  د جانیایی که ها د مینه یه گل جعوه  که ها د لا چپ نیسسه که د وه عبارت alt text چی توضیح وه کار بسه بیه\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' سی دروس کردن یه گل هوم پیوند سرراست وه جانیا بی یه که جانیا دیاری بکه نوم بلگه هاری سی سوارکرد جانیایا تازه استفاده بکیت.",
        "upload-permitted": "جورا جانیا صلادار:$1 .",
        "fileuploadsummary": "چکسه",
        "filereuploadsummary": "آلشتیا جانیا:",
        "filestatus": "حال و بال کپی رایت",
-       "filesource": "سرÚ\86Ø´Ù\85Ù\87:",
+       "filesource": "سأرÚ\86ئشÙ\85Û\95:",
        "ignorewarning": "تیه پوشی د زئنار و اماییه کردن جانیا",
        "ignorewarnings": "د هر زنهار تیه پوشی کو",
        "minlength1": "نوم جانیا باید حداقل یه حرف داشتوئه.",
        "upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ",
        "upload-http-error": "یه گل خطا اچ تی تی پی پیش اومائه:$1",
        "upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.",
+       "upload-dialog-button-done": "أنجوم بییە",
+       "upload-dialog-button-save": "ئمایە کئردئن",
+       "upload-dialog-button-upload": "سوڤار کئردئن",
        "backend-fail-stream": "نبوئه جانیا\"$1\" کل بوئه.",
        "backend-fail-backup": "نبوئه سی \"$1\" پشتجا گرت.",
        "backend-fail-notexists": "جانیا $1 وجود ناره.",
        "license-nopreview": "(پیش سیل د دسرس نئ)",
        "upload_source_url": "(شما یه گل جانیا د یه گل یو آر ال د دسرس خلک و معتور ورچئ کردیته)",
        "upload_source_file": "(یه گل جانیا د انجومیار تو انتخاو بکیت)",
-       "listfiles-delete": "پاکسا Ú©Ø±Ø¯ن",
+       "listfiles-delete": "پاکسا Ú©Ø¦Ø±Ø¯Ø¦ن",
        "listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
        "listfiles_search_for": "پی جوری سی نوم رسانه:",
        "listfiles-userdoesnotexist": "حساو کاریاری «$1» ثوت نام نبیه.",
        "imgfile": "جانیا",
-       "listfiles": "نوم گه فایل",
-       "listfiles_thumb": "بن کلکی",
-       "listfiles_date": "تاريخ",
+       "listfiles": "نومگە جانیا",
+       "listfiles_thumb": "بأن کئلئکی",
+       "listfiles_date": "گات",
        "listfiles_name": "نوم",
        "listfiles_user": "کاریار",
-       "listfiles_size": "اÙ\86ازÙ\87",
+       "listfiles_size": "Ø£Ù\86ازÛ\95",
        "listfiles_description": "شرح",
        "listfiles_count": "نسقیا",
        "listfiles-show-all": "شومل نسقه یا نهاتری عسگیا",
        "listfiles-latestversion": "نسقه تازه",
-       "listfiles-latestversion-yes": "هری",
-       "listfiles-latestversion-no": "نه",
-       "file-anchor-link": "فايل",
-       "filehist": "ويرگار جانیا",
+       "listfiles-latestversion-yes": "Ù\87أرÛ\8c",
+       "listfiles-latestversion-no": "تە",
+       "file-anchor-link": "جانیا",
+       "filehist": "ڤیرگار جانیا",
        "filehist-help": "ری  ويرگاريا بپورنيت تا نسقه مرتوط بونيت.",
-       "filehist-deleteall": "همه نه پاکسا کو",
-       "filehist-deleteone": "پاك كردن",
-       "filehist-revert": "Ù\88رگÙ\86Û\8cن",
-       "filehist-current": "تازه باو",
+       "filehist-deleteall": "هأمە نئ پاکسا کو",
+       "filehist-deleteone": "پاکسا کئردئن",
+       "filehist-revert": "Ù\84ئرÙ\86Û\8cئن",
+       "filehist-current": "تازە باڤ",
        "filehist-datetime": "ويرگار/وخت",
        "filehist-thumb": "عسگ كؤچك بيه",
        "filehist-thumbtext": "كؤچك كردن سی  نسقه چی $1",
        "filehist-user": "کاریار",
        "filehist-dimensions": "بعديا",
        "filehist-filesize": "انازه فایل",
-       "filehist-comment": "نظر",
+       "filehist-comment": "ڤیر و باڤأر",
        "imagelinks": "وه کار گری جانیا",
        "linkstoimage": "دمال بيه {{PLURAL:$1|ديس ونيا بلگه|$1 ديس ون بلگيا}} دای فایل:",
        "linkstoimage-more": "بیشتر د $1 بلگه د ای جانیا هوم پیوند {{PLURAL:$1|بیه|بینه}}.\nنومگه هاری تئنا {{PLURAL:$1|اولین هوم پیوند|اولین $1 هوم پیوند}} د ای بلگه نه نشو می ئه.\n[[Special:WhatLinksHere/$2|نومگه کامل]] ئم هیئش.",
        "randomincategory": "بلگه بختی د ای دسه",
        "randomincategory-invalidcategory": "\"$1\"  نوم دسه معتوری نئ.",
        "randomincategory-nopages": "هیچ بلگه ای د ای  [[:دسه نئ:$1|$1]] دسه.",
-       "randomincategory-category": "دسÙ\87:",
+       "randomincategory-category": "دأسÛ\95:",
        "randomincategory-legend": "بلگه بختی د ای دسه",
        "randomredirect": "واگردونی بختکی",
        "randomredirect-nopages": "هیچ واگردونی د نومجا \"$1\" نئ.",
        "double-redirect-fixer": "تعمیر کننه واگردونی",
        "brokenredirects": "واگردونیا بی سرانجوم",
        "brokenredirectstext": "واگردونیا نهاتر د بلگه یایی که وجود نارن هوم پیوند بینه.",
-       "brokenredirects-edit": "ویرایشت",
+       "brokenredirects-edit": "ڤیرایئشت",
        "brokenredirects-delete": "پاكسا كردن",
        "withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن",
        "withoutinterwiki-summary": "بلگه یا هاری وه زون نسقه یا زونا تر هوم پیوند نبیه.",
        "protectedtitles": "سرونیا پر و پیم بیه",
        "protectedtitles-summary": "د ای بلگه نومگه بلگه یایی هیئن که د ایسنی پر و پیم بینه. سی نومگه سرونیا که نبوئه دروس بان، سیل[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]  بکیت.",
        "protectedtitlesempty": "د ایسنی هیچ سرونی وا ای پارامتریا پر و پیم نبیه",
-       "listusers": "نوم گه کارور",
-       "listusers-editsonly": "فقط کاروریایی که ویرایشت می کن نشو بیه",
+       "listusers": "نومگە کاریار",
+       "listusers-editsonly": "فأقأط کاریاریایی کئ ڤیرایئشت کاری می کأن دیار بان",
        "listusers-creationsort": "سرجاخودگری د اساس گات دروس بیین",
        "listusers-desc": "سرجاخودگری د اساس گپ د کؤچک",
        "usereditcount": "$1{{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "usercreated": "{{جنسیت:$3|راس بیه}}د $1 at $2",
        "newpages": "بلگيا نو",
-       "newpages-username": "نوم كاروری:",
+       "newpages-username": "نوم کاریاری:",
        "ancientpages": "بلگه یا نهاتر",
        "move": "جاوه جا بوئيت",
        "movethispage": "ای بگله نه جا وه جا كو",
        "linksearch-pat": "سازه یار پی جوری:",
        "linksearch-ns": "نوم جا:",
        "linksearch-ok": "پی جوری",
-       "linksearch-text": "نشونه یا چی «‎*.wikipedia.org» نم بوئه وه کار گرت.\nد کمترونه یه گل پوشگر ریتراز وارو، .\"*.org\" میها.<br />\n{{PLURAL:$2|پروتکل|پروتکل یا}} بی حامین: <code>$1</code> (پیش حاست سی http:// د حال وباری که پروتکل میزوکاری نبیه با).",
+       "linksearch-text": "نشونه یا چی «‎*.wikipedia.org» نم بوئه وه کار گرت.\nد کمترونه یه گل پوشگر ریتراز وارو، .\"*.org\" میها.<br />\n{{PLURAL:$2|پروتکل|پروتکل یا}} بی حامین: $1 (پیش حاست سی http:// د حال وباری که پروتکل میزوکاری نبیه با).",
        "linksearch-line": "$1 داره د $2 هوم پیوند بوئه",
        "linksearch-error": "نشونه یا فقط د اول نوم مئموندار اینترنتی می تونن وه کار گرته بان.",
        "listusersfrom": "کاریاریایی که د شرو بینه نشو بیه:",
        "listusers-submit": "نشو دئن",
-       "listusers-noresult": "هیچ کاروری پیدا نبی",
-       "listusers-blocked": "(Ù\82Ù\84Ù\81 Ø¨Ù\8aÙ\87)",
-       "activeusers": "نوم گه کاروریا کارکو",
+       "listusers-noresult": "هیچ کاریاری دیاری نأکئرد.",
+       "listusers-blocked": "(Ù\86ئÙ\87اگئرÛ\8c Ø¨Û\8cÛ\8cÛ\95)",
+       "activeusers": "نومگە کاریاریا کونئشتگأر",
        "activeusers-intro": "شما د هار یه گل نومگه د کاریاریایی نه مینیت که د $1 {{PLURAL:$1|رو|رو}} دماتر کنشتگر بینه.",
        "activeusers-count": "$1 {{PLURAL:$1|کنشت|کنشت}} در {{PLURAL:$3|رو|$3 رو}} دماتر",
        "activeusers-from": "کاریاریایی که د شرو بینه نشو بیه:",
        "mailnologintext": "سی کل کردن انجومانامه وه کاریاریا هنی واس [[Special:UserLogin|بیایت وامین سامونه]] و تیرنشون انجومانامه معتوری د [[Special:Preferences|ترجیحات]] خوتو داشتوئیت.",
        "emailuser": "ای كارور نه ايميل كو",
        "emailuser-title-target": "ایمیل سی ای {{GENDER:$1|کارور}}",
-       "emailuser-title-notarget": "ایمیل کارور",
-       "emailpage": "ایمیل کارور",
+       "emailuser-title-notarget": "أنجومانامە کاریار",
        "emailpagetext": "شما می تونیت  نوم بلگه هار نه سی کل کردن یه گل انجومانامه وه ای  {{GENDER:$1|کاریار}} وه کار بئیرت.\nتیرنشون انجومانامه یی که د [[Special:Preferences|ترجیحات کاریارتو]] دئیه ته د تیرنشون کلکار انجومانامه میا، سی یه که گیرنه بتونه جواوش بیه.",
        "defemailsubject": "{{نوم سیل جا}} ایمیل د کارور \"$1\"",
        "usermaildisabled": "ایمیل کارور د کار افتائه",
        "nowikiemailtext": "ای کاریار میها که د کاریاریا هنی انجومانامه نگره.",
        "emailnotarget": "نوم کاریاری که وجود ناره یا سی گیرنه نامعتوره",
        "emailtarget": "یه گل نوم کاریاری سی پذریشتگر وارد بکیت",
-       "emailusername": "نوم كاروری:",
-       "emailusernamesubmit": "دئÙ\86",
+       "emailusername": "نوم کاریاری:",
+       "emailusernamesubmit": "دأئÙ\86:",
        "email-legend": "کل کردن یه گل انجومانامه سی یه گل کاریار هنی د {{SITENAME}}",
        "emailfrom": "د:",
        "emailto": "سی:",
        "minimum-size": "انازه کمترونه",
        "maximum-size": "انازه بیشترونه",
        "pagesize": "(بایتیا)",
-       "restriction-edit": "ويرايشت",
+       "restriction-edit": "ڤیرایئشت",
        "restriction-move": "جاوه جا بوئيت",
        "restriction-create": "راس كردن",
        "restriction-upload": "سوار کرد",
        "pageinfo-title": "دونسمنیا سی \"$1\"",
        "pageinfo-not-current": "د بدبختی،نبوئه که ای دونسمنیا نه سی وانئریا دماتری نهااماییه بکیت.",
        "pageinfo-header-basic": "دونسمنیا پایه",
-       "pageinfo-header-edits": "ویرایشت ویرگار",
+       "pageinfo-header-edits": "ڤیرایئشت ڤیرگار",
        "pageinfo-header-restrictions": "پر و پیم کردن بلگه",
        "pageinfo-header-properties": "چیا بلگه",
        "pageinfo-display-title": "نشو دئن سرون",
        "autosumm-newblank": "بلگه حالی دروس بیه",
        "lag-warn-normal": "شایت آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکن.",
        "lag-warn-high": "شایت سی واپس رئتن فره رسینه جا، آلشتیا تازه تر د $1 {{PLURAL:$1|ثانیه|ثانیه یا}} د ای نومگه دیاری نکرده بان.",
-       "watchlistedit-normal-title": "ویرایشت سیل برگ",
+       "watchlistedit-normal-title": "ڤیرایئشت سئیل بأرگ",
        "watchlistedit-normal-legend": "ؤرداشتن سرونیا د سیل برگ",
        "watchlistedit-normal-explain": "داسونایی که هان د نومگه سیل برگه شما د هار اومائنه.\nسی پاکسا کردن داسون جعوه کناری وه نه نشودار بکیت و دگمه «{{int:Watchlistedit-normal-submit}}» نه بپورنیت.\nشما همچنی می تونیت [[Special:EditWatchlist/raw|نومگه خام نه ویرایشت بکیت]].",
        "watchlistedit-normal-submit": "ؤرداشتن سرونیا",
index 9c6bc6f..b220367 100644 (file)
        "actionthrottled": "Veiksmas apribotas",
        "actionthrottledtext": "Kad būtų apsisaugota nuo reklamų, jums neleidžiama daug kartų atlikti šį veiksmą per trumpą laiko tarpą, bet jūs pasiekėte šį limitą. Prašome vėl pamėginti po kelių minučių.",
        "protectedpagetext": "Šis puslapis yra užrakintas, saugant jį nuo redagavimo.",
-       "viewsourcetext": "Jūs galite žiūrėti ir kopijuoti puslapio kodą:",
-       "viewyourtext": "Jūs galite matyti ir kopijuoti '''savo redagavimų''' tekstą į šį puslapį:",
+       "viewsourcetext": "Jūs galite peržiūrėti ir kopijuoti puslapio kodą:",
+       "viewyourtext": "Jūs galite peržiūrėti ir kopijuoti <strong>savo pakeitimų</strong> kodą į šį puslapį:",
        "protectedinterface": "Šiame puslapyje yra apsaugotas nuo piktnaudžiavimo programinės įrangos sąsajos tekstas. Norėdami pridėti ar pakeisti vertimus visose wiki, naudokite [//translatewiki.net/ translatewiki.net] MediaWiki vertimų projektą.",
        "editinginterface": "'''Dėmesio:''' Jūs redaguojate puslapį, kuris yra naudojamas programinės įrangos sąsajos tekste. Pakeitimai šiame puslapyje taip pat pakeis naudotojo sąsajos išvaizdą ir kitiems naudotojams šiame wiki.",
        "translateinterface": "Kad pridėtumėte vertimus visoms wiki, naudokitės  [//translatewiki.net/ translatewiki.net] – projektu, skirtu MediaWiki vertimams į vietines kalbas.",
-       "cascadeprotected": "Šis puslapis buvo apsaugotas nuo redagavimo, kadangi jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:\n$2",
+       "cascadeprotected": "Šis puslapis buvo apsaugotas nuo redagavimo, kadangi jis yra įtrauktas į {{PLURAL:$1|šį puslapį, kuris yra apsaugotas|šiuos puslapius, kurie yra apsaugoti}} su „pakopinės apsaugos“ parinktimi:\n$2",
        "namespaceprotected": "Jūs neturite teisės redaguoti puslapių '''$1''' srityje.",
        "customcssprotected": "Jūs neturite teisės keisti šį CSS puslapį, nes jame yra kito naudotojo asmeniniai nustatymai.",
        "customjsprotected": "Jūs neturite teisės keisti šį JavaScript puslapį, nes jame yra kito naudotojo asmeniniai nustatymai.",
        "createacct-benefit-body2": "{{PLURAL:$1|puslapis|puslapiai}}",
        "createacct-benefit-body3": "Neseni {{PLURAL:$1|autorius|autoriai|autorių}}",
        "badretype": "Įvesti slaptažodžiai nesutampa.",
+       "usernameinprogress": "Profilio kūrimas šiam naudotojo vardui jau vyksta.\nPrašome palaukti.",
        "userexists": "Įvestasis naudotojo vardas jau naudojamas.\nPrašome pasirinkti kitą vardą.",
        "loginerror": "Prisijungimo klaida",
        "createacct-error": "Paskyros kūrimo klaida",
        "creating": "Kuriama $1",
        "editingsection": "Taisomas $1 (skyrelis)",
        "editingcomment": "Taisomas $1 (naujas skyrius)",
-       "editconflict": "Jūsų pakeitimai negali būti įrašyti dėl redagavimo konflikto. Ar norite išspręsti konfliktą rankiniu būdu?",
+       "editconflict": "Redaguoti konfliktą: $1",
        "explainconflict": "Kažkas kitas jau pakeitė puslapį nuo tada, kai jūs pradėjote jį redaguoti.\nViršutiniame tekstiniame lauke pateikta šiuo metu esanti puslapio versija.\nJūsų keitimai pateikti žemiau esančiame lauke.\nJums reikia sujungti jūsų pakeitimus su esančia versija.\nKai paspausite „{{int:savearticle}}“, bus įrašytas '''tik''' tekstas viršutiniame tekstiniame lauke.",
        "yourtext": "Jūsų tekstas",
        "storedversion": "Išsaugota versija",
        "readonlywarning": "'''Įspėjimas: Duomenų bazė buvo užrakinta techninei profilaktikai, todėl šiuo metu negalėsite išsaugoti savo pakeitimų. Siūlome nusikopijuoti tekstą į tekstinį failą ir vėliau jį čia išsaugoti.'''\n\nJą užrakinusio administratoriaus paaiškinimas: $1",
        "protectedpagewarning": "'''Dėmesio: Šis puslapis yra užrakintas taip, kad jį redaguoti gali tik administratoriaus teises turintys naudotojai.'''\nNaujausias įrašas žurnale yra pateiktas žemiau:",
        "semiprotectedpagewarning": "'''Pastaba:''' Šis puslapis buvo užrakintas, jį gali redaguoti tik registruoti naudotojai.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
-       "cascadeprotectedwarning": "'''Dėmesio''': Šis puslapis buvo užrakintas taip, kad tik naudotojai su administratoriaus teisėmis galėtų jį redaguoti, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:",
+       "cascadeprotectedwarning": "<strong>Dėmesio:</strong> Šis puslapis buvo užrakintas taip, kad tik naudotojai su administratoriaus teisėmis galėtų jį redaguoti, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi:",
        "titleprotectedwarning": "'''Dėmesio: Šis puslapis buvo užrakintas taip, kad tik [[Special:ListGroupRights|kai kurie naudotojai]] galėtų jį sukurti.'''\nNaujausias įrašas žurnale yra pateiktas žemiau:",
        "templatesused": "{{PLURAL:$1|Šablonas|Šablonai}}, naudojami puslapyje:",
        "templatesusedpreview": "{{PLURAL:$1|Šablonas|Šablonai}}, naudoti šioje peržiūroje:",
        "search-category": "(kategorija $1)",
        "search-file-match": "(atitinka rinkmenos turinį)",
        "search-suggest": "Galbūt norėjote $1",
+       "search-rewritten": "Rodomi $1 rezultatai. Vietoje to ieškoti $2.",
        "search-interwiki-caption": "Dukteriniai projektai",
        "search-interwiki-default": "Rezultatai iš $1:",
        "search-interwiki-more": "(daugiau)",
        "rows": "Eilutės:",
        "columns": "Stulpeliai:",
        "searchresultshead": "Paieškos nustatymai",
-       "stub-threshold": "Puslapį žymėti <a href=\"#\" class=\"stub\">nebaigtu</a>, jei mažesnis nei:",
+       "stub-threshold": "Ribinė reikšmė nepilnų puslapių nuorodų formatavimui ($1):",
+       "stub-threshold-sample-link": "pavyzdys",
        "stub-threshold-disabled": "Išjungtas",
        "recentchangesdays": "Rodomos dienos paskutinių keitimų sąraše:",
        "recentchangesdays-max": "(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})",
        "newpageletter": "N",
        "boteditletter": "R",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|stebintis naudotojas|stebintys naudotojai|stebinčių naudotojų}}]",
-       "rc_categories": "Rodyti tik šias kategorijas (atskirkite naudodami „|“)",
-       "rc_categories_any": "Bet kokia",
+       "rc_categories": "Riboti kategorijoms (atskirkite su „|“)",
+       "rc_categories_any": "Bet kuris iš pasirinktųjų",
        "rc-change-size-new": "$1 {{PLURAL:$1|baitas|baitai|baitų}} po pakeitimo",
        "newsectionsummary": "/* $1 */ naujas skyrius",
        "rc-enhanced-expand": "Rodyti detales",
        "upload-too-many-redirects": "URL yra per daug kartų peradresuotas",
        "upload-http-error": "Įvyko HTTP klaida: $1",
        "upload-copy-upload-invalid-domain": "Pakrovimų kopijos yra neleidžiamos iš šio domeno.",
+       "upload-dialog-title": "Įkelti failą",
+       "upload-dialog-error": "Įvyko klaida",
+       "upload-dialog-warning": "Įvyko įspėjimas",
+       "upload-dialog-button-cancel": "Atšaukti",
+       "upload-dialog-button-done": "Atlikta",
+       "upload-dialog-button-save": "Išsaugoti",
+       "upload-dialog-button-upload": "Įkelti",
+       "upload-dialog-label-select-file": "Pasirinkti failą",
+       "upload-dialog-label-infoform-title": "Detalės",
+       "upload-dialog-label-infoform-name": "Pavadinimas",
+       "upload-dialog-label-infoform-description": "Aprašymas",
+       "upload-dialog-label-usage-title": "Naudojimas",
+       "upload-dialog-label-usage-filename": "Failo pavadinimas",
        "backend-fail-stream": "Negali būti apdorotas failas $1.",
        "backend-fail-backup": "Negali būti išsaugotas failas $1.",
        "backend-fail-notexists": "Failas $1 neegzistuoja.",
        "linksearch-pat": "Ieškoti modulio:",
        "linksearch-ns": "Vardų sritis:",
        "linksearch-ok": "Ieškoti",
-       "linksearch-text": "Galima naudoti žvaigždutes, pvz., „*.wikipedia.org“.<br />\nYra būtinas bent jau aukščiausio lygio domenas, pvz., „*.org“.<br />\n{{PLURAL:$2|Palaikomas protokolas|Palaikomi protokolai|Palaikomų protokolų}}: <code>$1</code> (numato į http://, jei nenurodytas joks protokolas).",
+       "linksearch-text": "Galima naudoti žvaigždutes, pvz., „*.wikipedia.org“.<br />\nYra būtinas bent jau aukščiausio lygio domenas, pvz., „*.org“.<br />\n{{PLURAL:$2|Palaikomas protokolas|Palaikomi protokolai|Palaikomų protokolų}}: $1 (numato į http://, jei nenurodytas joks protokolas).",
        "linksearch-line": "$1 yra susietas iš $2",
        "linksearch-error": "Žvaigždutės gali būti tik adreso pradžioje.",
        "listusersfrom": "Rodyti naudotojus pradedant nuo:",
        "emailuser": "Rašyti laišką šiam naudotojui",
        "emailuser-title-target": "Siųsti E-pašto žinutę {{GENDER:$1|user}}",
        "emailuser-title-notarget": "El. pašto vartotojas",
-       "emailpage": "Siųsti el. laišką naudotojui",
        "emailpagetext": "Jūs galite pasinaudoti šiuo pavyzdžiu, norėdami nusiųsti elektroninį laišką šiam naudotojui.\nElektroninio pašto adresas, kurį įvedėte [[Special:Preferences|savo naudotojo nustatymuose]], bus rodomas kaip el. pašto siuntėjo adresas, tam, kad gavėjas galėtų jums iškart atsakyti.",
        "defemailsubject": "{{SITENAME}} el. pašto iš vartotojo \" $1 \"",
        "usermaildisabled": "Naudotojo elektroninis paštas išjungtas",
        "emailccsubject": "Laiško kopija naudotojui $1: $2",
        "emailsent": "El. laiškas išsiųstas",
        "emailsenttext": "Jūsų el. pašto žinutė išsiųsta.",
-       "emailuserfooter": "Šis el. laiškas buvo išsiųstas naudotojo $1 naudotojui $2 naudojant „{{int:emailpage}}“ funkciją {{SITENAME}}.",
+       "emailuserfooter": "Šis el. laiškas buvo išsiųstas naudotojo $1 naudotojui $2 naudojant „{{int:emailuser}}“ funkciją {{SITENAME}}.",
        "usermessage-summary": "Paliekamas sistemos pranešimas.",
        "usermessage-editor": "Sistemos pranešėjas",
        "watchlist": "Stebimų sąrašas",
        "watchlistanontext": "Prašome prisijungti, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.",
        "watchnologin": "Neprisijungęs",
        "addwatch": "Pridėti į stebimųjų sąrašą",
-       "addedwatchtext": "Puslapis „[[:$1]]“ pridėtas į [[Special:Watchlist|stebimųjų sąrašą]].\nBūsimi puslapio bei atitinkamo aptarimo puslapio pakeitimai bus rodomi stebimųjų puslapių sąraše,\ntaip pat bus '''paryškinti''' [[Special:RecentChanges|naujausių keitimų sąraše]], kad išsiskirtų iš kitų puslapių.",
+       "addedwatchtext": "\"[[:$1]]\" ir jo aptarimo puslapis buvo įtraukti į Jūsų [[Special:Watchlist|stebėjimo sąrašą]].",
        "addedwatchtext-short": "Puslapis „$1“ pridėtas į jūsų stebimųjų sąrašą.",
        "removewatch": "Pašalinti iš stebimųjų sąrašo",
-       "removedwatchtext": "Puslapis „[[:$1]]“ pašalintas iš jūsų [[Special:Watchlist|stebimųjų sąrašo]].",
+       "removedwatchtext": "\"[[:$1]]\" ir jo aptarimo puslapis buvo pašalinti iš Jūsų [[Special:Watchlist|stebėjimo sąrašo]].",
        "removedwatchtext-short": "Puslapis „$1“ pašalintas iš jūsų stebimųjų sąrašo.",
        "watch": "Stebėti",
        "watchthispage": "Stebėti šį puslapį",
        "changecontentmodel-success-title": "Turinio modelis buvo atnaujintas",
        "changecontentmodel-success-text": "Turinys, kurio tipas [[:$1]], buvo atnaujintas.",
        "changecontentmodel-cannot-convert": "Turinys [[:$1]] negali būti konvertuotas į $2 tipą.",
-       "changecontentmodel-title-cantexist": "Negalima turėti puslapio $1.",
        "changecontentmodel-nodirectediting": "$1 turinio modelis nepalaiko tiesioginio redagavimo",
        "log-name-contentmodel": "Turinio modelio kaitos istorija",
        "log-description-contentmodel": "Įvykiai susiję su puslapio turinio modeliu",
-       "logentry-contentmodel-change": "$1 atnaujino puslapio $3 turinio modelį iš $4 į $5",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|atnaujino}} puslapio $3 turinio modelį iš $4 į $5",
        "logentry-contentmodel-change-revertlink": "atšaukti",
        "logentry-contentmodel-change-revert": "atšaukti",
        "protectlogpage": "Rakinimų sąrašas",
        "protect-locked-blocked": "Jūs negalite keisti apsaugos lygių, kol esate užbluokuotas.\nČia yra dabartiniai nustatymai puslapiui '''$1''':",
        "protect-locked-dblock": "Apsaugos lygiai negali būti pakeisti dėl duomenų bazės užrakinimo.\nČia yra dabartiniai nustatymai puslapiui '''$1''':",
        "protect-locked-access": "Jūsų paskyra neturi teisių keisti puslapių apsaugos lygių.\nČia yra dabartiniai nustatymai puslapiui '''$1''':",
-       "protect-cascadeon": "Šis puslapis dabar yra apsaugotas, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ pasirinktimi. Jūs galite pakeisti šio puslapio apsaugos lygį, bet tai nepaveiks pakopinės apsaugos.",
+       "protect-cascadeon": "Šis puslapis dabar yra apsaugotas, nes jis yra įtrauktas į {{PLURAL:$1|šį puslapį, apsaugotą|šiuos puslapius, apsaugotus}} „pakopinės apsaugos“ parinktimi.\nPuslapio apsaugos lygių pakeitimai neturės poveikio pakopinei apsaugai.",
        "protect-default": "Leisti visiems naudotojams",
        "protect-fallback": "Reikalauti „$1“ teisės",
        "protect-level-autoconfirmed": "Blokuoti naujai prisiregistravusius ir neregistruotus naudotojus",
        "undeletepagetext": "{{PLURAL:$1|Šis $1 puslapis buvo ištrintas|Šie $1 puslapiai buvo ištrinti|Šie $1 puslapių buvo ištrinti}}, bet dar yra archyve ir gali būti {{PLURAL:$1|atkurtas|atkurti|atkurti}}.\nArchyvas gali būti periodiškai valomas.",
        "undelete-fieldset-title": "Atkurti versijas",
        "undeleteextrahelp": "Norėdami atkurti visą puslapio istoriją, palikite visas varneles nepažymėtas ir spauskite '''''{{int:undeletebtn}}'''''.\nNorėdami atlikti pasirinktinį atkūrimą, pažymėkite varneles tų versijų, kurias norėtumėte atkurti, ir spauskite '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|versija|versijos|versijų}} suarchyvuota",
+       "undeleterevisions": "$1 {{PLURAL:$1|versija ištrinta|versijos ištrintos}}",
        "undeletehistory": "Jei atstatysite puslapį, istorijoje bus atstatytos visos versijos.\nJei po ištrynimo buvo sukurtas puslapis tokiu pačiu pavadinimu, atstatytos versijos atsiras ankstesnėje istorijoje.",
        "undeleterevdel": "Atkūrimas nebus įvykdytas, jei tai nulems paskutinės puslapio ar failo versijos dalinį ištrynimą.\nTokiais atvejais, jums reikia atžymėti arba atslėpti naujausią ištrintą versiją.",
        "undeletehistorynoadmin": "Šis puslapis buvo ištrintas. Žemiau rodoma trynimo priežastis bei kas redagavo puslapį iki ištrynimo. Ištrintų puslapių tekstas yra galimas tik administratoriams.",
        "tooltip-ca-nstab-main": "Rodyti puslapio turinį",
        "tooltip-ca-nstab-user": "Rodyti naudotojo puslapį",
        "tooltip-ca-nstab-media": "Rodyti media puslapį",
-       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis - jo negalima redaguoti",
+       "tooltip-ca-nstab-special": "Šis puslapis yra specialusis ir jo negalima redaguoti",
        "tooltip-ca-nstab-project": "Rodyti projekto puslapį",
        "tooltip-ca-nstab-image": "Rodyti rinkmenos puslapį",
        "tooltip-ca-nstab-mediawiki": "Rodyti sisteminį pranešimą",
        "spam_reverting": "Atkuriama į ankstesnę versiją, neturinčios nuorodų į $1",
        "spam_blanking": "Visos versijos turėjo nuorodų į $1, išvaloma",
        "spam_deleting": "Visos versijos turėjo nuorodų į $1, ištrinama",
-       "simpleantispam-label": "Brukalų patikra.\n'''NE'''pildykite!",
+       "simpleantispam-label": "Brukalų patikra.\n<strong>Ne</strong>pildykite!",
        "pageinfo-title": "„$1“ informacija",
        "pageinfo-not-current": "Atsiprašome, neįmanoma pateikti šios senų versijų informacijos.",
        "pageinfo-header-basic": "Pagrindinė informacija",
        "pageinfo-robot-index": "Leidžiama",
        "pageinfo-robot-noindex": "Neleidžiama",
        "pageinfo-watchers": "Puslapio stebėtojų skaičius",
-       "pageinfo-visiting-watchers": "Skaičius puslapio stebėtojų, lankančių pastaruosius pakeitimus",
+       "pageinfo-visiting-watchers": "Skaičius puslapio stebėtojų, kurie aplankė pastaruosius pakeitimus",
        "pageinfo-few-watchers": "Mažiau nei $1 {{PLURAL:$1|stebėtojas|stebėtojų}}",
        "pageinfo-few-visiting-watchers": "Gali būti arba nebūti stebėtojų, lankančių pastaruosius pakeitimus",
        "pageinfo-redirects-name": "Nukreipimai į šį puslapį",
        "htmlform-cloner-create": "Pridėti dar",
        "htmlform-cloner-delete": "Pašalinti",
        "htmlform-cloner-required": "Bent viena reikšmė būtina.",
+       "htmlform-title-badnamespace": "[[:$1]] nėra \"{{ns:$2}}\" vardų srityje.",
+       "htmlform-title-not-creatable": "\"$1\" nėra tinkamas sukūrimui puslapio pavadinimas",
+       "htmlform-title-not-exists": "[[:$1]] neegzistuoja.",
+       "htmlform-user-not-exists": "<strong>$1</strong> neegzistuoja.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nėra tinkamas naudotojo vardas.",
        "sqlite-has-fts": "$1 su visatekstės paieškos palaikymu",
        "sqlite-no-fts": "$1 be visatekstės paieškos palaikymo",
        "logentry-delete-delete": "$1 {{GENDER:$2|ištrynė}} puslapį $3",
        "logentry-merge-merge": "$1 {{GENDER:$2|sujungė}} $3 į $4 (versijas iki $5)",
        "logentry-move-move": "$1 pervadino puslapį $3 į $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|perkėlė}} puslapį $3 į $4 be nukreipimo",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|perkėlė}} puslapį $3 į $4 per nukreipimą",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|perkėlė}} puslapį $3 į $4 per nukreipimą be paliko nukreipimo",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|perkėlė}} puslapį $3 į $4 (anksčiau buvo nukreipiamasis)",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|pervadino}} puslapį $3 į $4, nesukurdamas nukreipimo",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|payžėmjo}} versiją $4 puslapio $3 kaip patruliuojama",
        "logentry-patrol-patrol-auto": "$1 automatiškai {{GENDER:$2|pažymėjo}} versiją $4 puslapio $3 kaip patruliuojama",
        "logentry-newusers-newusers": "Vartotojo paskyra $1 buvo {{GENDER:$2|sukurta}}",
        "logentry-newusers-create2": "Vartotojo paskyra $3 buvo {{GENDER:$2|sukurta}} $1",
        "logentry-newusers-byemail": "Vartotojo paskyra $3 buvo {{GENDER:$2|sukurta}} $1 ir slaptažodis išsiųstas el. paštu",
        "logentry-newusers-autocreate": "Vartotojo paskyra $1 buvo {{GENDER:$2|sukurta}} automatiškai",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|perkėlė}} apsaugos nustatymus iš $4 į $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|pakeitė}} grupės narystę $3 iš $4 į $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|pakeista}} narystė grupėje $3",
        "logentry-rights-autopromote": "$1 buvo automatiškai {{GENDER:$2|pervestas}} iš $4 į $5",
        "special-characters-title-endash": "en brūkšnys",
        "special-characters-title-emdash": "em brūkšnys",
        "special-characters-title-minus": "minuso ženklas",
+       "mw-widgets-dateinput-no-date": "Nepasirinkta data",
        "mw-widgets-titleinput-description-new-page": "puslapis dar neegzistuoja",
        "mw-widgets-titleinput-description-redirect": "nukreipti į $1"
 }
index 88cae64..1513f00 100644 (file)
        "resetpass-wrong-oldpass": "Thurûk dik lo emaw thi tawh.\nI thurûk i thlâk hlawhtling tawh a nih loh pawhin thurûk lailâwk i dil a ni thei.",
        "resetpass-temp-password": "Thurûk lailâwk:",
        "passwordreset": "Thurûk ziakţha rawh",
-       "passwordreset-legend": "Thurûk ziakţha rawh",
        "passwordreset-username": "Hmangtu hming:",
        "passwordreset-domain": "Huamchin:",
        "passwordreset-email": "E-chenhmun:",
        "nlinks": "$1 {{PLURAL:$1||}} Zawmna $1",
        "nmembers": "A chhungah  {{PLURAL:$1||$1}} a awm.",
        "nrevisions": "siamṭhatna $1 {{PLURAL:$1||}}",
-       "nviews": "vawi $1 {{PLURAL:$1||}} ràwn a ni tawh.",
        "nimagelinks": "Phêk $1-ah {{PLURAL:$1||}} hman a ni.",
        "ntransclusions": "phêk $1-ah {{PLURAL:$1||}} hman a ni.",
        "specialpage-empty": "Thuhawn a awm lo tlat.",
        "delete-toobig": "Hë phêk hian siam danglam a tâwk ngun mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.\nHetiang phêk nuaibo hi hrêk deuh hlek a ni, tum loh puia {{SITENAME}} tihchingpen däl tùrin.",
        "delete-warning-toobig": "Hë phêk hian tihdanglam a lo tâwk nasa tawh mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.\nHemi nuaibo hian {{SITENAME}} hriatna-khawlpui hnathawh a tisukuk palh thei; \nfimkhur zui hräm ang che.",
        "rollback": "Siamṭhatna sûtna",
-       "rollback_short": "Sûtlêtna",
        "rollbacklink": "sûtlêtna",
        "rollbackfailed": "Sûtlêt a tlawlh",
        "cantrollback": "Siamṭhatna a sûtlêt theih loh;\na siamṭhatu hnuhnüng ber hi hë phêk tawktu awm chhun a la ni tlat.",
        "logentry-newusers-create": "$1 hian hmangtu siangchan a siam.",
        "logentry-newusers-create2": "$1 hian hmangtu siangchan $3 a siam.",
        "logentry-newusers-autocreate": "Siangchan $1 hi amahin a insiam.",
-       "feedback-subject": "Thupui:",
-       "feedback-message": "Thu",
        "feedback-cancel": "Sûtna",
+       "feedback-message": "Thu",
+       "feedback-subject": "Thupui:",
        "searchsuggest-search": "Zawnna",
-       "searchsuggest-containing": "hemi thu telna hi..."
+       "searchsuggest-containing": "hemi thu telna hi...",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin säwizàu",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Chhinchhiahnate",
+       "special-characters-group-greek": "Grik",
+       "special-characters-group-cyrillic": "Sirilik (russia hawrawp ang chi)",
+       "special-characters-group-arabic": "arabik",
+       "special-characters-group-arabicextended": "Arabik sâwizàu",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Hebrai",
+       "special-characters-group-bangla": "benggawli",
+       "special-characters-group-tamil": "Tamil ṭawng",
+       "special-characters-group-telugu": "Telegu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Hindihawrawp",
+       "special-characters-group-thai": "Thaiţawng",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "KKKK-TT-NN",
+       "mw-widgets-dateinput-placeholder-month": "KKKK-TT"
 }
index cae86c0..7fc613a 100644 (file)
        "editfont-monospace": "فونت هم عرض",
        "editfont-sansserif": "فونت بدون سریف",
        "editfont-serif": "فونت سریف",
-       "sunday": "یه شمه",
-       "monday": "دۉشمه",
-       "tuesday": "سه‌شمه",
-       "wednesday": "چار شمه",
-       "thursday": "پشÙ\85Ù\87",
-       "friday": "جۉمَ",
-       "saturday": "شَمه",
-       "sun": "یه شمه",
-       "mon": "دوشمه",
-       "tue": "سه‌شمه",
-       "wed": "چارشمه",
-       "thu": "پشÙ\85Ù\87",
+       "sunday": "یە شأمە",
+       "monday": "دوٙشمە",
+       "tuesday": "سەشمە",
+       "wednesday": "چار شأمأھ",
+       "thursday": "پأشأÙ\85Û\95",
+       "friday": "جوٙمَ",
+       "saturday": "شأمە",
+       "sun": "یە شأمأھ",
+       "mon": "دوٙشأمأھ",
+       "tue": "سەشأمە",
+       "wed": "چارشأمأھ",
+       "thu": "پأشأÙ\85Û\95",
        "fri": "جومَ",
-       "sat": "شمه",
+       "sat": "شأمأھ",
        "january": "أڤأل قأھارھ",
        "february": "لیریشگوٙن",
        "march": "ئنهزینوٙن",
        "october": "مالبارکوٙنوٙن",
        "november": "ئا سأردکوٙنوٙن",
        "december": "ئا ریجیکنوٙن",
-       "january-gen": "اÙ\88Ù\84 Ù\82هارھ",
-       "february-gen": "لرشگون",
-       "march-gen": "ئنهزنۉن",
+       "january-gen": "أڤأÙ\84 Ù\82Ø£هارھ",
+       "february-gen": "لیریشگوٙن",
+       "march-gen": "ئنهزینوٙن",
        "april-gen": "نۉرۉزماھ",
        "may-gen": "گلبارماھ",
        "june-gen": "جۉرش",
        "july-gen": "میۉھ رسۉن",
-       "august-gen": "مه گرمه",
-       "september-gen": "شنیارۉن",
-       "october-gen": "Ù\85اÙ\84بارکÙ\86Û\89ن",
-       "november-gen": "ئا Ø³Ø±Ø¯Ú©Ù\86Û\89ن",
-       "december-gen": "ئا رجکنۉن",
+       "august-gen": "مە گأرمە",
+       "september-gen": "شینیاروٙن",
+       "october-gen": "Ù\85اÙ\84بارکÙ\88Ù\99Ù\86Ù\88Ù\99ن",
+       "november-gen": "ئا Ø³Ø£Ø±Ø¯Ú©Ù\88Ù\99Ù\86Ù\88Ù\99ن",
+       "december-gen": "ئا ریجیکنوٙن",
        "jan": "أڤأل قأھارھ",
        "feb": "لیریشگوٙن",
        "mar": "ئنهزینوٙن",
        "october-date": "اکتبر $1",
        "november-date": "نوامبر $1",
        "december-date": "دسامبر $1",
-       "pagecategories": "{{PLURAL:$1|دسه|دسه یل}}",
-       "category_header": "بلگه یل مئن دسه \"$1\"",
-       "subcategories": "دسه یل فرعی",
+       "pagecategories": "{{PLURAL:$1|دسە|دسە یل}}",
+       "category_header": "بألگە یل مئن دأسە \"$1\"",
+       "subcategories": "دسە یل فأرعی",
        "category-media-header": "مدیا مئن دسه \"$1\"",
        "category-empty": "ای دسه الآن هیچ بلگه یا مدیا ناره",
-       "hidden-categories": "{{PLURAL:$1|دسه قائم|دسه یل قائم}}",
+       "hidden-categories": "{{PLURAL:$1|دسە قائم|دسە یل قائم}}",
        "hidden-category-category": "دسه بنی یل قائم",
-       "category-subcat-count": "{{PLURAL:$2|ای دسه فقط دسه یل فرعی دۉمنه دارھ.|ای دسه چیه یل دۉمنه دارھ {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}, بیشتر زھ $2 کل.}}",
+       "category-subcat-count": "{{PLURAL:$2|ائی دسە فأقأط دسە یل فأرعی دوٙمنە دارھ.|ئی دسە چیأئل دوٙمنە دارھ {{PLURAL:$1|دسە فأرعی|$1 دسە یل فأرعی}}, بیشتأر زھ $2 کل.}}",
        "category-subcat-count-limited": "ای دسه چیه یل دومنه داره {{PLURAL:$1|دسه فرعی|$1 دسه یل فرعی}}.",
-       "category-article-count": "{{PLURAL:$2|اÛ\8c Ø¯Ø³Ù\87 Ù\81Ù\82Ø·  Ø¨Ù\84Ú¯Ù\87 Û\8cÙ\84 Ø¯Û\89Ù\85Ù\86Ù\87 Ø¯Ø§Ø±Ù\87 .|دÛ\89Ù\85Ù\86 Ø§Ù\84ذکر{{PLURAL:$1|بÙ\84Ú¯Ù\87 Ù\87س|$1 Ø¨Ù\84Ú¯Ù\87 Ù\87سÙ\86}} Ù\85ئÙ\86 Ø§Û\8c Ø¯Ø³Ù\87, Ø¨Û\8cشتر زھ$2 کل.}}",
+       "category-article-count": "{{PLURAL:$2|ئÛ\8c Ø¯Ø³Û\95 Ù\81Ø£Ù\82أط  Ø¨Ø£Ù\84Ú¯Û\95Ù\84 Ø¯Ù\88Ù\99Ù\85Ù\86Û\95 Ø¯Ø§Ø±Ú¾ .|دÙ\88Ù\99Ù\85Ù\86 Ø§Ù\84ذکر{{PLURAL:$1|بأÙ\84Ú¯Û\95 Ù\87أس|$1 Ø¨Ø£Ù\84Ú¯Û\95 Ù\87أسÛ\8cÙ\86}} Ù\85ئÙ\86 Ø¦Û\8c Ø¯Ø³Û\95, Ø¨Û\8cشتأر زھ$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": "دنباله",
+       "listingcontinuesabbrev": "دۉنبالە",
        "index-category": "بلگه یل ایندکس وابیده",
        "noindex-category": "بلگه یل ایندکس نوابیده",
        "broken-file-category": "بلگه یل وا فایلل لینک اشکسه",
        "about": "درباره",
        "article": "بلگه محتوا",
-       "newwindow": "(د یه پنجرھ دیه ۉا کۉ )",
-       "cancel": "Ù\84غÙ\88",
+       "newwindow": "(د یە پأنجیرھ دیە ڤا کۉ )",
+       "cancel": "Ù\84أغڤ",
        "moredotdotdot": "بیشتر...",
        "morenotlisted": "ای نوم بلگه کامل نی",
        "mypage": "بلگه",
-       "mytalk": "گپ",
+       "mytalk": "گأپ",
        "anontalk": "سی ای آدرس آی پی گپ بزه",
-       "navigation": "هدایت کردن",
-       "and": "&#32;ۉ",
+       "navigation": "هدایت کیردأن",
+       "and": "&#32;ڤ",
        "qbfind": "سیل کردن",
        "qbbrowse": "نوم بلگه",
        "qbedit": "اصلاح",
        "faq": "اف آی کیو \" سوالل متداول \"",
        "faqpage": "Project:اف آی کیو \" سوالل متداول \"",
        "actions": "عملیه یل",
-       "namespaces": "همدرنگل",
-       "variants": "انۉاع",
-       "navigation-heading": "منۉ ناۉ ۉری",
+       "namespaces": "هۉمدیرأنگل",
+       "variants": "Ø£نۉاع",
+       "navigation-heading": "مأنۉ ناۉ ۉری",
        "errorpagetitle": "خطا",
-       "returnto": "بازگشت وھ $1.",
-       "tagline": "ز {{SITENAME}}",
-       "help": "هومیاری",
+       "returnto": "بازگشت ڤە $1.",
+       "tagline": "زھ {{SITENAME}}",
+       "help": "Ù\87Ù\88Ù\99Ù\85Û\8cارÛ\8c",
        "search": "جۉستأن",
        "searchbutton": "جۉستأن",
        "go": "رو",
        "searcharticle": "رۉ",
-       "history": "تاریخچھ بلگه",
-       "history_short": "تاریخچه",
+       "history": "ڤیرگار ھ بألگە",
+       "history_short": "ڤیرگار",
        "updatedmarker": "بروز وابی تا موقع آخرین سیل کردن مو",
-       "printableversion": "ۉیرژین سی چاپ",
+       "printableversion": "ڤیرژین سی چاپ",
        "permalink": "لینکل دائمی",
        "print": "چاپ",
        "view": "نما",
-       "view-foreign": "نما مئن  $1",
-       "edit": "اصلاح",
+       "view-foreign": "نیما مئن  $1",
+       "edit": "ئÛ\8cصلاح",
        "edit-local": "اصلاح توضیحتل محلی",
        "create": "درست کردن",
-       "create-local": "ۉندن تۉضیحتل محلی",
+       "create-local": "ڤأندن توٙضیحأتل مأحألی",
        "editthispage": "اصلاح ای بلگه",
        "create-this-page": "درست کو ای بلگه نه",
        "delete": "حذف",
        "protectthispage": "ای بلگنه حفاظت کو",
        "unprotect": "تغییر دائن حالت حفاظت",
        "unprotectthispage": "تغییر دائن حالت حفاظت ای بلگه",
-       "newpage": "بلگه نۉ",
+       "newpage": "بألگە نۉ",
        "talkpage": "گپ زئن ای بلگه",
        "talkpagelinktext": "گأپ",
        "specialpage": "بلگه مخصوص",
-       "personaltools": "اÛ\89زارگل سی خۉتی",
+       "personaltools": "ئÙ\88زارگل سی خۉتی",
        "articlepage": "سل کردن محتوا ای بلگه",
-       "talk": "قسه",
+       "talk": "قسە",
        "views": "نمایل",
-       "toolbox": "اÛ\89زارگÙ\87",
+       "toolbox": "ئÙ\88زارگÛ\95",
        "userpage": "دیئن بلگه کارور",
        "projectpage": "دیئن بلگه پروجه",
        "imagepage": "دیئن بلگه فایل",
        "viewhelppage": "دیئن بلگه هومیاری",
        "categorypage": "دیئن بلگه دسه بنی",
        "viewtalkpage": "دیئن گپل",
-       "otherlanguages": "مئن زۉۉنل دیھ",
+       "otherlanguages": "مئن زۉۉنل دیە",
        "redirectedfrom": "(تصحیح مجدد زھ $1)",
        "redirectpagesub": "بلگه تصحیح و هدایت زه مجدد",
-       "redirectto": "تغÛ\8cÛ\8cر Ø¯Ø§Ø¦Ù\86 Ù\85سÛ\8cر Û\89Ú¾:",
-       "lastmodifiedat": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ø§Ø®Û\8cرا ØªØºÛ\8cÛ\8cر Û\89اصÙ\84اح Û\89ابÛ\8cÙ\87 Ù\85ئÙ\86Ù\87 $1, Ù\85ئÙ\86Ù\87 $2.",
+       "redirectto": "تأغÛ\8cÛ\8cر Ø¯Ø§Ø¦Ù\86 Ù\85أسÛ\8cر Ú¤Û\95:",
+       "lastmodifiedat": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø§Ø®Û\8cرا ØªØ£ØºÛ\8cÛ\8cر Ú¤ Ø¦Û\8cصÙ\84اح Ú¤Ø§Ø¨Û\8cÛ\95 Ù\85أئÙ\86Û\95 $1, Ù\85أئÙ\86Û\95 $2.",
        "viewcount": "ای بلگه قابل دسترسی وابیه {{PLURAL:$1|یه بار|$1 مدتل}}.",
        "protectedpage": "بلگه حفاظت وابیه",
-       "jumpto": "پریدن ۉھ:",
+       "jumpto": "پریدن ڤھ:",
        "jumptonavigation": "هدایت کردن",
-       "jumptosearch": "جستن",
+       "jumptosearch": "جۉستأن",
        "view-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای بلگنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای بلگنه مجددا سل کیت.\n$1",
        "generic-pool-error": "وبشید ، سرور بیش زه حد بارگیری وابیه .\nکارورل زیادی ایخن ای منوبنه سل کنن.\nلطفا یه لحظه واسیت قبلیکه به خیت ای منوبنه مجددا سل کیت.",
        "pool-timeout": "پایان زمون اتنظار سی قفل",
        "aboutsite": "پۉرۉجھ : دأربارھ",
        "aboutpage": "Project:دأربارھ",
        "copyright": "مطلب دومن $ 1 هس نکه خلاف هونو ذکر وابی.",
-       "copyrightpage": "{{ns:project}}:کپی رایت",
+       "copyrightpage": "{{ns:project}}:کۉپی رایت",
        "currentevents": "اتفاقل جاری",
        "currentevents-url": "Project:اتفاقل جاری",
        "disclaimers": "ئینکار کنندھ یل",
        "disclaimerpage": "Project:ئینکار کارۉأران",
-       "edithelp": "هۉمیاری سی اصلاح",
+       "edithelp": "هوٙمیاری سی ئیصلاح",
        "mainpage": "بألگە أصلی",
-       "mainpage-description": "بلگھ اصلی",
+       "mainpage-description": "بألگە أصلی",
        "policy-url": "Project:خط مشی",
-       "portal": "درگاھ Ú©Ø§Ø±Û\89راÙ\86",
-       "portal-url": "Project:درگاھ Ú©Ø§Ø±Û\89راÙ\86",
+       "portal": "دأرگاھ Ú©Ø§Ø±Ú¤Ø£Ø±Ù\84",
+       "portal-url": "Project:دأرگاھ Ú©Ø§Ø±Ú¤Ø£Ø±Ù\84",
        "privacy": "خط مأشی رازداری",
        "privacypage": "Project:خط مأشی رازداری",
        "badaccess": "خطا دسترسی",
        "newmessagesdifflinkplural": "آخر {{PLURAL:$1|تغییر|999=تغییرل}}",
        "youhavenewmessagesmulti": "ایشا پیوم نو داریت مئنه\n$1",
        "editsection": "ئیصلاح",
-       "editold": "اصلاح",
+       "editold": "ئÛ\8cصلاح",
        "viewsourceold": "دیئن منبع",
-       "editlink": "اصلاح",
-       "viewsourcelink": "دÛ\8cئÙ\86 Ø³Ø±Ú\86Ø´Ù\85Ú¾",
+       "editlink": "ئÛ\8cصلاح",
+       "viewsourcelink": "دÛ\8cئÙ\86 Ø³Ø£Ø±Ú\86Û\8cØ´Ù\85Û\95",
        "editsectionhint": "ئیصلاح ئی بأخش: $1",
-       "toc": "محتوا یل",
+       "toc": "مۉحتڤا یل",
        "showtoc": "نمایش",
        "hidetoc": "قائم",
        "collapsible-collapse": "سقوط",
        "feed-invalid": "اشتراک  زه راه  تایپ باطله",
        "feed-unavailable": "فید پیوند ور تیه نی",
        "site-rss-feed": "خبرخو RSS سی $1",
-       "site-atom-feed": "خبرخۉ Atom سی $1",
+       "site-atom-feed": "خأھ Ú¤Ø£Ø± خۉ Atom سی $1",
        "page-rss-feed": "خبرخو RSS سی «$1»",
-       "page-atom-feed": "خبرخۉ Atom سی «$1»",
+       "page-atom-feed": "خیڤأر Atom سی «$1»",
        "red-link-title": "(بألگە ۉجوٙد نارھ) $1",
        "sort-descending": "مرتب سازی وا صعودی",
        "sort-ascending": "مرتب سازی وا صعودی",
-       "nstab-main": "بلگھ",
-       "nstab-user": "بلگه کارۉر",
+       "nstab-main": "بألگە",
+       "nstab-user": "بألگە کارڤأر",
        "nstab-media": "بلگه مدیا",
-       "nstab-special": "بلگھ یل ۉیجھ",
+       "nstab-special": "بألگە یل ڤیجە",
        "nstab-project": "بلگه پرۉجه",
        "nstab-image": "فایل",
        "nstab-mediawiki": "پیوم",
-       "nstab-template": "اÙ\84Ú¯Û\89",
+       "nstab-template": "ئÛ\89Ù\84Ú¯Ù\88Ù\99",
        "nstab-help": "بلگه هومیاری",
-       "nstab-category": "دسه",
+       "nstab-category": "دسە",
        "nosuchaction": "چنی دستوری موجود نی",
        "nosuchspecialpage": "چنو بلگه مخصوصی نی",
        "error": "خطا",
        "badarticleerror": "ای عمل نیوا ری ای بلگه اجرا وابی.",
        "cannotdelete-title": "نیوا بلگنه حذف کی \"$1\"",
        "badtitle": "عنۉان بد",
-       "badtitletext": "عنۉان درخۉاستی نامعتبر، خالی، یا عنۉانی بین زۉۉنی یا بین‌ۉیکی‌ای با پیۉند نادرسته.\nۉ ممکنه  یه یا چند کاراکتر داشته بۉھ که مئن عنۉان مربۉط نۉا زش استفادھ کنین.",
-       "viewsource": "دÛ\8cئÙ\86 Ø³Ø±Ú\86Ø´Ù\85Ú¾",
+       "badtitletext": "عۉنڤان دأرخڤاستی نامۉعتأبأر، خالی، یا عۉنڤانی بین زوٙوٙنی یا بین‌ ڤیکی‌ ئی با پیڤأند نادۉرۉستە.\nڤ مۉمکینە  یە یا چأند کاراکتیر داشتە بۉھ کە مئن عۉنڤان مأربوٙط نأڤا زیش ئیستیفادھ کۉنین.",
+       "viewsource": "دÛ\8cئÙ\86 Ø³Ø£Ø±Ú\86Û\8cØ´Ù\85Û\95",
        "viewsource-title": "دیئن منبع سی $1",
        "actionthrottled": "عمل متوقف وابی",
        "protectedpagetext": "ای بلگه سیکه اصلاح یا دیهر عملل ریش انجام نبی محافظت وابیه",
        "virus-unknownscanner": "آنتی ویروس ناشناخته",
        "welcomeuser": "خش اومیت، $1!",
        "yourname": "نوم کارور:",
-       "userlogin-yourname": "نۉم کارۉر",
-       "userlogin-yourname-ph": "نۉم کارۉری خۉتۉنه بنیت ایچھ",
+       "userlogin-yourname": "نۉم کارڤأر",
+       "userlogin-yourname-ph": "نۉم کارڤأری خۉتوٙنە بینیت ئیچە",
        "createacct-another-username-ph": "نوم کارورنه وار بکیت",
        "yourpassword": "رمز:",
-       "userlogin-yourpassword": "رمز",
+       "userlogin-yourpassword": "رأمز",
        "userlogin-yourpassword-ph": "رمز خۉتۉنه ۉارد بکنیت",
        "createacct-yourpassword-ph": "رمزنه ۉارد بکنیت",
        "yourpasswordagain": "مجددا رمزنه تایپ بکیت",
        "userlogin-signwithsecure": "د اتصال ایمن استفاده کو",
        "yourdomainname": "دومین کارو:",
        "password-change-forbidden": "ایشا نیتریت مئنه ای ویکی رمزه یلنه اصلاح بکیت",
-       "login": "ئۉیدن ۉھ سیستم",
+       "login": "ئوٙییدن ڤە سیستم",
        "nav-login-createaccount": "اوییدن وه سیستم / درست کردن اکانت",
        "userlogin": "اوییدن وه سیستم / درست کردن اکانت",
        "userloginnocreate": "اویدن وه سیستم",
        "userlogin-joinproject": "ملحق شۉ ۉھ {{SITENAME}}",
        "nologin": "اکانت ناریت؟ $1.",
        "nologinlink": "راست کردن یه حساو کاروری",
-       "createaccount": "راس کردن حسآۉ",
+       "createaccount": "راس کیردأن حیسآڤ",
        "gotaccount": "اکانت داریت؟ $1.",
        "gotaccountlink": "اویدن وه سیستم",
        "userlogin-resetlink": "مشخصه یل ورود خوتونه نونیت؟",
        "createaccountreason": "دلیل:",
        "createacct-reason": "دلیل",
        "createacct-reason-ph": "سیچه داریت یه اکانت دیه ایسازیت",
-       "createacct-captcha": "چک کردن امنیتی",
-       "createacct-imgcaptcha-ph": "اÛ\8c Ù\86شتÙ\86Ù\87 Ú©Ú¾ Ø¯Û\89Ù\85Ù\86 Ø³Û\8cÙ\84 Ú©Û\8c Û\89ارد کۉ",
+       "createacct-captcha": "چیک کیردأن أمنیأتی",
+       "createacct-imgcaptcha-ph": "ئÛ\8c Ù\86شتÙ\86Û\95 Ú©Û\95 Ø¯Ù\88Ù\99Ù\85Û\8cÙ\86 Ø³Û\8cÙ\84 Ú©Û\8c Ú¤Ø§Ø±Û\8cد کۉ",
        "createacct-submit": "حسآۉ خۉتۉنه راس کنیت",
        "createacct-another-submit": "یه اکانت دیه بساز",
        "createacct-benefit-heading": "{{SITENAME}} ۉا بجلی کپ خۉتۉن راسھ بیه.",
        "accountcreated": "اکانت ساخته بی",
        "createaccount-title": "اکانت سازی سی {{SITENAME}}",
        "login-abort-generic": "ورود ایشا ناموفق وابی - سقط وابی",
-       "loginlanguagelabel": "زۉۉن:$1",
-       "pt-login": "ئۉیدن ۉھ سیستم",
+       "loginlanguagelabel": "زوٙوٙن:$1",
+       "pt-login": "ئۉیدأن ڤھ سیستم",
        "pt-login-button": "ئۉیدن ۉھ سیستم",
-       "pt-createaccount": "راس کردن حسآۉ",
-       "pt-userlogout": "رتن زھ سیستم",
+       "pt-createaccount": "راس کیردأن حیسآۉ",
+       "pt-userlogout": "رأتÙ\86 Ø²Ú¾ Ø³Û\8cستÙ\85",
        "changepassword": "تغییر رمز",
        "resetpass_announce": "سی پایان ورود ، ایشا واسی یه رمز جدید سیخوت به ونی.",
        "resetpass_header": "تغییر رمز اکانت",
        "resetpass-temp-password": "رمز جایگزین",
        "resetpass-expired": "رمز ایشانه اعتبار ناره.لطفا یه رمز نو سیخوتون بونیت.",
        "passwordreset": "تعویض رمز",
-       "bold_sample": "Ù\85تÙ\86 Ú¯Ù¾ Ù\86ما",
-       "bold_tip": "Ù\85تÙ\86 Ú¯Ù¾ Ù\86ما",
-       "italic_sample": "Ù\85تÙ\86 Ø´Ú©Ø³ØªÙ\87",
-       "italic_tip": "Ù\85تÙ\86 Ø´Ú©Ø³ØªÙ\87",
-       "link_sample": "عنۉان لینک",
-       "link_tip": "لینک داخلی",
-       "extlink_sample": "http://www.example.com عنۉان لینک",
-       "extlink_tip": "(به خاطر بسپار http:// prefix)\nلینک خارجی",
-       "headline_sample": "سرخط Ù\85تن",
-       "headline_tip": "2سرخط یکسان",
-       "nowiki_sample": "Ù\85تÙ\86 Ø´Ú©Ù\84 Ù\86دائھ Û\8cاÙ\81رÙ\85ت Ù\86Û\89ابÛ\8cدھ Ø±Ø§ Ø§Û\8cچۉ بنین",
-       "nowiki_tip": "زھ فرمت کردن یا شکل دائن ۉیکی دس ۉردار",
-       "image_tip": "فایل محاط ۉابید",
-       "media_tip": "لینک فایل",
-       "sig_tip": "اÙ\85ضا Ø§Û\8cشا Û\89 Ø¨Ø±Ú\86سب Ø²Ù\85ان",
-       "hr_tip": "خط Ø§Ù\81Ù\82Û\8c (Ú©Ù\85 Ø§Ø³ØªÙ\81ادھ Ú©نین)",
-       "summary": "خلاصه:",
-       "minoredit": "اÛ\8c Û\8cÙ\87 Ø§ØµÙ\84اح Ú©Ú\86Ú© Û\89ابی",
-       "watchthis": "Ù¾Û\8cÚ¯Û\8cرÛ\8c Ø§Û\8c Ø¨Ù\84Ú¯Ù\87",
-       "savearticle": "بلگه ضبط بوھ",
-       "showpreview": "پیش‌نمایش",
-       "showdiff": "نشۉدائن تغییرل",
-       "anoneditwarning": "<strong>هشدار:</strong> ایشا نۉایته مئنه سیستم. آی پی ایشا سی عۉمۉم قابل رۉیت هی ار اصلاحی بکنیت. ار ایشا <strong>[$1 ورود]</strong> یا <strong>[$2 راس کردن یه حسآۉ]</strong>, اصلاحل ایشا به حسآۉ کارۉری ایشا ھشتھ ایۉان ۉا منفعل حسآۉل دیه..",
-       "loginreqlink": "ئۉیدن ۉھ سیستم",
+       "bold_sample": "Ù\85أتÙ\86 Ú¾ Ú¯Ø£Ù¾ Ù\86Û\8cما",
+       "bold_tip": "Ù\85أتÙ\86 Ú¾ Ú¯Ø£Ù¾ Ù\86Û\8cما",
+       "italic_sample": "Ù\85أتÙ\86 Ú¾ Ø´Û\8cکأستÛ\95",
+       "italic_tip": "Ù\85أتÙ\86 Ú¾ Ø´Û\8cکأستÛ\95",
+       "link_sample": "عۉنڤان ھ لینک",
+       "link_tip": "لینک ھ داخلی",
+       "extlink_sample": "http://www.example.com عۉنڤان ھ لینک",
+       "extlink_tip": "(ڤە خاطیر بیسپار http:// prefix)\nلینک ھ خاریجی",
+       "headline_sample": "سأرخأط Ù\85Ø£تن",
+       "headline_tip": "2سأرخأط یکسان",
+       "nowiki_sample": "Ù\85أتÙ\86 Ø´Û\8cÚ©Ù\84 Ù\86أدائÛ\95 Û\8cا Ù\81Û\89رÙ\85أت Ù\86أڤابÛ\8cدھ Ø±Ù\86Û\95 Ø¦Ø¨چۉ بنین",
+       "nowiki_tip": "زھ فۉرمأت کیردأن یا شیکل دائن ڤیکی دس ڤیردار",
+       "image_tip": "فایل مۉحاط ڤابید",
+       "media_tip": "لینک ھ فایل",
+       "sig_tip": "ئÛ\8cÙ\85ضا Ø¦Û\8cشا Ú¤ Ø¨Ø£Ø±Ú\86أسب Ø²Û\8cÙ\85Ù\88Ù\99ن",
+       "hr_tip": "خأط Ø¦Ù\88Ù\81Û\89Ù\82Û\8c (Ú©Ø£Ù\85 Ø¦Û\8cستÛ\8cÙ\81ادھ Ú©Û\89نین)",
+       "summary": "خۉلاصە:",
+       "minoredit": "ئÛ\8c Û\8cÛ\95 Ø¦Û\8cصÙ\84اح Ú©Ù\88Ù\99Ú\86Û\8cر Ú¤ابی",
+       "watchthis": "Ù¾Û\8cÚ¯Û\8cرÛ\8c Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95",
+       "savearticle": "بألگە ضأبط ڤا",
+       "showpreview": "پیش‌نمۉیش",
+       "showdiff": "نیشۉدائن تأغییرل",
+       "anoneditwarning": "<strong>هۉشدار:</strong> ئیشا نأڤایتە مئنە سیستم. ئای پی ئیشا سی عۉموٙم قابل رۉیأت هی أر ئیصلاحی بۉکۉنیت. أر ئیشا <strong>[$1 وروٙد]</strong> یا <strong>[$2 راس کیردأن یە حیسآۉ]</strong>, ئیصلاحل ئیشا بە حیسآۉ کارڤأری ئیشا ھشتە ئیڤان ڤا مۉنفأعیل حیسآڤل دیە..",
+       "loginreqlink": "ئوٙییدن ڤە سیستم",
        "newarticletext": "ایشا یه لینک ۉھ یه بلگنه که هنی ۉجود نارنه دنبال کردیته.\nسی راس کردن ای بلگه،نوشتنه مئنه جعبه زیر شرۉع کنیت(بینیتۉ [$1 help page] سی اصلاعات اضافی).\nار ایشا ۉا خطا ایچه هیسیت، ری <strong>back</strong> button مرۉرگر ایشا کلیژ کیت.",
-       "noarticletext": "د Ø­Ø§Ù\84 Ø¬Ø§Ø±Û\8c Ù\85تÙ\86Û\8c Ù\85ئÙ\86Ù\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Û\8cسس.\nاÛ\8cشا Ø§Û\8cترÛ\8cد [[Special:Search/{{PAGENAME}}|جستÙ\86 Ø³Û\8c Ø¹Ù\86Ù\88اÙ\86 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87]] Ù\85ئÙ\86Ù\87 Ø¨Ù\84Ú¯Ù\87 Û\8cÙ\84 Ø¯Û\8cÙ\87.\n<span class=\"plainlinks\">[{{fullurl:{{#Ù\85خصÛ\89ص:Ù\86Ù\85اÛ\8cÙ\87 Û\8cÙ\84}}|بÙ\84Ú¯Ù\87={{FULLPAGENAMEE}}}} Ø¬Ø³ØªÙ\86 Ø³Û\8c Ù\86Ù\85اÛ\8cÙ\84 Ù\85ربÙ\88Ø·], Û\8cا [{{fullurl:{{FULLPAGENAME}}|اÙ\82داÙ\85=اصÙ\84اح}} Ø§ØµÙ\84اح Ú©Û\89 Ø§Û\8c Ø¨Ù\84Ú¯Ù\86Ù\87]</span>.",
-       "noarticletext-nopermission": "د Ø­Ø§Ù\84 Ø¬Ø§Ø±Û\8c Ù\85تÙ\86Û\8c Ù\85ئÙ\86Ù\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Ù\86Û\8cسس.\nاÛ\8cشا Ø§Û\8cترÛ\8cد [[Special:Search/{{PAGENAME}}|search for this page title]] Ù\85ئÙ\86Ù\87 Ø¨Ù\84Ú¯Ù\84 Ø¯Û\8cÙ\87Ø\8c Û\8cا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>Ø\8c Û\89Ù\84Û\8c Ø§Û\8cشا Ù\86Û\8cترÛ\8cد Ø§Û\8c Ø¨Ù\84Ú¯Ù\86Ù\87 Ø±Ø§Ø³ Ø¨Ú©نیت.",
+       "noarticletext": "Ø£Ù\84اÙ\86 Ù\85أتÙ\86Û\8c Ù\85ئÙ\86Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\8c.\nئÛ\8cشا Ø¦Û\8cتأرÛ\8cد [[Special:Search/{{PAGENAME}}|جÛ\89ستأÙ\86 Ø³Û\8c Ø¹Û\89Ù\86ڤاÙ\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95]] Ù\85ئÙ\86Û\95 Ø¨Ø£Ù\84Ú¯Û\95 Û\8cÙ\84Û\95 Ø¯Û\8cÛ\95.\n<span class=\"plainlinks\">[{{fullurl:{{#Ù\85أخصÙ\88Ù\99ص:Ù\86Û\8cÙ\85اÛ\8cÙ\84}}|بأÙ\84Ú¯Û\95={{FULLPAGENAMEE}}}} Ø¬Û\89ستأÙ\86 Ø³Û\8c Ù\86Û\8cÙ\85اÛ\8cÙ\84 Ù\85أربÙ\88Ù\99Ø·], Û\8cا [{{fullurl:{{FULLPAGENAME}}|ئÛ\8cÙ\82داÙ\85=ئÛ\8cصÙ\84اح}} Ø¦Û\8cصÙ\84اح Ú©Û\89 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Ù\86Û\95]</span>.",
+       "noarticletext-nopermission": "د Ø­Ø§Ù\84 Ø¬Ø§Ø±Û\8c Ù\85أتÙ\86Û\8c Ù\85ئÙ\86Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Û\8cسس.\nئÛ\8cشا Ø¦Û\8cتأرÛ\8cد [[Special:Search/{{PAGENAME}}|search for this page title]] Ù\85ئÙ\86Û\95 Ø¨Ø£Ù\84Ú¯Ù\84 Ø¯Û\8cÛ\95Ø\8c Û\8cا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>Ø\8c Ú¤Ø£Ù\84Û\8c Ø¦Û\8cشا Ù\86Û\8cتأرÛ\8cد Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Ù\86Û\95 Ø±Ø§Ø³ Ø¨Û\89Ú©Û\89نیت.",
        "editing": "درحال اصلاح $1",
        "creating": "راس کردن $1",
        "editingsection": "درحال اصلاح $1 (قسمت)",
        "templatesused": "{{PLURAL:$1|قالب|قالبل}} اسفادھ بیه مئنه ای بلگه:",
-       "template-protected": "(تحت حمایت)",
-       "template-semiprotected": "(نیمه حمایت ۉابیدھ)",
+       "template-protected": "(تأحت Ø­Ù\85اÛ\8cت)",
+       "template-semiprotected": "(نیمە حیمایت ڤابیدھ)",
        "hiddencategories": "ای بلگه عضۉ {{PLURAL:$1|1 دسه بنی قائم|$1 دسه بنی یل قائم}} هیسس :",
        "permissionserrorstext-withaction": "ایشا اجازھ ناریت که $2, سی ای {{PLURAL:$1|دلیل|دلیلل}}:",
        "moveddeleted-notice": "ای بلگه حذف ۉابیدھ.\nحذف ۉ انتقال سیاهه ای بلگه فراهم ۉابیدھ دۉمن سرچشمه.",
        "viewpagelogs": "نشۉدائن نمایه ها سی ای بلگه",
        "currentrev-asof": "آخرین ۉرژن تا $1",
-       "revisionasof": "اصلاح $1",
+       "revisionasof": "ئÛ\8cصلاح $1",
        "revision-info": "ۉرژن $1 تۉسط {{GENDER:$6|$2}}$7",
-       "previousrevision": "â\86\90 Ø§ØµÙ\84اح Ù\82بلی",
+       "previousrevision": "â\86\90 Ø¦Û\8cصÙ\84اح Ù\82Ø£بلی",
        "nextrevision": "ۉرژن نۉتر →",
        "currentrevisionlink": "آخرین ۉرژن",
-       "cur": "فعلی",
-       "last": "قبلی",
-       "rev-delundel": "Ù\82ابÙ\84Û\8cت Øªغییر دائن",
+       "cur": "فیعلی",
+       "last": "Ù\82أبÙ\84Û\8c",
+       "rev-delundel": "Ù\82ابÙ\84Û\8cأت ØªØ£غییر دائن",
        "history-title": "تاریخچه اصلاحل $1",
        "difference-title": "فرخ ۉا بین تجدید نطرل \"$1\"",
-       "lineno": "سطر $1:",
-       "editundo": "Ù\84غÙ\88",
+       "lineno": "سأطر $1:",
+       "editundo": "Ù\84أغڤ",
        "diff-multi-sameuser": "({{PLURAL:$1|یه ۉرزن متۉسط|$1 ۉرژنل متۉسط}} تۉسط کارۉر مشابه نشۉ نۉابیه)",
-       "searchresults": "Ù\86تÛ\8cجÙ\84 Ø¬Ø³Øªن",
-       "searchresults-title": "Ù\86تÛ\8cجÙ\84 Ø¬Ø³Øªن سی \"$1\"",
-       "prevn": "قبلی {{PLURAL:$1|$1}}",
-       "nextn": "بعدی {{PLURAL:$1|$1}}",
-       "nextn-title": "بعدÛ\8c $1 {{PLURAL:$1|Ù\86تÛ\8cجÙ\87\86تیجل}}",
-       "shown-title": "نشۉ دائن $1 {{PLURAL:$1|نتیجه|نتیجل}} د هر بلگه",
-       "viewprevnext": "مشاهدھ ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-new": "<strong>درست Ú©Û\89 Ø§Û\8c Ø¨Ù\84Ú¯Ù\86Ù\87 \"[[:$1]]\" Ù\85ئÙ\86Ù\87 Ø§Û\8c Û\89Û\8cÚ©Û\8c!</strong> {{PLURAL:$2|0=|Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ø³Ù\84 Ú©Û\89 Ø¨Ù\84Ú¯Ù\87 Ø§Û\8c Ú©Ù\87 Û\89ا Ø¬Ø³ØªÙ\86 Ù¾Û\8cداش Ú©Ø±Ø¯Û\8cÙ\87.|Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 Ø³Ù\84 Ú©Û\89 Ù\86تÛ\8cجÙ\84 Ø¬Ø³ØªÙ\86Ù\87.}}",
-       "searchprofile-articles": "بلگه محتۉا",
-       "searchprofile-images": "چندرسانه ای",
-       "searchprofile-everything": "همه چیا",
-       "searchprofile-advanced": "پیشرفته",
-       "searchprofile-articles-tooltip": "جستن مئنه $1",
-       "searchprofile-images-tooltip": "جستن سی فایلل",
-       "searchprofile-everything-tooltip": "جستن سی محتۉا(شامل بلگل گپ)",
-       "searchprofile-advanced-tooltip": "جستن مئنه همدرنگل سفارشی",
-       "search-result-size": "$1 ({{PLURAL:$2|1 کلمه|$2 کلمل}})",
-       "search-redirect": "(تغÛ\8cÛ\8cر Ù\85سیر $1)",
-       "search-section": "(قسمت $1)",
+       "searchresults": "Ù\86أتÛ\8cجÙ\84 Ø¬Û\89ستأن",
+       "searchresults-title": "Ù\86أتÛ\8cجÙ\84 Ø¬Û\89ستأن سی \"$1\"",
+       "prevn": "Ù\82أبÙ\84Û\8c {{PLURAL:$1|$1}}",
+       "nextn": "بأعدÛ\8c {{PLURAL:$1|$1}}",
+       "nextn-title": "بأعدÛ\8c $1 {{PLURAL:$1|Ù\86أتÛ\8cجÛ\95\86Ø£تیجل}}",
+       "shown-title": "نیشۉ دائن $1 {{PLURAL:$1|نأتیجە|نأتیجل}} د هر بألگە",
+       "viewprevnext": "مۉشاهدھ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>راس Ú©Û\89 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Ù\86Û\95 \"[[:$1]]\" Ù\85ئÙ\86Û\95 Ø¦Û\8c Ú¤Û\8cÚ©Û\8c!</strong> {{PLURAL:$2|0=|Ù\87Ø£Ù\85Ú\86Û\8cÙ\86Û\8cÙ\86 Ø³Ù\84 Ú©Û\89 Ø¨Ø£Ù\84Ú¯Û\95 Ø¦Û\8c Ú©Û\95 Ú¤Ø§ Ø¬Û\89ستأÙ\86 Ù¾Û\8cداش Ú©Ø£Ø±Ø¯Û\8cÛ\95.|Ù\87Ø£Ù\85Ú\86Û\8cÙ\86Û\8cÙ\86 Ø³Ù\84 Ú©Û\89 Ù\86أتÛ\8cجÙ\84 Ø¬Û\89ستأÙ\86Û\95.}}",
+       "searchprofile-articles": "بألگە مۉحتڤا",
+       "searchprofile-images": "چأندرسانە ئی",
+       "searchprofile-everything": "همە چیا",
+       "searchprofile-advanced": "پیشرأفتە",
+       "searchprofile-articles-tooltip": "جۉستأن مأئنە $1",
+       "searchprofile-images-tooltip": "جۉستأن سی فایلل",
+       "searchprofile-everything-tooltip": "جۉستأن سی مۉحتڤا(شامل بألگل گأپ)",
+       "searchprofile-advanced-tooltip": "جۉستأن مأئنە هۉمدیرأنگل سفارشی",
+       "search-result-size": "$1 ({{PLURAL:$2|1 کألمە|$2 کألمل}})",
+       "search-redirect": "(تأغÛ\8cÛ\8cر Ù\85Ø£سیر $1)",
+       "search-section": "(قیسمأت $1)",
        "search-suggest": "آیا منطۉر ایشا ای بی:$1",
-       "searchall": "همه",
-       "search-showingresults": "{{PLURAL:$4|نتیجه <strong>$1</strong> ز <strong>$3</strong>|نتیجل <strong>$1 - $2</strong> ز <strong>$3</strong>}}",
-       "search-nonefound": "Ù\86تÛ\8cجÙ\87 Ø§Û\8c Ù\85رتبط Û\89ا Ù\87Û\89Ù\86Û\8c Ú©Ù\87 Ø¯Ø± Ø®Û\89است Ø¯Û\8cتÙ\87 نی.",
-       "mypreferences": "تنظیمل",
-       "right-writeapi": "استÙ\81ادھ Ø¯ Ù\86Ù\88شتÙ\86 Û\89Ú¾ ØµÛ\89رت API",
-       "newuserlogpage": "سیاهه راس کردن حسآۉ",
-       "enhancedrc-history": "تاریخچھ",
-       "recentchanges": "تغییرل نۉ",
-       "recentchanges-legend": "گزینه یل تغییرل اخیر",
-       "recentchanges-summary": "Ø´Û\8cار ØªØºÛ\8cÛ\8cرÙ\84 Ø§Ø®Û\8cر Ù\85ئÙ\86Ù\87 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Û\89Ú¾ Û\89یکی .",
-       "recentchanges-label-newpage": "اÛ\8c Ø§ØµÙ\84اح Û\8cÙ\87 Ø¨Ù\84Ú¯Ù\87 Ù\86Ù\88 Ø§یسازھ",
-       "recentchanges-label-minor": "اÛ\8c Û\8cÙ\87 Ø§ØµÙ\84اح Ú©Ú\86Ú© Û\89ابی",
-       "recentchanges-label-bot": "اÛ\8c Ø§ØµÙ\84اح ØªÛ\89سط Û\8cÙ\87 Ø±Û\89بات Ø§Ù\86جاÙ\85 Û\89ابÛ\8cÙ\87",
-       "recentchanges-label-unpatrolled": "اÛ\8c Ø§ØµÙ\84اح Ù\87Û\89Ù\86Û\89 Ú¯Ø´Øª Ù\86Û\89ابیدھ",
-       "recentchanges-label-plusminus": "اÙ\86دازھ Ø¨Ù\84Ú¯Ù\87 Û\89ا Ø§Û\8c ØªØ¹Ø¯Ø§Ø¯ Ø¨Ø§Û\8cت ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ú¾ Ø¨Û\8cÙ\87",
-       "recentchanges-legend-heading": "'''Ø¢Ù\84شتÛ\8cا Ø¦Û\8cÚ¾ Ø³Ù\86Û\8c :'''",
-       "recentchanges-legend-newpage": "{{عضۉل انجۉمن:تغییرل اخیر-برچسب-بلگه نۉ}} (هنی سل کۉ [[Special:NewPages|لیست بلگل نۉ]])",
-       "rclistfrom": "نشۉدائن تغییرل نۉ ۉا شرۉع زھ $3 $2",
-       "rcshowhideminor": "اصلاحل کچک $1",
+       "searchall": "ھأمە",
+       "search-showingresults": "{{PLURAL:$4|Ù\86تÛ\8cجÙ\87 <strong>$1</strong> Ø² <strong>$3</strong>|Ù\86أتÛ\8cجÙ\84 <strong>$1 - $2</strong> Ø² <strong>$3</strong>}}",
+       "search-nonefound": "Ù\86أتÛ\8cجÛ\95 Ø¦Û\8c Ù\85Û\89رتأبÛ\8cØ· Ú¤Ø§ Ù\87Û\89Ù\86Û\8c Ú©Û\95 Ø¯Ø£Ø±Ø®Ú¤Ø§Ø³Øª Ø¯Û\8cتÛ\95 نی.",
+       "mypreferences": "تأرجیحل",
+       "right-writeapi": "ئÛ\8cستÙ\81ادھ Ø¯ Ù\86ڤشتÙ\86 Ú¤Û\95 ØµÙ\88Ù\99رأت API",
+       "newuserlogpage": "سیاهە راس کیردأن حیسآۉ",
+       "enhancedrc-history": "ڤیرگار",
+       "recentchanges": "تأغÛ\8cÛ\8cرÙ\84 Ù\86Û\89",
+       "recentchanges-legend": "گۉزینە یل تأغییرل أخیر",
+       "recentchanges-summary": "Ø´Û\8cار ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø£Ø®Û\8cر Ù\85ئÙ\86Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Û\95 Ú¤یکی .",
+       "recentchanges-label-newpage": "ئÛ\8c Ø¦Û\8cصÙ\84اح Û\8cÛ\95 Ø¨Ø£Ù\84Ú¯Û\95 Ù\86Ù\88Ù\99 Ø¦یسازھ",
+       "recentchanges-label-minor": "ئÛ\8c Û\8cÛ\95 Ø¦Û\8cصÙ\84اح Ú©Ù\88Ù\99Ú\86Û\8cر Ú¤ابی",
+       "recentchanges-label-bot": "ئÛ\8c Ø¦Û\8cصÙ\84اح ØªØ£Ú¤Ø£Ø³Û\89Ø· Û\8cÛ\95 Ø±Ù\88Ù\99بات Ø§Ù\86جاÙ\85 Ú¤Ø§Ø¨Û\8cÛ\95",
+       "recentchanges-label-unpatrolled": "ئÛ\8c Ø¦Û\8cصÙ\84اح Ù\87Û\89Ù\86Û\89 Ú¯Ø£Ø´Øª Ù\86Ø£Ú¤ابیدھ",
+       "recentchanges-label-plusminus": "Ø£Ù\86دازھ Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Ø§ Ø¦Û\8c ØªÛ\8cعداد Ø¨Ø§Û\8cت ØªØ£ØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ú¾ Ø¨Û\8cÛ\95",
+       "recentchanges-legend-heading": "'''تأغÛ\8cÛ\8cرÙ\84 Ù\86Û\89 :'''",
+       "recentchanges-legend-newpage": "{{عۉضڤل أنجوٙمأن:تأغییرل أخیر-بأرچأسب-بألگە نۉ}} (هأنی سل کۉ [[Special:NewPages|لیست بألگل نۉ]])",
+       "rclistfrom": "نیشۉ دائن تأغییرل نۉ ڤا شۉرۉ زھ $3 $2",
+       "rcshowhideminor": "ئÛ\8cصلاحل کچک $1",
        "rcshowhideminor-show": "نشۉ دائن",
-       "rcshowhideminor-hide": "قائم کردن",
-       "rcshowhidebots": "$1 ربات‌ل یا بۉتل",
-       "rcshowhidebots-show": "نشۉ دائن",
+       "rcshowhideminor-hide": "قائم کیردأن",
+       "rcshowhidebots": "$1 رۉبات‌یل یا بوٙتیل",
+       "rcshowhidebots-show": "نیشۉ دائن",
        "rcshowhidebots-hide": "قائم کردن",
-       "rcshowhideliu": "$1 حسآۉل وارد وابیدھ",
-       "rcshowhideliu-hide": "قائم کردن",
-       "rcshowhideanons": "$1 کارۉران داخل نۉابیدھ",
+       "rcshowhideliu": "$1 حیسآڤل ڤارید نڤابیدھ",
+       "rcshowhideliu-hide": "قائم کیردأن",
+       "rcshowhideanons": "$1 کارڤأرل ڤارید نڤابیدھ",
        "rcshowhideanons-show": "نشۉ دائن",
-       "rcshowhideanons-hide": "قائم کردن",
-       "rcshowhidemine": "$1 Ø§صلاحل مۉ",
+       "rcshowhideanons-hide": "قائم کیردأن",
+       "rcshowhidemine": "$1 Ø¦Û\8cصلاحل مۉ",
        "rcshowhidemine-show": "نشۉ دائن",
-       "rcshowhidemine-hide": "قائم کردن",
-       "rclinks": "نشودائن ئاخرین $1 تغییر مئن $2 روز اخیر؛ $3",
-       "diff": "فرخ",
-       "hist": "گزارش",
-       "hide": "قائم کردن",
-       "show": "نشۉ دائن",
+       "rcshowhidemine-hide": "قائم کیردأن",
+       "rclinks": "نیشۉ دائن ئاخأرین $1 تأغییر مئن $2 روٙز أخیر؛ $3",
+       "diff": "Ù\81أرخ",
+       "hist": "گۉزاریش",
+       "hide": "قائم کیردأن",
+       "show": "نیشۉ دائن",
        "minoreditletter": "رز",
        "newpageletter": "تا",
        "boteditletter": "ر",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتل}} بأعد تأغییر",
-       "recentchangeslinked": "تغÛ\8cÛ\8cرÙ\84 Ù\85ربÛ\89ط",
-       "recentchangeslinked-toolbox": "تغÛ\8cÛ\8cرÙ\84 Ù\85ربÙ\88ط",
-       "recentchangeslinked-title": "تغÛ\8cÛ\8cرÙ\84 Ù\85رتبط Û\89ا $1",
-       "recentchangeslinked-summary": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ø®Ø§Øµ ØªØºÛ\8cÛ\8cرÙ\84 Ø§Ø®Û\8cر Ù\85ئÙ\86Ù\87 Ø¨Ù\84Ú¯Ù\84 Ù\84Û\8cÙ\86Ú© Û\89ابÛ\8cدھ Û\89Ú¾ Ø§Û\8c Ø¨Ù\84Ú¯Ù\86Ù\87 Ù\86Ø´Û\89 Ø§Ø¯Ú¾.\nبÙ\84Ú¯Ù\84Û\8c Ú©Ù\87 Ù\85ئÙ\86Ù\87 [[Special:Watchlist|Ù\84Û\8cست Ù¾Û\8cÚ¯Û\8cرÛ\8c Û\8cÙ\84]] Ø§Û\8cشا Ù\87Û\8cسÙ\86 Ø¨Ù\87 Ø´Ú©Ù\84 '''سÛ\8cاھ''' Ù\86شۉ دادھ ابۉن.",
-       "recentchangeslinked-page": "نۉم بلگه:",
-       "recentchangeslinked-to": "نشۉ دائن تغییرل بلگلی که ۉ بلگه دادھ بیه لینک دادھ شدنه به جای",
+       "recentchangeslinked": "تأغÛ\8cÛ\8cرÙ\84 Ù\85أربÙ\88Ù\99ط",
+       "recentchangeslinked-toolbox": "تأغÛ\8cÛ\8cرÙ\84 Ù\85أربÙ\88Ù\99ط",
+       "recentchangeslinked-title": "تأغÛ\8cÛ\8cرÙ\84 Ù\85Û\89رتأبÛ\8cØ· Ú¤ا $1",
+       "recentchangeslinked-summary": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø®Ø§Øµ ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø§Ø®Û\8cر Ù\85أئÙ\86Û\95 Ø¨Ø£Ù\84Ú¯Ù\84 Ù\84Û\8cÙ\86Ú© Ú¤Ø§Ø¨Û\8cدھ Ú¤Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Ù\86Û\95 Ù\86Û\8cØ´Û\89 Ø§Ø¯Ú¾.\nبأÙ\84Ú¯Ù\84Û\8c Ú©Û\95 Ù\85أئÙ\86Û\95 [[Special:Watchlist|Ù\84Û\8cست Ù¾Û\8cÚ¯Û\8cرÛ\8c Û\8cÙ\84]] Ø¦Û\8cشا Ù\87Û\8cسÙ\86 Ø¨Û\95 Ø´Ú©Ù\84 '''سÛ\8cاھ''' Ù\86Û\8cشۉ دادھ ابۉن.",
+       "recentchangeslinked-page": "نۉم بألگە:",
+       "recentchangeslinked-to": "نیشۉ دائن تأغییرل بألگلی کە ڤە بألگە دادھ بیە لینک دادھ شۉدنە بە جای",
        "upload": "بلم گیر کردن فایل",
-       "filedesc": "خلاصه",
-       "license-header": "صدۉر مجۉز",
+       "filedesc": "خۉلاصە",
+       "license-header": "صۉدوٙر مۉجأڤیز",
        "imgfile": "فایل",
        "file-anchor-link": "فایل",
-       "filehist": "تاریخچه فایل",
-       "filehist-help": "رو تاریخ‌ها کلیک کنیت تا نسخه مرتبط را بینیت.",
+       "filehist": "ڤیرگار فایل",
+       "filehist-help": "رۉ تاریخ‌/زمان کلیژ کنیت تا ڤیرژن مۉرتبط رنە بینیت.",
        "filehist-current": "جاری",
        "filehist-datetime": "تاریخ/زمان",
-       "filehist-thumb": "کچک",
-       "filehist-thumbtext": "کچک سی ۉرژن از تا $1",
-       "filehist-user": "کارۉر",
+       "filehist-thumb": "بأند أنگۉشتی",
+       "filehist-thumbtext": "کوٙچیر سی ۉیرژن از تا $1",
+       "filehist-user": "کارڤأر",
        "filehist-dimensions": "ابعاد",
-       "filehist-comment": "توضیح",
-       "imagelinks": "استÙ\81ادÙ\87 د فایل",
-       "linkstoimage": "Ø°Û\8cÙ\84 Ø§Ù\84ذکر {{PLURAL:$1|Ù\84Û\8cÙ\86Ú©Ù\84 Ø¨Ù\84Ú¯Ù\87|$1 Ù\84Û\8cÙ\86Ú© Ø¨Ù\84Ú¯Ù\84}} Ø¨Ù\87 Ø§ی فایل:",
-       "nolinkstoimage": "بلگه یلی که ۉھ ای فایل لینک دائنه نی.",
-       "sharedupload-desc-here": "اÛ\8c Ù\81اÛ\8cÙ\84 Ø² $1 Ø§Û\89Ù\85ائÙ\87 Û\89 Ø´Ø§Û\8cد Ø¯ Ù¾Ø±Û\89جÙ\87 Û\8cÙ\84 Ø¯Û\8cÙ\87 Ù\85Ù\88رد Ø§Ø³ØªÙ\81ادھ Û\89ابÛ\8cÙ\86.\nتÛ\89ضÛ\8cحتÙ\84 Ø±Û\8c [$2 Ø¨Ù\84Ú¯Ù\87 ØªÛ\89ضÛ\8cØ­ Ù\81اÛ\8cÙ\84] Ø¯Û\89Ù\85Ù\86 Ù\86Ø´Û\89 Û\89ابÛ\8cÙ\87 .",
-       "upload-disallowed-here": "اÛ\8cشا Ù\86Û\8cترÛ\8cد Ø§Û\8c Ù\81اÛ\8cÙ\84Ù\86Ù\87 Ø¨Ù\86Û\89Û\8cسÛ\8cد",
-       "randompage": "بلگھ بختھ کی",
+       "filehist-comment": "توٙضیح",
+       "imagelinks": "ئÛ\8cستÙ\81ادھ د فایل",
+       "linkstoimage": "دÙ\88Ù\99Ù\85Û\8cÙ\86 Ø§Ù\84ذکر {{PLURAL:$1|Ù\84Û\8cÙ\86Ú©Ù\84 Ø¨Ø£Ù\84Ú¯Û\95|$1 Ù\84Û\8cÙ\86Ú© Ø¨Ø£Ù\84Ú¯Ù\84}} Ø¨Û\95 Ø¦ی فایل:",
+       "nolinkstoimage": "بألگە یلی کە ڤە ئی فایل لینک دائنە نی.",
+       "sharedupload-desc-here": "ئÛ\8c Ù\81اÛ\8cÙ\84 Ø² $1 Ø¦Ù\88Ù\99Ù\85ائÛ\95 Ú¤ Ø´Ø§Û\8cد Ø¯ Ù¾Û\89رÛ\89جÛ\95 Û\8cÙ\84 Ø¯Û\8cÛ\95 Ù\85Ù\88رد Ø¦Û\8cستÙ\81ادھ Ú¤Ø§Ø¨Û\8cÙ\86.\nتÙ\88Ù\99ضÛ\8cحتÙ\84 Ø±Û\8c [$2 Ø¨Ø£Ù\84Ú¯Û\95 ØªÛ\89ضÛ\8cØ­ Ù\81اÛ\8cÙ\84] Ø¯Ù\88Ù\99Ù\85Û\8cÙ\86 Ù\86Û\8cØ´Û\89 Ú¤Ø§Ø¨Û\8cÛ\95 .",
+       "upload-disallowed-here": "ئÛ\8cشا Ù\86Û\8cتأرÛ\8cت Ø¦Û\8c Ù\81اÛ\8cÙ\84Ù\86Û\95 Ø¨Û\8cÙ\86Ú¤Û\8cسÛ\8cت",
+       "randompage": "بألگە بأختە کی",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایتل}}",
        "nmembers": "$1 {{PLURAL:$1|عضۉ|اعضۉل}}",
-       "newpages": "بلگھ یل نۉ",
+       "newpages": "بألگە یل نوٙ",
        "pager-older-n": "{{PLURAL:$1|قدیمی تر 1|قدیمی تر $1}}",
-       "booksources": "سرÚ\86Ø´Ù\85Ù\84 Ú©ØªØ¢Û\89",
+       "booksources": "سأرÚ\86Û\8cØ´Ù\85Û\8cÙ\84 Ú©Û\8cتآڤ",
        "booksources-search-legend": "جستن سی سرچشمل کتآۉ",
        "booksources-search": "جستن",
-       "log": "نمایل",
+       "log": "نیمایل",
        "allarticles": "همه بلگل",
        "allpagessubmit": "رۉ",
        "categories": "دسه یل",
-       "mywatchlist": "فهرست پیگیری یل",
+       "mywatchlist": "فیهرست پیگیری یل",
        "watch": "پی‌گیری",
        "dellogpage": "نمایه حذف",
-       "rollbacklink": "عقب گرد",
+       "rollbacklink": "عأقأب گرد",
        "rollbacklinkcount": "ۉرگرد $1 {{PLURAL:$1|اصلاح|اصلاحل}}",
        "protectlogpage": "نمایه حفاظت ۉحمایت",
-       "namespace": "همدرنگل:",
-       "invert": "اÙ\86تخاب Ø¨Ø±Ø¹کس بوھ",
-       "tooltip-invert": "اÙ\86تخاب Ú©Û\89 Ø§Û\8c Ø¬Ø¹Ø¨Ù\86Ù\87 Ø³Û\8c Ù\82ائÙ\85 Ú©Ø±Ø¯Ù\86 ØªØºÛ\8cÛ\8cرÙ\84 Ø¨Ù\84Ú¯Ù\84Û\8c Ú©Ù\87 Ù\87Ù\85درÙ\86Ú¯Ù\84Ø´Û\89 Ø§Ù\86تخاب Û\89ابÛ\8cÙ\86\89 Ù\87Ù\85درÙ\86Ú¯Ù\84 Ù\85رتبط Ø§Ø± Ø§Ù\86تخاب Û\89ابین)",
-       "namespace_association": "همدرنگل مرتبط",
-       "tooltip-namespace_association": "اÙ\86تخاب Ú©Ù\88 Ø§Û\8c Ø¬Ø¹Ø¨Ù\86Ù\87 Ø³Û\8cÚ©Ù\87 Ú¯Ù¾ Û\8cا Ù\85Û\89ضÛ\89ع Ù\87Ù\85درÙ\86Ú¯ Ù\85رتبط Û\89ا Ù\87Ù\85درÙ\86Ú¯Ù\84 Ø§Ù\86تخاب Û\89ابÛ\8cÙ\86Ù\87 Ù\82رار Ø¨نی.",
-       "blanknamespace": "(اصلی)",
-       "contributions": "{{GENDER:$1|سھمل}} کارۉر",
-       "mycontris": "سھمل",
+       "namespace": "هۉمدیرأنگل:",
+       "invert": "ئÛ\8cÙ\86تخاب Ø¨Ø£Ø±Ø¹Ø£کس بوھ",
+       "tooltip-invert": "ئÛ\8cÙ\86تخاب Ú©Û\89 Ø¦Û\8c Ø¬Ø£Ú¤Ø£Ù\86Û\95 Ø³Û\8c Ù\82ائÙ\85 Ú©Ø±Ø¯Ù\86 ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø¨Ù\84Ú¯Ù\84Û\8c Ú©Û\95 Ù\87Ù\85درأÙ\86Ú¯Ù\84Ø´Û\89 Ø¦Û\8cÙ\86تخاب Ú¤Ø§Ø¨Û\8cÙ\86(Ú¤ Ù\87Ù\85دأرÙ\86Ú¯Ù\84 Ù\85Û\89رتأبط Ø§Ø± Ø¦Û\8cÙ\86تخاب Ú¤ابین)",
+       "namespace_association": "هۉمدرأنگل مۉرتأبط",
+       "tooltip-namespace_association": "ئÛ\8cÙ\86تخاب Ú©Û\89 Ø¦Û\8c Ø¬Ø£Ú¤Ø£Ù\86Û\95 Ø³Û\8cÚ©Û\95 Ú¯Ø£Ù¾ Û\8cا Ù\85Û\89ضÙ\88Ù\99ع Ù\87Û\89Ù\85درأÙ\86Ú¯ Ù\85Û\89رتأبط Ú¤Ø§ Ù\87Û\89Ù\85درأÙ\86Ú¯Ù\84 Ø¦Û\8cÙ\86تخاب Ú¤Ø§Ø¨Û\8cÙ\86Û\95 Ù\82رار Ø¨Ø¦نی.",
+       "blanknamespace": "(Ø£صلی)",
+       "contributions": "{{GENDER:$1|سأھمیل}} کارڤأر",
+       "mycontris": "سأھمیل",
        "month": "مئنھ ای ماھ (ۉ قبل زھ ھۉ):",
        "year": "مئنھ ای سال (ۉ قبل زھ ھۉ):",
-       "whatlinkshere": "Ù\84Û\8cÙ\86Ú©Ù\84 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87",
-       "whatlinkshere-title": "بلگل که لینک دائنه ۉھ \"$1\"",
-       "whatlinkshere-page": "بلگه",
-       "linkshere": "لینک بلگل دۉمن الذکر ۉھ '''[[:$1]]''':",
-       "isredirect": "بلگه تغییر مسیر",
-       "istemplate": "استÙ\81ادھ Û\89ابÛ\8cدھ Ø¯Ø§Ø®Ù\84 Ø¨Ù\84Ú¯Ù\87",
-       "isimage": "لینک فایل",
-       "whatlinkshere-prev": "{{PLURAL:$1|Ù\82بÙ\84Û\8c |Ù\85Û\89رد Ù\82بلی$1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|بعدÛ\8c |Ù\85Û\89رد Ø¨عدی $1}}",
+       "whatlinkshere": "Ù\84Û\8cÙ\86Ú©Ù\84 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95",
+       "whatlinkshere-title": "بألگل کە لینک دائنە ڤە \"$1\"",
+       "whatlinkshere-page": "بألگە:",
+       "linkshere": "لینک ھ بألگل دوٙمین الذیکر ڤە '''[[:$1]]''':",
+       "isredirect": "بألگە تأغییر مأسیر",
+       "istemplate": "ئÛ\8cستÛ\8cÙ\81ادھ Ú¤Ø§Ø¨Û\8cدھ Ø¯Ø§Ø®Ù\84 Ø¨Ø£Ù\84Ú¯Û\95",
+       "isimage": "لینک ھ فایل",
+       "whatlinkshere-prev": "{{PLURAL:$1|Ù\82أبÙ\84Û\8c |Ù\85Û\89رÛ\8cد Ù\82Ø£بلی$1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|بأعدÛ\8c |Ù\85Û\89رÛ\8cد Ø¨Ø£عدی $1}}",
        "whatlinkshere-links": "← لینکل",
-       "whatlinkshere-hideredirs": "$1 ØªØºÛ\8cÛ\8cرÙ\84 Ù\85سیر",
-       "whatlinkshere-hidetrans": "$1 ØªØ±Ø§Ú¯Ù\86جایش",
+       "whatlinkshere-hideredirs": "$1 ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ù\85Ø£سیر",
+       "whatlinkshere-hidetrans": "$1 ØªØ£Ø±Ø§Ú¯Û\89Ù\86جاÛ\8cیش",
        "whatlinkshere-hidelinks": "$1 لینکل",
-       "whatlinkshere-filters": "فیلترل",
-       "blocklink": "بسه بۉھ",
+       "whatlinkshere-filters": "فیلتیرل",
+       "blocklink": "بسە بۉھ",
        "contribslink": "شۉراکأتل",
        "movelogpage": "نمایه جابجایی",
-       "export": "بلگل صادرھ",
-       "thumbnail-more": "گپ کردن",
-       "tooltip-pt-userpage": "حسآۉ کارۉری ایشا",
-       "tooltip-pt-mytalk": "بلگه گپ ایشا",
-       "tooltip-pt-preferences": "اÛ\89Ù\84Û\89Û\8cتل مۉ",
-       "tooltip-pt-watchlist": "لیست بلگلی که ایشا تغییرل هۉنۉنه  دنبال اکنین",
-       "tooltip-pt-mycontris": "لیست سھمل ایشا",
-       "tooltip-pt-login": "تۉصیه ۉابۉھ که ۉھ سیستم داخل بۉین. اما اجباری نیسس",
-       "tooltip-pt-logout": "رتن زھ سیستم",
-       "tooltip-pt-createaccount": "تۉصیه ۉابۉھ که حسآۉ کارۉری راس بکنیت یا ۉارد بۉین. اما اجباری نیسس",
-       "tooltip-ca-talk": "قسھ د بلگه محتۉا",
+       "export": "بألگل صادرھ",
+       "thumbnail-more": "گأپ کردن",
+       "tooltip-pt-userpage": "حیسآۉ کارڤأری ئیشا",
+       "tooltip-pt-mytalk": "بألگە گأپ ئیشا",
+       "tooltip-pt-preferences": "ئÛ\89Ù\84Ø£Ú¤Û\8cØ£تل مۉ",
+       "tooltip-pt-watchlist": "لیست بألگلی کە ئیشا تأغییرل هۉنۉنە  دۉنبال ئیکۉنین",
+       "tooltip-pt-mycontris": "لیست سأھمیل ئیشا",
+       "tooltip-pt-login": "توٙصیە ڤابوٙھ کە ڤە سیستم داخل بوٙین. أما ئیجباری نیسس",
+       "tooltip-pt-logout": "رأتÙ\86 Ø²Ú¾ Ø³Û\8cستÙ\85",
+       "tooltip-pt-createaccount": "توٙصیە ڤابوٙھ کە حسآڤ کارڤأری راس بکنیت یا ڤە سیستم داخل بوٙین. اما ئیجباری نیسس",
+       "tooltip-ca-talk": "قسە د بألگە مۉحتڤا",
        "tooltip-ca-edit": "ایسھ ترین ای بلگھ نھ اصلاح کنیت.لطفا قبل اصلاح ای بلگھ ز دۉکمه پیش نمایش استفاده کنیت",
-       "tooltip-ca-addsection": "آغاز Ú©Ø±Ø¯Ù\86 Û\8cÙ\87 Ù\82سÙ\85ت Ù\86Û\89",
-       "tooltip-ca-viewsource": "اÛ\8c Ø¨Ù\84Ú¯Ù\87  Ø¯Û\89Ù\85Ù\86 Ø­Ù\85اÛ\8cتÙ\87. \nاÛ\8cشا ØªØ±Û\8cÙ\86 Ø³Ø±Ú\86Ø´Ù\85Ú¾ Ø³Ú¾ Ø¨Û\89Û\8cÙ\86Û\8cÙ\86",
-       "tooltip-ca-history": "ۉیرگار",
+       "tooltip-ca-addsection": "ئاغاز Ú©Û\8cردأÙ\86 Û\8cÛ\95 Ù\82سÙ\85ت Ù\86Ù\88Ù\99",
+       "tooltip-ca-viewsource": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ø¯Ù\88Ù\99Ù\85Û\8cÙ\86 Ø­Û\8cÙ\85اÛ\8cأتÛ\95. \nئÛ\8cشا ØªØ£Ø±Û\8cÙ\86 Ø³Ø£Ø±Ú\86Û\8cØ´Ù\85Û\95 Ø³Û\95 Ø¨Û\8cØ®Ù\88Ù\99Ù\86Û\8cت",
+       "tooltip-ca-history": "ڤیرگار",
        "tooltip-ca-move": "جابجاکردن ای بلگه",
-       "tooltip-ca-watch": "اضاÙ\81 Ú©Ø±Ø¯Ù\86 Ø§Û\8c Ø¨Ù\84Ú¯Ù\87 Û\89Ú¾ Ù\84Û\8cست Ù¾Û\8cÚ¯Û\8cرÛ\8c Û\8cÙ\84 Ø§یشا",
-       "tooltip-search": "جستن {{SITENAME}}",
-       "tooltip-search-go": "رÛ\89 Ù\85ئÙ\86Ù\87 Ø¨Ù\84Ú¯Ù\87 Ø§Û\8c Û\89ا Ø§Û\8c Ù\86Û\89Ù\85 Ø§ر هیسس",
-       "tooltip-search-fulltext": "جستن بلگھ یل  سی ای متن",
-       "tooltip-p-logo": "رۉ د بلگھ اصلی",
-       "tooltip-n-mainpage": "رۉ د بلگھ اصلی",
-       "tooltip-n-mainpage-description": "رۉ د بلگھ اصلی",
-       "tooltip-n-portal": "درباره پرۉجه ، کارینه کھ تری بکنی ، ینه جا سی جستن چیزل",
-       "tooltip-n-currentevents": "سیل کردن اطلاعات زمینه یاسابقه اطلاعات مئن اتفاقل جاری",
-       "tooltip-n-recentchanges": "سÛ\8cائÙ\84 ØªØºÛ\8cÛ\8cرÙ\84 Ø¢Ø®Ø± Ù\85ئÙ\86 Ø§Û\8c Û\89یکی",
-       "tooltip-n-randompage": "سوار کردن یه بلگھ بختھ کی",
-       "tooltip-n-help": "ینه جا سی سیل کردن",
-       "tooltip-t-whatlinkshere": "فهرست همه بلگه یل ۉیکی که ایچۉ لینک دارن",
-       "tooltip-t-recentchangeslinked": "تغÛ\8cÛ\8cرÙ\84 Ø¢Ø®Ø± Ù\85ئÙ\86 Ø¨Ù\84Ú¯Ú¾ Ú©Ú¾ Ù\84Û\8cÙ\86Ú© Ø¯Ø§Ù\86Ù\87 Ù\88Ú¾ Ø§Û\8c Ø¨Ù\84Ú¯Ú¾",
-       "tooltip-feed-atom": "تغذÛ\8cÙ\87 Ú©Ú\86Ú© ØªØ±Û\8cÙ\86 Ø¬Ø²Ø¡  Ø§Û\8c Ø¨Ù\84Ú¯Ù\87",
-       "tooltip-t-contributions": "یه لیست ز مشارکت کنندھ یل ۉ مقاله دهندھ یل ای بلگه",
+       "tooltip-ca-watch": "ئÛ\8cضاÙ\81 Ú©Ø±Ø¯Ù\86 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¤Û\95 Ù\84Û\8cست Ù¾Û\8cÚ¯Û\8cرÛ\8c Û\8cÙ\84 Ø¦یشا",
+       "tooltip-search": "جۉستأن {{SITENAME}}",
+       "tooltip-search-go": "رÛ\89 Ù\85أئÙ\86Ù\87 Ø¨Ø£Ù\84Ú¯Û\95 Ø¦Û\8c Ú¤Ø§ Ø¦Û\8c Ù\86Û\89Ù\85 Ø£ر هیسس",
+       "tooltip-search-fulltext": "جۉستأن بألگە یل سی ئی مأتن",
+       "tooltip-p-logo": "رۉ د بألگە أصلی",
+       "tooltip-n-mainpage": "رۉ د بألگە أصلی",
+       "tooltip-n-mainpage-description": "رۉ د بألگە أصلی",
+       "tooltip-n-portal": "دربارھ پۉرۉجە ، کارینە کە تأری بکنی ، ینە جا سی جۉستأن چیزل",
+       "tooltip-n-currentevents": "سیل کردن اطلاعات زأمینە یا سابقە اطلاعات مئن اتفاقل جاری",
+       "tooltip-n-recentchanges": "سÛ\8cائÙ\84 ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø¢Ø®Ø± Ù\85ئÙ\86 Ø¦Û\8c Ú¤یکی",
+       "tooltip-n-randompage": "سڤار کردن یە بألگە بأختە کی",
+       "tooltip-n-help": "ینە جا سی سیل کردن",
+       "tooltip-t-whatlinkshere": "فهرست همە بألگە یل ڤیکی کە ئیچوٙ لینک دارن",
+       "tooltip-t-recentchangeslinked": "تأغÛ\8cÛ\8cرÙ\84 Ø¢Ø®Ø± Ù\85ئÙ\86 Ø¨Ø£Ù\84Ú¯Û\95 Ú©Û\95 Ù\84Û\8cÙ\86Ú© Ø¯Ø§Ù\86Û\95 Ú¤Û\95 Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95",
+       "tooltip-feed-atom": "تأغذÛ\8cÛ\95 Ú©Ú\86Ú© ØªØ£Ø±Û\8cÙ\86 Ø¬Û\89زء  Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Û\95",
+       "tooltip-t-contributions": "یە لیست ز مۉشاریکأت کۉنأندھ یل ڤ مأقالە دهأندھ یل ئی بألگە",
        "tooltip-t-upload": "بلم گیر کردن فایلل",
-       "tooltip-t-specialpages": "بلگھ یل ۉیجه",
-       "tooltip-t-print": "ورژن سی چاپ ای بلگھ",
-       "tooltip-t-permalink": "لینکل دائمی ۉھ ای ۉرژن ای بلگھ",
-       "tooltip-ca-nstab-main": "دیئن بلگھ محتۉا",
-       "tooltip-ca-nstab-user": "دیئن بلگه کارۉر",
-       "tooltip-ca-nstab-special": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ú¾Ø§ Û\89Û\8cجھ Ù\88 Ø§Û\8cشا Ù\86Û\8cترÛ\8cÙ\86 Ø®Ù\88د Ø§Û\8c Ø¨Ù\84Ú¯Ù\86Ù\87 Ø§صلاح کنیت",
+       "tooltip-t-specialpages": "بألگە یل ڤیجە",
+       "tooltip-t-print": "ویرژن سی چاپ ئی بألگە",
+       "tooltip-t-permalink": "لینکل دائمی ڤە ئی ۉیرژن ئی بألگە",
+       "tooltip-ca-nstab-main": "دیئن بألگە مۉحتڤا",
+       "tooltip-ca-nstab-user": "دیئن بألگە کارڤأر",
+       "tooltip-ca-nstab-special": "ئÛ\8c Ø¨Ø£Ù\84Ú¯Û\95 Ú¾Ø§ Ú¤Û\8cجÛ\95 Ú¤ Ø¦Û\8cشا Ù\86Û\8cتأرÛ\8cÙ\86 Ø®Û\89د Ø¦Û\8c Ø¨Ø£Ù\84Ú¯Ù\86Û\95 Ø¦Û\8cصلاح کنیت",
        "tooltip-ca-nstab-project": "دیئن بلگه پرۉجه",
-       "tooltip-ca-nstab-image": "دیئن بلگه فایل",
-       "tooltip-ca-nstab-template": "دیئن قالب",
-       "tooltip-ca-nstab-category": "دیئن بلگه دسه بنی",
-       "tooltip-save": "ضبط Ú©Ø±Ø¯Ù\86 ØªØºÛ\8cÛ\8cرÙ\84 Ø§یشا",
-       "tooltip-preview": " Ø¯Û\8cئÙ\86 ØªØºÛ\8cÛ\8cرÙ\84 Ø\8c Ù\84Ø·Ù\81ا Ù\82بÙ\84 Ø¶Ø¨Ø· Ú©Ø±Ø¯Ù\86 Ø¯ Ø§Û\8c Ø®Ø¯Ù\85ت Ø§Ø³ØªÙ\81ادھ Ú©نیت!",
-       "tooltip-diff": "دÛ\8cئÙ\86 ØªØºÛ\8cÛ\8cرÙ\84Û\8c Ú©Ù\87 Ø§Û\8cشا Ù\85ئÙ\86 Ø§Û\8c Ù\85تÙ\86 Ø§Ù\86جاÙ\85 Ø¯Ø§Ø¯Û\8cÙ\86Ù\87",
-       "tooltip-rollback": "\"اعادھ\" ۉرگردۉندن به وضع اولیه سی ای بلگه که سی مشارکت  آخر اصلاح ۉابیدھ ۉا یھ کلیک",
-       "tooltip-undo": "\"Ù\84غÙ\88\"Û\89رگشت Ø§Û\8c Ø§ØµÙ\84اح Û\89 Û\89ا Û\89Û\8cدÙ\86 Ù\81رÙ\85 Ø§ØµÙ\84اح Ù\85ئÙ\86Ù\87 Ù¾Û\8cØ´ Ù\86Ù\85اÛ\8cØ´.اجازھ Ø§Û\8cدھ Ú©Ù\87 Û\8cÙ\87 Ø¯Ù\84Û\8cÙ\84 Û\89Ú¾ Ø®Ù\84اصÙ\87 Ø§Ø¶Ø§Ù\81Ù\87 Ø¨Ú©نی.",
-       "tooltip-summary": "یه خلاصه کچکی بنویسیت",
-       "simpleantispam-label": "اÙ\86تخاب Ø¢Ù\86تÛ\8c-اسپÙ\85\nپر <strong>Ù\86Ú©Ù\86Û\8cت</strong> Ø§Û\8cÙ\86Ù\87 مئن!",
-       "pageinfo-toolboxlink": "اطلاعات بلگه",
+       "tooltip-ca-nstab-image": "دیئن بألگە فایل",
+       "tooltip-ca-nstab-template": "دیئن قالیب",
+       "tooltip-ca-nstab-category": "دیئن بألگە دسە بأنی",
+       "tooltip-save": "ضأبط Ú©Û\8cردأÙ\86 ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø¦یشا",
+       "tooltip-preview": " Ø¯Û\8cئÙ\86 ØªØ£ØºÛ\8cÛ\8cرÙ\84 Ø\8c Ù\84Û\89Ø·Ù\81اÙ\8b Ù\82أبÙ\84 Ú¾ Ø¶Ø£Ø¨Ø· Ú©Û\8cردأÙ\86 Ø¯ Ø¦Û\8c Ø®Û\8cدÙ\85أت Ø¦Û\8cستÛ\8cÙ\81ادھ Ú©Û\89نیت!",
+       "tooltip-diff": "دÛ\8cئÙ\86 ØªØ£ØºÛ\8cÛ\8cرÙ\84Û\8c Ú©Û\95 Ø¦Û\8cشا Ù\85ئÙ\86 Ø¦Û\8c Ù\85تÙ\86 Ø£Ù\86جاÙ\85 Ø¯Ø§Ø¯Û\8cÙ\86Û\95",
+       "tooltip-rollback": "\"اعادە\" ۉرگأردوٙندأن بە ڤأضع أڤألیە سی ئی بألگە کە سی مۉشارکأت  ئاخر ئیصلاح ڤابیدھ ڤا یە کلیک",
+       "tooltip-undo": "\"Ù\84أغڤ\" Ú¤Û\89رگأشت Ø¦Û\8c Ø¦Û\8cصÙ\84اح Ú¤ Ú¤Ø§ Ú¤Û\8cدÙ\86 Ù\81Û\89رÙ\85 Ø¦Û\8cصÙ\84اح Ù\85ئÙ\86Û\95 Ù¾Û\8cØ´ Ù\86Û\8cÙ\85اÛ\8cØ´.ئÛ\8cجازھ Ø¦Û\8cدھ Ú©Û\95 Û\8cÛ\95 Ø¯Ø£Ù\84Û\8cÙ\84 Ú¤Û\95 Ø®Û\89Ù\84اصÛ\95 Ø¦Û\8cضاÙ\81Û\95 Ø¨Û\89Ú©Û\89نی.",
+       "tooltip-summary": "یە خۉلاصە کچکی بینڤیسیت",
+       "simpleantispam-label": "ئÛ\8cÙ\86تÛ\8cخاب Ø¦Ø§Ù\86تÛ\8c-ئÛ\8cسپÛ\8cÙ\85\nÙ¾Û\89ر <strong>Ù\86Ø£Ú©Û\89Ù\86Û\8cت</strong> Ø¦Û\8cÙ\86Û\95 مئن!",
+       "pageinfo-toolboxlink": "اطلاعات بألگە",
        "previousdiff": "← اصلاح قدیمی",
        "nextdiff": "اصلاح نۉتر→",
        "file-info-size": "$1 × $2 پیکسل, اندازھ فایل: $3, MIME نۉع: $4",
-       "file-nohires": "Ù\82ابÙ\84Û\8cت ØªÙ\81Ú©Û\8cÚ© Ø¨Ø§Ù\84اترÛ\8c Ø¯Ø± Ø¯Ø³ØªØ±س نی.",
-       "svg-long-desc": "SVG فایل, تقریبا$1 × $2 پیکسل, اندازھ فایل: $3",
-       "show-big-image": "اÙ\86دازھ Ø§صلی",
-       "show-big-image-preview": "اÙ\86دازھ Ø§ی پیش نمایش:$1.",
-       "show-big-image-other": "دیه {{PLURAL:$2|تفکیک پذیری|تفکیک پذیری یل}}: $1.",
+       "file-nohires": "Ù\82ابÙ\84Û\8cأت ØªØ£Ù\81Ú©Û\8cÚ© Ø¨Ø§Ù\84اتأرÛ\8c Ù\85ئÙ\86 Ø¯Ø£Ø³ØªØ±Û\8cس نی.",
+       "svg-long-desc": "SVG فایل, تأقریبا$1 × $2 پیکسل, اندازھ فایل: $3",
+       "show-big-image": "اÙ\86دازھ Ø£صلی",
+       "show-big-image-preview": "اÙ\86دازھ Ø¦ی پیش نمایش:$1.",
+       "show-big-image-other": "دیە {{PLURAL:$2|تأفکیک پأذیری|تأفکیک پأذیری یل}}: $1.",
        "show-big-image-size": "$1 × $2 پیکسلل",
        "metadata": "فرادادھ",
-       "metadata-help": " Ø§Û\8c Ù\81اÛ\8cÙ\84 Ø¯Ø§Ø±Ø§Û\8c Ø§Ø·Ù\84اعات Ø§Ø¶Ø§Ù\81Ù\87â\80\8cاÛ\8c Ù\87Û\8c Ú©Ù\87 Ø§Ø­ØªÙ\85اÙ\84اÙ\8b Û\89ا Ø¯Û\89ربÛ\8cÙ\86 Ø¯Û\8cجÛ\8cتاÙ\84Û\8câ\80\8c Û\8cا Ù¾Û\89Û\8cشگرÛ\8c Ú©Ù\87 Ø³Û\8c Ø§Û\8cجاد Û\8cا Ø¯Û\8cجÛ\8cتاÙ\84Û\8câ\80\8cکردÙ\86 Ù\87Û\89 Û\89Ú¾ Ú©Ø§Ø± Ø±Ù\87دھ Ø§Ø¶Ø§Ù\81 Û\89ابÛ\8cدھ . Ø§Û\8cر Ù\81اÛ\8cÙ\84 Ø²Ú¾ Û\89ضعÛ\8cت Ø§Û\89Ù\84Û\8cÙ\87 Ø§Ø³ ØªØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ú¾ Û\89ابÛ\8cدھ Ø¨Ù\88Ú¾ Ù\85Ù\85Ú©Ù\86Ù\87 Ù\87Ù\85Ù\87 ØªÙ\88ضÛ\8cحات Ù\85Û\89جÙ\88د Ø§Ø·Ù\84اعات Ø¹Û\8cس Ø±Ù\86Ú¾ Ù\85Ù\86عکس Ù\86Ú©Ù\86Ù\87.",
-       "metadata-fields": "زمینه یل عیس فرادادھ که مئنه ای پیۉم لیس ۉابینه ، قرار ۉابی گرتن ری بلگه نۉمایش عیس ۉقتی که جدۉل فرادادھ فرۉریخت.\nبقیه قائم میشن ۉھ صۉرت پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-       "exif-orientation": "گرایش",
-       "exif-xresolution": "تفکیک پذیری افقی",
-       "exif-yresolution": "تفکیک پذیری عمۉدی",
-       "exif-datetime": "تغÛ\8cÛ\8cرÙ\84 ØªØ§Ø±Û\8cØ® Ù\88 Ø²Ù\85ان فایل",
-       "exif-make": "کۉمپانی راسندھ دۉربین",
-       "exif-model": "مدل دۉربین",
-       "exif-software": "Ù\86رÙ\85 Ø§Ù\81زار Ù\85Û\89رد Ø§Ø³Øªفادھ",
-       "exif-exifversion": "ۉرژن Exif",
-       "exif-colorspace": "Ù\81ضاÛ\8c Ø±نگ",
-       "exif-datetimeoriginal": "تاریخ ۉ زمان تۉلید دادھ یل",
-       "exif-datetimedigitized": "تاریخ ۉ زمان دیجیتالی ۉابیدن",
+       "metadata-help": " Ø¦Û\8c Ù\81اÛ\8cÙ\84 Ø¯Ø§Ø±Ø§Û\8c Ø¦Û\8cØ·Ù\84اعات Ú¾ Ø¦Û\8cضاÙ\81Û\95ئÛ\8c Ù\87Û\8c Ú©Û\95 Ø¦Û\8cحتÙ\85اÙ\84Ù\8b Ú¤Ø§ Ø¯Ù\88Ù\99ربÛ\8cÙ\86 Ø¯Û\8cجÛ\8cتاÙ\84Û\8câ\80\8c Û\8cا Ù¾Ù\88Ù\99Û\8cشگرÛ\8c Ú©Û\95 Ø³Û\8c Ø¦Û\8cجاد Û\8cا Ø¯Û\8cجÛ\8cتاÙ\84Û\8câ\80\8cÚ©Û\8cردأÙ\86 Ù\87Û\89 Ú¤Û\95 Ú©Ø§Ø± Ø±Ø£Ù\87دھ Ø¦Û\8cضاÙ\81 Ú¤Ø§Ø¨Û\8cدھ . Ø§Û\8cر Ù\81اÛ\8cÙ\84 Ø²Ú¾ Ú¤Ø£Ø¶Ø¹Û\8cأت Ø£Ú¤Ø£Ù\84Û\8cÛ\95 Ú¾Ø³ ØªØ£ØºÛ\8cÛ\8cر Ø¯Ø§Ø¯Ú¾ Ú¤Ø§Ø¨Û\8cدھ Ø¨Û\89Ú¾ Ù\85Ù\88Ù\99Ù\85Ú©Û\8cÙ\86Û\95 Ù\87Ø£Ù\85Û\95 ØªÙ\88Ù\99ضÛ\8cØ­Ù\84 Ù\85Û\89جÙ\88Ù\99د Ø¦Û\8cØ·Ù\84اعات Ø¹Ø£Û\8cس Ø±Ù\86Û\95 Ù\85Û\89Ù\86عأکÛ\8cس Ù\86Ø£Ú©Û\89Ù\86Û\95.",
+       "metadata-fields": "زأمینە یل عأیس فرادادھ کە مأئنە ئی پیوٙم لیس ڤابینە ، قرار ڤابی گرتن ری بألگە نوٙمایش عأیس ۉقتی کە جدڤل فرادادھ فروٙریخت.\nبقیە قائم میشن ڤە صوٙرت پیش فأرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "گیرایش",
+       "exif-xresolution": "تأفکیک پأذیری ئوفۉقی",
+       "exif-yresolution": "تأفکیک پأذیری عأموٙدی",
+       "exif-datetime": "تأغÛ\8cÛ\8cرÙ\84 ØªØ§Ø±Û\8cØ® Ú¤ Ø²Û\8cÙ\85Ù\88Ù\99ن فایل",
+       "exif-make": "کۉمپانی راسأندھ دوٙربین",
+       "exif-model": "مۉدیل دوٙربین",
+       "exif-software": "Ù\86أرÙ\85 Ø£Ù\81زار Ù\85Û\89رد Ø¦Û\8cستÛ\8cفادھ",
+       "exif-exifversion": "ڤیرژین Exif",
+       "exif-colorspace": "Ù\81أضاÛ\8c Ø±Ø£نگ",
+       "exif-datetimeoriginal": "تاریخ ڤ زیموٙن تۉلید دادھ یل",
+       "exif-datetimedigitized": "تاریخ ڤ زیموٙن دیجیتالی ڤابیدن",
        "exif-orientation-1": "عادی",
-       "namespacesall": "همه",
+       "namespacesall": "همە",
        "monthsall": "همه",
        "semicolon-separator": "؛&#32;",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گپ]])",
-       "specialpages": "بلگھ یل ۉیجھ",
-       "tag-filter": "[[Special:Tags|برÚ\86سب]] فیلتر:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برÚ\86سب|برچسبل}}]]: $2)",
-       "logentry-delete-delete": "$1 {{GENDER:$2|حذÙ\81 Û\89ابÛ\8cدھ}} Ø¨Ù\84Ú¯Ù\87 $3",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گأپ]])",
+       "specialpages": "بألگە یل ڤیجە",
+       "tag-filter": "[[Special:Tags|بأرÚ\86Ø£سب]] فیلتر:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|بأرÚ\86سب|بأرچسبل}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|حأذÙ\81 Ú¤Ø§Ø¨Û\8cدھ}} Ø¨Ø£Ù\84Ú¯Û\95 $3",
        "logentry-move-move": "$1 {{GENDER:$2|انتقال دادھ بیه}} بلگه $3 ۉھ $4",
-       "logentry-newusers-create": "حسآۉ کارۉر $1 ۉابیه {{GENDER:$2|راس ۉیدھ }}",
+       "logentry-newusers-create": "حسآۉ کارڤأر $1 ڤابیە {{GENDER:$2|راس ڤیدھ }}",
        "logentry-upload-upload": "$1 {{GENDER:$2|بلم گیر کردھ ۉابی}} $3",
-       "searchsuggest-search": "جستن"
+       "searchsuggest-search": "جۉستأن"
 }
index 09d4ecd..86b5705 100644 (file)
@@ -21,7 +21,9 @@
                        "Yyy",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Nitalynx",
+                       "Silraks"
                ]
        },
        "tog-underline": "Pasvītrot saites:",
@@ -29,7 +31,7 @@
        "tog-hidepatrolled": "Slēpt apstiprinātās izmaņas pēdējo izmaiņu sarakstā",
        "tog-newpageshidepatrolled": "Paslēpt pārbaudītās lapas jauno lapu sarakstā",
        "tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)",
-       "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā  (izmanto ''JavaScript'')",
+       "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā",
        "tog-numberheadings": "Automātiski numurēt virsrakstus",
        "tog-showtoolbar": "Rādīt labošanas rīkjoslu",
        "tog-editondblclick": "Atvērt lapu labošanai ar dubultklikšķi",
@@ -38,6 +40,7 @@
        "tog-watchdefault": "Pievienot manis izmainītās lapas un failus uzraugāmo lapu sarakstam",
        "tog-watchmoves": "Pievienot manis pārvietotās lapas un failus uzraugāmo lapu sarakstam",
        "tog-watchdeletion": "Pievienot manis izdzēstās lapas un failus uzraugāmo lapu sarakstam",
+       "tog-watchrollback": "Pievienot lapas, kurās es novērsu izmaiņas, manam uzraugāmo rakstu sarakstam",
        "tog-minordefault": "Atzīmēt visus labojumus jau sākotnēji par maznozīmīgiem",
        "tog-previewontop": "Parādīt priekšskatījumu virs labošanas lauka, nevis zem",
        "tog-previewonfirst": "Parādīt priekšskatījumu jau uzsākot rediģēšanu",
        "tog-watchlisthideown": "Paslēpt manus labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthidebots": "Paslēpt botu labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthideminor": "Paslēpt maznozīmīgos labojumus uzraugāmo lapu sarakstā",
-       "tog-watchlisthideliu": "Paslēpt reģistrēto lietotāju labojumus uzraugāmo lapu sarakstā",
-       "tog-watchlisthideanons": "Paslēpt anonīmo lietotāju labojumus uzraugāmo lapu sarakstā",
+       "tog-watchlisthideliu": "Paslēpt reģistrēto dalībnieku labojumus uzraugāmo lapu sarakstā",
+       "tog-watchlisthideanons": "Paslēpt anonīmo dalībnieku labojumus uzraugāmo lapu sarakstā",
        "tog-watchlisthidepatrolled": "Paslēpt pārbaudītās lapas uzraugāmo lapu sarakstā",
-       "tog-ccmeonemails": "Sūtīt sev citiem lietotājiem nosūtīto epastu kopijas",
+       "tog-ccmeonemails": "Sūtīt sev citiem dalībniekiem nosūtīto epastu kopijas",
        "tog-diffonly": "Nerādīt lapu saturu zem izmaiņām",
        "tog-showhiddencats": "Rādīt slēptās kategorijas",
        "tog-norollbackdiff": "Neņemt vērā atšķirības, veicot atriti",
        "thu": "Ce",
        "fri": "Pk",
        "sat": "Se",
-       "january": "janvārī,",
-       "february": "februārī,",
-       "march": "martā,",
-       "april": "aprīlī,",
-       "may_long": "maijā,",
-       "june": "jūnijā,",
-       "july": "jūlijā,",
-       "august": "augustā,",
-       "september": "septembrī,",
-       "october": "oktobrī,",
-       "november": "novembrī,",
-       "december": "decembrī,",
-       "january-gen": "Janvāra",
-       "february-gen": "Februāra",
-       "march-gen": "Marta",
-       "april-gen": "Aprīļa",
-       "may-gen": "Maija",
-       "june-gen": "Jūnija",
-       "july-gen": "Jūlija",
-       "august-gen": "Augusta",
-       "september-gen": "Septembra",
-       "october-gen": "Oktobra",
-       "november-gen": "Novembra",
-       "december-gen": "Decembra",
-       "jan": "janvārī,",
-       "feb": "februārī,",
-       "mar": "martā,",
-       "apr": "aprīlī,",
-       "may": "maijā,",
-       "jun": "jūnijā,",
-       "jul": "jūlijā,",
-       "aug": "augustā,",
-       "sep": "septembrī,",
-       "oct": "oktobrī,",
-       "nov": "novembrī,",
-       "dec": "decembrī,",
+       "january": "janvāris",
+       "february": "februāris",
+       "march": "marts",
+       "april": "aprīlis",
+       "may_long": "maijs",
+       "june": "jūnijs",
+       "july": "jūlijs",
+       "august": "augusts",
+       "september": "septembris",
+       "october": "oktobris",
+       "november": "novembris",
+       "december": "decembris",
+       "january-gen": "janvāra",
+       "february-gen": "februāra",
+       "march-gen": "marta",
+       "april-gen": "aprīļa",
+       "may-gen": "maija",
+       "june-gen": "jūnija",
+       "july-gen": "jūlija",
+       "august-gen": "augusta",
+       "september-gen": "septembra",
+       "october-gen": "oktobra",
+       "november-gen": "novembra",
+       "december-gen": "decembra",
+       "jan": "janvāris",
+       "feb": "februāris",
+       "mar": "marts",
+       "apr": "aprīlis",
+       "may": "maijs",
+       "jun": "jūnijs",
+       "jul": "jūlijs",
+       "aug": "augusts",
+       "sep": "septembris",
+       "oct": "oktobris",
+       "nov": "novembris",
+       "dec": "decembris",
        "january-date": "$1. janvāris",
        "february-date": "$1. februāris",
        "march-date": "$1. marts",
        "talkpage": "Diskusija par šo lapu",
        "talkpagelinktext": "Diskusija",
        "specialpage": "Īpašā Lapa",
-       "personaltools": "Lietotāja rīki",
+       "personaltools": "Dalībnieka rīki",
        "articlepage": "Apskatīt rakstu",
        "talk": "Diskusija",
        "views": "Apskates",
        "toolbox": "Rīki",
-       "userpage": "Skatīt lietotāja lapu",
+       "userpage": "Skatīt dalībnieka lapu",
        "projectpage": "Skatīt projekta lapu",
        "imagepage": "Skatīt faila lapu",
        "mediawikipage": "Skatīt paziņojuma lapu",
        "redirectedfrom": "(Pāradresēts no $1)",
        "redirectpagesub": "Pāradresācijas lapa",
        "redirectto": "Pāradresēt uz:",
-       "lastmodifiedat": "Šajā lapā pēdējās izmaiņas izdarītas $2, $1.",
+       "lastmodifiedat": "Šajā lapā pēdējo izmaiņu izdarīšanas brīdis: $2, $1.",
        "viewcount": "Šī lapa ir tikusi apskatīta $1 {{PLURAL:$1|reizes|reizi|reizes}}.",
        "protectedpage": "Aizsargāta lapa",
        "jumpto": "Pārlēkt uz:",
        "jumptonavigation": "navigācija",
        "jumptosearch": "meklēt",
        "view-pool-error": "Atvainojiet, šobrīd serveri ir pārslogoti.\nPārāk daudz lietotāju mēģina apskatīt šo lapu.\nLūdzu, brīdi uzgaidiet un mēģiniet šo lapu apskatīt vēlreiz.\n\n$1",
+       "generic-pool-error": "Atvainojiet, šobrīd serveri ir pārslogoti.\nPārāk daudz lietotāju mēģina apskatīt šo lapu.\nLūdzu, brīdi uzgaidiet un mēģiniet šo lapu apskatīt vēlreiz.",
+       "pool-timeout": "Noildze, gaidot bloķēšanu",
        "pool-errorunknown": "Nezināma kļūda",
        "poolcounter-usage-error": "Izmantošanas kļūda: $1",
        "aboutsite": "Par {{grammar:akuzatīvs|{{SITENAME}}}}",
        "privacypage": "Project:Privātuma politika",
        "badaccess": "Atļaujas kļūda",
        "badaccess-group0": "Tev nav atļauts izpildīt darbību, kuru tu pieprasīji.",
-       "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|lietotāju grupām|lietotāju grupai|lietotāju grupām}}.",
+       "badaccess-groups": "Darbības izpilde, ko Tu pieprasīji, ir pieejama tikai $1 {{PLURAL:$2|dalībnieku grupām|dalībnieku grupai|dalībnieku grupām}}.",
        "versionrequired": "Nepieciešamā ''MediaWiki'' versija: $1.",
        "versionrequiredtext": "Lai lietotu šo lapu, nepieciešama ''MediaWiki'' versija $1. Sk. [[Special:Version|versija]].",
        "ok": "Labi",
        "retrievedfrom": "Saturs iegūts no \"$1\"",
        "youhavenewmessages": "Tev ir $1 (skatīt $2).",
-       "youhavenewmessagesmanyusers": "Jums ir $1 no daudziem lietotājiem ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Jums ir}} $1 no {{PLURAL:$3|cita dalībnieka|$3 dalībniekiem}} ($2).",
+       "youhavenewmessagesmanyusers": "Jums ir $1 no daudziem dalībniekiem ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|999=jauni vēstījumi|jauns vēstījums|999=jauni vēstījumi}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|999=pēdējās izmaiņas|pēdējā izmaiņa|999=pēdējās izmaiņas}}",
        "youhavenewmessagesmulti": "Tev ir jauns ziņojums: $1",
        "sort-descending": "Kārtot dilstošā secībā",
        "sort-ascending": "Kārtot augošā secībā",
        "nstab-main": "Raksts",
-       "nstab-user": "Lietotāja lapa",
+       "nstab-user": "Dalībnieka lapa",
        "nstab-media": "Multivides lapa",
        "nstab-special": "Īpašā lapa",
        "nstab-project": "Projekta lapa",
        "missing-article": "Teksts lapai ar nosaukumu \"$1\" $2 datubāzē nav atrodams.\n\nTas parasti notiek novecojušu saišu gadījumā: pieprasot izmaiņas vai hronoloģiju lapai, kas ir izdzēsta.\n\nJa lapai ir jābūt, tad, iespējams, ir kļūda programmā.\nPar to varat ziņot [[Special:ListUsers/sysop|kādam administratoram]], norādot arī URL.",
        "missingarticle-rev": "(Pārskatīšana #: $1)",
        "missingarticle-diff": "(Salīdz.: $1, $2)",
+       "readonly_lag": "Datu bāze automātiski bloķēta, kamēr sekotājserveri sinhronizējas ar vedējserveri",
        "internalerror": "Iekšēja kļūda",
        "internalerror_info": "Iekšējā kļūda: $1",
+       "internalerror-fatal-exception": "\"$1\" tipa fatāls izņēmums (kļūda)",
        "filecopyerror": "Nav iespējams nokopēt failu \"$1\" uz \"$2\"",
        "filerenameerror": "Neizdevās pārdēvēt failu \"$1\" par \"$2\".",
        "filedeleteerror": "Nevar izdzēst failu \"$1\".",
        "badarticleerror": "Šo darbību nevar veikt šajā lapā.",
        "cannotdelete": "Nevar izdzēst lapu vai failu $1. Iespējams, to jau ir izdzēsis kāds cits.",
        "cannotdelete-title": "Nevar izdzēst lapu \"$1\"",
+       "delete-hook-aborted": "Aizķere pārtraukusi dzēšanas operāciju.\nPaskaidrojums nav saņemts.",
+       "no-null-revision": "Neizdevās izveidot jaunu nulles versiju lapai \"$1\"",
        "badtitle": "Nepiemērots nosaukums",
        "badtitletext": "Pieprasītā lapa ir kļūdaina, tukša, vai nepareizi saistīts starpvalodu vai starp-vikiju virsrakstas. Tas var saturēt vienu vai vairākus simbolus, ko nedrīkst izmantot nosaukumos.",
+       "title-invalid-empty": "Pieprasītais lapas nosaukums ir tukšs vai satur tikai vārdtelpas nosaukumu.",
+       "title-invalid-utf8": "Pieprasītais lapas nosaukums satur nederīgu UTF-8 virkni.",
+       "title-invalid-interwiki": "Pieprasītais lapas nosaukums satur interwiki saiti, bet tās nevar lietot nosaukumos.",
+       "title-invalid-talk-namespace": "Pieprasītais lapas nosaukums norāda uz diskusijas lapu, kas nevar pastāvēt.",
+       "title-invalid-characters": "Pieprasītais lapas nosaukums satur nederīgus simbolus: \"$1\".",
        "perfcached": "Šie dati ir no servera kešatmiņas un var būt novecojuši. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
-       "perfcachedts": "Šie dati ir no servera kešatmiņas (''cache''), kas pēdējo reizi bija atjaunota $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "perfcachedts": "Šie dati ir no servera kešatmiņas (''cache''), kas pēdējo reizi bija atjaunota $1. Kešatmiņā {{PLURAL:$4|pieejami|pieejams|pieejami}} ne vairāk kā {{PLURAL:$4|$4 rezultāti|viens rezultāts|$4 rezultāti}}.",
        "querypage-no-updates": "Šīs lapas atjaunošana pagaidām ir atslēgta. Te esošie dati tuvākajā laikā netiks atjaunoti.",
        "viewsource": "Aplūkot kodu",
        "viewsource-title": "Apskatīt $1 izejas kodu",
        "nosuchuser": "Šeit nav lietotāja ar vārdu \"$1\". Lietotājvārdi ir reģistrjutīgi (lielie un mazie burti nav viens un tas pats) Pārbaudi, vai pareizi uzrakstīts, vai arī [[Special:UserLogin/signup|izveido jaunu kontu]].",
        "nosuchusershort": "Šeit nav lietotāja ar vārdu \"$1\". Pārbaudi, vai nav drukas kļūda.",
        "nouserspecified": "Tev jānorāda lietotājvārds.",
-       "login-userblocked": "Šis lietotājs ir bloķēts. Pieslēgšanās nav atļauta.",
+       "login-userblocked": "Šis dalībnieks ir bloķēts. Pieslēgšanās nav atļauta.",
        "wrongpassword": "Tu ievadīji nepareizu paroli. Lūdzu, mēģini vēlreiz.",
        "wrongpasswordempty": "Parole bija tukša. Lūdzu mēģini vēlreiz.",
        "passwordtooshort": "Tava parole ir pārāk īsa.\nTajā jābūt vismaz {{PLURAL:$1|$1 zīmēm|1 zīmei|$1 zīmēm}}.",
        "emaildisabled": "Šī vietne nevar nosūtīt e-pastus.",
        "accountcreated": "Konts izveidots",
        "accountcreatedtext": "Lietotāja konts priekš $1 tika izveidots.",
-       "createaccount-title": "Lietotāja konta izveidošana {{grammar:lokatīvs|{{SITENAME}}}}",
+       "createaccount-title": "Dalībnieka konta izveidošana {{grammar:lokatīvs|{{SITENAME}}}}",
        "login-throttled": "Jūs esat veicis pārāk daudz pieslēgšanās mēģinājumus.\nLūdzu, uzgaidiet $1 pirms mēģiniet vēlreiz.",
        "login-abort-generic": "Jūsu pieteikšanās bija neveiksmīga — Darbība pārtraukta",
        "loginlanguagelabel": "Valoda: $1",
        "missingcommentheader": "'''Atgādinājums:''' Tu šim komentāram neesi norādījis virsrakstu/tematu.\nJa tu vēlreiz spiedīsi uz \"{{int:savearticle}}\", tavas izmaiņas tiks saglabātas bez virsraksta.",
        "summary-preview": "Kopsavilkuma pirmskats:",
        "subject-preview": "Kopsavilkuma/virsraksta pirmskats:",
-       "blockedtitle": "Lietotājs ir bloķēts.",
+       "blockedtitle": "Dalībnieks ir bloķēts.",
        "blockedtext": "'''Tavs lietotāja vārds vai IP adrese ir nobloķēta.'''\n\n$1 nobloķēja tavu lietotāja vārdu vai IP adresi.\nBloķējot norādītais iemesls bija: ''$2''.\n\n*Bloka sākums: $8\n*Bloka beigas: $6\n*Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|administratoru]] lai apspriestu šo bloku.\n\nPievērs uzmanību, tam, ka ja tu neesi norādījis derīgu e-pasta adresi ''[[Special:Preferences|savās izvēlēs]]'', tev nedarbosies \"sūtīt e-pastu\" iespēja.\n\nTava IP adrese ir $3 un bloka identifikators ir #$5. Lūdzu iekļauj vienu no tiem, vai abus, visos turpmākajos pieprasījumos.",
        "autoblockedtext": "Tava IP adrese ir tikusi automātiski nobloķēta, tāpēc, ka to (nupat kā) ir lietojis cits lietotājs, kuru nobloķēja $1.\nNorādītais bloķēšanas iemesls bija:\n\n:''$2''\n\n* Bloka sākums: $8\n* Bloka beigas: $6\n* Bija domāts nobloķēt: $7\n\nTu vari sazināties ar $1 vai kādu citu [[{{MediaWiki:Grouppage-sysop}}|adminu]] lai apspriestu šo bloku.\n\nAtceries, ka tu nevari lietot \"sūtīt e-pastu šim lietotājam\" iespēju, ja tu neesi norādījis derīgu e-pasta adresi savās [[Special:Preferences|lietotāja izvelēs]] un bloķējot tev nav aizbloķēta iespēja sūtīt e-pastu.\n\nTava pašreizējā IP adrese ir $3 un  bloka ID ir $5.\nLūdzu iekļauj šos visos ziņojumos, kurus sūti adminiem, apspriežot šo bloku.",
        "blockednoreason": "iemesls nav norādīts",
        "accmailtitle": "Parole nosūtīta.",
        "accmailtext": "Nejauši ģenerēta parole lietotājam [[User talk:$1|$1]] tika nosūtīta uz $2.\n\nŠī konta paroli pēc ielogošanās varēs nomainīt ''[[Special:ChangePassword|šeit]]''.",
        "newarticle": "(Jauns raksts)",
-       "newarticletext": "Tu šeit nonāci sekojot saitei uz, pagaidām vēl neuzrakstītu, lapu.\nLai izveidotu lapu, sāc rakstīt teksta logā apakšā (par teksta formatēšanu un sīkākai informācija skatīt [$1 palīdzības lapu]).\nJa tu šeit nonāci kļūdas pēc, vienkārši uzspied '''back''' pogu pārlūkprogrammā.",
+       "newarticletext": "Šajā projektā vēl nav lapas ar šādu nosaukumu.\nLai izveidotu lapu, sāc rakstīt teksta logā apakšā (par teksta formatēšanu un sīkākai informācija skatīt [$1 palīdzības lapu]).\nJa tu šeit nonāci kļūdas pēc, vienkārši uzspied <strong>back</strong> pogu pārlūkprogrammā.",
        "anontalkpagetext": "----''Šī ir diskusiju lapa anonīmam lietotājam, kurš vēl nav kļuvis par reģistrētu lietotāju vai arī neizmanto savu lietotājvārdu. Tādēļ mums ir jāizmanto skaitliskā IP adrese, lai viņu identificētu.\nŠāda IP adrese var būt vairākiem lietotājiem.\nJa tu esi anonīms lietotājs un uzskati, ka tev ir adresēti neatbilstoši komentāri, lūdzu, [[Special:UserLogin/signup|kļūsti par lietotāju]] vai arī [[Special:UserLogin|izmanto jau izveidotu lietotājvārdu]], lai izvairītos no turpmākām neskaidrībām un tu netiktu sajaukts ar citiem anonīmiem lietotājiem.''",
        "noarticletext": "Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu]</span>.",
        "noarticletext-nopermission": "Šajā lapā pašlaik nav nekāda teksta.\nTu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,\nvai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot si lapu.",
        "userpage-userdoesnotexist": "Lietotājs \"<nowiki>$1</nowiki>\" nav reģistrēts.\nLūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.",
-       "userpage-userdoesnotexist-view": "Lietotājs \"$1\" nav reģistrēts.",
-       "blocked-notice-logextract": "Šis lietotājs pašlaik ir nobloķēts.\n\nPēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:",
+       "userpage-userdoesnotexist-view": "Dalībnieks \"$1\" nav reģistrēts.",
+       "blocked-notice-logextract": "Šis dalībnieks pašlaik ir nobloķēts.\n\nPēdējais bloķēšanas reģistra ieraksts ir apskatāms zemāk:",
        "clearyourcache": "'''Piezīme:''' Lai redzētu izmaiņas, pēc saglabāšanas jums var nākties iztīrīt sava pārlūka kešatmiņu.\n* '''Firefox / Safari:''' Pieturiet ''Shift'' un klikšķiniet uz ''Pārlādēt'' vai nospiediet ''Ctrl-F5'' vai ''Ctrl-R'' (''Command-R'' uz Mac)\n* '''Google Chrome:''' Nospiediet ''Ctrl-Shift-R'' (''Command-Shift-R'' uz Mac)\n* '''Internet Explorer:''' Pieturiet ''Ctrl'' un klikšķiniet uz ''Pārlādēt'' vai nospiediet ''Ctrl-F5''\n* '''Konqueror:''' Klikšķiniet uz ''Pārlādēt'' vai nospiediet ''F5''\n* '''Opera:''' Iztīriet kešatmiņu ''Tools → Preferences''",
        "usercssyoucanpreview": "'''Ieteikums:''' Lieto pogu \"{{int:showpreview}}\", lai pārbaudītu savu jauno CSS pirms saglabāšanas.",
        "userjsyoucanpreview": "'''Ieteikums:''' Lieto pogu \"{{int:showpreview}}\", lai pārbaudītu savu jauno JavaScript pirms saglabāšanas.",
-       "usercsspreview": "'''Atceries, ka šis ir tikai tava lietotāja CSS pirmskats, lapa vēl nav saglabāta!'''",
+       "usercsspreview": "'''Atceries, ka šis ir tikai tava dalībnieka CSS pirmskats, lapa vēl nav saglabāta!'''",
        "userjspreview": "'''Atceries, ka šis ir tikai tava lietotāja JavaScript pirmskats/tests, lapa vēl nav saglabāta!'''",
        "sitecsspreview": "'''Atcerieties, ka jūs veicat tikai šī CSS priekšapskati.'''\n'''Tas vēl nav saglabāts!'''",
        "sitejspreview": "'''Atcerieties, ka jūs veicat tikai šī JavaScript koda priekšapskati.'''\n'''Tas vēl nav saglabāts!'''",
        "undo-failure": "Šo labojumu nevar atcelt, jo ir veikti nozīmīgi labojumi vēl pēc šī labojuma izdarīšanas.",
        "undo-norev": "Šo izmaiņu nevar atcelt, jo tādas nav vai tā ir izdzēsta.",
        "undo-summary": "Atcēlu [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusija]]) izdarīto izmaiņu $1",
-       "cantcreateaccounttitle": "Nevar izveidot lietotāju",
+       "cantcreateaccounttitle": "Nevar izveidot dalībnieku",
        "cantcreateaccount-text": "[[Lietotājs:$3|$3]] ir bloķējis lietotāja izveidošanu no šīs IP adreses ('''$1''').\n\n$3 norādītais iemesls ir ''$2''",
        "viewpagelogs": "Apskatīt ar šo lapu saistītos reģistru ierakstus",
        "nohistory": "Šai lapai nav pieejama versiju hronoloģija.",
        "searchrelated": "saistītais",
        "searchall": "viss",
        "showingresults": "Šobrīd ir {{PLURAL:$1|redzamas|redzama|redzamas}} '''$1''' {{PLURAL:$1|lapas|lapa|lapas}}, sākot ar #'''$2'''.",
+       "showingresultsinrange": "Tiek {{PLURAL:$1|rādīti <strong>$1</strong> rezultāti|rādīts <strong>1</strong> rezultāts|rādīti <strong>$1</strong> rezultāti}} no <strong>$2</strong>. līdz <strong>$3</strong>. rezultātam.",
        "search-nonefound": "Nav atrasti pieprasījumam atbilstoši rezultāti.",
        "powersearch-legend": "Izvērstā meklēšana",
        "powersearch-ns": "Meklēt šajās lapu grupās:",
        "skin-preview": "Priekšskats",
        "datedefault": "Vienalga",
        "prefs-labs": "Laboratorijas funkcijas",
-       "prefs-user-pages": "Lietotāja lapas",
-       "prefs-personal": "Lietotāja dati",
+       "prefs-user-pages": "Dalībnieka lapas",
+       "prefs-personal": "Dalībnieka dati",
        "prefs-rc": "Pēdējās izmaiņas",
        "prefs-watchlist": "Uzraugāmie raksti",
        "prefs-editwatchlist": "Labot uzraugāmo rakstu sarakstu",
        "prefs-editwatchlist-label": "Labot ierakstus savā uzraugāmo rakstu sarakstā:",
+       "prefs-editwatchlist-clear": "Notīrīt uzraugāmos rakstus",
        "prefs-watchlist-days": "Dienu skaits, kuras parādīt uzraugāmo rakstu sarakstā:",
        "prefs-watchlist-days-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|dienu|dienas}}",
        "prefs-watchlist-edits": "Izmaiņu skaits, kuras rādīt izvērstajā uzraugāmo rakstu sarakstā:",
        "columns": "Simbolu skaits rindiņā:",
        "searchresultshead": "Meklēšana",
        "stub-threshold": "Slieksnis <a href=\"#\" class=\"stub\">aizmetņa saites</a> formatēšanai (baiti):",
+       "stub-threshold-sample-link": "piemērs",
        "stub-threshold-disabled": "Atslēgts",
        "recentchangesdays": "Dienu skaits, kuru rādīt pēdējās izmaiņās:",
        "recentchangesdays-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|diena|dienas}}",
        "timezoneregion-europe": "Eiropa",
        "timezoneregion-indian": "Indijas okeāns",
        "timezoneregion-pacific": "Klusais okeāns",
-       "allowemail": "Atļaut saņemt e-pastus no citiem lietotājiem",
+       "allowemail": "Atļaut saņemt e-pastus no citiem dalībniekiem",
        "prefs-searchoptions": "Meklēšana",
        "prefs-namespaces": "Vārdtelpas",
        "default": "pēc noklusējuma",
        "userrights-groupsmember-auto": "Netiešs dalībnieks:",
        "userrights-groups-help": "Tu vari izmainīt kādās grupās šis lietotājs ir:\n* Ieķeksēts lauciņš norāda, ka lietotājs ir attiecīgajā grupā.\n* Neieķeksēts lauciņš norāda, ka lietotājs nav attiecīgajā grupā.\n* * norāda, ka šo grupu tu nevarēsi noņemt, pēc tam, kad to būsi pielicis, vai otrādāk (tu nevarēsi atcelt savas izmaiņas).",
        "userrights-reason": "Iemesls:",
-       "userrights-no-interwiki": "Tev nav atļaujas izmainīt lietotāju tiesības citos wiki.",
+       "userrights-no-interwiki": "Tev nav atļaujas izmainīt dalībnieku tiesības citos wiki.",
        "userrights-nodatabase": "Datubāze $1 neeksistē vai nav lokāla.",
-       "userrights-nologin": "Tev ir [[Special:UserLogin|jāieiet iekšā]] kā adminam, lai varētu izmainīt lietotāju grupas.",
+       "userrights-nologin": "Tev ir [[Special:UserLogin|jāieiet iekšā]] kā adminam, lai varētu izmainīt dalībnieku grupas.",
        "userrights-notallowed": "Jūsu lietotāja kontam nav atļaujas pievienot vai noņemt lietotāju tiesības.",
        "userrights-changeable-col": "Grupas, kuras tu vari izmainīt",
        "userrights-unchangeable-col": "Grupas, kuras tu nevari izmainīt",
        "group": "Grupa:",
-       "group-user": "Lietotāji",
-       "group-autoconfirmed": "Automātiski apstiprinātie lietotāji",
+       "group-user": "Dalībnieki",
+       "group-autoconfirmed": "Automātiski apstiprinātie dalībnieki",
        "group-bot": "Boti",
        "group-sysop": "Administratori",
        "group-bureaucrat": "Birokrāti",
        "group-suppress": "Novērotāji",
        "group-all": "(visi)",
-       "group-user-member": "{{GENDER:$1|lietotājs}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|automātiski apstiprināts lietotājs|automātiski apstiprināta lietotāja}}",
+       "group-user-member": "{{GENDER:$1|dalībnieks}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|automātiski apstiprināts dalībnieks|automātiski apstiprināta dalībniece}}",
        "group-bot-member": "{{GENDER:$1|bots}}",
        "group-sysop-member": "{{GENDER:$1|administrators|administratore}}",
        "group-bureaucrat-member": "{{GENDER:$1|birokrāts|birokrāte}}",
        "group-suppress-member": "{{GENDER:$1|novērotājs|novērotāja}}",
-       "grouppage-user": "{{ns:project}}:Lietotāji",
-       "grouppage-autoconfirmed": "{{ns:project}}:Automātiski apstiprināti lietotāji",
+       "grouppage-user": "{{ns:project}}:Dalībnieki",
+       "grouppage-autoconfirmed": "{{ns:project}}:Automātiski apstiprināti dalībnieki",
        "grouppage-bot": "{{ns:project}}:Boti",
        "grouppage-sysop": "{{ns:project}}:Administratori",
        "grouppage-bureaucrat": "{{ns:project}}:Birokrāti",
        "right-edit": "Izmainīt lapas",
        "right-createpage": "Izveidot lapas (kuras nav diskusiju lapas)",
        "right-createtalk": "Izveidot diskusiju lapas",
-       "right-createaccount": "Izveidot jaunus lietotāja kontus",
+       "right-createaccount": "Izveidot jaunus dalībnieka kontus",
        "right-minoredit": "Atzīmēt izmaiņas kā maznozīmīgas",
        "right-move": "Pārvietot lapas",
        "right-move-subpages": "Pārvietot lapas kopā ar to apakšlapām",
-       "right-move-rootuserpages": "Pārvietot saknes lietotāja lapas",
+       "right-move-rootuserpages": "Pārvietot saknes dalībnieka lapas",
        "right-move-categorypages": "Pārvietot kategoriju lapas",
        "right-movefile": "Pārvietot failus",
        "right-suppressredirect": "Neveidot pāradresāciju no vecā nosaukuma, pārvietojot lapu",
        "right-undelete": "Atjaunot lapu",
        "right-suppressrevision": "Apskatīt un atjaunot versijas, kas paslēptas no adminiem",
        "right-suppressionlog": "Skatīt personīgos reģistrus",
-       "right-block": "Bloķēt citus lietotājus (lapu izmainīšana)",
-       "right-blockemail": "Bloķēt citus lietotājus (iespēja sūtīt e-pastu)",
-       "right-hideuser": "Bloķēt lietotājvārdu, slēpjot to no citiem lietotājiem",
+       "right-block": "Bloķēt citus dalībniekus (lapu izmainīšana)",
+       "right-blockemail": "Bloķēt citus dalībniekus (iespēja sūtīt e-pastu)",
+       "right-hideuser": "Bloķēt lietotājvārdu, slēpjot to no citiem dalībniekiem",
        "right-ipblock-exempt": "Apiet IP bloķēšanu, automātisku bloķēšanu un IP apgabalu bloķēšanu",
        "right-proxyunbannable": "Apiet ''proxy'' automātiskos blokus",
        "right-unblockself": "Atbloķēt sevi",
        "right-protect": "Izmainīt aizsargātās lapas un to aizsardzības līmeni",
        "right-editprotected": "Labot aizsargātās lapas (bez kaskādes aizsardzības)",
-       "right-editinterface": "Izmainīt lietotāja interfeisu",
-       "right-editusercssjs": "Izmainīt citu lietotāju CSS un JS failus",
-       "right-editusercss": "Izmainīt citu lietotāju CSS failus",
-       "right-edituserjs": "Izmainīt citu lietotāju JS failus",
-       "right-rollback": "Ātri veikt atriti pēdējā lietotāja labojumiem, kas veica izmaiņas kādā konkrētā lapā",
+       "right-editinterface": "Izmainīt dalībnieka interfeisu",
+       "right-editusercssjs": "Izmainīt citu dalībnieku CSS un JS failus",
+       "right-editusercss": "Izmainīt citu dalībnieku CSS failus",
+       "right-edituserjs": "Izmainīt citu dalībnieku JS failus",
+       "right-viewmywatchlist": "Apskatīt savu uzraugāmo rakstu sarakstu",
+       "right-rollback": "Ātri veikt atriti pēdējā dalībnieka labojumiem, kas veica izmaiņas kādā konkrētā lapā",
        "right-markbotedits": "Atzīmēt labojumus, kam veikta atrite, kā bota labojumus",
        "right-noratelimit": "Būt darbību ātruma ierobežojumu neietekmētiem",
        "right-import": "Importēt lapas no citiem wiki",
        "right-patrolmarks": "Apskatīt pēdējo izmaiņu lapu pārbaužu atzīmes",
        "right-unwatchedpages": "Apskatīt neuzraudzīto lapu sarakstu",
        "right-mergehistory": "Apvienot lapu vēsturi",
-       "right-userrights": "Mainīt visu lietotāju tiesības",
-       "right-userrights-interwiki": "Mainīt lietotāju tiesības citās Vikipēdijās",
+       "right-userrights": "Mainīt visu dalībnieku tiesības",
+       "right-userrights-interwiki": "Mainīt dalīnieku tiesības citās Vikipēdijās",
        "right-siteadmin": "Bloķēt un atbloķēt datubāzi",
-       "right-sendemail": "Sūtīt e-pastu citiem lietotājiem",
+       "right-sendemail": "Sūtīt e-pastu citiem dalībniekiem",
        "right-passwordreset": "Apskatīt paroles atiestatīšanas e-pasta ziņojumus",
-       "newuserlogpage": "Jauno lietotāju reģistrs",
+       "newuserlogpage": "Jauno dalībnieku reģistrs",
        "newuserlogpagetext": "Jauno lietotājvārdu reģistrs.",
-       "rightslog": "Lietotāju tiesību reģistrs",
-       "rightslogtext": "Šis ir lietotāju tiesību izmaiņu reģistrs.",
+       "rightslog": "Dalībnieku tiesību reģistrs",
+       "rightslogtext": "Šis ir dalībnieku tiesību izmaiņu reģistrs.",
        "action-read": "lasīt šo lapu",
        "action-edit": "labot šo lapu",
        "action-createpage": "izveidot lapas",
        "action-createtalk": "izveidot diskusiju lapas",
-       "action-createaccount": "izveidot šo lietotāja kontu",
+       "action-createaccount": "izveidot šo dalībnieka kontu",
        "action-history": "apskatīt šīs lapas vēsturi",
        "action-minoredit": "atzīmēt šo labojumu kā maznozīmīgu",
        "action-move": "pārvietot šo lapu",
        "action-move-subpages": "pārvietot šo lapu un tās apakšlapas",
-       "action-move-rootuserpages": "pārvietot saknes lietotāja lapas",
+       "action-move-rootuserpages": "pārvietot saknes dalībnieka lapas",
        "action-move-categorypages": "pārvietot kategoriju lapas",
        "action-movefile": "pārvietot šo failu",
        "action-upload": "augšupielādēt šo failu",
        "action-undelete": "atjaunot šo lapu",
        "action-suppressrevision": "pārskatīt un atjaunot šo slēpto versiju",
        "action-suppressionlog": "apskatīt šo privāto reģistru",
-       "action-block": "bloķēt šo lietotāju pret rakstu turpmāku labošanu",
+       "action-block": "bloķēt šo dalībnieku pret rakstu turpmāku labošanu",
        "action-protect": "izmainīt aizsardzības līmeņus šai lapai",
        "action-import": "importēt šo lapu no citas viki",
        "action-importupload": "importēt šo lapu no failu augšupielādes",
        "action-autopatrol": "iespēja savus labojumus atzīmēt kā pārbaudītus",
        "action-unwatchedpages": "apskatīt neuzraudzīto lapu sarakstu",
        "action-mergehistory": "apvienot šīs lapas vēsturi",
-       "action-userrights": "mainīt visu lietotāju tiesības",
-       "action-userrights-interwiki": "mainīt lietotāju tiesības citās Vikipēdijās",
+       "action-userrights": "mainīt visu dalībnieku tiesības",
+       "action-userrights-interwiki": "mainīt dalībnieku tiesības citās Vikipēdijās",
        "action-siteadmin": "bloķēt vai atbloķēt datubāzi",
        "action-sendemail": "sūtīt e-pastus",
        "nchanges": "$1 {{PLURAL:$1|izmaiņas|izmaiņa|izmaiņas}}",
        "rcshowhidebots": "$1 botus",
        "rcshowhidebots-show": "Rādīt",
        "rcshowhidebots-hide": "Slēpt",
-       "rcshowhideliu": "$1 reģistrētos lietotājus",
+       "rcshowhideliu": "$1 reģistrētos dalībniekus",
        "rcshowhideliu-show": "Rādīt",
        "rcshowhideliu-hide": "Slēpt",
        "rcshowhideanons": "$1 anonīmos",
        "minoreditletter": "m",
        "newpageletter": "J",
        "boteditletter": "b",
-       "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|lietotāji|lietotājs|lietotāji}}]",
-       "rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\")",
+       "number_of_watching_users_pageview": "[šo lapu uzrauga $1 {{PLURAL:$1|dalībnieki|dalībnieks|dalībnieki}}]",
+       "rc_categories": "Ierobežot uz kategorijām (atdalīt ar \"|\"):",
        "rc_categories_any": "Jebkas",
        "rc-change-size-new": "$1 {{PLURAL:$1|baiti|baits|baiti}} pēc izmaiņām",
        "newsectionsummary": "/* $1 */ jauna sadaļa",
        "upload-misc-error": "Nezināma augšupielādes kļūda",
        "upload-too-many-redirects": "URL sastāvēja pārāk daudz pāradresāciju",
        "upload-http-error": "HTTP kļūda: $1",
+       "upload-dialog-title": "Augšupielādēt failu",
+       "upload-dialog-button-cancel": "Atcelt",
+       "upload-dialog-button-done": "Gatavs",
+       "upload-dialog-button-save": "Saglabāt",
+       "upload-dialog-button-upload": "Augšupielādēt",
+       "upload-dialog-label-select-file": "Izvēlieties file",
+       "upload-dialog-label-infoform-title": "Papildinformācija",
+       "upload-dialog-label-infoform-description": "Apraksts",
+       "upload-dialog-label-usage-title": "Pielietojums",
+       "upload-dialog-label-usage-filename": "Faila nosaukums",
        "backend-fail-stream": "Nevar straumēt failu $1.",
        "backend-fail-backup": "Nevar dublēt failu $1.",
        "backend-fail-notexists": "Fails $1 nepastāv.",
        "randomincategory-invalidcategory": "\"$1\" nav derīgs kategorijas nosaukums.",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Nejauša lapa kategorijā",
+       "randomincategory-submit": "Aiziet!",
        "randomredirect": "Nejauša pāradresācijas lapa",
        "statistics": "Statistika",
        "statistics-header-pages": "Lapu statistika",
        "categoriesfrom": "Parādīt kategorijas sākot ar:",
        "special-categories-sort-count": "kārtot pēc skaita",
        "special-categories-sort-abc": "kārtot alfabētiskā secībā",
-       "deletedcontributions": "Izdzēstais lietotāju devums",
-       "deletedcontributions-title": "Izdzēstais lietotāju devums",
+       "deletedcontributions": "Dzēstais dalībnieka devums",
+       "deletedcontributions-title": "Dzēstais dalībnieka devums",
        "sp-deletedcontributions-contribs": "devums",
        "linksearch": "Ārējo saišu meklēšana",
        "linksearch-pat": "Meklēt:",
        "linksearch-ns": "Vārdtelpas:",
        "linksearch-ok": "Meklēt",
-       "linksearch-text": "Atbalstītie protokoli: <code>$1</code>",
+       "linksearch-text": "Atbalstītie protokoli: $1",
        "linksearch-line": "$1 ir izveidota saite no $2",
        "listusersfrom": "Parādīt lietotājus sākot ar:",
        "listusers-submit": "Parādīt",
        "listgrouprights-namespaceprotection-header": "Vārdtelpas ierobežojumi",
        "listgrouprights-namespaceprotection-namespace": "Vārdtelpa",
        "trackingcategories-nodesc": "Apraksts nav pieejams.",
+       "trackingcategories-disabled": "Kategorija ir atslēgta",
        "mailnologin": "Nav adreses, uz kuru sūtīt",
        "mailnologintext": "Tev jābūt [[Special:UserLogin|iegājušam]], kā arī tev jābūt [[Special:Preferences|norādītai]] derīgai e-pasta adresei, lai sūtītu e-pastu citiem lietotājiem.",
        "emailuser": "Sūtīt e-pastu šim lietotājam",
        "emailuser-title-target": "Nosūtīt e-pastu {{GENDER:$1|šim lietotājam|šai lietotājai}}",
        "emailuser-title-notarget": "Sūtīt e-pastu lietotājam",
-       "emailpage": "Sūtīt e-pastu lietotājam",
-       "emailpagetext": "Ar šo veidni ir iespējams nosūtīt e-pastu šim lietotājam.\nTā e-pasta adrese, kuru tu esi norādījis [[Special:Preferences|savā izvēļu lapā]], parādīsies e-pasta \"From\" lauciņā, tādejādi saņēmējs varēs tev atbildēt.",
+       "emailpagetext": "Ar šo veidni ir iespējams nosūtīt e-pastu šim {{GENDER:$1|lietotājam}}.\nTā e-pasta adrese, kuru tu esi norādījis [[Special:Preferences|savā izvēļu lapā]], parādīsies e-pasta \"From\" lauciņā, tādejādi saņēmējs varēs tev atbildēt.",
        "defemailsubject": "{{SITENAME}} e-pasts no lietotāja \"$1\"",
        "usermaildisabled": "Lietotāja e-pasts atslēgts",
        "usermaildisabledtext": "Jūs nevarat sūtīt e-pastu citiem lietotājiem šajā viki",
        "rollback-success": "Novērsu izmaiņas, ko izdarīja $1;\natjaunoju versiju, ko saglabāja $2.",
        "sessionfailure-title": "sesijas kļūda",
        "sessionfailure": "Ir radusies problēma ar sesijas autentifikāciju;\nšī darbība ir atcelta, lai novērstu lietotājvārda iespējami ļaunprātīgu izmantošanu.\nLūdzu, spied \"''back''\" un atjaunini iepriekšējo lapu. Tad mēģini vēlreiz.",
+       "changecontentmodel-reason-label": "Iemesls:",
        "protectlogpage": "Aizsargāšanas reģistrs",
        "protectedarticle": "aizsargāja \"[[$1]]\"",
        "modifiedarticleprotection": "izmainīja aizsardzības līmeni \"[[$1]]\"",
        "invert": "Izvēlēties pretēji",
        "namespace_association": "Saistītā vārdtelpa",
        "blanknamespace": "(Pamatlapa)",
-       "contributions": "{{GENDER:$1|Lietotāja|Lietotājas|Lietotāja}} devums",
-       "contributions-title": "Lietotāja $1 devums",
+       "contributions": "{{GENDER:$1|Dalībnieka|Dalībnieces|Dalībnieka}} devums",
+       "contributions-title": "Dalībnieka $1 devums",
        "mycontris": "Devums",
        "contribsub2": "Lietotājs: $1 ($2)",
        "nocontribs": "Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.",
        "sp-contributions-newbies": "Rādīt jauno lietotāju devumu",
        "sp-contributions-newbies-sub": "Jaunie lietotāji",
        "sp-contributions-blocklog": "Bloķēšanas reģistrs",
-       "sp-contributions-deleted": "Izdzēstais lietotāja devums",
+       "sp-contributions-deleted": "dzēstais dalībnieka devums",
        "sp-contributions-uploads": "augšupielādes",
        "sp-contributions-logs": "reģistri",
        "sp-contributions-talk": "diskusija",
        "tooltip-pt-login": "Aicinām tevi ieiet {{grammar:lokatīvs|{{SITENAME}}}}, tomēr tas nav obligāti.",
        "tooltip-pt-logout": "Iziet",
        "tooltip-ca-talk": "Diskusija par šī raksta lapu",
-       "tooltip-ca-edit": "Labot šo lapu. Lūdzam izmantot pirmskatu pirms lapas saglabāšanas.",
+       "tooltip-ca-edit": "Labot šo lapu",
        "tooltip-ca-addsection": "Sākt jaunu sadaļu",
        "tooltip-ca-viewsource": "Šī lapa ir aizsargāta. Tu vari apskatīt tās izejas kodu.",
        "tooltip-ca-history": "Šīs lapas iepriekšējās versijas.",
        "hours": "{{PLURAL:$1|$1 stundas|$1 stunda|$1 stundas}}",
        "days": "{{PLURAL:$1|$1 dienas|$1 diena|$1 dienas}}",
        "ago": "pirms $1",
+       "monday-at": "Pirmdiena $1",
        "bad_image_list": "Formāts:\n\nTiek ņemti vērā tikai ieraksti rindiņā kas sākas ar *\nPirmajai saitei rindiņā ir jābūt uz attiecīgo failu\nJebkuras sekojošas saites tiks uzskatītas par izņēmumiem t.i. lapām kurās fails drīkt tikt izmantots",
        "metadata": "Metadati",
        "metadata-help": "Šis fails satur papildu informāciju, kuru visticamk ir pievienojis digitālais fotoaparāts vai skeneris, kas šo failu izveidoja. Ja šis fails pēc tam ir ticis modificēts, šie dati var neatbilst izmaiņām (var būt novecojuši).",
        "version-libraries": "Instalētās bibliotēkas",
        "version-libraries-library": "Bibliotēka",
        "version-libraries-version": "Versija",
+       "version-libraries-license": "Licence",
+       "version-libraries-description": "Apraksts",
+       "version-libraries-authors": "Autori",
        "redirect-value": "Vērtība:",
        "redirect-user": "Lietotāja ID",
+       "redirect-page": "Lapas ID",
        "redirect-file": "Faila nosaukums",
        "redirect-not-exists": "Vērtība nav atrasta",
        "fileduplicatesearch": "Meklēt failu kopijas",
        "tags-tag": "Iezīmes nosaukums",
        "tags-display-header": "Izmainīto sarakstu izskats",
        "tags-description-header": "Nozīmes pilns apraksts",
+       "tags-source-header": "Avots",
        "tags-active-header": "Aktīvs?",
        "tags-hitcount-header": "Iezīmētās izmaiņas",
        "tags-actions-header": "Darbības",
        "tags-delete-title": "Dzēst iezīmi",
        "tags-delete-reason": "Iemesls:",
        "tags-activate-reason": "Iemesls:",
+       "tags-activate-submit": "Aktivizēt",
        "tags-deactivate-reason": "Iemesls:",
        "tags-edit-title": "Labot iezīmes",
        "tags-edit-manage-link": "Pārvaldīt iezīmes",
        "htmlform-yes": "Jā",
        "htmlform-chosen-placeholder": "Izvēlieties iespēju",
        "htmlform-cloner-create": "Pievienot vairāk",
+       "htmlform-cloner-delete": "Noņemt",
        "sqlite-has-fts": "$1 ar pilnteksta meklēšanas atbalstu",
        "sqlite-no-fts": "$1 bez pilnteksta meklēšanas atbalsta",
        "logentry-delete-delete": "$1 {{GENDER:$2|izdzēsa}} lapu $3",
        "rightsnone": "(nav)",
        "revdelete-summary": "izmaiņu kopsavilkums",
        "feedback-adding": "Atsauksmes tiek pievienotas lapai...",
+       "feedback-back": "Atpakaļ",
        "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
        "feedback-cancel": "Atcelt",
        "feedback-close": "Gatavs",
+       "feedback-dialog-title": "Iesniegt atsauksmes",
+       "feedback-error-title": "Kļūda",
        "feedback-error1": "Kļūda: API neatpazīts rezultāts",
        "feedback-error2": "Kļūda: Labojums neizdevās",
        "feedback-error3": "Kļūda: Nav atbildes no API",
        "feedback-subject": "Temats:",
        "feedback-submit": "Iesniegt",
        "feedback-thanks": "Paldies! Jūsu atsauksmes ir ievietotas lapā \"[$2  $1]\".",
+       "feedback-thanks-title": "Paldies!",
        "searchsuggest-search": "Meklēt",
        "searchsuggest-containing": "Meklējamā frāze:",
        "api-error-badaccess-groups": "Jums nav atļauts augšupielādēt failus šajā wiki.",
        "expand_templates_output": "Rezultāts",
        "expand_templates_ok": "Labi",
        "expand_templates_preview": "Pirmskats",
+       "pagelang-name": "Lapa",
+       "pagelang-language": "Valoda",
+       "mediastatistics-header-audio": "Audio",
        "special-characters-group-latin": "Latīņu",
        "special-characters-group-latinextended": "Latīņu (papildus)",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-bangla": "Bengāļu",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singāļu",
-       "special-characters-group-gujarati": "Gudžarati"
+       "special-characters-group-gujarati": "Gudžarati",
+       "mw-widgets-dateinput-no-date": "Nav izvēlēts datums"
 }
index 46c4e7f..9f85bf7 100644 (file)
        "tog-hidepatrolled": "隱近巡",
        "tog-newpageshidepatrolled": "隱新巡",
        "tog-extendwatchlist": "展列見變",
-       "tog-usenewrc": "出近易",
+       "tog-usenewrc": "出近易",
        "tog-numberheadings": "生章數",
        "tog-showtoolbar": "多寶列見",
-       "tog-editondblclick": "雙擊以纂",
-       "tog-editsectiononrightclick": "纂段右擊標",
+       "tog-editondblclick": "雙擊以纂",
+       "tog-editsectiononrightclick": "右擊標以纂段",
        "tog-watchcreations": "哨己撰",
        "tog-watchdefault": "哨己纂",
-       "tog-watchmoves": "派哨予吾遷之頁",
-       "tog-watchdeletion": "派哨至吾除之頁",
+       "tog-watchmoves": "派哨於頁吾遷者",
+       "tog-watchdeletion": "派哨於頁吾除者",
        "tog-minordefault": "慣為校",
        "tog-previewontop": "頂草覽",
        "tog-previewonfirst": "覽首修",
        "viewcount": "此頁$1閱矣",
        "protectedpage": "此頁錮矣",
        "jumpto": "往:",
-       "jumptonavigation": "å\9a®",
+       "jumptonavigation": "å°\8e",
        "jumptosearch": "尋",
-       "view-pool-error": "歉也,伺服器超負矣。\n多簿查頁。\n欲試候之。\n\n$1",
+       "view-pool-error": "甚歉!伺服器超負矣。\n尋頁之人也眾矣。\n若欲再試請稍候。\n\n$1",
        "pool-timeout": "待鎖超時",
        "pool-queuefull": "池隊滿之",
-       "pool-errorunknown": "未明之錯",
+       "pool-errorunknown": "未知之誤",
        "aboutsite": "述{{SITENAME}}",
        "aboutpage": "Project:述",
        "copyright": "文奉$1行。",
        "nstab-help": "助",
        "nstab-category": "類",
        "nosuchaction": "無可為",
-       "nosuchactiontext": "無此址",
+       "nosuchactiontext": "此址也無",
        "nosuchspecialpage": "無此特查",
        "nospecialpagetext": "<strong>無此特查。</strong>\n\n見[[Special:SpecialPages|{{int:specialpages}}]]。",
        "error": "有誤",
-       "databaseerror": "庫藏誤然",
+       "databaseerror": "庫藏也誤",
        "databaseerror-query": "尋:$1",
        "databaseerror-error": "錯:$1",
-       "laggedslavemode": "警示,此頁不新",
+       "laggedslavemode": "警告:此頁不新。",
        "readonly": "鎖庫藏",
        "enterlockreason": "何以鎖之?何日啟之?",
        "readonlytext": "鎖者曰:「$1」,庫藏鎖矣,撰纂謝焉。",
        "filenotfound": "\"$1\"未見。",
        "unexpected": "異數,\"$1\"=\"$2\"。",
        "formerror": "有誤:表不可呈",
-       "badarticleerror": "此頁為之",
+       "badarticleerror": "此頁不可為之",
        "cannotdelete": "頁或檔\"$1\"刪矣,不復為之。",
-       "cannotdelete-title": "å\88ªã\80\8c$1ã\80\8dä¸\8dè\83½ä¹\9f。",
+       "cannotdelete-title": "å\88ªã\80\8c$1ã\80\8dä¹\9fä¸\8dè\83½。",
        "delete-hook-aborted": "鈎纂消矣。\n無解也。",
        "badtitle": "無此題",
        "badtitletext": "或別、或缺、或違、或他山謬鏈,此題不存也。",
        "viewsource-title": "查$1之案",
        "actionthrottled": "無為",
        "actionthrottledtext": "基反垃圾之量,於短時中限欲,爾之上限已過。數分後再試之。",
-       "protectedpagetext": "該頁被錮無纂也。",
+       "protectedpagetext": "此頁見錮以避纂也。",
        "viewsourcetext": "爾可視及複之本頁之原始碼。",
        "protectedinterface": "此頁司版,錮之以遠濫。",
        "editinginterface": "'''警示:'''此頁司版,一髮牽身,惠慎之。如譯之,可慮[//translatewiki.net/wiki/Main_Page?setlang=zh-hant translatewiki.net]也,為MediaWiki軟件本地化之計劃也。",
        "cascadeprotected": "此頁\"迭緘\"矣。$1頁牽連如下:\n$2",
        "namespaceprotected": "子權未逮,莫能纂'''$1'''。",
-       "ns-specialprotected": "奇頁禁纂。",
-       "titleprotected": "緘焉自[[User:$1|$1]]防建也。因''$2''也。",
+       "ns-specialprotected": "奇頁禁纂。",
+       "titleprotected": "緘焉自[[User:$1|$1]]防建。以''$2''之故也。",
        "invalidtitle-knownnamespace": "無效卷題,含名域\"$2\"與文本\"$3\"",
        "exception-nologin": "尚未登簿",
        "virus-badscanner": "壞設:不明之病掃:''$1''",
        "virus-unknownscanner": "不明之反毒:",
        "logouttext": "'''子去簿矣'''\n\n子可匿名還覽{{SITENAME}},或<span class='plainlinks'>[$1 復登]</span>同簿、異簿。\n未清謄本,覽器文舊,且慎之。",
        "welcomeuser": "$1居,惠迎!",
-       "welcomecreation-msg": "子簿建矣。\n\n請更簿註乎[[Special:Preferences|此]]。",
+       "welcomecreation-msg": "汝簿建矣。\n\n請更汝「{{SITENAME}}」[[Special:Preferences|焉]]。",
        "yourname": "名",
        "userlogin-yourname": "簿名",
-       "userlogin-yourname-ph": "簿名",
-       "createacct-another-username-ph": "簿名",
+       "userlogin-yourname-ph": "簿名",
+       "createacct-another-username-ph": "簿名",
        "yourpassword": "符節",
        "userlogin-yourpassword": "符節",
-       "userlogin-yourpassword-ph": "輸子符節",
-       "createacct-yourpassword-ph": "一符節",
+       "userlogin-yourpassword-ph": "告汝符節",
+       "createacct-yourpassword-ph": "一符節",
        "yourpasswordagain": "復核節",
        "createacct-yourpasswordagain": "訂子符節",
-       "createacct-yourpasswordagain-ph": "復符節",
+       "createacct-yourpasswordagain-ph": "復符節",
        "remembermypassword": "吾之簿通越(達至$1日)",
-       "userlogin-remembermypassword": "記吾",
+       "userlogin-remembermypassword": "保我簿登",
        "userlogin-signwithsecure": "以安全伺服登簿",
-       "yourdomainname": "之網域",
+       "yourdomainname": "之網域",
        "password-change-forbidden": "符節不能改乎此維基也。",
-       "externaldberror": "認庫之錯或禁更爾之外簿。",
+       "externaldberror": "認庫之錯,或禁更汝之外簿。",
        "login": "登簿",
        "nav-login-createaccount": "登簿、增簿",
        "userlogin": "登簿、增簿",
        "logout": "去簿",
        "userlogout": "去簿",
        "notloggedin": "尚未登簿",
-       "userlogin-noaccount": "無簿乎?",
+       "userlogin-noaccount": "無簿乎?",
        "userlogin-joinproject": "入{{SITENAME}}",
-       "nologin": "無簿乎?往$1。",
+       "nologin": "尚無簿乎?惠往$1。",
        "nologinlink": "增簿",
        "createaccount": "增簿",
-       "gotaccount": "有簿矣哉?往$1。",
+       "gotaccount": "已有簿矣?惠往$1。",
        "gotaccountlink": "登簿",
-       "userlogin-resetlink": "君忘登簿所需爾?",
+       "userlogin-resetlink": "汝忘登簿所需?",
        "userlogin-resetpassword-link": "輸子符節",
-       "userlogin-helplink2": "助登簿",
+       "userlogin-helplink2": "助登簿",
        "createacct-emailrequired": "電郵",
-       "createacct-emailoptional": "電郵 (可選)",
+       "createacct-emailoptional": "電郵(可選)",
        "createaccountmail": "同郵",
-       "createacct-realname": "實名(選)",
+       "createacct-realname": "實名(選)",
        "createaccountreason": "因:",
        "createacct-reason": "因:",
-       "createacct-reason-ph": "何為子另立一簿乎?",
+       "createacct-reason-ph": "汝另立一簿者何哉?",
        "createacct-captcha": "安檢",
-       "createacct-imgcaptcha-ph": "輸上文字",
+       "createacct-imgcaptcha-ph": "輸上文字",
        "createacct-submit": "增簿",
-       "createacct-another-submit": "å\86\8d立一簿",
+       "createacct-another-submit": "復立一簿",
        "createacct-benefit-heading": "吾等立{{SITENAME}}者,或黔首,或專戶。",
        "createacct-benefit-body1": "纂",
        "createacct-benefit-body2": "頁",
        "createacct-benefit-body3": "是月纂者",
        "badretype": "符節不合也。",
-       "userexists": "簿名矣,惠更之。",
-       "loginerror": "登簿誤然",
+       "userexists": "簿名見用矣,惠更之。",
+       "loginerror": "登簿生誤",
        "createacct-error": "建簿未成",
        "createaccounterror": "無增簿:$1",
-       "nocookiesnew": "{{SITENAME}}簿增而未登,惠准cookies後再登之。",
-       "nocookieslogin": "登簿{{SITENAME}}須cookies,惠准之後登。",
-       "nocookiesfornew": "簿未建,眾乃未定源之。\n爾乃開之,重載再乃一試。",
+       "nocookiesnew": "{{SITENAME}}簿增而未登,惠准存 cookies ,方可登之。",
+       "nocookieslogin": "欲登簿{{SITENAME}},需允 cookies 之存,惠准後方可登。",
+       "nocookiesfornew": "簿未建,眾乃未定源之。\n汝其啟之,重載,繼而予一試。",
        "noname": "缺簿名,或不格也。",
        "loginsuccesstitle": "登簿成矣",
        "loginsuccess": "'''$1'''登{{SITENAME}}矣",
        "nosuchuser": "查無此人。惠請更名,查大小寫或立此簿。",
        "nosuchusershort": "查無\"$1\",惠核之。",
-       "nouserspecified": "簿名須也",
-       "login-userblocked": "此簿已被封。登無簿也。",
+       "nouserspecified": "簿名必須",
+       "login-userblocked": "此簿見錮矣。是之登未見許可。",
        "wrongpassword": "符節不合,惠核之。",
        "wrongpasswordempty": "缺符節,惠補之。",
        "passwordtooshort": "符節莫逾$1字。",
-       "password-name-match": "符節與簿名異也。",
-       "password-login-forbidden": "此簿與符節之用乃禁之。",
+       "password-name-match": "符ç¯\80è\88\87ç°¿å\90\8dç\9b¸ç\95°ä¹\9fã\80\82",
+       "password-login-forbidden": "此簿共符節之用見禁矣。",
        "mailmypassword": "遣吾符節",
        "passwordremindertitle": "新臨符節自{{SITENAME}}",
-       "passwordremindertext": "$1æ±\82é\81£{{SITENAME}}ï¼\88$4ï¼\89ï¼\9a\"$2\"ä¹\8bè\87¨ç¬¦ç¯\80ç\82º\"$3\"ã\80\82æ\97¥å\88°æ\9c\89$5ã\80\82\n\nå­\90è\8b¥ç½\94é \88æ\88\96ç\9c\81æ\9b´ä¹\8bï¼\8cå¦\82è\88\8aå\8d³可。",
+       "passwordremindertext": "$1æ±\82é\81£{{SITENAME}}ï¼\88$4ï¼\89ï¼\9a\"$2\"ä¹\8bè\87¨ç¬¦ç¯\80ç\82º\"$3\"ã\80\82æ\97¥å\88°æ\9c\89$5ã\80\82\n\nå­\90è\8b¥ç½\94é \88æ\88\96ç\9c\81æ\9b´ä¹\8bï¼\8cå¦\82è\88\8aå\89\87可。",
        "noemail": "\"$1\"無存郵也。",
-       "noemailcreate": "爾需乙郵也",
+       "noemailcreate": "汝需乙郵",
        "passwordsent": "新節已遣$1\",惠鑒復登之。",
-       "blocked-mailpassword": "爾之IP已錮,密復無用之,以之濫也。",
+       "blocked-mailpassword": "汝 IP 已錮,密復無用之,以之濫也。",
        "eauthentsent": "核文遣矣。惠循核之,簿方活也。",
-       "throttled-mailpassword": "密記已寄之於$1時前。\n防濫,單一密記短至$1時寄之。",
-       "mailerror": "信失遣如下:$1",
+       "throttled-mailpassword": "符節見寄於$1時前矣。\n防濫用故,單一密記短至$1時寄之。",
+       "mailerror": "信失遣。斯文如下:$1",
        "acct_creation_throttle_hit": "一日之內,於一址但許一人增簿。",
        "emailauthenticated": "$2 $3郵驛證矣",
        "emailnotauthenticated": "郵驛未證,下不遺書。",
        "noemailprefs": "郵驛設而用之。",
        "emailconfirmlink": "惠考郵驛",
        "invalidemailaddress": "驛址不格,惠正略之。",
-       "cannotchangeemail": "é\9b»é\83µå\9c°å\9d\80ä¸\8då\8f¯æ\94¹äº\8e此wiki",
+       "cannotchangeemail": "é\83µå\9d\80ä¸\8då\8f¯æ\9b´æ\96¼此wiki",
        "emaildisabled": "是站不可遣函也。",
        "accountcreated": "簿增矣",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|書]])簿增矣。",
        "createaccount-title": "於{{SITENAME}}增簿",
-       "createaccount-text": "有人於{{SITENAME}}用爾之電郵增名為 \"$2\" 之簿 ($4),符節為 \"$3\" 。汝應登,再改符節也。\n\n如簿誤增,爾可略之。",
-       "login-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
+       "createaccount-text": "有人以汝電郵於{{SITENAME}}增簿。簿名為 \"$2\" ($4)。符節為 \"$3\" 。汝應登而更符節。\n\n如簿誤增,汝可略之。",
+       "login-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
        "login-abort-generic": "登簿未成——棄",
        "loginlanguagelabel": "語:$1",
        "suspicious-userlogout": "爾欲無離也,可由壞瀏覽器或快枝代理呈送之。",
        "newpassword": "新符節:",
        "retypenew": "重察新符節:",
        "resetpass_submit": "設符再登",
-       "changepassword-success": "之符節已改!",
+       "changepassword-success": "之符節已改!",
        "changepassword-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
-       "resetpass_forbidden": "ç\84¡æ\94¹ç¬¦ç¯\80",
-       "resetpass-no-info": "爾須登簿後方進此頁。",
+       "resetpass_forbidden": "符ç¯\80ä¹\8bæ\9b´ä¹\9fä¸\8då\8f¯ã\80\82",
+       "resetpass-no-info": "欲入此頁,爾須登簿。",
        "resetpass-submit-loggedin": "改符節",
        "resetpass-submit-cancel": "消",
        "resetpass-wrong-oldpass": "無效之臨符或現符。\n爾或改符,或求新臨符。",
-       "resetpass-temp-password": "臨符節:",
+       "resetpass-temp-password": "臨符節:",
        "resetpass-abort-generic": "符節不可更",
        "passwordreset": "重設符節",
        "passwordreset-text-one": "慾更符節,填此佇列",
-       "passwordreset-legend": "重設符節",
        "passwordreset-username": "簿名:",
        "passwordreset-domain": "域:",
        "passwordreset-email": "電郵址",
        "changeemail": "更郵址",
        "changeemail-oldemail": "當前郵驛:",
-       "changeemail-newemail": "新郵驛:",
+       "changeemail-newemail": "æ·»æ\96°é\83µé©\9bï¼\9a",
        "changeemail-none": "(無)",
        "changeemail-password": "汝 {{SITENAME}} 之符節",
-       "changeemail-throttled": "爾嘗登簿甚矣。\n請候 $1 再試之。",
+       "changeemail-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
        "bold_sample": "粗體",
        "bold_tip": "粗體",
        "italic_sample": "斜體",
        "link_sample": "鏈",
        "link_tip": "鏈內",
        "extlink_sample": "http://www.example.com 鍵 題",
-       "extlink_tip": "冠http://以鏈外",
+       "extlink_tip": "冠 http:// 以外鏈",
        "headline_sample": "題",
        "headline_tip": "二題",
        "nowiki_sample": "此不排版",
        "watchthis": "派哨",
        "savearticle": "存儲",
        "preview": "草覽",
-       "showpreview": "覽",
+       "showpreview": "覽",
        "showdiff": "示異",
        "anoneditwarning": "'''警示:'''子未登簿,IP將誌。",
        "anonpreviewwarning": "''子未登簿,IP將誌。''",
        "missingcommentheader": "'''醒示:'''子未概標之,復「{{int:savearticle}}」則文倍焉。",
        "summary-preview": "覽概:",
        "subject-preview": "覽題:",
-       "blockedtitle": "子見禁",
+       "blockedtitle": "汝見禁矣",
        "blockedtext": "'''子名、IP見禁。'''禁者$1也,因''$2''故。\n\n* 始之時為:$8\n* 終之時為:$6\n* 見禁之人:$7\n\n存惑可詢$1,或[[{{MediaWiki:Grouppage-sysop}}|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。另,子IP為$3,其禁號為#$5。詢時切附之。",
        "autoblockedtext": "爾之IP或簿自禁,因簿先用,禁者$1也。因故::\\'\\'$2\\'\\'\n\n* 始之時為:$8\n* 終之時為:$6\n* 見禁之人:$7\n\n存惑可詢$1,或[[{{MediaWiki:Grouppage-sysop}}|有秩]],[[Special:Preferences|簿註]]無驛則信不遣。另,子用IP $3,禁號為#$5。詢時切附之。",
        "blockednoreason": "無由",
        "nlinks": "$1鏈",
        "nmembers": "$1戶",
        "nrevisions": "$1審",
-       "nviews": "$1閱",
        "nimagelinks": "用以頁有$1",
        "ntransclusions": "用以頁有$1",
        "lonelypages": "孤寡",
        "linksearch-pat": "尋址:",
        "linksearch-ns": "名集:",
        "linksearch-ok": "尋",
-       "linksearch-text": "用似\"*.wikipedia.org\"之萬字。<br />\n援之議:<code>$1</code>",
+       "linksearch-text": "用似\"*.wikipedia.org\"之萬字。<br />\n援之議:$1",
        "linksearch-line": "$1連$2",
        "linksearch-error": "萬字僅用於機之始也。",
        "listusersfrom": "始簿:",
        "mailnologin": "無驛",
        "mailnologintext": "[[Special:UserLogin|登簿]]置郵,方可捎書。",
        "emailuser": "捎君",
-       "emailpage": "捎書",
        "emailpagetext": "表下捎焉,以郵制君。\n署[[Special:Preferences|子簿郵]]以候往返。",
        "defemailsubject": "{{SITENAME}}來書",
        "usermaildisabled": "無他人之郵",
index 7ea0395..6802243 100644 (file)
        "passwordreset": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
        "passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
-       "passwordreset-legend": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-disabled": "कूटशब्द फेरसँ बनाएब ऐ विकीपर अक्षम कएल अछि।",
        "passwordreset-emaildisabled": "कूटशब्द फेरसँ बनाएब ऐ विकीपर अक्षम कएल अछि।",
        "passwordreset-username": "प्रयोक्तानाम",
        "resettokens": "टोकन रीसेट करी",
        "resettokens-text": "जे स्तोक अहाँके खाता सँ सम्बद्ध किछु विशिष्ट व्यक्तिगत जानकारी प्रदान करएत अछि, अहाँ वोकरा एतए सँ रिसेट कऽ सकएत छी।\n\nयदि अहाँ एकरा गलती सँ केकरो देखा देनए छी वा अहाँ के खाता ह्याक भ गेल अछि तहन अहाँके एकरा रिसेट कऽ देना चाही।",
        "resettokens-no-tokens": "रीसेट करवाक लेल कोनो टोकन नै अछि।",
-       "resettokens-legend": "टोकन रीसेट करी",
        "resettokens-tokens": "टोकन:",
        "resettokens-token-label": "$1 (वर्तमान मूल्य: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|अहाँके साकांक्षसूची के पृष्ठसभ में परिवर्तन सभ]] के वेब फिट (Atom/RSS) लेल स्तोक",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्य सभ}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}}",
        "nrevisions": "$1{{PLURAL:$1|संशोधन|संशोधन सभ}}",
-       "nviews": "$1 {{PLURAL:$1|दृश्य|दृश्य सभ}}",
        "nimagelinks": "$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}",
        "ntransclusions": "$1पर प्रयुक्त {{PLURAL:$1|पन्ना|पन्ना सभ}}",
        "specialpage-empty": "ऐ पन्ना लेल कोनो परिणाम नै अछि।",
        "linksearch-pat": "खोज तरीका:",
        "linksearch-ns": "नामस्थान :",
        "linksearch-ok": "ताकू",
-       "linksearch-text": "ब्रह्मास्त्र जेना \"*.wikipedia.org\" प्रयोग कएल जा सकैए।\nसहायक संविद:<code>$1</code> (खोजमे ऐमेसँ कोनो नै जोड़ू)।",
+       "linksearch-text": "ब्रह्मास्त्र जेना \"*.wikipedia.org\" प्रयोग कएल जा सकैए।\nसहायक संविद:$1 (खोजमे ऐमेसँ कोनो नै जोड़ू)।",
        "linksearch-line": "$2 सँ $1 क लागि अछि।",
        "linksearch-error": "निमंत्रकनामक प्रारम्भमे ब्रह्मास्त्र आबि सकैए।",
        "listusersfrom": "प्रयोक्ता प्रदर्शन प्रारम्भ भेल:",
index 2e0ae65..c7740ce 100644 (file)
        "resetpass-wrong-oldpass": "Аф виде ёткопингонь эли тяниень сувама валсь.\nУлема тон полафтыть сувама валце ни эли кучеть вешфкс од ёткопингонь сувама вал кундаманкса.",
        "resetpass-temp-password": "Пингонь сувама валсь:",
        "passwordreset": "Полафтомс сувама валцень",
-       "passwordreset-legend": "Полафтомс сувама валцень",
        "passwordreset-disabled": "Сувама валсь аф полафтови тя викить эса.",
        "passwordreset-username": "Тиить лемоц",
        "passwordreset-domain": "Домен:",
        "nlinks": "$1 {{PLURAL:$1|сюлмафкс|сюлмафкст}}",
        "nmembers": "$1 {{PLURAL:$1|сувси|сувсихть}}",
        "nrevisions": "$1 {{PLURAL:$1|верзие|верзиет}}",
-       "nviews": "$1 {{PLURAL:$1|няфтема|няфтемат}}",
        "specialpage-empty": "Тя информациень коряс мезеге изь мув.",
        "lonelypages": "Уроз лопат",
        "lonelypagestext": "Ся лопатне афи сюлмафт афи сотфт иля лопатнень мархта {{SITENAME}}са.",
        "linksearch-pat": "Вешендема кепотькс:",
        "linksearch-ns": "Лемботмоц:",
        "linksearch-ok": "Вешендемс",
-       "linksearch-text": "Сембекондясти лепне \"*.wikipedia.org\" кондяма ули кода нолдамс тевс.<br />\nКирдеви протоколхне: <code>$1</code>",
+       "linksearch-text": "Сембекондясти лепне \"*.wikipedia.org\" кондяма ули кода нолдамс тевс.<br />\nКирдеви протоколхне: $1",
        "linksearch-line": "$1 сюлмаф $2ста",
        "linksearch-error": "Сембекондясти лепненди ули кода тихтедемс аньцек интернет сюлма лемть ушетксонза.",
        "listusersfrom": "Няфтемс тиихть ушедомс:",
index 1d8ee1f..37ca9f5 100644 (file)
        "no-null-revision": "Tsy nahaforona famerenana poaka aty ho an'ny pejy \"$1\"",
        "badtitle": "Tsy mety ny lohateny",
        "badtitletext": "Tsy mety io anaram-pejy nangatahinao io na tsy misy n'inon'inona na rohy dikan-teny vahiny misy diso tsipelina.",
+       "title-invalid-empty": "Ny lohatenin'ny pejy angatahana dia na tsy misy, na ahitana ny anaram-balan'anarana fotsiny.",
+       "title-invalid-utf8": "Ahitana fitohizana UTF-8 tsy azo ekena ny lohatenim-pejy angatahana.",
+       "title-invalid-interwiki": "Ahitana rohy interwiki tsy azo ampiasaina amin'ny lohateny ny pejy angatahana.",
+       "title-invalid-talk-namespace": "Mampatsiahy pejin-dresaka tsy misy ilay pejy angatahana.",
+       "title-invalid-characters": "Ahitana soratra tsy azo ekena ny lohatenim-pejy angatahana: \"$1\".",
        "perfcached": "Ao amin'ny voatakona ireo data manaraka ireo ary mety tsy voavao. $1{{PLURAL:}} ihany no isan'ireo zavatra voatahiry ao amin'ny voatakona",
        "perfcachedts": "Ao amin'ny voatakona (cache) ny data aseho, ary tamin'ny $1 izy no navaozina farany. $4{{PLURAL:}} no isan'ny valim-pikarohana ao amin'ilay voatakona.",
        "querypage-no-updates": "Amin'izao fotoana izao dia tsy havaozina ny votoatin'ity pejy ity. Noho izany dia tsy mitaratra ny tena zava-misy ny votoatiny ato.",
        "actionthrottled": "Tao voafetra",
        "actionthrottledtext": "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.\nAndramo indray afaka minitra vitsivitsy.",
        "protectedpagetext": "Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.",
-       "viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
-       "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
+       "viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity.",
+       "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny <strong>fanovanao</strong> tamin'ity pejy ity.",
        "protectedinterface": "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
        "editinginterface": "<strong> Fampitandremana: <strong> manova pejy ampiasaina amin'ny famoronan-tsoratry ny rindrankajy ianao. Hisy fiatraika amin'ny fisehon'ny interfasim-pikambana ho an'ny mpikambana hafan'ity wiki ity ny fiovana ho atao.",
        "translateinterface": "Mba hanampy na hanova dikanteny ho an'ny wiki rehetra, dia ampiasao  [//translatewiki.net/ translatewiki.net], na ny tetikasa fandikana Mediawiki.",
-       "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"en cascade\" :\n\n$2",
+       "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1|iray|$1}} mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"mirihana\":\n\n$2",
        "namespaceprotected": "Tsy manana alalàna manova ny toeran'anarana « '''$1''' » ianao.",
        "customcssprotected": "Tsy afaka manova ity pejy CSS ity ianao satria misy ny safidy manokan'ny mpikambana hafa.",
        "customjsprotected": "Tsy afaka manova ity pejy JavaScript ity inaao satria misy ny safidin'ny mpikambana hafa.",
        "wrongpassword": "Diso ny tenimiafina. Manandrama tenimiafina hafa azafady.",
        "wrongpasswordempty": "Tsy nampiditra tenimiafina ianao, azafady mba avereno indray.",
        "passwordtooshort": "{{PLURAL:}}Fohy loatra io tenimiafina io.\nFarafahakeliny tokony hisy litera $1 ny tenimiafina.",
+       "passwordtoolong": "Tsy azo atao ho lava noho ny soratra {{PLURAL:$1|iray|$1}} ny tenimiafina.",
        "password-name-match": "Tsy maintsy samihafa ny solonanaranao sy ny tenimiafinao tompoko.",
        "password-login-forbidden": "Norarana ny fampiasana io anaram-pikambana ary io tenimiafina io.",
        "mailmypassword": "Hamerina ny tenimiafina",
        "passwordreset": "Famafana ary famerenana ny tenimiafina",
        "passwordreset-text-one": "Fenoy ity fôrmiolera ity mba hamerenana ny tenimiafinao",
        "passwordreset-text-many": "{{PLURAL:$1|Fenoy ny saha mba hahazoanao tenimiafina vonjimaika.}}",
-       "passwordreset-legend": "Famafana ary famerenana ny tenimiafina",
        "passwordreset-disabled": "Tsy nalefa ny fanovana tenimiafina adino eto amin'ity wiki ity.",
        "passwordreset-emaildisabled": "Tsy avela ny fampiasana mailaka eto amin'ity wiki ity.",
        "passwordreset-username": "Anaram-pikambana :",
        "resettokens": "Hamerina ny token",
        "resettokens-text": "Azonao averina eto ny token izay hahafahana mitsidika ny fampahalalana tsy sarababem-bahoaka ao amin'ny kaontinao. Tokony ataonao izany raha voazara tsy fanahy iniana na raha nisy nangalatra ny kaontinao.",
        "resettokens-no-tokens": "Tsy misy token ho averina",
-       "resettokens-legend": "Famerenana ny token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (sanda ankehitriny: $2)",
        "resettokens-watchlist-token": "Token ho an'ny fahna web (Atom/RSS) ho an'ny  [[Special:Watchlist|fanovana ny pejy ao amin'ny lisitry ny pejy arahanao]]",
        "readonlywarning": "'''FAMPITANDREMANA: Nohidiana noho ny antony fikolokoloana aloha ny banky angona,\nkoa tsy afaka mitahiry ny fanovana nataonao aloha ianao izao. Angamba tokony hanao Couper coller aloha\nianao dia tehirizo anaty rakitra ny fanovanao mandra-paha.'''\n\nNy mpandrindra nanidy ny banky angona dia nanome ny antony : <br />$1",
        "protectedpagewarning": "'''FAMPITANDREMANA:  Voaaro ity pejy ity ka ny mpikambana manana ny fahazoan-dàlana sysop ihany no afaka manova azy.'''",
        "semiprotectedpagewarning": "'''Naoty''' : Voaaro ity pejy ity, ny mpikambana nanokatra kaonty tato ihany no afaka manova azy.",
-       "cascadeprotectedwarning": "'''Tandremo : ''' Voaaro ity pejy ity ary ny mpandrindra ihany no afaka manova azy. Natao ny fiarovana satria ao anatina pejy voaaro mampiasa ny « fiarovana an-driana (protection en cascade) » {{PLURAL:$1}}",
+       "cascadeprotectedwarning": "<strong>Tandremo :</strong> Voaaro ity pejy ity ary ny mpandrindra ihany no afaka manova azy. Natao ny fiarovana satria ao anatina pejy voaaro mampiasa ny « fiarovana an-driana (protection en cascade) » {{PLURAL:$1}}",
        "titleprotectedwarning": "'''TANDREMO''' : Ny mpikambana manana [[Special:ListGroupRights|alàlana manokana]] ihany no afaka manova ity pejy ity.",
        "templatesused": "endrika{{PLURAL:$1||}} miasa eto amin'ity pejy ity:",
        "templatesusedpreview": "endrika{{PLURAL:$1||}} ampiasaina anatin'ity topi-maso ity :",
        "history-feed-description": "Tantaran'ity pejy ity teto amin'ity wiki ity.",
        "history-feed-item-nocomment": "$1 tamin'ny $2",
        "history-feed-empty": "Tsy misy ny pejy notadiavina.\nMety efa voafafa na voafindra angamba izy.\nMitadiava amin'ny '''[[Special:Search|fiasàna fitadiavina]]''' mba hitady ny pejy misy fifandraisana.",
+       "history-edit-tags": "Hanova ny balizin'ny versiôna nofidiana",
        "rev-deleted-comment": "(ambangovangom-panovana nesorina)",
        "rev-deleted-user": "(solonanarana nesorina)",
        "rev-deleted-event": "(nesorina ny antsipirihan'ny laogy)",
        "rev-showdeleted": "aseho",
        "revisiondelete": "Hamafa na hamerina versiona",
        "revdelete-nooldid-title": "versiona tanjona tsy azo ekena.",
-       "revdelete-nooldid-text": "Tsy voalazanao ny versiona tanjona hanaovana ity tao ity, \ntsy misy ilay izy, na ny santiôna ankehitriny no andramana asitrika.",
+       "revdelete-nooldid-text": "Tsy nambara versiona tanjona hanaovana ity asa ity ianao, na tsy misy ilay versiona voafidy, na am-panitrihana ilay versiona ankehitriny ianao.",
        "revdelete-no-file": "Tsy misy ilay rakitra hofafàna.",
        "revdelete-show-file-confirm": "Tapa-kevitra hamafa ny ''revision''-n'i rakitra <nowiki>$1</nowiki> tamin'ny $2 tamin'ny $3 ve ianao ?",
        "revdelete-show-file-submit": "Eny",
        "showhideselectedversions": "Aseho/asitrika ireo ny versiona voasafidy",
        "editundo": "esory",
        "diff-empty": "(Tsy misy mahasamihafa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Versiona mielanelana tsy miseho iray|Versiona mielanelana tsy miseho $1}} nataon'ilay mpikambana)",
        "diff-multi-manyusers": "Tsy naseho ny antiôna $1{{PLURAL:}} nataon'ny mpikambana $2.",
        "difference-missing-revision": "Tsy hita ny versiona $2{{PLURAL:$2||}} ny fahasamihafanna ($1) an'ity pejy ity.\n\nVokatry ny fanarahana rohy fampitahana lany daty mankany amy pejy efa voafafa izan . Ho hita eo amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafàna] ny antsipirihany.",
        "searchresults": "Valim-pikarohana",
        "search-category": "(sokajy $1)",
        "search-file-match": "(miady amin'ny votoatin-drakitra)",
        "search-suggest": "Andramo : $1",
+       "search-rewritten": "Maneho vokam-pikarohana ho an'i $1. Hisolo ary hikaroka momba an'i $2.",
        "search-interwiki-caption": "zandri-tetikasa",
        "search-interwiki-default": "Valiny amin'ny $1 :",
        "search-interwiki-more": "(be kokoa)",
        "searchrelated": "voadinika",
        "searchall": "rehetra",
        "showingresults": "Omeo ny valiny{{PLURAL:$1||}} miisa hatramin'ny <b>$1</b> manomboka ny #<b>$2</b>.",
+       "showingresultsinrange": "Maneho hatramin'ny {{PLURAL:$1|valim-pikarohana <strong>1</strong> |valim-pikarohana <strong>$1</strong>}} amin'ny elanelana #<strong>$2</strong> hatramin'i #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Valim-pikarohana <strong>$1</strong> amin'ny <strong>$3</strong>| Valim-pikarohana <strong>$1 - $2</strong> amin'ny <strong>$3</strong>}}",
        "search-nonefound": "Tsy nahitana valiny ilay fanontaniana.",
        "powersearch-legend": "Fikarohana havanana",
        "powersearch-ns": "Hitady anatin'ny anaran-tsehatra :",
        "badsig": "Tsy mety io sonia io; hamarino ny kialo HTML.",
        "badsiglength": "Lava loatra ny sonianao. {{PLURAL:$1||}}\nTokony mba manana lohavy ambanimbany kokoa non'ny $1",
        "yourgender": "Tiana hofaritana ahoana ianao?",
-       "gender-unknown": "Tsy tia hanome ny antsipirihany aho",
+       "gender-unknown": "Rehefa milaza momba anao, hampiasa teny tsy mampilaza ny lahivavinao rehefa afaka atao.",
        "gender-male": "Manova pejy wiki izy (lehilahy)",
        "gender-female": "Manova pejy wiki izy (vehivavy)",
        "prefs-help-gender": "Ankifidy : ampiasaina ho an'ny fifandraisan'ny rindrankajy aminao. Ho sarababem-bahoaka ity fampahalalana ity.",
        "action-editmyprivateinfo": "Mijery ny fampahalalana sarababem-bahoakanao",
        "action-editcontentmodel": "manova ny modelim-botoatin'ny pejy",
        "action-managechangetags": "hamorona ary hamafa balizy ao amin'ny banky angona",
+       "action-applychangetags": "mampihatra balizy miaraka amin'ny fanovanao",
+       "action-changetags": "manampy ary manala balizy amin'ny versiona manokana ary iditry ny laogy",
        "nchanges": "{{PLURAL:$1|fanovana|fanovana}} $1",
        "enhancedrc-since-last-visit": "$1 ({{PLURAL:$1|hatry ny famangiana farany}})",
        "enhancedrc-history": "tantara",
        "newpageletter": "V",
        "boteditletter": "r",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|mpikambana|mpikambana}} manara-maso]",
-       "rc_categories": "Ferana amin'ireto sokajy ireto ihany (saraho amin'ny \"|\")",
-       "rc_categories_any": "Tsy misy fetrany",
+       "rc_categories": "Ferana amin'ireto sokajy ireto (saraho amin'ny \"|\")",
+       "rc_categories_any": "Anisan'ireo nofidiana",
        "rc-change-size-new": "$1{{PLURAL:}} oktety taorian'ny fanovana",
        "newsectionsummary": "/* $1 */ fizarana vaovao",
        "rc-enhanced-expand": "Hijery ny antsipirihany",
        "upload-too-many-redirects": "Be loatra ny fihodinan'ny URL.",
        "upload-http-error": "Nisy tsy fetezana HTTP nitranga : $1",
        "upload-copy-upload-invalid-domain": "Tsy misy eto amin'ity dômenina ity ny tahaky ny upload.",
+       "upload-dialog-title": "Hanafatra rakitra",
+       "upload-dialog-error": "Nisy hadisoana nitranga",
+       "upload-dialog-warning": "Nisy fampitandremana nitranga",
+       "upload-dialog-button-cancel": "Aoka",
+       "upload-dialog-button-done": "Vita",
+       "upload-dialog-button-save": "Tehirizina",
+       "upload-dialog-button-upload": "Mampiditra",
+       "upload-dialog-label-select-file": "Hifidy rakitra",
+       "upload-dialog-label-infoform-title": "Antsipirihany",
+       "upload-dialog-label-infoform-name": "Anarana",
+       "upload-dialog-label-infoform-description": "Famisavisana",
+       "upload-dialog-label-usage-title": "Fampiasana",
+       "upload-dialog-label-usage-filename": "Anaran-drakitra",
        "backend-fail-stream": "Tsy afaka mamaky ilay rakitra $1.",
        "backend-fail-backup": "Tsy afaka mitahiry ilay rakitra $1.",
        "backend-fail-notexists": "Tsy misy ilay rakitra $1.",
        "backend-fail-closetemp": "Tsy afaka manidy ilay rakitra miserana.",
        "backend-fail-read": "Tsy afaka mamaky ilay rakitra $1.",
        "backend-fail-create": "Tsy afaka manoratra anatin'ilay rakitra $1.",
+       "backend-fail-maxsize": "Tsy afaka nanoratra rakitra \"$1\" satria lehibe kokoa noho {{PLURAL:$2|iray oktety|$2 oktety}}.",
        "backend-fail-readonly": "Amin'izao fotoana dia famakiana ihany ny fitahirizana terminal an'i \"$1\". \"''$2''\" no antony nomena",
+       "backend-fail-synced": "Anaty toetra tsy mitombina ilay rakitra \"$1\" ao amin'ny fitahirizana anaty",
        "backend-fail-connect": "Tsy afaka mifandray amin'ny terminal fitahirizana \"$1\".",
        "backend-fail-internal": "Hadisoana tsy fantatra tao anatin'ny terminal fitahirizana \"$1\".",
        "backend-fail-contenttype": "Tsy afaka maminavina ny karazam-botoatin'ny rakitra hotahirizina ao amin'i \"$1\".",
        "license": "Lisansy:",
        "license-header": "Navoaka tambanin'ny lisansy",
        "nolicense": "Tsy misy safidy",
+       "licenses-edit": "Hanova safidim-pahazoan-dalana",
        "license-nopreview": "(Tsy misy topi-maso)",
        "upload_source_url": " (URL misy ary azo vangian'ny daholobe)",
        "upload_source_file": " (rakitra eo amin'ny milinao)",
        "listfiles-delete": "fafao",
        "listfiles-summary": "Ahitana ny rakitra rehetra nampidirina ity pejy manokana ity.",
        "listfiles_search_for": "Hitady anarana media :",
+       "listfiles-userdoesnotexist": "Tsy nisoratra anarana i \"$1\".",
        "imgfile": "rakitra",
        "listfiles": "Lisitran'ny rakitra",
        "listfiles_thumb": "Sary nakelezina",
        "download": "Hampidina",
        "unwatchedpages": "Pejy voaaisotra ny fanaraha-maso azy",
        "listredirects": "Lisitra ny fihodinana",
+       "listduplicatedfiles": "Lisitry ny rakitra misy in-droa",
        "unusedtemplates": "Endrika tsy miasa",
        "unusedtemplatestext": "Ity pejy ity dia manalisitra ny pejy rehetra ao amin'ny anaran-tsehatra « {{ns:template}} » ao tsy anaty pejy hafa.\nAza manadino manamarina raha tsy misy rohy makany amin'ny endrika hafa alohan'ny mamafa azy.",
        "unusedtemplateswlh": "rohy hafa",
        "randomincategory-invalidcategory": "Tsy anaran-tsokajy azo raisina \"$1\"",
        "randomincategory-nopages": "Tsy misy pejy ao amin'i [[:Category:$1]]",
        "randomincategory-category": "Sokajy:",
+       "randomincategory-legend": "Pejy kisendra anaty sokajy",
+       "randomincategory-submit": "Lasa",
        "randomredirect": "Pejy fihodinana kisendra",
        "randomredirect-nopages": "Tsy misy pejy fihodinana eo amin'ny anaran-tsehatra «$1»",
        "statistics": "Statistika",
        "nlinks": "{{PLURAL:$1|rohy|rohy}} $1",
        "nmembers": "{{PLURAL:$1|mpikambana|mpikambana}} $1",
        "nrevisions": "{{PLURAL:$1|fanovana|fanovana}} $1",
-       "nviews": "{{PLURAL:}}Tsidika $1",
        "nimagelinks": "Ampiasain'ny pejy miisa{{PLURAL:}} $1",
        "ntransclusions": "Ampiasaina eo amin'ny pejy miisa $1 {{PLURAL:}}",
        "specialpage-empty": "Tsy misy valiny ho aseho.",
        "linksearch-pat": "Volana tadiavina :",
        "linksearch-ns": "Anaran-tsehatra :",
        "linksearch-ok": "Fikarohana",
-       "linksearch-text": "Azo ampiasaina ny soratra joker toa i « *.wikipedia.org ».\nMila top-level domain ambonimbony kokoa izy ireo, sahala « *.org » <br />\nProtokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
+       "linksearch-text": "Azo ampiasaina ny soratra joker toa i « *.wikipedia.org ».\nMila top-level domain ambonimbony kokoa izy ireo, sahala « *.org » <br />\nProtokoly zaka $1 aza ampiana ao amin'ny karokao izy ireo.",
        "linksearch-line": "$1 dia voarohy amin'ny $2",
        "linksearch-error": "Ny soratra joker dia ampiasaina anatin'ny fanombohan'ny anaran-tsehatry ny milina hôte ihany.",
        "listusersfrom": "Haneho ny mpikambana manomboka amin'ny :",
        "emailuser": "Andefaso imailaka io mpikambana io",
        "emailuser-title-target": "Handefa mailaka any amin'ity mpikambana ity{{GENDER:$1}}",
        "emailuser-title-notarget": "Handefa imailaka an'ilay mpikambana",
-       "emailpage": "Andefaso imailaka io mpikambana io",
        "emailpagetext": "Azonao ampiasaina io fôrmiolera eo ambany io mba handefa mailaka mankany amin'ny mpikambana $1. Ho ao amin'ny saha \"Mpandefa\" (Expéditeur) ny adiresy mailakao ka ho afaka hamaly anao avy hatrany ilay mpandray ny hafatra.",
        "defemailsubject": "{{SITENAME}} Mailaky ny mpikambana \"$1\"",
        "usermaildisabled": "Tsy azo mifandefa imailaka ny mpikambana",
        "rollback-success": "Fanesorana ny fiovana nataon'i $1 ;\nfiverenana amin'ny fiovana farany nataon'i $2.",
        "sessionfailure-title": "Tsi-fetezaka mikasika ny kaonty idirana",
        "sessionfailure": "Ohatry ny misy olana ny fidirana amin'ny kaontinao ; \nnofoanana ilay tao mba tsy hisy fanodinana fotaom-pidirana (session).\nTsindrio \"Mialoha\" ary vaozy ilay pejy niavianao ary andramo fanindroany.",
+       "changecontentmodel-title-label": "Lohatenim-pejy",
+       "changecontentmodel-model-label": "Môdelim-botoatiny",
+       "changecontentmodel-reason-label": "Antony :",
+       "changecontentmodel-success-title": "Niova ny môdelim-botoatiny",
+       "logentry-contentmodel-change-revertlink": "mamerina",
+       "logentry-contentmodel-change-revert": "mamerina",
        "protectlogpage": "Laogim-piarovana",
        "protectlogtext": "Eto ambany ny lisitry ny fiarovana/fanalana hidy ny pejy. \nHo ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy voaaro]] ho an'ny pejy fiarovana amin'izao fotoana izao.",
        "protectedarticle": "voaaro ny pejy \"[[$1]]\"",
        "prot_1movedto2": "[[$1]] voaova anarana ho [[$2]]",
        "protect-badnamespace-title": "Anaran-tsehatra tsy azo arovana",
        "protect-badnamespace-text": "Tsy afaka arovana ny pejy ao amin'io anaran-tsehatra io.",
+       "protect-norestrictiontypes-text": "Tsy afaka arovana i ty pejy ity satria tsy misy karazam-petra hita.",
        "protect-norestrictiontypes-title": "Pejy tsy azo arovana",
        "protect-legend": "Fanekena ny fiarovana pejy",
        "protectcomment": "Antony :",
        "undelete-show-file-submit": "Eny",
        "namespace": "Anaran-tsehatra :",
        "invert": "Ampifamadiho ny safidy",
+       "tooltip-invert": "Marino ity boaty ity mba hanakona ireo fiovam-pejy ao amin'ny valan'anarana voafidinao (ary ny valan'anarana miaraka aminy raha voamarina ihany koa)",
        "namespace_association": "Anaran-tsehatra nampiarahana",
        "tooltip-namespace_association": "Mariho ity boaty ity mba hampiditra ny pejin-dresaky ny anaran-tsehatra voafidy",
        "blanknamespace": "(fotony)",
        "allmessages-prefix": "Tantavanina araka ny tovona :",
        "allmessages-language": "Tenim-pirenena/fiteny :",
        "allmessages-filter-submit": "Alefa",
+       "allmessages-filter-translate": "Dikaina",
        "thumbnail-more": "Angedazina",
        "filemissing": "Tsy hita ny rakitra",
        "thumbnail_error": "Tsy fetezana eo am-panamboarana ilay saritapaka : $1",
        "tooltip-pt-logout": "Hidio",
        "tooltip-pt-createaccount": "Amporisihana mafy ianao hanokatra kaonty ary miditra; na dia izany aza, tsy voatery atao izany.",
        "tooltip-ca-talk": "resaka momba io takelaka io",
-       "tooltip-ca-edit": "Azonao atao no manova n'ity pejy ity.\nAmpesao ny topi-maso aloha no mihatiry.",
+       "tooltip-ca-edit": "Hanova ity pejy ity",
        "tooltip-ca-addsection": "hanomboka fizaràna vaovao",
        "tooltip-ca-viewsource": "Voaaro ilay pejy. Fa afaka itanao ny voatotiny.",
        "tooltip-ca-history": "Ny revision natao tamin'ity pejy ity",
        "imagelisttext": "{{PLURAL:}}Eto ambany ny lisitran'ny rakitra $1 milahatra araka ny $2.",
        "newimages-legend": "Anaran-drakitra",
        "newimages-label": "Anaran-drakitra (na singan'izy io) :",
+       "newimages-showbots": "Haneho ireo fanondranana nataon'ny rôbô",
        "noimages": "Tsy misy sary ato.",
        "ilsubmit": "Karohy",
        "bydate": "araka ny daty",
        "exif-stripoffsets": "Toerana isian'ny datan'ny sary",
        "exif-rowsperstrip": "Isan'ny andininy isaky ny bandy",
        "exif-stripbytecounts": "Haben'ny bandy amin'ny oktety",
+       "exif-jpeginterchangeformat": "Fipetraky ny SOI JPEG",
+       "exif-jpeginterchangeformatlength": "Oktetin'angona JPEG",
        "exif-whitepoint": "Krômatisiten'ny teboka fotsy",
        "exif-primarychromaticities": "Krômatisiten'ny reniloko",
        "exif-ycbcrcoefficients": "Fatra YCbCr",
+       "exif-referenceblackwhite": "Sanda tsiahy fotsy sy mainty",
        "exif-datetime": "Daty fanovana",
        "exif-imagedescription": "Visavisan'ilay sary",
        "exif-make": "Mpanamboatra ilay fakan-tsary",
        "exif-exifversion": "Versiona EXIF",
        "exif-flashpixversion": "Versiona FlashPix",
        "exif-colorspace": "Valan-doko",
+       "exif-componentsconfiguration": "Dikan'ny mpanorina tsirairay",
+       "exif-compressedbitsperpixel": "Fomba famintinan-tsary",
        "exif-pixelydimension": "Haavon-tsary",
        "exif-pixelxdimension": "Halala-tsary",
        "exif-usercomment": "Diniky ny mpikambana",
        "exif-datetimeoriginal": "Daty fangalana niaviana",
        "exif-datetimedigitized": "Daty nanaovana numerisation",
        "exif-subsectime": "Daty nanovana",
+       "exif-subsectimeoriginal": "Daty nangalana voalohany",
+       "exif-subsectimedigitized": "Daty nahadijitaly",
        "exif-exposuretime": "Fitaona famakiana",
        "exif-exposuretime-format": "$1 s ($2 s)",
        "exif-fnumber": "Isa F",
        "exif-exposureprogram": "Fomba famakiana",
+       "exif-spectralsensitivity": "Fahatsapana ara-balandoko",
        "exif-isospeedratings": "ISO",
        "exif-shutterspeedvalue": "hafaingam-panapenana ny APEX",
        "exif-aperturevalue": "Fisanasana APEX",
        "exif-meteringmode": "Fomba fandrefesana",
        "exif-lightsource": "Loharanon-kazavana",
        "exif-flash": "Tselatra",
+       "exif-focallength": "Halavam-pifantohana",
        "exif-subjectarea": "Faritry ny alain-tsary",
        "exif-flashenergy": "Angôvon'akonkazavana",
+       "exif-focalplanexresolution": "Halava X an'ny fifantohana",
+       "exif-focalplaneyresolution": "Halava Y an'ny fifantohana",
+       "exif-focalplaneresolutionunit": "Mari-drefin'ny fifantohana",
        "exif-subjectlocation": "Toeram-pisian'ny alaina sary",
+       "exif-exposureindex": "Tondrom-piharihariana",
+       "exif-sensingmethod": "Fomba tsikariny",
        "exif-filesource": "Fangon-drakitra",
+       "exif-scenetype": "Karazan-tsehatra",
+       "exif-customrendered": "Fikarakaran-tsary natao manokana",
+       "exif-exposuremode": "Fomba fiharihariana",
+       "exif-whitebalance": "Lanjalanjam-potsy",
        "exif-digitalzoomratio": "Tahan'ny zoom arak'isa",
+       "exif-focallengthin35mmfilm": "Halavam-pifantohana anaty filma 35 mm",
+       "exif-scenecapturetype": "Karazam-pandraiketan-tsehatra",
+       "exif-gaincontrol": "Fifehezan-tsehatra",
+       "exif-contrast": "Fifanoheran-doko",
+       "exif-saturation": "Fahafenoan-doko",
+       "exif-sharpness": "Haranitana",
+       "exif-devicesettingdescription": "Famisavisana mikasika ny fikiram-pitaovana",
+       "exif-subjectdistancerange": "Halaviran'ny alain-tsary",
        "exif-imageuniqueid": "ID an'io sary io manokana",
+       "exif-gpsversionid": "Versiônan'ny balizy GPS",
        "exif-gpslatituderef": "Laharam-pehintany avaratra na atsimo",
        "exif-gpslatitude": "Laharam-pehintany",
        "exif-gpslongituderef": "Laharan-jarahasina andrefana na atsinanana",
        "exif-gpsaltitude": "Haambo",
        "exif-gpstimestamp": "Ora GPS (famantaranandro atômika)",
        "exif-gpssatellites": "Zanabolana mampiasaina ho an'ilay refy",
+       "exif-gpsstatus": "Toetry ny mpandray",
        "exif-gpsmeasuremode": "Fomba fandrefesana",
        "exif-gpsdop": "Hatsiko ny fandrefesana",
        "exif-gpsspeedref": "Mari-drefi-kafainganana",
        "exif-gpsspeed": "Hafaingam-pandray GPS",
+       "exif-gpstrackref": "Tsiahy ho an'ny fizotry ny hetsika",
+       "exif-gpstrack": "Fizotry ny hetsika",
+       "exif-gpsimgdirectionref": "Tsiahy ho an'ny fizotry ny hetsika",
        "exif-gpsimgdirection": "Fitodihan'ny sary",
+       "exif-gpsmapdatum": "Rafitra jeodezika nampaisaina",
+       "exif-gpsdestlatituderef": "Tsiahy ho an'ny laharam-pehintany tanjona",
        "exif-gpsdestlatitude": "Laharam-pehintany tanjona",
+       "exif-gpsdestlongituderef": "Tsiahy ho an'ny laharan-jarahasina tanjona",
        "exif-gpsdestlongitude": "Laharan-jarahasina tanjona",
+       "exif-gpsdestbearingref": "Tsiahy ho an'ny fitazomana-tanjona",
+       "exif-gpsdestbearing": "Fitazoman-tanjona",
+       "exif-gpsdestdistanceref": "Tsiahy ho an'ny halavirana amin'ny tanjona",
+       "exif-gpsdestdistance": "Halavirana amin'ny tanjona",
+       "exif-gpsprocessingmethod": "Anaran'ny fomba fanodinana GPS",
        "exif-gpsareainformation": "Anaram-paritra GPS",
        "exif-gpsdatestamp": "Daty GPS",
+       "exif-gpsdifferential": "Fanitsiana arak'elana GPS",
+       "exif-jpegfilecomment": "Resa-drakitra JPEG",
+       "exif-keywords": "Tenifototra",
        "exif-worldregioncreated": "Faritany nangalana ity ilay sary",
        "exif-countrycreated": "Firenena nangalana ilay sary",
        "exif-countrycodecreated": "Kaontim-pirenena nangalana ilay sary",
        "exif-lens": "Lojy nampiasaina",
        "exif-serialnumber": "Isa laharan'ny fakan-tsary",
        "exif-cameraownername": "Tompon'ilay mpaka sary",
+       "exif-label": "Marika",
        "exif-datetimemetadata": "Daty nanovana faran'ny metadata",
        "exif-nickname": "Solonanaran'ilay sary",
        "exif-rating": "Naoty (ampahan'ny 5)",
        "exif-giffilecomment": "Famoahan-kevitry ny rakirta GIF",
        "exif-intellectualgenre": "Karazan-javatra",
        "exif-subjectnewscode": "Kaodin'ny lohahevitra",
+       "exif-scenecode": "Kaodin-tsehatra IPTC",
        "exif-event": "Zava-mitranga azo sary",
        "exif-organisationinimage": "Fikambanana azo sary",
        "exif-personinimage": "Olona azo sary",
        "exif-originalimageheight": "Haambon-tsary talohan'ny nanovana azy",
+       "exif-compression-1": "Tsy nafintina",
+       "exif-compression-2": "CCITT vondrona 3 Halavan-kaody Huffman novaina iray saka",
+       "exif-compression-3": "CCITT Vondrona telo kaody fax",
+       "exif-compression-4": "CCITT Vondrona 4 kaody fax",
        "exif-copyrighted-true": "Iharan'ny zom-pamorona",
        "exif-copyrighted-false": "Toetran'ny zom-pamorona tsy voafaritra",
        "exif-unknowndate": "Daty tsy fantatra",
        "exif-orientation-1": "Tsotra",
+       "exif-orientation-2": "Navadika ara-marindrano",
        "exif-orientation-3": "Ahodina 180°",
        "exif-orientation-4": "Navadika ambony ambany",
        "exif-orientation-5": "Navadika 90° miankavia ary navadika ambony ambany",
        "exif-orientation-6": "Navadika 90° miankavia",
        "exif-orientation-7": "Navadika 90° miankavanana ary navadika ambony ambany",
        "exif-orientation-8": "Navadika 90° miankavanana",
+       "exif-planarconfiguration-1": "Angona miraibolongana",
        "exif-planarconfiguration-2": "Data misaraka",
        "exif-componentsconfiguration-0": "tsy nahitana",
        "exif-exposureprogram-0": "Tsy nolazaina",
        "watchlisttools-view": "pejy arahako maso",
        "watchlisttools-edit": "Jereo sy ovao ny lisitra ny pejy fanaraha-maso",
        "watchlisttools-raw": "Ovay ilay pejy arahako maso amizao",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|resaka]])",
        "duplicate-defaultsort": "'''Tandremo''' : manitsaka ny sort key taloha \"$1\" ilay sort key ankehitriny \"$2\".",
        "version": "Versiona",
        "version-extensions": "Fanitarana nampidirina",
        "logentry-rights-rights": "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5{{GENDER:$2}}",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 nanova ny vonodrom-pikambana isian'i $3",
        "logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
+       "logentry-upload-upload": "Nampiditra an'i $3 i $1{{GENDER:$2}}",
        "rightsnone": "(tsy misy)",
        "revdelete-summary": "ambangovangon'ny fanovàna",
        "feedback-adding": "Manampy ny fahenoan-kevitra amin'ilay pejy...",
index 5629515..6f9da7d 100644 (file)
        "help": "Помош",
        "search": "Пребарај",
        "searchbutton": "Пребарај",
-       "go": "Ð\9eди",
-       "searcharticle": "Ð\9eди",
+       "go": "Ð\94аÑ\98",
+       "searcharticle": "Ð\94аÑ\98",
        "history": "историја",
        "history_short": "Историја",
        "updatedmarker": "подновено од мојата последна посета",
        "actionthrottled": "Дејството е успорено",
        "actionthrottledtext": "Како анти-спам мерка, ограничени сте од вршење на ова дејство премногу пати во краток временски период, а го преминавте ограничувањето.\nВе молиме обидете се повторно за неколку минути.",
        "protectedpagetext": "Оваа страница е заклучена за уредувања и други дејства.",
-       "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница:",
-       "viewyourtext": "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
+       "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница.",
+       "viewyourtext": "Можете да го погледнете и копирате кодот на <strong>вашите уредувања</strong> на оваа страница.",
        "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
        "editinginterface": "<strong>Предупредување:</strong> Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.",
        "translateinterface": "За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
-       "cascadeprotected": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð·Ð°Ñ\88Ñ\82иÑ\82ена Ð¾Ð´ Ñ\83Ñ\80едÑ\83ваÑ\9aа Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ðµ Ð²ÐºÐ»Ñ\83Ñ\87ена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:\n$2",
+       "cascadeprotected": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð·Ð°Ñ\88Ñ\82иÑ\82ена Ð¾Ð´ Ñ\83Ñ\80едÑ\83ваÑ\9aа Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ðµ Ð¿Ñ\80евмеÑ\82наÑ\82а во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:\n$2",
        "namespaceprotected": "Немате дозвола за уредување страници во именскиот простор '''$1'''.",
        "customcssprotected": "Немате дозвола да ја менувате оваа страница со CSS бидејќи содржи туѓи лични нагодувања.",
        "customjsprotected": "Немате дозвола да ја менувате оваа страница со JavaScript  бидејќи содржи туѓи лични нагодувања.",
        "createacct-benefit-body2": "{{PLURAL:$1|страница|страници}}",
        "createacct-benefit-body3": "{{PLURAL:$1|скорешен учесник|скорешни учесници}}",
        "badretype": "Внесените лозинки не се совпаѓаат.",
+       "usernameinprogress": "Создавањето на сметката за овој корисни е веќе во тек.",
        "userexists": "Корисничкото име што го внесовте е зафатено.\nИзберете друго име.",
        "loginerror": "Грешка при најавувањето",
        "createacct-error": "Грешка во создавањето на сметката",
        "readonlywarning": "'''ПРЕДУПРЕДУВАЊЕ: Базата на податоци е заклучена заради одржување, па нема да можете да ги зачувате промените сега.\n\nВи препорачуваме да го прекопирате текстот на текстуална податотека за да го зачувате за подоцна.'''\n\nАдминистраторот кој ја заклучил базата на податоци го дал следново објаснување: $1",
        "protectedpagewarning": "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "semiprotectedpagewarning": "'''Предупредување:'''  Оваа страница е заштитена, така што може да ја уредуваат само регистрирани корисници.'''\nЗа ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
-       "cascadeprotectedwarning": "'''Предупредување:''' Оваа страница е заклучена, така што можат да ја уредуваат само корисници со администраторски привилегии, бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
+       "cascadeprotectedwarning": "<strong>Предупредување:</strong> Оваа страница е заклучена, така што можат да ја уредуваат само корисници со администраторски привилегии, бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
        "titleprotectedwarning": "'''Предупредување:'''  Оваа страница е заклучена, така што се потребни [[Special:ListGroupRights|посебни права]] за да се создаде.''''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на страницава:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} на прегледуваната страница:",
        "search-category": "(категорија $1)",
        "search-file-match": "(се совпаѓа со содржината на податотеката)",
        "search-suggest": "Дали мислевте на: $1",
+       "search-rewritten": "Исход од $1. Или побарајте го $2.",
        "search-interwiki-caption": "Збратимени проекти",
        "search-interwiki-default": "Најдено на $1:",
        "search-interwiki-more": "(уште)",
        "rows": "Редови:",
        "columns": "Колони:",
        "searchresultshead": "Пребарување",
-       "stub-threshold": "Праг за <a href=\"#\" class=\"stub\">никулци</a> (бајти):",
+       "stub-threshold": "Праг за форматирање на врска за никулци ($1):",
+       "stub-threshold-sample-link": "примерок",
        "stub-threshold-disabled": "Оневозможено",
        "recentchangesdays": "Денови за приказ во скорешните промени:",
        "recentchangesdays-max": "(највеќе {{PLURAL:$1|еден ден|$1 дена}})",
        "userrights-groups-help": "Можете да измените на кои групи припаѓа корисник:\n* Штиклирано - корисникот е во таа група.\n* Нештиклирано - корисникот не припаѓа на групата.\n* Ѕвездичка (*) - не можете да ја отстраните групата откако сте ја додале (и обратно).",
        "userrights-reason": "Причина:",
        "userrights-no-interwiki": "Немате дозвола за уредување на кориснички права на други викија.",
-       "userrights-nodatabase": "Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и $1 Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82ои Ð¸Ð»Ð¸ Ð½Ðµ Ðµ Ð»Ð¾ÐºÐ°Ð»на.",
+       "userrights-nodatabase": "Ð\91азаÑ\82а Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\86и $1 Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82ои Ð¸Ð»Ð¸ Ð½Ðµ Ðµ Ð¼ÐµÑ\81на.",
        "userrights-nologin": "Мора да сте [[Special:UserLogin|најавени]] со администраторска корисничка сметка за да може да вршите промена на кориснички права.",
        "userrights-notallowed": "Немате дозвола за додавање и отстранување на кориснички права.",
        "userrights-changeable-col": "Групи кои може да ги промените",
        "newpageletter": "Н",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|корисник што набљудува|корисници што набљудуваат}}]",
-       "rc_categories": "Само од категории (одделувајќи со „|“)",
-       "rc_categories_any": "Било кои",
+       "rc_categories": "Само од категории (одделувајќи со „|“):",
+       "rc_categories_any": "Било која од избраните",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|бајт|бајти}} по промената",
        "newsectionsummary": "/* $1 */ ново заглавие",
        "upload-too-many-redirects": "Оваа URL адреса содржеше премногу пренасочувања",
        "upload-http-error": "Се појави грешка во HTTP: $1.",
        "upload-copy-upload-invalid-domain": "Примероци од подигањата не се достапни на овој домен.",
+       "upload-dialog-title": "Подигни податотека",
+       "upload-dialog-error": "Се појави грешка",
+       "upload-dialog-warning": "Се јави предупредување",
+       "upload-dialog-button-cancel": "Откажи",
+       "upload-dialog-button-done": "Готово",
+       "upload-dialog-button-save": "Зачувај",
+       "upload-dialog-button-upload": "Подигни",
+       "upload-dialog-label-select-file": "Одберете податотека",
+       "upload-dialog-label-infoform-title": "Подробно",
+       "upload-dialog-label-infoform-name": "Назив",
+       "upload-dialog-label-infoform-description": "Опис",
+       "upload-dialog-label-usage-title": "Употреба",
+       "upload-dialog-label-usage-filename": "Назив на податотеката",
        "backend-fail-stream": "Не можев да ја емитувам податотеката $1.",
        "backend-fail-backup": "Не можев да направам резерва на податотеката $1.",
        "backend-fail-notexists": "Податотеката $1 не постои.",
        "filerevert-defaultcomment": "Вратена на верзија од $2, $1",
        "filerevert-submit": "Врати",
        "filerevert-success": "'''[[Media:$1|$1]]''' е вратен на [$4 верзијата од $3, $2].",
-       "filerevert-badversion": "Ð\9dема Ð¿Ñ\80еÑ\82Ñ\85одна Ð»Ð¾ÐºÐ°Ð»на верзија на оваа податотека со даденото време.",
+       "filerevert-badversion": "Ð\9dема Ð¿Ñ\80еÑ\82Ñ\85одна Ð¼ÐµÑ\81на верзија на оваа податотека со даденото време.",
        "filedelete": "Избриши го $1",
        "filedelete-legend": "Избриши податотека",
        "filedelete-intro": "Ја бришете податотеката '''[[Media:$1|$1]]''' заедно со нејзината историја.",
        "randomincategory-nopages": "Нема страници во [[:Category:$1]].",
        "randomincategory-category": "Категорија:",
        "randomincategory-legend": "Случајна страница во категорија",
-       "randomincategory-submit": "Ð\9eди",
+       "randomincategory-submit": "Ð\94аÑ\98",
        "randomredirect": "Случајно пренасочување",
        "randomredirect-nopages": "Нема пренасочувања во именскиот простор „$1“.",
        "statistics": "Статистики",
        "pageswithprop-legend": "Страници со својство",
        "pageswithprop-text": "На страницава се наведени страници што користат дадено својство.",
        "pageswithprop-prop": "Име на својството:",
-       "pageswithprop-submit": "Ð\9eди",
+       "pageswithprop-submit": "Ð\94аÑ\98",
        "pageswithprop-prophidden-long": "долгата вредност на текстуалното својство е скриена ($1)",
        "pageswithprop-prophidden-binary": "бинарната вредност на својството за долгиот текст е скриена  ($1)",
        "doubleredirects": "Двојни пренасочувања",
        "booksources-text": "Ова е список на врски кон други мрежни места кои продаваат нови и користени книги, и тие може\nда имаат повеќе информации за книгите што ги баравте:",
        "booksources-invalid-isbn": "Наведениот ISBN се чини неправилен. Проверете да не настанала некоја грешка при копирањето од изворот.",
        "specialloguserlabel": "Изведувач:",
-       "speciallogtitlelabel": "Цел (наслов или корисник):",
+       "speciallogtitlelabel": "Цел (наслов или {{ns:user}}:корисничко име на корисникот):",
        "log": "Дневници",
        "all-logs-page": "Сите јавни дневници",
        "alllogstext": "Комбиниран приказ на сите расположиви дневници на {{SITENAME}}.\nМожете да го ограничите прикажаното избирајќи тип на дневник, корисничко име (разликува големи и мали букви), или страница (разликува големи и мали букви).",
        "allpagesto": "Прикажи страници кои завршуваат со:",
        "allarticles": "Сите страници",
        "allinnamespace": "Сите страници (именски простор $1)",
-       "allpagessubmit": "Ð\9eди",
+       "allpagessubmit": "Ð\94аÑ\98",
        "allpagesprefix": "Прикажи страници со претставка:",
        "allpagesbadtitle": "Дадениот наслов е неважечки или има меѓујазичен или меѓувики-претставка. Може да содржи повеќе знаци кои не смеат да се користат во наслови.",
        "allpages-bad-ns": "Википедија не содржи именски простор „$1“.",
        "linksearch-pat": "Услов за пребарување:",
        "linksearch-ns": "Именски простор:",
        "linksearch-ok": "Барај",
-       "linksearch-text": "Може да се користат џокери, како на „*.wikipedia.org“.\nБара барем највисок домен, како на пр. „*.org“.<br />\n{{PLURAL:$2|Поддржан протокол|Поддржани протоколи}}: <code>$1</code> (задава http:// ако не укажете протокол).",
+       "linksearch-text": "Може да се користат џокери, како на „*.wikipedia.org“.\nБара барем највисок домен, како на пр. „*.org“.<br />\n{{PLURAL:$2|Поддржан протокол|Поддржани протоколи}}: $1 (задава http:// ако не укажете протокол).",
        "linksearch-line": "$1 врска во $2",
        "linksearch-error": "Џокер-знаците може да се користат само на почетокот во името на домаќинот.",
        "listusersfrom": "Прикажи корисници почнувајќи од:",
        "emailuser": "Пиши е-пошта на корисникот",
        "emailuser-title-target": "Составување на е-пошта за {{GENDER:$1|корисникот}}",
        "emailuser-title-notarget": "Е-пошта за корисникот",
-       "emailpage": "Е-пошта",
        "emailpagetext": "Можете да го употребите следниов образец за да му испратите е-пошта на овој {{GENDER:$1|корисник}}.\nАдреса која ја имате наведено во [[Special:Preferences|вашите нагодувања]] ќе се прикаже во полето „Од“ на пораката, со што примачот ќе може да ви одговори непосредно вам.",
        "defemailsubject": "{{SITENAME}} — писмо од корисникот „$1“",
        "usermaildisabled": "Корисничката е-пошта е оневозможена",
        "emailccsubject": "Копија од вашата порака до $1: $2",
        "emailsent": "Писмото е испратено",
        "emailsenttext": "Писмото е испратено.",
-       "emailuserfooter": "$1 го испрати писмово на $2 со помош на функцијата „{{int:emailpage}}“ на {{SITENAME}}.",
+       "emailuserfooter": "$1 го испрати писмово на $2 со помош на функцијата „{{int:emailuser}}“ на {{SITENAME}}.",
        "usermessage-summary": "Оставете системска порака.",
        "usermessage-editor": "Системски гласник",
+       "usermessage-template": "MediaWiki:КорисникПорака",
        "watchlist": "набљудувања",
        "mywatchlist": "Набљудувања",
        "watchlistfor2": "За $1 $2",
        "watchlistanontext": "Најавете се за да можете да го прегледувате и уредувате набљудуваните.",
        "watchnologin": "Не сте најавени",
        "addwatch": "Додај во набљудувани",
-       "addedwatchtext": "Страницата „[[:$1]]“ е додадена во [[Special:Watchlist|набљудуваните]].\nИдните промени на оваа страница и нејзината страница за разговор ќе се прикажуваат таму.",
+       "addedwatchtext": "„[[:$1]]“ и нејзината страница за разговор се додадени во вашите [[Special:Watchlist|набљудувања]].",
        "addedwatchtext-short": "Страницата „$1“ е додадена во вашите набљудувања.",
        "removewatch": "Отстрани набљудуваните",
-       "removedwatchtext": "Страницата „[[:$1]]“ е отстранета од [[Special:Watchlist|набљудуваните]].",
+       "removedwatchtext": "„[[:$1]]“ и нејзината страница за разговор се отстранети од вашите [[Special:Watchlist|набљудувања]].",
        "removedwatchtext-short": "Страницата „$1“ е отстранета од вашите набљудувања.",
        "watch": "Набљудувај",
        "watchthispage": "Набљудувај ја страницава",
        "changecontentmodel-success-title": "Содржинскиот модел е изменет",
        "changecontentmodel-success-text": "Содржинскиот тип [[:$1]] е изменет.",
        "changecontentmodel-cannot-convert": "Содржината на [[:$1]] не може да се претвори во типот $2.",
-       "changecontentmodel-title-cantexist": "Не е возможно да се направи страница на $1.",
        "changecontentmodel-nodirectediting": "Содржинскиот модел $1 не поддржува непосредно уредување",
        "log-name-contentmodel": "Дневник на измени во содржинските модели",
        "log-description-contentmodel": "Настани поврзани со содржинските модели на една страница",
        "protect-locked-blocked": "Не можете да ја менувате заштитата додека сте блокирани. Овде се\nдадени актуелните нагодувања за страницата '''$1''':",
        "protect-locked-dblock": "Степенот на заштита не може да се измени бидејќи базата на податоци е заклучена.\nОвде се дадени тековните нагодувања на страницата '''$1''':",
        "protect-locked-access": "Вашата корисничка сметка нема дозвола за менување на степенот на заштита.\nОвде се дадени тековните нагодувања за оваа страница '''$1''':",
-       "protect-cascadeon": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¼Ð¾Ð¼ÐµÐ½Ñ\82ално Ð·Ð°Ñ\88Ñ\82иÑ\82ена Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ðµ Ð²ÐºÐ»Ñ\83Ñ\87ена во {{PLURAL:$1|следнава страница, за која е|следниве страници, за кои се}} под каскадна заштита.\nИзмените во степенот на заштита на страницава нема да влијаат на каскадната заштита.",
+       "protect-cascadeon": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¼Ð¾Ð¼ÐµÐ½Ñ\82ално Ð·Ð°Ñ\88Ñ\82иÑ\82ена Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ðµ Ð¿Ñ\80евемÑ\82наÑ\82а во {{PLURAL:$1|следнава страница, за која е|следниве страници, за кои се}} под каскадна заштита.\nИзмените во степенот на заштита на страницава нема да влијаат на каскадната заштита.",
        "protect-default": "Допуштено за сите корисници",
        "protect-fallback": "Допуштај само корисници со дозвола „$1“",
        "protect-level-autoconfirmed": "Допуштај само автопотврдени корисници",
        "undeletepagetext": "{{PLURAL:$1|Следната страница била избришана но сè уште е во архивот и може да биде вратена.|Следните $1 страници биле избришани но сè уште се во архивот и можат да бидат вратени.}}\nАрхивот може периодично да се чисти.",
        "undelete-fieldset-title": "Врати преработки",
        "undeleteextrahelp": "За да вратите целосна историја на една страница, отштиклирајте ги сите полиња и притиснете на „'''{{int:undeletebtn}}'''“.\nЗа да извршите делумно враќање, штиклирајте ги соодветните преработки за враќање и притиснете на „'''{{int:undeletebtn}}'''“.",
-       "undeleterevisions": "{{PLURAL:$1|$1 измена е архивирана|$1 измени се архивирани}}",
+       "undeleterevisions": "${{PLURAL:$1|Избришана една преработка|Избришани $1 преработки}}",
        "undeletehistory": "Ако ја обновите страницата, сите поправки ќе бидат вратени во историјата.\nАко нова страница со исто име е создадена по бришењето, обновените поправки ќе се појават во претходната историја.",
        "undeleterevdel": "Избришаното нема да биде вратено ако тоа значи дека со тоа најгорната страница или преработката на податотеката делумно ќе се избрише.\nВо такви случаи, морате да ја отштиклирате или откриете (ако е скриена) најновата избришана преработка.",
        "undeletehistorynoadmin": "Оваа статија е избришана. Причината за бришењето е наведена подолу,\nзаедно со информации за корисникот кој ја уредувал страницата пред бришењето. Целиот текст\nод избришаните верзии е достапен само за администраторите.",
        "allmessages-filter-modified": "Изменети",
        "allmessages-prefix": "Филтрирај по претставка:",
        "allmessages-language": "Јазик:",
-       "allmessages-filter-submit": "Ð\9eди",
+       "allmessages-filter-submit": "Ð\94аÑ\98",
        "allmessages-filter-translate": "Преведување",
        "thumbnail-more": "Зголеми",
        "filemissing": "Недостасува податотека",
        "spam_reverting": "Враќам на последната верзија што не содржи врска до $1",
        "spam_blanking": "Сите преработки содржеа врски до $1. Чистам",
        "spam_deleting": "Сите преработки содржеа врски до $1. Бришам",
-       "simpleantispam-label": "Проверка против спам.\n'''НЕ''' пополнувајте го ова!",
+       "simpleantispam-label": "Проверка против спам.\n<strong>Не</strong> пополнувајте го ова!",
        "pageinfo-title": "Информации за „$1“",
        "pageinfo-not-current": "Информациите може да се прикажат само за тековната преработка.",
        "pageinfo-header-basic": "Основни информации",
        "pageinfo-robot-index": "Дозволено",
        "pageinfo-robot-noindex": "Недозволено",
        "pageinfo-watchers": "Број на набљудувачи",
-       "pageinfo-visiting-watchers": "Број на набљудувачи на страницата што ги посетуваат скорешните уредувања",
+       "pageinfo-visiting-watchers": "Број на набљудувачи на страницата што ги посетиле скорешните уредувања",
        "pageinfo-few-watchers": "Помалку од $1 {{PLURAL:$1|набљудувач|набљудувачи}}",
        "pageinfo-few-visiting-watchers": "Не се знае дали има набљудувач што ги посетува скорешните уредувања",
        "pageinfo-redirects-name": "Пренасочувања кон страницата",
        "exif-gpsmapdatum": "Користен геодетски координатен систем",
        "exif-gpsdestlatituderef": "Индекс за географската ширина на објектот",
        "exif-gpsdestlatitude": "Географска ширина на објектот",
-       "exif-gpsdestlongituderef": "Ð\98ндекÑ\81 Ð·Ð° Ð³ÐµÐ¾Ð³Ñ\80аÑ\84Ñ\81каÑ\82а Ð´Ð¾Ð»Ð¶Ð¸Ð½Ð° Ð½Ð° Ð¾Ð±Ñ\98екÑ\82оÑ\82",
+       "exif-gpsdestlongituderef": "Ð\9fоказаÑ\82ел Ð·Ð° Ð³ÐµÐ¾. Ð´Ð¾Ð»Ð¶Ð¸Ð½Ð° Ð½Ð° Ð¾Ð´Ñ\80едиÑ\88Ñ\82еÑ\82о",
        "exif-gpsdestlongitude": "Географска должина на објектот",
        "exif-gpsdestbearingref": "Индекс на азимутот на објектот",
        "exif-gpsdestbearing": "Азимут на објектот",
        "table_pager_last": "Последна страница",
        "table_pager_limit": "Прикажи $1 записи по страница",
        "table_pager_limit_label": "Ставки по страница:",
-       "table_pager_limit_submit": "Ð\9eди",
+       "table_pager_limit_submit": "Ð\94аÑ\98",
        "table_pager_empty": "Нема резултати",
        "autosumm-blank": "Целосно избришана страница",
        "autosumm-replace": "Ја заменувам страницата со '$1'",
        "redirect": "Пренасочување по податотеки, корисник или назнака на преработка",
        "redirect-legend": "Пренасочување кон податотека или страница",
        "redirect-summary": "Оваа службена страница пренасочува кон податотека (се задава името), страница (се задава назнаката на преработката или страницата) или корисничка странца (се задава бројчената назнака на корисникот). Употреба: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/revision/328429]] или [[{{#Special:Redirect}}/user/101]].",
-       "redirect-submit": "Ð\9eди",
+       "redirect-submit": "Ð\94аÑ\98",
        "redirect-lookup": "Пребарај:",
        "redirect-value": "Вредност:",
        "redirect-user": "Корисничка назнака",
        "htmlform-cloner-create": "Додај уште",
        "htmlform-cloner-delete": "Отстрани",
        "htmlform-cloner-required": "Се бара барем една вредност.",
+       "htmlform-title-badnamespace": "[[:$1]] не се наоѓа во именскиот простор „{{ns:$2}}“.",
+       "htmlform-title-not-creatable": "Насловот „$1“ не може да се создава",
+       "htmlform-title-not-exists": "[[:$1]] не постои.",
+       "htmlform-user-not-exists": "<strong>$1</strong> не постои.",
+       "htmlform-user-not-valid": "<strong>$1</strong> не претставува важечко корисничко име.",
        "sqlite-has-fts": "$1 со поддршка за пребарување по цели текстови",
        "sqlite-no-fts": "$1 без поддршка за пребарување по цели текстови",
        "logentry-delete-delete": "$1 {{GENDER:$2|ја избриша}} страницата $3",
        "logentry-newusers-create2": "{{GENDER:$2|Направена}} корисничката сметка $3 од $1",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|ја направи}} корисничката сметка $3. Лозинката ви ја испративме по е-пошта",
        "logentry-newusers-autocreate": "Автоматски {{GENDER:$2|создадена}} корисничката сметка $1",
+       "logentry-protect-move_prot": "$1 ги {{GENDER:$2|премести}} заштитните поставки од $4 на $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|го измени}} групното членство на $3 од $4 во $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|го измени}} групното членство во $3",
        "logentry-rights-autopromote": "$1 автоматски {{GENDER:$2|унапреден|унапредена}} од $4 во $5",
        "special-characters-title-endash": "цртичка",
        "special-characters-title-emdash": "тире",
        "special-characters-title-minus": "минус",
+       "mw-widgets-dateinput-no-date": "Немате одбрано датум",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страницата сè уште не постои",
        "mw-widgets-titleinput-description-redirect": "пренасочување кон $1"
 }
index 610119b..68a4084 100644 (file)
@@ -28,7 +28,8 @@
                        "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
                        "לערי ריינהארט",
                        "아라",
-                       "Viswaprabha"
+                       "Viswaprabha",
+                       "Nesi"
                ]
        },
        "tog-underline": "കണ്ണികൾക്ക് അടിവരയിടുക:",
        "actionthrottled": "പ്രവൃത്തി നടത്തിയിരിക്കുന്നു",
        "actionthrottledtext": "പാഴെഴുത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.",
        "protectedpagetext": "ഈ താൾ തിരുത്തോ മറ്റു പ്രവൃത്തികളോ തടയാനാകും വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.",
-       "viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
-       "viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
+       "viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
+       "viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ <strong>താങ്കളുടെ തിരുത്തുകളുടെ</strong> മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
        "protectedinterface": "ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.",
        "editinginterface": "<strong>മുന്നറിയിപ്പ്:<strong> സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.\nഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.",
        "translateinterface": "എല്ലാ വിക്കികൾക്കും ഉപയോഗിക്കാനാവുംവിധം പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
-       "cascadeprotected": "നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്താൻ സാധിക്കില്ല:\n$2",
+       "cascadeprotected": "\"നിർഝരിത\" (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്താൻ സാധിക്കില്ല:\n$2",
        "namespaceprotected": "'''$1''' നാമമേഖലയിലുള്ള താളുകൾ തിരുത്താൻ താങ്കൾക്ക് അനുവാദമില്ല.",
        "customcssprotected": "ഈ സി.എസ്.എസ്. താളിൽ മറ്റൊരു ഉപയോക്താവിന്റെ സ്വകാര്യസജ്ജീകരണങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിനാൽ താങ്കൾക്ക് ഈ താൾ തിരുത്താൻ അനുവാദമില്ല.",
        "customjsprotected": "ഈ ജാവാസ്ക്രിപ്റ്റ് താളിൽ മറ്റൊരു ഉപയോക്താവിന്റെ സ്വകാര്യസജ്ജീകരണങ്ങൾ ഉൾക്കൊള്ളുന്നു, അതിനാൽ താങ്കൾക്ക് ഈ താൾ തിരുത്താൻ അനുവാദമില്ല.",
        "createacct-benefit-body2": "{{PLURAL:$1|താൾ|താളുകൾ}}",
        "createacct-benefit-body3": "സമീപകാലത്ത് സംഭാവന {{PLURAL:$1|ചെയ്തയാൾ|ചെയ്തവർ}}",
        "badretype": "താങ്കൾ നൽകിയ രഹസ്യവാക്കുകൾ ഒത്തുപോകുന്നില്ല.",
+       "usernameinprogress": "ഈ ഉപയോക്തൃനാമത്തിലുള്ള അംഗത്വ നിർമ്മിതി നടന്നുകൊണ്ടിരിക്കുന്നു.\nദയവായി കാത്തിരിക്കുക.",
        "userexists": "നൽകിയ ഉപയോക്തൃനാമം മുമ്പേ നിലവിലുണ്ട്.\nദയവായി മറ്റൊരു ഉപയോക്തൃനാമം തിരഞ്ഞെടുക്കുക.",
        "loginerror": "പ്രവേശനം സാധിച്ചില്ല",
        "createacct-error": "അംഗത്വസൃഷ്ടിക്കിടെ പിഴവുണ്ടായി",
        "creating": "$1 സൃഷ്ടിക്കുന്നു",
        "editingsection": "തിരുത്തുന്ന താൾ:- $1 (ഉപവിഭാഗം)",
        "editingcomment": "തിരുത്തുന്ന താൾ:- $1 (പുതിയ ഉപവിഭാഗം)",
-       "editconflict": "താà´\99àµ\8dà´\95ൾ à´µà´°àµ\81à´¤àµ\8dതിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´\87à´\9fà´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´®à´±àµ\8dറാരàµ\8b à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´µà´°àµ\81à´¤àµ\8dതിയതിനാൽ à´¸àµ\87à´µàµ\8d à´\9aàµ\86à´¯àµ\8dയാൻ à´\95ഴിയിലàµ\8dà´². à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´\92à´¤àµ\8dà´¤àµ\81à´\9aàµ\87രാതàµ\8dതതàµ\8d à´¤à´¾à´\99àµ\8dà´\95ൾ à´¤à´¨àµ\8dà´¨àµ\86 à´ªà´°à´¿à´¹à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\8b?",
+       "editconflict": "തിരàµ\81à´¤àµ\8dതൽ à´¸à´®à´°à´¸à´ªàµ\8dà´ªàµ\86à´\9fായàµ\8dà´\95: $1",
        "explainconflict": "താങ്കൾ തിരുത്താൻ തുടങ്ങിയതിനു ശേഷം ഈ താൾ മറ്റാരോ തിരുത്തി സേവ് ചെയ്തിരിക്കുന്നു.\nമുകളിലുള്ള ടെക്സ്റ്റ് ഏരിയയിൽ നിലവിലുള്ള ഉള്ളടക്കം കാണിക്കുന്നു.\nതാങ്കൾ ഉള്ളടക്കത്തിൽ വരുത്തിയ മാറ്റങ്ങൾ താഴെയുള്ള ടെക്സ്റ്റ് ഏരിയയിൽ കാണിക്കുന്നു.\nതാങ്കളുടെ മാറ്റങ്ങൾ മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലേക്ക് സം‌യോജിപ്പിക്കുക.\nതാങ്കൾ '''സേവ് ചെയ്യുക''' എന്ന ബട്ടൺ അമർത്തുമ്പോൾ '''മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലുള്ള എഴുത്തുകൾ മാത്രമേ''' സേവ് ആവുകയുള്ളൂ.",
        "yourtext": "താങ്കൾ എഴുതി ചേർത്തത്",
        "storedversion": "മുമ്പേയുള്ള നാൾപതിപ്പ്",
        "readonlywarning": "'''മുന്നറിയിപ്പ്: ഡേറ്റാബേസ് പരിപാലനത്തിനു വേണ്ടി ബന്ധിച്ചിരിക്കുന്നു, അതുകൊണ്ട് താങ്കളിപ്പോൾ വരുത്തിയ മാറ്റങ്ങൾ സേവ് ചെയ്യാൻ സാദ്ധ്യമല്ല.''' താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഒരു ടെക്സ്റ്റ് ഫയലിലേക്ക് പകർത്തി (കോപ്പി & പേസ്റ്റ്) പിന്നീടുപയോഗിക്കുന്നതിനായി കരുതിവക്കാൻ താല്പര്യപ്പെടുന്നു. ഡേറ്റാബേസ് ബന്ധിച്ച അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ വിശദീകരണം: $1",
        "protectedpagewarning": "'''മുന്നറിയിപ്പ്:  ഈ താൾ കാര്യനിർവാഹക പദവിയുള്ളവർക്കു മാത്രം തിരുത്താൻ സാധിക്കാവുന്ന തരത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിരിക്കുന്നു.''' അവലംബമായി രേഖകളിൽ ലഭ്യമായ ഏറ്റവും പുതിയ വിവരം താഴെ നൽകിയിരിക്കുന്നു:",
        "semiprotectedpagewarning": "'''ശ്രദ്ധിക്കുക:'''അംഗത്വമെടുത്തിട്ടുള്ളവർക്കുമാത്രം തിരുത്താൻ സാധിക്കുന്ന വിധത്തിൽ ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നു. അവലംബമായി രേഖകളിലെ ഏറ്റവും പുതിയ വിവരം താഴെ കൊടുത്തിരിക്കുന്നു:",
-       "cascadeprotectedwarning": "'''മുന്നറിയിപ്പ്:''' ഈ താൾ കാര്യനിർവാഹക അവകാശമുള്ളവർക്കു മാത്രം തിരുത്തുവാൻ സാധിക്കുന്ന വിധത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌. {{PLURAL:$1|താൾ|താളുകൾ}} കാസ്കേഡ് സം‌രക്ഷണം ചെയ്തപ്പോൾ അതിന്റെ ഭാഗമായി സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌ ഈ താൾ.",
+       "cascadeprotectedwarning": "<strong>മുന്നറിയിപ്പ്:</strong> ഈ താൾ കാര്യനിർവാഹക അവകാശമുള്ളവർക്കു മാത്രം തിരുത്തുവാൻ സാധിക്കുന്ന വിധത്തിൽ സം‌രക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌. ഇനിക്കൊടുക്കുന്ന {{PLURAL:$1|താൾ|താളുകൾ}} നിർഝരിത(cascade) സം‌രക്ഷണം ചെയ്തപ്പോൾ അതിന്റെ ഭാഗമായി സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്‌ ഈ താൾ:",
        "titleprotectedwarning": "'''മുന്നറിയിപ്പ്: [[Special:ListGroupRights|പ്രത്യേക അവകാശമുള്ള]] ഉപയോക്താക്കൾക്ക് മാത്രം സൃഷ്ടിക്കാൻ സാധിക്കുന്ന വിധത്തിൽ ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നു.''' അവലംബമായി രേഖകളിൽ ലഭ്യമായ ഏറ്റവും പുതിയ വിവരം താഴെ നൽകിയിരിക്കുന്നു:",
        "templatesused": "ഈ താളിൽ ഉപയോഗിച്ചിരിക്കുന്ന {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}}:",
        "templatesusedpreview": "ഈ പ്രിവ്യൂവിൽ ഉപയോഗിച്ചിരിക്കുന്ന {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}}:",
        "content-model-text": "വെറും എഴുത്ത്",
        "content-model-javascript": "ജാവാസ്ക്രിപ്റ്റ്",
        "content-model-css": "സി.എസ്.എസ്.",
+       "duplicate-args-warning": "<strong>മുന്നറിയിപ്പ്:</strong> [[:$1]], [[:$2]] എന്നതിനെ വിളിക്കുമ്പോൾ \"$3\" എന്ന ചരത്തിന് ഒന്നിലധികം വിലകൾ നൽകിയിട്ടുണ്ട്. നൽകിയ വിലകളിൽ അവസാനത്തേതുമാത്രം ഉപയോഗിക്കുന്നതാണ്.",
        "duplicate-args-category": "ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ ആവർത്തിച്ചുപയോഗിക്കുന്ന താളുകൾ",
        "duplicate-args-category-desc": "താളിൽ ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ അതായത് <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> അല്ലെങ്കിൽ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code> എന്ന രീതിയിൽ.",
        "expensive-parserfunction-warning": "'''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.\n\n{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്.",
        "search-category": "(വർഗ്ഗം $1)",
        "search-file-match": "(പ്രമാണ ഉള്ളടക്കവുമായി ഒത്തുപോകുന്നുണ്ട്)",
        "search-suggest": "താങ്കൾ ഉദ്ദേശിച്ചത് $1 എന്നാണോ",
+       "search-rewritten": "$1 എന്നതിനുള്ള ഫലങ്ങൾ കാണിക്കുന്നു. പകരം $2 എന്നതിനായി തിരയുക.",
        "search-interwiki-caption": "സഹോദര സംരംഭങ്ങൾ",
        "search-interwiki-default": "$1 വിക്കിയിൽ നിന്നുള്ള ഫലങ്ങൾ:",
        "search-interwiki-more": "(കൂടുതൽ)",
        "rows": "വരി:",
        "columns": "നിര:",
        "searchresultshead": "തിരയൂ",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">അപൂർണ്ണമായ കണ്ണിയെന്നു</a> സ്ഥാപിക്കാനുള്ള ത്വരകം (ബൈറ്റുകൾ):",
+       "stub-threshold": "അപൂർണ്ണമായ കണ്ണിയെന്നു സ്ഥാപിക്കാനുള്ള ത്വരകം ($1):",
+       "stub-threshold-sample-link": "സാമ്പിൾ",
        "stub-threshold-disabled": "നിർജ്ജീവമാക്കപ്പെട്ടിരിക്കുന്നു",
        "recentchangesdays": "പുതിയ മാറ്റങ്ങളിൽ കാണിക്കേണ്ട ദിവസങ്ങളുടെ എണ്ണം:",
        "recentchangesdays-max": "പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}",
        "boteditletter": "(യ.)",
        "unpatrolledletter": "(!)",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|ഒരു ഉപയോക്താവ്|$1 ഉപയോക്താക്കൾ}} ഈ താൾ ശ്രദ്ധിക്കുന്നുണ്ട്]",
-       "rc_categories": "വർഗ്ഗങ്ങളുടെ പരിധി (\"|\" ഉപയോഗിച്ച് പിരിക്കുക)",
-       "rc_categories_any": "à´\8fà´¤ും",
+       "rc_categories": "വർഗ്ഗങ്ങളുടെ പരിധി (\"|\" ഉപയോഗിച്ച് പിരിക്കുക):",
+       "rc_categories_any": "തിരà´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´¤àµ\8dതതിൽ à´\8fà´¤àµ\86à´\99àµ\8dà´\95à´¿à´²ും",
        "rc-change-size-new": "മാറ്റത്തിനു ശേഷം {{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റുകൾ}}",
        "newsectionsummary": "/* $1 */ പുതിയ ഉപവിഭാഗം",
        "rc-enhanced-expand": "അധികവിവരങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "uploaddisabledtext": "പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതു സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.",
        "php-uploaddisabledtext": "പി.എച്ച്.പി.യിൽ പ്രമാണ അപ്‌‌ലോഡുകൾ സാദ്ധ്യമല്ലാതാക്കിയിരിക്കുന്നു.\nദയവായി file_uploads ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.",
        "uploadscripted": "ഈ പ്രമാണത്തിൽ വെബ് ബ്രൗസർ തെറ്റായി വ്യാഖ്യാനിച്ചേക്കാവുന്ന എച്ച്.റ്റി.എം.എൽ. അല്ലെങ്കിൽ സ്ക്രിപ്റ്റ് കോഡ് ഉണ്ട്.",
+       "upload-scripted-pi-callback": "എക്സ്.എം.എൽ.-സ്റ്റൈൽഷീറ്റ് പ്രോസസിങ് നിർദ്ദേശങ്ങളുള്ള പ്രമാണം അപ്‌ലോഡ് ചെയ്യാനാവില്ല.",
        "uploaded-script-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സ്ക്രിപ്റ്റ് ചെയ്യാവുന്ന ഭാഗമായ \"$1\" കണ്ടെത്തി.",
        "uploaded-hostile-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സുരക്ഷിതമല്ലാത്ത സി.എസ്.എസ്. സ്റ്റൈൽ ഭാഗം കണ്ടെത്താനായി.",
+       "uploaded-event-handler-on-svg": "എസ്.വി.ജി. പ്രമാണങ്ങളിൽ എവന്റ്-ഹാൻഡ്‌ലർ ആട്രിബ്യൂട്ടുകൾ <code>$1=\"$2\"</code>  എന്ന് സജ്ജീകരിച്ചിരിക്കുന്നവ അനുവദിച്ചിട്ടില്ല.",
+       "uploaded-href-attribute-svg": "എസ്.വി.ജി. പ്രമാണങ്ങളിൽ എച്ച്റെഫ് (href) ആട്രിബ്യൂട്ടുകൾ പ്രാദേശികമല്ലാത്ത ലക്ഷ്യങ്ങളിലേക്ക് <code>&lt;$1 $2=\"$3\"&gt;</code> എന്നുള്ളവ (ഉദാ: http://, javascript:, തുടങ്ങിയവ) അനുവദിച്ചിട്ടില്ല.",
+       "uploaded-href-unsafe-target-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സുരക്ഷിതമല്ലാത്ത ലക്ഷ്യമായ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി.",
+       "uploaded-animate-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>&lt;$1 $2=\"$3\"&gt;</code> ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് href മാറ്റിയേക്കാവുന്ന \"animate\" റ്റാഗായ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി.",
+       "uploaded-setting-event-handler-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി, ഇവന്റ്-കൈകാര്യ സജ്ജീകരണ ആട്രിബ്യൂട്ടുകൾ തടഞ്ഞിരിക്കുന്നു.",
+       "uploaded-setting-href-svg": "മാതൃഘടകത്തിലേക്ക് \"href\" ആട്രിബ്യൂട്ട് ചേർക്കാൻ \"set\" പതാക ഉപയോഗിക്കുന്നത് തടഞ്ഞിരിക്കുന്നു.",
+       "uploaded-wrong-setting-svg": "ഏതെങ്കിലും ആട്രിബ്യൂട്ടിലേക്ക് വിദൂര/ഡേറ്റ/സ്ക്രിപ്റ്റ് ലക്ഷ്യം  ചേർക്കാൻ \"set\" പതാക ഉപയോഗിക്കുന്നത് തടഞ്ഞിരിക്കുന്നു. അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>&lt;set to=\"$1\"&gt;</code> കണ്ടെത്തി.",
+       "uploaded-setting-handler-svg": "വിദൂര/ഡേറ്റ/സ്ക്രിപ്റ്റിനൊപ്പം \"handler\" ആട്രിബ്യൂട്ട് സജ്ജീകരിക്കുന്ന എസ്.വി.ജി. തടഞ്ഞിരിക്കുന്നു. അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>$1=\"$2\"</code> കണ്ടെത്തി.",
+       "uploaded-remote-url-svg": "റിമോട്ട് യു.ആർ.എലിനൊപ്പം ഏതെങ്കിലും സ്റ്റൈൽ ആട്രിബ്യൂട്ട് സജ്ജീകരിക്കുന്ന എസ്.വി.ജി. തടഞ്ഞിരിക്കുന്നു. അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>$1=\"$2\"</code> കണ്ടെത്തി.",
        "uploaded-image-filter-svg": "യു.ആർ.എൽ. ഉൾപ്പെടെയുള്ള ചിത്ര അരിപ്പ : <code>&lt;$1 $2=\"$3\"&gt;</code>, അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. ചിത്രത്തിൽ കണ്ടെത്തി.",
        "uploadscriptednamespace": "ഈ എസ്.വി.ജി. പ്രമാണത്തിൽ ഉപയോഗിക്കാൻ പാടില്ലാത്ത നാമമേഖലയായ \"$1\" ഉണ്ട്",
        "uploadinvalidxml": "അപ്‌ലോഡ് ചെയ്ത പ്രമാണത്തിലെ എക്സ്.എം.എൽ. പാഴ്സ് ചെയ്യാൻ കഴിയില്ല.",
        "upload-too-many-redirects": "യൂ.ആർ.എല്ലിൽ നിരവധി തിരിച്ചുവിടലുകളുണ്ട്",
        "upload-http-error": "ഒരു എച്ച്.റ്റി.റ്റി.പി. പിഴവു സംഭവിച്ചിരിക്കുന്നു: $1",
        "upload-copy-upload-invalid-domain": "ഈ ഡൊമൈനിൽ നിന്നും പകർത്തി അപ്‌ലോഡ് ചെയ്യൽ ലഭ്യമല്ല.",
+       "upload-dialog-title": "പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക",
+       "upload-dialog-error": "ഒരു പിഴവുണ്ടായി",
+       "upload-dialog-warning": "ഒരു മുന്നറിയിപ്പുണ്ടായി",
+       "upload-dialog-button-cancel": "റദ്ദാക്കുക",
+       "upload-dialog-button-done": "ചെയ്തു കഴിഞ്ഞു",
+       "upload-dialog-button-save": "സേവ് ചെയ്യുക",
+       "upload-dialog-button-upload": "അപ്‌‌ലോഡ്",
+       "upload-dialog-label-select-file": "പ്രമാണം തിരഞ്ഞെടുക്കുക",
+       "upload-dialog-label-infoform-title": "വിശദാംശങ്ങൾ",
+       "upload-dialog-label-infoform-name": "പേര്‌",
+       "upload-dialog-label-infoform-description": "വിവരണം",
+       "upload-dialog-label-usage-title": "ഉപയോഗം",
+       "upload-dialog-label-usage-filename": "പ്രമാണത്തിന്റെ പേര്",
        "backend-fail-stream": "$1 എന്ന പ്രമാണം സ്ട്രീം ചെയ്യാൻ കഴിഞ്ഞില്ല.",
        "backend-fail-backup": "$1 എന്ന പ്രമാണത്തിന്റെ ബാക്ക്അപ് എടുക്കാൻ കഴിഞ്ഞില്ല.",
        "backend-fail-notexists": "$1 എന്ന പ്രമാണം നിലവിലില്ല.",
        "booksources-text": "പുതിയതും ഉപയോഗിച്ചതുമായ പുസ്തകങ്ങൾ വിൽക്കുന്ന സൈറ്റുകളിലേക്കുള്ള ലിങ്കുകളുടെ പട്ടിക ആണ്‌ താഴെ. താങ്കൾ തിരയുന്ന പുസ്തകത്തെ പറ്റിയുള്ള കൂടുതൽ വിവരങ്ങൾ ഈ പട്ടികയിൽ നിന്നു ലഭിച്ചേക്കാം:",
        "booksources-invalid-isbn": "തന്നിരിക്കുന്ന ഐ.എസ്.ബി.എൻ. സാധുവാണെന്നു തോന്നുന്നില്ല; യഥാർത്ഥ സ്രോതസ്സിൽ നിന്നും പകർത്തിയപ്പോൾ തെറ്റുപറ്റിയോ എന്നു പരിശോധിക്കുക",
        "specialloguserlabel": "നടപ്പിലാക്കിയയാൾ:",
-       "speciallogtitlelabel": "à´²à´\95àµ\8dà´·àµ\8dà´¯à´\82 (തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d) :",
+       "speciallogtitlelabel": "à´²à´\95àµ\8dà´·àµ\8dà´¯à´\82 (തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\89പയàµ\8bà´\95àµ\8dതാവിനàµ\86 à´¤à´¿à´°à´¯à´¾à´¨àµ\81à´³àµ\8dà´³ {{ns:user}}:à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83നാമà´\82) :",
        "log": "പ്രവർത്തനരേഖകൾ",
        "all-logs-page": "എല്ലാ പൊതുരേഖകളും",
        "alllogstext": "{{SITENAME}} സംരംഭത്തിൽ ലഭ്യമായ വിവിധ പ്രവർത്തന രേഖകൾ ഈ താളിൽ ഒരുമിച്ച് കാണാം. താങ്കൾക്ക് രേഖകളുടെ സ്വഭാവം, ഉപയോക്തൃനാമം (കേസ് സെൻസിറ്റീവ്), ബന്ധപ്പെട്ട താൾ (കേസ് സെൻസിറ്റീവ്) മുതലായവ തിരഞ്ഞെടുത്ത് അന്വേഷണം കൂടുതൽ ക്ഌപ്തപ്പെടുത്താവുന്നതാണ്.",
        "linksearch-pat": "തിരച്ചിലിന്റെ മാതൃക:",
        "linksearch-ns": "നാമമേഖല:",
        "linksearch-ok": "തിരയൂ",
-       "linksearch-text": "\"*.wikipedia.org\" പോലുള്ള വൈൽഡ് കാർഡുകൾ ഉപയോഗിക്കാവുന്നതാണ്‌.\nകുറഞ്ഞത് \"*.org\" പോലുള്ള ഒരു ടോപ്-ലെവൽ ഡൊമൈൻ എങ്കിലും ഉണ്ടായിരിക്കണം.<br />\nപിന്തുണയുള്ള {{PLURAL:$2|പ്രോട്ടോക്കോൾ|പ്രോട്ടോക്കോളുകൾ}}: <code>$1</code> (ഒന്നും നൽകിയില്ലെങ്കിൽ സ്വതേയുള്ള http:// ഉപയോഗിക്കുന്നതാണ്).",
+       "linksearch-text": "\"*.wikipedia.org\" പോലുള്ള വൈൽഡ് കാർഡുകൾ ഉപയോഗിക്കാവുന്നതാണ്‌.\nകുറഞ്ഞത് \"*.org\" പോലുള്ള ഒരു ടോപ്-ലെവൽ ഡൊമൈൻ എങ്കിലും ഉണ്ടായിരിക്കണം.<br />\nപിന്തുണയുള്ള {{PLURAL:$2|പ്രോട്ടോക്കോൾ|പ്രോട്ടോക്കോളുകൾ}}: $1 (ഒന്നും നൽകിയില്ലെങ്കിൽ സ്വതേയുള്ള http:// ഉപയോഗിക്കുന്നതാണ്).",
        "linksearch-line": "$1,  $2ൽ നിന്നു കണ്ണി ചേർക്കപ്പെട്ടിരിക്കുന്നു.",
        "linksearch-error": "ഹോസ്റ്റ്നെയിമിന്റെ തുടക്കത്തിൽ മാത്രമേ വൈൽഡ് കാർഡുകൾ വരാവൂ.",
        "listusersfrom": "ഇങ്ങനെ തുടങ്ങുന്ന ഉപയോക്താക്കളെ പ്രദർശിപ്പിക്കുക:",
        "emailuser": "ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക",
        "emailuser-title-target": "ഈ {{GENDER:$1|ഉപയോക്താവിന്}} ഇമെയിൽ അയയ്ക്കുക",
        "emailuser-title-notarget": "ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക",
-       "emailpage": "ഉപയോക്താവിന് ഇമെയിൽ അയക്കുക",
        "emailpagetext": "താഴെ കാണുന്ന ഫോം ഈ {{GENDER:$1|ഉപയോക്താവിന്‌}} ഇമെയിൽ അയക്കാൻ ഉപയോഗിക്കാവുന്നതാണ്.\n[[Special:Preferences|ഉപയോക്താവിന്റെ ക്രമീകരണങ്ങളിൽ]] കൊടുത്തിട്ടുള്ള ഇമെയിൽ വിലാസം \"ദാതാവ്\" ആയി വരുന്നതാണ്‌, അതുകൊണ്ട് സ്വീകർത്താവിന്‌ താങ്കൾക്ക് നേരിട്ട് മറുപടി അയക്കാൻ കഴിയും.",
        "defemailsubject": "\"$1\" എന്ന ഉപയോക്താവ് അയച്ച {{SITENAME}} ഇമെയിൽ",
        "usermaildisabled": "ഉപയോക്തൃ ഇമെയിൽ പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു",
        "emailccsubject": "$1 എന്ന ഉപയോക്താവിനയച്ച സന്ദേശത്തിന്റെ പകർപ്പ്: $2",
        "emailsent": "ഇമെയിൽ അയച്ചിരിക്കുന്നു",
        "emailsenttext": "താങ്കളുടെ ഇമെയിൽ അയച്ചു കഴിഞ്ഞിരിക്കുന്നു.",
-       "emailuserfooter": "ഈ ഇമെയിൽ, {{SITENAME}} സംരംഭത്തിലെ \"{{int:emailpage}}\" എന്ന സൗകര്യം ഉപയോഗിച്ച്, $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.",
+       "emailuserfooter": "ഈ ഇമെയിൽ, {{SITENAME}} സംരംഭത്തിലെ \"{{int:emailuser}}\" എന്ന സൗകര്യം ഉപയോഗിച്ച്, $1 എന്ന ഉപയോക്താവ് $2 എന്ന ഉപയോക്താവിന് അയച്ചതാണ്.",
        "usermessage-summary": "വ്യവസ്ഥാസന്ദേശം ഉപേക്ഷിക്കുക.",
        "usermessage-editor": "വ്യവസ്ഥാസന്ദേശകൻ",
        "watchlist": "ശ്രദ്ധിക്കുന്നവ",
        "watchlistanontext": "താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുവാനോ തിരുത്തുവാനോ പ്രവേശിക്കുക.",
        "watchnologin": "ലോഗിൻ ചെയ്തിട്ടില്ല",
        "addwatch": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിലേക്കു ചേർക്കുക",
-       "addedwatchtext": "താà´\99àµ\8dà´\95ൾ [[Special:Watchlist|à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിലàµ\87à´\95àµ\8dà´\95àµ\8d]] \"[[:$1]]\" à´\8eà´¨àµ\8dà´¨ à´\88 à´¤à´¾àµ¾ à´\9aàµ\87ർതàµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81. à´\87നി à´®àµ\81തൽ à´\88 à´¤à´¾à´³à´¿à´²àµ\81à´\82 à´¬à´¨àµ\8dധപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´¸à´\82â\80\8cവാദà´\82 à´¤à´¾à´³à´¿à´²àµ\81à´\82 à´\89à´£àµ\8dà´\9fà´¾à´\95àµ\81à´¨àµ\8dà´¨ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99ൾ à´\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´¦àµ\83à´¶àµ\8dയമാവàµ\81à´\82.",
+       "addedwatchtext": "താà´\99àµ\8dà´\95ൾ [[Special:Watchlist|à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിലàµ\87à´\95àµ\8dà´\95àµ\8d]] \"[[:$1]]\" à´\8eà´¨àµ\8dà´¨ à´\88 à´¤à´¾à´³àµ\81à´\82 à´\85തിനàµ\8dà´±àµ\86 à´¸à´\82വാദതàµ\8dതാളàµ\81à´\82 à´\9aàµ\87ർതàµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.",
        "addedwatchtext-short": "\"$1\" എന്ന താൾ താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിലേക്ക് ചേർത്തു.",
        "removewatch": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ നിന്നും ഒഴിവാക്കുക",
-       "removedwatchtext": "താà´\99àµ\8dà´\95ൾ [[Special:Watchlist|à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ]] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 \"[[:$1]]\" à´\8eà´¨àµ\8dà´¨ à´¤à´¾àµ¾ നീക്കം ചെയ്തിരിക്കുന്നു.",
+       "removedwatchtext": "താà´\99àµ\8dà´\95ൾ [[Special:Watchlist|à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ]] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 \"[[:$1]]\" à´\8eà´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\82 à´\85തിനàµ\8dà´±àµ\86 à´¸à´\82വാദതàµ\8dതാളàµ\81à´\82 നീക്കം ചെയ്തിരിക്കുന്നു.",
        "removedwatchtext-short": "\"$1\" എന്ന താൾ താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയിൽ നിന്ന് നീക്കി.",
        "watch": "മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "watchthispage": "ഈ താൾ ശ്രദ്ധിക്കുക",
        "watching": "ശ്രദ്ധിക്കുന്നു...",
        "unwatching": "അവഗണിക്കുന്നു...",
        "watcherrortext": "\"$1\" എന്ന താൾ ശ്രദ്ധിക്കുന്നതിന്റെ സ്ഥിതിയിൽ മാറ്റം വരുത്തിയപ്പോൾ ഒരു പിഴവുണ്ടായിരിക്കുന്നു.",
-       "enotif_reset": "à´\8eà´²àµ\8dലാ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´¸à´¨àµ\8dദർശിà´\9aàµ\8dà´\9aതായി à´°àµ\87à´\96പ്പെടുത്തുക",
+       "enotif_reset": "à´\8eà´²àµ\8dലാ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´¸à´¨àµ\8dദർശിà´\9aàµ\8dà´\9aതായി à´\85à´\9fയാളപ്പെടുത്തുക",
        "enotif_impersonal_salutation": "{{SITENAME}} ഉപയോക്താവ്",
        "enotif_subject_deleted": "{{SITENAME}} സംരംഭത്തിലെ $1 എന്ന താൾ {{gender:$2|$2}} മായ്ച്ചിരിക്കുന്നു",
        "enotif_subject_created": "{{SITENAME}} സംരംഭത്തിൽ $1 എന്ന താൾ {{gender:$2|$2}} സൃഷ്ടിച്ചിരിക്കുന്നു",
        "changecontentmodel-reason-label": "കാരണം:",
        "changecontentmodel-success-title": "ഉള്ളടക്കരീതി മാറിയിരിക്കുന്നു",
        "changecontentmodel-success-text": "[[:$1]] എന്നതിന്റെ ഉള്ളടക്കരീതി മാറിയിട്ടുണ്ട്.",
+       "changecontentmodel-cannot-convert": "[[:$1]] താളിലെ ഉള്ളടക്കം $2 തരത്തിലേക്ക് മാറ്റാനാവില്ല.",
        "logentry-contentmodel-change-revertlink": "പൂർവ്വസ്ഥിതിയിലാക്കുക",
        "logentry-contentmodel-change-revert": "പൂർവ്വസ്ഥിതിയിലാക്കുക",
        "protectlogpage": "സംരക്ഷണ പ്രവർത്തനരേഖ",
        "undeletepagetext": "താഴെ കാണിച്ചിരിക്കുന്ന {{PLURAL:$1|താൾ|$1 താളുകൾ}} മായ്ക്കപ്പെട്ടതാണെങ്കിലും പത്തായത്തിലുള്ളതിനാൽ പുനഃസ്ഥാപിക്കാവുന്നതാണ്‌. പത്തായം സമയാസമയങ്ങളിൽ വൃത്തിയാക്കാനിടയുണ്ട്.",
        "undelete-fieldset-title": "നാൾപ്പതിപ്പുകൾ പുനഃസ്ഥാപിക്കുക",
        "undeleteextrahelp": "താളിന്റെ മുഴുവൻ നാൾവഴിയും പുനഃസ്ഥാപിക്കാൻ എല്ലാ ചെക്ക്ബോക്സുകളും ശരിയിടാതെ വിട്ടശേഷം '''''പുനഃസ്ഥാപിക്കുക''''' എന്നത് ഞെക്കുക.\nതിരഞ്ഞെടുത്തവ പുനഃസ്ഥാപിക്കാൻ, പുനഃസ്ഥാപിക്കേണ്ട നാൾപ്പതിപ്പിനുള്ള ചെക്ക്ബോക്സിൽ ശരിയിട്ടശേഷം '''''പുനഃസ്ഥാപിക്കുക''''' എന്നത് ഞെക്കുക.",
-       "undeleterevisions": "$1 {{PLURAL:$1|പതിപ്പ്|പതിപ്പുകൾ}} പത്തായത്തിലാക്കി",
+       "undeleterevisions": "{{PLURAL:$1|ഒരു നാൾപതിപ്പ്|$1 നാൾപതിപ്പുകൾ}} മായ്ച്ചു",
        "undeletehistory": "താങ്കൾ താൾ പുനഃസ്ഥാപിച്ചാൽ, എല്ലാ നാൾപ്പതിപ്പുകളും നാൾവഴിയിൽ പുനഃസ്ഥാപിക്കപ്പെടും.\nമായ്ക്കലിനു ശേഷം പുതിയൊരു താൾ അതേ പേരിൽ സൃഷ്ടിക്കപ്പെട്ടിട്ടുണ്ടെങ്കിൽ, പുനഃസ്ഥാപിക്കപ്പെട്ട പതിപ്പുകൾ നാൾവഴിയിൽ പഴയവയായി പ്രത്യക്ഷപ്പെടുന്നതാണ്.",
        "undeleterevdel": "ഏറ്റവും ഉന്നത സ്ഥിതിയിലുള്ള താളോ പ്രമാണത്തിന്റെ നാൾപ്പതിപ്പോ ഭാഗികമായി മായ്ക്കപ്പെടുമെന്നതിനാൽ മായ്ക്കൽ പുനഃസ്ഥാപിക്കൽ നടത്താൻ കഴിയില്ല.\nഇത്തരം സന്ദർഭങ്ങളിൽ, താങ്കൾ ഏറ്റവും പുതിയ മായ്ക്കപ്പെട്ട നാൾപ്പതിപ്പുകൾ തിരഞ്ഞെടുക്കാതിരിക്കുകയോ മറയ്ക്കാതിരിക്കുകയോ ചെയ്യേണ്ടതാണ്.",
        "undeletehistorynoadmin": "ഈ താൾ മായ്ക്കപ്പെട്ടിരിക്കുന്നു.\nഈ താൾ മായ്കാനുള്ള കാരണവും താൾ മായ്ക്കുന്നതിനു മുൻപ് തിരുത്തിയവരെ കുറിച്ചുള്ള വിവരങ്ങളും, താഴെ കൊടുത്തിരിക്കുന്നു.\nമായ്ക്കപ്പെട്ട ഈ പതിപ്പുകളുടെ ഉള്ളടക്കം കാര്യനിർവാഹകർക്ക് മാത്രമേ പ്രാപ്യമാകൂ.",
        "tooltip-ca-nstab-main": "വിവരദായക താൾ കാണുക",
        "tooltip-ca-nstab-user": "ഉപയോക്താവിന്റെ താൾ കാണുക",
        "tooltip-ca-nstab-media": "മീഡിയ താൾ കാണുക",
-       "tooltip-ca-nstab-special": "ഇതൊരു '''പ്രത്യേക''' താളാണ്‌. ഇത് തിരുത്തുക സാധ്യമല്ല.",
+       "tooltip-ca-nstab-special": "ഇതൊരു പ്രത്യേക താളാണ്‌. ഇത് തിരുത്തുക സാധ്യമല്ല.",
        "tooltip-ca-nstab-project": "പദ്ധതി താൾ കാണുക",
        "tooltip-ca-nstab-image": "പ്രമാണ താൾ കാണുക",
        "tooltip-ca-nstab-mediawiki": "വ്യവസ്ഥാസന്ദേശം കാണുക",
        "spam_reverting": "$1 എന്നതിലേയ്ക്കുള്ള കണ്ണികളില്ലാത്ത അവസാന നാൾപ്പതിപ്പിലേയ്ക്ക് മുൻപ്രാപനം ചെയ്യുന്നു",
        "spam_blanking": "$1 എന്നതിലേയ്ക്ക് കണ്ണികളുള്ള എല്ലാ നാൾപ്പതിപ്പുകളും ശൂന്യമാക്കുന്നു",
        "spam_deleting": "$1 എന്നതിലേയ്ക്ക് കണ്ണികളുള്ള എല്ലാ നാൾപ്പതിപ്പുകളും മായ്ക്കുന്നു",
-       "simpleantispam-label": "പാഴെഴുത്ത് വിരുദ്ധ പരിശോധന.\nഇത് '''പൂരിപ്പിക്കരുത്'''!",
+       "simpleantispam-label": "പാഴെഴുത്ത് വിരുദ്ധ പരിശോധന.\nഇത് <strong>പൂരിപ്പിക്കരുത്</strong>!",
        "pageinfo-title": "\"$1\" എന്ന താളിന്റെ വിവരങ്ങൾ",
        "pageinfo-not-current": "ക്ഷമിക്കുക, പഴയ നാൾപ്പതിപ്പുകളിൽ ഈ വിവരം പ്രദർശിപ്പിക്കുക അസാദ്ധ്യമാണ്.",
        "pageinfo-header-basic": "അടിസ്ഥാനവിവരങ്ങൾ",
        "pageinfo-robot-index": "അനുവദിച്ചിരിക്കുന്നു",
        "pageinfo-robot-noindex": "അനുവദിച്ചിട്ടില്ല",
        "pageinfo-watchers": "താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
-       "pageinfo-visiting-watchers": "സമàµ\80à´ªà´\95ാല à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´\8eà´\9fàµ\81à´¤àµ\8dà´¤àµ\81à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨, താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
+       "pageinfo-visiting-watchers": "സമàµ\80à´ªà´\95ാല à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´\8eà´\9fàµ\81à´¤àµ\8dà´¤àµ\81à´¨àµ\8bà´\95àµ\8dà´\95à´¿à´¯, താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
        "pageinfo-few-watchers": "{{PLURAL:$1|ശ്രദ്ധിക്കുന്നയാളുടെ|ശ്രദ്ധിക്കുന്നവരുടെ}} എണ്ണം $1 എണ്ണത്തിലും കുറവാണ്",
        "pageinfo-few-visiting-watchers": "സമീപകാല തിരുത്തുകൾ എടുത്തുനോക്കുന്ന, താൾ ശ്രദ്ധിക്കുന്നവർ ഉണ്ടാകാനും ഉണ്ടാകാതിരിക്കാനുമിടയുണ്ട്",
        "pageinfo-redirects-name": "ഈ താളിലേക്കുള്ള തിരിച്ചുവിടലുകളുടെ എണ്ണം",
        "htmlform-cloner-create": "കൂടുതൽ ചേർക്കുക",
        "htmlform-cloner-delete": "നീക്കം ചെയ്യുക",
        "htmlform-cloner-required": "കുറഞ്ഞത് ഒരു വിലയെങ്കിലും നൽകിയിരിക്കണം.",
+       "htmlform-title-badnamespace": "[[:$1]] ഉള്ളത് \"{{ns:$2}}\" നാമമേഖലയിലല്ല.",
+       "htmlform-title-not-creatable": "\"$1\" സൃഷ്ടിക്കാനാവുന്ന തലക്കെട്ടല്ല.",
+       "htmlform-title-not-exists": "[[:$1]] നിലവിലില്ല.",
+       "htmlform-user-not-exists": "<strong>$1</strong> നിലവിലില്ല.",
+       "htmlform-user-not-valid": "<strong>$1</strong> സാധുതയുള്ള ഉപയോക്തൃനാമമല്ല.",
        "sqlite-has-fts": "പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയുള്ള $1",
        "sqlite-no-fts": "പൂർണ്ണ-എഴുത്ത് തിരച്ചിൽ പിന്തുണയില്ലാത്ത $1",
        "logentry-delete-delete": "$3 എന്ന താൾ $1 {{GENDER:$2|മായ്ച്ചിരിക്കുന്നു}}",
        "logentry-newusers-create2": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}",
        "logentry-newusers-byemail": "$3 എന്ന ഉപയോക്തൃ അംഗത്വം $1 {{GENDER:$2|സൃഷ്ടിച്ചിരിക്കുന്നു}}, രഹസ്യവാക്ക് ഇമെയിൽ വഴി അയച്ചു",
        "logentry-newusers-autocreate": "$1 എന്ന ഉപയോക്തൃ അംഗത്വം സ്വയം {{GENDER:$2|സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു}}",
+       "logentry-protect-move_prot": "സംരക്ഷണ സജ്ജീകരണങ്ങൾ $4  എന്നതിൽ നിന്ന് $3 എന്നതിലേക്ക് $1 {{GENDER:$2|മാറ്റി}}",
        "logentry-rights-rights": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്ക്, $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-rights-legacy": "$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-rights-autopromote": "$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയമേവ {{GENDER:$2|ഉയർത്തപ്പെട്ടിരിക്കുന്നു}}",
        "special-characters-title-endash": "ഇം  ഡാഷ്",
        "special-characters-title-emdash": "എം ഡാഷ്",
        "special-characters-title-minus": "വ്യവകലന ചിഹ്നം",
+       "mw-widgets-dateinput-no-date": "തീയതി ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല",
        "mw-widgets-titleinput-description-new-page": "താൾ ഇപ്പോൾ നിലവിലില്ല",
        "mw-widgets-titleinput-description-redirect": "$1 എന്ന താളിലേക്കുള്ള തിരിച്ചുവിടൽ"
 }
index 82d1415..60f05c0 100644 (file)
        "passwordreset": "Нууц үгийг сэргээх",
        "passwordreset-text-one": "Энэ формыг бөглөснөөр түр ашиглах нууц үгийг емайлруу илгээнэ.",
        "passwordreset-text-many": "{{PLURAL:$1|Энэ талбарыг бөглөж түр ашиглах нууц үгээ емайлээр авна.}}",
-       "passwordreset-legend": "Нууц үгээ сэргээх",
        "passwordreset-disabled": "Энэ вики-д нууц үгийг сэргээх боломжгүй байна.",
        "passwordreset-emaildisabled": "Энэ викид емайл ашиглах боломжгүй.",
        "passwordreset-username": "Хэрэглэгчийн нэр:",
        "changeemail-throttled": "Дэндүү олон амжилтгүй нэвтрэх оролдлого хийсэн байна.\n$1 хүлээгээ ахин үзнэ үү.",
        "resettokens": "Токен ресет хийх",
        "resettokens-no-tokens": "Ресет хийх токен ална.",
-       "resettokens-legend": "Токен ресет хийх",
        "resettokens-tokens": "Токен:",
        "resettokens-token-label": "$1 (одоогийн утга: $2)",
        "resettokens-done": "Токен ресет хийлээ.",
        "randompage-nopages": "Дараах {{PLURAL:$2|нэрний зайнд|нэрний зайнд}} хуудас байхгүй байна : $1. \\",
        "randomincategory-category": "Ангилал:",
        "randomincategory-legend": "Ангилалд багтсан дурын хуудас",
+       "randomincategory-submit": "Явах",
        "randomredirect": "Санамсаргүй чиглүүлэгч",
        "randomredirect-nopages": "\"$1\" нэрний зайд чиглүүлэгч байхгүй байна.",
        "statistics": "Статистик мэдээлэл",
        "linksearch-pat": "Хэв маягийг хайх:",
        "linksearch-ns": "Хуудсын төрөл:",
        "linksearch-ok": "Хайх",
-       "linksearch-text": "\"*.wikipedia.org\" зэрэг орлуулагч тэмдэгт хэрэглэх боломжтой.<br />\nДор хаяж дээд түвшиний домайн хэрэгтэй байна, жишээ нь \"*.org\".<br />\nДэмжигдэх протоколууд : <code>$1</code> (эдгээрээс алийг нь ч хайлтад бүү оруул).",
+       "linksearch-text": "\"*.wikipedia.org\" зэрэг орлуулагч тэмдэгт хэрэглэх боломжтой.<br />\nДор хаяж дээд түвшиний домайн хэрэгтэй байна, жишээ нь \"*.org\".<br />\nДэмжигдэх протоколууд : $1 (эдгээрээс алийг нь ч хайлтад бүү оруул).",
        "linksearch-line": "$1 нь $2-с холбогдсон",
        "linksearch-error": "Орлуулагч тэмдэгт хост нэрийн эхлэлд л гарах боломжтой.",
        "listusersfrom": "Хамгийн эхэлж харуулах хэрэглэгч:",
index 0572e0d..88e10c1 100644 (file)
        "pool-timeout": "ताळ्यासाठी वाट पाहण्याची वेळ संपली",
        "pool-queuefull": "सर्व्हरवर ताण आहे.",
        "pool-errorunknown": "अपरिचित त्रुटी",
+       "poolcounter-usage-error": "वापर करतांना त्रूटी $1",
        "aboutsite": "{{SITENAME}}बद्दल",
        "aboutpage": "Project:माहितीपृष्ठ",
        "copyright": "येथील मजकूर $1च्या अंतर्गत उपलब्ध आहे जोपर्यंत इतर नोंदी केलेल्या नाहीत.",
        "disclaimers": "उत्तरदायित्वास नकार",
        "disclaimerpage": "Project: सर्वसाधारण उत्तरदायकत्वास नकार",
        "edithelp": "संपादन साहाय्य",
+       "helppage-top-gethelp": "मदत",
        "mainpage": "मुखपृष्ठ",
        "mainpage-description": "मुखपृष्ठ",
        "policy-url": "Project:नीती",
        "hidetoc": "लपवा",
        "collapsible-collapse": "निपात करा",
        "collapsible-expand": "विस्तार",
+       "confirmable-confirm": " {{GENDER:$1|तिम्हाला}} खात्रिआहे का ?",
        "confirmable-yes": "होय",
        "confirmable-no": "नाही",
        "thisisdeleted": "$1चे अवलोकन किंवा पुनर्स्थापन करायचे ?",
        "filerenameerror": "\"$1\" संचिकेचे \"$2\" असे नामांतर करता आले नाही.",
        "filedeleteerror": "\"$1\" संचिका वगळता आली नाही.",
        "directorycreateerror": "\"$1\" कार्यधारीका (डिरेक्टरी) तयार केली जाऊ शकली नाही.",
+       "directoryreadonlyerror": " \"$1\" हा कोश फक्त वाचण्या साठि आहे.",
+       "directorynotreadableerror": " \"$1\" ह्या कोशाला वाचता आणी लिहिता येते.",
        "filenotfound": "\"$1\" ही संचिका सापडत नाही.",
        "unexpected": "अनपेक्षित मूल्य: \"$1\"=\"$2\"",
        "formerror": "त्रुटी: आवेदन सादर करता आले नाही.",
        "no-null-revision": "\"$1\" या पानाची नविन रिक्त आवृत्ती निर्मिता आली नाही.",
        "badtitle": "खराब शीर्षक",
        "badtitletext": "आपण विनंती केलेले पानाचे शीर्षक अयोग्य, रिकामे अथवा चुकिने जोडलेले आंतर-भाषिय किंवा आंतर-विकि शीर्षक आहे. त्यात,शीर्षकास अयोग्य अशी एक किंवा अधिक चिन्हे आहेत.",
+       "title-invalid-empty": "आपण विनंति केलेले पान हे रिकामे आहे किंवा त्यास केवळ नामविश्वाचे नाव दिलेले आहे.",
+       "title-invalid-utf8": "आपण विनंति केलेले पानाच्या नवात अवैध यु टि ऐफ अक्षरे आहेत",
+       "title-invalid-interwiki": "आपण विनंति केलेले पाना मध्ये आन्तर विकि दुवे आहेत जे षिर्शकात वपरण्यास मनाइ आहे",
+       "title-invalid-talk-namespace": "आपण विनंति केलेले पान उपलब्ध नसलेल्या चर्च्या पानास संबोधित करते",
        "perfcached": "खालील माहिती सयीमधील (कॅशे) असल्यामुळे ती अद्ययावत् नाही.जास्तीतजास्त {{PLURAL:$1|एक प्रतिफळ |$1 प्रतिफळे }} सयीमध्ये असतात.",
        "perfcachedts": "खालील माहिती सयीमधील (कॅशे) आहे व ती  $1 पर्यंत अद्ययावत् आहे. जास्तीतजास्त {{PLURAL:$4|एक प्रतिफळ |$4 प्रतिफळे}} सयीमध्ये असतात.",
        "querypage-no-updates": "सध्या या पानाकरिता नवी अद्यतने अनुपलब्ध केली आहेत.आत्ताच येथील विदा तरोताजा होणार नाही.",
        "preview": "झलक",
        "showpreview": "झलक दाखवा",
        "showdiff": "बदल दाखवा",
-       "anoneditwarning": "'''इशारा:''' तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा अंकपत्ता (आयपी) नोंदला जाईल.",
+       "anoneditwarning": "<strong>इशारा:</strong> तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेले नाही.आपण काही संपादन केले तर, तुमचा अंकपत्ता (आयपी) सार्वजनिक रित्या दृष्य होईल. जर आपण <strong>[$1 सनोंद प्रवेश केला]</strong> किंवा <strong>[$2 खाते उघडले]</strong>,तर आपण केलेली संपादने ही आपल्या नांवाशी संलग्न होतील, त्याशिवाय याचे इतरही फायदे आहेत.",
        "anonpreviewwarning": "\"'''सावधान:''' तुम्ही विकिपीडियाचे सदस्य म्हणून सनोंद-प्रवेश (लॉग-इन) केलेला नाही. या पानाच्या संपादन इतिहासात तुमचा अंकपत्ता (आय.पी. ॲड्रेस) नोंदला जाईल.\"",
        "missingsummary": "'''आठवण:''' आपण संपादन सारांश पुरवलेला नाही.आपण 'जतन करा' वर पुन्हा टिचकी मारली तर, ते त्याशिवायच जतन होईल.",
        "missingcommenttext": "कृपया खाली प्रतिक्रिया भरा.",
        "edit-gone-missing": "नविन पृष्ठ अद्यतन करता आले नाही. ते वगळले असण्याची शक्यता आहे.",
        "edit-conflict": "वादग्रस्त संपादन",
        "edit-no-change": "तुमचे संपादन दुर्लक्षित करण्यात आले आहे, कारण मजकूरात काहीही बदल झालेला नाही.",
+       "postedit-confirmation-created": "पान निर्मित केले",
        "postedit-confirmation-saved": "आपले संपादन जतन करण्यात आले आहे.",
        "edit-already-exists": "नवीन पान तयार करता येऊ शकले नाही.\nया नावाचे पान पूर्वीच अस्तित्वात आहे.",
        "defaultmessagetext": "अविचल संदेश मजकूर",
        "rev-deleted-event": "(क्रिया नोंद वगळली)",
        "rev-deleted-user-contribs": "[सदस्यनाव / अंकपत्ता वगळला - योगदानातुन संपादन लपविले]",
        "rev-deleted-text-permission": "या पानाची आवृत्ती सार्वजनिक विदागारातून '''वगळण्यात आली आहे'''.\n\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळल्याच्या नोंदीत] अधिक तपशील असण्याची शक्यता आहे.",
+       "rev-suppressed-text-permission": "या पानाची आवृत्ती '''दडपली'''.\nआपण ती बघू शकता; [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दडपलेल्यांचा क्रमलेख] येथे त्याची विस्तृत माहिती सापडेल.",
        "rev-deleted-text-unhide": "या पानाचे संस्करण '''वगळले'''.\n [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळलेल्या नोंदी] येथे याची माहिती मिळेल.\nजर आपणास पुढे जावयाचे असल्यास, अजूनही [$1 हे संस्करण बघू शकता].",
        "rev-suppressed-text-unhide": "या पानाचे संस्करण '''दडपले'''.\n [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} दडपलेले क्रमलेख] येथे याची माहिती मिळेल.\nजर आपणास पुढे जावयाचे असल्यास, अजूनही [$1 हे संस्करण बघू शकता].",
        "rev-deleted-text-view": "या पानाची आवृत्ती '''वगळण्यात आली आहे'''.\nती तुम्ही बघू शकता; अधिक तपशील  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} वगळल्याच्या नोंदी] येथे मिळेल.",
        "notextmatches": "कोणत्याही पानातील मजकुराशी जुळत नाही",
        "prevn": "मागील {{PLURAL:$1|$1}}",
        "nextn": "पुढील {{PLURAL:$1|$1}}",
+       "prev-page": "मागील पान",
+       "next-page": "पुढील पान",
        "prevn-title": "मागील $1 {{PLURAL:$1|निकाल}}",
        "nextn-title": "पुढील $1 {{PLURAL:$1|निकाल}}",
        "shown-title": "$1 {{PLURAL:$1|निकाल}} प्रतिपान पहा",
        "linksearch-pat": "शोधण्याचा मजकूर:",
        "linksearch-ns": "नामविश्व:",
        "linksearch-ok": "शोध",
-       "linksearch-text": "\"*.wikipedia.org\" सारखी वाईल्डकार्ड्स वापरायला परवानगी आहे.\nकिमान एक उच्च-स्तरिय डोमेन,उदा.- \"*.org\".<br />गरजेचे आहे.\nसहाय्याचे प्रोटोकॉल्स {{PLURAL:$2|protocol|protocols}}:  \n <code>$1</code>(जर कोणतेही प्रोटोकॉल्स नमूद केल्या गेले नसतील तर http://)हा डिफॉल्ट आहे.",
+       "linksearch-text": "\"*.wikipedia.org\" सारखी वाईल्डकार्ड्स वापरायला परवानगी आहे.\nकिमान एक उच्च-स्तरिय डोमेन,उदा.- \"*.org\".<br />गरजेचे आहे.\nसहाय्याचे प्रोटोकॉल्स {{PLURAL:$2|protocol|protocols}}:  \n $1(जर कोणतेही प्रोटोकॉल्स नमूद केल्या गेले नसतील तर http://)हा डिफॉल्ट आहे.",
        "linksearch-line": "$2 मधून $1 जोडलेले आहे",
        "linksearch-error": "वाईल्डकार्ड्स होस्ट नावाच्या फक्त सुरवातीलाच येऊ शकतात.",
        "listusersfrom": "पुढील शब्दापासून सुरू होणारे सदस्य दाखवा:",
        "emailuser": "या सदस्याला ई-मेल पाठवा",
        "emailuser-title-target": "{{GENDER:$1|सदस्याला}} विपत्र पाठवा",
        "emailuser-title-notarget": "विपत्र (ईमेल) उपयोगकर्ता",
-       "emailpage": "विपत्र (ईमेल) उपयोगकर्ता",
        "emailpagetext": "या {{GENDER:$1|सदस्याला}}विपत्र पाठविण्यास खालील आवेदनाचा आपण वापर करु शकता.\n\nआपल्या [[Special:Preferences|पसंतीक्रमात]] नमूद केलेला विपत्रपत्ता, \"च्या कडून\" पत्त्यात येईल म्हणजे  प्राप्तकर्ता आपल्याला थेट उत्तर देऊ शकेल.",
        "defemailsubject": "{{SITENAME}} \"$1\" सदस्याकडून विपत्र",
        "usermaildisabled": "सदस्य विपत्र निष्क्रिय आहे",
        "tooltip-pt-mycontris": "तुमच्या योगदानांची यादी",
        "tooltip-pt-login": "आपणांस सदस्यत्व घेण्याची विनंती करण्यात येत आहे. सदस्यत्व घेणे अनिवार्य नाही.",
        "tooltip-pt-logout": "सनोंद निर्गम",
+       "tooltip-pt-createaccount": "आम्ही आपणास खाते उघडून सनोंद-प्रवेशास प्रोत्साहीत करत आहे;पण ते अत्यावश्यक नाही.",
        "tooltip-ca-talk": "आशय पानाबद्दलच्या चर्चा",
-       "tooltip-ca-edit": "तà¥\81मà¥\8dहà¥\80 à¤¹à¥\87 à¤ªà¤¾à¤¨ à¤¬à¤¦à¥\8dलà¥\82 à¤¶à¤\95ता. à¤\95à¥\83पया à¤\9cतन à¤\95रणà¥\8dयापà¥\82रà¥\8dवà¥\80 à¤\9dलà¤\95 à¤\95ळ à¤µà¤¾à¤ªà¤°à¥\82न à¤ªà¤¹à¤¾.",
+       "tooltip-ca-edit": "या à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤¸à¤\82पादन à¤\95रा",
        "tooltip-ca-addsection": "नवीन विभाग सुरू करा",
        "tooltip-ca-viewsource": "हे पान सुरक्षित आहे. तुम्ही याचा स्रोत पाहू शकता.",
        "tooltip-ca-history": "या पानाच्या जुन्या आवृत्या.",
        "spam_reverting": "$1शी दुवे नसलेल्या गेल्या आवर्तनाकडे परत उलटवत आहे",
        "spam_blanking": "$1शी दुवे असलेली सर्व आवर्तने,रिक्त केली जात आहेत",
        "spam_deleting": "यातील सर्व आवृत्त्यांचे $1शी दुवे आहेत.गाळत आहे",
-       "simpleantispam-label": "चिखलणी विरोधक तपासणी.\nहे भरू '''नका'''!",
+       "simpleantispam-label": "चिखलणी विरोधक तपासणी.\nहे<strong>भरु नका</strong>!\nहे भरू '''नका'''!",
        "pageinfo-title": "\"$1\" च्याबद्दल माहिती",
        "pageinfo-not-current": "माफ करा, जुन्या अवृतिला माहिती देणे अक्षक्य आहे|",
        "pageinfo-header-basic": "मूलभूत माहिती",
index d208e07..e27a3f4 100644 (file)
        "passwordreset": "Set semula kata laluan",
        "passwordreset-text-one": "Lengkapkan borang ini untuk mengeset semula kata laluan anda.",
        "passwordreset-text-many": "{{PLURAL:$1|Isi salah satu ruangan berikut untuk menerima kata laluan sementara melalui e-mel.}}",
-       "passwordreset-legend": "Set semula kata laluan",
        "passwordreset-disabled": "Ciri set semula kata laluan telah dimatikan di wiki ini.",
        "passwordreset-emaildisabled": "Ciri-ciri e-mel telah dipadamkan di wiki ini.",
        "passwordreset-username": "Nama pengguna:",
        "resettokens": "Set semula token",
        "resettokens-text": "Anda boleh mengeset semula token yang membolehkan akses kepada data peribadi tertentu yang berkaitan dengan akaun anda di sini.\n\nAnda harus melakukannya jika anda tanpa sengaja mengongsinya dengan sesiapa ataupun akaun anda telah dikompromi.",
        "resettokens-no-tokens": "Tiada token untuk diset semula.",
-       "resettokens-legend": "Set semula token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (nilai semasa: $2)",
        "resettokens-watchlist-token": "Token untuk suapan sesawang (Atom/RSS) bagi [[Special:Watchlist|perubahan pada halaman dalam senarai pantau anda]]",
        "randomincategory-nopages": "Tiada halaman di [[:Category:$1]].",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Laman rawak dalam kategori",
+       "randomincategory-submit": "Pergi",
        "randomredirect": "Lencongan rawak",
        "randomredirect-nopages": "Tiada lencongan dalam ruang nama \"$1\".",
        "statistics": "Statistik",
        "nmembers": "$1 ahli",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|ahli}}",
        "nrevisions": "$1 semakan",
-       "nviews": "Dilihat $1 kali",
        "nimagelinks": "Digunakan pada {{PLURAL:$1|sebuah|$1 buah}} laman",
        "ntransclusions": "digunakan pada {{PLURAL:$1|sebuah|$1 buah}} laman",
        "specialpage-empty": "Tiada keputusan bagi laporan ini.",
        "linksearch-pat": "Corak carian:",
        "linksearch-ns": "Ruang nama:",
        "linksearch-ok": "Cari",
-       "linksearch-text": "Kad bebas seperti \"*.wikipedia.org\" dibenarkan.<br />\nMemerlukan sekurang-kurangnya satu domain peringkat tinggi, cth. \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol-protokol}} yang disokong: <code>$1</code> (menjadi http:// jika tiada protokol dinyatakan).",
+       "linksearch-text": "Kad bebas seperti \"*.wikipedia.org\" dibenarkan.<br />\nMemerlukan sekurang-kurangnya satu domain peringkat tinggi, cth. \"*.org\".<br />\n{{PLURAL:$2|Protokol|Protokol-protokol}} yang disokong: $1 (menjadi http:// jika tiada protokol dinyatakan).",
        "linksearch-line": "$1 dipaut dari $2",
        "linksearch-error": "Kad bebas hanya boleh digunakan pada permulaan nama hos.",
        "listusersfrom": "Tunjukkan pengguna bermula pada:",
        "emailuser": "Kirim e-mel kepada pengguna ini",
        "emailuser-title-target": "E-mel {{GENDER:$1|pengguna}} ini",
        "emailuser-title-notarget": "E-mel pengguna",
-       "emailpage": "E-mel pengguna",
        "emailpagetext": "Gunakan borang berikut untuk mengirim pesanan e-mel kepada {{GENDER:$1|pengguna}} ini.\n\nAlamat e-mel yang ditetapkan dalam [[Special:Preferences|keutamaan anda]] akan digunakan sebagai alamat \"Daripada\" dalam e-mel tersebut supaya si penerima boleh membalasnya.",
        "defemailsubject": "E-mel {{SITENAME}} daripada pengguna \"$1\"",
        "usermaildisabled": "E-mel pengguna telah dilumpuhkan",
        "emailccsubject": "Salinan bagi mesej anda kepada $1: $2",
        "emailsent": "E-mel dikirim",
        "emailsenttext": "E-mel anda telah dikirim.",
-       "emailuserfooter": "E-mel ini telah dikirim oleh $1 kepada $2 oleh fungsi \"{{int:emailpage}}\" di {{SITENAME}}.",
+       "emailuserfooter": "E-mel ini telah dikirim oleh $1 kepada $2 oleh fungsi \"{{int:emailuser}}\" di {{SITENAME}}.",
        "usermessage-summary": "Meninggalkan pesanan sistem.",
        "usermessage-editor": "Utusan sistem",
        "watchlist": "Senarai pantau",
        "tooltip-pt-logout": "Log keluar",
        "tooltip-pt-createaccount": "Anda digalakkan untuk membuka akaun dan log masuk; namun begitu ianya tidak diwajibkan",
        "tooltip-ca-talk": "Perbincangan mengenai laman kandungan",
-       "tooltip-ca-edit": "Anda boleh menyunting laman ini. Sila tekan butang 'pralihat' terlebih dahulu sebelum menyimpan.",
+       "tooltip-ca-edit": "Sunting laman ini",
        "tooltip-ca-addsection": "Buka bahagian baru",
        "tooltip-ca-viewsource": "Laman ini dilindungi. Anda boleh melihat sumbernya.",
        "tooltip-ca-history": "Versi-versi terdahulu bagi laman ini.",
index 28c3fe8..3fcfbff 100644 (file)
        "passwordreset": "Irrisettja l-password",
        "passwordreset-text-one": "Imla din il-formola sabiex tirrisettja l-password.",
        "passwordreset-text-many": "{{PLURAL:$1|Imla wieħed mill-oqsma biex tirċievi password temporanja permezz ta' ittra elettronika.}}",
-       "passwordreset-legend": "Irrisettja l-password",
        "passwordreset-disabled": "L-irrisettjar tal-password fuq din il-wiki ġie diżattivat.",
        "passwordreset-emaildisabled": "Karatteristiċi tal-posta elettronika ġew diżattivati fuq din il-wiki.",
        "passwordreset-username": "Isem l-utent:",
        "changeemail-throttled": "Ippruvajt tidħol wisq drabi.\nJekk jogħġbok stenna $1 qabel ma terġa' tipprova.",
        "resettokens": "Irrisettja t-tokens",
        "resettokens-no-tokens": "M'hemm l-ebda ''token'' biex jerġa' jiġi ssettjat.",
-       "resettokens-legend": "Irrisettja t-''tokens''",
        "resettokens-tokens": "''Tokens'':",
        "resettokens-token-label": "$1 (valur attwali: $2)",
        "bold_sample": "Tipa ħoxna",
        "randomincategory-nopages": "M'hemm l-ebda paġna fil-kategorija [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Paġna kwalunkwe fil-kategorija",
+       "randomincategory-submit": "Mur",
        "randomredirect": "Rindirizz kwalunkwe",
        "randomredirect-nopages": "M'hawnx riindirizzi fl-ispazju tal-isem \"$1\".",
        "statistics": "Statistika",
        "nlinks": "{{PLURAL:$1|link|$1 links}}",
        "nmembers": "$1 {{PLURAL:$1|membru|membri}}",
        "nrevisions": "{{PLURAL:$1|reviżjoni|$1 reviżjonijiet}}",
-       "nviews": "{{PLURAL:$1|visita|$1 visiti}}",
        "nimagelinks": "Użat fuq $1 {{PLURAL:$1|paġna|paġni}}",
        "ntransclusions": "użat fuq $1 {{PLURAL:$1|paġna|paġni}}",
        "specialpage-empty": "Dan ir-rapport ma fih l-ebda riżultat.",
        "linksearch-pat": "Mudell ta' tfittxija:",
        "linksearch-ns": "Spazju tal-ismijiet:",
        "linksearch-ok": "Fittex",
-       "linksearch-text": "Tista' tagħmel użu minn metakarattri, per eżempju \"*.wikipedia.org\".<br />\nHuwa neċessarju minn tal-inqas dominju tal-ewwel livell, per eżempju \"*.org\".<br />\nProtokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protokol, dan jiġi awtomatikament definit bħala http://).",
+       "linksearch-text": "Tista' tagħmel użu minn metakarattri, per eżempju \"*.wikipedia.org\".<br />\nHuwa neċessarju minn tal-inqas dominju tal-ewwel livell, per eżempju \"*.org\".<br />\nProtokolli aċċettati: $1 (jekk ma jiġi speċifikat l-ebda protokol, dan jiġi awtomatikament definit bħala http://).",
        "linksearch-line": "$1 hija marbuta mill-paġna $2",
        "linksearch-error": "Il-metakarattri jistgħu jintużaw biss fil-bidu tal-indirizz.",
        "listusersfrom": "Uri utenti li jibdew minn:",
        "emailuser": "Ikteb lil dan l-utent",
        "emailuser-title-target": "Ibgħat lill-{{GENDER:$1|utent}}",
        "emailuser-title-notarget": "Ibgħat ittre lil utent",
-       "emailpage": "Ibgħat messaġġ lil dan l-utent bil-posta elettronika",
        "emailpagetext": "Tista' tuża' din il-formola t'hawn taħt sabiex tibgħat ittra elettronika lil dan l-{{GENDER:$1|utent}}.\nL-indirizz elettroniku li daħħalt fil-[[Special:Preferences|preferenzi]] jidher fl-ispazju \"Minn\" tal-messaġġ, biex dak li jirċievi l-messaġġ ikun jista' jagħtik risposta.",
        "defemailsubject": "Messaġ minn {{SITENAME}} mingħand l-utent \"$1\"",
        "usermaildisabled": "Il-posta elettronika tal-utent mhux attivata",
        "emailccsubject": "Kopja tal-messaġġ tiegħek lil $1: $2",
        "emailsent": "Il-messaġġ intbagħat",
        "emailsenttext": "Il-messaġġ bil-posta elettronika intbagħat.",
-       "emailuserfooter": "Din il-posta elettronika intbgħatet minn $1 lil $2 bl-użu tal-funzjoni \"{{int:emailpage}}\" fuq {{SITENAME}}.",
+       "emailuserfooter": "Din il-posta elettronika intbgħatet minn $1 lil $2 bl-użu tal-funzjoni \"{{int:emailuser}}\" fuq {{SITENAME}}.",
        "usermessage-summary": "Messaġġ tas-sistema",
        "usermessage-editor": "Messaġġier tas-sistema",
        "watchlist": "Lista ta' osservazzjonijiet",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Tajlandiż",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "SSSS-XX-ĠĠ",
+       "mw-widgets-dateinput-placeholder-month": "SSSS-XX"
 }
index 5194094..4e6d608 100644 (file)
        "login-throttled": "သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။\nကျေးဇူးပြု၍ ထပ်မဝင်ခင် စောင့်ပေးပါ။",
        "login-abort-generic": "Login ဝင်ခြင်း မအောင်မြင်ပါ - ထွက်သွားပြီ",
        "loginlanguagelabel": "ဘာသာ: $1",
-       "pt-login": "á\80¡á\80\80á\80±á\80¬á\80\84á\80·á\80ºá\81\80င်ရန်",
+       "pt-login": "á\80¡á\80\80á\80±á\80¬á\80\84á\80·á\80ºá\80\9dင်ရန်",
        "pt-createaccount": "အကောင့် ဖန်တီးရန်",
        "changepassword": "စကားဝှက် ပြောင်းရန်",
        "resetpass_announce": "သင်သည် ယာယီ စကားဝှက်ဖြင့် ဝင်ရောက်ခြင်းဖြစ်သည်။\nစကားဝှက် အသစ်အား ဤနေရာတွင်ရိုက်ပါ :",
index c35e221..71ff9d3 100644 (file)
@@ -11,7 +11,8 @@
                        "Tupikovs",
                        "Urhixidur",
                        "Игорь Бродский",
-                       "아라"
+                       "아라",
+                       "Denö"
                ]
        },
        "tog-underline": "Сюлмавома петнень алга черькстамс:",
@@ -38,7 +39,7 @@
        "tog-shownumberswatching": "Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень",
        "tog-oldsig": "Уликс кедьпутовксось:",
        "tog-fancysig": "Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)",
-       "tog-uselivepreview": "Максомс эриця васнянь невтевкс (варчамонь сон)",
+       "tog-uselivepreview": "Максомс эриця васнянь невтевкс",
        "tog-forceeditsummary": "Невтик монень, мезе сёрмадомс витнемадо-петнемадо ёвтамонь вальминентень",
        "tog-watchlisthideown": "Кекшить монь теевть витневкстнэнь ванома лемрисьменть эйстэ",
        "tog-watchlisthidebots": "Кекшить бот витневкстнэнь-петневкстнэнь ванома лемрисьсенть эйстэ",
        "actions": "Тев теемат",
        "namespaces": "Лемпотмот",
        "variants": "Вариантт",
+       "navigation-heading": "Навигациянь меню",
        "errorpagetitle": "Ильведькс",
        "returnto": "Велявтомс $1 лопантень.",
        "tagline": "{{SITENAME}} -нь пельде",
        "permalink": "Свалшкас сюлмавомапе",
        "print": "Нолдамс",
        "view": "Ванома потмо",
+       "view-foreign": "Ваномс «$1» сайтасонть",
        "edit": "Витнеме-петнеме",
+       "edit-local": "Витнемс-петнемс тескень ёвтнеманзо",
        "create": "Тейть-шкак",
+       "create-local": "Поладомс тескень ёвтнеманзо",
        "editthispage": "Витнемс-петнемс те лопанть",
        "create-this-page": "Теик-шкик те лопанть",
        "delete": "Нардамс",
        "unprotectthispage": "Полавтомс те лопанть ванстоманзо",
        "newpage": "Од лопа",
        "talkpage": "Кортнемс те лопадонть",
-       "talkpagelinktext": "Ð\9aоÑ\80Ñ\82неме",
+       "talkpagelinktext": "Ð\9aоÑ\80Ñ\82нема",
        "specialpage": "Башка тевень лопа",
        "personaltools": "Эсень кедьёнкст",
        "articlepage": "Ваномс потмокслопанть",
-       "talk": "Ð\9aоÑ\80Ñ\82неме",
+       "talk": "Ð\9aоÑ\80Ñ\82нема",
        "views": "Ваномкат",
        "toolbox": "Кедьёнкст",
        "userpage": "Ваномонзо кирдицянть лопанзо",
        "otherlanguages": "Лия кельсэ",
        "redirectedfrom": "(Ютавтозь $1 вельде)",
        "redirectpagesub": "Лиясто ютавтозь лопа",
-       "lastmodifiedat": "Те лопанть меельседе витнезь-петнезь $2, $1.",
+       "redirectto": "Кучомс седе тов:",
+       "lastmodifiedat": "Те лопась меельцеде витнезель-петнезель $1 чистэ, $2 чассто.",
        "viewcount": "Те лопантень совасть {{PLURAL:$1|весть|$1-ксть}}.",
        "protectedpage": "Те лопась ванстомасо",
        "jumpto": "Тёкадемс тей:",
        "view-pool-error": "Кежеть иляст са, сервертнень виест а сатыть ней.\nПекень пек ламо теицят стараить ваномс те лопанть.\nУчокая аламос, мейле одов варчасак тезэнь совамонть.\n$1",
        "pool-queuefull": "Процесспулось пешксе",
        "pool-errorunknown": "Апак содань ильведькс",
+       "poolcounter-usage-error": "Тевс нолдамонь ильведевкс: $1",
        "aboutsite": "{{SITENAME}} ланга",
        "aboutpage": "Project:Эстэдензэ",
        "copyright": "$1-сто муят мезе тесэ, бути лиякс апак ёвта.",
        "disclaimers": "Видечинь кортамотне",
        "disclaimerpage": "Project:Видечинь прякс кортнема",
        "edithelp": "Витнемань-петнемань лезкс",
+       "helppage-top-gethelp": "Лезкс",
        "mainpage": "Прявтлопа",
        "mainpage-description": "Прявтлопа",
        "policy-url": "Project:Политика",
        "privacypage": "Project:Салавачинь политикась",
        "badaccess": "Меревемань асатыкс",
        "badaccess-group0": "Тонеть а мерить теемс мезе вешить.",
-       "badaccess-groups": "Тевтеемась, конань вешить, тееви ансяк «$1» {{PLURAL:$2|1=куронь|куротнень}} теицятненень.",
+       "badaccess-groups": "Тевтеемась, конань вешить, тееви ансяк «$1» {{PLURAL:$2|куронть|куротнень}} теицятненень.",
        "versionrequired": "МедияВикинь $1 версиясь эряви",
        "versionrequiredtext": "МедияВикинь $1 версиясь эряви те лопанть тевс нолдамга.\nВант [[Special:Version|версиянь лопанть]].",
        "ok": "Маштови",
        "retrievedfrom": "Лисмапрясь \"$1\"-сто",
        "youhavenewmessages": "Тонеть сась $1 ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|од сёрма|999=од сёрмат}}",
+       "newmessagesdifflinkplural": "меельце {{PLURAL:$1|полавтнемась|999=полавтнематне}}",
        "youhavenewmessagesmulti": "Од сёрминеть учить эйсэть $1-со",
        "editsection": "витнеме-петнеме",
        "editold": "витнеме-петнеме",
        "hidetoc": "кекшемс",
        "collapsible-collapse": "Вишкалгавтомс",
        "collapsible-expand": "Келейгавтомс",
+       "confirmable-confirm": "{{GENDER:$1|Тон}} истя арсят?",
+       "confirmable-yes": "Алкукс истя",
+       "confirmable-no": "Арась",
        "thisisdeleted": "$1-нть ваномс эли велявтомс мекев?",
        "viewdeleted": "Ванномс $1?",
        "restorelink": "{{PLURAL:$1|нардазь вейке витнема-петнема|нардазь $1 витнемат-петнемат}}",
        "nstab-category": "Категория",
        "nosuchaction": "Истямо тев арась",
        "nosuchspecialpage": "Истямо башка лопа арась",
+       "nospecialpagetext": "<strong>Лопась, конань вешик, арась.</strong>\n\nВант те лемрисьменть [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Ильведькс",
        "databaseerror": "Датабазань ильведькс",
+       "databaseerror-query": "Вешемась: $1",
+       "databaseerror-function": "Функциясь: $1",
        "databaseerror-error": "Ильведькс: $1",
        "laggedslavemode": "Ванок: Кизды, лопасонть материалось таштомсь.",
        "readonly": "Датабазась панжома экшсэ",
        "filerenameerror": "Файлантень а маштови \"$1\" максомс од лем \"$2\".",
        "filedeleteerror": "\"$1\" файлась шукшпряв эзь ливтеве.",
        "directorycreateerror": "\"$1\" директориясь а тееви.",
+       "directoryreadonlyerror": "\"$1\" каталогось ансяк ловнови.",
+       "directorynotreadableerror": "\"$1\" каталогось а ловнови.",
        "filenotfound": "\"$1\" файлась а муеви.",
        "unexpected": "Апак учонь вейкетстямо: \"$1\"=\"$2\".",
        "formerror": "Ильведевкс: Формась а кучови",
        "badarticleerror": "Те лопасонть вешезь тевесь а тееви.",
+       "cannotdelete": "\"$1\" лопась эли файлась эзь нардаво.\nПаряк кияк лия икельдинзеть нардамосонзо.",
        "cannotdelete-title": "\"$1\" лопась а нардави",
+       "no-null-revision": "Од чаво ревизия эзь шкаво-тееве \"$1\" лопанть туртов",
        "badtitle": "Амаштовикс конякс",
        "badtitletext": "Вешезь лопанть лемезэ аволь виде, чаво, эли аволь видестэ сюлмазь келеньйутковань эли интервикинь лем. Паряк, лемсэнть тевс нолдазь анолдавикс тешкст.",
        "viewsource": "Ванномс лисьмапрянть",
        "createacct-submit": "Шкик совамотаркат",
        "createacct-another-submit": "Шкак од совамотарка",
        "createacct-benefit-heading": "«{{SITENAME}}» сайтэнть теизь тонь кондямо ломанть.",
+       "createacct-benefit-body1": "{{PLURAL:$1|витнема-петнема|витнемат-петнемат}}",
        "createacct-benefit-body2": "{{PLURAL:$1|лопа|лопат}}",
        "badretype": "Сёрмадыть салава валот кавксть: сынь аволь вейкеть.",
        "userexists": "Те лемесь уш саезь.\nАрсека эстеть лия, инеськеть.",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.",
        "loginlanguagelabel": "Кель: $1",
        "pt-login": "Совамс",
+       "pt-createaccount": "Шкамс совамо тарка",
        "pt-userlogout": "Лисемс",
        "user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.",
        "changepassword": "Салавань валонь полавтома",
        "resetpass-submit-cancel": "Саемс мекев",
        "resetpass-temp-password": "А куватень совамо валось:",
        "resetpass-expired": "Салававалот таштомсь. Аравтт од салававал, мейле совават.",
-       "passwordreset": "Совамо валонь лиялгавтома",
-       "passwordreset-legend": "Полавтык совамо валонть",
+       "passwordreset": "Одов ладямс салававал",
        "passwordreset-username": "Теиця леметь:",
        "passwordreset-email": "Е-сёрмапаргот:",
        "passwordreset-emailelement": "Теицянь леметь: $1\nНурькине шкань салававалот: $2",
        "currentrevisionlink": "Тевате лиякстомтома",
        "cur": "неень",
        "next": "сыця",
-       "last": "меелÑ\8cÑ\81е",
+       "last": "меелÑ\8cÑ\86е",
        "page_first": "васенце",
        "page_last": "меельсе",
        "histlegend": "Версиянь кочкамось: тешксты невтезь версиятнень,  али лепштик Enter повнэнть.<br />\nЧарькодевтемат: (молиц.) = редямось молиця версиястонть; (и. молиц.) = редямось икеле молиця версиястонть; '''а''' = аволь седе ламо лиякстомтома.",
        "revdelete-legend": "Аравтомс неявомачынь петне",
        "revdelete-hide-text": "Лиякстомтомань текстэсь",
        "revdelete-hide-image": "Кекшемс мезе файлатнесэ",
-       "revdelete-hide-name": "Ð\9aекÑ\88емÑ\81 Ñ\82ев Ñ\82ееманÑ\82Ñ\8c Ð´Ñ\8b Ð½Ð¾Ñ\80овамо Ñ\82аÑ\80канзо",
+       "revdelete-hide-name": "Ð\9aекÑ\88емÑ\81 Ñ\82ев Ñ\82ееманÑ\82Ñ\8c Ð½Ð¾Ñ\80овамо Ñ\82аÑ\80канзо Ð´Ñ\8b Ð¿Ð°Ñ\80амеÑ\82Ñ\80анзо",
        "revdelete-hide-comment": "Витнемс-петнемс сёрмадовксонть зэмензэ.",
        "revdelete-hide-user": "Витницянть-петницянть совамолемезэ/IP сёрмапаргозо",
        "revdelete-radio-same": "(иляк лиякстомто)",
        "gender-male": "Сон витни-петни викилопатнесэ",
        "gender-female": "Сон витни-петни викилопатнесэ",
        "email": "Е-сёрма",
-       "prefs-help-realname": "Алкуксонь леметь (арась мелеть, иляк путо): путсак, ды сон карми неявомо не таркатнесэ, косо тон тев теят.",
+       "prefs-help-realname": "Алкуксонь леметь ... арась мелеть, иляк путо. Путындерясак, леметь карми неявомо не таркатнесэ, косо тон тев теят.",
        "prefs-help-email": "Е-сёрмапаргот а эряви тешкстамс. Сон карми эрявомо ансяк салававалонь одов пачтямсто ёмавтындерясак неень салавань валот.",
        "prefs-help-email-others": "Мелеть сайтянзат, путыка кортамо лопазот е-сёрмапаргот, конань вельде лия ломантне сёрмадовить тенть. Минек вельде е-сёрмапаргот зярдояк а неяви, зярдо лия совицятне сёрмалить тенть.",
        "prefs-help-email-required": "Е-сёрмань адресэть эряви.",
        "action-userrights-interwiki": "витнемс-петнемс лия викитнесэ теицянь видечитнень",
        "action-sendemail": "кучомс е-сёрмат",
        "nchanges": "$1 {{PLURAL:$1|полавтнема|полавтнемат}}",
-       "recentchanges": "Чыяконь полавтнемат-лиякстомтомат",
+       "enhancedrc-history": "путовксонзо-юронзо",
+       "recentchanges": "Чияконь полавтнемат-лиякстомтомат",
        "recentchanges-legend": "Улконь полавтнематнень аравтнемаст",
        "recentchanges-summary": "",
        "recentchanges-feed-description": "Мельга ваннынк кода ульнесть витьнемат-петнемат wiki-сэ те максовксонть.",
        "rcnotefrom": "Ало максозь {{PLURAL:$5|лиякстомтомась, конась|лиякстомтоматне, конатне}} теезь <strong>$3, $4</strong> шкасто саезь (весемеде ламо невтезь <strong>$1</strong>).",
        "rclistfrom": "Невтемс од витьнематнень $3 $2-нть эйстэ саезь.",
        "rcshowhideminor": "$1 апокшкэ витнемат-петнемат",
+       "rcshowhideminor-hide": "Кекшемс",
        "rcshowhidebots": "$1 ботт",
+       "rcshowhidebots-show": "Невтемс",
+       "rcshowhidebots-hide": "Кекшемс",
        "rcshowhideliu": "$1 совавтозь теицят",
+       "rcshowhideliu-hide": "Кекшемс",
        "rcshowhideanons": "$1 лемтеме теицят",
+       "rcshowhideanons-show": "Невтемс",
+       "rcshowhideanons-hide": "Кекшемс",
        "rcshowhidepatr": "$1 кона патрульсэ витьни-петни",
        "rcshowhidemine": "$1 мезе мон витнинь-петнинь",
-       "rclinks": "Невтемс меельсе $1 полавтнемат меельсе $2 чинь перть<br />$3",
+       "rcshowhidemine-show": "Невтемс",
+       "rcshowhidemine-hide": "Кекшемс",
+       "rclinks": "Невтемс меельце $1 полавтнемат меельце $2 чинь перть<br />$3",
        "diff": "кадовикс",
        "hist": "ист",
        "hide": "Кекшемс",
        "minoreditletter": "а",
        "newpageletter": "О",
        "boteditletter": "б",
-       "rc_categories_any": "Кодамо илязо уле",
+       "rc_categories_any": "Кочказетнень эйстэ кодамо-понгсь",
        "newsectionsummary": "/* $1 */ од пелькс",
        "rc-enhanced-expand": "Невтемс седе ламо тень ланга",
        "rc-enhanced-hide": "Кекшемс келейстэ ёвтазенть",
        "uploadbtn": "Ёвкстамс файла",
        "uploadnologin": "Эзить сова",
        "uploaderror": "Ёвкстамсто манявома",
-       "upload-permitted": "Файлань форматт, конат меревить: $1.",
-       "upload-preferred": "Файлань типт, конатне паро мельсэ учовить: $1.",
-       "upload-prohibited": "Файлань типт, конатне кардазь: $1.",
+       "upload-permitted": "Файлань маштовикс {{PLURAL:$2|типесь|типтне}}: $1.",
+       "upload-preferred": "Файлань  {{PLURAL:$2|тип, кона паро мельсэ учови|типть, конатне паро мельсэ учовить}}: $1.",
+       "upload-prohibited": "Файлань {{PLURAL:$2|тип, конась|типть, конатне}} кардазь: $1.",
        "uploadlogpage": "Файлань ёвкстамодо журнал",
        "filename": "Файлань лем",
        "filedesc": "Нурькинестэ",
        "unusedtemplates": "Тевс апак нолда лопа парцунт",
        "unusedtemplateswlh": "лия сюлмавома пенеть",
        "randompage": "Кодамо понгсь лопа",
-       "randompage-nopages": "{{PLURAL:$2|1=Те лем потмосо|Не лем потмотнесэ}}: $1 лопат арасть.",
+       "randompage-nopages": "Лопат арасть {{PLURAL:$2|те лемпотмосонть|неть лемпотмотнесэ}}: $1",
+       "randomincategory-submit": "Адя",
        "randomredirect": "Апак фатя ёнксось",
        "randomredirect-nopages": "\"$1\"  лем потмосонть лияв ютавтомат арасть.",
        "statistics": "Статистикат",
        "withoutinterwiki-submit": "Невтемс",
        "fewestrevisions": "Лопат, конатнесэ весемеде аламо лиякстомтомат",
        "nbytes": "$1 {{PLURAL:$1|байт|байтт}}",
-       "ncategories": "$1 {{PLURAL:$1|1=категория|категорият}}",
-       "nlinks": "$1 {{PLURAL:$1|невтевкс|невтевкснедэ|невтевкст}}",
+       "ncategories": "$1 {{PLURAL:$1|категория|категорият}}",
+       "nlinks": "$1 {{PLURAL:$1|сюлмавома пене|сюлмавома пенеть}}",
        "nmembers": "куронь $1 {{PLURAL:$1|ломань|ломанть}}",
-       "nrevisions": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
-       "nviews": "$1 {{PLURAL:$1|1=ванома потмо|ванома потмот}}",
+       "nrevisions": "$1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "lonelypages": "Лопаурозкэть",
        "uncategorizedpages": "Категориявтомо лопат",
        "uncategorizedcategories": "Категориявтомо категорият",
        "wantedtemplates": "Вешезь лопа парцунт",
        "mostlinked": "Лопат конатнес сехте ламо сюлмавома пенеть невтить",
        "mostlinkedcategories": "Сехте сюлмавозь категориятнень марто",
-       "mostlinkedtemplates": "СеÑ\85Ñ\82е Ð»Ð°Ð¼Ð¾ Ñ\81Ñ\8eлмавома Ð¿Ðµ Ð¼Ð°Ñ\80Ñ\82о Ð»Ð¾Ð¿Ð° Ð¿Ð°Ñ\80Ñ\86Ñ\83нÑ\82",
+       "mostlinkedtemplates": "Ð\9bопаÑ\82, ÐºÐ¾Ð½Ð°Ñ\82не Ñ\81еÑ\85Ñ\82е Ð»Ð°Ð¼Ð¾ Ñ\81Ñ\8eлмавома Ð¿Ðµ Ð¼Ð°Ñ\80Ñ\82о",
        "mostcategories": "Весемеде ламо категория марто лопат",
        "mostimages": "Весемеде ламо сюлмавкс марто файлат",
        "mostrevisions": "Лопат конатнесэ теезь сехте ламо лиякстомтомат",
        "listusers": "Теицят-кить",
        "listusers-editsonly": "Невтемс ансяк витнема-петнема марто совийтнень-лисийтнень",
        "listusers-creationsort": "Аравтомс мельга мельцек шкамо чинь коряс",
-       "usereditcount": "$1 {{PLURAL:$1|1=витнема-петнема|витнемат-петнемат}}",
+       "usereditcount": "$1 {{PLURAL:$1|витнема-петнема|витнемат-петнемат}}",
        "usercreated": "{{GENDER:$3|Шказь}} on $1 чистэ $2 шкасто",
        "newpages": "Од лопат",
        "newpages-username": "Теицянь лем:",
        "nopagetitle": "Истямо вешема лопа арась",
        "nopagetext": "Истямо лопа, конань вешить, арась.",
        "pager-newer-n": "$1 седе {{PLURAL:$1|од|одт}}",
-       "pager-older-n": "{{PLURAL:$1|1=седе ташто 1|седе таштт $1}}",
+       "pager-older-n": "{{PLURAL:$1|седе ташто 1|седе таштт $1}}",
        "suppress": "А ванома",
        "booksources": "Кинигань лисьмапрят",
        "booksources-search-legend": "Вешнемс кинигань лисьмапрят",
        "allpagesprefix": "Невтевкс лопась полаткс марто:",
        "allpages-bad-ns": "{{SITENAME}} сайтсэнть арась лем потмо \"$1\".",
        "categories": "Категорият",
-       "categoriespagetext": "{{PLURAL:$1|1=Те категориясонть|Не категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешень категориятнень]].",
+       "categoriespagetext": "{{PLURAL:$1|Те категориясонть|Неть категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешема категориятнень]].",
        "special-categories-sort-count": "аравтомс цётонь коряс",
        "special-categories-sort-abc": "аравтомс альфавитэнь коряс",
        "sp-deletedcontributions-contribs": "путовксонзо",
        "listgrouprights-removegroup-all": "Весе куротнень нардамс",
        "mailnologin": "Кучомс сёрма парго арась",
        "emailuser": "Кучомс е-сёрма те теицянтень",
-       "emailpage": "Кучт э-сёрма теицянтень",
        "defemailsubject": "{{SITENAME}} е-сёрма \"$1\"-нь пельде",
        "usermaildisabled": "Теицянь е-сёрмась пекстазь",
        "noemailtitle": "Е-сёрма парго арась",
        "nowatchlist": "Ванома керьксэзэть мезеяк апак путо.",
        "watchnologin": "Апак сова",
        "addedwatchtext": "Лопась «[[:$1]]» совавтозь [[Special:Watchlist|ванома потмозот]].\nСеде тов те лопасонть ды мартонзо сюлмавозь кортнема лопасонть теезь витьнематне тешкставтовить те потмонтень, истяжо кармить кикстазь те лопасонть[[Special:RecentChanges|потмо од витнематне]], истя седе шождасто сынь неявить.",
-       "removedwatchtext": "«[[:$1]]» лопась нардавсь [[Special:Watchlist|ванома потмоксстот]].",
+       "removedwatchtext": "«[[:$1]]» Ð»Ð¾Ð¿Ð°Ñ\81Ñ\8c ÐºÐ¾Ñ\80Ñ\82нема Ð»Ð¾Ð¿Ð°Ð½ÐµÐº Ð½Ð°Ñ\80давÑ\81Ñ\8c [[Special:Watchlist|ванома Ð¿Ð¾Ñ\82мокÑ\81Ñ\81Ñ\82оÑ\82]].",
        "watch": "Ванстнемс",
        "watchthispage": "Ванстнемс те лопа мельга",
        "unwatch": "А ванстнемс тень мельга",
        "unwatchthispage": "Лоткамс ванстомадонзо",
        "notvisiblerev": "Лиякстомтомась нардазь",
-       "watchlist-details": "Ванома лемрисьмесэть $1 {{PLURAL:$1|лопа|лопат}}, кортнема лопатнень лангс апак вано.",
-       "wlshowlast": "Ð\9dевÑ\82емÑ\81 Ð¼ÐµÐ»Ñ\8cÑ\81е $1 цяст $2 чить",
+       "watchlist-details": "Ванома лемрисьмесэть {{PLURAL:$1|$1 лопа|$1 лопат}}, кортнема лопатнень лангс апак вано.",
+       "wlshowlast": "Ð\9dевÑ\82емÑ\81 Ð¼ÐµÐµÐ»Ñ\8cÑ\86е $1 цяст $2 чить",
        "watchlist-options": "Ванома потмонь аравтнемат",
        "watching": "Ванома...",
        "unwatching": "Аванома...",
        "exbeforeblank": "чамдомадо икеле эйсэнзэ ульнесь: '$1'",
        "delete-confirm": "Нардамс \"$1\"",
        "delete-legend": "Нардамс",
-       "historywarning": "Ванок: Лопанть, конань нардамонзо пурнат,  лиякстомтомань икелькс $1 {{PLURAL:$1|1=умазо|уманзо}}:",
+       "historywarning": "<strong>Ванок:</strong> Лопанть, конань нардамонзо пурнат,  лиякстомтомань икелькс $1 {{PLURAL:$1|умазо|уманзо}}:",
        "confirmdeletetext": "Кундыть нардамо лопа (эли невтевкс-артовкс) вейтьсэ лиякстомтоматнеде икелькс уманзо марто.<br />\nИнеськеть,  кемекстык, эсеть мелеть коряс тень тейсак, алкукс содат, мезе лияды теде мейле, ды алкукс теят тень видечинть (правилатьнень) коряс, конат сёрмадозь [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Тевень теемась топавтовсь",
        "actionfailed": "Тев теемась эзь лисе",
        "undeleteinvert": "Кочказень таркас апаконь кочкамо",
        "undeletecomment": "Тувталось:",
        "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
-       "undeletedrevisions-files": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1=1 файла|$2 файлат}} вельмевтезь",
-       "undeletedfiles": "{{PLURAL:$1|1=1 файла|$1 файлат}} вельмевтезь",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1 файла|$2 файлат}} вельмевтезь",
+       "undeletedfiles": "{{PLURAL:$1|1 файла|$1 файлат}} вельмевтезь",
        "undelete-search-box": "Вешнемс нардазь лопатнень ютксто",
        "undelete-search-prefix": "Невтемс лопат тестэ саезь:",
        "undelete-search-submit": "Вешнемс",
        "contributions": "{{GENDER:$1|Теицянть}} путовксонзо",
        "contributions-title": "Теицянть путовксонзо $1 таркантень",
        "mycontris": "Монь путовкстнэ",
-       "contribsub2": "$1 ($2) туртов",
+       "contribsub2": "{{GENDER:$3|$1}}-нь кладозо ($2)",
        "uctop": "(течеме чинь)",
        "month": "Ковстонть (ды седе икеле):",
        "year": "Иестэнть (ды седе икеле):",
        "isredirect": "Лиякс витнинк-петнинк лопанть",
        "istemplate": "совавтомс",
        "isimage": "файлань сюлмавома пене",
-       "whatlinkshere-prev": "{{PLURAL:$1|1=икеле|седе икелень $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|1=сыця|сы $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|седе икелень|седе икелень $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|сыця|сыця $1}}",
        "whatlinkshere-links": "← сюлмавомапеть",
        "whatlinkshere-hideredirs": "$1 ютавты козонь-козонь",
        "whatlinkshere-hidetrans": "$1 сюлмавозь пелькстнэнь",
        "whatlinkshere-filters": "Фильтрат",
        "block": "Аравтомс теицянть саймас",
        "unblock": "Нолдамс теицянть саймасто",
-       "blockip": "Аравтомс теицянть саймас",
+       "blockip": "Аравтомс {{GENDER:$1|теицянть}} саймас",
        "blockip-legend": "Аравтомс теицянть саймас",
        "ipaddressorusername": "IP адрес эли теицянь лем:",
        "ipbexpiry": "Таштомома шказо:",
        "ipb-edit-dropdown": "Витнемс-петнемс саймес озавтомань тувталтнэнь",
        "ipb-unblock-addr": "Нолдамс $1-нть сайместэ",
        "ipb-blocklist": "Ваномс саймес озавтозетнень",
-       "ipb-blocklist-contribs": "$1 лопас путовкст",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-нь путовксонзо",
        "unblockip": "Нолдамс теицянть сайместэ",
        "ipusubmit": "Нардамс те саймас аравтоманть",
        "blocklist": "Саймес саень теицят",
        "movepage-page-moved": "\"$1\" лопась печтевтезь \"$2\"-с.",
        "movepage-page-unmoved": "Лопа $1 эзь печтевтеве $2 лопас.",
        "movelogpage": "Печтевтемань журнал",
-       "movesubpage": "{{PLURAL:$1|1=Алкслопа|Алкслопа}}",
-       "movesubpagetext": "Те лопасонть ало невтеви $1 {{PLURAL:$1|1=алкслопа|алкслопа}}.",
+       "movesubpage": "{{PLURAL:$1|Алкслопа}}",
+       "movesubpagetext": "Те лопасонть ало невтеви $1 {{PLURAL:$1|алкслопа|алкслопат}}.",
        "movenosubpage": "Те лопасонть алкслопат арасть.",
        "movereason": "Тувталось:",
        "revertmove": "велявтодо",
        "import-upload-filename": "Файла лемесь:",
        "import-comment": "Арсемат-мельть:",
        "importstart": "Лопатне совавтовить...",
-       "import-revision-count": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
+       "import-revision-count": "$1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "importnopages": "Ёвкстамс лопат арасть",
        "importfailed": "Совавтома тевесь эзь лисе: <nowiki>$1</nowiki>",
        "importcantopen": "Совавтозь файлась эзь панжово",
        "import-noarticle": "Совавтомс лопат арасть!",
        "import-upload": "Ёвкстамс XML датанть",
        "importlogpage": "Импортонть журналось",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
+       "import-logentry-upload-detail": "Совавтозь $1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "tooltip-pt-userpage": "Теицянь лопат",
        "tooltip-pt-mytalk": "Кортнемалопам",
        "tooltip-pt-preferences": "Мейсэ явован лиятнень эйстэ",
        "tooltip-pt-login": "Совавтовлить эсь прят тезэнь, арась мелеть, иля.",
        "tooltip-pt-logout": "Лисемс",
        "tooltip-ca-talk": "Кортавтома пек паро лопадонть",
-       "tooltip-ca-edit": "Те Ð»Ð¾Ð¿Ð°Ñ\81Ñ\8cкак Ð²Ð¸Ñ\82неви-пеÑ\82неви. Ð\90нÑ\81Ñ\8fк, Ð²Ð°Ð½Ñ\81Ñ\82омадо Ð¸ÐºÐµÐ»Ðµ Ñ\8fла Ð²Ð°Ñ\81нÑ\8fнÑ\8c Ð½ÐµÐ²Ñ\82евкÑ\81 Ð¿Ð¾Ð²Ð½Ñ\8dнÑ\82Ñ\8c Ð»ÐµÐ¿Ñ\88Ñ\82ика.",
+       "tooltip-ca-edit": "Ð\92иÑ\82немÑ\81-пеÑ\82немÑ\81 Ñ\82е Ð»Ð¾Ð¿Ð°Ð½Ñ\82Ñ\8c",
        "tooltip-ca-addsection": "Ушодомс од явкс.",
        "tooltip-ca-viewsource": "Те лопась ванстозь. Ули меленк ваномонзо сонзе лисмапрянть.",
        "tooltip-ca-history": "Те лопанть ютазь версиянзо.",
        "tooltip-ca-protect": "Аравтомс те лопанть прянь ванстомас",
        "tooltip-ca-delete": "Нардамс те лопанть, илязо улеяк",
        "tooltip-ca-move": "Ютавтык те лопанть лияв",
-       "tooltip-ca-watch": "ТопавÑ\82омÑ\81 Ñ\82е Ð»Ð¾Ð¿Ð°Ð½Ñ\82Ñ\8c Ñ\82Ñ\8bнк Ð²Ð°Ð½Ð¾Ð¼Ð°Ð»Ð¾Ð¿Ð°Ð½Ñ\8cÑ\82е",
+       "tooltip-ca-watch": "Ð\9fоладомÑ\81 Ñ\82е Ð»Ð¾Ð¿Ð°Ð½Ñ\82Ñ\8c Ñ\8dÑ\81еÑ\82Ñ\8c Ð²Ð°Ð½Ð¾Ð¼Ð° Ð»ÐµÐ¼Ñ\80иÑ\81Ñ\8cменÑ\82енÑ\8c",
        "tooltip-ca-unwatch": "Панемензе (нардамонзо) те лопанть тынк ваномалопастонть",
        "tooltip-search": "Вешнемс вана тестэ {{SITENAME}}",
        "tooltip-search-go": "Истямо лем марто лопа улиндеряй, молемс сезэнь",
        "tooltip-n-randompage": "Макста ловномс кодамо понгсь лопа",
        "tooltip-n-help": "Превс путыть косо.",
        "tooltip-t-whatlinkshere": "Викинь весе лопатне, конат тезэнь сюлмазь",
-       "tooltip-t-recentchangeslinked": "Чыяконь полавтнемат сеть лопатнесэ, конат сюлмазь те лопанть марто",
+       "tooltip-t-recentchangeslinked": "Чияконь полавтнемат сеть лопатнесэ, конат сюлмазь те лопанть марто",
        "tooltip-feed-rss": "\"RSS\" чидикерькске те лопантень",
        "tooltip-feed-atom": "Атом лезкс те лопантень",
        "tooltip-t-contributions": "Варштык путовкс потмонть те теицянть",
        "tooltip-compareselectedversions": "Вант явовкст кавто саезь версиятнень те лопанть.",
        "tooltip-watch": "Топавтомс те лопанть тынк ваномалопаньте",
        "tooltip-upload": "Ушодомс йовкстамонть",
-       "tooltip-rollback": "\"Ð\9cекев ÐºÐµÐ²ÐµÑ\80дема\" Ð¿Ð¾Ð²Ð½Ñ\8dнÑ\82Ñ\8c Ð²ÐµÑ\81Ñ\82Ñ\8c Ð»ÐµÐ¿Ñ\88Ñ\82Ñ\8fмоÑ\81Ñ\8c Ð²ÐµÐ»Ñ\8fвÑ\82Ñ\81Ñ\8bнзе Ñ\82е Ð»Ð¾Ð¿Ð°Ñ\81онÑ\82Ñ\8c Ð¼ÐµÐµÐ»Ñ\8cÑ\81екс теезь витнематнень-петнематнень",
+       "tooltip-rollback": "\"Ð\9cекев ÐºÐµÐ²ÐµÑ\80дема\" Ð¿Ð¾Ð²Ð½Ñ\8dнÑ\82Ñ\8c Ð²ÐµÑ\81Ñ\82Ñ\8c Ð»ÐµÐ¿Ñ\88Ñ\82Ñ\8fмоÑ\81Ñ\8c Ð²ÐµÐ»Ñ\8fвÑ\82Ñ\81Ñ\8bнзе Ñ\82е Ð»Ð¾Ð¿Ð°Ñ\81онÑ\82Ñ\8c Ð¼ÐµÐµÐ»Ñ\8cÑ\86екс теезь витнематнень-петнематнень",
        "tooltip-undo": "\"Велявтомс мекев\" велявтсы витнемань-петнемань тевенть ды панжсы васнянь невтемань формасо.\nСонзэ вельде маштови поладомс полавтомадо тувтал.",
        "tooltip-preferences-save": "Ванстомс эсень аравтоматнень",
        "tooltip-summary": "Сёрмадт нурькинестэ совавтозденть",
-       "anonymous": "{{SITENAME}} сайтэнть лемтеме {{PLURAL:$1|1=теицязо|теицянзо}}",
+       "anonymous": "{{SITENAME}} сайтэнть лемтеме {{PLURAL:$1|теицязо|теицянзо}}",
        "siteuser": "{{SITENAME}}-нь теиця $1",
        "lastmodifiedatby": "Меельседе те лопанть полавтызе $3 $2, $1.",
        "othercontribs": "$1-нь важодеманзо лангс нежедезь.",
        "others": "лият",
-       "siteusers": "{{SITENAME}} сайтэнть {{PLURAL:$2|1=теицязо|теицянзо}} $1",
+       "siteusers": "{{SITENAME}} сайтэнть {{PLURAL:$2|теицязо|теицянзо}} $1",
        "creditspage": "Лопасонть кинь путовксонзо",
        "spamprotectiontitle": "Шукшто ванстома филтра",
        "spambot_username": "MediaWiki-нь шукшто ванькскавтома",
        "previousdiff": "← Седе икелень верзиязо",
        "nextdiff": "Од верзиязо →",
        "thumbsize": "Кенжешканть покшолмазо:",
-       "widthheightpage": "$1 × $2, {{PLURAL:$3|1=лопа|$3 лопат}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|лопа|лопат}}",
        "file-info": "файлонть-путовксонть сталмозо: $1, MIME типезе: $2",
        "file-info-size": "$1 × $2 пиксельть, файлонть-путовксонть сталмозо: $3, MIME типезе: $4",
        "file-nohires": "Арась версия покш разрешения марто.",
        "autosumm-new": "Шкавсь-теевсь од лопа $1 марто",
        "watchlistedit-normal-title": "Витнемс-петнемс ванстома лопанть",
        "watchlistedit-normal-submit": "Нардамс конякстнэнь",
-       "watchlistedit-normal-done": "{{PLURAL:$1|1=1 конякс|$1 конякст}} нардазь ваномань лопастот:",
+       "watchlistedit-normal-done": "{{PLURAL:$1|1 конякс нардазель|$1 конякст нардазельть}} ваномань лопастот:",
        "watchlistedit-raw-title": "Витнеме-петнеме верек ваномалопанть",
        "watchlistedit-raw-legend": "Витнеме-петнеме верек ваномалопанть",
        "watchlistedit-raw-titles": "Конякст:",
        "watchlistedit-raw-submit": "Мезе мельга ванстнят, спискаст одкстомтомс",
-       "watchlistedit-raw-added": "Поладозь {{PLURAL:$1|1=1 конякс|$1 конякст}}:",
-       "watchlistedit-raw-removed": "{{PLURAL:$1|1=1 конякс нардазь|$1 конякст нардазь}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|1 конякс поладозель|$1 конякст поладозельть}}:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|1 конякс нардазель|$1 конякст нардазельть}}:",
        "watchlisttools-view": "Лиякстоматьне лопатнесэ потмоксстонть",
        "watchlisttools-edit": "Ваномс ды витнемс-петнемс мезе мельга ванстнят",
        "watchlisttools-raw": "Витнеме-петнеме верек ваномалопанть",
        "duplicate-defaultsort": "'''Ванок!''' Рядс аравтомань те \"$2\" панжомась саеви те \"$1\" панжомадо икеле.",
        "version": "Версия",
-       "version-skins": "Ð\9bангт",
+       "version-skins": "Ð\90Ñ\80авÑ\82озÑ\8c Ð»ангт",
        "version-specialpages": "Башка тевень лопат",
        "version-variables": "Полавтневикс тевть",
        "version-other": "Лия",
        "version-hook-name": "Кечказонть лемезэ",
        "version-hook-subscribedby": "Сёрмадстызе",
        "version-version": "($1)",
-       "version-license": "Лицензия",
+       "version-license": "MediaWiki лицензиясь",
        "version-software": "Нолдань программат",
        "version-software-product": "Шкавкс-нолдавкс",
        "version-software-version": "Верзия",
        "api-error-filename-tooshort": "Керьмазлементь а саты кувалмозо",
        "api-error-illegal-filename": "Керьмазлемесь а маштови.",
        "api-error-unknownerror": "Апак содань ильведевкс: «$1».",
-       "duration-seconds": "$1 {{PLURAL:$1|1=секунда|секундат}}",
-       "duration-minutes": "$1 {{PLURAL:$1|1=минут|минутт}}",
-       "duration-hours": "$1 {{PLURAL:$1|1=цяс|цяст}}",
-       "duration-days": "$1 {{PLURAL:$1|1=чи|чить}}",
-       "duration-weeks": "$1 {{PLURAL:$1|1=тарго|таргот}}",
-       "duration-years": "$1 {{PLURAL:$1|1=ие|иеть}}",
-       "duration-decades": "$1 {{PLURAL:$1|1=кеменьие|кеменьиеть}}",
-       "duration-centuries": "$1 {{PLURAL:$1|1=пинге|пингеть}}",
-       "duration-millennia": "$1 {{PLURAL:$1|1=тёжтьие|тёжтьиеть}}",
+       "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|тёжтьие|тёжтьиеть}}",
        "expand_templates_preview": "Васнянь неевтезэ",
        "special-characters-group-latin": "Латиница",
        "special-characters-group-symbols": "Тешкстт",
index 5708727..432b416 100644 (file)
        "otherlanguages": "بقیه زوون‌ئون",
        "redirectedfrom": "($1 جه بموئه)",
        "redirectpagesub": "گجگی‌بَیتـِن",
+       "redirectto": "دکشی‌بیّه به:",
        "lastmodifiedat": "این صفحه ره آخرین بار این گادر دچینه:\n$2، $1",
        "viewcount": "این صفحه {{PLURAL:$1|ات|$1}} بار بدی‌یه بیّه",
        "protectedpage": "صفحه محافظت‌بَیی",
        "aboutpage": "Project:درباره",
        "copyright": "این صفحه ره بَنوشته‌ئون  $1  زیر شِمه دسـت دَرنه.",
        "copyrightpage": "{{ns:project}}:کـوپـی‌راسـت‌ئون",
-       "currentevents": "خـَوِرون",
+       "currentevents": "تازÙ\87 Ø®Ù\80Ù\8eÙ\88Ù\90رÙ\88Ù\86",
        "currentevents-url": "Project:خورون",
        "disclaimers": "تکذیب‌نومه‌ئون",
        "disclaimerpage": "Project:تکذیب‌نومه",
        "userlogin-yourname-ph": "شه کاروری نوم ره بنویسین",
        "yourpassword": "شمه پسورد",
        "userlogin-yourpassword": "رمز",
+       "userlogin-yourpassword-ph": "اتا پسورد باوّین",
+       "createacct-yourpassword-ph": "اتا پسورد باوّین",
        "yourpasswordagain": "پسورد ره دِباره بنویس",
+       "createacct-yourpasswordagain": "پسورد ره دِباره باوّین",
+       "createacct-yourpasswordagain-ph": "پسورد ره دِباره باوّین",
        "remembermypassword": "مه رمز ره (تا حداکثر $1 {{PLURAL:$1|روز|روز}}) این مرورگر سر یاد نکان",
+       "userlogin-remembermypassword": "مه ره سایت دله دار",
        "yourdomainname": "شمه کاروری نوم",
        "login": "دله بوردن",
        "nav-login-createaccount": "دله بوردن / عضو بیّن",
        "logout": "دربوردن",
        "userlogout": "دربوردن",
        "notloggedin": "سیستم ره دله نیه مونی",
+       "userlogin-noaccount": "عضو نی؟",
+       "userlogin-joinproject": "{{SITENAME}} دله ثبت‌نوم هاکنین!",
        "nologin": "عضو نی؟ $1.",
        "nologinlink": "عضو بواشین",
        "createaccount": "ترنه حساب وا هکاردن",
        "gotaccount": "عضو هسنی؟ $1.",
        "gotaccountlink": "بورین دله",
        "userlogin-resetlink": "دله بموئن ِجزئیات ره یاد هاکردی؟",
+       "userlogin-resetpassword-link": "شه پسوُرد ره یاد بکاردنی؟",
+       "userlogin-helplink2": "لاگین وسّه کومِک بَییتن",
+       "createacct-emailoptional": "ایمیل (اختیاری)",
+       "createacct-email-ph": "شه ایمیل ره باوّین",
        "createaccountmail": "ایمیل جه",
        "createaccountreason": "دلیل:",
+       "createacct-captcha": "امنیتی چک",
+       "createacct-imgcaptcha-ph": "این بنویشته‌یی که بالا وینّی ره بنویسین",
+       "createacct-submit": "شه اکانت ره بسازین",
+       "createacct-benefit-heading": "{{SITENAME}} ره شِمه واری آدِمون بِساتنه",
+       "createacct-benefit-body1": "{{PLURAL:$1|دچی‌ین}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحه}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|کارور}} اخیر",
        "badretype": "دِتا پسوردی که بنویشتی اتجور نینه",
        "userexists": "کاروری نومی که بخاستنی وجود داشته.\nخواهشأ ات نوم دیگه انتخاب هاکنین.",
        "loginerror": "دله نشی‌یه",
        "accountcreatedtext": "کاروری نوم، $1 بساته بیّه.",
        "loginlanguagelabel": "زوون: $1",
        "pt-login": "دله بموئن",
+       "pt-login-button": "دله بموئن",
        "pt-createaccount": "عضو بواشین",
        "pt-userlogout": "دربوردن",
        "newpassword": "نو پسورد:",
+       "passwordreset": "پسورد ِتغییر",
        "passwordreset-username": "کاروری نوم:",
        "passwordreset-domain": "دامنه:",
        "passwordreset-capture": "گت ایمیل سِراق هدائه بَواشه؟",
        "accmailtitle": "پسورد ره برسِنیمی.",
        "accmailtext": "اتا تصادفی پسور بساته بیّه [[User talk:$1|$1]] وسّه $2 سَر برسِنی‌یه بیّه.\n\nاین ترنه کاروری حساب ِپسور، سامانه دله بموئن په، ''[[Special:ChangePassword|ات‌تی]]'' بتونده عوض بوو.",
        "newarticle": "(ترنه)",
+       "newarticletext": "شما اتا لینک ره دمبال هاکردنی و اتا صفحه جه برسینی که هنتا وجود ندانه.\nصفحه ره بساتن وسّه، این کادر دله بنویسین. (ویشته دونستن وسه [$1 راهنما صفحه] ره هارشین)\nاگه اشتباهی این صفحه جه سَر دَربیاردنی، «back» دُکمه ره جِِق هادین.",
        "noarticletext": "این صفحه اسا هیچ بنویشته‌یی ندانّه.\nشما بتونّی دیگه صفحه‌ئون دله [[Special:Search/{{PAGENAME}}|این صفحه ره چرخه‌تو هاکنین]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌ئون ره چرخه‌تو هاکردن]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} این صفحه ره دَچینین]</span>.",
        "noarticletext-nopermission": "این صفحه اسا هیچ بنویشته‌یی ندانّه.\nشما بتونّی دیگه صفحه‌ئون دله [[Special:Search/{{PAGENAME}}|این صفحه ره چرخه‌تو هاکنی]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهه‌ئون ره چرخه‌تو هاکنی]</span> ولی اجازه ندانّی صفحه ره بسازی.",
        "blocked-notice-logextract": "دسترسی اینتا کارور الآن دوستوئه.\nآخرین مورد سیاهه قطع دسترسی زیر بموئه:",
        "previewnote": "شِمه یاد بوئه که اینتا اتا پیش‌نمایِش هسه. \n شِمه دگاردسته‌ئون جانـَکِته که و‌نه، ونه اِسا ذخیره‌بیّـِن دوکمه ره بَزنین!",
        "editing": "درحال  $1 ره دچی‌ین",
+       "creating": "$1 ِبساتن",
        "editingsection": "دچی‌ین $1 (تیکه)",
        "editingcomment": "$1 دچی‌ین(نو تیکه)",
        "yourtext": "شمه بنویشته",
        "templatesusedpreview": "{{PLURAL:$1|شابلون|شابلونای}} استفاده بَیی این پیش‌نمایش دله:",
        "template-protected": "(زلفِن بزوئه)",
        "template-semiprotected": "(پچوک زلفن بزه)",
+       "hiddencategories": "این صفحه {{PLURAL:$1|اتا مخفی رج|$1تا مخفی رج}} دله دره:",
        "permissionserrorstext-withaction": "ته اجازهٔ $2 ره به {{PLURAL:$1|دلیل|دلایل}} رو به رو ندانی:",
        "recreate-moveddeleted-warn": "'''هشدار: ته دری اتا صفحه ره نویسنی که قبلا پاک بیّه.'''\n\nشه فکر هاکن که اینتا کار که دری کانده درسته یا نا؟\nاینجه توندی پاک بیی صفحه ره هارشی:",
        "moveddeleted-notice": "اینتا صفحه پاک بی بی‌یه\nاینجه بتوندی قبلی صفحه که پاک بیّه ره هارشی",
        "log-fulllog": "بدی‌ین سیاهه کامل",
        "edit-gone-missing": ".شما نتوندی صفحه ره دباره هارشی\nاحتمالا صفحه پاک بیه.",
        "edit-conflict": "دِ نفر با هم درنه نویسنه.\nاتا ته هستی.",
+       "viewpagelogs": "سیاهه‌ئون ِسِراق هدائن این صفحه وسّه",
+       "currentrev-asof": "اِسایی نسخه تا $1",
        "revisionasof": "دچی‌یه‌ئونی که $1 جا دکتنه",
+       "revision-info": "$1 ِنسخه که {{GENDER:$6|$2}}$7 دَچی‌یه",
        "previousrevision": "→ پیشی دگاردسته‌ئون",
+       "nextrevision": "جدیدته نسخه ←",
+       "currentrevisionlink": "اِسایی نسخه ره هارشی‌ین",
        "cur": "إسا",
        "last": "تاریخچه",
        "histfirst": "کـوهـنـه تـریـن",
        "revdel-restore": "دیاری تغییر هدائن",
        "mergehistory": "صفحه‌ئون تاریخچه ره اتا هاکردن",
        "revertmerge": "سِوا هاکردن",
+       "history-title": "$1: دچی‌یه‌ئون ِتاریخچه",
+       "difference-title": "$1: نسخه‌ئون ِفرق",
        "lineno": "بند  $1:",
        "editundo": "واچی‌ین",
+       "diff-multi-sameuser": "({{PLURAL:$1|اتا میونی نسخه|$1تا میونی نسخه}}ِ همین کارور جه سِراق هِدا نیّه.)",
        "searchresults": "بچرخستن ِجوابون",
        "searchresults-title": "چرخه‌ئوی نتیجه «$1» وسّه",
        "prevn": "پـیـشـیـن {{PLURAL:$1|$1}}",
        "nextn": "تا پَس‌تر {{PLURAL:$1|$1}}",
-       "nextn-title": "$1 بعدی {{PLURAL:$1|نتیجه|نتیجه}}",
-       "shown-title": "$1 ِ{{PLURAL:$1|نتیجه|نتیجه}} سِراق هِدائن هر صفحه دله",
+       "nextn-title": "$1 {{PLURAL:$1|نتیجه}} بعدی",
+       "shown-title": "$1 ِسِراق هِدائن {{PLURAL:$1|نتیجه}} هر صفحه دله",
        "viewprevnext": "هارشائن ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-new": "'''« [[:$1]] » ِ صفحه ره این ویکی دله بساجین!'''",
+       "searchmenu-new": "<strong>«[[:$1]]» ِصفحه ره این ویکی دله بسازین!</strong> {{PLURAL:$2|0=البته بتونّی ونه چرخه‌تو (=جستجو) نتیجه ره هم هارشین.|البته بتونّی ونه چرخه‌تو (=جستجو) نتایج ره هم هارشین.}}",
        "searchprofile-articles": "بنویشته‌ئون صفحه",
        "searchprofile-images": "مالتی‌مدیا",
        "searchprofile-everything": "همه‌چی",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|تازه بساته صفحه‌ئون]] ره هم هارشین)",
        "rclistfrom": "نِمایش تازه‌دگاردسته‌ئون با شروع از $3 $2",
        "rcshowhideminor": "پچیک دچی‌یه‌ئون $1",
+       "rcshowhideminor-show": "سِراق هِدائِن",
        "rcshowhideminor-hide": "پنهون هاکن",
        "rcshowhidebots": "ربوت‌ئون $1",
        "rcshowhidebots-show": "سِراق هاده",
+       "rcshowhidebots-hide": "پنهون هاکن",
        "rcshowhideliu": "ثبت‌نوم هاکرده کارورون $1",
        "rcshowhideliu-hide": "پنهون هاکن",
        "rcshowhideanons": "ناشناس ِکارورون $1",
+       "rcshowhideanons-show": "سِراق هِدائِن",
        "rcshowhideanons-hide": "پنهون هاکن",
        "rcshowhidepatr": "گشت‌بخارد ِدچی‌یه‌ئون $1",
        "rcshowhidemine": "مه دچی‌یه‌ئون $1",
+       "rcshowhidemine-show": "سِراق هِدائِن",
        "rcshowhidemine-hide": "پنهون هاکن",
        "rclinks": "نـِشون هـِدائن  $1 پایانی دَچی‌‌یه‌ئون، $2 اِسـا روز ره دلـه؛ $3",
        "diff": "فرق",
        "minoreditletter": "جز",
        "newpageletter": "نو",
        "boteditletter": "ربات",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پس از تغییر",
        "newsectionsummary": "/* $1 */ نو تیکه",
        "recentchangeslinked": "واری دأچیـه‌ن‌ئون",
        "recentchangeslinked-feed": "واری دچی‌یه‌ئون",
        "recentchangeslinked-toolbox": "واری دچی‌یه‌ئون",
        "recentchangeslinked-title": "مرتبط تغییرات $1 جه",
+       "recentchangeslinked-summary": "این بـِن فهرستی تازه دگاردسته‌ئونی که این صفحه جه لینک دارنه (یا ونه رج دله درنه) جه وینّی.\nصفحه‌هایی که [[Special:Watchlist|شمه دمبال‌هاکرده‌ئون لیست]] دله دَواشه '''پررنگ''' سِراق هِدا وانه.",
        "recentchangeslinked-page": "صفحه ایسم:",
        "recentchangeslinked-to": "تغییرات صفحه‌ئونی که این صفحه جه ربط دارنه ره سِراق هِدائن",
        "upload": "باربی‌یشتن فـایـل",
        "randompage": "شانسی صفحه",
        "statistics": "آمار",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
+       "nmembers": "$1 {{PLURAL:$1|عضو}}",
        "specialpage-empty": "این صفحه دله هچّی دَنی‌یه",
        "unusedcategories": "کـار نـأزو رج‌ئون",
        "unusedimages": "کـار نأزو فایل‌ئون",
        "move": "دکش هاکردن",
        "pager-newer-n": "{{PLURAL:$1|أتـا نـه‌ته‌ر|$1 تـا نـه‌ته‌ر}}",
        "pager-older-n": "{{PLURAL:$1|أتـا کـوهـنـه‌ته‌ر|$1 تـا کوهـنـه‌ته‌ر}}",
+       "booksources": "کتابی منابع",
        "booksources-search-legend": "بگردستن منابع کتاب",
+       "booksources-search": "چرخه‌تو",
        "booksources-text": "زیر فهرستی از لینکا به وبگاه‌ئون دیگه دره که کتاب‌ئون نو و دست دوم روشنّه و ممکنه اطلاعات ویشتری راجع به کتاب مورد نظر دارِن:",
        "specialloguserlabel": "کارور:",
        "log": "سیاهه‌ها",
        "listgrouprights-members": "(کارورون لیست)",
        "mailnologintext": "برای برسنی‌ین پوست الکترونیکی به کارورون دیگه ونه [[Special:UserLogin|بورین سامانه دله]] و نشونی پوست الکترونیکی معتبری تو [[Special:Preferences|ترجیحات]] خادت ره داشته بایی.",
        "emailuser": "این کارور وسّه ایمیل بَرسِن",
-       "emailpage": "ئـی-مه‌یـل ای کـارور وه‌سه",
        "watchlist": "مه دمبال‌هاکرده‌‌ئون ِلیست",
        "mywatchlist": "دمبال‌هاکرده‌ئون فهرست",
        "watchnologin": "سیستم ره دله نی ئه موئین",
        "dellogpage": "وه ره بییته‌ئون گوزارش",
        "rollback": "دچی‌یه‌ئون ره واچی‌ین",
        "rollbacklink": "واچی‌ین",
+       "rollbacklinkcount": "وادچی‌ین $1 {{PLURAL:$1|دچی‌یه}}",
        "revertpage": "\"چـیـزونی که [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) دأچـیـه ده‌گـه‌ره‌س بـأیـه هـأمونـتـایی که [[User:$1|$1]] ای وألگ ده‌لـه، پـایـانی بـار هـه‌کـارده\"",
        "revertpage-nouser": "\"چیزونی که (ونـه کـاروری نـوم پـاک بَیّه) دچی‌یه دگـاردسته بیّه همونتایی که [[User:$1|$1]] آخرسری دچی‌ین دلـه هاکرده\"",
        "rollback-success": "چیزونی که $1 دچی‌ین دگاردسته بیّه همونتایی که $2 آخرسری دچی‌ین دلـه هاکرده",
+       "protectlogpage": "زلفن بزوئن ِسیاهه",
        "protectedarticle": "«[[$1]]» ره محافظت هاکرده",
        "modifiedarticleprotection": "«[[$1]]» محافظت تنظیمات ره تغییر هدائه",
        "movedarticleprotection": "«[[$2]]» محافظت تنظیمات ره «[[$1]]» رو منتقل هاکرده",
        "mycontris": "مه کایری‌ئون",
        "contribsub2": "$1 ($2) وه‌سه",
        "uctop": "(سر)",
+       "month": "این ماه (و پیش از اون) دله:",
+       "year": "این سال (و پیش از اون) دله:",
        "sp-contributions-newbies": "نـه وا بـأیـه ئـه‌کـانـت‌ئون دأچـیـه‌ن‌ئون ره نـه‌شـون هـاده",
        "sp-contributions-talk": "گپ",
        "sp-contributions-username": "IP نـه‌شـونـی یا کـاروری‌نوم",
        "whatlinkshere-title": "وألـگ‌ئونی که \"$1\" ره لـیـنک هه‌دانه",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "اینان صفحه‌ئون به '''[[:$1]]''' لینک هدانه:",
+       "isredirect": "دکشی‌ین صفحه",
+       "istemplate": "تراگنجانش‌ئون",
+       "isimage": "فایل ِلینک",
        "whatlinkshere-prev": "{{PLURAL:$1|پـیـشـیـن|$1 تـای پـیـشـیـن}}",
        "whatlinkshere-next": "{{PLURAL:$1|پَس|$1 تا پَس‌تر}}",
        "whatlinkshere-links": "← لـیـنـک‌ئون",
        "newtitle": "ترنه نوم:",
        "movepage-moved": "'''ای «$1» ولـگ،  بورده «$2» ره.'''",
        "movetalk": "«گپ» صفحه هم، اگه وانه، بوره.",
+       "movelogpage": "دکشی‌ین ِسیاهه",
        "revertmove": "واچـیـه‌ن",
        "delete_and_move_confirm": "أره، پاک هاکه‌ن وه ره",
        "export": "دأیابأبه‌رده‌ن ولـگ‌ئون",
        "tooltip-pt-logout": "سیستم جه دأیابـوری",
        "tooltip-pt-createaccount": "شِما ره پیشنهاد کامبی که اتا کاروری حیساب بسازین و لاگین بَواشین؛ البته این کار اختیاری هسته.",
        "tooltip-ca-talk": "این صفحه خَوری گپ بَزوئن",
-       "tooltip-ca-edit": "شِما بتوندی این صفحه ره دَچینی.",
+       "tooltip-ca-edit": "شِما بتوندی این صفحه ره ویکی‌تکست جه دَچینی.",
        "tooltip-ca-addsection": "أتـا نـه گـب را دأکـه‌تـه‌ن",
        "tooltip-ca-viewsource": "این صفحه ره نتوندی دَچینی.\nشِما بِتوندی ونه منبع ره هارشی.",
        "tooltip-ca-history": "کهنه دگاردسته‌ئونی که این صفحه دله دکته",
        "tooltip-ca-delete": "این صفحه ره پاک هاکردن",
+       "tooltip-ca-move": "دکشی‌ین اینتا صفحه",
        "tooltip-ca-watch": "این صفحه ره شه دمبال‌هاکردن لیست دله بی‌یشتن",
        "tooltip-search": "{{SITENAME}} ره چرخه‌تو",
        "tooltip-search-go": "بـور اتـا ولـگـی کـه وه‌نـه نـوم هـأمـیـنـتـا بـوئـه",
        "tooltip-n-mainpage": "گت صفحه ره بدی‌ین",
        "tooltip-n-mainpage-description": "گَت ِصفحه ره هارشائن",
        "tooltip-n-portal": "اینجه بتونّی بقیه جه کومک بَیرین یا سؤال هاکنین",
-       "tooltip-n-currentevents": "تازه چی‌ئون درباره بدونستن",
+       "tooltip-n-currentevents": "تازه اخبار ره بخوندِستن",
        "tooltip-n-recentchanges": "تازه دچی‌یه‌ئون ره لیست",
-       "tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
+       "tooltip-n-randompage": "اتا شانسی صفحه بَدی‌ین",
        "tooltip-n-help": "أتـا جـا کـه...",
        "tooltip-t-whatlinkshere": "هأمو ولـگ‌ئونی که ایجه ره لینک هه‌دانه",
        "tooltip-t-recentchangeslinked": "اِسایی دِگاردسته‌ئون ِصفحه‌ئون که این صفحه جه لینک دارنه",
        "tooltip-ca-nstab-main": "بدی‌ین ِصفحه",
        "tooltip-ca-nstab-user": "کاروری صفحه ره بَدی‌ین",
        "tooltip-ca-nstab-media": "مدیا صفحه هارشی‌ین",
-       "tooltip-ca-nstab-special": "اینتا اتا شا صفحه هسته که شِما نتوندی وه ره دچینی",
+       "tooltip-ca-nstab-special": "اینتا اتا شا صفحه هسته که شِما نتوندی وه ره دچینین",
+       "tooltip-ca-nstab-project": "پروژه‌ی ِصفحه ره بدی‌ین",
        "tooltip-ca-nstab-image": "عکس ِصفحه ره بدی‌ین",
        "tooltip-ca-nstab-template": "شـابـلـون بـأویـنـه‌ن",
        "tooltip-ca-nstab-category": "رج ره بدی‌ین",
        "tooltip-preview": "شـه ده‌گـه‌ره‌سـه‌ئون ره پـیـشـاپـیـش بـأویـنـه‌ن،\n خـا‌هـه‌ش بـونـه، شـه کـارئون ره جـا دأکـه‌تـه‌ن پـیـش، ای ره کـار بـأزه‌نـی.",
        "tooltip-diff": "تغییراتی که ته هِدایی ره سِراق هِدائن",
        "tooltip-rollback": "«دِگاردنی‌ین» اون دچی‌یه(ئون) که آخرین نفر انجام هِدائه ره اتا کلیک جه وَرگِردنانده.",
+       "tooltip-undo": "«واچی‌ین» این دچی‌یه ره خنثی کانده و دچی‌ین ِجعبه ره پیش-پیش سِراق هِدائِن ِحالت دله وا کانده تا شه دچی‌یه‌ئون ِدلیل ره اضافه هاکنین.",
        "tooltip-summary": "خلاصه بنویسین",
        "siteusers": "$1، {{PLURAL:$2|کارور|کارورون}} {{SITENAME}}",
-       "simpleantispam-label": "!آنتی‌اسپم ِچک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
+       "simpleantispam-label": "آنتی‌اسپم ره چک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
        "pageinfo-toolboxlink": "صفحه‌ی ِاطلاعات",
        "previousdiff": "کوهنه‌تر دچی‌ین ←",
        "nextdiff": "ته‌رنه دأچیه‌ن ←",
        "thumbsize": "أنـگـوسـی گأتی:",
        "file-info-size": "$1 × $2 پـیـکـسه‌ل, فـایـل گـأتـی: $3, MIME مـونـد: $4",
+       "file-nohires": "ویشته رزولیشن ندانه.",
+       "svg-long-desc": "اس‌وی‌جی ِپرونده، ابعاد <span dir=\"ltr\">$1 × $2</span> پیکسل جه، پرونده قایده: $3",
        "show-big-image": "اصلی پرونده",
        "show-big-image-preview": "این پیش‌-پیش سِراق هدائن ِقایده: $1.",
        "show-big-image-other": "دیگه {{PLURAL:$2|کیفیت|کیفیتون}}: $1.",
        "video-dims": "$1, $2×$3",
        "metadata": "متادیتا",
        "metadata-help": "این پرونده اتسری اضافه اطلاعات دانه که احتمالاً دیجیتال دوربین یا دیگه تغییرکَرون اضافه هاکردنه. اگه پرونده اولیه حالت جه تغییر هاکرد بائه، ممکن هسته که توضیحات تکمیل نَی‌بائِن.",
+       "metadata-fields": "متادیتا همیشه سِراق هِدا وانه ولی دیگه اطلاعات وقتی جدول وا بائه، سِراق هِدا وانّه.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-orientation": "جهت",
        "exif-xresolution": "افقی رزولویشن",
        "exif-yresolution": "عمودی رزولویشن",
        "tag-filter": "[[Special:Tags|برچسبون]] ِفیلتر:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسبون}}]]: $2)",
        "logentry-delete-delete": "$1 صفحهٔ $3 ره {{GENDER:$2|حذف هاکرده}}",
+       "logentry-move-move": "کارور $1، $3 ِصفحه ره {{GENDER:$2|دَکشی‌یه}} $4 دله",
        "logentry-move-move_redir-noredirect": "$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده",
        "logentry-newusers-newusers": "$1  بساتن اتا حساب کاروری",
        "logentry-newusers-create": "$1 کاروری حساب {{GENDER:$2|بساته بیّه}}",
+       "logentry-upload-upload": "$1 $3 ره {{GENDER:$2|بار بی‌یشته}}",
        "rightsnone": "(هچّی)",
        "feedback-adding": "بی‌یشتن پیشنهادات و انتقادات...",
        "feedback-cancel": "ول هاکردن",
index 435e381..bec75f5 100644 (file)
@@ -5,7 +5,8 @@
                        "Ianbu",
                        "Kaihsu",
                        "아라",
-                       "唐吉訶德的侍從"
+                       "唐吉訶德的侍從",
+                       "Luuva"
                ]
        },
        "tog-underline": "Liân-kiat oē té-sûn:",
        "permalink": "Éng-kiú liân-kiat",
        "print": "Ìn-soat",
        "view": "Khoàⁿ",
-       "view-foreign": "佇$1遐看",
+       "view-foreign": "tī $1 hiah khoàⁿ",
        "edit": "Siu-kái",
        "edit-local": "改這位的說明",
        "create": "Khai-sí siá",
-       "create-local": "加這搭的說明",
+       "create-local": "ka chhit-tah--ê soat-bêng",
        "editthispage": "Siu-kái chit ia̍h",
        "create-this-page": "Khai-sí siá chit ia̍h",
        "delete": "Thâi",
        "welcomecreation-msg": "你的口座以經開好矣,\n你若有需要,會使去改你佇{{SITENAME}}的設定。",
        "yourname": "Lí ê iōng-chiá miâ-chheng:",
        "userlogin-yourname": "Iōng-chiá miâ-chheng",
-       "userlogin-yourname-ph": "拍你的用者名稱",
-       "createacct-another-username-ph": "拍你的用者名稱",
+       "userlogin-yourname-ph": "Phah lí--ê iōng-chiá-miâ",
+       "createacct-another-username-ph": "Phah lí--ê iōng-chiá-miâ",
        "yourpassword": "Lí ê bi̍t-bé:",
        "userlogin-yourpassword": "Bi̍t-bé",
-       "userlogin-yourpassword-ph": "拍密碼",
-       "createacct-yourpassword-ph": "拍密碼",
+       "userlogin-yourpassword-ph": "Phah bi̍t-bé",
+       "createacct-yourpassword-ph": "Phah bi̍t-bé",
        "yourpasswordagain": "Têng phah bi̍t-bé:",
-       "createacct-yourpasswordagain": "確認密碼",
-       "createacct-yourpasswordagain-ph": "閣拍一擺密碼",
+       "createacct-yourpasswordagain": "Khak-jīn bi̍t-bé",
+       "createacct-yourpasswordagain-ph": "Koh phah chi̍t-pái bi̍t-bé",
        "remembermypassword": "Tī chit ê liû-lám-khì kì góa ê teng-ji̍p chu-liāu.(siōng chē kì $1 {{PLURAL:$1|kang|kang}})",
-       "userlogin-remembermypassword": "我登入的資料記起來",
+       "userlogin-remembermypassword": "Kì-lo̍k goá teng-ji̍p--ê chu-liāu",
        "userlogin-signwithsecure": "用安全連線",
        "yourdomainname": "你的網域:",
-       "password-change-forbidden": "佇這个維基,你袂當改密碼。",
+       "password-change-forbidden": "Tī chit--ê wiki, lí boē-tàng kái bi̍t-bé.",
        "externaldberror": "這可能是資料庫驗證錯誤,抑是無允准你改外部的口座。",
        "login": "Teng-ji̍p",
        "nav-login-createaccount": "Teng-ji̍p / khui sin kháu-chō",
        "logout": "Teng-chhut",
        "userlogout": "Teng-chhut",
        "notloggedin": "Bô teng-ji̍p",
-       "userlogin-noaccount": "敢無口座?",
-       "userlogin-joinproject": "加入 {{SITENAME}}",
+       "userlogin-noaccount": "Káⁿ bô kháu-chō?",
+       "userlogin-joinproject": "Ka-ji̍p {{SITENAME}}",
        "nologin": "Bô kháu-chō thang teng-ji̍p? $1",
        "nologinlink": "Khui 1 ê kháu-chō",
        "createaccount": "Khui sin kháu-chō",
        "gotaccount": "Í-keng ū kháu-chō? '''$1'''.",
        "gotaccountlink": "Teng-ji̍p",
        "userlogin-resetlink": "你敢袂記得你登入的資料?",
-       "userlogin-resetpassword-link": "袂記得你的密碼?",
-       "userlogin-helplink2": "協助你登入",
+       "userlogin-resetpassword-link": "Bi̍t-bé boē-kì-tit?",
+       "userlogin-helplink2": "Pang-chān goá teng-ji̍p",
        "userlogin-loggedin": "你已經用{{GENDER:$1|$1}}登入,用下跤的表,登入別个名。",
        "userlogin-createanother": "開另外一个口座",
-       "createacct-emailrequired": "電子批地址",
-       "createacct-emailoptional": "電子批地址(無一定愛寫)",
-       "createacct-email-ph": "拍你的電子批地址",
-       "createacct-another-email-ph": "拍你的電子批地址",
+       "createacct-emailrequired": "Tiān-chú-phoe tē-chí",
+       "createacct-emailoptional": "Tiān-chú-phoe tē-chí (bô-it-tēng ài siá)",
+       "createacct-email-ph": "Phah lí--ê tiān-chú-phoe tē-chí",
+       "createacct-another-email-ph": "Phah lí--ê tiān-chú-phoe tē-chí",
        "createaccountmail": "Iōng chi̍t-ê lîm-sî loān-sò͘ sán-seng ê bi̍t-bé , kià khì goá chí-tēng ê tiān-chú-phoe tē-chí.",
        "createacct-realname": "真正的名",
        "createaccountreason": "Lí-iû:",
        "createacct-reason": "理由:",
        "createacct-reason-ph": "為啥物你欲開一另外一个口座?",
-       "createacct-captcha": "安全檢驗",
-       "createacct-imgcaptcha-ph": "共下跤你看著的字拍入來",
-       "createacct-submit": "開你的口座",
+       "createacct-captcha": "An-choân kiám-cha",
+       "createacct-imgcaptcha-ph": "Kā ē-kha lí khoàⁿ tio̍h--ê bûn-jī phah ji̍p lâi",
+       "createacct-submit": "Khui lí--ê kháu-chō",
        "createacct-another-submit": "開另外一个口座",
-       "createacct-benefit-heading": "{{SITENAME}}是為著親像你的儂,才來建立。",
-       "createacct-benefit-body1": "改{{PLURAL:$1|擺|擺}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|頁|頁}}",
-       "createacct-benefit-body3": "最近{{PLURAL:$1|个儂有貢獻|个儂有貢獻}}",
+       "createacct-benefit-heading": "{{SITENAME}} sī uī tio̍h chhin-chhiūⁿ lí--ê lâng chiah lâi kiàn-li̍p--ê.",
+       "createacct-benefit-body1": "kái {{PLURAL:$1|pái|pái}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|ia̍h|ia̍h}}",
+       "createacct-benefit-body3": "choè-kīn {{PLURAL:$1|ê lâng ū kòng-hiàn|ê lâng ū kòng-hiàn}}",
        "badretype": "Lí su-ji̍p ê 2-cho· bi̍t-bé bô tùi.",
        "userexists": "Lí phah ê iōng-chiá miâ-chheng í-keng ū lâng iōng. Chhiáⁿ lí iōng pa̍t-ê miâ.",
        "loginerror": "Teng-ji̍p chhò-gō·",
        "createacct-error": "開口座無成功",
        "createaccounterror": "Bô hoat-tō͘ khui kháu-chō: $1",
-       "nocookiesnew": "你的用者口座已經開好矣,毋過你猶未登入,{{SITENAME}}有用Cookies做記錄登入的用者,你無允准用Cookies,請先共阻擋提掉,才閣用你的用者名稱佮密碼登入。",
+       "nocookiesnew": "Lí--ê iōng-chiá kháu-chō í-keng khui hó--ah, m̄-koh lí iáu-boē teng-ji̍p.\n{{SITENAME}} ū sái Cookies choè kì-lio̍k teng-ji̍p--ê iōng-chiá.\nLí bô ín-chún iōng Cookies, chhiáⁿ lí seng kā chó͘-tòng the̍h tiāu, chiah koh iōng lí--ê iōng-chiá-miâ kap bi̍t-bé teng-ji̍p.",
        "nocookieslogin": "{{SITENAME}}有用cookies做記錄用者,毋過你無允準用cookies,等你改做會當了後,才閣試。",
        "nocookiesfornew": "因為不明的原因,阮無法度建立用者的口座。\n請先確定你的cookie會使用,閣重進入這頁,閣試一擺。",
-       "noname": "你提供的用者名稱袂使用。",
+       "noname": "Lí phah--ê iōng-chiá-miâ boē-sái.",
        "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\".\nIiōng-chiá hō-chò ū hun toā-jī sè-jī.\nChhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī  [[Special:UserLogin/signup|khui sin iōng-chiá ê kháu-chō.]]",
        "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字|$1字}}",
-       "password-name-match": "你的密碼愛佮你的用者名稱無仝。",
+       "password-name-match": "Lí--ê bi̍t-bé ài kap lí--ê iōng-chiá-miâ bô kāng.",
        "password-login-forbidden": "這个用者名稱佮密碼已經禁止用。",
        "mailmypassword": "Têng siat bi̍t-bé",
        "passwordremindertitle": "{{SITENAME}} the-chheN li e bit-be",
        "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",
        "pt-login": "Teng-ji̍p",
+       "pt-login-button": "Teng-ji̍p",
        "pt-createaccount": "Khui sin kháu-chō",
        "pt-userlogout": "Teng-chhut",
        "user-mail-no-addy": "Siūⁿ beh kià tiān-chú-phoe, m̄-koh bô siá tē-chí.",
        "history-feed-item-nocomment": "$1 tī $2",
        "revdel-restore": "改會當看無",
        "revertmerge": "取消合併",
-       "history-title": "\"$1\"的歷史版本",
+       "history-title": "\"$1\"--ê le̍k-sú pán-pún",
+       "difference-title": "\"$1\" pán-pún chi-kan bô-kāng--ê tē-hng",
        "lineno": "Tē $1 chōa:",
        "compareselectedversions": "Pí-phēng soán-te̍k ê pán-pún",
        "editundo": "chhú-siau",
        "yournick": "Lí ê sió-miâ (chhiam-miâ iōng):",
        "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.\nTī pat-lâng liân-lo̍k lí ê sî-chūn bē kā e-mail tsū-tsí siá chhut--lâi.",
+       "group-bot": "Ke-khì-lâng",
+       "group-sysop": "koán-lí jîn-oân",
+       "group-bureaucrat": "Koaⁿ-liâu",
+       "group-bot-member": "{{GENDER:$1|Ke-khì-lâng}}",
+       "group-sysop-member": "{{GENDER:$1|koán-lí jîn-oân}}",
+       "group-bureaucrat-member": "{{GENDER:$1|Koaⁿ-liâu}}",
        "grouppage-sysop": "{{ns:project}}:Hêng-chèng jîn-oân",
+       "grouppage-bureaucrat": "{{ns:project}}:Koaⁿ-liâu",
        "right-writeapi": "用API寫",
        "newuserlogpage": "開賬戶日誌",
        "rightslogtext": "Chit-ê log lia̍t-chhut kái-piàn iōng-chiá koân-lī ê tōng-chok.",
        "listfiles_count": "版本",
        "file-anchor-link": "Tóng-àn",
        "filehist": "Tóng-àn ê le̍k-sú",
-       "filehist-help": "揤 日期/時間;看彼時陣的檔案",
+       "filehist-help": "Chhi̍h ji̍t-kî/sî-kan, khoàⁿ hit sî-chūn--ê tóng-àn.",
        "filehist-current": "hiān-chāi",
        "filehist-datetime": "Ji̍t-kî/ Sî-kan",
        "filehist-thumb": "細張圖",
        "imagelinks": "tóng-àn sù-iōng ê chōng-hòng",
        "linkstoimage": "ē-kha {{PLURAL:$1|ê ia̍h}} ū iōng tio̍h chit ê iáⁿ-siōng:",
        "nolinkstoimage": "Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.",
-       "sharedupload-desc-here": "這个$1的檔案有可能予其他專案用著。\n下跤是這个檔案伊的[$2檔案說明]。",
+       "sharedupload-desc-here": "Chit--ê $1--ê tóng-àn ū khó-lêng hō͘ kî-thaⁿ--ê choan-àn ēng tio̍h.\nChia sī chit--ê tóng-àn i--ê [$2 soat-bêng].",
        "mimesearch": "MIME chhiau-chhoē",
        "unwatchedpages": "Bô lâng kàm-sī ê ia̍h",
        "listredirects": "Lia̍t-chhut choán-ia̍h",
        "movethispage": "Sóa chit ia̍h",
        "unusedimagestext": "<p>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 chhiâng-chāi teh iōng, mā sī ē lia̍t tī chia.</p>",
        "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.",
+       "pager-newer-n": "khah sin ê $1 hāng",
+       "pager-older-n": "khah kū ê $1 hāng",
        "booksources": "Tô͘-su chu-liāu",
        "specialloguserlabel": "做的人:",
        "speciallogtitlelabel": "目地(標題抑是用者)",
        "mailnologin": "Bô siu-phoe ê chū-chí",
        "mailnologintext": "Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] jī-chhiáⁿ ū 1 ê ū-hāu ê e-mail chū-chí tī lí ê [[Special:Preferences|iōng-chiá siat-tēng]] chiah ē-tàng kià e-mail hō· pa̍t-ūi iōng-chiá.",
        "emailuser": "Kià e-mail hō· iōng-chiá",
-       "emailpage": "E-mail iōng-chiá",
        "emailpagetext": "Ká-sú chit ê iōng-chiá ū siat-tēng 1 ê ū-hāu ê e-mail chū-chí, lí tō ē-tàng ēng ē-kha chit tiuⁿ FORM hoat sìn-sek hō· i. Lí siat-tēng ê e-mail chū-chí ē chhut-hiān tī e-mail ê \"Kià-phoe-jîn\" (From) hit ūi. Án-ne siu-phoe-jîn chiah ū hoat-tō· kā lí hôe-phoe.",
        "noemailtitle": "Bô e-mail chū-chí",
        "noemailtext": "Chit ūi iōng-chiá pēng-bô lâu ū-hāu ê e-mail chū-chí, bô tio̍h-sī i bô beh chiap-siū pat-ūi iōng-chiá ê e-mail.",
        "tooltip-namespace_association": "勾起來的框;相關的討論抑物件空間會包括入來",
        "blanknamespace": "(Thâu-ia̍h)",
        "contributions": "{{GENDER:$1|Iōng-chiá}} ê kòng-hiàn",
+       "contributions-title": "Iōng-chiá $1--ê kòng-hiàn",
        "mycontris": "Góa ê kòng-hiàn",
        "nocontribs": "Chhōe bô tiâu-kiāⁿ ū-tùi ê hāng-bo̍k.",
        "uctop": "(siōng téng ê)",
        "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-logout": "Teng-chhut",
-       "tooltip-pt-createaccount": "Kiàn-gī lí seng khai chi̍t-ê kháu-chō (bô-it-tēng ài); chiah koh teng-ji̍p.",
+       "tooltip-pt-createaccount": "Kiàn-gī lí seng khui chi̍t-ê kháu-chō (bô-it-tēng ài); chiah koh teng-ji̍p.",
        "tooltip-ca-talk": "Loē-iông ê thó-lūn",
        "tooltip-ca-edit": "Kái chit-ia̍h",
        "tooltip-ca-addsection": "加新的一段",
        "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-go": "Nā ū kāng-miâ--ê, tō khì hit-ia̍h.",
        "tooltip-search-fulltext": "Chhoé ū chia-ê jī ê ia̍h",
        "tooltip-p-logo": "Khì thâu-ia̍h",
        "tooltip-n-mainpage": "Khì thâu-ia̍h",
        "markaspatrolleddiff": "Phiau-sī sûn--kòe",
        "markedaspatrolledtext": "Í-keng phiau-sī chit ê siu-tēng-pún ū lâng sûn--kòe.",
        "deletedrevision": "Kū siu-tēng-pún $1 thâi-tiāu ā.",
-       "previousdiff": "← 進前改的",
-       "nextdiff": "新改的 →",
+       "previousdiff": "← Chìn-chêng kái--ê",
+       "nextdiff": "Sin kái--ê →",
        "imagemaxsize": "Iáⁿ-siōng biô-su̍t-ia̍h ê tô· ke̍k-ke hián-sī jōa tōa tiuⁿ:",
        "thumbsize": "Sok-tô· (thumbnail) jōa tōa tiuⁿ:",
-       "file-info-size": "$1 × $2 像素,檔案佔量:$3,MIME 類型:$4",
+       "file-info-size": "$1 × $2 siōng-sò͘ , tóng-àn chiàm-liōng: $3, MIME luī-hêng: $4",
        "file-nohires": "Bô khah koân ê kái-sek-tō͘.",
        "show-big-image": "原本的檔案",
-       "show-big-image-preview": "先看佔量:$1。",
-       "show-big-image-other": "其他{{PLURAL:$2|解析度}}:$1。",
-       "show-big-image-size": "$1 × $2 像素",
+       "show-big-image-preview": "Seng khoàⁿ chiàm-liōng: $1.",
+       "show-big-image-other": "Kî-thaⁿ--ê {{PLURAL:$2|kái-sek-tō͘ }}: $1.",
+       "show-big-image-size": "$1 × $2 siōng-sò͘",
        "newimages": "Sin iáⁿ-siōng oē-lóng",
        "imagelisttext": "Í-hā sī '''$1''' tiuⁿ iáⁿ-siōng ê lia̍t-toaⁿ, $2 pâi-lia̍t.",
        "ilsubmit": "Kiám-sek",
        "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\".",
        "version": "Pán-pún",
        "specialpages": "Te̍k-sû-ia̍h",
-       "tag-filter": "[[Special:Tags|標籤]]揣物:",
+       "tag-filter": "[[Special:Tags|Piau-chhiam]] chhoē mi̍h:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|个標籤}}]]:$2)",
+       "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
        "searchsuggest-search": "Chhiau",
        "expandtemplates": "Khok-chhiong pang-bô͘",
index 295f11f..ac4106f 100644 (file)
@@ -16,7 +16,7 @@
        },
        "tog-underline": "Sottolinia 'e jonte:",
        "tog-hideminor": "Annascunne 'e cagne piccirille  'int'a ll'úrdeme cagne",
-       "tog-hidepatrolled": "Annascunne 'e cagne 'verificate' 'int'a ll'úrdeme cagne",
+       "tog-hidepatrolled": "Annascunne 'e cagne 'verificate' 'a ll'úrdeme cagnamiente",
        "tog-newpageshidepatrolled": "Annascunne 'e paggene cuntrullate 'a ll'elenco 'e ppaggene",
        "tog-extendwatchlist": "Spanne ll'asservate speciale pe fà vedé tutte 'e cagnàmiente, nun solo l'ultimo",
        "tog-usenewrc": "Urdeme càgnamiente avanzate (JavaScript)",
        "navigation-heading": "Menu 'e navigazzione",
        "errorpagetitle": "Sbaglio",
        "returnto": "Torna a $1.",
-       "tagline": "Dda {{SITENAME}}.",
+       "tagline": "'A {{SITENAME}}.",
        "help": "Ajùto",
        "search": "Truova",
        "searchbutton": "Truova",
        "toolbox": "Strumiente",
        "userpage": "Vere a paggena utente",
        "projectpage": "Vere a paggena 'e servizio",
-       "imagepage": "Vere a paggena ddo file",
+       "imagepage": "Vere a paggena d' 'o file",
        "mediawikipage": "Vere 'a mmasciata",
        "templatepage": "Vere 'o template",
        "viewhelppage": "Vere 'a paggena 'e ajùto",
        "nosuchaction": "Operazione nun ricanusciuta",
        "nosuchactiontext": "L'azione specificata dint'a l'URL nun è bbona.\nPuò darse ca l'URL fosse stata digitata 'n modo sbagliàto o che fosse stato seguito nu link sbagliàto.\nChesto putesse innecà pùre nu bug dint'a {{SITENAME}}.",
        "nosuchspecialpage": "Chista paggena speciale nun ce sta",
-       "nospecialpagetext": "<strong>'A paggena speciale richiesta nun è ricanusciuta.</strong>\n\nL'alenco d' 'e paggene valide spiciale 'o truove int'a [[Special:SpecialPages|l'Elenco d' 'e paggine spiciale]].",
+       "nospecialpagetext": "<strong>'A paggena speciale richiesta nun è ricanusciuta.</strong>\n\nL'elenco d' 'e paggene valide spiciale 'o truove int'a [[Special:SpecialPages|l'Elenco d' 'e paggine spiciale]].",
        "error": "Sbaglio",
        "databaseerror": "Sbaglio dint'a database",
        "databaseerror-text": "C'è stato nu sbaglio dint'a na richiesta â database.\nPuò darse ca ce sta nu bug int' 'o software",
        "actionthrottled": "Azione ritardata",
        "actionthrottledtext": "Comme misura anti-spam, site lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere pruvate n'ata vota dint'a cocche minuto.",
        "protectedpagetext": "Sta paggena s'è prutetta pe' ne bloccà 'a mudifeca o n'ata azione.",
-       "viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
-       "viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
+       "viewsourcetext": "Putite vedé e copià 'o codece surgiva 'e sta paggena.",
+       "viewyourtext": "Putite vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte vuoste</strong> a sta paggena.",
        "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
        "editinginterface": "<strong>Attenziò:</strong>  'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.",
        "translateinterface": "Si se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
-       "cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
+       "cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché trascluse int'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
        "namespaceprotected": "Nun avite permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
        "customcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
        "customjsprotected": "Nun v'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
        "createacct-yourpassword-ph": "'Nserisce 'na password",
        "yourpasswordagain": "Ripete 'a password:",
        "createacct-yourpasswordagain": "Cunferma password",
-       "createacct-yourpasswordagain-ph": "'Nserisce 'e novo 'a password",
+       "createacct-yourpasswordagain-ph": "'Nserisce 'e nuovo 'a password",
        "remembermypassword": "Allicuordate d\"a password (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "userlogin-remembermypassword": "Mantienime cullegato",
        "userlogin-signwithsecure": "Usa na conessione sicura",
        "password-change-forbidden": "Nun se ponno cagnà 'e password ncopp'a sta wiki.",
        "externaldberror": "Ce sta n'errore ch' 'e server d'autenticazione esterno, o pure nun v'è permesso accedere all'aghiurnamento d' 'o cunto sterno vuosto.",
        "login": "Tràse",
-       "nav-login-createaccount": "Tràse o cria n'acciesso novo",
-       "userlogin": "Tràse o cria n'acciesso novo",
+       "nav-login-createaccount": "Trasite o criate n'acciesso nuovo",
+       "userlogin": "Trasite o criate n'acciesso nuovo",
        "userloginnocreate": "Tràse",
        "logout": "Jèsce",
        "userlogout": "Jèsce",
        "userlogin-joinproject": "Fà 'o riggistro ncopp'a {{SITENAME}}",
        "nologin": "Nun tenite ancora n'acciesso? '''$1'''.",
        "nologinlink": "Crialo mmo",
-       "createaccount": "Cria nu cunto novo",
+       "createaccount": "Cria nu cunto nuovo",
        "gotaccount": "Tiene già nu cunto? '''$1'''.",
        "gotaccountlink": "Tràse",
        "userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
        "userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
        "userlogin-helplink2": "Aiuto cu l'accieso",
-       "userlogin-loggedin": "Sì già connesso comme {{GENDER:$1|$1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
+       "userlogin-loggedin": "Sì già {{GENDER:$1|connesso comme $1|connessa comme $1|connesso/a comme $1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
        "userlogin-createanother": "Cria n'at'account",
        "createacct-emailrequired": "Indirizzo email",
        "createacct-emailoptional": "Indirizzo 'e posta elettronica (ozzionale)",
        "createacct-captcha": "Cuntrollo 'e sicurezza",
        "createacct-imgcaptcha-ph": "Scrivite 'o testo ca vedite ncoppa",
        "createacct-submit": "Cria 'a toja utenza",
-       "createacct-another-submit": "Cria 'n atro account",
+       "createacct-another-submit": "Cria n'atu cunto",
        "createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
        "createacct-benefit-body1": "{{PLURAL:$1|càgnamiento|càgnamiente}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paggena|paggene}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre recente|contribbuttore recente}}",
        "badretype": "'E passwords ch'è mis nun songe eguale.",
+       "usernameinprogress": "Na criazione 'e cunto pe' st'utente è già nprugresso. Pe' piacere aspettate.",
        "userexists": "'O nomme utente ch'avete miso è già ausàto.\nPe' piacere sciglite n'atu nomme.",
        "loginerror": "Probblema 'e accièsso",
        "createacct-error": "Errore 'e criazione 'e cunto",
        "emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
        "noemailprefs": "Avite 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
        "emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
-       "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrivite n'ata vota nu nderizzo bbuono o abbacantate 'a casciulella.",
+       "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmato buono.\nScrivite n'ata vota nu nderizzo bbuono o abbacantate 'a casciulella.",
        "cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
        "emaildisabled": "Chistu sito nun può mannà mmasciate e-mail.",
        "accountcreated": "Cunto criato",
        "oldpassword": "Password viecchia:",
        "newpassword": "Password nova:",
        "retypenew": "Ripete 'a password:",
-       "resetpass_submit": "Stabbelisce 'a password e tràse",
+       "resetpass_submit": "Stabbelite 'a password e trasite",
        "changepassword-success": "'A password è stata cagnata currettamente!",
        "changepassword-throttled": "Songo state fatte troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
        "resetpass_forbidden": "'E password nun se ponno cagnà",
        "bold_tip": "Grassetto",
        "italic_sample": "Corsivo",
        "italic_tip": "Corsivo",
-       "link_sample": "Titulo ddo cullegamente",
+       "link_sample": "Titulo d' 'o cullegamento",
        "link_tip": "Jonte nterne",
-       "extlink_sample": "http://www.example.com titulo ddo cullegamente",
+       "extlink_sample": "http://www.example.com titulo d' 'o cullegamento",
        "extlink_tip": "Link esterno (arricuordate 'o prefisso http:// )",
        "headline_sample": "Testate",
        "headline_tip": "Testate 'e 2° livello",
        "media_tip": "Cullegamente a file multimediale",
        "sig_tip": "Firma cu data e ora",
        "hr_tip": "Linea orizzontale (ausà cu gedizzio)",
-       "summary": "Énnece",
+       "summary": "Innece",
        "subject": "Argomiento/titolo:",
        "minoredit": "Chisto è nu cagnamiénto piccerillo",
        "watchthis": "Tiene d'uocchio chesta paggena",
        "loginreqpagetext": "Pe' veré ate ppaggene abbesognate $1.",
        "accmailtitle": "'O password è stato mannato.",
        "accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.",
-       "newarticle": "(Novo)",
+       "newarticle": "(Nuovo)",
        "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummenciate a scrivere dint'a cascia cà abbascio (vedite 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi site venuto/a ccà pe' sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.",
-       "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però a cchiù 'e n'utente. Si sì n'utente anonimo e pienze ca 'e commente ccà dint'a sta paggena nun parlano 'e tte, allora [[Special:UserLogin/signup|crìa n'utenza nnova]] o [[Special:UserLogin|tràse cu chella ca tiene già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''",
+       "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però sempe ausanno cunte differente. Si site n'utente anonimo e penzate ca 'e cummente ccà dint'a sta paggena nun parlano 'e vuje, allora [[Special:UserLogin/signup|criate n'utenza nnova]] o [[Special:UserLogin|trasite cu chella ca tenite già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''",
        "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo']</span>.",
        "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tenite 'o permesso 'a crià sta paggena.",
        "missing-revision": "'A verziona #$1 d' 'a paggena \"{{FULLPAGENAME}}\" nun esiste.\n\nChest'è causato quanno se và dint'a nu link a na paggena ch'è stata scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
        "updated": "(Agghiurnato)",
        "note": "'''Nota:'''",
        "previewnote": "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena nun songo ancora sarvate!'''",
-       "continue-editing": "Tràse int'a l'area 'e modifica",
+       "continue-editing": "Trasite int'a l'area 'e modifica",
        "previewconflict": "L'anteprimma currisponne a 'o testo presente dint'a cascia 'e modifica ccà ncoppa e rappresentasse 'a paggena comme cumpare si sciglite 'e Sarvà ind'a stu mumento.",
        "session_fail_preview": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.\nSi nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
        "session_fail_preview_html": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.'''\n''Siccome dint' 'o {{SITENAME}} è abilitato l'uso 'e l'HTML cruro, 'o buttone d'anteprimma nun è abbiàto comme misura 'e sicurezza annanza cocch'attacco JavaScript''\n'''Si chest'era nu tentativo legittimo 'e cagnamiento, prova n'ata vota. Si nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
        "readonlywarning": "<strong>Attenziò</strong>: 'o database è bloccato pe se ffà 'a manutenzione. P' 'o mumento nun se ponno sarvà 'e cagnamiente fatte.\nPe' nun 'e sperdere, copia sti cuntenute dint'a nu file 'e testo e sarvatillo pe' tramente c'aspiette 'o sblocco d' 'o database.\n\nL'ammenistratore ca mpustaje 'o blocco ave scritto sta spiegazione: $1.",
        "protectedpagewarning": "'''Attenziò: sta paggena è stata bloccata 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà.'''\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:",
        "semiprotectedpagewarning": "'''Nota:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente riggistrate 'a ponno cagnà.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:",
-       "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
+       "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è appennuta dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
        "titleprotectedwarning": "'''Attenziò: sta paggena è stata bloccata 'n modo ca fossero necessarie [[Special:ListGroupRights|deritte specifici]] p' 'a crià.'''\nL'urdemo elemento d' 'o riggistro è riportato ccà abbascio pe nfurmazione:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} ausate 'a chesta paggena:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ausate dint'a st'anteprimma:",
        "permissionserrors": "Nun haje 'e premmesse abbastante.",
        "permissionserrorstext": "Nun haje premmesse pe lle ffà st'azziune, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
        "permissionserrorstext-withaction": "Nun haje premmesse abbastante pe' $2, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
-       "recreate-moveddeleted-warn": "'''Attenziò: staje a crià na paggena scancellata già.'''\n\nVire si è bbuono 'e cuntinuà a cagnà sta paggena. L'alenco ch' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' ffà comodo:",
-       "moveddeleted-notice": "Sta paggena è stata scancellata.\nL'alenco d' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' n'avé nfurmazione.",
+       "recreate-moveddeleted-warn": "'''Attenziò: staje a crià na paggena scancellata già.'''\n\nVire si è bbuono 'e cuntinuà a cagnà sta paggena. L'elenco ch' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' ffà comodo:",
+       "moveddeleted-notice": "Sta paggena è stata scancellata.\nL'elenco d' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' n'avé nfurmazione.",
        "log-fulllog": "Vide log sano",
        "edit-hook-aborted": "'O cagnamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
        "edit-gone-missing": "Nun se può agghiurnà 'a paggena.\nPare ch' 'è stata scancellata.",
        "invalid-content-data": "Date cuntenute nun buone",
        "content-not-allowed-here": "'O cuntenuto \"$1\" nun è permesso dint'a paggena [[$2]]",
        "editwarning-warning": "Ascenno 'e sta paggena putisse ffà sperdere 'e cagnamiente fatte.\nSi sì trasuto, allora può stutà st'avviso dint'a sezziona \"{{int:prefs-editing}}\" d' 'e preferenze.",
-       "editpage-notsupportedcontentformat-title": "Furmatto d' 'o cuntenuto nun suppurtato",
-       "editpage-notsupportedcontentformat-text": "'O furmatto d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
+       "editpage-notsupportedcontentformat-title": "Furmato d' 'o cuntenuto nun suppurtato",
+       "editpage-notsupportedcontentformat-text": "'O furmato d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
        "content-model-wikitext": "wikitesto",
        "content-model-text": "testo nurmale",
        "content-model-javascript": "JavaScript",
        "search-category": "(categurìa $1)",
        "search-file-match": "(currispunnenza dint' 'e cuntenute d' 'o file)",
        "search-suggest": "Prova chisto: $1",
+       "search-rewritten": "Mmustann' 'e risultate pe' $1. Circa mmece pe' $2.",
        "search-interwiki-caption": "Prugiette frate",
        "search-interwiki-default": "Risultate 'a $1:",
        "search-interwiki-more": "(cchiù)",
        "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
        "prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà ch' 'e funziune avanzate:",
        "prefs-watchlist-edits-max": "Nummero massimo: 1000",
-       "prefs-watchlist-token": "Token 'e l'alenco 'e cuntrollo:",
+       "prefs-watchlist-token": "Token 'e l'elenco 'e cuntrollo:",
        "prefs-misc": "Varje",
        "prefs-resetpass": "Cagna 'a password",
        "prefs-changeemail": "Cagna l'indirizzo e-mail",
        "rows": "Righe:",
        "columns": "Culonne:",
        "searchresultshead": "Truova",
-       "stub-threshold": "Valore minimo p' 'e <a href=\"#\" class=\"stub\">cullegamiente a 'e stub</a>, 'n byte:",
+       "stub-threshold": "Valore lemmeto p' 'o furmato d' 'o cullegamento stub ($1):",
+       "stub-threshold-sample-link": "mostra",
        "stub-threshold-disabled": "Stutato",
        "recentchangesdays": "Nummero 'e juorne a mmustà dint'a l'urdeme cagnamiente:",
        "recentchangesdays-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
        "recentchangescount": "Nummero predefinito 'e cagnamiente 'a mmustà:",
        "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.",
-       "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'alenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'alenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
+       "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'elenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'elenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
        "savedprefs": "'E preferenze songo state sarvate.",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora lucale:",
        "prefs-diffs": "Differenze",
        "prefs-help-prefershttps": "Sta preferenza averrà affetto 'a 'o prossimo acciesso vuosto.",
        "prefswarning-warning": "Avite fatto cagnamiente a 'e preferenze d' 'e vuoste ca nun so' stat'ancora sarvate.\nSi ascite 'a sta paggena senza clickà \"$1\" 'e preferenze d' 'e vuoste nun sarranno agghiurnate.",
-       "prefs-tabs-navigation-hint": "Suggerimento: se ponno ausà 'e buttòne 'e freccia a manca e a dritta pe' ve muovere nfra 'e schede dint'a l'alenco d' 'e schede.",
+       "prefs-tabs-navigation-hint": "Suggerimento: se ponno ausà 'e buttòne 'e freccia a manca e a dritta pe' ve muovere nfra 'e schede dint'a l'elenco d' 'e schede.",
        "email-address-validity-valid": "L'indirizzo e-mail pare valido",
        "email-address-validity-invalid": "Nzerta n'indirizzo e-mail valido",
        "userrights": "Gestione d' 'e permesse 'e l'utente",
        "right-edituserjs": "Cagna 'e file JS e l'at'utente",
        "right-editmyusercss": "Cagna 'e proprie file CSS",
        "right-editmyuserjs": "Cagna 'e proprie file JavaScript",
-       "right-viewmywatchlist": "Vide l'alenco 'e cuntrollo proprio",
-       "right-editmywatchlist": "Cagna l'alenco 'e cuntrollo proprio. Vedete ca cocch'azione putesse jògnere ancora paggene senza stu deritto.",
+       "right-viewmywatchlist": "Vide l'elenco 'e cuntrollo proprio",
+       "right-editmywatchlist": "Cagna l'elenco 'e cuntrollo proprio. Vedete ca cocch'azione putesse jògnere ancora paggene senza stu deritto.",
        "right-viewmyprivateinfo": "Vide 'e proprie date private (e.g. e-mail, nomme overo)",
        "right-editmyprivateinfo": "Cagna 'e date perzunale proprie (p'esempio: e-mail, nomme overo)",
        "right-editmyoptions": "Cagna 'e preferenze proprie",
        "action-createaccount": "crìa stu cunto utente",
        "action-history": "vide 'a cronologgia 'e sta paggena",
        "action-minoredit": "nzegnà stu cagnamiento comme minore",
-       "action-move": "Spusta chista paggena",
+       "action-move": "mòve sta paggena",
        "action-move-subpages": "muovere sta paggena, e le sottopaggene relative",
        "action-move-rootuserpages": "muove 'e paggene princepale d'utente",
        "action-move-categorypages": "muove 'e categurìe",
        "action-importupload": "carreca paggene 'a n'upload 'e file",
        "action-patrol": "nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
        "action-autopatrol": "nzignà 'e proprie cagnamiente comme cuntrullate",
-       "action-unwatchedpages": "vide l'alenco 'e pagene nun cuntrullate",
+       "action-unwatchedpages": "vide l'elenco 'e pagene nun cuntrullate",
        "action-mergehistory": "aunisce 'a cronologgia 'e sta paggena",
        "action-userrights": "cagna 'e deritte 'e ll'utente",
        "action-userrights-interwiki": "cagna 'e deritte 'e ll'utente int'a l'ati wiki",
        "action-siteadmin": "blocca o sblocca 'o database",
        "action-sendemail": "manna e-mail",
-       "action-editmywatchlist": "cagna l'alenco 'e cuntrolo 'o tuojo",
-       "action-viewmywatchlist": "vide l'alenco 'e cuntrollo proprio",
+       "action-editmywatchlist": "cagna l'elenco 'e cuntrolo 'o tuojo",
+       "action-viewmywatchlist": "vide l'elenco 'e cuntrollo proprio",
        "action-viewmyprivateinfo": "vide 'e date perzunale",
        "action-editmyprivateinfo": "cagnà 'e proprie date perzunale",
        "action-editcontentmodel": "càgna 'o mudelo 'e cuntenute 'e na paggena",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[osservata 'a {{PLURAL:$1|n'utente|$1 utente}}]",
-       "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\")",
-       "rc_categories_any": "Qualònca",
+       "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\"):",
+       "rc_categories_any": "Qualunque d' 'e scigliute",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} aropp'ô cagnamiento",
        "newsectionsummary": "/* $1 */ sezziona nnova",
        "rc-enhanced-expand": "Fa vede dettaglie",
        "recentchangeslinked-toolbox": "Cagnamiénte cullegate",
        "recentchangeslinked-title": "Cagnamiénte cullegate a \"$1\"",
        "recentchangeslinked-summary": "Chest'è n'alenco d' 'e cagnamiente fatte mò a 'e paggene cullegate 'a chilla specificata (o pe' cuntenute dint'a na categurìa specificata). 'E paggene cuntenute dint' 'o proprio elenco 'e l'[[Special:Watchlist|Paggene cuntrullate]] songo mmustate 'n '''grassetto'''.",
-       "recentchangeslinked-page": "Nomme dda paggena",
+       "recentchangeslinked-page": "Nomme d' 'a paggena",
        "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
-       "upload": "Careca file",
+       "upload": "Carreca file",
        "uploadbtn": "Carreca file",
        "reuploaddesc": "Torna a 'o modulo pe ffà 'a carreca",
        "upload-tryagain": "Manna 'a descrizione d' 'o file cagnato",
        "upload-too-many-redirects": "L'URL teneva troppe redirect",
        "upload-http-error": "N'errore HTTP è succiesso: $1",
        "upload-copy-upload-invalid-domain": "Nun è permessa 'a carreca 'e copie 'a chistu dumminio.",
+       "upload-dialog-title": "Carreca file",
+       "upload-dialog-error": "N'errore cumparette",
+       "upload-dialog-warning": "N'avviso cumparette",
+       "upload-dialog-button-cancel": "Canciella",
+       "upload-dialog-button-done": "Fatto",
+       "upload-dialog-button-save": "Sarva",
+       "upload-dialog-button-upload": "Carreca",
+       "upload-dialog-label-select-file": "Sceglie file",
+       "upload-dialog-label-infoform-title": "Dettaglie",
+       "upload-dialog-label-infoform-name": "Nomme",
+       "upload-dialog-label-infoform-description": "Descrizzione",
+       "upload-dialog-label-usage-title": "Aúso",
+       "upload-dialog-label-usage-filename": "Nomme d' 'o file",
        "backend-fail-stream": "Nun se può mannà 'o file \"$1\".",
        "backend-fail-backup": "Nun se può ffà 'o backup d' 'o file \"$1\".",
        "backend-fail-notexists": "'O file $1 nun esiste.",
        "uploadstash-nofiles": "Nun tenite file annascunnute.",
        "uploadstash-badtoken": "L'esecuzione 'e sta azione nun ha avuto successo, forse pecché 'e credenziale 'e cagnamiento so' mmaturate. Prova n'ata vota.",
        "uploadstash-errclear": "'A pulezzia d' 'e file nun ha avuto successo.",
-       "uploadstash-refresh": "Agghiuorna l'alenco d' 'e file",
+       "uploadstash-refresh": "Agghiuorna l'elenco d' 'e file",
        "invalid-chunk-offset": "Distanza d' 'a parte nun valida",
        "img-auth-accessdenied": "Acciesso negato",
        "img-auth-nopathinfo": "PATH_INFO mancante.\n'O server nun è mpustato pe' passà sta nfurmazione.\nPuò darse ca, essenno basato ncopp'a CGI, nun putesse suppurtà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "filehist-comment": "Commento",
        "imagelinks": "Jonte ê ffiure",
        "linkstoimage": "{{PLURAL:$1|Sta paggena cullega|$1 'e sti paggene cullegano}} a stu file:",
-       "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggene cullegano|paggene cullegano}} a stu file.<br />\nL'alenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è a disposizione.",
+       "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggena cullega|paggene cullegano}} a stu file.<br />\nL'elenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è a disposizione.",
        "nolinkstoimage": "Nisciuna paggena cullega a stu file.",
        "morelinkstoimage": "Vide [[Special:WhatLinksHere/$1|cchiù cullegamiente]] a stu file.",
        "linkstoimage-redirect": "$1 (redirezionamiente d' 'o file) $2",
        "mimesearch-summary": "Sta paggena permette filtrà 'e file a sicondo 'o tipo 'e MIME.\nNzertate 'a stringa 'e ricerca comm'a nu tipo/sottotipo o tipo/*, p'esempio: <code>image/jpeg</code>.",
        "mimetype": "Tipo 'e MIME:",
        "download": "scarreca",
-       "unwatchedpages": "Paggene fore l'alenco 'e cuntrollo",
+       "unwatchedpages": "Paggene fore l'elenco 'e cuntrollo",
        "listredirects": "Liste 'e ridirezionamiente",
        "listduplicatedfiles": "Lista d' 'e file duplicate",
        "listduplicatedfiles-summary": "Chist'è n'alenco 'e file, addò 'a verziona cchiù recente 'e nu file è nu duplicato d' 'a verziona cchiù ricente 'e n'atu file. Songhe cunziderate sulamente 'e file lucale.",
        "randomincategory-nopages": "Non ce stanno pàggene dint' 'a [[:Category:$1]].",
        "randomincategory-category": "Categurìa:",
        "randomincategory-legend": "Paggena a uocchio dint' 'a categurìa",
+       "randomincategory-submit": "Vàje",
        "randomredirect": "Redirezionamiento a uocchio",
        "randomredirect-nopages": "Nun ce stanno redirezionamiente int' 'o namespace \"$1\".",
        "statistics": "Statistiche",
        "newpages": "Paggene cchiù frische",
        "newpages-username": "Nomme utente:",
        "ancientpages": "Paggene cchiù viecchie",
-       "move": "Spusta",
-       "movethispage": "Spusta chesta paggena",
+       "move": "Mòve",
+       "movethispage": "Mòve sta paggena",
        "unusedimagestext": "'E file ccà abbascio esisteno, ma nun songo appennute dint' 'a nisciuna paggena.\nPe' piacere vedite ca n'ati site ncopp' 'a ll'Internet putessero cullegà cu nu file direttamente cu l'URL, picciò vedite ca putessero stà dint'a sta lista ancora tenenno nu cullegamiento diretto.",
        "unusedcategoriestext": "'E categurìe ccà abbascio esisteno, ancora ch' 'e categurìe o l'ati paggene nun l'aùsano.",
        "notargettitle": "Nisciuna destinazione",
        "booksources-text": "Ccà abbascio ce sta na lista 'e cullegamiente a l'ati site ca venneno libbre nuove e viecchie, ca putessero pure avé cchiù nfurmaziune ncopp' 'e libbre ca jate ascianno:",
        "booksources-invalid-isbn": "L'ISBN c'avete miso nun pare bbuono; cuntrolla si ce sta cocch'errore quanno stavate cupianno stu nummero d' 'a fonte origginale.",
        "specialloguserlabel": "Mplementatore:",
-       "speciallogtitlelabel": "Destinazione (titolo o utente):",
+       "speciallogtitlelabel": "Destinazione (titolo o {{ns:user}}:cunto utente pe' ll'utente):",
        "log": "Logs",
        "all-logs-page": "Tutte l'archivie pubbleche",
        "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre a disposizione ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
        "linksearch-pat": "Ascìa pe' mudello 'e ricerca:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Truova",
-       "linksearch-text": "'E wildcard cumm'a \"*.wikipedia.org\" ponno essere ausate.<br />\nCe vulesse minimo nu dominio d'auto livello, p'esempio \"*.org\". <br />\n{{PLURAL:$2|Prutucolle}} suppurtate: <code>$1</code> ('o valore 'e bbase è http:// si 'o protocollo nun è stato specificato).",
+       "linksearch-text": "'E wildcard cumm'a \"*.wikipedia.org\" ponno essere ausate.<br />\nCe vulesse minimo nu dominio d'auto livello, p'esempio \"*.org\". <br />\n{{PLURAL:$2|Prutucolle}} suppurtate: $1 ('o valore 'e bbase è http:// si 'o protocollo nun è stato specificato).",
        "linksearch-line": "$1 presente dint'â paggena $2",
        "linksearch-error": "'E wildcard ponno essere ausate sulamente a l'inizio d' 'o hostname.",
        "listusersfrom": "Fà vedè l'utente partenno 'a:",
        "emailuser": "Email chisto utente",
        "emailuser-title-target": "Manna n'email a chist'{{GENDER:$1|utente}}",
        "emailuser-title-notarget": "E-mail 'e l'utente",
-       "emailpage": "E-mail 'e l'utente",
        "emailpagetext": "Putite ausà 'o modulo ccà abbascio pe' mannà na mmasciata e-mail a st'{{GENDER:$1|utente}}.\nL'indirizzo e-mail ch'avite nzertàto dint' 'e [[Special:Preferences|preferenze vuoste]] accumpararrà dint' 'o campo \"'A\" dint' 'a mmasciata e-mail, accussì chillo ca ricevese 'a mail 'o sape ca v'avess'a risponnere direttamente a vuje.",
        "defemailsubject": "e-mail 'e {{SITENAME}} 'a l'utente \"$1\"",
        "usermaildisabled": "L'e-mail utente è stutato",
        "emailccsubject": "Copia d' 'a mmasciata tua 'a $1: $2",
        "emailsent": "Mmasciata e-mail mannata",
        "emailsenttext": "'A mmasciata d' 'a toja s'è mannata.",
-       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"{{int:emailpage}}\" 'e {{SITENAME}}.",
+       "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"{{int:emailuser}}\" 'e {{SITENAME}}.",
        "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
        "usermessage-editor": "Mmasciatore d' 'o sistema",
        "watchlist": "Paggene cuntrullate",
        "watchlistanontext": "Pe' piacere, trasite pe' vedé o cagnà l'elenco 'e paggene cuntrullate.",
        "watchnologin": "Acciesso nun affettuato",
        "addwatch": "Miette dint' 'a l'elenco 'e paggene cuntrullate",
-       "addedwatchtext": "'A paggena \"[[:$1]]\" è stata azzeccata dint'a l'elenco 'e [[Special:Watchlist|paggene cuntrullate]].\n'E cagnamiente future a sta paggena e a tutt' 'e paggene 'e chiacchiera azzeccate sarranno elencate llà dinto.",
+       "addedwatchtext": "'A paggena \"[[:$1]]\" e 'a paggena 'e chiacchiera è stata azzeccata dint'a l'elenco 'e [[Special:Watchlist|paggene cuntrullate]].",
        "addedwatchtext-short": "Chista paggena \"$1\" è stata azzeccata a l'elenco 'e paggene cuntrullate.",
        "removewatch": "Leva 'a l'elenco 'e paggene cuntrullate",
-       "removedwatchtext": "'A paggena \"[[:$1]]\" è stata scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] tuojo.",
+       "removedwatchtext": "\"[[:$1]]\" 'e 'a paggena 'e chiacchiera soja so' state scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] vuosto.",
        "removedwatchtext-short": "Chista paggena \"$1\" è stata luvata a l'elenco 'e paggene cuntrullate.",
        "watch": "Secuta",
        "watchthispage": "Tiene d'uocchio chesta paggena",
        "changecontentmodel-success-title": "'O mudello 'e cuntenuto fuje cagnato",
        "changecontentmodel-success-text": "'O tipo 'e cuntenut 'e [[:$1]] è stato cagnato.",
        "changecontentmodel-cannot-convert": "'E cuntenute dint'a [[:$1]] nun se ponno scagnà a nu tipo 'e $2.",
-       "changecontentmodel-title-cantexist": "Nun è pussibbele 'e n'avé na paggena dint'a $1.",
        "changecontentmodel-nodirectediting": "'O mudello 'e cuntenute $1 nun suppurtasse 'o cagnamiento diretto",
        "log-name-contentmodel": "Riggistro 'e cagnamiente d' 'o mudello 'e cuntenute",
        "log-description-contentmodel": "Evvente azzeccate c' 'o mudello 'e cuntenute 'e na paggena",
-       "logentry-contentmodel-change": "$1 cagnaje 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cagnaje}} 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "arrepiglia",
        "logentry-contentmodel-change-revert": "arrepiglia",
        "protectlogpage": "Riggistro 'e prutezzione",
        "maximum-size": "Diminsiune massime:",
        "pagesize": "(byte)",
        "restriction-edit": "Càgna",
-       "restriction-move": "Spusta",
+       "restriction-move": "Mòve",
        "restriction-create": "Cria",
        "restriction-upload": "Carreca",
        "restriction-level-sysop": "prutetta",
        "undeletepagetext": "{{PLURAL:$1|'A paggena ccà abbascio è stata scancellata però|$1 paggene ccà abbascio so' state scancellate però}} stann'ancora dint' 'a l'archivio e se ponno arrepiglià.<br />\nL'archivie s'hanna pulezzà periodicamente.",
        "undelete-fieldset-title": "Arrepiglia verziune",
        "undeleteextrahelp": "P'arrepiglià 'a cronologgia completa d' 'a paggena, lassate 'e cascie abbacante e facite click ncopp'a '''''{{int:undeletebtn}}'''''.\nPe' putè arrepiglià selettivamente, miette nu zegno ncopp' 'e casciulele currispunnente a 'e verziune ca vulite arripiglià e po' facite click ncopp'a '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|verzione|verziune}} archiviate",
+       "undeleterevisions": "$1 {{PLURAL:$1|verzione|verziune}} scancellate",
        "undeletehistory": "Si arrepiglie 'a paggena, tutte 'e verziune sarrann'arrepigliate nziem'a chista.\nSi na paggena nova c' 'o stesso nomme è stata criata 'a che s'è fatto 'o scancellamiento, 'e verziune arripigliate cumparerranno comme cchiù viecchie dint' 'a cronologgia.",
        "undeleterevdel": "L'arripiglio nun sarrà affettuato si determina 'o scancellamiento parziale d' 'a verzione 'e mo d' 'a paggena o file.\nInt'a sti case, avite 'e smarcà o annasconnere 'e verziune scancellate cchiù nove.",
        "undeletehistorynoadmin": "Sta paggena è stata scancellata.\n'O mutivo d' 'o scancellamiento 'o truvate scritto dint' 'a 'o riepilego ccà abbascio, nzieme ch' 'e dettaglie 'e l'utente c'hanno cagnato sta paggena apprimma 'e se fà 'o scancellamiento.\n'O testo 'e mo 'e sti verziune è a disposizione sulamente a l'ammenistrature.",
        "contributions-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato.",
        "nocontribs": "Nisciunu cagnamiento è stato truvato cu sti criterie.",
        "uctop": "(attuale)",
-       "month": "D\"o mese (e primma):",
+       "month": "D' 'o mese (e pure cchiù primma):",
        "year": "'E ll'anno (e primma):",
        "sp-contributions-newbies": "Mosta solo 'e contribbute dde nove utente",
        "sp-contributions-newbies-sub": "Pe' l'utente nuove",
        "whatlinkshere-hideredirs": "$1 redirects",
        "whatlinkshere-hidetrans": "$1 'nclusione",
        "whatlinkshere-hidelinks": "$1 jonte",
-       "whatlinkshere-hideimages": "$1 links ddo file",
+       "whatlinkshere-hideimages": "$1 links d' 'o file",
        "whatlinkshere-filters": "Filtre",
        "autoblockid": "Autoblocco #$1",
        "block": "Blocca l'utente",
        "ipbenableautoblock": "Automaticamende blocca l'urdeme indirizze IP ausate 'a st'utente, e pure tutte l'IP c'ausasse pe' pruvà 'e fà ati cagnamiente",
        "ipbsubmit": "Blocca st'utente",
        "ipbother": "N'ata durata:",
-       "ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite",
+       "ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mese:1 month,3 mise:3 months,6 mise:6 months,1 anno:1 year,infinito:infinite",
        "ipbhidename": "Annascunne 'o nomme utente d' 'a lista 'e cagnamiente e l'ati liste",
        "ipbwatchuser": "Fà vedé 'a paggena utente e le chiacchieriate 'e st'utente",
        "ipb-disableusertalk": "Nun permettere a st'utente edità 'a paggena 'e chiacchiera d' 'a soja pe' tramente ch'e bloccato",
        "movepagetext": "Ausanno stu modulo ccà abbascio s'anommenarrà 'a paggena n'ata vota, movenno tutt' 'a cronologgia suja a l'atu nomme.\n'O titolo viecchio s'addeventarrà nu redirect â paggena c' 'o titolo nuovo. Putite agghiurnà 'e redirect ca puntassero ô titolo origgenale automaticamente.\nSi chesto nun facite, state sicuro 'e cuntrullà [[Special:DoubleRedirects|doppie ridirezionamiente]] o [[Special:BrokenRedirects|ridirezionamiente scassate]]. Vuje site 'o responsabbile 'e chillo ca cumbinate, assicurateve ca 'o cullegamiento cuntinua a spuntà addò avess'a spuntà.\n\nVedite bbuono ca 'a paggena <strong>nun</strong> se muoverrà si esiste n'ata paggena c' 'o titolo nuovo, a meno ca è abbacante o ca ce sta na paggena 'e ridirezionamiento senza cronologgia. Chesto significasse ca putite fà turnà 'o nomme viecchio â paggena addò ce steva apprimma si avite cumbinato nu nguacchio p'errore, e nun può sovrascrivere 'a paggena ch'esiste già. <strong>Attenzione!</strong> Chisto può essere nu cagnamiento drastico e inaspettato 'e na paggena famosa assaje; pe' piacere, avite 'a essere sicure-sicure d' 'e conseguenze apprimm' 'e cuntinuà.",
        "movepagetext-noredirectfixer": "Ausanno stu modulo ccà abbascio s'anommenarrà 'a paggena n'ata vota, movenno tutt' 'a cronologgia suja a l'atu nomme.\n'O titolo viecchio s'addeventarrà nu redirect â paggena c' 'o titolo nuovo. State sicuro 'e cuntrullà [[Special:DoubleRedirects|doppie ridirezionamiente]] o [[Special:BrokenRedirects|ridirezionamiente scassate]]. Vuje site 'o responsabbile 'e chillo ca cumbinate, assicurateve ca 'o cullegamiento cuntinua a spuntà addò avess'a spuntà.\n\nVedite bbuono ca 'a paggena <strong>nun</strong> se muoverrà si esiste n'ata paggena c' 'o titolo nuovo, a meno ca è abbacante o ca ce sta na paggena 'e ridirezionamiento senza cronologgia. Chesto significasse ca putite fà turnà 'o nomme viecchio â paggena addò ce steva apprimma si avite cumbinato nu nguacchio p'errore, e nun può sovrascrivere 'a paggena ch'esiste già. <strong>Attenzione!</strong> Chisto può essere nu cagnamiento drastico e inaspettato 'e na paggena famosa assaje; pe' piacere, avite 'a essere sicure-sicure d' 'e conseguenze apprimm' 'e cuntinuà.",
        "movepagetalktext": "'A paggena 'e chiacchieria suoccia a chesta sarrà spustata automaticamente cu chesta <strong>a meno che:</strong>\n*Esiste na paggena 'e chiacchieria ca nun è abbacante c' 'o nomme nuovo, o\n*Vuje sciglite accussì abbacantanno 'a casciulella ccà abbascio.\n\nInd' 'a sti case, 'a paggena nun se muoverrà, ma 'a putite sempe scagnà manualmente si vulite.",
-       "movearticle": "Spusta 'a paggena",
+       "movearticle": "Mòve 'a paggena",
        "moveuserpage-warning": "<strong>Attenziò:</strong> Vuje state a muovere na paggena utente. Vedite bbuono ca sulamente 'a paggena sarrà spustata e l'utente <em>nun</em> sarrà reanummenato.",
        "movecategorypage-warning": "<strong>Attenziò:</strong> Vuje state a muovere na categurìa. Vedite bbuono ca sulamente 'a paggena sarrà spustata e 'a categurìa viecchia <em>nun</em> sarrà cagnata â nnova.",
        "movenologintext": "Vuje avite 'a essere n'utente riggistrato e [[Special:UserLogin|cullegato]] pe' spustà na paggena.",
        "cant-move-to-category-page": "Nun tenite 'o permesso pe' muovere 'a paggena ncopp' 'a na categurìa",
        "newtitle": "Titulo nuovo:",
        "move-watch": "Cuntrolla sta paggena",
-       "movepagebtn": "Spusta 'a paggena",
+       "movepagebtn": "Mòve 'a paggena",
        "pagemovedsub": "Spustamento fatto",
        "movepage-moved": "<strong>\"$1\" è stata spustata int' 'a \"$2\"</strong>",
        "movepage-moved-redirect": "Nu redirezionamiento è stato criato.",
        "movenosubpage": "Sta paggena nun tene sottopaggene.",
        "movereason": "Raggióne",
        "revertmove": "arrepiglia",
-       "delete_and_move": "Scancèlla e spusta",
+       "delete_and_move": "Scancèlla e mòve",
        "delete_and_move_text": "== Scancellamiento richiesto ==\n'A paggena 'e destinazione \"[[:$1]]\" esiste già.\n'A vulite scancellà pe' ne putè ffà 'o spazio abbacante necessario?",
        "delete_and_move_confirm": "Sì, suprascrivi 'a paggena asistente",
        "delete_and_move_reason": "Scancellata pe ne fà spazio abbacante e putè spustà 'a \"[[$1]]\"",
        "tooltip-ca-unprotect": "Càgna 'a prutezzione 'e chesta paggena",
        "tooltip-ca-delete": "Scancèlla chista paggena",
        "tooltip-ca-undelete": "Arrepiglia 'e cagnamiente fatte 'a sta paggena apprimma ca fuieno scancellate",
-       "tooltip-ca-move": "Spusta chista paggena",
+       "tooltip-ca-move": "Mòve sta paggena",
        "tooltip-ca-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
        "tooltip-ca-unwatch": "Lèva sta paggena d' 'a lista 'e paggene cuntrullate vuosta",
        "tooltip-search": "Truova dint'ô {{SITENAME}}",
        "tooltip-n-mainpage-description": "Visita a paggena prencepale",
        "tooltip-n-portal": "Descrizione d' 'o prugietto, che po' ffa, addò truvà 'e ccose",
        "tooltip-n-currentevents": "Ascìa 'e nfurmaziune ncopp' 'e fatte succiesse mò mò",
-       "tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte ddo sito",
+       "tooltip-n-recentchanges": "Ennece dde urdeme cagnamiénte d' 'o sito",
        "tooltip-n-randompage": "Na paggena qualsiase",
        "tooltip-n-help": "Paggena 'e ajùto",
        "tooltip-t-whatlinkshere": "'Na lista 'e tutte e paggene ca song cullegate a chista",
        "tooltip-t-contributions": "Lista dde contributte 'e chisto utente",
        "tooltip-t-emailuser": "Manna 'nu email a chisto utente",
        "tooltip-t-info": "Cchiù nfurmaziune ncopp'a sta paggena",
-       "tooltip-t-upload": "Careca file",
+       "tooltip-t-upload": "Carreca file",
        "tooltip-t-specialpages": "Lista 'e tutte e paggene speciale",
        "tooltip-t-print": "Vversione pe' stampa 'e chista paggena",
        "tooltip-t-permalink": "Jonta permanente a chista vversione dda paggena",
        "tooltip-ca-nstab-main": "Vere a paggena e contenuto",
        "tooltip-ca-nstab-user": "Vere a paggena utente",
        "tooltip-ca-nstab-media": "Vide 'a pàggena d' 'e media",
-       "tooltip-ca-nstab-special": "Chista è 'na paggena speciale, nun può essere càgnata",
+       "tooltip-ca-nstab-special": "Chista è 'na paggena speciale e nun può essere càgnata",
        "tooltip-ca-nstab-project": "Vere a paggena 'e servizio",
        "tooltip-ca-nstab-image": "Vere a paggena ddo file",
        "tooltip-ca-nstab-mediawiki": "Vide 'a mmasciata d' 'o sistema",
        "spam_reverting": "Arrepiglianno l'urdema verziona ca nun cuntene 'e link a $1",
        "spam_blanking": "Tutt' 'e verziune cuntenenno cullegamiente a $1, pulezzate e sbacantate",
        "spam_deleting": "Tutt' 'e verziune cuntenenno cullegamiente a $1, scancellanno",
-       "simpleantispam-label": "Cuntrollo anti-spam.\n<strong>NUN</strong> ghienchere!",
+       "simpleantispam-label": "Cuntrollo anti-spam.\n<strong>nun</strong> ghienchere!",
        "pageinfo-title": "Nfurmaziune pe' \"$1\"",
        "pageinfo-not-current": "Scusate, nun se ponno piglià sti nfurmaziune p' 'e verziune viecchie.",
        "pageinfo-header-basic": "Nfurmaziune bbase",
        "pageinfo-robot-index": "Permesso",
        "pageinfo-robot-noindex": "Nun permesso",
        "pageinfo-watchers": "Nummero 'e visite â paggena",
-       "pageinfo-visiting-watchers": "Nummero 'e utente ca stanno a vedè 'e cagnamiente cchiù nuove",
+       "pageinfo-visiting-watchers": "Nummero 'e utente ca so' state a vedè 'e cagnamiente cchiù nuove",
        "pageinfo-few-watchers": "Meno 'e $1 {{PLURAL:$1|visita|visite}}",
        "pageinfo-few-visiting-watchers": "Esistesse o forse nun esistesse n'utente ca stesse a vedé 'e cagnamiente cchiù ricente",
        "pageinfo-redirects-name": "Nummero 'e redirect a sta paggena",
        "specialpages-note": "* Paggene speciale normale.\n* <span class=\"mw-specialpagerestricted\">Paggene speciale ch' 'e restriziune.</span>",
        "specialpages-group-maintenance": "Report 'e manutenzione",
        "specialpages-group-other": "Ati paggene speciale",
-       "specialpages-group-login": "Tràse o cria n'acciesso novo",
+       "specialpages-group-login": "Trasite o criate n'acciesso nuovo",
        "specialpages-group-changes": "Cagnamiente 'e mò mò e riggistre",
        "specialpages-group-media": "Riepileghe 'e media e carreche",
        "specialpages-group-users": "Utente e deritte",
        "htmlform-cloner-create": "Azzecca 'e cchiù",
        "htmlform-cloner-delete": "Lèva",
        "htmlform-cloner-required": "Servesse al minimo nu valore.",
+       "htmlform-title-badnamespace": "[[:$1]] nun è dint'a lu namespace \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" nun è nu titolo criabbele 'e paggena",
+       "htmlform-title-not-exists": "[[:$1]] nun esiste.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nun esiste.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nun è nu nomme buono.",
        "sqlite-has-fts": "$1 cu supporto 'e ricerche full-text",
        "sqlite-no-fts": "$1 senza supporto 'e ricerche full-text",
        "logentry-delete-delete": "$1 {{GENDER:$2|scancellaje}} 'a paggena $3",
        "logentry-newusers-create2": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1",
        "logentry-newusers-byemail": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1 e 'a passuor è stata mannata pe' bbìa 'e na mmasciata e-mail",
        "logentry-newusers-autocreate": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}} automatecamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|spustaje}} mpustaziune 'e pruteziona 'a $4 a $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
        "logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
        "log-description-pagelang": "Chest'è nu riggistro 'e cagnamiente 'e lengua d' 'e paggene.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ave cagnato}} 'a lengua d' 'a paggena $3 'a $4 a $5.",
        "default-skin-not-found": "Oops! 'A skin predefinta ' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\n'A installazione pare ca tenesse {{PLURAL:$4|'a skin|'e skin}} ccà abbascio. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] pe' n'avè cchiù nfurmaziune ncopp' 'a manera {{PLURAL:$4|'e ll'abbià}} o scegliere chilla predefinita.\n\n$2\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanno 'o [https://www.mediawiki.org/wiki/Download programma 'e installazione tarball], ca venesse fornito ch' 'e diverze skin ed estenziune. Putite fare copia-azzecca d' 'a directory <code dir=\"ltr\">skins/</code>.\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' scarrecà skin].\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki.\n\n; Si avite MediaWiki agghiurnato MediaWiki mò mò:\n: MediaWiki 1.24 e verziune appriesso nun abbìa automatecamente 'e skin installate (vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]). Putite copià {{PLURAL:$5|'a linea|'e linee}} ccà abbascio dint' 'o <code>LocalSettings.php</code> pe' putè appiccià {{PLURAL:$5|'o|tutt' 'e}} {{PLURAL:$5|skin}} installate mò mò:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si avite cagnato mò mò <code>LocalSettings.php</code>:\n: Cuntrullate 'e nomme d' 'e skin n'ata vota pe' ve sparagnà cocch'errore 'e battitura.",
-       "default-skin-not-found-no-skins": "Oops! 'A skin predefinita p' 'o wiki vuosto, definita 'n <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, nun se tròva.\n\nNun avite installato nisciuno skin.\n\n; Si avite installato MediaWiki mò mò:\n: Probabbilmente l'avite installato 'a git, o direttamente 'a 'o codece sorgente ausanno cocch'atu metodo. Chesto era permesso. Verite 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins directory ncoppa mediawiki.org], tramite:\n:* Scarrecanne 'e tarballs individuale 'e skin 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Ausanno Git pe' ve ffà 'a scarreca 'e skin].\n: Facenno accussì nun se mmescasse 'o repository git vuosto si site sviluppatore MediaWiki. Vedite [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automateco skin]) pe n'avè nfurmaziune ncopp' 'a maniera d'appiccià e scegliere chella predefinita.",
+       "default-skin-not-found-no-skins": "oops! 'O skin predefinito p' 'a wiki vuosta, definito int'a <code>$wgDefaultSkin</code> comm'a <code>$1</code>, nun è a disposizione.\n\nVuje nun tenite nisciuno skin installato.\n\n; Si avite installato o agghiurnato MediaWiki mo' mo':\n: È possibbele ca l'avite installato 'a git, o direttamente d' 'o codece sorgente ausanno n'atu metodo. Chesto s'aspettava. Mediawiki 1.24 o cchiù nuova nun include nisciuno skin dint' 'o repositorio prencepale. Tentate 'e installà cocche skin 'a [https://www.mediawiki.org/wiki/Category:All_skins sta cartella 'e mediawiki.org], facenno:\n:* Scarreca 'e [https://www.mediawiki.org/wiki/Download tarball installer], ca venesse cu nu cuofeno 'e skin e estensiune. Vuje putite cupià e azzeccà 'a cartella <code>skins/</code> 'a chiste.\n:* Scarrecanno tarball 'e skin individuale 'a [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Using Git to download skins].\n: Doing this should not interfere with your git repository if you're a MediaWiki developer. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable skins and choose the default.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (funzione appicciata)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''funzione stutata''')",
        "mediastatistics": "Statistiche d' 'e media",
        "special-characters-title-endash": "trattino enne",
        "special-characters-title-emdash": "trattino emme",
        "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-no-date": "Nisciuna data scigliuta",
        "mw-widgets-titleinput-description-new-page": "'a pàggene nun esiste ancore",
        "mw-widgets-titleinput-description-redirect": "redirezionate ncopp' a $1"
 }
index 9543827..2f6fedc 100644 (file)
@@ -44,7 +44,8 @@
                        "Chameleon222",
                        "Helland",
                        "Macofe",
-                       "Kingu"
+                       "Kingu",
+                       "Tarjeimo"
                ]
        },
        "tog-underline": "Strek under lenker:",
        "lastmodifiedat": "Denne siden ble sist endret $1 kl. $2.",
        "viewcount": "Denne siden er vist {{PLURAL:$1|én gang|$1 ganger}}.",
        "protectedpage": "Låst side",
-       "jumpto": " til:",
+       "jumpto": "Hopp til:",
        "jumptonavigation": "navigasjon",
        "jumptosearch": "søk",
        "view-pool-error": "Beklager, serverne er overbelastet for øyeblikket.\nFor mange brukere forsøker å se denne siden.\nVennligst vent en stund før du prøver å besøke denne siden på nytt.\n\n$1",
        "badtitletext": "Den ønskede tittelen var ugyldig, tom eller feilaktig lenket fra en annen wiki.\nDen inneholder kanskje ett eller flere tegn som ikke kan brukes i titler.",
        "title-invalid-empty": "Den forespurte sidetittelen er tom eller inneholder bare navnet til et navnerom.",
        "title-invalid-utf8": "Den forespurte sidetittelen inneholder en ugyldig UTF-8-sekvens.",
-       "title-invalid-interwiki": "Tittel inneholder en interwiki-lenke",
+       "title-invalid-interwiki": "Den ønskede sidetittel inneholder en interwiki-link som ikke kan brukes i titler.",
        "title-invalid-talk-namespace": "Den forespurte sidetittelen refererer til en diskusjonsside som ikke kan eksistere.",
        "title-invalid-characters": "Den forespurte sidetittelen inneholder ugyldige tegn: «$1».",
        "title-invalid-relative": "Tittel har relativ sti. Relative sidetitler (./, ../) er ugyldige fordi de ofte vil være unåelige når de blir håndtert av brukerens nettleser.",
        "title-invalid-magic-tilde": "Den ønskede sidetittelen inneholder en ugyldig magisk tildesekvens (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Den ønskede sidetittelen er for lang. Den kan ikke være lengre enn $1 bytes i UTF-8-koding.",
+       "title-invalid-too-long": "Den ønskede sidetittelen er for lang. Den kan ikke være lengre enn $1 {{PLURAL:$1|byte|bytes}} med UTF-8-koding.",
        "title-invalid-leading-colon": "Den ønskede sidetittelen inneholder et ugyldig kolon i starten.",
        "perfcached": "Følgende data er en tidligere kopi og ikke nødvendigvis den siste versjonen i databasen. Maksimalt {{PLURAL:$1|ett resultat|$1 resultater}} er {{PLURAL:$1|tilgjengelig|tilgjengelige}} som tidligere kopier.",
        "perfcachedts": "Listen ble sist oppdatert $1. Maksimalt {{PLURAL:$4|ett resultat|$4 resultater}} vises.",
        "actionthrottled": "Handlingsgrense overskredet",
        "actionthrottledtext": "For å beskytte mot spam, kan du ikke utføre denne handlingen for mange ganger i løpet av et kort tidssrom, og du har overskredet denne grensen. Prøv igjen om noen minutter.",
        "protectedpagetext": "Denne siden har blitt låst for endringer.",
-       "viewsourcetext": "Du kan se og kopiere kilden til denne siden:",
-       "viewyourtext": "Du kan se og kopiere kilden til '''dine endringer''' på denne siden:",
+       "viewsourcetext": "Du kan se og kopiere kildekoden til denne siden:",
+       "viewyourtext": "Du kan se og kopiere kilden til <strong>dine endringer</strong> på denne siden.",
        "protectedinterface": "Denne siden kontrollerer brukergrensesnittekst for programvaren, og er låst for å hindre misbruk.",
        "editinginterface": "<strong>Advarsel:</strong> Du redigerer en side som brukes til å kontrollere grensesnittekst for programvaren.\nEndringer av denne siden vil påvirke hvordan grensesnittet vil se ut for andre brukere på denne wikien.",
        "translateinterface": "For å legge til eller endre oversettelser for alle wikier bruk [//translatewiki.net/ translatewiki.net], MediaWikis lokaliseringsprosjekt.",
-       "cascadeprotected": "Denne siden er låst for redigering fordi den inkluderes på følgende sider som har dypbeskyttelse slått på:<!--{{PLURAL:$1}}-->\n$2",
+       "cascadeprotected": "Denne siden er låst for redigering fordi den inkluderes på følgende {{PLURAL:$1|side som har|sider som har}} som har dypbeskyttelse slått på:\n$2",
        "namespaceprotected": "Du har ikke tillatelse til å redigere sider i navnerommet '''$1'''.",
        "customcssprotected": "Du har ikke tillatelse til å redigere denne CSS-siden fordi den inneholder en annen brukers personlige innstillinger.",
        "customjsprotected": "Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den inneholder en annen brukers personlige innstillinger.",
        "createacct-benefit-body2": "{{PLURAL:$1|side|sider}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktiv bidragsyter|aktive bidragsytere}}",
        "badretype": "Passordene samsvarte ikke.",
+       "usernameinprogress": "Opprettelsesprosessen for dette brukernavnet er igang.\nVennligst vent.",
        "userexists": "Brukernavnet er allerede i bruk.\nVelg et annet brukernavn.",
        "loginerror": "Innloggingsfeil",
        "createacct-error": "Feil med kontoppretting",
        "creating": "Oppretter $1",
        "editingsection": "Redigerer $1 (avsnitt)",
        "editingcomment": "Redigerer $1 (ny seksjon)",
-       "editconflict": "Endringene dine kunne ikke lagres på grunn av en redigeringskonflikt. Vil {{GENDER:|du}} løse konflikten manuelt?",
+       "editconflict": "Redigeringskollisjon: $1",
        "explainconflict": "Noen andre har endret teksten siden du begynte å redigere.\nDen øverste boksen inneholder den nåværende teksten.\nDine endringer vises i den nederste boksen.\nDu er nødt til å flette dine endringer sammen med den nåværende teksten.\n'''Kun''' teksten i den øverste tekstboksen blir lagret når du trykker «{{int:savearticle}}».",
        "yourtext": "Din tekst",
        "storedversion": "Den lagrede versjonen",
        "yourdiff": "Forskjeller",
        "copyrightwarning": "Merk at alle bidrag til {{SITENAME}} anses som frigitt under $2 (se $1 for detaljer).\nOm du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.<br />\nDu lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.\n'''Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!'''",
        "copyrightwarning2": "Vennligst merk at alle bidrag til {{SITENAME}} kan bli redigert, endret eller fjernet av andre bidragsytere.\nOm du ikke vil at dine bidrag skal kunne redigeres fritt, ikke legg det til her.<br />\nDu lover også at du har skrevet dette selv, eller kopiert det fra en ressurs som er i offentlig eie eller en lignende fri ressurs (se $1 for detaljer).\n'''Ikke legg til opphavsrettsbeskyttet materiale uten tillatelse!'''",
+       "editpage-cannot-use-custom-model": "Innholdsmodellen for denne siden kan ikke endres.",
        "longpageerror": "'''Feil: Teksten du ønsker å lagre er {{PLURAL:$1|én kilobyte|$1 kilobyte}} stor. Dette er større enn det tillatte maksimum på {{PLURAL:$2|én kilobyte|$2 kilobyte}}.'''\nDen kan ikke lagres.",
        "readonlywarning": "'''ADVARSEL: Databasen er låst på grunn av vedlikehold,\nså du kan ikke lagre dine endringer akkurat nå. Det kan være en god idé å\nkopiere teksten din til en tekstfil, så du kan lagre den til senere.'''\n\nSystemadministratoren som låste databasen oppga følgende årsak: $1",
        "protectedpagewarning": "'''Advarsel: Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den.'''\nDet siste loggelementet er oppgitt under som referanse:",
        "semiprotectedpagewarning": "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.\nDet siste loggelementet er oppgitt under som referanse:",
-       "cascadeprotectedwarning": "'''Advarsel:''' Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|sider}}:",
+       "cascadeprotectedwarning": "<strong>Advarsel:</strong> Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|side|sider}}:",
        "titleprotectedwarning": "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|bestemte rettigheter]] kreves for å opprette den.'''\nTil orientering vises den siste loggoppføringen under:",
        "templatesused": "{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:",
        "templatesusedpreview": "{{PLURAL:$1|Mal|Maler}} brukt i denne forhåndsvisningen:",
        "log-fulllog": "Vis hele loggen",
        "edit-hook-aborted": "Redigering avbrutt av en funksjon, uten forklaring.",
        "edit-gone-missing": "Kunne ikke oppdatere siden fordi den har blitt slettet.",
-       "edit-conflict": "Redigeringskonflikt.",
+       "edit-conflict": "Redigeringskollisjon.",
        "edit-no-change": "Redigeringen din ble ignorert fordi det ikke var noen endringer.",
        "postedit-confirmation-created": "Siden har blitt opprettet.",
        "postedit-confirmation-restored": "Siden har blitt gjenopprettet.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tomt objekt",
        "content-json-empty-array": "Tom matrise",
-       "duplicate-args-category": "Sider med like argumenter i malkall",
+       "duplicate-args-warning": "<strong>Advarsel:</strong> [[:$1]] kaller [[:$2]] med flere enn en verdi for \"$3\"-parameteren. Bare den sist angitte verdien vil brukes.",
+       "duplicate-args-category": "Sider med duplikate argumenter i malkall",
        "duplicate-args-category-desc": "Denne siden inneholder malkall med duplikate parametre, slik som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
        "expensive-parserfunction-category": "Sider med for mange prosesskrevende parserfunksjoner",
        "search-category": "(kategori $1)",
        "search-file-match": "(matcher filinnhold)",
        "search-suggest": "Mente du: $1",
+       "search-rewritten": "Viser resultatet for $1. Søk i stedet for $2.",
        "search-interwiki-caption": "Søsterprosjekter",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mer)",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
-       "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resulter}} fra og med nummer <strong>$2</strong> til og med nummer <strong>$3</strong>.",
+       "showingresultsinrange": "Nedenfor vises opptil {{PLURAL:$1|<strong>1</strong> resultat|<strong>$1</strong> resultater}} fra og med nummer <strong>$2</strong> til og med nummer <strong>$3</strong>.",
        "search-showingresults": "Resultat <strong>{{PLURAL:$4|$1|$1–$2}}</strong> av <strong>$3</strong>",
        "search-nonefound": "Ingen resultater passet til søket.",
        "powersearch-legend": "Avansert søk",
        "rows": "Rader:",
        "columns": "Kolonner",
        "searchresultshead": "Søk",
-       "stub-threshold": "Grense for <span class=\"mw-stub-example\">stubblenkeformatering</span>:",
+       "stub-threshold": "Grense for stubblenkeformatering ($1):",
+       "stub-threshold-sample-link": "eksempel",
        "stub-threshold-disabled": "Deaktivert",
        "recentchangesdays": "Antall dager som skal vises i siste endringer:",
        "recentchangesdays-max": "Maks $1 {{PLURAL:$1|dag|dager}}",
        "badsig": "Ugyldig råsignatur; sjekk HTML-elementer.",
        "badsiglength": "Signaturen er for lang.\nDen kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.",
        "yourgender": "Hvordan ønsker du å bli omtalt?",
-       "gender-unknown": "Jeg ønsker ikke å spesifisere",
+       "gender-unknown": "Når du omtales, vil programvaren bruke kjønnsnøytrale ord så ofte som mulig.",
        "gender-male": "Han redigerer wikisider",
        "gender-female": "Hun redigerer wikisider",
        "prefs-help-gender": "Det er valgfritt å angi dette.\nProgramvaren bruker verdien for å anvende riktig grammatikalsk kjønn ved henvendelser til deg og i omtale av deg for andre brukere.\nInformasjonen vil være offentlig.",
        "userrights-lookup-user": "Ordne brukergrupper",
        "userrights-user-editname": "Skriv inn et brukernavn:",
        "editusergroup": "Endre brukergrupper",
-       "editinguser": "Endrer brukerrettighetene til '''[[User:$1|$1]]''' $2",
+       "editinguser": "Endrer brukerrettighetene for {{GENDER:$1|bruker}} <strong>[[Bruker:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Rediger brukergrupper",
        "saveusergroups": "Lagre brukergrupper",
        "userrights-groupsmember": "Medlem av:",
        "uploaddisabledtext": "Opplasting er slått av.",
        "php-uploaddisabledtext": "PHP-filopplasting er deaktivert. Sjekk innstillingen for file_uploads.",
        "uploadscripted": "Denne filen inneholder HTML eller skripting som kan feiltolkes av en nettleser.",
+       "upload-scripted-pi-callback": "Det er ikke tillatt å laste opp en fil som inneholder et kjørbart XML-stilark.",
+       "uploaded-script-svg": "Fant et skriptelement \"$1\" i den opplastede SVG-koden.",
        "uploadscriptednamespace": "Denne SVG-filen inneholder et ulovlig navnerom \"$1\"",
        "uploadinvalidxml": "XML-en i den opplastede filen kunne ikke tolkes.",
        "uploadvirus": "Denne filen inneholder virus! Detaljer: $1",
        "longpages": "Lange sider",
        "deadendpages": "Blindveisider",
        "deadendpagestext": "Følgende sider lenker ikke til andre sider på {{SITENAME}}.",
-       "protectedpages": "Låste sider",
+       "protectedpages": "Beskyttede sider",
        "protectedpages-indef": "Kun beskyttelser på ubestemt tid",
        "protectedpages-summary": "Denne siden viser en liste av eksisterende sider som for tiden er beskyttet. For å se en liste av sider som er beskyttet mot opprettelse, se [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Kun dypbeskyttelse",
        "linksearch-pat": "Søkemønster:",
        "linksearch-ns": "Navnerom:",
        "linksearch-ok": "Søk",
-       "linksearch-text": "Jokertegn slik som i «*.wikipedia.org» kan brukes.\nDet kreves at det oppgis minst et toppnivådomene, for eksempel «*.org».<br />\n{{PLURAL:$2|Støttede protokoller}}: <code>$1</code> (ikke legg til noen av disse i søket ditt).",
+       "linksearch-text": "Jokertegn slik som i «*.wikipedia.org» kan brukes.\nDet kreves at det oppgis minst et toppnivådomene, for eksempel «*.org».<br />\n{{PLURAL:$2|Støttede protokoller}}: $1 (ikke legg til noen av disse i søket ditt).",
        "linksearch-line": "$1 lenkes fra $2",
        "linksearch-error": "Jokertegn kan kun brukes foran tjenernavnet.",
        "listusersfrom": "Vis brukere fra og med:",
        "emailuser": "E-post til denne brukeren",
        "emailuser-title-target": "Send e-post til denne {{GENDER:$1|brukeren}}",
        "emailuser-title-notarget": "E-post til bruker",
-       "emailpage": "E-post til bruker",
        "emailpagetext": "Du kan bruke skjemaet under for å sende en e-post til denne {{GENDER:$1|brukeren}}.\nE-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil vises i «Fra»-feltet i e-posten, slik at mottakeren kan svare deg direkte.",
        "defemailsubject": "E-post fra {{SITENAME}}-brukeren «$1»",
        "usermaildisabled": "Brukerepost deaktivert",
        "emailccsubject": "Kopi av din beskjed til $1: $2",
        "emailsent": "E-post sendt",
        "emailsenttext": "E-postbeskjeden er sendt",
-       "emailuserfooter": "Denne e-posten ble sendt av $1 til $2 via funksjonen «{{int:emailpage}}» på {{SITENAME}}.",
+       "emailuserfooter": "Denne e-posten ble sendt av $1 til $2 via funksjonen «{{int:emailuser}}» på {{SITENAME}}.",
        "usermessage-summary": "Etterlater en systembeskjed.",
        "usermessage-editor": "Systembudbringer",
        "watchlist": "Overvåkningsliste",
        "ipb-confirmhideuser": "Du er i ferd med å blokkere en bruker med «skjul bruker» aktivert. Dette vil skjule brukerens navn i alle lister og loggoppføringer. Er du sikker på at du vil gjøre dette?",
        "ipb-confirmaction": "Marker feltet \"{{int:ipb-confirm}}\" nederst om du er sikker på at du virkelig vil gjøre det.",
        "ipb-edit-dropdown": "Rediger blokkeringsgrunner",
-       "ipb-unblock-addr": "Avblokker $1",
-       "ipb-unblock": "Avblokker et brukernavn eller en IP-adresse",
+       "ipb-unblock-addr": "Opphev blokkering av $1",
+       "ipb-unblock": "Opphev blokkering av et brukernavn eller en IP-adresse",
        "ipb-blocklist": "Vis gjeldende blokkeringer",
        "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
        "unblockip": "Opphev blokkering",
        "import-revision-count": "({{PLURAL:$1|Én revisjon|$1 revisjoner}})",
        "importnopages": "Ingen sider å importere.",
        "imported-log-entries": "Importerte $1 {{PLURAL:$1|loggoppføring|loggoppføringer}}.",
-       "importfailed": "Importering mislyktes: $1",
+       "importfailed": "Import mislyktes: $1",
        "importunknownsource": "Ukjent importkildetype",
        "importcantopen": "Kunne ikke åpne importfil",
        "importbadinterwiki": "Ugyldig interwikilenke",
-       "importsuccess": "Importering ferdig.",
+       "importsuccess": "Import ferdig!",
        "importnosources": "Ingen transwikiimportkilder er angitt, og direkte historikkimporteringer er slått av.",
        "importnofile": "Ingen importfil opplastet.",
        "importuploaderrorsize": "Importfilopplasting mislyktes. Filen er større enn tillatt opplastingsstørrelse.",
        "import-rootpage-nosubpage": "Navnerommet \"$1\" til grunnsiden tillater ikke undersider.",
        "importlogpage": "Importlogg",
        "importlogpagetext": "Administrativ import av sider med redigeringshistorikk fra andre wikier.",
-       "import-logentry-upload-detail": "{{PLURAL:$1|\\Én revisjon|$1 revisjoner}} er importert",
+       "import-logentry-upload-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} er importert fra $2",
        "javascripttest": "JavaScript-testing",
        "javascripttest-pagetext-noframework": "Denne siden er reservert for å kjøre JavaScript-tester.",
        "tooltip-pt-logout": "Logg ut",
        "tooltip-pt-createaccount": "Du oppfordres til å opprette en konto og logge inn, men det er ikke obligatorisk.",
        "tooltip-ca-talk": "Diskusjon om innholdssiden",
-       "tooltip-ca-edit": "Du kan redigere denne siden. Vennligst bruk forhåndsvisningsknappen før du lagrer.",
+       "tooltip-ca-edit": "Rediger denne siden",
        "tooltip-ca-addsection": "Start et nytt avsnitt",
        "tooltip-ca-viewsource": "Denne siden er beskyttet.\nDu kan se på kildeteksten",
        "tooltip-ca-history": "Tidligere revisjoner av denne siden",
        "spam_reverting": "Tilbakestiller til siste versjon uten lenke til $1",
        "spam_blanking": "Alle revisjoner inneholdt lenke til $1, tømmer siden",
        "spam_deleting": "Sletter alle revisjoner med lenker til $1",
-       "simpleantispam-label": "Antispamsjekk.\n'''IKKE''' fyll inn dette feltet!",
+       "simpleantispam-label": "Antispamsjekk.\n<strong>IKKE</strong> fyll inn dette feltet!",
        "pageinfo-title": "Informasjon om «$1»",
        "pageinfo-not-current": "Beklager, det er ikke mulig å vise denne informasjonen for gamle revisjoner.",
        "pageinfo-header-basic": "Grunnleggende informasjon",
        "confirmemail_sendfailed": "{{SITENAME}} klarte ikke å sende bekreftelseskode.\nSjekk e-postadressen for ugyldige tegn.\n\nE-postsenderen ga følgende melding: $1",
        "confirmemail_invalid": "Ugyldig bekreftelseskode. Koden kan ha utløpt.",
        "confirmemail_needlogin": "Du må $1 for å bekrefte e-postadressen din.",
-       "confirmemail_success": "Din e-postadresse er nå bekreftet. Du kan nå logge inn og nyte wikien.",
+       "confirmemail_success": "Din e-postadresse er nå bekreftet. Du kan nå logge inn og bruke wikien.",
        "confirmemail_loggedin": "E-postadressen din er bekreftet.",
        "confirmemail_subject": "Bekreftelsesmelding fra {{SITENAME}}",
        "confirmemail_body": "Noen, antageligvis deg, har registrert kontoen «$2» på {{SITENAME}}, fra IP-adressen $1.\n\nFor å bekrefte at denne kontoen tilhører deg og for å aktivere e-posttjenester på {{SITENAME}}, åpne følgende lenke i nettleseren din:\n\n$3\n\nOm du *ikke* registrerte kontoen, følg denne lenken for å avbryte bekreftelse av e-postadresse:\n\n$5\n\nDenne bekreftelseskoden utgår $4.",
        "htmlform-cloner-create": "Legg til mer",
        "htmlform-cloner-delete": "Fjern",
        "htmlform-cloner-required": "Minst én verdi kreves.",
+       "htmlform-title-not-exists": "[[:$1]] forefinnes ikke.",
        "sqlite-has-fts": "$1 med støtte for fulltekstsøk",
        "sqlite-no-fts": "$1 uten støtte for fulltekstsøk",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettet}} siden $3",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tankestrek",
        "special-characters-title-emdash": "lang tankestrek",
-       "special-characters-title-minus": "minustegn"
+       "special-characters-title-minus": "minustegn",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index c36843a..e5cdad2 100644 (file)
        "passwordreset": "Wachtwoord opniej instellen",
        "passwordreset-text-one": "Vul dit formulier in um joew wachtwoord opniej in te stellen.",
        "passwordreset-text-many": "{{PLURAL:$1|Vul een van de gegevensvelden in um per netpost n tiejelik wachtwoord te ontvangen.}}",
-       "passwordreset-legend": "Wachtwoord opniej instellen",
        "passwordreset-disabled": "Je kunnen op disse wiki joew wachtwoord niet opniej instellen.",
        "passwordreset-emaildisabled": "Netpostmeugelikhejen bin uutezet op disse wiki.",
        "passwordreset-username": "Gebruker:",
        "resettokens": "Tokens ongedaonmaken",
        "resettokens-text": "Je kunnen hier tokens opniej instellen die toegang geven tot bepaolde persoonlike gegevens die ekoppeld bin an joew gebruker.\n\nDo dit a'j ze per ongelok mit ene edeeld hebben of as onbevoegden toegang ekregen hebben tot joew gebruker.",
        "resettokens-no-tokens": "Der bin gien tokens um ongedaon te maken.",
-       "resettokens-legend": "Tokens ongedaonmaken",
        "resettokens-tokens": "Tokens:",
        "resettokens-token-label": "$1 (aktuele weerde: $2)",
        "resettokens-watchlist-token": "Token veur webvoer (Atom/RSS) van [[Special:Watchlist|wiezigingen van ziejen die joew volglieste staon]]",
        "nlinks": "$1 {{PLURAL:$1|verwiezing|verwiezingen}}",
        "nmembers": "$1 {{PLURAL:$1|onderwarp|onderwarpen}}",
        "nrevisions": "$1 {{PLURAL:$1|versie|versies}}",
-       "nviews": "{{PLURAL:$1|1 keer|$1 keer}} bekeken",
        "nimagelinks": "Wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
        "ntransclusions": "wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
        "specialpage-empty": "Disse zied is leeg.",
        "linksearch-pat": "Zeukpetroon:",
        "linksearch-ns": "Naamruumte:",
        "linksearch-ok": "Zeuken",
-       "linksearch-text": "Jokers zo as \"*.wikipedia.org\" of \"*.org\" bin toe-estaon.\nHef tenminsten n topdomein, zo as \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protokol|Ondersteunde protokollen}}: <code>$1</code> (wörden \"http://\" as der gien protokol op-egeven wörden).",
+       "linksearch-text": "Jokers zo as \"*.wikipedia.org\" of \"*.org\" bin toe-estaon.\nHef tenminsten n topdomein, zo as \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protokol|Ondersteunde protokollen}}: $1 (wörden \"http://\" as der gien protokol op-egeven wörden).",
        "linksearch-line": "$1 hef n verwiezing in $2",
        "linksearch-error": "Jokers bin allinnig toe-estaon an t begin van n webadres.",
        "listusersfrom": "Laot gebrukers zien vanaof:",
index 675cbaa..3f685db 100644 (file)
        "resetpass-wrong-oldpass": "Dat Passwoord (temporär oder aktuell) gellt nich.\nVillicht hest du dien Passwoord al ännert oder noch wedder en nee temporär Passwoord anfeddert.",
        "resetpass-temp-password": "Temporär Passwoord:",
        "passwordreset": "Passwoord torüchsetten",
-       "passwordreset-legend": "Passwoord torüchsetten",
        "passwordreset-username": "Brukernaam:",
        "passwordreset-domain": "Domään",
        "passwordreset-email": "E-Mail-Adress:",
        "nlinks": "$1 {{PLURAL:$1|Verwies|Verwiesen}}",
        "nmembers": "$1 {{PLURAL:$1|Maat|Maten}}",
        "nrevisions": "{{PLURAL:$1|1 Version|$1 Versionen}}",
-       "nviews": "$1 {{PLURAL:$1|Affraag|Affragen}}",
        "specialpage-empty": "Disse Siet is leddig.",
        "lonelypages": "Weetsieden",
        "lonelypagestext": "Op disse Sieden wiest kene annern Sieden vun {{SITENAME}} un se sünd ok narms inbunnen.",
        "linksearch-pat": "Söökmunster:",
        "linksearch-ns": "Naamruum:",
        "linksearch-ok": "Söken",
-       "linksearch-text": "Wildcards as to’n Bispeel <code>*.wikipedia.org</code> köönt bruukt warrn.<br />\nÜnnerstütt Protokollen: <code>$1</code>",
+       "linksearch-text": "Wildcards as to’n Bispeel <code>*.wikipedia.org</code> köönt bruukt warrn.<br />\nÜnnerstütt Protokollen: $1",
        "linksearch-line": "$1 hett en Lenk vun $2",
        "linksearch-error": "Wildcards dröfft blot an’n Anfang vun de URL stahn.",
        "listusersfrom": "Wies de Brukers, de anfangt mit:",
index 8d2ef07..99e53f3 100644 (file)
        "viewhelppage": "सहायता पृष्ठ हेर्ने",
        "categorypage": "श्रेणी पृष्ठ हेर्नुहोस्",
        "viewtalkpage": "छलफल हेर्नुहोस्",
-       "otherlanguages": "à¤\85रà¥\81 à¤­à¤¾à¤·à¤¾मा",
+       "otherlanguages": "à¤\85रà¥\82 à¤­à¤¾à¤·à¤¾à¤¹à¤°à¥\82मा",
        "redirectedfrom": "($1बाट अनुप्रेषित)",
        "redirectpagesub": "अनुप्रेषित पृष्ठ",
        "redirectto": "अनुप्रेषित पृष्ठ:",
        "privacy": "गोपनियता नीति",
        "privacypage": "Project:गोपनीयता नीति",
        "badaccess": "अनुमतिमा त्रुटि",
-       "badaccess-group0": "तपाà¤\88लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88लाई अनुमति दिइएको छैन।",
+       "badaccess-group0": "तपाà¤\88à¤\81लà¥\87 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\87à¤\95à¥\8b à¤\95ारà¥\8dय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82लाई अनुमति दिइएको छैन।",
        "badaccess-groups": "तपाईंले अनुरोध गर्नुभएको कार्य  {{PLURAL:$2|समूह |कुनै एक समूह}}: $1 मा रहेका प्रयोगकर्ताहरूले मात्र गर्नसक्छन ।",
        "versionrequired": "MediaWiki संस्करण $1 चाहिने",
        "versionrequiredtext": "यो पृष्ठ प्रयोग गर्नको लागि MediaWiki $1 संस्करण चाहिन्छ ।\nहेर्नुहोस्  [[Special:Version|version page]]",
        "nstab-help": "सहायता पृष्ठ",
        "nstab-category": "श्रेणी",
        "nosuchaction": "यस्तो कार्य हैन",
-       "nosuchactiontext": "URL à¤²à¥\87 à¤\96à¥\81लाà¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय à¤®à¤¾à¤¨à¥\8dय à¤\9bà¥\88न à¥¤\nतपाà¤\88लà¥\87 URL à¤\97लत à¤\9fाà¤\87पà¤\97रà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b , à¤µà¤¾ à¤\97लत à¤²à¤¿à¤\82à¤\95 à¤ªà¤\9bà¥\8dयाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\81नसà¤\95à¥\8dà¤\9b à¥¤\nयस{{SITENAME}}ले सफ्टवेयरमा भएको गल्ति देखाएको पनि हुनसक्छ ।",
+       "nosuchactiontext": "URL à¤²à¥\87 à¤\96à¥\81लाà¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय à¤®à¤¾à¤¨à¥\8dय à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82लà¥\87 URL à¤\97लत à¤\9fाà¤\87पà¤\97रà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b , à¤µà¤¾ à¤\97लत à¤²à¤¿à¤\82à¤\95 à¤ªà¤\9bà¥\8dयाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\81नसà¤\95à¥\8dà¤\9b à¥¤\nयà¥\8b{{SITENAME}}ले सफ्टवेयरमा भएको गल्ति देखाएको पनि हुनसक्छ ।",
        "nosuchspecialpage": "त्यस्तो विशेष पृष्ठ छैन",
        "nospecialpagetext": "<strong>तपाईँले अनुरोध गर्नुभएको विशेष पृष्ठ अमान्य छ ।</strong>\n\nमान्य पृष्ठहरूको सूची यहाँ [[Special:SpecialPages|{{int:specialpages}}]] उपलब्ध छ ।",
        "error": "त्रुटि",
        "viewsource": "स्रोत हेर्नुहोस",
        "viewsource-title": " $1 को स्रोत हेर्नुहोस",
        "actionthrottled": "कार्य रोकियो",
-       "actionthrottledtext": "स्पामबाट बच्ने तरिकाको रुपमा , तपाईँलाई यो कार्य थोरै समयमा धेरै पटक गर्नबाट सिमित गरिएको छ, र तपाईले आफ्नो सिमा पार गरिसक्नु भयो ।\nकृपया केही मिनेटहरु पछि पुन: प्रयास गर्नुहोस्  ।",
+       "actionthrottledtext": "स्पाम रोकथामको लागि , तपाईँलाई यो कार्य थोरै समयमा धेरै पटक गर्नबाट सिमित गरिएको छ, र तपाईंले आफ्नो सिमा पार गरिसक्नु भयो ।\nकृपया केही मिनेट पछि पुन: प्रयास गर्नुहोस्  ।",
        "protectedpagetext": "यो पृष्ठ सम्पादन हुनबाट बचाउन सम्पादनमा तथा अन्यकार्यमा रोक लगाइएको छ।",
        "viewsourcetext": "तपाईँले यस पृष्ठको स्रोत हेर्न र प्रतिलिपी गर्न सक्नुहुन्छ ।",
        "viewyourtext": "यस पृष्ठमा रहेका '''तपाईँका सम्पादनहरू''' हेर्न या प्रतिलिपी गर्न सक्नुहुन्छ :",
        "protectedinterface": "यो पृष्ठले सफ्टवेयरको लागि अन्तरमोहडा पाठ प्रदान गर्दछ , र यसलाई दुरुपयोग हुनबाट बचाउन सुरक्षा प्रादन गरिएको छ।\nसम्पूर्ण विकिहरूका लागि अनुवादमा परिवर्तन गर्नको लागि [//translatewiki.net/ translatewiki.net], प्रयोग गर्नुहोस् ,  मिडियाविकि स्थानियकरण परियोजना ।",
-       "editinginterface": "<strong>चेतावनी:</strong> तपाई यस पृष्ठलाई सम्पादन गर्नुहुँदैछ, जसले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गर्दछ।\nयस पृष्ठमा गरिएकोपरिवर्तनले यस विकिमा अरु प्रयोगकर्ताको इन्टरफेसको प्रदर्शनमा प्रभाव पार्नेछ ।",
+       "editinginterface": "<strong>चेतावनी:</strong> तपाई यस पृष्ठलाई सम्पादन गर्नुहुँदैछ, जसले सफ्टवेयरको लागि \nइन्टरफेस सामग्रीहरू प्रदान गर्दछ।\nयस पृष्ठमा गरिएकोपरिवर्तनले यस विकिमा अरु प्रयोगकर्ताको इन्टरफेसको प्रदर्शनमा प्रभाव पार्नेछ ।",
        "translateinterface": "सबै विकिहरूको लागी अनुवाद जोड्न वा परिवर्तन गर्नका लागि मीडियाविकि क्षेत्रीयकरण परियोजना [//translatewiki.net/ ट्रान्सलेटविकि.नेट]को प्रयोग गर्नुहोस।",
        "cascadeprotected": "यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें {{PLURAL:$1|पृष्ठ |पृष्ठहरू}}मा सुरक्षित गर्नुका साथै प्रपात (\"cascading\") विकल्प खुल्ला राखिएको छ:\n$2",
        "namespaceprotected": " '''$1'''  नेमस्पेसमा रहेका पृष्ठहरू सम्पादन गर्ने अनुमति यहाँलाई छैन ।",
-       "customcssprotected": "तपाà¤\88लाà¤\88 à¤¯à¤¸  à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\81 संग्रहित छन् ।",
-       "customjsprotected": "तपाà¤\88लाà¤\88 à¤¯à¤¸ à¤\9cाभासà¥\8dà¤\95à¥\83पà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\81 संग्रहित छन् ।",
+       "customcssprotected": "तपाà¤\88à¤\82लाà¤\88 à¤¯à¥\8b  à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 संग्रहित छन् ।",
+       "customjsprotected": "तपाà¤\88à¤\82लाà¤\88 à¤¯à¥\8b à¤\9cाभासà¥\8dà¤\95à¥\83पà¥\8dà¤\9f à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न, à¤\95िनà¤\95à¥\80 à¤¯à¤¸à¤®à¤¾ à¤\95à¥\81नà¥\88 à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤µà¥\8dयà¤\95à¥\8dतिà¤\97त à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 संग्रहित छन् ।",
        "mycustomcssprotected": "यस CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।",
        "mycustomjsprotected": "यस JavaScript पृष्ठ सम्पादन गर्नको लागि लागि तपाईँलाई अनुमति छैन ।",
        "myprivateinfoprotected": "तपाईँसँग तपाईँको निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
        "virus-unknownscanner": "अज्ञात एन्टीभाइरस:",
        "logouttext": "<strong>तपाईं अहिले बाहिर निस्कनु भएको छ।</strong>\n\nयाद राख्नुहोस् तपाईंले ब्राउजरको क्याच खालि नगर्दासम्म कुनै पृष्ठहरूमा तपाईं अझै प्रवेश गरिरखेको देखाउन सक्छ।",
        "welcomeuser": "$1जी स्वागत छ!",
-       "welcomecreation-msg": "तपाà¤\88à¤\95à¥\8b à¤\96ाता à¤¤à¤¯à¤¾à¤° à¤­à¤¯à¥\8b à¥¤ \nतपाà¤\88लà¥\87 à¤\9aाहनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा {{SITENAME}} [[Special:Preferences|preferences]] परिवर्तन गर्न सक्नु हुनेछ ।",
+       "welcomecreation-msg": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\96ाता à¤¤à¤¯à¤¾à¤° à¤­à¤¯à¥\8b à¥¤ \nतपाà¤\88à¤\82लà¥\87 à¤\9aाहनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा {{SITENAME}} [[Special:Preferences|पà¥\8dराथमिà¤\95ताहरà¥\82]] परिवर्तन गर्न सक्नु हुनेछ ।",
        "yourname": "प्रयोगकर्ता नाम:",
        "userlogin-yourname": "प्रयोगकर्ता नाम",
        "userlogin-yourname-ph": "तपाईँको प्रयोगकर्तानाम लेख्नुहोस्",
        "notloggedin": "प्रवेश (लग ईन) नगरिएको",
        "userlogin-noaccount": "के खाता छैन ?",
        "userlogin-joinproject": "{{SITENAME}} मा खाता खोल्नुहोस् ।",
-       "nologin": "तपाà¤\88à¤\95à¥\8b à¤\96ाता à¤\9bà¥\88न? $1।",
+       "nologin": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\96ाता à¤\9bà¥\88न ? $1।",
        "nologinlink": "नयाँ खाता खोल्नुहोस्",
        "createaccount": "खाता खोल्नुहोस्",
        "gotaccount": "के तपाईँसँग पहिले देखि नै खाता छ ? '''$1''' ।",
        "userlogin-resetlink": "प्रवेश सम्बन्धी विवरणहरू बिर्सनु भयो?",
        "userlogin-resetpassword-link": "पासवर्ड भुल्नुभयो?",
        "userlogin-helplink2": "प्रवेश गर्नको लागि सहयोग",
-       "userlogin-loggedin": "तपाई {{GENDER:$1|$1}}को रूपमा प्रवेश (लग इन) भइ सक्नु भयो ।\nअर्को प्रयोगकर्ताको रूपमा प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर्नुहोस् ।",
+       "userlogin-loggedin": "तपाई {{GENDER:$1|$1}}को रूपमा प्रवेश (लग इन) भइ सक्नु भयो ।\nअर्को प्रयोगकर्ताको रूपमा प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर्नुहोस् ।",
        "userlogin-createanother": "अर्को खाता खोल्नुहोस्",
        "createacct-emailrequired": "इमेल ठेगाना",
        "createacct-emailoptional": "इमेल ठेगाना (ऐच्छिक)",
        "createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ|पृष्ठहरू}}",
        "createacct-benefit-body3": "हालैका {{PLURAL:$1|योगदानकर्ता|योगदानकर्ताहरू}}",
        "badretype": "तपाईंले दिनुभएको पासवर्ड मिल्दैन।",
-       "userexists": "तपाà¤\88लà¥\87 à¤ªà¥\8dरविषà¥\8dà¤\9f à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b नाम पहिले देखिनै प्रयोगमा छ ।\nकृपया फरक नाम छान्नुहोस् ।",
+       "userexists": "तपाà¤\88à¤\82लà¥\87 à¤ªà¥\8dरविषà¥\8dà¤\9f à¤\97रà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता नाम पहिले देखिनै प्रयोगमा छ ।\nकृपया फरक नाम छान्नुहोस् ।",
        "loginerror": "प्रवेश त्रुटि",
        "createacct-error": "खाता बनाउँदा त्रुटि",
        "createaccounterror": "खाता बनाउन सकिएन: $1",
        "nocookieslogin": "{{SITENAME}} ले प्रयोगकर्ता प्रवेश गराउन कुकीहरू प्रयोग गर्छ । तपाईँको कुकीहरू निस्क्रिय गरिएको छ। कृपया सक्रिय बनाइ , नाम र प्रवेशशव्द राखी प्रवेश गर्नुहोला ।",
        "nocookiesfornew": "प्रयोगकर्ताको खाता निर्माण गरिएन, हामीले यसको मूल स्रोत निर्धारण गर्न सकेनौं।\nनिश्चित गर्नुहोस् तपाईंले कुकी सक्रिय गर्नुभएको छ, पुनः यस पृष्ठलाई खोल्ने प्रयास गर्नुहोस्।",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "noname": "तपाईले सही प्रयोगकर्ता नाम दिनु भएन।",
+       "noname": "तपाà¤\88à¤\82लà¥\87 à¤¸à¤¹à¥\80 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¦à¤¿à¤¨à¥\81 à¤­à¤\8fन।",
        "loginsuccesstitle": "प्रवेश सफल",
        "loginsuccess": "'''तपाईंले {{SITENAME}}मा  \"$1\" को रुपमा प्रवेश गर्नुभएकोछ।'''",
        "nosuchuser": "\"$1\" को नामबाट कुनै पनि प्रयोगकर्ता भेटिएनन् ।\nप्रयोगकर्ता नाम वर्णसंवेदनशील हुन्छन् ।\nहिज्जे जाँच्नुहोस् , या [[Special:UserLogin/signup|नयाँ खाता बनाउनुहोस्]].",
        "password-login-forbidden": "यो प्रयोगकर्ता नाम र प्रवेश शव्द वर्जित गरिएकोछ ।",
        "mailmypassword": "पासवर्ड पूर्वनिर्धारित गर्नुहोस्",
        "passwordremindertitle": "{{SITENAME}}को लागि नयाँ अस्थायी पासवर्ड",
-       "passwordremindertext": "à¤\95सà¥\88लà¥\87 (सायद à¤¤à¤ªà¤¾à¤\88à¤\81, IP à¤ à¥\87à¤\97ाना $1 à¤¬à¤¾à¤\9f), {{SITENAME}}($4) à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\8dरवà¥\87शशवà¥\8dद à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\9b à¥¤ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता \"$2\" à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¨à¤¯à¤¾à¤\81 à¤\85सà¥\8dथायà¥\80 à¤ªà¥\8dरवà¥\87शशवà¥\8dद \"$3\"तयार à¤ªà¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤\9b। à¤¯à¤¦à¤¿ à¤¯à¥\8b à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\87à¤\9aà¥\8dà¤\9bामा à¤­à¤\8fà¤\95à¥\8b à¤­à¤\8f à¤\85हिलà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\81लà¥\87 à¤ªà¥\8dरवà¥\87शà¤\97रà¥\80 à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\8dरवà¥\87शशवà¥\8dद à¤\9bानà¥\8dनà¥\81 à¤ªà¤°à¥\8dनà¥\87 à¤¹à¥\81नà¥\8dà¤\9b।\nतपाà¤\88à¤\95à¥\8b à¤\85सà¥\8dथायà¥\80 à¤ªà¥\8dरवà¥\87शशवà¥\8dद  {{PLURAL:$5|à¤\8fà¤\95 à¤¦à¤¿à¤¨|$5 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82 à¤ªà¤\9bि}} à¤\85मानà¥\8dय à¤¹à¥\81नà¥\87à¤\9b à¥¤\n\nयदि à¤\95à¥\8bहà¥\80 à¤\85रà¥\81लà¥\87 à¤¨à¥\88 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\87à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87 , à¤¯à¤¾ à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\86फà¥\8dनà¥\8b à¤ªà¥\8dरवà¥\87शशवà¥\8dद à¤¸à¤®à¥\8dà¤\9dिनà¥\81 à¤­à¤¯à¥\8b à¤­à¤¨à¥\87, à¤\85थवा\nतà¥\8dयसलाà¤\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤\9aाहनà¥\81हà¥\81नà¥\8dन à¤­à¤¨à¥\87, à¤¤à¤ªà¤¾à¤\88à¤\81लà¥\87 à¤¯à¥\8b à¤¸à¤¨à¥\8dदà¥\87शà¤\95à¥\8b à¤µà¥\87वासà¥\8dता à¤\97रà¥\8dनसà¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤° à¤ªà¥\81रानà¥\88 à¤ªà¥\8dरवà¥\87शशव्द प्रयोग गरिरहन सक्नुहुन्छ ।",
+       "passwordremindertext": "à¤\95सà¥\88लà¥\87 (सायद à¤¤à¤ªà¤¾à¤\88à¤\81, IP à¤ à¥\87à¤\97ाना $1 à¤¬à¤¾à¤\9f), {{SITENAME}}($4) à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\8dरवà¥\87सशबà¥\8dद à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤\9b à¥¤ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता \"$2\" à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¨à¤¯à¤¾à¤\81 à¤\85सà¥\8dथायà¥\80 à¤ªà¥\8dरवà¥\87सशबà¥\8dद \"$3\"तयार à¤ªà¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤\9b à¥¤ à¤¯à¤¦à¤¿ à¤¯à¥\8b à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\87à¤\9aà¥\8dà¤\9bामा à¤­à¤\8fà¤\95à¥\8b à¤­à¤\8f à¤\85हिलà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\81लà¥\87 à¤ªà¥\8dरवà¥\87शà¤\97रà¥\80 à¤¨à¤¯à¤¾à¤\81 à¤ªà¥\8dरवà¥\87सशबà¥\8dद à¤\9bानà¥\8dनà¥\81 à¤ªà¤°à¥\8dनà¥\87 à¤¹à¥\81नà¥\8dà¤\9b।\nतपाà¤\88à¤\82à¤\95à¥\8b à¤\85सà¥\8dथायà¥\80 à¤ªà¥\8dरवà¥\87सशबà¥\8dद  {{PLURAL:$5|à¤\8fà¤\95 à¤¦à¤¿à¤¨|$5 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82 à¤ªà¤\9bि}} à¤\85मानà¥\8dय à¤¹à¥\81नà¥\87à¤\9b à¥¤\n\nयदि à¤\95à¥\8bहà¥\80 à¤\85रà¥\81लà¥\87 à¤¨à¥\88 à¤\85नà¥\81रà¥\8bध à¤\97रà¥\87à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87 , à¤¯à¤¾ à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\86फà¥\8dनà¥\8b à¤ªà¥\8dरवà¥\87सशबà¥\8dद à¤¸à¤®à¥\8dà¤\9dिनà¥\81 à¤­à¤¯à¥\8b à¤­à¤¨à¥\87, à¤\85थवा\nतà¥\8dयसलाà¤\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤\9aाहनà¥\81हà¥\81नà¥\8dन à¤­à¤¨à¥\87, à¤¤à¤ªà¤¾à¤\88à¤\81लà¥\87 à¤¯à¥\8b à¤¸à¤¨à¥\8dदà¥\87सà¤\95à¥\8b à¤µà¥\87वासà¥\8dता à¤\97रà¥\8dनसà¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¤° à¤ªà¥\81रानà¥\88 à¤ªà¥\8dरवà¥\87सशब्द प्रयोग गरिरहन सक्नुहुन्छ ।",
        "noemail": "प्रयोगकर्ता  \"$1\"को लागि कुनै पनि इ-मेल दर्ता गरिएको छैन ।",
        "noemailcreate": "तपाईंले सही ई-मेल ठेगाना दिनुपर्छ",
        "passwordsent": "\"$1\" को लागि दर्ता गरिएको ई-मेल ठेगानामा एक प्रवेशशव्द पठाइएको छ।\nकृपया त्यसलाई प्राप्त गरेपछि प्रवेश गर्नुहोला ।",
-       "blocked-mailpassword": "तपाà¤\88à¤\95à¥\8b IP à¤ à¥\87à¤\97ानालाà¤\88 à¤¸à¤®à¥\8dपादनà¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b, à¤° à¤¤à¥\8dयसà¥\88लà¥\87 à¤¦à¥\81रà¥\81पयà¥\8bà¤\97 à¤°à¥\8bà¤\95à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\8dरवà¥\87शशव्द पुनर्लाभ प्रक्रिया प्रयोग गर्न अनुमति छैन ।",
+       "blocked-mailpassword": "तपाà¤\88à¤\82à¤\95à¥\8b IP à¤ à¥\87à¤\97ानालाà¤\88 à¤¸à¤®à¥\8dपादनà¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b, à¤° à¤¤à¥\8dयसà¥\88लà¥\87 à¤¦à¥\81रà¥\81पयà¥\8bà¤\97 à¤°à¥\8bà¤\95à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤ªà¥\8dरवà¥\87सशब्द पुनर्लाभ प्रक्रिया प्रयोग गर्न अनुमति छैन ।",
        "eauthentsent": "दिइएको इमेल ठेगानामा इमेल पठाइएको छ ।\nतपाईँको खातामा अरु इमेल पठउनु अघि , इमेलमा लेखिएको मार्गदर्शन अनुसार , त्यो खाता तपाईँकै हो भनेर निश्चित गर्नु पर्नेछ ।",
        "throttled-mailpassword": "बितेको {{PLURAL:$1|घण्टा|$1 घण्टाहरु}} भित्र एउटा पासवर्ड अनुस्मारक पठाई सकिएको छ।\nदुरुपयोगबाट बचाउकोलागि प्रत्येक {{PLURAL:$1|घण्टा|$1 घण्टाहरु}}मा केवल एउटा पासवर्ड अनुस्मारक पठाइन्छ।",
        "mailerror": " चिठी :$1 पठाउँदा त्रुटी भयो",
        "acct_creation_throttle_hit": "तपाईंको आईपी ठेगानाबाट आएका आगन्तुकद्वारा बितेको चौबिस घण्टामा यस विकिमा {{PLURAL:$1|एउटा खाता बनाइसकिएको छ|$1 खाताहरु बनाइसकिएका छन्}}, यस समयावधिमा यति नैं अधिकतम सीमा हो।\nअतः यस समय यस आईपी ठेगानाको प्रयोग गर्ने आगन्तुकले अरु खाता खोल्न सक्नेछैनन्।",
        "emailauthenticated": "तपाईंको इमेल ठेगाना $2 को $3 मा प्रमाणित गरिएको थियो।",
        "emailnotauthenticated": "तपाईँको इमेल ठेगाना अहिले सम्म प्रमाणित गरिएको छैन ।\nनिम्न सुविधाको लागि कुनै पनि इमेल पठाइने छैन ।",
-       "noemailprefs": "निमà¥\8dन à¤¸à¥\81विधाहरà¥\81 à¤°à¤¾à¤®à¥\8dररà¥\80 à¤\95ाम à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¤à¤ªà¤¾à¤\88को अभिरुचिमा आफ्नो ई-मेल ठेगाना खुलाउनुहोस् ।",
+       "noemailprefs": "निमà¥\8dन à¤¸à¥\81विधाहरà¥\82 à¤°à¤¾à¤®à¥\8dररà¥\80 à¤\95ाम à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¤à¤ªà¤¾à¤\88à¤\82को अभिरुचिमा आफ्नो ई-मेल ठेगाना खुलाउनुहोस् ।",
        "emailconfirmlink": "तपाईंको ई-मेल ठेगाना पक्का गर्नुहोस्",
        "invalidemailaddress": "ई-मेल ठेगाना स्वीकार गर्न सकिएन किन भनें यो सही प्रारूपमा छैन, कृपया सही प्रारूपको  ठेगाना दिनुहोस्।",
-       "cannotchangeemail": "यस विकिमा तपाईको खातासँग सम्बन्धित इमेल ठेगाना परिवर्तन गर्न सकिन्न ।",
+       "cannotchangeemail": "यस à¤µà¤¿à¤\95िमा à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\96ातासà¤\81à¤\97 à¤¸à¤®à¥\8dबनà¥\8dधित à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¸à¤\95िनà¥\8dन à¥¤",
        "emaildisabled": "यो साइटले इमेलहरू पठाउन सक्दैन।",
        "accountcreated": "खाता खोलियो",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]])$1 प्रयोगकर्ताको लागि खाता खोलिएको छ ।",
        "createaccount-title": "{{SITENAME}}कोलागि खाता खोल्ने काम",
-       "createaccount-text": "à¤\95सà¥\88लà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ानालाà¤\88 {{SITENAME}} ($4) à¤®à¤¾ \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\95à¥\8b à¤\9b, à¤\9cसà¤\95à¥\8b à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड \"$3\" à¤\9b।",
+       "createaccount-text": "à¤\95सà¥\88लà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ानालाà¤\88 {{SITENAME}} ($4) à¤®à¤¾ \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\95à¥\8b à¤\9b, à¤\9cसà¤\95à¥\8b à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड \"$3\" à¤\9b à¥¤\nà¤\85ब à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¤à¥\81रà¥\81नà¥\8dत à¤²à¤\97à¤\87न à¤\97रà¥\87र à¤\86फà¥\8dनà¥\8b à¤ªà¥\8dरवà¥\87सशबà¥\8dद à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bला à¥¤\nयदà¥\80 à¤¯à¥\8b à¤\96ाता à¤\97लà¥\8dतिलà¥\87 à¤\96à¥\8bलिà¤\8fà¤\95à¥\8b à¤°à¤¹à¥\87à¤\9b à¤­à¤¨à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¯à¥\8b à¤¸à¤¨à¥\8dदà¥\87शलाà¤\88 à¤¬à¥\87वासà¥\8dता à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b ।",
        "login-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ ,कृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "login-abort-generic": "तपाईंको प्रवेश असफल भयो - छोड़ियो",
-       "login-migrated-generic": "तपाà¤\88à¤\95à¥\8b à¤\96ाता à¤¸à¥\8dथानानà¥\8dतरण à¤­à¤\8fà¤\95à¥\8b à¤\9b, à¤° à¤¤à¤ªà¤¾à¤\88को प्रयोगकर्ता नाम यस विकिमा छैन ।",
+       "login-migrated-generic": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\96ाता à¤¸à¥\8dथानानà¥\8dतरण à¤­à¤\8fà¤\95à¥\8b à¤\9b, à¤° à¤¤à¤ªà¤¾à¤\88à¤\82को प्रयोगकर्ता नाम यस विकिमा छैन ।",
        "loginlanguagelabel": "भाषा: $1",
        "suspicious-userlogout": "तपाईंको निर्गमन अनुरोध अस्विकार गरिन्छ किन कि यो खराब ब्राउजर वा क्यासिङ प्रोक्सिले पठाएको जस्तो देखिन्छ।",
-       "createacct-another-realname-tip": "वासà¥\8dतविà¤\95 à¤¨à¤¾à¤® à¤\90à¤\9aà¥\8dà¤\9bिà¤\95 à¤¹à¥\8b à¥¤\nतपाà¤\88लà¥\87 à¤¯à¥\8b à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा à¤¤à¤ªà¤¾à¤\88को काममा प्रयोगकर्ता श्रेय दिनको लागि यसको प्रयोग गरिने छ ।",
+       "createacct-another-realname-tip": "वासà¥\8dतविà¤\95 à¤¨à¤¾à¤® à¤\90à¤\9aà¥\8dà¤\9bिà¤\95 à¤¹à¥\8b à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤¯à¥\8b à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा à¤¤à¤ªà¤¾à¤\88à¤\82को काममा प्रयोगकर्ता श्रेय दिनको लागि यसको प्रयोग गरिने छ ।",
        "pt-login": "प्रवेश (लग ईन)",
        "pt-login-button": "प्रवेश",
        "pt-createaccount": "खाता खोल्नुहोस्",
        "resetpass-submit-cancel": "रद्द गर्ने",
        "resetpass-wrong-oldpass": "अस्थायी अथवा हा्लिएको प्रवेश शव्द अमान्य\nतपाईंले अघिबाट नैं प्रवेश शव्द सफलता पूर्वक परिवर्तन गरिसक्नु भएको हो वा नयाँ प्रवेश शव्दको निम्ति निवेदन गर्नुभएकोछ।",
        "resetpass-recycled": "कृपया वर्तमान पासर्वड भन्दा फरक पासर्वडलाई पुनः मिलाउनुहोस् ।",
-       "resetpass-temp-emailed": "तपाई अस्थाई इमेल कोडले प्रवेश गर्नुभएको छ।\nप्रवेश सफल पार्नका लागि, तपाईंले यहाँ एउटा नयाँ पासवर्ड राख्नु पर्नेछ:",
+       "resetpass-temp-emailed": "तपाई अस्थाई इमेल कोडले प्रवेश गर्नुभएको छ।\nप्रवेश सफल पार्नका लागि, तपाईंले यहाँ एउटा नयाँ पासवर्ड राख्नु पर्नेछ:",
        "resetpass-temp-password": "अस्थाइ पासवर्ड",
        "resetpass-abort-generic": "एक्सटेन्सनले पासवर्ड परिवर्तनलाई बन्द गराएको छ ।",
-       "resetpass-expired": "तपाईको पासवर्ड पूरानो भएकोछ । कृपया प्रवेश (लग इन) को लागी नयाँ पासवर्ड राख्नुहोस् ।",
+       "resetpass-expired": "तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤ªà¥\82रानà¥\8b à¤­à¤\8fà¤\95à¥\8bà¤\9b à¥¤ à¤\95à¥\83पया à¤ªà¥\8dरवà¥\87श (लà¤\97 à¤\87न) à¤\95à¥\8b à¤²à¤¾à¤\97à¥\80 à¤¨à¤¯à¤¾à¤\81 à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bसà¥\8d à¥¤",
        "resetpass-expired-soft": "तपाईंको पासवर्ड म्याद सकिएको छ र यसलाई रिसेट गर्नुपर्नेछ। कृपया एउटा नयाँ पासवर्ड छान्नुहोस् वा \"{{int:resetpass-submit-cancel}}\"मा क्लिक गरी पछि रिसेट गर्नुहोला।",
        "resetpass-validity-soft": "तपाईंको पासवर्ड मान्य छैन:$1\n\nकृपया नयाँ पासवर्ड छान्नुहोस् वा \"{{int:resetpass-submit-cancel}}\"मा क्लिक गरी पछि रिसेट गर्नुहोला।",
        "passwordreset": "प्रवेशशव्द पुनः तय गर्ने",
        "passwordreset-emailsent-capture": "पासवर्ड परिवर्तनको लागि इमेल पठाइयो, जुन तल देखाइएकोछ।",
        "passwordreset-emailerror-capture": "पासवर्ड रिसेट इमेल जारि गरिएको छ, जुन तल देखाइएको छ, तर यसलाई {{GENDER:$2|प्रयोगकर्ता}}मा पठाउन विफल भयो: $1",
        "changeemail": "इमेल ठेगाना परिवर्तन गर्नुहोस",
-       "changeemail-text": "à¤\86फà¥\8dनà¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¯à¥\8b à¤«à¤¾à¤°à¤® à¤­à¤°à¥\8dनà¥\81हà¥\8bस। à¤¯à¤¸à¤²à¤¾à¤\88 à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88ले आफ्नो पासवर्ड हाल्नु पर्नेछ।",
+       "changeemail-text": "à¤\86फà¥\8dनà¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¯à¥\8b à¤«à¤¾à¤°à¤® à¤­à¤°à¥\8dनà¥\81हà¥\8bसà¥\8d à¥¤ à¤¯à¤¸à¤²à¤¾à¤\88 à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82ले आफ्नो पासवर्ड हाल्नु पर्नेछ।",
        "changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
        "changeemail-oldemail": "हालको इमेल-ठेगाना:",
        "changeemail-newemail": "नयाँ इमेल-ठेगाना:",
        "blankarticle": "<strong>चेतावनी:</strong> तपाईं एउटा खालि पृष्ठको निर्माण गर्दै हुनुहुन्छ।\nयदि तपाईं \"{{int:savearticle}}\" लाई पुनः थिच्नुहुन्छ भने पृष्ठ बिना कुनै सामग्री नै निर्मित गरिनेछ।",
        "anoneditwarning": "<strong>चेतावनी:</strong> तपाईँले प्रवेश गर्नु भएको छैन । तपाईँको आइपि ठेगाना पृष्ठ सम्पादन इतिहासमा दर्ता गरिने छ र यो सबैले हेर्न सक्छन । यदि तपाईं <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउने] गर्नुभयो भने तपाईंद्वारा गरिएको सम्पादन तपाईंको प्रयोगकर्तानाममा जोडिनेछ।",
        "anonpreviewwarning": "''तपाईंले प्रवेश गर्नु भएको छैन। संग्रह (Save) गरेको खण्डमा पृष्ठको इतिहासमा तपाईंको IP ठेगाना अंकित गरिनेछ।''",
-       "missingsummary": "'''यादà¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d :''' à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤¸à¤®à¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¦à¤¿à¤¨à¥\81भà¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤\nयदि à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤¸à¤\82à¤\97à¥\8dरहà¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d  थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।",
+       "missingsummary": "'''यादà¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d :''' à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤¸à¤®à¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82श à¤¦à¤¿à¤¨à¥\81भà¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 \"{{int:savearticle}}\"  थिच्नुभयो भने , सारांश बिना नै संग्रहित गरिने छ ।",
        "selfredirect": "<strong>चेतावनी:</strong> तपाईं यस पृष्ठलाई आफुमा पुनः निर्देशित गर्दै हुनुहुन्छ।\nहुनसक्छ तपाईं अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गर्दै हुनुहुन्छ, वा गलत पृष्ठको सम्पादन गर्दै हुनुहुन्छ।\nतपाईं पुनः एकपटक \"{{int:savearticle}}\" क्लिक गर्नुहुन्छ, पुनः निर्देशित त्यसै पनि बनाइनेछ।",
        "missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
-       "missingcommentheader": "'''याद गर्नुहोस् :''' तपाईँले टिप्पणीमा विषय /शीर्ष पंक्ति  दिनुभएको छैन ।\nतपाईँले फेरि \"{{int:savearticle}}\"  थिच्नु भएमा , तपाईको सम्पादन यसै रुपमा संग्रहित हुनेछ ।",
+       "missingcommentheader": "'''याद à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d :''' à¤¤à¤ªà¤¾à¤\88à¤\81लà¥\87 à¤\9fिपà¥\8dपणà¥\80मा à¤µà¤¿à¤·à¤¯ /शà¥\80रà¥\8dष à¤ªà¤\82à¤\95à¥\8dति  à¤¦à¤¿à¤¨à¥\81भà¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\81लà¥\87 à¤«à¥\87रि \"{{int:savearticle}}\"  à¤¥à¤¿à¤\9aà¥\8dनà¥\81 à¤­à¤\8fमा , à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¸à¤®à¥\8dपादन à¤¯à¤¸à¥\88 à¤°à¥\81पमा à¤¸à¤\82à¤\97à¥\8dरहित à¤¹à¥\81नà¥\87à¤\9b à¥¤",
        "summary-preview": "सारांश पूर्वालोकन:",
        "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
-       "previewerrortext": "तपाईको परिवर्तनको पूर्वावलोकन बनाउन खोज्दा समस्या आएको छ ।",
+       "previewerrortext": "तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\95à¥\8b à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¬à¤¨à¤¾à¤\89न à¤\96à¥\8bà¤\9cà¥\8dदा à¤¸à¤®à¤¸à¥\8dया à¤\86à¤\8fà¤\95à¥\8b à¤\9b à¥¤",
        "blockedtitle": "प्रयोककर्तालाई रोक लगाइएको छ",
-       "blockedtext": "'''तपाà¤\88à¤\81à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¯à¤¾ IP à¤ à¥\87à¤\97ानालाà¤\88 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b à¥¤'''\n\nरà¥\8bà¤\95 à¤²à¤\97ाà¤\89नà¥\87  $1.\nरà¥\8bà¤\95 à¤²à¤\97ाà¤\89नाà¤\95à¥\8b à¤\95ारण ''$2''.\n\n* à¤°à¥\8bà¤\95 à¤¸à¥\81रà¥\82 à¤¹à¥\81नà¥\87 : $8\n* à¤°à¥\8bà¤\95 à¤¸à¤\95िनà¥\87: $6\n* à¤°à¥\8bà¤\95बाà¤\9f à¤²à¤\95à¥\8dषित: $7\n\nतपाà¤\88लà¥\87  $1 à¤µà¤¾ à¤\85रà¥\81 à¤\95à¥\81नà¥\88  [[{{MediaWiki:Grouppage-sysop}}|administrator]] à¤¸à¤\81à¤\97 à¤°à¥\8bà¤\95à¤\95à¥\8b à¤¬à¤¾à¤°à¥\87मा à¤\9bलफल à¤\97रà¥\8dन à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\nतपाà¤\88à¤\81लà¥\87  'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dतालाà¤\88 à¤\87-मà¥\87ल à¤\97रà¥\8dनà¥\87 ' à¤¸à¥\81विधा à¤®à¤¾à¤¨à¥\8dय à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना [[Special:Preferences|account preferences]] à¤®à¤¾ à¤¨à¤\96à¥\81लाà¤\8f à¤¸à¤®à¥\8dम à¤ªà¥\8dरयà¥\8bà¤\97à¤\97रà¥\8dन à¤ªà¤¾à¤\89नà¥\81हà¥\81नà¥\87 à¤\9bà¥\88न à¤° à¤¯à¤¸à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤\nतपाà¤\88को IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
-       "autoblockedtext": "तपाईंको IP ठेगानामाथि रोक लगाइएकोछ किन भनें यो अर्को प्रयोगकर्ताले प्रयोग गरेको थियो, जसलाई $1ले रोक लगाएका थिए। \nरोक लगाउनुको कारण:\n:''$2''  \n\n* रोकावट सुरु: $8\n* रोकावट सकिने: $6\n* रोकावटको प्रयोजन: $7\n\nतपाईंले $1 सित संपर्क गर्न सक्नुहुन्छ अथवा कुनै [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धकसित]] रोकबारे चर्चा गर्न सक्नुहु्न्छ।\n\nध्यान दिनुहोस् कि तपाईंले यस प्रयोगकर्ताका लागि ई-मेलको प्रयोग तबसम्म गर्नसक्नुहुन्न जबसम्म तपाईको [[Special:Preferences|अभिरुचि]] पंजिकृत गर्नु हुन्न वा यस ई-मेलको प्रयोगमाथि रोक लगाइएको हुँदैन। \n\nतपाईंको वर्तमान IP ठेगाना हो- $3, अनि रोक लगाइएको ID हो- #$5.\nकृपया कुनै बेला सोधनी गर्नु परे उपर्युक्त विवरण दर्शाउनु होला।",
+       "blockedtext": "'''तपाà¤\88à¤\81à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¯à¤¾ IP à¤ à¥\87à¤\97ानालाà¤\88 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b à¥¤'''\n\nरà¥\8bà¤\95 à¤²à¤\97ाà¤\89नà¥\87  $1.\nरà¥\8bà¤\95 à¤²à¤\97ाà¤\89नाà¤\95à¥\8b à¤\95ारण ''$2''.\n\n* à¤°à¥\8bà¤\95 à¤¸à¥\81रà¥\82 à¤¹à¥\81नà¥\87 : $8\n* à¤°à¥\8bà¤\95 à¤¸à¤\95िनà¥\87: $6\n* à¤°à¥\8bà¤\95बाà¤\9f à¤²à¤\95à¥\8dषित: $7\n\nतपाà¤\88à¤\82लà¥\87  $1 à¤µà¤¾ à¤\85रà¥\81 à¤\95à¥\81नà¥\88  [[{{MediaWiki:Grouppage-sysop}}|पà¥\8dरवनà¥\8dधà¤\95]] à¤¸à¤\81à¤\97 à¤°à¥\8bà¤\95à¤\95à¥\8b à¤¬à¤¾à¤°à¥\87मा à¤\9bलफल à¤\97रà¥\8dन à¤¸à¤®à¥\8dपरà¥\8dà¤\95 à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\nतपाà¤\88à¤\81लà¥\87  'पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dतालाà¤\88 à¤\87-मà¥\87ल à¤\97रà¥\8dनà¥\87 ' à¤¸à¥\81विधा à¤®à¤¾à¤¨à¥\8dय à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना [[Special:Preferences|à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82]]मा à¤¨à¤\96à¥\81लाà¤\8f à¤¸à¤®à¥\8dम à¤ªà¥\8dरयà¥\8bà¤\97à¤\97रà¥\8dन à¤ªà¤¾à¤\89नà¥\81हà¥\81नà¥\87 à¤\9bà¥\88न à¤° à¤¯à¤¸à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनबाà¤\9f à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤\nतपाà¤\88à¤\82को IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
+       "autoblockedtext": "तपाईंको IP ठेगानामाथि रोक लगाइएकोछ किन भनें यो अर्को प्रयोगकर्ताले प्रयोग गरेको थियो, जसलाई $1ले रोक लगाएका थिए। \nरोक लगाउनुको कारण:\n:''$2''  \n\n* रोकावट सुरु: $8\n* रोकावट सकिने: $6\n* रोकावटको प्रयोजन: $7\n\nतपाईं $1 सित सम्पर्क गर्न सक्नुहुन्छ अथवा कुनै [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]]सँग रोकबारे चर्चा गर्न सक्नुहुन्छ ।\n\nध्यान दिनुहोस् कि तपाईंले यस प्रयोगकर्ताका लागि ई-मेलको प्रयोग तबसम्म गर्नसक्नुहुन्न जबसम्म तपाईंको [[Special:Preferences|अभिरुचि]] पंजिकृत गर्नु हुन्न वा यस ई-मेलको प्रयोगमाथि रोक लगाइएको हुँदैन । \n\nतपाईंको वर्तमान IP ठेगाना हो- $3, अनि रोक लगाइएको ID हो- #$5.\nकृपया कुनै बेला सोधनी गर्नु परे उपर्युक्त विवरण दर्शाउनु होला ।",
        "blockednoreason": "कारण दिइएको छैन",
        "whitelistedittext": "पाना सम्पादन गर्न तपाँईले $1 गर्नु पर्दछ।",
        "confirmedittext": "तपाईंले पृष्ठ संपादन गर्नअघि आफ्नो ई-मेल ठेगानाको पुष्टि गर्नुपर्छ।\nकृपया ई-मेल ठेगाना तयार गरी [[Special:Preferences|प्रयोगकर्ता अभिरूचि]] मार्फत मंजुर गराउनुहोस्।",
        "nosuchsectiontext": "तपाईं त्यस्तो खण्डको सम्पादन गर्ने प्रयास गर्नुभयो जो अस्तित्वमा छैन।\nयो सारिएको अथवा मेटाइएको हुनुपर्छ जब तपाईं यस पृष्ठलाई हेर्नुहुँदैथियो।",
        "loginreqtitle": "प्रवेशगर्नु जरुरी छ।",
        "loginreqlink": "प्रवेश (लग ईन)",
-       "loginreqpagetext": "अरु पृष्ठहेर्न तपाईले $1 गर्नुपर्छ ।",
+       "loginreqpagetext": "अरु पृष्ठ हेर्न तपाईंले $1 गर्नुपर्छ ।",
        "accmailtitle": "पासवर्ड पठाइयो",
        "accmailtext": "जथाभावीरूपमा सृजना गरिएको प्रवेशशब्द प्रयोगकर्ता [[User talk:$1|$1]] को  $2 मा पठाइएको छ।\n\nयो नयाँ खाताको प्रवेशशब्द  ''[[Special:ChangePassword|change password]]'' मा प्रवेश गरेर परिवर्तन गर्न सकिन्छ ।",
        "newarticle": "(नयाँ)",
        "deletedhist": "मेटाएका इतिहास",
        "revdelete-hide-current": "$2, $1: मिति गरिएका वस्तुहरु लुकाउन मिलेन यो नै सबैभन्दा नयाँ संस्करण हो ।\nयसलाई लुकाउन मिल्दैन ।",
        "revdelete-show-no-access": "  $2समय र $1 मिति भएको वस्तु देखाउन सकिएन: यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई हेर्न तपाईसँग अनुमती छैन ।",
-       "revdelete-modify-no-access": "  $2समय र $1 मिति भएको वस्तु परिवर्तन गर्न सकिएन यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई परिवर्तन गर्न तपाईसँग अनुमती छैन ।",
+       "revdelete-modify-no-access": "  $2, $1 भएको वस्तु परिवर्तन गर्न सकिएन यसलाई \"निषेधित\"भनि चिनो लगाइएको छ।\nयसलाई परिवर्तन गर्न तपाईंसँग अनुमती छैन ।",
        "revdelete-modify-missing": "आइडी  $1 रहेको वस्तु परिवर्तन गर्दा त्रुटी भएको छ: यस वस्तु डेटावेसबाट हराइरहेको छ !",
        "revdelete-no-change": "'''चेतावनी:''' $2, $1मिति भइको वस्तुको पहिले नै अनुरोध गरे अनुसारको दृश्य सेटिङ्गहरु छन् ।",
-       "revdelete-concurrent-change": " $2, $1 मिति गरिएको वस्तु परिवर्तन गर्न सकिएन: यसको स्थितीले तपाईले परिवर्तन गर्नलाग्नुहुँदा कोहीअरुले नै परिवर्तन गरेजस्तो देखाउँछ\nकृपया लगहरू हेर्नुहोला ।",
-       "revdelete-only-restricted": "$2, $1 à¤®à¤¿à¤¤à¤¿ à¤­à¤\8fà¤\95à¥\8b à¤µà¤¸à¥\8dतà¥\81 à¤²à¥\81à¤\95ाà¤\89दा à¤¤à¥\8dरà¥\81à¤\9fà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\9b:तपाà¤\88लà¥\87 à¤µà¤¸à¥\8dतà¥\81हरà¥\81लाà¤\88 à¤ªà¥\8dरवनà¥\8dधà¤\95हरà¥\81à¤\95à¥\8b à¤¦à¥\83षà¥\8dà¤\9fà¥\80बाà¤\9f à¤¦à¤®à¤¨ à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन à¤\85à¤\9d à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤\85रà¥\81 à¤¦à¥\83षà¥\8dà¤\9fà¥\80 à¤µà¤¿à¤\95लà¥\8dपहरà¥\81 नछानीकन।",
+       "revdelete-concurrent-change": " $2, $1 à¤®à¤¿à¤¤à¤¿ à¤\97रिà¤\8fà¤\95à¥\8b à¤µà¤¸à¥\8dतà¥\81 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¸à¤\95िà¤\8fन: à¤¯à¤¸à¤\95à¥\8b à¤¸à¥\8dथितà¥\80लà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dनलाà¤\97à¥\8dनà¥\81हà¥\81à¤\81दा à¤\95à¥\8bहà¥\80à¤\85रà¥\81लà¥\87 à¤¨à¥\88 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\87à¤\9cसà¥\8dतà¥\8b à¤¦à¥\87à¤\96ाà¤\89à¤\81à¤\9b\nà¤\95à¥\83पया à¤²à¤\97हरà¥\82 à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bला à¥¤",
+       "revdelete-only-restricted": "$2, $1 à¤®à¤¿à¤¤à¤¿ à¤­à¤\8fà¤\95à¥\8b à¤µà¤¸à¥\8dतà¥\81 à¤²à¥\81à¤\95ाà¤\89दा à¤¤à¥\8dरà¥\81à¤\9fà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\9b:तपाà¤\88à¤\82लà¥\87 à¤µà¤¸à¥\8dतà¥\81हरà¥\82लाà¤\88 à¤ªà¥\8dरवनà¥\8dधà¤\95हरà¥\82à¤\95à¥\8b à¤¦à¥\83षà¥\8dà¤\9fà¥\80बाà¤\9f à¤¦à¤®à¤¨ à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन à¤\85à¤\9d à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤\85रà¥\81 à¤¦à¥\83षà¥\8dà¤\9fà¥\80 à¤µà¤¿à¤\95लà¥\8dपहरà¥\82 नछानीकन।",
        "revdelete-reason-dropdown": "मेटाउनका सामान्य कारणहरु\n** कपीराइट उल्लंघन\n** अनुचित व्यक्तिगत जानकारी\n** अनुचित प्रयोगकर्ता नाम\n** संभावित अपमानजनक जानकारी",
        "revdelete-otherreason": "अन्य/थप कारण:",
        "revdelete-reasonotherlist": "अरु कारण",
        "searchprofile-advanced": "उन्नत",
        "searchprofile-articles-tooltip": "$1 मा खोज्ने",
        "searchprofile-images-tooltip": "फाइलहरू खोज्ने",
-       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत )",
+       "searchprofile-everything-tooltip": "सबै सामग्री खोज्ने (वार्तालाप समेत)",
        "searchprofile-advanced-tooltip": "अनुकुल नेमस्पेसमा खोज्ने",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्द|$2 शब्दहरू}})",
        "search-result-category-size": "{{PLURAL:$1|एक सदस्य|$1 सदस्यहरू}} ({{PLURAL:$2|1 उपश्रेणी|$2  उपश्रेणीहरू}}, {{PLURAL:$3|एउटा फाइल|$3 फाइलहरू}})",
        "search-section": "(खण्ड $1)",
        "search-category": "(श्रेणी $1)",
        "search-file-match": "(भेटिएका फाइल सामाग्री)",
-       "search-suggest": "à¤\95à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\96à¥\8bà¤\9cाà¤\88 : $1 à¤¹à¥\8b?",
+       "search-suggest": "à¤\95तà¥\88 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\96à¥\8bà¤\9cाà¤\88 : $1 à¤¤ à¤¹à¥\8bà¤\87न ?",
        "search-interwiki-caption": "भगिनी आयोजना",
        "search-interwiki-default": "$1देखिका नतिजाहरू:",
        "search-interwiki-more": "(अझै)",
        "powersearch-togglelabel": "जाँच्ने :",
        "powersearch-toggleall": "सबै",
        "powersearch-togglenone": "कुनै पनि होइन",
-       "powersearch-remember": "चयन गरिएको लाई भविष्यमा गरिने खोजहरूको लागि सम्झिने",
+       "powersearch-remember": "चयन गरिएकोलाई भविष्यमा गरिने खोजहरूको लागि सम्झिने",
        "search-external": "बाह्य खोज",
-       "searchdisabled": "{{SITENAME}} à¤\96à¥\8bà¤\9c à¤¨à¤¿à¤¸à¥\8dà¤\95à¥\8dरिय à¤ªà¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤\9b à¥¤\nहाललाà¤\88 à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\97à¥\82à¤\97लदà¥\8dवारा à¤\96à¥\8bà¤\9cà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\nयाद à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¤\89नà¥\80हरà¥\81को {{SITENAME}}को सूची सामग्री पुरानो भएको हुनसक्छ ।",
+       "searchdisabled": "{{SITENAME}} à¤\96à¥\8bà¤\9c à¤¨à¤¿à¤¸à¥\8dà¤\95à¥\8dरिय à¤ªà¤¾à¤°à¤¿à¤\8fà¤\95à¥\8b à¤\9b à¥¤\nहाललाà¤\88 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\97à¥\82à¤\97लदà¥\8dवारा à¤\96à¥\8bà¤\9cà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\nयाद à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¤\89नà¥\80हरà¥\82को {{SITENAME}}को सूची सामग्री पुरानो भएको हुनसक्छ ।",
        "search-error": "खोज्ने क्रममा समस्या देखियोः $1",
        "preferences": "रोजाइहरू",
        "mypreferences": "प्राथमिकताहरू",
        "prefs-custom-css": "अनुकुलित CSS",
        "prefs-custom-js": "अनुकुलित JS",
        "prefs-common-css-js": "साझा CSS/जाभा स्क्रिप्ट सबै त्वचा(स्किन)को लागि:",
-       "prefs-reset-intro": "तपाà¤\88लà¥\87 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 à¤¸à¤¾à¤\87à¤\9f à¤ªà¥\82रà¥\8dवावसà¥\8dथामा à¤«à¤°à¥\8dà¤\95ाà¤\89न à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤\nयà¥\8b à¤°à¤¦à¥\8dद à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b ।",
+       "prefs-reset-intro": "तपाà¤\88à¤\81 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\81à¤\9aà¥\80हरà¥\82 à¤¸à¤¾à¤\87à¤\9f à¤ªà¥\82रà¥\8dवावसà¥\8dथामा à¤«à¤°à¥\8dà¤\95ाà¤\89न à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤ à¤¤à¥\8dयस à¤ªà¤\9bि à¤¯à¤¸à¤²à¤¾à¤\88 à¤°à¤¦à¥\8dद à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन ।",
        "prefs-emailconfirm-label": "इ-मेल एकिन प्रक्रिया :",
        "youremail": "ईमेल",
        "username": "{{GENDER:$1|प्रयोगकर्ता नाम}}:",
        "yourvariant": "लेखको भाषा संस्करण:",
        "prefs-help-variant": "तपाईंको मनपरेको संस्करण वा हिज्जे यस विकि भित्र सामग्री पृष्ठहरू प्रदर्शित गर्नका निमित्त।",
        "yournick": "नयाँ हस्ताक्षर:",
-       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\81 \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपर्छ ,जुन पछि तपाईँको दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
+       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\82 \"<nowiki>~~~~</nowiki>\" द्वारा दस्तखत गरिनुपर्छ ,जुन पछि तपाईँको दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
        "badsig": "अमान्य कच्चा दस्तखत।\nHTML ट्यागहरु जाँच्नुहोस् ।",
-       "badsiglength": "तपाईको दस्तखत धेरै लामो छ।\nयो $1 {{PLURAL:$1|अक्षर|अक्षरहरू}} भन्दा लामो हुनु हुँदैन ।",
+       "badsiglength": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¦à¤¸à¥\8dतà¤\96त à¤§à¥\87रà¥\88 à¤²à¤¾à¤®à¥\8b à¤\9b।\nयà¥\8b $1 {{PLURAL:$1|à¤\85à¤\95à¥\8dषर|à¤\85à¤\95à¥\8dषरहरà¥\82}} à¤­à¤¨à¥\8dदा à¤²à¤¾à¤®à¥\8b à¤¹à¥\81नà¥\81 à¤¹à¥\81à¤\81दà¥\88न à¥¤",
        "yourgender": "कसरी वताउन चाहनुहुन्छ ?",
        "gender-unknown": "म खुलाउन चाहन्न",
        "gender-male": "उसले विकि पृष्ठहरू सम्पादन गर्छ",
        "gender-female": "उनले विकि पृष्ठ सम्पादन गर्छिन",
        "prefs-help-gender": "यो जानकारी दिनु वैकल्पिक छ।\nयो सफ्टवेयरमा लिङ्गको आधारमा तपाईंको लागि सहि सम्बोधन गर्नको निमित्त हुन्छ।\nयो जानकारी सार्वजनिक गरिनेछ।",
        "email": "ईमेल",
-       "prefs-help-realname": "वासà¥\8dतविà¤\95 à¤¨à¤¾à¤® à¤\90à¤\9aà¥\8dà¤\9bिà¤\95 à¤¹à¥\8b à¥¤\nतपाà¤\88लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा à¤¤à¤ªà¤¾à¤\88को कामको श्रेय दिनको लागि यसको प्रयोग गरिने छ ।",
+       "prefs-help-realname": "वासà¥\8dतविà¤\95 à¤¨à¤¾à¤® à¤\90à¤\9aà¥\8dà¤\9bिà¤\95 à¤¹à¥\8b à¥¤\nतपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\96णà¥\8dडमा à¤¤à¤ªà¤¾à¤\88à¤\82को कामको श्रेय दिनको लागि यसको प्रयोग गरिने छ ।",
        "prefs-help-email": "इमेल ठेगाना ऐच्छिक हो, तर  प्रवेश शव्दको पुनर्स्थापनाको लागि आवश्यकता छ, के तपाईंले प्रवेश शव्द भुल्नु हुन्थ्यो।",
        "prefs-help-email-others": "तपाईंले यो पनि चयन गर्न सक्नुहुन्छ कि अरुहरुले तपाईंको परिचय नपाई तपाईंसित तपाईंको प्रयोगकर्ता अथवा वार्तालाप पृष्ठको माध्यमले सम्पर्क राखुन् ।",
        "prefs-help-email-required": "इमेल ठेगामा चाहिन्छ ।",
        "prefs-displaywatchlist": "प्रदर्शन विकल्पहरू",
        "prefs-tokenwatchlist": "टोकन",
        "prefs-diffs": "diffs(भिन्नता)",
-       "prefs-help-prefershttps": "यो अभिरूची तपाईको अर्को प्रवेश (लग इन) बाट लागु हुनेछ ।",
+       "prefs-help-prefershttps": "यà¥\8b à¤\85भिरà¥\82à¤\9aà¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\85रà¥\8dà¤\95à¥\8b à¤ªà¥\8dरवà¥\87श (लà¤\97 à¤\87न) à¤¬à¤¾à¤\9f à¤²à¤¾à¤\97à¥\81 à¤¹à¥\81नà¥\87à¤\9b à¥¤",
        "prefswarning-warning": "तपाईंले आफ्नो अभिरूचीमा गर्नुभएको परिवर्तन अहिले सम्म सङ्ग्रह गरिएको छैन। यदि तपाईं \"$1\" मा क्लिक नगरी यस पृष्ठबाट बाहिर जानुभयो भने तपाईंको अभिरूची अपडेट गर्न सकिदैन।",
        "prefs-tabs-navigation-hint": "सुझाव: तपाईं ट्याबसहरूमा ट्याबसको बीच आवागमन गर्नका लागि देब्रे वा दाहिने तीर साँचोको प्रयोग गर्न सक्नुहुन्छ।",
        "email-address-validity-valid": "ईमेल ठेगाना मान्य देखिन्छ",
        "userrights-nologin": "प्रयोगकर्ता अधिकार प्रदान गर्न तपाईंले प्रबन्धक खाताबाट [[Special:UserLogin|प्रवेश]] गर्नुपर्छ।",
        "userrights-notallowed": "प्रयोगकर्तालाई अधिकार प्रदान गर्ने वा हटाउने अनुमति तपाईंलाई छैन।",
        "userrights-changeable-col": "परिवर्तन गर्न सकिने समूहहरु",
-       "userrights-unchangeable-col": "तपाà¤\88लà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81नहà¥\81नà¥\87 à¤¸à¤®à¥\82हहरà¥\81",
+       "userrights-unchangeable-col": "तपाà¤\88à¤\82लà¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dन à¤¨à¤¸à¤\95à¥\8dनà¥\87 à¤¸à¤®à¥\82हहरà¥\82",
        "userrights-irreversible-marker": "$1*",
-       "userrights-conflict": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤\85धिà¤\95ार à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमा à¤®à¤¤à¤­à¥\87द à¤­à¤¯à¥\8b ! à¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤ªà¥\81नरावलà¥\8bà¤\95न à¤¤à¤¥à¤¾ à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dनà¥\81 होस् ।",
-       "userrights-removed-self": "तपाà¤\88लà¥\87 à¤¸à¤«à¤²à¤¤à¤¾à¤ªà¥\82रà¥\8dवà¤\95 à¤\86फà¥\8dनà¥\8b à¤\85धिà¤\95ारहरà¥\82लाà¤\88 à¤®à¥\87à¤\9fाà¤\89नà¥\81 à¤­à¤¯à¥\8b à¥¤ à¤¤à¥\8dयस à¤\95ारण à¤¤à¤ªà¤¾à¤\88 à¤\85ब à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤¹à¥\87रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81 à¤¹à¥\81नà¥\87 à¤\9bà¥\88नà¥\8d ।",
+       "userrights-conflict": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤\85धिà¤\95ार à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमा à¤®à¤¤à¤­à¥\87द à¤­à¤¯à¥\8b ! à¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤ªà¥\81नरावलà¥\8bà¤\95न à¤¤à¤¥à¤¾ à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dनà¥\81होस् ।",
+       "userrights-removed-self": "तपाà¤\88à¤\82लà¥\87 à¤¸à¤«à¤²à¤¤à¤¾à¤ªà¥\82रà¥\8dवà¤\95 à¤\86फà¥\8dनà¥\8b à¤\85धिà¤\95ारहरà¥\82लाà¤\88 à¤®à¥\87à¤\9fाà¤\89नà¥\81 à¤­à¤¯à¥\8b à¥¤ à¤¤à¥\8dयस à¤\95ारण à¤¤à¤ªà¤¾à¤\88à¤\82 à¤\85ब à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤¹à¥\87रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81 à¤¹à¥\81नà¥\8dन ।",
        "group": "समूह :",
        "group-user": "प्रयोगकर्ताहरू",
        "group-autoconfirmed": "स्वत निश्चित गरिएका प्रयोगकर्ताहरू",
        "action-editmyprivateinfo": "तपाईँको व्यक्तिगत जानकारी सम्पादन गर्नुहोस",
        "action-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "action-managechangetags": "डाटाबेसबाट ट्यागहरू बनाउने र मेटाउने",
-       "action-applychangetags": "तपाईको परिवर्तनसँगै ट्यागहरू लागु गर्ने",
+       "action-applychangetags": "तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनसà¤\81à¤\97à¥\88 à¤\9fà¥\8dयाà¤\97हरà¥\82 à¤²à¤¾à¤\97à¥\81 à¤\97रà¥\8dनà¥\87",
        "action-changetags": "जोड्ने र हटाउने स्वतन्त्र ट्याग व्यक्तिगत अवतरणहरू र लग इन्ट्रीहरूमा",
        "nchanges": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरू}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|पछिल्लो भ्रमण पछि}}",
        "tmp-write-error": "अस्थायी फाइल लेख्दै गर्दा त्रुटि।",
        "large-file": "यो सिफारिस गरिन्छ कि फाइलहरू  $1 भन्दा ठूला हुनु हुँदैन;\nयो फाइल $2 छ।",
        "largefileserver": "उर्ध्वभरण गरिएको फाइल सर्भरमा निर्धारित सीमा भन्दा ठूलो छ।",
-       "emptyfile": "तपाà¤\88लà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤°à¤¿à¤¤à¥\8dतà¥\8b à¤\9b।\nयà¥\8b à¤«à¤¾à¤\87लनाम à¤\97लत à¤°à¤¾à¤\96िà¤\8fà¤\95à¥\8b à¤\95ारणलà¥\87 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\81नसà¤\95à¥\8dà¤\9b\nयà¥\8b à¤«à¤¾à¤\87ल à¤¸à¤¾च्चै उर्ध्वभरण गर्नेकुरामा निश्चित हुनुहोस् ।",
+       "emptyfile": "तपाà¤\88à¤\82लà¥\87 à¤\89रà¥\8dधà¥\8dवभरण à¤\97रà¥\8dनà¥\81भà¤\8fà¤\95à¥\8b à¤«à¤¾à¤\87ल à¤°à¤¿à¤¤à¥\8dतà¥\8b à¤\9b à¥¤\nयà¥\8b à¤«à¤¾à¤\87ल à¤¨à¤¾à¤® à¤\97लत à¤°à¤¾à¤\96िà¤\8fà¤\95à¥\8b à¤\95ारणलà¥\87 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\81नसà¤\95à¥\8dà¤\9b\nयà¥\8b à¤«à¤¾à¤\87ल à¤¸à¤¾à¤\81च्चै उर्ध्वभरण गर्नेकुरामा निश्चित हुनुहोस् ।",
        "windows-nonascii-filename": "विशेष वर्ण सहितका फाइलनामहरु यस विकिद्वारा समर्थित छैनन् ।",
        "fileexists": "यो नामको फाइल पहिले नैं छ, यदि तपाईं परिवर्तन गर्ने कुरामा सुनिश्चित हुनुहुन्न भने कृपया <strong>[[:$1]]</strong> जाँच गर्नुहोस्।\n[[$1|thumb]]",
        "filepageexists": "यस फाइलको लागि विवरण पृष्ठ पहिले नै <strong>[[:$1]]</strong> बनाइ सकिएको छ, तर यस नामको कुनै फाइल अहिले उपस्थित छैन। \nतपाईं जुन विवरण दिनुहुन्छ त्यो विवरण पृष्ठमा देखिंदैन। \nतपाईंको आफ्नो विवरणलाई त्यहाँ राख्न म्यानुअली सम्पादन गर्नु पर्नेछ।\n[[$1|thumb]]",
        "uploadstash-summary": "यो पृष्ठ ती फाइलहरूलाई पहुँच प्रदान गर्छ जुन अपलोड गरिएको छ ‍‌‍‌(वा अपलोड प्रक्रियामा रहेको छ) तर विकिमा अहिले पनि प्रकासित गरिएको छैन। यो फाइलहरू अपलोड गरेको प्रयोगकर्ता वाहेक कसैको लागि पनि उपलब्ध छैन।",
        "uploadstash-clear": "स्टाश गरिएका फाइल हटाउने",
        "uploadstash-nofiles": "तपाईंका कुनै पनि स्टाश गरिएका फाइलहरू छैनन् ।",
-       "uploadstash-badtoken": "दिà¤\87à¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय à¤\85सफलभयà¥\8b , à¤¤à¤ªà¤¾à¤\88को सम्पादन अधिकार समाप्त भयो । पुन: प्रयास गर्नुहोस् ।",
+       "uploadstash-badtoken": "दिà¤\87à¤\8fà¤\95à¥\8b à¤\95ारà¥\8dय à¤\85सफलभयà¥\8b , à¤¸à¤¾à¤¯à¤¦ à¤¤à¤ªà¤¾à¤\88à¤\82को सम्पादन अधिकार समाप्त भयो । पुन: प्रयास गर्नुहोस् ।",
        "uploadstash-errclear": "फाइल हटाउने कार्य असफल भयो ।",
        "uploadstash-refresh": "फाइलहरूको सूची ताजा गर्ने",
        "invalid-chunk-offset": "अमान्य चंक अफसेट",
        "linkstoimage": "यस फाइलमा निम्न{{PLURAL:$1|पृष्ठ जोडिन्छ|$1 पृष्ठहरू जोडिन्छन्}}:",
        "linkstoimage-more": "$1 भन्दा अधिक {{PLURAL:$1|पृष्ठ लिङ्क|पृष्ठ लिङ्कहरू}} यस फाइलसँग जोडिएको छ। \nनिम्नलिखित सूची फाइलसँग {{PLURAL:$1|पहिलो पृष्ठ लिङ्क|पहिलो $1 पृष्ठ लिङ्कहरू}} जोडिने देखाउँछ।\n[[Special:WhatLinksHere/$2|पूर्ण सूची]] पनि उपलब्ध छ।",
        "nolinkstoimage": "यो फाईलसंग लिंकभएको कुनै पृष्ठ छैन.",
-       "morelinkstoimage": "हà¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d [[Special:WhatLinksHere/$1|थप à¤²à¤¿à¤\82à¤\95हरà¥\81]] à¤¯à¥\8b à¤«à¤¾à¤\87लà¤\95à¥\8b।",
+       "morelinkstoimage": "यस à¤«à¤¾à¤\87लà¤\95à¥\8b [[Special:WhatLinksHere/$1|थप à¤²à¤¿à¤\82à¤\95हरà¥\82]] à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d ।",
        "linkstoimage-redirect": "$1 (फाइल अनुप्रेषण) $2",
        "duplicatesoffile": "निम्नलिखित {{PLURAL:$1|फाइलको प्रतिलिपि हो|$1 फाइलहरूको प्रतिलिपि हो}} ([[Special:FileDuplicateSearch/$2|अधिक जानकारीहरू]]):",
        "sharedupload": "यो फाइल $1 को हो र अन्य परियोजनामा प्रयोग गरिएको हुनसक्छ।",
        "filedelete": " $1 मेट्नुहोस्",
        "filedelete-legend": "फाइल मेट्ने",
        "filedelete-intro": "तपाईं फाइल <strong>[[Media:$1|$1]]</strong> लाई इतिहास समेत हटाउन जाँदै हुनुहुन्छ।",
-       "filedelete-intro-old": "तपाà¤\88लà¥\87 <strong>[[Media:$1|$1]]</strong> à¤\95à¥\8b à¤¸à¤\82सà¥\8dà¤\95रणलाà¤\88 [$4 $3, $2] à¤¹à¥\81नà¥\87 à¤\97रि à¤®à¥\87à¤\9fाà¤\89दै हुनु हुन्छ ।",
+       "filedelete-intro-old": "तपाà¤\88à¤\82 <strong>[[Media:$1|$1]]</strong> à¤\95à¥\8b à¤¸à¤\82सà¥\8dà¤\95रणलाà¤\88 [$4 $3, $2] à¤¹à¥\81नà¥\87 à¤\97रि à¤®à¥\87à¤\9fाà¤\89à¤\81दै हुनु हुन्छ ।",
        "filedelete-comment": "कारण :",
        "filedelete-submit": "मेट्ने",
        "filedelete-success": "'''$1''' मेटियो ।",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइटहरू}}",
        "ncategories": "$1 {{PLURAL:$1|श्रेणी|श्रेणीहरू}}",
        "ninterwikis": "$1 {{PLURAL:$1|अन्तरविकि|अन्तरविकिहरू}}",
-       "nlinks": "$1 {{PLURAL:$1|लिà¤\82à¤\95|लिà¤\82à¤\95हरà¥\81}}",
+       "nlinks": "$1 {{PLURAL:$1|लिà¤\82à¤\95|लिà¤\82à¤\95हरà¥\82}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्य|सदस्यहरू}}",
        "nrevisions": "$1 {{PLURAL:$1|पुनरावलोकन|पुनरावलोकनहरु}}",
        "unusedimagestext": "निम्न फाइलहरू छन्, तर कुनै पनि पृष्ठमा प्रयोग गरिएको छैन। कृपया ध्यान दें कि अन्य वेबसाइट एउटा सिधै लिङ्कको फाइलसँग जोड्न सकिन्छ, र सक्रिय उपयोगमा हुँदा पनि यहाँ देखाउन सकिन्छ।",
        "unusedcategoriestext": "तल श्रेणीका पृष्ठहरू उपलब्ध भएता पनि उक्त पृष्ठहरूलाई अन्य पृष्ठहरू तथा श्रेणीले प्रयोग गर्न सक्दैनन् ।",
        "notargettitle": "कुनैपनि निसाना(टारगेट) छैन",
-       "notargettext": "यà¥\8b à¤\95ारà¥\8dयà¤\95à¥\8b à¤²à¤¾à¤\97à¥\80 à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\95à¥\81नà¥\88 à¤²à¤\95à¥\8dषà¥\8dयित à¤ªà¥\83षà¥\8dठ à¤µà¤¾ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤\97रà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\9bà¥\88नà¥\8d ।",
+       "notargettext": "यà¥\8b à¤\95ारà¥\8dयà¤\95à¥\8b à¤²à¤¾à¤\97à¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\95à¥\81नà¥\88 à¤²à¤\95à¥\8dषित à¤ªà¥\83षà¥\8dठ à¤µà¤¾ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤\97रà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\9bà¥\88न ।",
        "nopagetitle": "त्यस्तो गन्तव्या पृष्ठ भेटिएन",
-       "nopagetext": "तपाईले खुलाउनु भएको गन्तव्य पृष्ठ अस्तित्वमा  छैन।",
+       "nopagetext": "तपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\97नà¥\8dतवà¥\8dय à¤ªà¥\83षà¥\8dठ à¤\85सà¥\8dतितà¥\8dवमा  à¤\9bà¥\88न।",
        "pager-newer-n": "{{PLURAL:$1|नयाँ १|नयाँ $1}}",
        "pager-older-n": "{{PLURAL:$1|पुरानो १|पुरानो $1}}",
        "suppress": "अतिदृष्टि",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
        "booksources-search": "खोज",
-       "booksources-text": "तल à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¨à¤¯à¤¾à¤\81 à¤¤à¤¥à¤¾ à¤ªà¥\82राना à¤\95िताब à¤¬à¥\87à¤\9aà¥\8dनà¥\87 à¤²à¤\97ायत à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\96à¥\8bà¤\9cà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\95िताबà¤\95ा à¤¬à¤¾à¤°à¥\87मा à¤¥à¤ª à¤\9cानà¤\95ारà¥\80 à¤­à¤\8fà¤\95à¥\8b à¤\85नà¥\8dय à¤¸à¤¾à¤\87à¤\9fà¤\95ा à¤\95डिहरू हुन् ।",
+       "booksources-text": "तल à¤¦à¤¿à¤\87à¤\8fà¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80 à¤¨à¤¯à¤¾à¤\81 à¤¤à¤¥à¤¾ à¤ªà¥\82राना à¤\95िताब à¤¬à¥\87à¤\9aà¥\8dनà¥\87 à¤²à¤\97ायत à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\96à¥\8bà¤\9cà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤\95िताबà¤\95ा à¤¬à¤¾à¤°à¥\87मा à¤¥à¤ª à¤\9cानà¤\95ारà¥\80 à¤­à¤\8fà¤\95ा à¤\85नà¥\8dय à¤¸à¤¾à¤\87à¤\9fà¤\95ा à¤²à¤¿à¤\82à¤\95हरू हुन् ।",
        "booksources-invalid-isbn": "यो आइएसबीएन सहि छैन; मूल स्रोतबाट नक्कल गर्दा भएको त्रुटिको जाँच गर्नुहोस।",
        "specialloguserlabel": "निष्पादक:",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक वा प्रयोगकर्ता)",
        "linksearch-pat": "खोज्ने नमूना:",
        "linksearch-ns": "नेमस्पेस:",
        "linksearch-ok": "खोज्नुहोस्",
-       "linksearch-text": "\"*.wikipedia.org\" वाइल्डकार्डको रुपमा प्रयोग गर्न सकिने।\nकम्तिमा \".org\" जस्तो कुनै उच्च-स्तरीय डोमेनको आवश्यकता छ।<br />\nसमर्थित प्रोटोकल:<code>$1</code> (यदि कुनै {{PLURAL:$2|प्रोटोकल|प्रोटोकलहरू}} दिइएको छैन भने http:// को प्रयोग गर्न सकिन्छ)",
+       "linksearch-text": "\"*.wikipedia.org\" वाइल्डकार्डको रुपमा प्रयोग गर्न सकिने।\nकम्तिमा \".org\" जस्तो कुनै उच्च-स्तरीय डोमेनको आवश्यकता छ।<br />\nसमर्थित प्रोटोकल:$1 (यदि कुनै {{PLURAL:$2|प्रोटोकल|प्रोटोकलहरू}} दिइएको छैन भने http:// को प्रयोग गर्न सकिन्छ)",
        "linksearch-line": "$1 $2सित जोड़िएको छ।",
        "linksearch-error": "मूलनामको सुरुमा मात्र वाइल्डकार्ड देखापर्न सक्छ।",
        "listusersfrom": "प्रयोगहरु देखाउन शुरु हुने यहाँ:",
        "emailuser": "यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्",
        "emailuser-title-target": "{{GENDER:$1|प्रयोगकर्ता}}लाई इमेल गर्ने",
        "emailuser-title-notarget": "प्रयोगकर्तालाई इमेल गर्नुहोस्",
-       "emailpage": "प्रयोगकर्तालाई इमेल गर्नुहोस्",
        "emailpagetext": "तल दिइएको फर्मले तपाईं यस {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्नुहुन्छ। तपाईंले जुन ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता अभिरूचीहरू]]मा दिनुभएको थियो त्यो यस इमेललाई \"पठाउने\" को रूपमा आउनेछ, अतः प्राप्तकर्ता तपाईंलाई सिधै जवाफ दिनसक्छ।",
        "defemailsubject": "{{SITENAME}} प्रयपोगकर्ता \"$1\" बाट इमेल",
        "usermaildisabled": "प्रयोगकर्ता इमेल निरस्त गरिएको",
        "watchlist": "अवलोकन सूची",
        "mywatchlist": "अवलोकनसूची",
        "watchlistfor2": "$1को $2",
-       "nowatchlist": "तपाईको अवलोकन सूचीमा कुनै पनि सामाग्री छैन।",
-       "watchlistanontext": "à¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81ची हेर्न या सम्पादन गर्न लगइन गर्नुहोस्।",
+       "nowatchlist": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\85वलà¥\8bà¤\95न à¤¸à¥\82à¤\9aà¥\80मा à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤¸à¤¾à¤®à¤¾à¤\97à¥\8dरà¥\80 à¤\9bà¥\88न।",
+       "watchlistanontext": "à¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82ची हेर्न या सम्पादन गर्न लगइन गर्नुहोस्।",
        "watchnologin": "प्रवेश (लग ईन) नगरिएको",
        "addwatch": "निगरानी सुचीमा थप्ने",
        "addedwatchtext": "\"[[:$1]]\" पृष्ठ [[Special:Watchlist|अवलोकनसूची]]मा थपियो\nयो पृष्ठ र यससित सम्बद्ध वार्तालाप पृष्ठमा भविष्यमा हुने परिवर्तन सूचिबद्ध गरिनेछ।",
-       "addedwatchtext-short": "\"$1\" à¤ªà¥\83षà¥\8dठ à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\85बलोकन सूचीमा थप भएको छ ।",
+       "addedwatchtext-short": "\"$1\" à¤ªà¥\83षà¥\8dठ à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\85वलोकन सूचीमा थप भएको छ ।",
        "removewatch": "निगरानी सुचीबाट हटाउने",
-       "removedwatchtext": "पृष्ठ \"[[:$1]]\" [[Special:Watchlist|तपाईको निगरानी सूची]]बाट हटाइएको छ।",
+       "removedwatchtext": "\"[[:$1]]\" नामको पृष्ठ [[Special:Watchlist|तपाईंको निगरानी सूची]]बाट हटाइएको छ।",
        "removedwatchtext-short": "पृष्ठ \"$1\" तपाईंको अवलोकनसूची बाट हटाइयो",
        "watch": "अवलोकन",
        "watchthispage": "यो पृष्ठ अवलोकन गर्नुहोस्",
        "unwatchthispage": "निगरानीबाट हटाउने",
        "notanarticle": "सामाग्री सहितको पेज हैन",
        "notvisiblerev": "पूर्वावलोकन हटाइयो",
-       "watchlist-details": "तपाà¤\88à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा {{PLURAL:$1|$1 à¤ªà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\81}}वारà¥\8dतालापमा à¤ªà¥\83षà¥\8dठमा गनिएका छैनन्।",
+       "watchlist-details": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मा à¤°à¤¹à¥\87à¤\95ा {{PLURAL:$1|$1 à¤ªà¥\83षà¥\8dठ|$1 à¤ªà¥\83षà¥\8dठहरà¥\82}} à¤µà¤¾à¤°à¥\8dतालाप à¤ªà¥\83षà¥\8dठ गनिएका छैनन्।",
        "wlheader-enotif": "ईमेल जानकारी सक्रिय गरियो ।",
        "wlheader-showupdated": "तपाईँले पछिल्लो पल्ट भ्रमण गरेपछि परिवर्तन भएका पृष्ठहरूलाई <strong>गाढा<strong> गरेर देखाइएको छ ।",
        "wlnote": "$3 र $4 अनुसार विगत {{PLURAL:$2|घण्टामा|'''$2''' घण्टाहरूमा}} {{PLURAL:$1|गरिएको अन्तिम परिवर्तन तल दिइएकोछ|गरिएका अन्तिम  '''$1''' परिवर्तनहरू तल दिइएका छन्}}।",
        "delete-confirm": "मेट्नुहोस् \"$1\"",
        "delete-legend": "मेट्नुहोस्",
        "historywarning": "<strong>चेतावनी:</strong> तपाईंले मेटाउन लाग्नुभएको पृष्ठको इतिहासको लगभग $1 {{PLURAL:$1|पुनरावृत्ति छ|पुनरावृत्तिहरू छन्}}:",
-       "confirmdeletetext": "तपाई यो पृष्ठ र यसको इतिहास मेट्न गइरहनु भएकोछ। कृपया पुष्टि गर्नुहोस् कि [[{{MediaWiki:Policy-url}}|नियम]] मुताबिक तपाईं मेट्न गइरहनु भएकोछ।",
+       "confirmdeletetext": "तपाई यो पृष्ठ र यसको इतिहास मेट्न गइरहनु भएकोछ। कृपया पुष्टि गर्नुहोस् कि [[{{MediaWiki:Policy-url}}|नियम]] मुताबिक तपाईं मेट्न गइरहनु भएकोछ।",
        "actioncomplete": "काम सकियो",
        "actionfailed": "कार्य असफल",
        "deletedtext": "\"$1\" मेटिएको छ।\nहालै हटाइएको सूची $2 मा हेर्नुहोस् ।",
        "delete-edit-reasonlist": "मेट्नुको कारण सम्पादन गर्नुहोस्",
        "delete-toobig": "यो पृष्ठको सम्पादन इतिहास धेरै र  $1 {{PLURAL:$1|पुनरावलोक|पुनरावलोकहरू}}भन्दा बढी रहेको छ।\n {{SITENAME}}मा दुर्घटनाको कारणले गडबडी आउनसक्ने कुरालाई रोक्न यस्ता पृष्ठहरूलाई मेट्नबाट निषेध गरिएको छ ।",
        "delete-warning-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
-       "deleteprotected": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8bलà¥\87 à¤¤à¤ªà¤¾à¤\88लà¥\87 यसलाई मेटाउन सक्नु हुन्न ।",
+       "deleteprotected": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\81रà¤\95à¥\8dषित à¤\97रिà¤\8fà¤\95à¥\8bलà¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 यसलाई मेटाउन सक्नु हुन्न ।",
        "deleting-backlinks-warning": "'''चेतावनी:''' जुन पृष्ठ तपाईं हटाउन गइरहनु भएको छ त्यससँग [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठहरू]] जोडिन्छ अथवा त्यसलाई ट्रान्सक्लयुड गर्छ।",
        "rollback": "सम्पादनहरू पछाडि लिने",
        "rollbacklink": "पहिलेको रुपमा फर्काउने",
        "isimage": "फाइल लिङ्क",
        "whatlinkshere-prev": "{{PLURAL:$1|पहिलो|पहिलो $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|अर्को|अर्को $1}}",
-       "whatlinkshere-links": "â\86\90 à¤²à¤¿à¤\82à¤\95हरà¥\81",
+       "whatlinkshere-links": "â\86\90 à¤²à¤¿à¤\82à¤\95हरà¥\82",
        "whatlinkshere-hideredirs": "$1 अनुप्रेषित हुन्छ",
        "whatlinkshere-hidetrans": "$1 पारदर्शन",
        "whatlinkshere-hidelinks": "$1 लिङ्कहरु",
-       "whatlinkshere-hideimages": "$1 à¤¤à¤¸à¥\8dवà¥\80र à¤²à¤¿à¤\82à¤\95हरà¥\81",
+       "whatlinkshere-hideimages": "$1 à¤«à¤¾à¤\87ल à¤²à¤¿à¤\82à¤\95हरà¥\82",
        "whatlinkshere-filters": "फिल्टरहरू",
        "autoblockid": "अटोब्लक #$1",
        "block": "प्रयोगकर्तालाई रोकलगाउने",
        "ip_range_invalid": "IP क्षेत्र अमान्य ।",
        "ip_range_toolarge": " /$1 भन्दा ठूलो रेन्ज रोक लगाउन पाइदैन ।.",
        "proxyblocker": "प्रोक्सी निषेध गर्ने",
-       "proxyblockreason": "तपाà¤\88à¤\95à¥\8b IP à¤ à¥\87à¤\97ानामा à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b à¤\95िनà¤\95à¥\80 à¤¯à¥\8b à¤\96à¥\81ला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80 à¤¹à¥\8b à¥¤\nà¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\87नà¥\8dà¤\9fरनà¥\87à¤\9f à¤¸à¥\87वा à¤ªà¥\8dरदायà¤\95 à¤¯à¤¾ à¤ªà¥\8dराविधिà¤\95 à¤¸à¤¹à¤¾à¤¯à¤¤à¤¾à¤²à¤¾à¤\88 सम्पर्क गरी यस सुरक्षा समस्याको बारेमा जानकारी गराउनुहोस् ।",
+       "proxyblockreason": "तपाà¤\88à¤\82à¤\95à¥\8b IP à¤ à¥\87à¤\97ानामा à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\87à¤\8fà¤\95à¥\8b à¤\9b à¤\95िनà¤\95à¥\80 à¤¯à¥\8b à¤\96à¥\81ला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80 à¤¹à¥\8b à¥¤\nà¤\95à¥\83पया à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\87नà¥\8dà¤\9fरनà¥\87à¤\9f à¤¸à¥\87वा à¤ªà¥\8dरदायà¤\95 à¤¯à¤¾ à¤ªà¥\8dराविधिà¤\95 à¤¸à¤¹à¤¾à¤¯à¤¤à¤¾à¤¸à¤\81à¤\97 सम्पर्क गरी यस सुरक्षा समस्याको बारेमा जानकारी गराउनुहोस् ।",
        "sorbs": "DNSBL",
-       "sorbsreason": "तपाà¤\88à¤\95à¥\8b IP à¤ à¥\87à¤\97ाना à¤\96à¥\81लà¥\8dला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80à¤\95à¥\8b à¤°à¥\81पमा  DNSBL à¤®à¤¾ à¤¸à¥\81चीकरण गरिएको छ यसलाई{{SITENAME}}ले प्रयोगमा ल्याएको छ।",
-       "sorbs_create_account_reason": "तपाà¤\88à¤\95à¥\8b IP à¤ à¥\87à¤\97ाना à¤\96à¥\81लà¥\8dला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80à¤\95à¥\8b à¤°à¥\81पमा  DNSBL à¤®à¤¾ à¤¸à¥\81à¤\9aà¥\80à¤\95रण à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤²à¤¾à¤\88{{SITENAME}}लà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97मा à¤²à¥\8dयाà¤\8fà¤\95à¥\8b à¤\9b।\nतपाà¤\88ले खाता खोल्न सक्नुहुन्न ।",
+       "sorbsreason": "तपाà¤\88à¤\82à¤\95à¥\8b IP à¤ à¥\87à¤\97ाना à¤\96à¥\81लà¥\8dला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80à¤\95à¥\8b à¤°à¥\81पमा  DNSBL à¤®à¤¾ à¤¸à¥\82चीकरण गरिएको छ यसलाई{{SITENAME}}ले प्रयोगमा ल्याएको छ।",
+       "sorbs_create_account_reason": "तपाà¤\88à¤\82à¤\95à¥\8b IP à¤ à¥\87à¤\97ाना à¤\96à¥\81लà¥\8dला à¤ªà¥\8dरà¥\8bà¤\95à¥\8dसà¥\80à¤\95à¥\8b à¤°à¥\81पमा  DNSBL à¤®à¤¾ à¤¸à¥\82à¤\9aà¥\80à¤\95रण à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¤¯à¤¸à¤²à¤¾à¤\88{{SITENAME}}लà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97मा à¤²à¥\8dयाà¤\8fà¤\95à¥\8b à¤\9b।\nतपाà¤\88à¤\82ले खाता खोल्न सक्नुहुन्न ।",
        "xffblockreason": "एउटा आइपि ठेगाना जुन X-Forwarded-For हेडरमा रहेको छ, या त तपाईंको हो वा त्यस प्रक्सी सर्भरको हो जसको प्रयोग तपाईं गर्दै हुनुहुन्छ र यस माथि प्रतिबन्ध लगाइएको छ। वास्तविक कारण थियो:$1",
-       "cant-see-hidden-user": "तपाà¤\88लà¥\87 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\89न à¤\96à¥\8bà¤\9cà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¹à¤¿à¤²à¥\87 à¤¨à¥\88 à¤°à¥\8bà¤\95लà¤\97ाà¤\87 à¤²à¥\81à¤\95ाà¤\87 à¤¸à¤\95िà¤\8fà¤\95à¥\8b à¤\9b à¥¤\nतपाà¤\88सà¤\81à¤\97 hideuser à¤\85धिà¤\95ार à¤¨à¤­à¤\8fà¤\95à¥\8bलà¥\87 à¤¯à¤¸à¤²à¤¾à¤\88 à¤¹à¥\87रà¥\8dना या सम्पादन गर्न सक्नुहुन्न ।",
+       "cant-see-hidden-user": "तपाà¤\88à¤\82लà¥\87 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\89न à¤\96à¥\8bà¤\9cà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¤¹à¤¿à¤²à¥\87 à¤¨à¥\88 à¤°à¥\8bà¤\95लà¤\97ाà¤\87 à¤²à¥\81à¤\95ाà¤\87 à¤¸à¤\95िà¤\8fà¤\95à¥\8b à¤\9b à¥¤\nतपाà¤\88à¤\82सà¤\81à¤\97 hideuser à¤\85धिà¤\95ार à¤¨à¤­à¤\8fà¤\95à¥\8bलà¥\87 à¤¯à¤¸à¤²à¤¾à¤\88 à¤¹à¥\87रà¥\8dन या सम्पादन गर्न सक्नुहुन्न ।",
        "ipbblocked": "तपाईंले अरु प्रयोगकर्ताहरूलाई प्रतिबन्धित गर्न वा उनीहरूको प्रतिबन्ध खोल्न सक्नुहुन्न किनभने तपाईं आफै प्रतिबन्धित हुनुहुन्छ।",
-       "ipbnounblockself": "तपाई आफैले आफैलाई रोक खुलाउन सक्नुहुन्न ।",
+       "ipbnounblockself": "तपाई आफैले आफैलाई रोक खुलाउन सक्नुहुन्न ।",
        "lockdb": "डेटाबेस ताल्चामार्ने",
        "unlockdb": "डेटाबेसको ताल्चा खोल्ने",
        "lockdbtext": "डेटाबेसमा ताला लगाउनाले सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो अभिरूचीमा परिवर्तन, आफ्नो ध्यानसूचीमा सम्पादन, र अन्य वस्तु जसको लागि डेटाबेसमा परिवर्तन गरें हुन्छ, त्यसबाट वन्चित हुनेछ। कृपया यो सुनिश्चित गर्नुहोस् कि तपाईं यो गर्न चाहनुहुन्छ, र तपाईं रक्षण पश्चात ताला खोल्नुहुन्छ ।",
        "movearticle": "पृष्ठ सार्नुहोस्",
        "moveuserpage-warning": "'''चेतावनी:''' तपाईंले प्रयोगकर्ता पृष्ठ सार्न आँट्नु भएकोछ। कृपया याद राख्नुहोस् पृष्ठ मात्र सारिने छ र प्रयोगकर्ताको अर्को नाम राख्न '''सकिंदैन'''।",
        "movecategorypage-warning": "<strong>चेतावनी:</strong> तपाईं एउटा श्रेणी पृष्ठलाई स्थानान्तरित गर्न जादै हुनुहुन्छ। याद राख्नुहोस् कि मात्रै यो पृष्ठ स्थानान्तरित हुनेछ र पुरानो श्रेणीमा सामेल पृष्ठ नयाँ श्रेणी अन्तर्गत <em>जाने</em> छैन।",
-       "movenologintext": "पृष्ठ सार्नको लागि तपाई दर्ता गरिएको र [[Special:UserLogin|प्रवेश गरेको]] प्रयोगकर्ता हुनुपर्छ ।",
+       "movenologintext": "पृष्ठ सार्नको लागि तपाई दर्ता गरिएको र [[Special:UserLogin|प्रवेश गरेको]] प्रयोगकर्ता हुनुपर्छ ।",
        "movenotallowed": "तपाईँलाई पृष्ठ सार्ने अनुमति छैन",
        "movenotallowedfile": "फाइल हटाउने अनुमति तपाईँलाई  छैन।",
        "cant-move-user-page": "तपाईसँग प्रयोगकर्ता पृष्ठहरू सार्न अनुमती छैन (सहपृष्ठहरू बाहेक)",
        "cant-move-to-user-page": "तपाईंलाई पृष्ठहरू प्रयोगकर्ता पृष्ठमा सार्न अनुमती छैन (प्रयोगकर्ता सहपृष्ठहरूमा बाहेक)",
-       "cant-move-category-page": "तपाईलाई श्रेणीको पृष्ठहरू सार्ने अनुमति छैन ।",
-       "cant-move-to-category-page": "कुनै श्रेणी पृष्ठमा सार्नको लागी तपाईलाई अनुमति छैन ।",
+       "cant-move-category-page": "तपाà¤\88à¤\82लाà¤\88 à¤¶à¥\8dरà¥\87णà¥\80à¤\95à¥\8b à¤ªà¥\83षà¥\8dठहरà¥\82 à¤¸à¤¾à¤°à¥\8dनà¥\87 à¤\85नà¥\81मति à¤\9bà¥\88न à¥¤",
+       "cant-move-to-category-page": "à¤\95à¥\81नà¥\88 à¤¶à¥\8dरà¥\87णà¥\80 à¤ªà¥\83षà¥\8dठमा à¤¸à¤¾à¤°à¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97à¥\80 à¤¤à¤ªà¤¾à¤\88à¤\82लाà¤\88 à¤\85नà¥\81मति à¤\9bà¥\88न à¥¤",
        "newtitle": "नयाँ शीर्षकमा :",
        "move-watch": "यो पृष्ठ निगरानीमा राख्नुहोस्",
        "movepagebtn": "पृष्ठ सार्नुहोस्",
        "movepage-moved-redirect": "अनुप्रेषित पृष्ठ सृजना गरियो।",
        "movepage-moved-noredirect": "रिडाइरेक्ट पृष",
        "articleexists": "यस नामको पृष्ठ पहिले देखि नै रहेको ,या तपाईँले छान्नु भएको नाम अमान्य छ।\nकृपया अर्कै नाम छान्नुहोस् ।",
-       "cantmove-titleprotected": "तपाà¤\88लà¥\87 यो स्थानमा पृष्ठ सार्न सक्नुहुन्न, किनकी यो नयाँ शिर्षकलाई सिर्जना हुनबाट जोगाइएको छ",
+       "cantmove-titleprotected": "तपाà¤\88à¤\82 यो स्थानमा पृष्ठ सार्न सक्नुहुन्न, किनकी यो नयाँ शिर्षकलाई सिर्जना हुनबाट जोगाइएको छ",
        "movetalk": "सम्बन्धित वार्ता पृष्ठ",
        "move-subpages": "सहायक पृष्ठहरू सार्ने($1 सम्मको)",
        "move-talk-subpages": "वार्तालाप पृष्ठको सह-पृष्ठहरू सार्ने($1 सम्मको )",
        "import-upload": "XML डेटा अपलोड गर्ने",
        "import-token-mismatch": "सत्र जानकारी नष्ट भयो\nकृपया पुन: प्रयास गर्नुहोस्।",
        "import-invalid-interwiki": "खुलाइएको विकिबाट आयात गर्न सकिएन",
-       "import-error-edit": "तपाईलाई सम्पादन गर्ने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
-       "import-error-create": "तपाà¤\88लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¬à¤¨à¤¾à¤\89नà¥\87 à¤\97रà¥\8dने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
+       "import-error-edit": "तपाà¤\88à¤\82लाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87 à¤\85नà¥\81मति à¤¨à¤­à¤\8fà¤\95à¥\8b à¤ªà¥\83षà¥\8dठ \"$1\" à¤\86यात à¤\97रिà¤\8fन à¥¤",
+       "import-error-create": "तपाà¤\88à¤\82लाà¤\88 à¤¨à¤¯à¤¾à¤\81 à¤¬à¤¨à¤¾à¤\89ने अनुमति नभएको पृष्ठ \"$1\" आयात गरिएन ।",
        "import-error-interwiki": "यसको नाम बाह्य लिङ्क (अन्तरविकि) को लागी जगेडा राखिएको हुँदा  पृष्ठ \"$1\" आयात गरिएन ।",
        "import-error-special": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यो एउटा यस्तो विशेष नामस्थान अन्तर्गत आउँछ जसमा पृष्ठ बनाउन सकिंदैन।",
        "import-error-invalid": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यसको आयात पश्चात जुन नाम हुन्थ्यो त्यो यस विकिमा मान्य छैन।",
        "javascripttest-pagetext-frameworks": "कृपया निम्न परीक्षण ढाँचाहरू मध्ये एउटा छान्नुहोस्: $1",
        "javascripttest-pagetext-skins": "परीक्षणको लागि खोल छान्नुहोस्:",
        "javascripttest-qunit-intro": "mediawiki.org मा [$1 जाँचको कागजात] हेर्नुहोस् ।",
-       "tooltip-pt-userpage": "तपाईको प्रयोगकर्ता पृष्ठ",
-       "tooltip-pt-anonuserpage": "तपाà¤\88लà¥\87 जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :",
-       "tooltip-pt-mytalk": "तपाईको वार्ता पृष्ठ",
+       "tooltip-pt-userpage": "तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठ",
+       "tooltip-pt-anonuserpage": "तपाà¤\88à¤\81 जुन IP ठेगानाको रुपमा सम्पादन गर्दै हुनुहुन्छ , त्यसको प्रयोगकर्ता पृष्ठ निम्न छ :",
+       "tooltip-pt-mytalk": "तपाà¤\88à¤\82à¤\95à¥\8b à¤µà¤¾à¤°à¥\8dता à¤ªà¥\83षà¥\8dठ",
        "tooltip-pt-anontalk": "यो IP ठेगानाबाट गरिएका सम्पादनका बारेमा बार्तालाप",
        "tooltip-pt-preferences": "तपाईंका अभिरुचिहरू",
        "tooltip-pt-watchlist": "पृष्ठहरूको सूची जसका परिवर्तनहरूलाई तपाईँले निगरानी गरिरहनु भएको छ",
-       "tooltip-pt-mycontris": "तपाà¤\88à¤\95à¥\8b à¤¯à¥\8bà¤\97दानको सूची",
+       "tooltip-pt-mycontris": "तपाà¤\88à¤\82à¤\95ा à¤¯à¥\8bà¤\97दानहरà¥\82को सूची",
        "tooltip-pt-login": "तपाईँलाई प्रवेशगर्न सुझाव दिइन्छ ; तर यो जरुरी भने छैन",
        "tooltip-pt-logout": "निर्गमन (लग आउट) गर्नुहोस्",
        "tooltip-pt-createaccount": "तपाईंलाई खाता बनाउन र लग इन गर्न हामि प्रोत्साहित गर्छौ; तथापि, यो अनिवार्य भने छैन।",
        "tooltip-ca-talk": "सामग्री पृष्ठबारेमा छलफल",
-       "tooltip-ca-edit": "तपाà¤\88à¤\81लà¥\87 à¤¯à¥\8b à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dन à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dà¤\9b à¥¤ à¤\95à¥\83पया à¤¸à¤\99à¥\8dà¤\97à¥\8dरह â\80\8dà¤\97रà¥\8dनà¥\81 à¤ªà¥\82रà¥\8dव à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤¬à¤\9fन à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\81हà¥\8bला à¥¤",
+       "tooltip-ca-edit": "यà¥\8b à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dनà¥\87",
        "tooltip-ca-addsection": "नयाँ खण्ड सुरु गर्नुहोस्",
        "tooltip-ca-viewsource": "यो पृष्ठ सुरक्षित गरिएको छ। यसको श्रोत हेर्न सक्नुहुन्छ।",
        "tooltip-ca-history": "यस पृष्ठको पहिलेका पुनरावलोकनहरु",
        "tooltip-p-logo": "मुख्य पृष्ठ",
        "tooltip-n-mainpage": "मुख्य पृष्ठमा जाने",
        "tooltip-n-mainpage-description": "मुख्य पृष्ठमा जानुहो्स्",
-       "tooltip-n-portal": "आयोजनाका बारेमा , तपाईँ के गर्न सक्नुहुन्छ , सामग्री कहाँ भेट्टाउने",
+       "tooltip-n-portal": "आयोजनाका बारेमा, तपाईँ के गर्न सक्नुहुन्छ, सामग्री कहाँ भेट्टाउने",
        "tooltip-n-currentevents": "हालैको घटनाको बारेमा पृष्ठभूमि जानकारी पत्ता लगाउनुहोस्",
        "tooltip-n-recentchanges": "विकिमा गरिएका हालैका परिवर्तनहरुको सूची",
        "tooltip-n-randompage": "जुन कुनै पृष्ठ खोल्ने",
        "tooltip-ca-nstab-main": "सामग्री पृष्ठ हेर्नुहोस",
        "tooltip-ca-nstab-user": "प्रयोगकर्ता पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-media": "मिडिया पृष्ठ हेर्नुहोस्",
-       "tooltip-ca-nstab-special": "यो विशेष पृष्ठ हो , तपाईँले आफै सम्पादन गर्न सक्नुहुन्न",
+       "tooltip-ca-nstab-special": "यो विशेष पृष्ठ हो, यो सम्पादन गर्न सकिदैन",
        "tooltip-ca-nstab-project": "आयोजान पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-image": "फाइल पृष्ठ हेर्नुहोस्",
        "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश हेर्नुहोस्",
        "spam_reverting": "$1 मा कडीहरू  नभएका पुरानो अवतरणमा पुनर्स्थापित गर्दै",
        "spam_blanking": "$1 का सबै अवतरणहरूमा कडीहरू  भेटिए, मेटाएर खालि गर्दै",
        "spam_deleting": "$1 भएको सम्पूर्ण संशोधन कडीहरू मेटाइदै",
-       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>नहीं</strong> भर्ने!",
+       "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयसलाई <strong>न</strong> भर्ने!",
        "pageinfo-title": " \"$1\"को लागि जाकारी",
        "pageinfo-not-current": "माफ गर्नुहोस्, यो जानकारी पूरानो संस्करणमा उपलब्ध गराउन असम्भव छ ।",
        "pageinfo-header-basic": "साधारण जानकारी",
        "rcpatroldisabledtext": "हालसालैका परिवर्तनहरू गस्ती गुण हालको लागि निश्कृय पारिएको छ ।",
        "markedaspatrollederror": "गस्ती गरिएको भनी चिनो लगाउन सकिएन ।",
        "markedaspatrollederrortext": "गस्ती गरिएको भनि चिनो लगाउनको निम्ती संस्करण खुलाउनु पर्छ ।",
-       "markedaspatrollederror-noautopatrol": "तपाà¤\88à¤\95à¥\8b à¤\86फà¥\8dनà¥\88 à¤¸à¤®à¥\8dपादनलाà¤\88 à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95à¥\8b à¤­à¤¨à¤¿ à¤\9aिनà¥\8b à¤²à¤\89न à¤ªà¤¾à¤\87दà¥\88न ।",
+       "markedaspatrollederror-noautopatrol": "तपाà¤\88à¤\82 à¤\86फà¥\8dनà¥\88 à¤¸à¤®à¥\8dपादनलाà¤\88 à¤\97सà¥\8dतà¥\80 à¤\97रिà¤\8fà¤\95à¥\8b à¤­à¤¨à¤¿ à¤\9aिनà¥\8b à¤²à¤\97ाà¤\89न à¤¸à¤\95à¥\8dनà¥\81हà¥\81नà¥\8dन ।",
        "markedaspatrollednotify": "$1 मा गरिएको यो परिवर्तनलाई गस्ति गरिएको चिन्ह लगाइएको छ ।",
        "markedaspatrollederrornotify": "गस्ती अङ्कित गर्न विफल।",
        "patrol-log-page": "निगरानीको लग",
        "filedelete-archive-read-only": "यस अभिलेख डाइरेक्टरी \"$1\"मा वेव सर्भरलाई लेख्न सक्दैन ।",
        "previousdiff": "← पुरानो सम्पादन",
        "nextdiff": "नयाँ सम्पादन →",
-       "mediawarning": "'''चेतावनी''': यो फाइलमा घातक कोडहरु पनि हुनसक्छन\nयसलाई सञ्चालन गरेर तपाईको प्रणालीमा नियन्त्रण गरिन सक्छ ।",
+       "mediawarning": "<storng>चेतावनी</storng>: यो फाइलमा घातक कोडहरू पनि हुनसक्छन\nयसलाई सञ्चालन गर्दा तपाईंको प्रणालीमा नियन्त्रण गरिन सक्छ ।",
        "imagemaxsize": "तस्विर आकार सिमा:<br />''(फाइल जानकारी पृष्ठको लागि )''",
        "thumbsize": "थम्बनेल आकार:",
        "widthheight": "$1 × $2",
        "namespacesall": "सबै",
        "monthsall": "सबै",
        "confirmemail": "इमेल ठेगाना पक्का गर्नुहोस्",
-       "confirmemail_noemail": "तपाईको प्रयोगकर्ता [[Special:Preferences|अभिरुचीमा]] मान्य इमेल ठेगाना राखीएको छैन ।",
+       "confirmemail_noemail": "तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता [[Special:Preferences|à¤\85भिरà¥\81à¤\9aà¥\80मा]] à¤®à¤¾à¤¨à¥\8dय à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤°à¤¾à¤\96à¥\80à¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤",
        "confirmemail_text": "{{SITENAME}} मा उपलब्ध इमेल सुविधाहरूको लाभ उठाउनका लागि प्रमाणित ठेगाना हुनु जरूरी छ।\nतपाईंको इमेल ठेगानामा एउटा निश्चित कोड पठाउनका लागि तल दिइएको बटनमा क्लिक गर्नुहोस।\nत्यस मेलमा एउटा कोडले भरिएको एउटा लिङ्क हुनेछ;\nतपाईंको इमेललाई प्रमाणिकरणका लागि यसलाई आफ्नो ब्राउजरआ खोल्नुहोला।",
-       "confirmemail_pending": "तपाà¤\88à¤\95à¥\8b à¤\87मà¥\87लमा à¤ªà¥\8dरपाणिà¤\95रण à¤\95à¥\8bड à¤ªà¤¹à¤¿à¤²à¥\87 à¤¨à¥\88 à¤ªà¤ à¤¾à¤\87 à¤¸à¤\95िà¤\8fà¤\95à¥\8b à¤\9b;\nयदि à¤¤à¤ªà¤¾à¤\88लà¥\87 à¤\85हिलà¥\87 à¤¨à¥\88 à¤\96ाता à¤\96à¥\8bलà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\8b à¤\95à¥\8bडà¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dतà¥\80 à¤ªà¥\81न: à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81 à¤\85à¤\97ि à¤\95à¥\8bड à¤¨à¤\86à¤\87पà¥\81à¤\97à¥\81नà¥\8dà¤\9cà¥\87ल à¤\95à¥\83पया à¤\95à¥\87हà¥\80 à¤¸à¤®à¤¯ à¤ªà¥\8dरतिà¤\95à¥\8dषा à¤\97रà¥\8dनà¥\81हà¥\8bस ।",
+       "confirmemail_pending": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87लमा à¤ªà¥\8dरपाणिà¤\95रण à¤\95à¥\8bड à¤ªà¤¹à¤¿à¤²à¥\87 à¤¨à¥\88 à¤ªà¤ à¤¾à¤\87 à¤¸à¤\95िà¤\8fà¤\95à¥\8b à¤\9b;\nयदि à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87 à¤\85हिलà¥\87 à¤¨à¥\88 à¤\96ाता à¤\96à¥\8bलà¥\8dनà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87 à¤\95à¥\8bडà¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dतà¥\80 à¤ªà¥\81न: à¤\85नà¥\81रà¥\8bध à¤\97रà¥\8dनà¥\81 à¤\85à¤\97ि à¤\95à¥\8bड à¤¨à¤\86à¤\87पà¥\81à¤\97à¥\81नà¥\8dà¤\9cà¥\87ल à¤\95à¥\83पया à¤\95à¥\87हà¥\80 à¤¸à¤®à¤¯ à¤ªà¥\8dरतिà¤\95à¥\8dषा à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d ।",
        "confirmemail_send": "एक यकिन कोड मेल गर्नुहोस",
        "confirmemail_sent": "यकिन इमेल पठाइयो ।",
-       "confirmemail_oncreate": "पà¥\8dरमाणिà¤\95रण à¤¤à¤ªà¤¾à¤\88à¤\95à¥\8b à¤\95à¥\8bड à¤\87मà¥\87ल à¤ à¥\87à¤\97ानामा à¤ªà¤ à¤¾à¤\87à¤\8fà¤\95à¥\8b à¤\9b à¥¤\nयस à¤\95à¥\8bड à¤ªà¥\8dरवà¥\87श à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\85तà¥\8dयवशà¥\8dयà¤\95 à¤\9bà¥\88न, à¤¤à¤° à¤¯à¤¸ à¤µà¤¿à¤\95िमा à¤\87मà¥\87ल à¤ à¥\87à¤\97ानामा à¤\86धारित à¤¸à¥\87वाहरà¥\81 उपभोग गर्न कोड उपलब्ध गराउनु पर्ने हुन्छ ।",
-       "confirmemail_sendfailed": "{{SITENAME}} à¤ªà¥\8dरमाणिà¤\95रण à¤\87मà¥\87ल à¤ªà¤ à¤¾à¤\89न à¤¸à¤\95िà¤\8fन।\nतपाà¤\88à¤\95à¥\8b à¤\87मà¥\87लमा à¤\85मानà¥\8dय à¤µà¤°à¥\8dणहरà¥\81 छन् कि जाँच गर्नुहोस् ।\n\nहुलाकीले दिएको त्रुटी सन्देश: $1",
+       "confirmemail_oncreate": "पà¥\8dरमाणिà¤\95रण à¤\95à¥\8bड à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ानामा à¤ªà¤ à¤¾à¤\87à¤\8fà¤\95à¥\8b à¤\9b à¥¤\nयà¥\8b à¤\95à¥\8bड à¤ªà¥\8dरवà¥\87श à¤\97रà¥\8dनà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\85तà¥\8dयवशà¥\8dयà¤\95 à¤\9bà¥\88न, à¤¤à¤° à¤¯à¤¸ à¤µà¤¿à¤\95िमा à¤\87मà¥\87ल à¤ à¥\87à¤\97ानामा à¤\86धारित à¤¸à¥\87वाहरà¥\82 उपभोग गर्न कोड उपलब्ध गराउनु पर्ने हुन्छ ।",
+       "confirmemail_sendfailed": "{{SITENAME}} à¤ªà¥\8dरमाणिà¤\95रण à¤\87मà¥\87ल à¤ªà¤ à¤¾à¤\89न à¤¸à¤\95िà¤\8fन।\nतपाà¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87लमा à¤\85मानà¥\8dय à¤µà¤°à¥\8dणहरà¥\82 छन् कि जाँच गर्नुहोस् ।\n\nहुलाकीले दिएको त्रुटी सन्देश: $1",
        "confirmemail_invalid": "अमान्य प्रमाणिकरण कोड ।\nकोडको मान्य अवधी समाप्त भएको हुनसक्छ ।",
-       "confirmemail_needlogin": "तपाईले आफ्नो इमेल प्रमाणिकरण गराउन $1 गर्नु पर्छ ।",
-       "confirmemail_success": "तपाà¤\88à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¥\8dरमाणिà¤\95रण à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b।\nतपाà¤\88 [[Special:UserLogin|प्रवेश गरी]] विकिको मजा लिन सक्नुहुन्छ ।",
-       "confirmemail_loggedin": "तपाà¤\88à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¥\8dरमाणित à¤­à¤¯à¥\8b।",
+       "confirmemail_needlogin": "तपाà¤\88à¤\82लà¥\87 à¤\86फà¥\8dनà¥\8b à¤\87मà¥\87ल à¤ªà¥\8dरमाणिà¤\95रण à¤\97राà¤\89न $1 à¤\97रà¥\8dनà¥\81 à¤ªà¤°à¥\8dà¤\9b à¥¤",
+       "confirmemail_success": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¥\8dरमाणिà¤\95रण à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b à¥¤\nà¤\85ब à¤¤à¤ªà¤¾à¤\88à¤\82 [[Special:UserLogin|प्रवेश गरी]] विकिको मजा लिन सक्नुहुन्छ ।",
+       "confirmemail_loggedin": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¥\8dरमाणित à¤­à¤\8fà¤\95à¥\8b à¤\9b।",
        "confirmemail_subject": "{{SITENAME}} ई मेलl ठेगानाको पुष्टि",
        "confirmemail_body": "कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट,\n{{SITENAME}}मा एउटा  खाता  \"$2\"को नाममा यस ई मेल ठेगानामा  पञ्जीकरण गरेकोछ।\n\nयो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु  सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्:\n\n$3 \n\nयदि त्यो खाता तपाईंले पञ्जीकरण गर्नु भएको *होइन* भनें, ई मेलको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
        "confirmemail_body_changed": "कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट,\n{{SITENAME}}मा \"$2\" नामको खाताको  ई मेल ठेगाना यस ठेगानामा  परिवर्तन गरेकोछ।\n\nयो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु  पुनः सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्:\n\n$3 \n\nयदि त्यो खाता तपाईंको *होइन* भनें, ई मेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
        "scarytranscludetoolong": "[URL अति लामो छ ]",
        "deletedwhileediting": "'''चेतावनी''': तपाईंले सम्पादन सुरु गरेपछि यो पृष्ठ मेटिएकोछ!",
        "confirmrecreate": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|वार्तालाप]])ले  तपाईंले  सम्पादन सुरु गरेपछि यो पृष्ठ मेटेकाछन् । कारण थियो:\n: ''$2''\nकृपया सुनिश्चित गर्नुहोस् कि तपाईं यो पृष्ठ साँच्चै निर्माण गर्न चाहनुहुन्छ।",
-       "confirmrecreate-noreason": "प्रयोगकर्ता [[User:$1|$1]] ले ([[User talk:$1|वार्तालाप ]])पृष्ठ तपाईले सम्पादन गर्न थाले पछि हटाइएका छन् । यो पृष्ठलाई पुन: सिर्जना गर्ने भए कृपया पुष्टि गर्नुहोस?",
+       "confirmrecreate-noreason": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|वार्तालाप ]])ले यो पृष्ठ तपाईं सम्पादन गर्न थाले पछि हटाएका छन् । यो पृष्ठलाई पुन: सिर्जना गर्ने भए कृपया पुष्टि गर्नुहोस् ।",
        "recreate": "पुनर्निर्माण",
        "unit-pixel": "पिक्सेल",
        "confirm_purge_button": "हुन्छ",
        "watchlistedit-raw-explain": "तपाईंको ध्यानसूचीमा सूचीबद्ध पृष्ठ तल दिइएको छ, र त्यसलाई सूचीबाट निकालेर वा बढाएर परिवर्तन गर्न सकिन्छ;\nप्रत्येक लाइनमा एक शीर्षक दिएर।\nजब पूर्ण भइसक्छ, अनि \"{{int:Watchlistedit-raw-submit}}\" मा क्लिक गर्नुहोस।\nतपाईं [[Special:EditWatchlist|स्तरीय सम्पादकको प्रयोग]] पनि गर्न सक्नुहुन्छ।",
        "watchlistedit-raw-titles": "शीर्षकहरू :",
        "watchlistedit-raw-submit": "निगरानी सूची अध्यावधि गर्ने",
-       "watchlistedit-raw-done": "तपाà¤\88à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81ची अद्यावधिक गरिएको छ।",
+       "watchlistedit-raw-done": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82ची अद्यावधिक गरिएको छ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} थपियो:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
        "watchlistedit-clear-title": "अवलोकन सूची खाली गरियो",
        "watchlistedit-clear-legend": "अवलोकन सूची खाली गर्ने",
-       "watchlistedit-clear-explain": "तपाà¤\88à¤\95à¥\8b à¤\85बलोकन सूचीबाट सम्पूर्ण शिर्षकहरू मेटाइदै",
+       "watchlistedit-clear-explain": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\85वलोकन सूचीबाट सम्पूर्ण शिर्षकहरू मेटाइदै",
        "watchlistedit-clear-titles": "शीर्षकहरू :",
        "watchlistedit-clear-submit": "अवलोकनबाट हटाउने (यो स्थायी हुन्छ!)",
-       "watchlistedit-clear-done": "तपाà¤\88à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81ची हटाइएको छ।",
+       "watchlistedit-clear-done": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82ची हटाइएको छ।",
        "watchlistedit-clear-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
        "watchlistedit-too-many": "यहाँ देखाउनका लागि अति धेरै पृष्ठहरू छन्",
        "watchlisttools-clear": "अवलोकन सूची खाली गर्ने",
        "hebrew-calendar-m10-gen": "तामुज",
        "hebrew-calendar-m11-gen": "अभ्",
        "hebrew-calendar-m12-gen": "एलल्",
-       "signature": "[[{{ns:user}}:$1|$2]]",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
        "timezone-utc": "युटिसी(UTC)",
        "duplicate-defaultsort": "'''चेतावनी:''' पूर्व निर्धारित छोटकरी \"$2\" ले पुरानो पूर्वनिर्धारित छोटकरी\"$1\"लाई विस्थापन गरेको छ ।",
        "duplicate-displaytitle": "<strong>चेतावनी:</strong> शीर्षक देखाउने \"$2\" पूर्व देखाइएको शीर्षक \"$1\" मा ओभररेड गरिंदै छ।",
        "tags-create-tag-name": "ट्याग नाम:",
        "tags-create-reason": "कारण:",
        "tags-create-submit": "सृजना गर्ने",
-       "tags-create-no-name": "तपाईले ट्याग नाम निर्दिष्ट गर्नु पर्ने हुन्छ ।",
+       "tags-create-no-name": "तपाà¤\88à¤\82लà¥\87 à¤\9fà¥\8dयाà¤\97 à¤¨à¤¾à¤® à¤¨à¤¿à¤°à¥\8dदिषà¥\8dà¤\9f à¤\97रà¥\8dनà¥\81 à¤ªà¤°à¥\8dनà¥\87 à¤¹à¥\81नà¥\8dà¤\9b à¥¤",
        "tags-create-invalid-chars": "ट्याग नामहरूमा कमा(<code>,</code>) वा अगाडी स्ल्यास हुनु हुँदैन। (<code>/</code>)",
        "tags-create-invalid-title-chars": "ट्याग नामहरूमा यस्तो क्यारेक्टर हुनुहुँदैन जुन पृष्ठको शीर्षकमा प्रयोग नहोस्।",
        "tags-create-already-exists": "ट्याग $1 पहिला देखि नै उपलब्ध ।",
        "tags-create-warnings-above": "निम्नलिखित {{PLURAL:$2|चेतावनी देखाइयो|चेतावनीहरू देखाइयो}} जब ट्याग \"$1\" बनाउने प्रयास गरिएको थियो:",
-       "tags-create-warnings-below": "à¤\9fà¥\8dयाà¤\97 à¤¬à¤¨à¤¾à¤\89दà¥\88, à¤\95à¥\87 à¤¤à¤ªà¤¾à¤\88 जारी राख्न चाहनु हुन्छ ?",
+       "tags-create-warnings-below": "à¤\95à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\82 à¤¯à¥\8b à¤\9fà¥\8dयाà¤\97 à¤¬à¤¨à¤¾à¤\89नà¥\87 à¤\95ाम जारी राख्न चाहनु हुन्छ ?",
        "tags-delete-title": "ट्याग मेट्नुहोस्",
-       "tags-delete-explanation-initial": "तपाà¤\88लà¥\87 à¤\9fà¥\8dयाà¤\97 \"$1\" à¤²à¤¾à¤\88 à¤¡à¤¾à¤\9fावà¥\87सबाà¤\9f à¤¹à¤\9fाà¤\89न à¤\96à¥\8bà¤\9cà¥\8dदà¥\88 à¤¹à¥\81नà¥\81 हुन्छ ।",
+       "tags-delete-explanation-initial": "तपाà¤\88à¤\82 à¤\9fà¥\8dयाà¤\97 \"$1\" à¤²à¤¾à¤\88 à¤¡à¤¾à¤\9fावà¥\87सबाà¤\9f à¤¹à¤\9fाà¤\89à¤\81दà¥\88 à¤¹à¥\81नà¥\81हुन्छ ।",
        "tags-delete-explanation-in-use": "ट्यागलाई {{PLURAL:$2|$2 संशोधन वा लग प्रविष्टि|सबै $2 संशोधन र/वा लग प्रविष्टिहरू}}बाट हटाइनेछ जहाँ अहिले त्यसको प्रयोग गरिंदै छ।",
        "tags-delete-explanation-warning": "यो क्रिया <strong>अपरिवर्तनीय</strong> हो र <strong>त्यसलाई परिवर्तन गर्न सकिंदैन</strong>, डेटाबेस प्रवन्धक पनि यसलाई केहि गर्न सक्दैनन्। विश्वासपूर्ण रूपले तपाईं तय गर्नुहोस् कि तपाईं यस ट्यागलाई हटाउन चाहनुहुन्छ।",
        "tags-delete-explanation-active": "<strong>ट्याग \"$1\" अहिले पनि सक्रिय छ, र यसको प्रयोग भविष्यमा पनि जारी रहनेछ।</strong> यसलाई रोकनका लागि, ती स्थानहरूमा जानुहोस जहाँ यस ट्यागको प्रयोग भइरहेको छ र त्यहाँ देखि यसलाई अक्षम गर्नुहोस।",
        "tags-delete-too-many-uses": "ट्याग \"$1\" को प्रयोग $2 सँग {{PLURAL:$2|संशोधन|संशोधनहरू}}भन्दा अधिक छ, जसको अर्थ यो छ कि त्यसलाई हटाउन सकिंदैन।",
        "tags-delete-warnings-after-delete": "ट्याग \"$1\" लाई सफलतापूर्वक हटाइयो, तर निम्नलिखित {{PLURAL:$2|चेतावनी|चेतावनीहरू}} देखियो:",
        "tags-activate-title": "ट्याग सक्रिय गर्नुहोस्",
-       "tags-activate-question": "तपाà¤\88लà¥\87 à¤\9fà¥\8dयाà¤\97 \"$1\" सक्रिय गर्न लाग्नु भएको छ ।",
+       "tags-activate-question": "तपाà¤\88à¤\82 à¤\9fà¥\8dयाà¤\97 \"$1\"लाà¤\88 सक्रिय गर्न लाग्नु भएको छ ।",
        "tags-activate-reason": "कारणः",
        "tags-activate-not-allowed": "ट्याग \"$1\" सक्रिय गर्न सम्भव छैन ।",
        "tags-activate-not-found": "ट्याग \"$1\" उपलब्ध छैन् ।",
        "tags-activate-submit": "सक्रिय",
        "tags-deactivate-title": "ट्याग निष्क्रिय गर्नुहोस्",
-       "tags-deactivate-question": "तपाà¤\88लà¥\87 à¤\9fà¥\8dयाà¤\97 \"$1\" निस्क्रिय गर्न लाग्नु भएको छ ।",
+       "tags-deactivate-question": "तपाà¤\88à¤\82 à¤\9fà¥\8dयाà¤\97 \"$1\" à¤²à¤¾à¤\88 निस्क्रिय गर्न लाग्नु भएको छ ।",
        "tags-deactivate-reason": "कारण:",
        "tags-deactivate-not-allowed": "ट्याग \"$1\" निस्क्रिय गर्न सम्भव छैन ।",
        "tags-deactivate-submit": "निष्क्रिय",
        "compare-rev1": "संशोधन 1",
        "compare-rev2": "संशोधन 2",
        "compare-submit": "दँजाउनुहोस्",
-       "compare-invalid-title": "तपाईले खुलाउनु भएको शिर्षक अमान्य छ।",
-       "compare-title-not-exists": "तपाईले खुलाउनु भएको शिर्षक उपलब्ध छैन ।",
-       "compare-revision-not-exists": "तपाईले खुलाउनु भएको संस्करण उपलब्ध छैन ।",
+       "compare-invalid-title": "तपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¶à¤¿à¤°à¥\8dषà¤\95 à¤\85मानà¥\8dय à¤\9b।",
+       "compare-title-not-exists": "तपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¶à¤¿à¤°à¥\8dषà¤\95 à¤\89पलबà¥\8dध à¤\9bà¥\88न à¥¤",
+       "compare-revision-not-exists": "तपाà¤\88à¤\81लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤¸à¤\82सà¥\8dà¤\95रण à¤\89पलबà¥\8dध à¤\9bà¥\88न à¥¤",
        "dberr-problems": "क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।",
        "dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
        "dberr-info": "(डेटाबेस सर्भर: $1 सँग सम्पर्क स्थापित गर्न सकिएन)",
        "dberr-info-hidden": "(डेटाबेसमा सम्पर्क स्थापना गर्न सकिएन)",
-       "dberr-usegoogle": "तपाà¤\88लà¥\87 अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
+       "dberr-usegoogle": "तपाà¤\88à¤\82 अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
        "dberr-outofdate": "कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।",
        "dberr-cachederror": "यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।",
-       "htmlform-invalid-input": "तपाà¤\88à¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤ªà¥\8dरविषà¥\8dठिमा सही छैनन्",
-       "htmlform-select-badoption": "तपाईले खुलाउनु भएको मान मान्य विकल्प हैन ।",
-       "htmlform-int-invalid": "तपाईले खुलाउनु भएको मान कुनै इन्टिजर हैन ।",
-       "htmlform-float-invalid": "तपाईले जनाउनु भएको मान कुनै संख्या हैन ।",
-       "htmlform-int-toolow": "तपाईले जनाउनु भएको मान न्युनतम $1 भन्दा कम भयो ।",
-       "htmlform-int-toohigh": "तपाईले जनाउनु भएको मान अधिकतम $1 भन्दा बढी भयो ।",
+       "htmlform-invalid-input": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤ªà¥\8dरविषà¥\8dठिहरà¥\82 सही छैनन्",
+       "htmlform-select-badoption": "तपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤®à¤¾à¤¨ à¤®à¤¾à¤¨à¥\8dय à¤µà¤¿à¤\95लà¥\8dप à¤¹à¥\88न à¥¤",
+       "htmlform-int-invalid": "तपाà¤\88à¤\82लà¥\87 à¤\96à¥\81लाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤®à¤¾à¤¨ à¤\95à¥\81नà¥\88 à¤\87नà¥\8dà¤\9fिà¤\9cर à¤¹à¥\88न à¥¤",
+       "htmlform-float-invalid": "तपाà¤\88à¤\81लà¥\87 à¤\9cनाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤®à¤¾à¤¨ à¤\95à¥\81नà¥\88 à¤¸à¤\82à¤\96à¥\8dया à¤¹à¥\88न à¥¤",
+       "htmlform-int-toolow": "तपाà¤\88à¤\82लà¥\87 à¤\9cनाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤®à¤¾à¤¨ à¤¨à¥\8dयà¥\81नतम $1 à¤­à¤¨à¥\8dदा à¤\95म à¤­à¤¯à¥\8b à¥¤",
+       "htmlform-int-toohigh": "तपाà¤\88à¤\82लà¥\87 à¤\9cनाà¤\89नà¥\81 à¤­à¤\8fà¤\95à¥\8b à¤®à¤¾à¤¨ à¤\85धिà¤\95तम $1 à¤­à¤¨à¥\8dदा à¤¬à¤¢à¥\80 à¤­à¤¯à¥\8b à¥¤",
        "htmlform-required": "यसको मूल्य(value) चाहिन्छ",
        "htmlform-submit": "बुझाउने",
        "htmlform-reset": "परिवर्तनहरू परित्याग गर्नुहोस्",
        "expand_templates_generate_xml": "एक्सएमएल पार्स रूख देखाउने",
        "expand_templates_generate_rawhtml": "सुद्ध HTML देखाउने",
        "expand_templates_preview": "पूर्वावलोकन",
-       "expand_templates_preview_fail_html": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तपाई लग इन गर्नुभएको छैन, पूर्वावलोकन लुकाइएको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्न सकियोस।</em>\n\n<strong>यदि यो मान्य पूर्ववावलोकन प्रयास हो, भने पुन प्रयास गर्नुहोस।</strong>\nयदि यसले कार्य पूर्ण भएन भने [[Special:UserLogout|लग आउट गरेर]] फेरी लग इन गर्नुहोला।",
-       "expand_templates_preview_fail_html_anon": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तपाई लग इन गर्नुभएको छैन, पूर्वावलोकन लुकाइएको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्न सकियोस।</em>\n\n<strong>यदि यो मान्य पूर्वावलोकन प्रयास हो भने कृपया [[Special:UserLogin|लग इन गरेर]] पुन प्रयास गर्नुहोला।</strong>",
+       "expand_templates_preview_fail_html": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तपाईंले लग इन गर्नुभएको छैन, पूर्वावलोकन लुकाइएको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्न सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्ववावलोकन प्रयास हो, भने पुन प्रयास गर्नुहोस् ।</strong>\nयदि यसले कार्य पूर्ण भएन भने [[Special:UserLogout|लग आउट गरेर]] फेरी लग इन गर्नुहोला ।",
+       "expand_templates_preview_fail_html_anon": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तपाईंले लग इन गर्नुभएको छैन, पूर्वावलोकन लुकाइएको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्न सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्वावलोकन प्रयास हो भने कृपया [[Special:UserLogin|लग इन गरेर]] पुन प्रयास गर्नुहोला।</strong>",
        "pagelanguage": "पृष्ठ भाषा छान्ने",
        "pagelang-name": "पृष्ठ",
        "pagelang-language": "भाषा",
index bd4fce5..d0d78a1 100644 (file)
@@ -68,7 +68,8 @@
                        "Robin0van0der0vliet",
                        "Kthoelen",
                        "Mbch331",
-                       "Esketti"
+                       "Esketti",
+                       "M!dgard"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "tog-prefershttps": "Altijd een beveiligde verbinding gebruiken wanneer u bent aangemeld",
        "underline-always": "Altijd",
        "underline-never": "Nooit",
-       "underline-default": "Standaard gedrag van vormgeving of webbrowser",
+       "underline-default": "Standaardgedrag van vormgeving of webbrowser",
        "editfont-style": "Lettertypestijl bewerkingsvenster:",
        "editfont-default": "Webbrowser-standaard",
        "editfont-monospace": "Monospaced lettertype",
        "delete": "Verwijderen",
        "deletethispage": "Deze pagina verwijderen",
        "undeletethispage": "Pagina terugplaatsen",
-       "undelete_short": "$1 {{PLURAL:$1|bewerking|bewerkingen}} terugplaatsen",
+       "undelete_short": "{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugplaatsen",
        "viewdeleted_short": "{{PLURAL:$1|Eén geschrapte bewerking |$1 geschrapte bewerkingen}} bekijken",
        "protect": "Beveiligen",
        "protect_change": "wijzigen",
        "versionrequiredtext": "Versie $1 van MediaWiki is vereist om deze pagina te gebruiken.\nMeer informatie is beschikbaar op de pagina [[Special:Version|softwareversie]].",
        "ok": "OK",
        "retrievedfrom": "Overgenomen van \"$1\"",
-       "youhavenewmessages": "U hebt $1 ($2).",
-       "youhavenewmessagesfromusers": "U heeft $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|U hebt|Jullie hebben}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|U hebt|Jullie hebben}} $1 van {{PLURAL:$3|een andere gebruiker|$3 gebruikers}} ($2).",
        "youhavenewmessagesmanyusers": "U heeft $1 van een groot aantal gebruikers ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|een nieuw bericht|999=nieuwe berichten}}",
        "newmessagesdifflinkplural": "laatste {{PLURAL:$1|wijziging|999=wijzigingen}}",
        "databaseerror-query": "Zoekopdracht: $1",
        "databaseerror-function": "Functie: $1",
        "databaseerror-error": "Fout: $1",
-       "laggedslavemode": "'''Waarschuwing:''' in deze pagina zijn recente wijzigingen mogelijk nog niet verwerkt.",
+       "laggedslavemode": "<strong>Waarschuwing:</strong> 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",
        "readonlytext": "De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud. Na afronding wordt de functionaliteit hersteld.\n\nDe beheerder heeft de volgende reden opgegeven: $1",
        "title-invalid-characters": "De opgevraagde paginanaam bevat ongeldige tekens: \"$1\".",
        "title-invalid-relative": "De paginanaam bevat een relatief pad. Relatieve paginanamen (\"./\", \"../\") zijn ongeldig omdat ze vaak onbereikbaar zijn als de browser van een gebruiker ze toepast.",
        "title-invalid-magic-tilde": "De opgevraagde paginanaam bevat een ongeldige volgorde van magische tildes (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "De opgevraagde paginanaam is te lang. Deze mag niet langer zijn dan {{PLURAL:$1|$1 bytes}} in UTF-8-codering.",
+       "title-invalid-too-long": "De opgevraagde paginanaam is te lang. Deze mag niet langer zijn dan $1 {{PLURAL:$1|byte|bytes}} in UTF-8-codering.",
        "title-invalid-leading-colon": "De opgevraagde paginanaam bevat een ongeldige dubbele punt aan het begin.",
        "perfcached": "Deze gegevens komen uit een cache en zijn mogelijk niet actueel. Er {{PLURAL:$1|is maximaal één resultaat|zijn maximaal $1 resultaten}} beschikbaar in de cache.",
        "perfcachedts": "Deze gegevens komen uit een cache die voor het laatst is bijgewerkt op $2 om $3. Er {{PLURAL:$4|is maximaal één resultaat|zijn maximaal $4 resultaten}} beschikbaar in de cache.",
-       "querypage-no-updates": "Deze pagina wordt niet bijgewerkt.\nGegevens op deze pagina worden niet ververst.",
+       "querypage-no-updates": "Het bijwerken van deze pagina is momenteel uitgeschakeld.\nGegevens op deze pagina worden niet ververst.",
        "viewsource": "Brontekst bekijken",
        "viewsource-title": "Brontekst bekijken van $1",
        "actionthrottled": "Handeling tegengehouden",
        "actionthrottledtext": "Als maatregel tegen spam is het aantal keren per tijdseenheid dat u deze handeling kunt verrichten beperkt.\nDe limiet is overschreden.\nProbeer het over een aantal minuten opnieuw.",
        "protectedpagetext": "Deze pagina is beveiligd. Bewerken of andere handelingen zijn niet mogelijk.",
-       "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren:",
-       "viewyourtext": "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
+       "viewsourcetext": "U kunt de brontekst van deze pagina bekijken en kopiëren.",
+       "viewyourtext": "U kunt <strong>uw bewerkingen</strong> aan de brontekst van deze pagina bekijken en kopiëren.",
        "protectedinterface": "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
        "editinginterface": "<strong>Waarschuwing:</strong> u bewerkt een pagina die interfacetekst voor de software bevat.\nBewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.\nGebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen toe te voegen of te wijzigen voor alle wiki's.",
        "translateinterface": "Om vertalingen voor alle wiki's toe te voegen of te wijzigen kunt u gebruik maken van [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
-       "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
-       "namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte '''$1''' te bewerken.",
+       "cascadeprotected": "Deze pagina kan niet bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:\n$2",
+       "namespaceprotected": "U hebt geen rechten om pagina's in de naamruimte <strong>$1</strong> te bewerken.",
        "customcssprotected": "U kunt deze CSS-pagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "customjsprotected": "U kunt deze JavaScriptpagina niet bewerken, omdat die persoonlijke instellingen van een andere gebruiker bevat.",
        "mycustomcssprotected": "U hebt geen rechten om deze CSS-pagina te bewerken.",
        "myprivateinfoprotected": "U hebt geen rechten om uw privégegevens te bewerken.",
        "mypreferencesprotected": "U hebt geen rechten om uw voorkeuren aan te passen.",
        "ns-specialprotected": "Pagina's in de naamruimte \"{{ns:special}}\" kunnen niet bewerkt worden.",
-       "titleprotected": "Het aanmaken van deze pagina is beveiligd door [[User:$1|$1]].\nDe gegeven reden is ''$2''.",
+       "titleprotected": "Het aanmaken van deze pagina is beveiligd door [[User:$1|$1]].\nDe gegeven reden is \"<em>$2</em>\".",
        "filereadonlyerror": "Het was niet mogelijk het bestand \"$1\" aan te passen omdat de bestandsrepository \"$2\" op dit moment alleen-lezen is.\n\nDe opgegeven reden is \"''$3''\".",
        "invalidtitle-knownnamespace": "Ongeldige titel met naamruimte \"$2\" en tekst \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel met onbekend naamruimtenummer $1 en tekst \"$2\"",
        "exception-nologin": "Niet aangemeld",
        "exception-nologin-text": "Meld u aan om deze pagina te bekijken of deze handeling uit te voeren.",
        "exception-nologin-text-manual": "U moet $1 om deze pagina te kunnen bekijken of de handeling uit te voeren.",
-       "virus-badscanner": "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
+       "virus-badscanner": "Onjuiste configuratie: Onbekende virusscanner: <em>$1</em>.",
        "virus-scanfailed": "scannen is mislukt (code $1)",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
-       "logouttext": "'''U bent nu afgemeld.'''\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
+       "logouttext": "<strong>U bent nu afgemeld.</strong>\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
        "welcomeuser": "Welkom, $1!",
        "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "createacct-yourpassword-ph": "Geef een wachtwoord op",
        "yourpasswordagain": "Geef uw wachtwoord opnieuw in:",
        "createacct-yourpasswordagain": "Bevestig wachtwoord",
-       "createacct-yourpasswordagain-ph": "Geef het wachtwoord opnieuw op",
+       "createacct-yourpasswordagain-ph": "Geef het wachtwoord opnieuw in",
        "remembermypassword": "Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})",
        "userlogin-remembermypassword": "Aangemeld blijven",
        "userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
        "userlogin-resetpassword-link": "Wachtwoord vergeten?",
        "userlogin-helplink2": "Hulp bij aanmelden",
        "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
-       "userlogin-createanother": "Een andere gebruiker aanmaken",
+       "userlogin-createanother": "Een andere gebruiker registreren",
        "createacct-emailrequired": "E-mailadres",
        "createacct-emailoptional": "E-mailadres (optioneel)",
        "createacct-email-ph": "Geef uw e-mailadres op",
        "createacct-reason-ph": "Waarom u een andere gebruiker aanmaakt",
        "createacct-captcha": "Veiligheidscontrole",
        "createacct-imgcaptcha-ph": "Geef de tekst in die u hierboven ziet",
-       "createacct-submit": "Gebruiker aanmaken",
+       "createacct-submit": "Gebruiker registreren",
        "createacct-another-submit": "Gebruiker aanmaken",
        "createacct-benefit-heading": "{{SITENAME}} wordt gemaakt door mensen zoals u.",
        "createacct-benefit-body1": "bewerking{{PLURAL:$1||en}}",
        "createacct-benefit-body2": "pagina{{PLURAL:$1||'s}}",
        "createacct-benefit-body3": "recente bijdrager{{PLURAL:$1||s}}",
        "badretype": "De ingevoerde wachtwoorden verschillen van elkaar.",
+       "usernameinprogress": "Het aanmaken van een gebruiker met die naam is al bezig.\nGelieve te wachten.",
        "userexists": "De gekozen gebruikersnaam is al in gebruik.\nKies een andere naam.",
        "loginerror": "Aanmeldfout",
        "createacct-error": "Fout tijdens aanmaken gebruiker",
        "createaccounterror": "Het was niet mogelijk de gebruiker aan te maken: $1",
        "nocookiesnew": "De gebruiker is geregistreerd, maar niet aangemeld.\n{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nSchakel die in en meld daarna aan met uw nieuwe gebruikersnaam en wachtwoord.",
-       "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in uw browser.\nSchakel deze optie aan en probeer het opnieuw.",
+       "nocookieslogin": "{{SITENAME}} gebruikt cookies voor het aanmelden van gebruikers.\nCookies zijn uitgeschakeld in uw browser.\nSchakel deze optie in en probeer het opnieuw.",
        "nocookiesfornew": "De gebruiker is niet gemaakt omdat de bron niet bevestigd kon worden.\nZorg ervoor dat u cookies hebt ingeschakeld, herlaad deze pagina en probeer het opnieuw.",
        "noname": "U hebt geen geldige gebruikersnaam opgegeven.",
        "loginsuccesstitle": "Aanmelden geslaagd",
-       "loginsuccess": "'''U bent nu aangemeld bij {{SITENAME}} als \"$1\".'''",
-       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|maak een nieuw gebruiker aan]].",
+       "loginsuccess": "<strong>U bent nu aangemeld bij {{SITENAME}} als \"$1\".</strong>",
+       "nosuchuser": "De gebruiker \"$1\" bestaat niet.\nGebruikersnamen zijn hoofdlettergevoelig.\nControleer de schrijfwijze of [[Special:UserLogin/signup|registreer een nieuw gebruiker]].",
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
        "showpreview": "Bewerking ter controle bekijken",
        "showdiff": "Wijzigingen bekijken",
        "blankarticle": "<strong>Waarschuwing:</strong> de pagina die u wilt aanmaken is leeg.\nAls u opnieuw op \"{{int:savearticle}}\" klikt, wordt de pagina aangemaakt zonder enige inhoud.",
-       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
+       "anoneditwarning": "<strong>Waarschuwing:</strong> u bent niet aangemeld.\nUw IP-adres wordt opgeslagen als u wijzigingen op deze pagina maakt. Wanneer u <strong>[$1 aanmeldt]</strong> of <strong>[$2 een gebruiker aanmaakt]</strong> verschijnen uw bewerkingen onder uw gebruikersnaam, naast andere voordelen.",
        "anonpreviewwarning": "''U bent niet aangemeld.''\n''Door uw bewerking op te slaan wordt uw IP-adres opgeslagen in de paginageschiedenis.''",
        "missingsummary": "'''Let op:''' u hebt geen bewerkingssamenvatting opgegeven.\nAls u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
        "selfredirect": "<strong>Waarschuwing:</strong>U heeft een doorverwijzing gemaakt naar dezelfde pagina. Mogelijk heeft u de verkeerde bestemming voor de doorverwijzing gebruikt, of bewerkt u de verkeerde pagina. Door alsnog op \"{{int:savearticle}}\" te klikken word de doorverwijzing alsnog aangemaakt.",
        "session_fail_preview_html": "'''Uw bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.'''\n\n''Omdat in {{SITENAME}} ruwe HTML is ingeschakeld, is een voorvertoning niet mogelijk als bescherming tegen aanvallen met JavaScript.''\n\n'''Als dit een legitieme bewerking is, probeer het dan opnieuw.'''\nAls het dan nog niet lukt, [[Special:UserLogout|meld uzelf dan af]] en vervolgens weer aan.",
        "token_suffix_mismatch": "'''Uw bewerking is geweigerd, omdat uw browser de leestekens in het bewerkingstoken onjuist heeft behandeld.'''\nDe bewerking is geweigerd om verminking van de paginatekst te voorkomen.\nDit gebeurt soms als er een webgebaseerde proxydienst wordt gebruikt die fouten bevat.",
        "edit_form_incomplete": "'''Sommige onderdelen van het bewerkingsformulier hebben de server niet bereikt. Controleer of uw bewerkingen intact zijn en probeer het opnieuw.'''",
-       "editing": "Bezig met bewerken van $1",
+       "editing": "Bewerken van $1",
        "creating": "Bezig met het aanmaken van $1",
        "editingsection": "Bezig met bewerken van $1 (deelpagina)",
        "editingcomment": "Bezig met bewerken van $1 (nieuw kopje)",
-       "editconflict": "Uw wijzigingen konden niet opgeslagen worden vanwege een bewerkingsconflict. Wilt {{GENDER:|u}} het conflict handmatig oplossen?",
+       "editconflict": "Bewerkingsconflict: $1",
        "explainconflict": "Een andere gebruiker heeft deze pagina bewerkt sinds u met uw bewerking bent begonnen.\nIn het bovenste deel van het venster staat de tekst van de huidige pagina.\nUw bewerking staat in het onderste gedeelte.\nU dient uw bewerkingen in te voegen in de bestaande tekst.\n'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als u op \"{{int:savearticle}}\" klikt.",
        "yourtext": "Uw tekst",
        "storedversion": "Opgeslagen versie",
        "yourdiff": "Wijzigingen",
        "copyrightwarning": "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de $2 (zie $1 voor details).\nAls u niet wilt dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />\nHierbij belooft u ons tevens dat u deze tekst zelf hebt geschreven of overgenomen uit een vrije, openbare bron.<br />\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij u daarvoor toestemming hebt!'''",
        "copyrightwarning2": "Al uw bijdragen aan {{SITENAME}} kunnen bewerkt, gewijzigd of verwijderd worden door andere gebruikers.\nAls u niet wilt dat uw teksten rigoureus aangepast worden door anderen, plaats ze hier dan niet.<br />\nU belooft ook dat u de oorspronkelijke auteur bent van dit materiaal of dat u het hebt gekopieerd uit een bron in het publieke domein of een soortgelijke vrije bron (zie $1 voor details).\n'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij u daarvoor toestemming hebt!'''",
+       "editpage-cannot-use-custom-model": "Het inhoudsmodel van deze pagina kan niet worden veranderd.",
        "longpageerror": "'''Fout: de tekst die u hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''\nOpslaan is niet mogelijk.",
        "readonlywarning": "'''Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''\nHet is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.\n\nEen beheerder heeft de database geblokkeerd om de volgende reden: $1",
        "protectedpagewarning": "'''Waarschuwing: deze beveiligde pagina kan alleen door gebruikers met beheerdersrechten bewerkt worden.'''\nDe laatste logboekregel staat hieronder:",
        "semiprotectedpagewarning": "'''Let op:''' deze pagina is beveiligd en kan alleen door geregistreerde gebruikers bewerkt worden.\nDe laatste logboekregel staat hieronder:",
-       "cascadeprotectedwarning": "'''Waarschuwing:''' deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat deze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
+       "cascadeprotectedwarning": "<strong>Waarschuwing:</strong> deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
        "titleprotectedwarning": "'''Waarschuwing: Deze pagina is beveiligd. Er zijn [[Special:ListGroupRights|speciale rechten]] nodig om de pagina aan te kunnen maken.'''\nDe laatste logboekregel staat hieronder:",
        "templatesused": "Op deze pagina {{PLURAL:$1|gebruikt sjabloon|gebruikte sjablonen}}:",
        "templatesusedpreview": "{{PLURAL:$1|Sjabloon|Sjablonen}} gebruikt in deze voorvertoning:",
        "search-category": "(categorie $1)",
        "search-file-match": "(komt overeen met de inhoud van het bestand)",
        "search-suggest": "Bedoelde u: $1",
+       "search-rewritten": "Resultaten voor $1 getoond. Zoek in plaats daarvan naar $2.",
        "search-interwiki-caption": "Zusterprojecten",
        "search-interwiki-default": "Resultaten van $1:",
        "search-interwiki-more": "(meer)",
        "badsig": "Ongeldige ondertekening; controleer de HTML-tags.",
        "badsiglength": "Uw ondertekening is te lang.\nDeze moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten.",
        "yourgender": "Hoe wilt u beschreven worden?",
-       "gender-unknown": "Ik wil dit niet opgeven",
+       "gender-unknown": "De software zal waar mogelijk geslachtsneutrale woorden gebruiken als het over jou gaat",
        "gender-male": "Hij bewerkt pagina's",
        "gender-female": "Zij bewerkt pagina's",
        "prefs-help-gender": "Deze voorkeur instellen is optioneel.\n\nDe software gebruikt deze waarde om u aan te spreken en u te vermelden aan andere gebruikers door middel van het juiste grammaticale geslacht.\n\nDeze informatie is openbaar en zichtbaar voor andere gebruikers.",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|keer|keer}} op een volglijst]",
-       "rc_categories": "Beperken tot categorieën (scheiden met een \"|\")",
-       "rc_categories_any": "Elke",
+       "rc_categories": "Beperken tot categorieën (scheiden met een \"|\"):",
+       "rc_categories_any": "Een van de aangeduide",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} na de wijziging",
        "newsectionsummary": "/* $1 */ nieuwe subkop",
        "rc-enhanced-expand": "Details weergeven",
        "uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld.",
        "php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
        "uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
-       "upload-scripted-pi-callback": "Kan niet een bestand met de xml-stylesheet uploaden.",
-       "uploaded-script-svg": "Gevonden scriptable element \"$1\" in het geüploade SVG-bestand.",
-       "uploaded-hostile-svg": "Gevonden onveilige CSS in de stijl element van het geüploade SVG-bestand .",
+       "upload-scripted-pi-callback": "Het uploaden van een bestand met instructies voor de verwerking van XML-stijlbladen is niet mogelijk.",
+       "uploaded-script-svg": "Scriptable element \"$1\" in het geüploade SVG-bestand gevonden.",
+       "uploaded-hostile-svg": "Onveilige CSS in het \"style\"-element van het geüploade SVG-bestand gevonden.",
        "uploaded-event-handler-on-svg": "Het instellen van de event-handler attributen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
-       "uploaded-href-attribute-svg": "Href kenmerken <code><$1 $2=\"$3\"></code> met niet-lokale doel (bijv. http:// javascript:, enz.) zijn niet toegestaan in SVG-bestanden.",
-       "uploaded-href-unsafe-target-svg": "Gevonden href tot onveilige doel <code><$1 $2=\"$3\"></code> in het geüploade SVG-bestand .",
-       "uploaded-animate-svg": "Gevonden \"animeren\" tag die kan veranderen href behulp van de \"uit\" - attribuut <code><$1 $2=\"$3\"></code> in het geüploade svg-bestand.",
-       "uploaded-setting-event-handler-svg": "Het instellen van de event-handler attributen is geblokkeerd, gevonden <code><$1 $2=\"$3\"></code> in het geüploade SVG-bestand.",
+       "uploaded-href-attribute-svg": "href-attributen <code>&lt;$1 $2=\"$3\"&gt;</code> met niet-lokaal doel (bv. http://, javascript:, enz.) zijn niet toegestaan in SVG-bestanden.",
+       "uploaded-href-unsafe-target-svg": "href met onveilig doel <code>&lt;$1 $2=\"$3\"&gt;</code> in het geüploade SVG-bestand gevonden.",
+       "uploaded-animate-svg": "\"animate\"-tag gevonden in het geüploade svg-bestand die href zou kunnen veranderen, met behulp van het \"from\"-attribuut <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-event-handler-svg": "Het instellen van de event-handler-attributen is geblokkeerd, <code>&lt;$1 $2=\"$3\"&gt;</code> gevonden in het geüploade SVG-bestand.",
        "uploaded-setting-href-svg": "Met behulp van de \"set\" tag toevoegen \"href\" attribuut te bovenliggende element is geblokkeerd.",
        "uploaded-wrong-setting-svg": "Met behulp van de \"set\" tag toevoegen van een afstandsbediening/data/script doel aan een kenmerk is geblokkeerd. Gevonden <code><set=\"$1\"></code> in het geüploade SVG-bestand.",
        "uploaded-setting-handler-svg": "SVG-dat stelt de \"handler\" attribuut met afstandsbediening/data/script geblokkeerd. Gevonden <code>$1=\"$2\"</code> in de SVG-bestand geüpload.",
        "upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
        "upload-http-error": "Er is een HTTP-fout opgetreden: $1",
        "upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
-       "backend-fail-stream": "Het was niet mogelijk het bestand $1 te streamen.",
+       "upload-dialog-title": "Bestand uploaden",
+       "upload-dialog-error": "Er is een fout opgetreden",
+       "upload-dialog-warning": "Een waarschuwing is opgetreden",
+       "upload-dialog-button-cancel": "Annuleren",
+       "upload-dialog-button-done": "Afgerond",
+       "upload-dialog-button-save": "Opslaan",
+       "upload-dialog-button-upload": "Upload",
+       "upload-dialog-label-select-file": "Selecteer bestand",
+       "upload-dialog-label-infoform-title": "Details",
+       "upload-dialog-label-infoform-name": "Naam",
+       "upload-dialog-label-infoform-description": "Beschrijving",
+       "upload-dialog-label-usage-title": "Gebruik",
+       "upload-dialog-label-usage-filename": "Bestandsnaam",
+       "backend-fail-stream": "Het was niet mogelijk het bestand \"$1\" te streamen.",
        "backend-fail-backup": "Het was niet mogelijk een reservekopie van het bestand $1 te maken.",
        "backend-fail-notexists": "Het bestand $1 bestaat niet.",
        "backend-fail-hashes": "Het was niet mogelijk de hashes voor het bestand op te halen om ze te vergelijken.",
        "unusedimages": "Ongebruikte bestanden",
        "wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
        "wantedpages": "Niet-bestaande pagina's met koppelingen",
-       "wantedpages-summary": "Lijst van niet-bestaande pagina 's met de meeste schakels naar hen, met uitsluiting van pagina' s die slechts omleidingen linken naar hen. Voor een lijst van niet-bestaande pagina ' s die omleidingen linken naar hen, zie [[{{#special:BrokenRedirects}}|de lijst van gebroken redirects]].",
+       "wantedpages-summary": "Lijst van niet-bestaande pagina's met de meeste koppelingen naar hen, met uitsluiting van pagina's waarheen enkel doorverwijzingen linken. Voor een lijst van niet-bestaande pagina's waar doorverwijzingen naar linken, zie [[{{#special:BrokenRedirects}}|de lijst van gebroken doorverwijzingen]].",
        "wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
        "wantedfiles": "Niet-bestaande bestanden met koppelingen",
        "wantedfiletext-cat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>. Pagina's die niet-bestaande bestanden insluiten staan op de pagina [[:$1]].",
        "linksearch-pat": "Zoekpatroon:",
        "linksearch-ns": "Naamruimte:",
        "linksearch-ok": "Zoeken",
-       "linksearch-text": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
+       "linksearch-text": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: $1 (wordt \"http://\" als er geen protocol wordt opgegeven).",
        "linksearch-line": "$1 heeft een koppeling in $2",
        "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
        "listusersfrom": "Gebruikers bekijken vanaf:",
        "emailuser": "Deze gebruiker e-mailen",
        "emailuser-title-target": "Deze {{GENDER:$1|gebruiker}} e-mailen",
        "emailuser-title-notarget": "Gebruiker e-mailen",
-       "emailpage": "Gebruiker e-mailen",
        "emailpagetext": "Via dit formulier kunt u een e-mail aan {{GENDER:$1|deze gebruiker}} verzenden.\nHet e-mailadres dat u hebt opgegeven bij [[Special:Preferences|uw voorkeuren]] wordt als afzender gebruikt.\nDe ontvanger kan dus direct naar u reageren.",
        "defemailsubject": "E-mail van {{SITENAME}}-gebruiker \"$1\"",
        "usermaildisabled": "Gebruikerse-mail uitgeschakeld",
        "emailccsubject": "Kopie van uw bericht aan $1: $2",
        "emailsent": "E-mail verzonden",
        "emailsenttext": "Uw e-mail is verzonden.",
-       "emailuserfooter": "Deze e-mail is verstuurd door $1 aan $2 door de functie \"{{int:emailpage}}\" van {{SITENAME}}.",
+       "emailuserfooter": "Deze e-mail is verstuurd door $1 aan $2 door de functie \"{{int:emailuser}}\" van {{SITENAME}}.",
        "usermessage-summary": "Systeembericht achtergelaten",
        "usermessage-editor": "Systeembericht",
        "watchlist": "Volglijst",
        "rollback-success": "De wijzigingen door $1 zijn teruggedraaid.\nDe laatste versie van $2 is hersteld.",
        "sessionfailure-title": "Sessiefout",
        "sessionfailure": "Er lijkt een probleem te zijn met uw aanmeldsessie.\nUw handeling is gestopt uit voorzorg tegen een beveiligingsrisico (dat bestaat uit mogelijke \"hijacking\" van deze sessie).\nGa een pagina terug, laad die pagina opnieuw en probeer het nog eens.",
+       "changecontentmodel": "Inhoudsmodel van pagina bewerken",
+       "changecontentmodel-legend": "Inhoudsmodel veranderen",
+       "changecontentmodel-title-label": "Paginatitel",
+       "changecontentmodel-model-label": "Nieuw inhoudsmodel",
+       "changecontentmodel-reason-label": "Reden:",
+       "changecontentmodel-success-title": "Het inhoudsmodel is veranderd",
+       "changecontentmodel-success-text": "Het inhoudstype van [[:$1]] is veranderd.",
+       "changecontentmodel-cannot-convert": "De inhoud van [[:$1]] kan niet worden omgezet in een type $2.",
+       "changecontentmodel-nodirectediting": "Het inhoudsmodel $1 ondersteunt direct bewerken niet",
+       "log-name-contentmodel": "Veranderingenlogboek van inhoudsmodel",
+       "log-description-contentmodel": "Gebeurtenissen rond het inhoudsmodel van een pagina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|veranderde}} het inhoudsmodel van pagina $3 van \"$4\" in \"$5\"",
+       "logentry-contentmodel-change-revertlink": "terugdraaien",
+       "logentry-contentmodel-change-revert": "terugdraaien",
        "protectlogpage": "Beveiligingslogboek",
        "protectlogtext": "Hieronder staan pagina's waarvan de beveiliging recentelijk gewijzigd is.\nZie de [[Special:ProtectedPages|lijst met beveiligde pagina's]] voor alle beveiligde pagina's.",
        "protectedarticle": "heeft \"[[$1]]\" beveiligd",
        "tooltip-pt-logout": "Afmelden",
        "tooltip-pt-createaccount": "Registreer u vooral en meld u aan. Dit is echter niet vereist.",
        "tooltip-ca-talk": "Overleg over deze pagina",
-       "tooltip-ca-edit": "U kunt deze pagina bewerken. Gebruik de knop voor het maken van een voorbeeld voordat u de pagina opslaat",
+       "tooltip-ca-edit": "Deze pagina bewerken",
        "tooltip-ca-addsection": "Nieuw kopje toevoegen",
        "tooltip-ca-viewsource": "Deze pagina is beveiligd.\nU kunt wel de broncode bekijken.",
        "tooltip-ca-history": "Eerdere versies van deze pagina",
        "pageinfo-robot-index": "Toegestaan",
        "pageinfo-robot-noindex": "Niet toegestaan",
        "pageinfo-watchers": "Aantal paginavolgers",
+       "pageinfo-visiting-watchers": "Aantal volgers die recente bewerkingen hebben bekeken",
        "pageinfo-few-watchers": "Minder dan  {{PLURAL:$1|één volger|$1 volgers}}",
+       "pageinfo-few-visiting-watchers": "Er kan wel of niet een volger zijn die de laatste bewerkingen hier bezoekt",
        "pageinfo-redirects-name": "Aantal doorverwijzingen naar deze pagina",
        "pageinfo-subpages-name": "Subpagina's van deze pagina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|doorverwijzing|doorverwijzingen}}; $3 {{PLURAL:$3|niet-doorverwijzing|niet-doorverwijzingen}})",
        "deletedwhileediting": "'''Let op''': deze pagina is verwijderd terwijl u bezig was met uw bewerking!",
        "confirmrecreate": "Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd met opgave van de volgende reden:\n: ''$2''\nBevestig dat u de pagina opnieuw wilt aanmaken.",
        "confirmrecreate-noreason": "Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina verwijderd.\nBevestig dat u de pagina opnieuw wilt aanmaken.",
-       "recreate": "De pagina is verwijderd sinds je begon te bewerken. Klik op \"$1\" om de pagina opnieuw aan te maken.",
+       "recreate": "Opnieuw aanmaken",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "De cache van deze pagina legen?",
        "confirm-purge-bottom": "Het opschonen van de cache zorgt ervoor dat de meest recente versie van een pagina wordt weergegeven.",
        "version-libraries": "Geïnstalleerde bibliotheken",
        "version-libraries-library": "Bibliotheek",
        "version-libraries-version": "Versie",
+       "version-libraries-license": "Licentie",
+       "version-libraries-description": "Beschrijving",
+       "version-libraries-authors": "Auteurs",
        "redirect": "Doorverwijzen op bestandsnaam, gebruikersnummer, paginanummer, of versienummer",
        "redirect-legend": "Doorverwijzen naar een bestand of pagina",
        "redirect-summary": "Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een paginanummer of versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].",
        "special-characters-title-endash": "liggend streepje",
        "special-characters-title-emdash": "gedachtenstreepje",
        "special-characters-title-minus": "minteken",
+       "mw-widgets-dateinput-no-date": "Geen datum geselecteerd",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "pagina bestaat nog niet",
        "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1"
 }
index bcb4256..80ddb30 100644 (file)
        "pool-timeout": "Tidsavbrot under venting på låsing.",
        "pool-queuefull": "Køen er full.",
        "pool-errorunknown": "Ukjend feil",
+       "poolcounter-usage-error": "Bruksfeil: $1",
        "aboutsite": "Om {{SITENAME}}",
        "aboutpage": "Project:Om",
        "copyright": "Innhaldet er utgjeve under $1 minder anna er oppgjeve.",
        "anoneditwarning": "'''Åtvaring:''' Du er ikkje innlogga.\nIP-adressa di vil verta lagra i den offentlege endringshistorikken til sida. Om du <strong>[$1 loggar inn]</strong> eller <strong>[$2 lager ein konto]</strong>, vil endringane dine knyttast til brukarnamnet ditt, saman med andre fordelar.",
        "anonpreviewwarning": "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta ført opp i endringshistorikken til denne sida.''",
        "missingsummary": "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.",
+       "selfredirect": "<strong>Åtvaring:</strong> Du omdirigerer sida til seg sjølv.\nDu kan ha oppgjeve feil mål for omdirigeringa, eller det kan vera at du endrar feil side.\nKlikkar du «{{int:savearticle}}» på nytt vil omdirigeringa opprettast kor som er.",
        "missingcommenttext": "Ver venleg og skriv ein kommentar nedanfor.",
        "missingcommentheader": "'''Påminning:''' Du har ikkje oppgjeve noko emne/overskrift for denne kommentaren.\nDersom du trykkjer «{{int:savearticle}}» ein gong til, vert endringa di lagra utan.",
        "summary-preview": "Førehandsvising av endringssamandraget:",
        "filehist-help": "Klikk på dato/klokkeslett for å sjå fila slik ho var på det tidspunktet.",
        "filehist-deleteall": "slett alle",
        "filehist-deleteone": "slett",
-       "filehist-revert": "rulla attende",
+       "filehist-revert": "rull attende",
        "filehist-current": "gjeldande",
        "filehist-datetime": "Dato/klokkeslett",
        "filehist-thumb": "Miniatyrbilete",
        "linksearch-pat": "Søkjemønster:",
        "linksearch-ns": "Namnerom:",
        "linksearch-ok": "Søk",
-       "linksearch-text": "Jokerteikn som «*.wikipedia.org» kan nyttast.\nDet er påkravt med eit toppnivådomene, til dømes «*.org».<br />\n{{PLURAL:$2|Stødd protokoll|Stødde protokollar}}: <code>$1</code> (nyttar http:// som standard om ingen protokoll er oppgjeven)",
+       "linksearch-text": "Jokerteikn som «*.wikipedia.org» kan nyttast.\nDet er påkravt med eit toppnivådomene, til dømes «*.org».<br />\n{{PLURAL:$2|Stødd protokoll|Stødde protokollar}}: $1 (nyttar http:// som standard om ingen protokoll er oppgjeven)",
        "linksearch-line": "$2 lenkjer til $1",
        "linksearch-error": "Jokerteikn kan berre nyttast føre tenarnamnet.",
        "listusersfrom": "Vis brukarnamna frå og med:",
        "activeusers-intro": "Dette er ei liste over brukarar som har hatt ei eller anna form for aktivitet innanfor {{PLURAL:$1|den siste dagen|dei siste dagane}}.",
        "activeusers-count": "{{PLURAL:$1|Éi handling|$1 handlingar}} {{PLURAL:$3|det siste døgeret|dei siste $3 døgra}}",
        "activeusers-from": "Vis brukarar frå og med:",
-       "activeusers-hidebots": "Skjul botar",
-       "activeusers-hidesysops": "Skjul administratorar",
+       "activeusers-hidebots": "Gøym robotar",
+       "activeusers-hidesysops": "Gøym administratorar",
        "activeusers-noresult": "Ingen brukarar funne.",
        "listgrouprights": "Rettar for brukargrupper",
        "listgrouprights-summary": "Detter ei liste som viser brukargruppene som er definerte på wikien, og kva rettar dei har. Det kan finnast [[{{MediaWiki:Listgrouprights-helppage}}|meir informasjon]]  om dei ulike rettane.",
        "emailuser": "Send e-post åt denne brukaren",
        "emailuser-title-target": "Send epost åt {{GENDER:$1|brukaren}}",
        "emailuser-title-notarget": "Send e-post åt brukar",
-       "emailpage": "Send e-post åt brukar",
        "emailpagetext": "Du kan nytte skjemaet nedanfor til å sende ein e-post til denne {{GENDER:$1|brukaren}}.\nE-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukke opp i «frå»-feltet på denne e-posten, så mottakaren er i stand til å svare.",
        "defemailsubject": "{{SITENAME}} epost frå brukar \"$1\"",
        "usermaildisabled": "Brukare-post slegen av",
        "imgmultipageprev": "← førre sida",
        "imgmultipagenext": "neste side →",
        "imgmultigo": "Gå!",
-       "imgmultigoto": "Gå til sida $1",
+       "imgmultigoto": "Gå til side $1",
        "img-lang-default": "(standardspråk)",
        "img-lang-info": "Teikn biletet på $1. $2",
        "img-lang-go": "Gjer det",
        "revdelete-uname-unhid": "brukarnamn gjort synleg",
        "revdelete-restricted": "la til avgrensingar for administratorar",
        "revdelete-unrestricted": "fjerna avgrensingar for administratorar",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flytte}} sida $3 til $4 utan å lata etter ei omdirigering",
        "logentry-move-move_redir": "$1 {{GENDER:$2|flytte}} sida $3 til $4 over ei omdirigering",
        "special-characters-group-bangla": "Bengali",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singalesisk",
-       "special-characters-group-gujarati": "Gujarati"
+       "special-characters-group-gujarati": "Gujarati",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index cad960e..12bf5df 100644 (file)
        "passwordreset": "Remesa a zèro del senhal",
        "passwordreset-text-one": "Emplenatz aqueste formulari per reïnicializar vòstre senhal.",
        "passwordreset-text-many": "{{PLURAL:$1|Completatz un d'aqueles camps per recebre un senhal temporari per corrièr electronic.}}",
-       "passwordreset-legend": "Reïnicializar lo senhal",
        "passwordreset-disabled": "La reïnicializacion dels senhals es estada desactivada sus aqueste wiki.",
        "passwordreset-emaildisabled": "Las foncionalitats e-mail son estadas desactivadas sus aqueste wiki.",
        "passwordreset-username": "Nom d'utilizaire :",
        "resettokens": "Reïnicializar los getons",
        "resettokens-text": "Aici, podètz reïnicializar los getons que permeton d’accedir a d'unas donadas privadas associadas a vòstre compte.\n\nLo vos caldriá far se las avètz partejats accidentalament amb qualqu'un o se vòstre compte es estat compromés.",
        "resettokens-no-tokens": "I a pas cap de geton de reïnicializar.",
-       "resettokens-legend": "Reïnicializar los getons",
        "resettokens-tokens": "Getons :",
        "resettokens-token-label": "$1 (valor actuala : $2)",
        "resettokens-watchlist-token": "Geton pel flux (Atom/RSS) web de [[Special:Watchlist|modificacions de paginas de vòstra lista de seguiment]]",
        "right-override-export-depth": "Exportar las paginas en incluent las paginas ligadas fins a una prigondor de 5 nivèls",
        "right-sendemail": "Mandar un corrièl als autres utilizaires",
        "right-passwordreset": "Veire los corrièrs electronics de reïnicializacion dels senhals",
+       "right-applychangetags": "Aplicar [[Special:Tags|las balisas]] amb sas pròprias modificacions",
        "newuserlogpage": "Istoric de las creacions de comptes",
        "newuserlogpagetext": "Jornal de las creacions de comptes d'utilizaires.",
        "rightslog": "Istoric de las modificacions d'estatut",
        "randomincategory-nopages": "I a pas cap de pagina dins [[:Category:$1]].",
        "randomincategory-category": "Categoria :",
        "randomincategory-legend": "Pagina a l'azard dins la categoria",
+       "randomincategory-submit": "Amodar",
        "randomredirect": "Una pagina de redireccion a l'azard",
        "randomredirect-nopages": "I a pas cap de redireccion dins l'espaci de nom « $1 ».",
        "statistics": "Estatisticas",
        "nmembers": "$1 {{PLURAL:$1|membre|membres}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membre|membres}}",
        "nrevisions": "$1 {{PLURAL:$1|revision|revisions}}",
-       "nviews": "$1 {{PLURAL:$1|consultacion|consultacions}}",
        "nimagelinks": "Utilizat sus $1 {{PLURAL:$1|pagina|paginas}}",
        "ntransclusions": "Utilizat sus $1 {{PLURAL:$1|pagina|paginas}}",
        "specialpage-empty": "Aquesta pagina es voida.",
        "linksearch-pat": "Recercar l’expression :",
        "linksearch-ns": "Espacis de noms :",
        "linksearch-ok": "Recercar",
-       "linksearch-text": "De caractèrs jokers coma « *.wikipedia.org » pòdon èsser utilizats.\nNecessitan al mens un domeni de nivèl superior, per exemple « *.org ».<br />\n{{PLURAL:$2|Protocòl reconegut|Protocòls reconeguts}}: <code>$1</code> (http:// per defaut se cap de protocòl es pas indicat).",
+       "linksearch-text": "De caractèrs jokers coma « *.wikipedia.org » pòdon èsser utilizats.\nNecessitan al mens un domeni de nivèl superior, per exemple « *.org ».<br />\n{{PLURAL:$2|Protocòl reconegut|Protocòls reconeguts}}: $1 (http:// per defaut se cap de protocòl es pas indicat).",
        "linksearch-line": "$1 amb un ligam a partir de $2",
        "linksearch-error": "Los caractèrs « joker » pòdon pas èsser utilizats qu’al començament del nom de domeni.",
        "listusersfrom": "Afichar los utilizaires a partir de :",
        "rollback-success": "Anullacion de las modificacions de $1 ; retorn a la version de $2.",
        "sessionfailure-title": "La sesilha a fracassat",
        "sessionfailure": "Vòstra sesilha de connexion sembla aver de problèmas ;\naquesta accion es estada anullada en prevencion d’un piratatge de sesilha.\nClicatz sus « Precedent » e tornatz cargar la pagina d’ont venètz, puèi ensajatz tornarmai.",
+       "changecontentmodel-title-label": "Títol de la pagina",
+       "changecontentmodel-model-label": "Novèl modèl de contengut",
+       "changecontentmodel-reason-label": "Motiu :",
+       "logentry-contentmodel-change-revertlink": "restablir",
+       "logentry-contentmodel-change-revert": "restablir",
        "protectlogpage": "Istoric de las proteccions",
        "protectlogtext": "Aquí una lista de las modificacions de las proteccions de paginas.\nConsultatz la [[Special:ProtectedPages|lista de las paginas protegidas]] per la lista de las proteccions actualament operacionalas.",
        "protectedarticle": "a protegit « [[$1]] »",
        "import-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
        "import-interwiki-templates": "Enclure totes los modèls",
        "import-interwiki-submit": "Importar",
+       "import-mapping-default": "Importar als emplaçaments per defaut",
+       "import-mapping-namespace": "Importar cap a un espaci de noms :",
        "import-upload-filename": "Nom del fichièr :",
        "import-comment": "Comentari :",
        "importtext": "Exportatz lo fichièr dempuèi lo wiki d’origina en utilizant [[Special:Export|aisina d'exportacion]].\nSalvatz-lo sus vòstre disc dur puèi importatz-lo aicí.",
        "tooltip-pt-logout": "Se desconnectar",
        "tooltip-pt-createaccount": "Vos es conselhat de crear un compte e de vos connectar ; pasmens, es pas obligatòri",
        "tooltip-ca-talk": "Discussion a prepaus d'aquesta pagina",
-       "tooltip-ca-edit": "Podètz modificar aquesta pagina. Mercé de previsualizar abans d’enregistrar.",
+       "tooltip-ca-edit": "Modificar aquesta pagina",
        "tooltip-ca-addsection": "Començar una seccion novèla",
        "tooltip-ca-viewsource": "Aquesta pagina es protegida. Çaquelà, ne podètz veire lo contengut.",
        "tooltip-ca-history": "Los autors e versions precedentas d'aquesta pagina.",
        "patrol-log-page": "Istoric de las versions patrolhadas",
        "patrol-log-header": "Vaquí un jornal de las versions patrolhadas.",
        "log-show-hide-patrol": "$1 l'istoric de las relecturas",
+       "log-show-hide-tag": "$1 lo jornal de las balisas",
        "deletedrevision": "La version anciana $1 es estada suprimida.",
        "filedeleteerror-short": "Error al moment de la supression del fichièr : $1",
        "filedeleteerror-long": "D'errors son estadas rencontradas al moment de la supression del fichièr :\n\n$1",
        "version-libraries": "Bibliotècas installadas",
        "version-libraries-library": "Bibliotèca",
        "version-libraries-version": "Version",
+       "version-libraries-license": "Licéncia",
+       "version-libraries-description": "Descripcion",
+       "version-libraries-authors": "Autors",
        "redirect": "Redirigit per fichièr, utilizaire, pagina o ID de revision.",
        "redirect-legend": "Redirigir cap a una pagina o un fichièr",
        "redirect-submit": "Validar",
        "tags-deactivate-title": "Desactivar la balisa",
        "tags-deactivate-reason": "Motiu :",
        "tags-deactivate-submit": "Desactivar",
+       "tags-edit-title": "Modificar las balisas",
        "tags-edit-manage-link": "Gerir las balisas",
+       "tags-edit-existing-tags": "Balisas existentas :",
        "tags-edit-existing-tags-none": "\"Pas cap\"",
+       "tags-edit-new-tags": "Balisas novèlas :",
+       "tags-edit-add": "Apondre aquestas balisas :",
+       "tags-edit-remove": "Suprimir aquestas balisas :",
+       "tags-edit-remove-all-tags": "(suprimir totas las balisas)",
+       "tags-edit-chosen-placeholder": "Seleccionar certanas balisas",
+       "tags-edit-reason": "Motiu :",
        "comparepages": "Comparar de paginas",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "logentry-managetags-delete": "$1 {{GENDER:$2|a suprimit}} la balisa « $4 » (levada {{PLURAL:$5|d'una revision o entrada de jornal|de $5 revisions o entradas de jornal}})",
        "logentry-managetags-activate": "$1 {{GENDER:$2|a activat}} la balisa \"$4\" per l’usatge dels utilizaires e dels robòts",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|a desactivat}} la balisa « $4 » per l’usatge dels utilizaires e dels robòts",
+       "log-name-tag": "Jornal de las balisas",
        "rightsnone": "(cap)",
        "revdelete-summary": "modificar lo somari",
        "feedback-adding": "Apondon de vòstres comentaris a la pagina...",
diff --git a/languages/i18n/olo.json b/languages/i18n/olo.json
new file mode 100644 (file)
index 0000000..57207b5
--- /dev/null
@@ -0,0 +1,743 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Denö",
+                       "Hiloin Natoi",
+                       "Ilja.mos",
+                       "Mashoi7"
+               ]
+       },
+       "tog-watchcreations": "Ližiä minun luajitut sivut da ližätyt failat minun valvonduluvetteloh",
+       "tog-watchdefault": "Ližiä minun kohendetut sivut da failat minun valvonduluvetteloh",
+       "tog-watchmoves": "Ližiä minun siirretyt sivut da failat minun valvonduluvetteloh",
+       "tog-watchdeletion": "Ližiä minun iäreotetut sivut da failat minun valvonduluvetteloh",
+       "tog-oldsig": "Nygöine allekirjutus:",
+       "underline-always": "Ainos",
+       "underline-never": "Nikonzu",
+       "editfont-sansserif": "Sans-serif -fontu",
+       "editfont-serif": "Serif-fontu",
+       "sunday": "Pyhäpäivy",
+       "monday": "Enzimäinargi",
+       "tuesday": "Toinargi",
+       "wednesday": "Kolmaspäivy",
+       "thursday": "Nelläspäivy",
+       "friday": "Piäteniččy",
+       "saturday": "Suovattu",
+       "sun": "Pyh",
+       "mon": "Enzimäinargi",
+       "tue": "Toinargi",
+       "wed": "Kol",
+       "thu": "Nel",
+       "fri": "Piä",
+       "sat": "Suo",
+       "january": "pakkaskuu",
+       "february": "tuhukuu",
+       "march": "kevätkuu",
+       "april": "sulakuu",
+       "may_long": "oraskuu",
+       "june": "kezäkuu",
+       "july": "heinykuu",
+       "august": "elokuu",
+       "september": "syvyskuu",
+       "october": "ligakuu",
+       "november": "kylmykuu",
+       "december": "talvikuu",
+       "january-gen": "pakkaskuudu",
+       "february-gen": "tuhukuudu",
+       "march-gen": "kevätkuudu",
+       "april-gen": "kevätkuudu",
+       "may-gen": "oraskuudu",
+       "june-gen": "kezäkuudu",
+       "july-gen": "heinykuudu",
+       "august-gen": "elokuudu",
+       "september-gen": "syvyskuudu",
+       "october-gen": "ligakuudu",
+       "november-gen": "kylmykuudu",
+       "december-gen": "talvikuudu",
+       "jan": "pakkaskuu",
+       "feb": "tuhu",
+       "mar": "kevätkuu",
+       "apr": "Sula",
+       "may": "Oras",
+       "jun": "Pakkas",
+       "jul": "Heiny",
+       "aug": "Elo",
+       "sep": "Syvys",
+       "oct": "ligakuu",
+       "nov": "kylmykuu",
+       "dec": "talvikuu",
+       "january-date": "$1. pakkaskuudu",
+       "february-date": "$1. tuhukuudu",
+       "march-date": "Kevätkuu $1",
+       "april-date": "Sulakuu $1",
+       "may-date": "Oraskuu $1",
+       "june-date": "Kezäkuu $1",
+       "july-date": "Heinykuu $1",
+       "august-date": "Elokuu $1",
+       "september-date": "Syvyskuu $1",
+       "october-date": "Ligakuu $1",
+       "november-date": "Kylmykuu $1",
+       "december-date": "Talvikuu $1",
+       "pagecategories": "{{PLURAL:$1|Kategourii|Kategouriet}}",
+       "category_header": "Sivut kategouries \"$1\"",
+       "subcategories": "Alikategouriet",
+       "category-media-header": "Medii kategouries \"$1\"",
+       "hidden-categories": "{{PLURAL:$1|Peitetty kategourii|Peitetyt kategouriet}}",
+       "hidden-category-category": "Peitetyt kategouriet",
+       "category-subcat-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä alikategourii.|Täs kategouries on nämmä {{PLURAL:$1|subcategory|$1 alikategouriet}}, kaikkiedah $2.}}",
+       "category-article-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä sivu.|{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "category-file-count": "{{PLURAL:$2|Täs kategouriis on vaiku tämä failu.| {{PLURAL:$1|Tämä failu on|$1 Nämmä failat ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "listingcontinuesabbrev": "(jatko)",
+       "about": "Tieduo sovellukses",
+       "article": "Yhtevyssivu",
+       "newwindow": "(avata uvves ikkunas)",
+       "cancel": "Hylgiä",
+       "moredotdotdot": "Ližiä...",
+       "mypage": "Sivu",
+       "mytalk": "Pagin",
+       "navigation": "Navigatsii",
+       "and": "&#32;da",
+       "qbfind": "Eči",
+       "qbbrowse": "Livua",
+       "qbedit": "Korjata",
+       "qbpageoptions": "Tämä sivu",
+       "qbmyoptions": "Minun sivut",
+       "faq": "PKK",
+       "faqpage": "Project:PKK",
+       "actions": "Tevot",
+       "namespaces": "Nimitilat",
+       "variants": "Variantat",
+       "navigation-heading": "Navigatsii",
+       "errorpagetitle": "Haireh",
+       "returnto": "Mene järilleh sivule $1.",
+       "tagline": "Lähteh {{SITENAME}}",
+       "help": "Kyzy abuu",
+       "search": "Eči",
+       "searchbutton": "Eči",
+       "go": "Mennä",
+       "searcharticle": "Mene",
+       "history": "Kačo histourii",
+       "history_short": "Histourii",
+       "printableversion": "Tulostettavu versii",
+       "permalink": "Vagituine linki",
+       "print": "Pane bumuagale",
+       "view": "Kačo",
+       "view-foreign": "Kačo saital $1",
+       "edit": "Korjua",
+       "create": "Luaji",
+       "create-local": "Ližiä paikalline kuvavus",
+       "editthispage": "Korjua tädä sivuu",
+       "create-this-page": "Luaji tämä sivu",
+       "delete": "Ota iäre",
+       "deletethispage": "Ota tämä sivu iäre",
+       "undeletethispage": "Tuo sivu järilleh",
+       "protect": "Suojua",
+       "protect_change": "vaihta",
+       "protectthispage": "Suojua tämä sivu",
+       "unprotect": "Vaihta suojavustu",
+       "unprotectthispage": "Vaihta tämän sivun suojavustu",
+       "newpage": "Uuzi sivu",
+       "talkpage": "Pagize täh sivuh näh",
+       "talkpagelinktext": "Pagin",
+       "specialpage": "Erikoine sivu",
+       "personaltools": "Omat instrumentat",
+       "articlepage": "Ozuta syväindösivu",
+       "talk": "Paginat",
+       "views": "Kaččokerrat",
+       "toolbox": "Instrumentat",
+       "userpage": "Ozuta käyttäisivu",
+       "projectpage": "Ozuta projektusivu",
+       "imagepage": "Ozuta failusivu",
+       "mediawikipage": "Ozuta viestisivu",
+       "templatepage": "Ozuta šablonsivu",
+       "viewhelppage": "Ozuta ohjavosivu",
+       "categorypage": "Ozuta kategouriisivu",
+       "viewtalkpage": "Ozuta paginsivu",
+       "otherlanguages": "Toizil kielil",
+       "redirectedfrom": "(siirretty $1:späi)",
+       "redirectpagesub": "uvvellehohjavussivu",
+       "redirectto": "Uvvellehohjuau sivuh:",
+       "lastmodifiedat": "Tädä sivuu on muutettu jälgimäizen kerran $1, $2 aigah.",
+       "protectedpage": "Suojattu sivu",
+       "jumpto": "Siirry",
+       "jumptonavigation": "navigatsii",
+       "jumptosearch": "eči",
+       "pool-errorunknown": "Tundematoi haireh",
+       "poolcounter-usage-error": "Käyttöhaireh: $1",
+       "aboutsite": "Lähteh {{SITENAME}}",
+       "aboutpage": "Project:Kuvavus",
+       "copyrightpage": "{{ns:project}}:Luadijan oigevukset",
+       "currentevents": "Aijankohtazet tapahtumat",
+       "currentevents-url": "Project:Aijankohtazet tapahtumat",
+       "disclaimers": "Kieldävymine vastuos",
+       "disclaimerpage": "Project:Vastuos kieldävymine",
+       "edithelp": "Abu korjuamizeh",
+       "helppage-top-gethelp": "Kyzyö abuu",
+       "mainpage": "Piäsivu",
+       "mainpage-description": "Piäsivu",
+       "portal": "Yhtevyksen portualu",
+       "portal-url": "Project:Portualu",
+       "privacy": "Luottamuksen periuateh",
+       "privacypage": "Project:Luottamuksen periuateh",
+       "retrievedfrom": "Lähteh - \"$1\"",
+       "youhavenewmessages": "{{PLURAL:$3|Sinule on}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Sinule on}} $1 {{PLURAL:$3|toizel käyttäjälpäi|$3 käyttäjältä}} ($2).",
+       "youhavenewmessagesmanyusers": "Sinule on $1 uuzii viestilöi monil käyttäjilpäi ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|uuzi viesti|999=uuzii viestilöi}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|jälgimäine muutos|jälgimästy muutostu}}",
+       "youhavenewmessagesmulti": "Sinul on uuzii viestilöi sivuloil $1",
+       "editsection": "Korjua",
+       "editold": "korjua",
+       "viewsourceold": "Kačo algukoodu",
+       "editlink": "korjua",
+       "viewsourcelink": "Kačo algukoodu",
+       "editsectionhint": "Korjua tädä kohtua: $1",
+       "toc": "Sizäldö",
+       "showtoc": "ozuttua",
+       "hidetoc": "peittiä",
+       "collapsible-expand": "Levitä",
+       "confirmable-yes": "Muga",
+       "confirmable-no": "Ei",
+       "viewdeleted": "Ozuta $1?",
+       "feedlinks": "Syöteh:",
+       "site-rss-feed": "$1 (RSS-syöteh)",
+       "site-atom-feed": "$1 Atom-lentu",
+       "page-rss-feed": "$1 (RsS-syöteh)",
+       "page-atom-feed": "$1 Atom-lentu",
+       "red-link-title": "$1 (sivuu ei lövvy)",
+       "nstab-main": "Sivu",
+       "nstab-user": "Käyttäisivu",
+       "nstab-media": "Mediisivu",
+       "nstab-special": "Erikoine sivu",
+       "nstab-project": "Projektusivu",
+       "nstab-image": "Failu",
+       "nstab-mediawiki": "Viesti",
+       "nstab-template": "Šablon",
+       "nstab-category": "Kategourii",
+       "error": "Haireh",
+       "databaseerror": "Tiedokanduhaireh",
+       "databaseerror-function": "Funkcii:$1",
+       "databaseerror-error": "Haireh: $1",
+       "readonly": "Tiedokandu lukuttu",
+       "internalerror": "Syväindölline haireh",
+       "internalerror_info": "Syväindölline haireh: $1",
+       "filecopyerror": "Failua \"$1\" ei voitu kopiruija failakse \"$2\".",
+       "filedeleteerror": "Failua \"$1\" ei voitu ottua iäre.",
+       "filenotfound": "Failua \"$1\" ei lövvetty.",
+       "cannotdelete-title": "Ei voi ottua iäre sivuu \"$1\"",
+       "badtitle": "Paha rubriekku",
+       "badtitletext": "Kyzelyn rubriekku oli pädemätöi, tyhjy, libo viärin linkitetty kielienväline libo wikienväline rubriekku. \nSit voibi olla yksi libo enämbi merkii, kudamua ei voi käyttiä rubriekas.",
+       "viewsource": "Kačo",
+       "exception-nologin": "Ei ole kirjutannuhes",
+       "welcomeuser": "Tule terveh, $1!",
+       "yourname": "Käyttäinimi:",
+       "userlogin-yourname": "Käyttäinimi",
+       "userlogin-yourname-ph": "Kirjuta sinun käyttäinimi",
+       "createacct-another-username-ph": "Kirjuta käyttäitunnus",
+       "yourpassword": "Peittosana:",
+       "userlogin-yourpassword": "Peittosana",
+       "userlogin-yourpassword-ph": "Kirjuta sinun peittosana",
+       "createacct-yourpassword-ph": "Kirjuta peittosana",
+       "yourpasswordagain": "Kirjuta peittosana myös:",
+       "createacct-yourpasswordagain": "Lujenda peittosana",
+       "createacct-yourpasswordagain-ph": "Myös kirjuta peittosana",
+       "userlogin-remembermypassword": "Pie minut kirjutannuhuonnu",
+       "yourdomainname": "Sinun domain:",
+       "password-change-forbidden": "Et voi vaihtua peittosanoi täs wikis.",
+       "login": "Kirjuttai",
+       "nav-login-createaccount": "Kirjuttai libo registriiruiččei",
+       "userlogin": "Kirjuttai libo registriiruiččei",
+       "userloginnocreate": "Kirjuttai",
+       "logout": "Kirjuttai ullos",
+       "userlogout": "Kirjuttai ullos",
+       "notloggedin": "Ei kirjutannuhes",
+       "userlogin-noaccount": "Ei ole tilii?",
+       "userlogin-joinproject": "Yhty {{SITENAME}}",
+       "nologin": "Ei ole tilii? $1",
+       "nologinlink": "Luaji tili",
+       "createaccount": "Registriiruiččei",
+       "gotaccount": "Ollou sinul jo tunnus? $1",
+       "gotaccountlink": "Kirjuttai",
+       "userlogin-resetlink": "Unohtitgo sinun käyttäinimen/peittosanan?",
+       "userlogin-resetpassword-link": "Unohtitgo sinun peittosanan?",
+       "userlogin-helplink2": "Abuu ku kirjuttuakseh",
+       "userlogin-loggedin": "Olet jo kirjutannuhes nimel {{GENDER:$1|$1}}.\nKäytä al olijua ankiettua ku kirjuttuakseh eri käyttäjänny.",
+       "userlogin-createanother": "Luaji toine tili",
+       "createacct-emailrequired": "Sähköpoštuadressu",
+       "createacct-emailoptional": "Sähköpoštuadressu (ei vältämätöi)",
+       "createacct-email-ph": "Kirjuta sinun sähköpoštuadressu",
+       "createacct-another-email-ph": "Kirjuta sinun sähköpoštuadressu",
+       "createacct-realname": "Tovelline nimi (omatahtoine tiedo)",
+       "createacct-reason-ph": "Mindäh olet luadimas tostu käyttäitilii",
+       "createacct-captcha": "Turvallizusvarmistus",
+       "createacct-imgcaptcha-ph": "Kirjuta ylähän olii tekstu",
+       "createacct-submit": "Luaji tili",
+       "createacct-another-submit": "Luaji toine tili",
+       "createacct-benefit-heading": "Sivun {{SITENAME}} ollah luajittu sinunjyttymät rahvas.",
+       "createacct-benefit-body1": "{{PLURAL:$1|kohennus|kohendustu}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|sivu|sivuu}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|Jälgimäime käyttäi|Jälgimäzet käyttäjät}}",
+       "badretype": "Sinun kirjutetut peittosanat ei oldu yhtenjyttymät.",
+       "mailmypassword": "Azeta peittosana uvvelleh",
+       "mailerror": "Haireh työndäjes sähköpoštua: $1",
+       "accountcreated": "Tili luajittu",
+       "loginlanguagelabel": "Kieli: $1",
+       "pt-login": "Kirjuttai",
+       "pt-login-button": "Kirjuttai",
+       "pt-createaccount": "Registriiruiččei",
+       "pt-userlogout": "Kirjuttai ullos",
+       "changepassword": "Vaihta peittosana",
+       "resetpass_header": "Vaihta tilin peittosana",
+       "oldpassword": "Vahnu peittosana:",
+       "newpassword": "Uuzi peittosana:",
+       "resetpass-submit-loggedin": "Vaihta peittosana",
+       "resetpass-submit-cancel": "Hyllätä",
+       "resetpass-temp-password": "Väliaigaine peittosana:",
+       "passwordreset": "Azeta peittosana uvvelleh",
+       "passwordreset-username": "Käyttäinimi:",
+       "passwordreset-domain": "Domain:",
+       "passwordreset-email": "Sähköpoštuadressu:",
+       "passwordreset-emailelement": "Käyttäinimi: $1\nVäliaigaine peittosana: $2",
+       "changeemail": "Vaihta sähköpoštuadressu",
+       "changeemail-oldemail": "Nygöine sähköpoštuadressu:",
+       "changeemail-newemail": "Uuzi sähköpoštuadressu:",
+       "changeemail-none": "(niyhty)",
+       "changeemail-submit": "Vaihta sähköpoštu",
+       "resettokens-tokens": "Avaimet:",
+       "bold_sample": "Lihavoitu tekstu",
+       "bold_tip": "Lihavoitu tekstu",
+       "italic_sample": "Kursivoitu tekstu",
+       "italic_tip": "Kursivoitu tekstu",
+       "link_sample": "Linkan nimi",
+       "link_tip": "Sižähine linku",
+       "extlink_sample": "http://www.example.com linkan nimi",
+       "extlink_tip": "Ulgohine linku (musta http:// alguh)",
+       "headline_sample": "Rubriekkutekstu",
+       "headline_tip": "Tazon 2 rubriekku",
+       "nowiki_sample": "Ližiä täh tekstu, kudamua ei pie korjata",
+       "nowiki_tip": "Älä puutu wiki-korjavuksih",
+       "image_tip": "Upotettu failu",
+       "media_tip": "Linki failah",
+       "sig_tip": "Teijän allekirjutus da aigu",
+       "hr_tip": "Horizontualine viivu (älä käytä liijakse)",
+       "summary": "Yhtehvedo:",
+       "subject": "Tiemu/rubriekku:",
+       "minoredit": "Tämä on pieni korjavus",
+       "watchthis": "Tarkaile tädä sivuu",
+       "savearticle": "Tallenda sivu",
+       "preview": "Ezikačo",
+       "showpreview": "Ezikaččo",
+       "showdiff": "Luajitut korjavukset",
+       "anoneditwarning": "<strong>Varaitus:</strong> Et ole kirjutannuhes. Luadinet muutoksii syväindölöih, sinun Ip-adressu tulou nägövih kaikile. Ku <strong>[$1 kirjutannuttos]</strong> libo <strong>[$2 registriiruičettos]</strong>, sinun syväindömuutokset nävytäh sinun käyttäinimel, toizien eduloin ližäkse.",
+       "blockedtitle": "Käyttäi on estetty",
+       "blockednoreason": "ei viärysty annettu",
+       "loginreqlink": "kirjuttai",
+       "accmailtitle": "Peittosana työtty",
+       "newarticle": "(Uuzi)",
+       "newarticletext": "Olet puutunuh sivule, kudamua ei ole vie. Ku luadie sivu, zavodi kirjuttua al olijah juaššiekkah (kačo [$1 help page] ku suaha ližätieduo).\nKu puutuit tänne petties, painalda sinun livaimen <strong>järilleh</strong>-nyblyä.",
+       "noarticletext": "Täl sivul ei ole juuri nygöi tekstua.\nVoit [[Special:Search/{{PAGENAME}}|eččie sivun nimel]] toizis sivuloispäi,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} eččie sidä koskijua logua],\nlibo [{{fullurl:{{FULLPAGENAME}}|action=edit}} korjata tädä sivuu]</span>.",
+       "noarticletext-nopermission": "Täl sivul ei ole tekstua.\nVoit [[Special:Search/{{PAGENAME}}|eččie sivun nimel]] toizis sivuloispäi, libo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} eččie sivuu koskijua logua]</span>, ga sinul ei ole oigevuksii luadie tädä sivuu.",
+       "updated": "(Päivitetty)",
+       "editing": "Edituijah sivuu $1",
+       "creating": "Luajitah sivuu \"$1\"",
+       "editingsection": "Korjuandu $1 (alalugu)",
+       "yourtext": "Sinun tekstu",
+       "yourdiff": "Erot",
+       "templatesused": "{{PLURAL:$1|Šablon|Šablonat}} käytetty täl sivul:",
+       "template-protected": "(suojattu)",
+       "template-semiprotected": "(puolekse suojattu)",
+       "hiddencategories": "Tämä sivu kuuluu {{PLURAL:$1|1 peitettyh kategourieh|$1 peitettyh kategourieh}}:",
+       "permissionserrorstext-withaction": "Sinul ei ole lubua toimindoh $2 niškoi, {{PLURAL:$1|tämän syyn periä|nämmien syylöin periä}}:",
+       "moveddeleted-notice": "Tämä sivu on otettu iäre. Sivun iäreotandu- da siirdohistourii ollah annettu al viittavuksennu.",
+       "postedit-confirmation-saved": "Sinun kohendus tallendettih.",
+       "content-model-wikitext": "wikitekstu",
+       "content-model-text": "perustekstu",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Tyhjy objektu",
+       "viewpagelogs": "Ozuta tämän sivun logat",
+       "currentrev": "Jälgimäzin versii",
+       "currentrev-asof": "Sivun $1 jälgimäzin versii",
+       "revisionasof": "Versii $1",
+       "revision-info": "Versii $1 {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Edelline",
+       "nextrevision": "Uvvembi versii →",
+       "currentrevisionlink": "Jälgimäine versii",
+       "cur": "nygöine",
+       "next": "tulii",
+       "last": "iel",
+       "page_first": "enzimäine",
+       "page_last": "jälgimäine",
+       "histfirst": "vahnin",
+       "histlast": "uuzin",
+       "historyempty": "(tyhjy)",
+       "rev-delundel": "vaihta nägyvys",
+       "rev-showdeleted": "ozuttua",
+       "revdelete-show-file-submit": "Muga",
+       "revdelete-radio-same": "(älä vaihta)",
+       "revdelete-radio-set": "Peitetty",
+       "revdelete-radio-unset": "Nägövil",
+       "pagehist": "Sivuhistourii",
+       "history-title": "Sivun \"$1\" versiihistourii",
+       "difference-title": "Sivun \"$1\" versielöin eroloi",
+       "lineno": "Rivi $1:",
+       "editundo": "Hylgiä",
+       "diff-multi-sameuser": "({{PLURAL:$1|Yksi keskitazon versii |$1 keskitazon versiedy}} samal käyttäjälpäi ei ozutettu)",
+       "searchresults": "Eččimizen tulokset",
+       "searchresults-title": "Eči \"$1\"",
+       "prevn": "ielline {{PLURAL:$1|$1}}",
+       "nextn": "tulii {{PLURAL:$1|$1}}",
+       "prev-page": "ielline sivu",
+       "next-page": "tulii sivu",
+       "nextn-title": "Tulii $1 {{PLURAL:$1|tulos|tulokset}}",
+       "shown-title": "Ozuttua $1 {{PLURAL:$1|tulos|tulostu}} sivul",
+       "viewprevnext": "Ozuta ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Luaji sivu \"[[:$1]]\" täh wikih!</strong> {{PLURAL:$2|0=|Kačo sežo sinun eččol löytyt sivut.|Kačo sežo löytyt eččon tulokset.}}",
+       "searchprofile-articles": "Yhtevyssivu",
+       "searchprofile-images": "Multimedii",
+       "searchprofile-everything": "Kaikkiel",
+       "searchprofile-advanced": "Eči tarkembah",
+       "searchprofile-articles-tooltip": "Eči kohtas $1",
+       "searchprofile-images-tooltip": "Eči failat",
+       "searchprofile-everything-tooltip": "Eči kaikil sivuloil (dai paginois)",
+       "searchprofile-advanced-tooltip": "Eči nämmien nimitiloin keskes",
+       "search-result-size": "$1 ({{PLURAL:$2|1 sana|$2 sanua}})",
+       "search-redirect": "(siirretty $1)",
+       "search-section": "(alalugu $1)",
+       "search-suggest": "Tarkoititgo: $1",
+       "search-interwiki-more": "(enämbi)",
+       "search-relatedarticle": "Eči yhtenjyttymii sivuloi",
+       "searchrelated": "yhtenjyttymät",
+       "searchall": "kai",
+       "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> / <strong>$3</strong>|Tulokset <strong>$1 - $2</strong> / <strong>$3</strong>}}",
+       "search-nonefound": "Kyzelyh ei löydynyh tuloksii.",
+       "powersearch-legend": "Levitetty eččo",
+       "powersearch-togglelabel": "Valliče:",
+       "powersearch-toggleall": "Kai",
+       "powersearch-togglenone": "Nimidä",
+       "mypreferences": "Azetukset",
+       "prefs-edits": "Edituičendoi kaikkiedah:",
+       "prefs-skin": "Kettu",
+       "prefs-user-pages": "Käyttäisivut",
+       "prefs-watchlist": "Valvondulistu",
+       "prefs-resetpass": "Vaihta peittosana",
+       "prefs-changeemail": "Vaihta sähköpoštuadressu",
+       "prefs-setemail": "Kirjuta sähköpoštuadressu",
+       "saveprefs": "Tallenda",
+       "rows": "Riädyy:",
+       "searchresultshead": "Eččie",
+       "timezoneregion-africa": "Afrikku",
+       "timezoneregion-america": "Amerikku",
+       "timezoneregion-antarctica": "Antarktikku",
+       "timezoneregion-arctic": "Artikku",
+       "timezoneregion-asia": "Aazii",
+       "timezoneregion-atlantic": "Atlantine valdumeri",
+       "timezoneregion-australia": "Australii",
+       "timezoneregion-europe": "Jevrouppu",
+       "timezoneregion-indian": "Indien meri",
+       "timezoneregion-pacific": "Tyyni valdumeri",
+       "prefs-searchoptions": "Eččie",
+       "prefs-namespaces": "Nimilöin tilat",
+       "youremail": "Sähköpoštu:",
+       "username": "{{GENDER:$1|Käyttäinimi}}:",
+       "yourlanguage": "Kieli:",
+       "yournick": "Uuzi allekirjutus:",
+       "yourgender": "Sugupuoli:",
+       "gender-unknown": "Jätän valličemattah",
+       "gender-male": "Mies",
+       "gender-female": "Naine",
+       "prefs-help-gender": "Tämän azetuksen valliččemine on omatahtostu.\nProgrammu käyttäy annettuu tieduo, ku viitata sinuh oigiel kieliopillizel terminäl. \nTämä tiedo on julgine.",
+       "email": "Sähköpoštu",
+       "prefs-help-realname": "Oigien nimen andamine on omatahtostu.\nOllou annettu, sidä voijah käyttiä luadijan sanelendah.",
+       "prefs-help-email": "Sähköpoštuadresan andamine on omatahtostu, no se pidäy ku kyzyö uuzi peittosana, ku unohtannet sinun peittosanan.",
+       "prefs-help-email-required": "Sähköpoštuadressu vältämättäh pidäy.",
+       "prefs-info": "Perustiijot",
+       "prefs-signature": "Allekirjutus",
+       "prefs-advancedrc": "Ližäazetukset",
+       "prefs-advancedrendering": "Ližäazetukset",
+       "prefs-advancedsearchoptions": "Ližäazetukset",
+       "prefs-advancedwatchlist": "Ližäazetukset",
+       "prefs-tokenwatchlist": "Avain",
+       "userrights-user-editname": "Kirjuta käyttäitunnus:",
+       "userrights-groupsmember": "Yhtynnyönny joukkoloih:",
+       "group-user": "Käyttäjät",
+       "group-all": "(kai)",
+       "right-read": "Lugie sivuloi",
+       "right-edit": "Edituija sivuloi",
+       "right-createpage": "Luadie sivuloi (kudamat ei olla paginsivuloi)",
+       "right-createtalk": "Luadie paginsivuloi",
+       "right-createaccount": "Luadie uuzii käyttäitunnuksii",
+       "right-minoredit": "Merkitä edituičendoi pienikse",
+       "right-move": "Siirrä sivut",
+       "right-move-subpages": "Siirrä sivut alisivuloinke",
+       "right-move-rootuserpages": "Siirdiä käyttäisivuloi",
+       "right-move-categorypages": "Siirdiä kategouriisivuloi",
+       "right-movefile": "Siirdiä failoi",
+       "right-writeapi": "Käytä API:i",
+       "newuserlogpage": "Uuzien käyttäjien luvettelo",
+       "action-read": "luve tämä sivu",
+       "action-move": "siirrä tämä sivu",
+       "action-move-subpages": "siirrä tämä sivu, da sen alisivut",
+       "action-movefile": "siirrä tämä failu",
+       "enhancedrc-history": "histourii",
+       "recentchanges": "Uvvet korjavukset",
+       "recentchanges-legend": "Tuorehien muutoksien azetukset",
+       "recentchanges-summary": "Jällitä kaikkii jälgimäzet muutokset wikih täl sivul.",
+       "recentchanges-label-newpage": "Tämä korjavus on johtanuh uvven sivun luadimizeh",
+       "recentchanges-label-minor": "Tämä on pieni korjavus",
+       "recentchanges-label-bot": "Tämän muutoksen on luadinuh bot",
+       "recentchanges-label-unpatrolled": "Tädä korjuandua vie ei ole tarkistettu",
+       "recentchanges-label-plusminus": "Sivu on kazvanuh [] baital",
+       "recentchanges-legend-heading": "'''Legendu:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kačo sežo [[Special:NewPages|uuzien sivuloin listu]])",
+       "rclistfrom": "Ozuta jälgimäzet muutokset algajen $2, $3",
+       "rcshowhideminor": "$1 pienet muutokset",
+       "rcshowhideminor-show": "Ozuta",
+       "rcshowhideminor-hide": "Peitä",
+       "rcshowhidebots": "$1 botat",
+       "rcshowhidebots-show": "Ozuta",
+       "rcshowhidebots-hide": "Peitä",
+       "rcshowhideliu": "$1 registruittuu käyttäjiä",
+       "rcshowhideliu-hide": "Peitä",
+       "rcshowhideanons": "$1 anoniimua käyttäjiä",
+       "rcshowhideanons-show": "Ozuta",
+       "rcshowhideanons-hide": "Peitä",
+       "rcshowhidepatr-show": "Ozuttua",
+       "rcshowhidepatr-hide": "Peittiä",
+       "rcshowhidemine": "$1 minun kohendukset",
+       "rcshowhidemine-show": "Ozuta",
+       "rcshowhidemine-hide": "Peitä",
+       "rclinks": "Ozuta jälgimäzet $1 muutostu jälgimäzen $2 päivän aijannu<br />$3",
+       "diff": "erot",
+       "hist": "Histourii",
+       "hide": "Peitä",
+       "show": "Ozuta",
+       "minoreditletter": "p",
+       "newpageletter": "U",
+       "boteditletter": "b",
+       "rc-change-size-new": "Kogo jälles muutoksii: $1 {{PLURAL:$1|baitu|baitua}}",
+       "recentchangeslinked": "Koskijat muutokset",
+       "recentchangeslinked-toolbox": "Toine toizeh liittyjät korjavukset",
+       "recentchangeslinked-title": "Muutokset koskijen sivuu \"$1\"",
+       "recentchangeslinked-summary": "Tämä on nengomien sivuloin korjavuksien luvettelo, kudamih viittuau tämä sivu (libo sih kategourieh kuulujat).Sivut, kudamat kuulutah [[Special:Watchlist|teijän valvonduluvettelo]], ollah  <strong>bold</strong>.",
+       "recentchangeslinked-page": "Sivun nimi:",
+       "recentchangeslinked-to": "Ozuta linkitetyn sivun muutokset annetun sivun sijah",
+       "upload": "Ližiä tiijosto",
+       "filedesc": "Yhtehvedo",
+       "fileuploadsummary": "Yhtehvedo:",
+       "filereuploadsummary": "Muutokset failah:",
+       "filesource": "Lähteh:",
+       "filename-tooshort": "Failunimi on liijan lyhyt.",
+       "watchthisupload": "Valvo tädä failua",
+       "upload-dialog-button-save": "Tallenda",
+       "upload-dialog-label-infoform-title": "Tiijot",
+       "upload-dialog-label-infoform-name": "Nimi",
+       "upload-dialog-label-infoform-description": "Kuvavus",
+       "upload-dialog-label-usage-title": "Käyttö",
+       "upload-dialog-label-usage-filename": "Failunimi",
+       "license-header": "Licenzii",
+       "imgfile": "tiijosto",
+       "listfiles_name": "Nimi",
+       "listfiles_user": "Käyttäi",
+       "listfiles_size": "Kogo",
+       "listfiles_description": "Kuvavus",
+       "listfiles_count": "Versii",
+       "listfiles-latestversion": "Nygöine versii",
+       "listfiles-latestversion-yes": "Muga",
+       "listfiles-latestversion-no": "Ei",
+       "file-anchor-link": "Failu",
+       "filehist": "Kačo histourii",
+       "filehist-help": "Klikkua päivymiäriä/aigua kaččuo, mittuine failu oli silloi",
+       "filehist-current": "Nygöine",
+       "filehist-datetime": "Päivymiäry/aigu",
+       "filehist-thumb": "Kuvahaine",
+       "filehist-thumbtext": "Pieni kogo versieh $1",
+       "filehist-user": "Käyttäi",
+       "filehist-dimensions": "Kogo",
+       "filehist-comment": "Huomahtus",
+       "imagelinks": "Failan käyttö",
+       "linkstoimage": "{{PLURAL:$1|Tämä sivu linkittähes|$1 Nämmä sivut linkittiäkseh}} täh failah:",
+       "nolinkstoimage": "Täh tiijostoh viittuajua sivuu ei ole.",
+       "sharedupload-desc-here": "Tädä failua $1 ymbäristös voibi sežo käyttiä toizis projektois.\nSen kuvavus [$2 sivun kuvavuksen] on alemba.",
+       "upload-disallowed-here": "Et voi kirjuttua tämän failan piäle.",
+       "randompage": "Sattumanvaraine sivu",
+       "statistics": "Statistiekat",
+       "statistics-header-pages": "Sivustatistiekat",
+       "statistics-header-users": "Käyttäistatistiekat",
+       "statistics-header-hooks": "Toizet statistiekat",
+       "statistics-articles": "Syväindösivut",
+       "statistics-pages": "Sivut",
+       "nbytes": "$1 {{PLURAL:$1|baitu|baitua}}",
+       "nmembers": "$1 {{PLURAL:$1|käyttäi|käyttäjiä}}",
+       "newpages": "Uvvet sivut",
+       "newpages-username": "Käyttäinimi:",
+       "ancientpages": "Vahnimat sivut",
+       "move": "Siirrä",
+       "movethispage": "Siirrä tämä sivu",
+       "pager-older-n": "{{PLURAL:$1|vahnembi 1|vahnembi $1}}",
+       "booksources": "Kniigulähtehet",
+       "booksources-search-legend": "Eči kniigulähtehii",
+       "booksources-search": "Eči",
+       "log": "Logat",
+       "allpages": "Kai sivut",
+       "nextpage": "Tulii sivu ($1)",
+       "prevpage": "Ielline sivu ($1)",
+       "allarticles": "Kai sivut",
+       "allpagessubmit": "Mene",
+       "categories": "Kategouriet",
+       "emailusername": "Käyttäinimi:",
+       "emailfrom": "Kespäi:",
+       "emailto": "Kelle:",
+       "emailsubject": "Teema:",
+       "emailmessage": "Viesti:",
+       "emailsend": "Työnnä",
+       "emailccme": "Työnnä minule koupii viestis.",
+       "watchlist": "Valvonduluvettelo",
+       "mywatchlist": "Valvonduluvettelo",
+       "addwatch": "Ližiä valvondulistah",
+       "watch": "Valvo",
+       "watchthispage": "Valvo tädä sivuu",
+       "unwatch": "Lope valvondu",
+       "unwatchthispage": "Lope valvondu",
+       "watching": "Valvotah...",
+       "unwatching": "Ei valvota...",
+       "dellogpage": "Iäreotanduhistourii",
+       "rollbacklink": "Tuo endine versii",
+       "rollbacklinkcount": "mene järilleh $1 {{PLURAL:$1|edituičendu|edituičendua}}",
+       "protectlogpage": "Suojavushistourii",
+       "undelete-show-file-submit": "Muga",
+       "namespace": "Nimitilat:",
+       "invert": "Piänvastaine valličendu",
+       "tooltip-invert": "Tahtonet peittiä tämän sivun muutokset vallitul nimitilal, valliče tämä kohtu.",
+       "namespace_association": "Liittyjät nimitilat",
+       "tooltip-namespace_association": "Tahtonet kerale sežo vallittuh nimitilah liittyjät pagin- libo tiemunimitilat, valliče tämä kohtu.",
+       "blanknamespace": "(Piä)",
+       "contributions": "{{GENDER:$1|Käyttäi}} kirjutukset",
+       "mycontris": "Kirjutukset",
+       "month": "Täs kuus (libo aijembi)",
+       "year": "Tänävuon (libo aijembi):",
+       "whatlinkshere": "Linkit tänne",
+       "whatlinkshere-title": "Sivut, kudamat kosketah sivuu \"$1\"",
+       "whatlinkshere-page": "Sivu:",
+       "linkshere": "Nämmä sivut linkittiäkseh sivuh <strong>[[:$1]]</strong>:",
+       "isredirect": "uvvellehohjavussivu",
+       "istemplate": "sižällyttämine",
+       "isimage": "failan linku",
+       "whatlinkshere-prev": "{{PLURAL:$1|ielline|ielline $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|tulii|tulii $1}}",
+       "whatlinkshere-links": "← linkat",
+       "whatlinkshere-hideredirs": "$1 uvvellehohjavukset",
+       "whatlinkshere-hidetrans": "$1 sižällyttämizet",
+       "whatlinkshere-hidelinks": "$1 linkat",
+       "whatlinkshere-filters": "Filtrat",
+       "blocklink": "Lukiče",
+       "contribslink": "korjavukset",
+       "movelogpage": "Siirrä loga",
+       "export": "Vie sivut",
+       "allmessages-language": "Kieli:",
+       "allmessages-filter-submit": "Mene",
+       "allmessages-filter-translate": "Kiännä",
+       "thumbnail-more": "Suurendua",
+       "filemissing": "Failua ei ole",
+       "tooltip-pt-userpage": "Sinun käyttäisivu",
+       "tooltip-pt-mytalk": "Sinun paginsivu",
+       "tooltip-pt-preferences": "Sinun azetukset",
+       "tooltip-pt-watchlist": "Listu sivulois kudamien muutoksii valvot",
+       "tooltip-pt-mycontris": "Listu sinun kirjutuksis",
+       "tooltip-pt-login": "Täs voibi registriiruijakseh, ga se ei ole vältämätöi",
+       "tooltip-pt-logout": "Kirjuttai ullos",
+       "tooltip-pt-createaccount": "Voit registriiruijakseh da kirjuttuakseh järjestelmäh, ga se ei ole vältämätöi",
+       "tooltip-ca-talk": "Pagize piäsivun sizäldös",
+       "tooltip-ca-edit": "Korjua tädä sivuu",
+       "tooltip-ca-addsection": "Luaji uuzi alalugu",
+       "tooltip-ca-viewsource": "Tämä sivu on suojattu. Voit kaččuo sen lähtehkoudan",
+       "tooltip-ca-history": "Tämän sivun jälgimäzet muutokset",
+       "tooltip-ca-move": "Siirrä tämä sivu",
+       "tooltip-ca-watch": "Ližiä tämä sivu omah valvonduluvetteloh",
+       "tooltip-search": "Eči {{SITENAME}}",
+       "tooltip-search-go": "Mennä sivule, kudamal on sama nimi",
+       "tooltip-search-fulltext": "Eči sivuloi, kudamis on tädä tekstua",
+       "tooltip-p-logo": "Mene piäsivule",
+       "tooltip-n-mainpage": "Mene piäsivule",
+       "tooltip-n-mainpage-description": "Mene piäsivule",
+       "tooltip-n-portal": "Täs projektas, midä voit ruadua, kus midä on",
+       "tooltip-n-currentevents": "Ližätieduo aijankohtazis tapahtumis",
+       "tooltip-n-recentchanges": "Luvettelo vaste luajittulois wikimuutoksis",
+       "tooltip-n-randompage": "Kačo sattumastu sivuu",
+       "tooltip-n-help": "Täs voit kyzyö abuu",
+       "tooltip-t-whatlinkshere": "Kaikkien sivuloin luvettelo, kudamis on linki täh sivuh",
+       "tooltip-t-recentchangeslinked": "Jälgimäzet muutokset sivuloil, kudamile on linki täl sivul",
+       "tooltip-feed-atom": "Atom-syöttö täh sivuh",
+       "tooltip-t-contributions": "Listu tämän käyttäjän kirjutuksis",
+       "tooltip-t-upload": "Ližiä tiijostot",
+       "tooltip-t-specialpages": "Kaikkien erikozien sivuloin luvettelo",
+       "tooltip-t-print": "Tämän sivun tulostettavu versii",
+       "tooltip-t-permalink": "Pyzyi linki tämän sivun versieh",
+       "tooltip-ca-nstab-main": "Kačo piäsivun sizäldö",
+       "tooltip-ca-nstab-user": "Ozuta käyttäisivu",
+       "tooltip-ca-nstab-special": "Tämä on erikoine sivu, sidä ei voi korjata",
+       "tooltip-ca-nstab-project": "Ozuta projektusivu",
+       "tooltip-ca-nstab-image": "Kačo failan sivu",
+       "tooltip-ca-nstab-template": "Ozuta šablon",
+       "tooltip-ca-nstab-category": "Kategourien sivu",
+       "tooltip-save": "Tallenda muutokset",
+       "tooltip-preview": "Ezikačo muutokset. Ole hyvä, luaji nenga ainos enne tallendamistu!",
+       "tooltip-diff": "Ozuta sinun luajitut muutokset tekstah",
+       "tooltip-rollback": "Yhtel painalluksel poistua jälgimäine korjavus",
+       "tooltip-undo": "\"Kumua\" tuou järilleh aijemban edituičenduversien da avuau edituičenduankietan ezikaččelendutilas. Sen vuoh voi ližätä kumuandumotiivan yhtehvevos.",
+       "tooltip-summary": "Kirjuta lyhyt kuvavus",
+       "simpleantispam-label": "Anti-spam-tarkistus. \n<strong>älä</strong> täytä!",
+       "pageinfo-toolboxlink": "Sivun tiijot",
+       "pageinfo-protect-cascading-yes": "Muga",
+       "previousdiff": "Vahnembi muutos",
+       "nextdiff": "Uvvembi muutos →",
+       "file-info-size": "$1 × $2 pikselii, failan kogo: $3, MIME-laji: $4",
+       "file-nohires": "Ei korgiembua rezoluciedu suadavannu.",
+       "svg-long-desc": "SVG-failu, nimellizesti $1 × $2 pikselua, failan kogo: $3",
+       "show-big-image": "Alguperäine failu",
+       "show-big-image-preview": "Tämän failan kogo: $1.",
+       "show-big-image-other": "Toine {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pikselii",
+       "metadata": "Metatiijostot",
+       "metadata-help": "Failah kuulutah ližätiijot, kudamii tavan mugah ližätäh digikameroil libo skanneroil. Gu failua oldaneh korjattu jälles sen enzimästy julguamistu, erähät parametrat voijah erota nygözes kuvas.",
+       "metadata-fields": "Kuvan metatiedoloin kentät, kudamat ollah täs luvettelos, ruvetah nägymäh kuvan sivul, konzu metatiedoloin taulukko ei rodei nägyvis. Toizet kentät roijah sultetut automuattizesti.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Orientacii",
+       "exif-xresolution": "Horizontualine rezolucii",
+       "exif-yresolution": "Vertikualine rezolucii",
+       "exif-datetime": "Tiijoston muutospäivy da -aigu",
+       "exif-make": "Kameran valmistai",
+       "exif-model": "Kamerumodellu",
+       "exif-software": "Käytetty programmu",
+       "exif-exifversion": "Exif-versii",
+       "exif-colorspace": "Väritila",
+       "exif-datetimeoriginal": "Suaduloin tiedoloin päivy da aigu",
+       "exif-datetimedigitized": "Digituimizen päivy da aigu",
+       "exif-orientation-1": "Tavalline",
+       "exif-subjectdistancerange-0": "Tundematoi",
+       "namespacesall": "kai",
+       "monthsall": "kai",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "← ielline sivu",
+       "imgmultipagenext": "tulii sivu →",
+       "imgmultigo": "Mene!",
+       "imgmultigoto": "Mene sivule $1",
+       "table_pager_first": "Enzimäine sivu",
+       "table_pager_last": "Jälgimäine sivu",
+       "table_pager_limit_submit": "Mene",
+       "table_pager_empty": "Ei tuloksii",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pagize]])",
+       "specialpages": "Erikozet sivut",
+       "tag-filter": "[[Special:Tags|Tag]] filtru:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki|Merkii}}]]: $2)",
+       "tags-edit-existing-tags-none": "\"Nimidä\"",
+       "compare-page1": "Sivu 1",
+       "compare-page2": "Sivu 2",
+       "htmlform-no": "Ei",
+       "htmlform-yes": "Muga",
+       "logentry-delete-delete": "$1 {{GENDER:$2|iäreotettu}} sivu $3",
+       "logentry-move-move": "$1 {{GENDER:$2|siirretty}} sivu $3 kohtah $4",
+       "logentry-newusers-create": "Käyttäi $1 oli perustettu $2",
+       "logentry-upload-upload": "$1 {{GENDER:$2|päivitetty}} $3",
+       "rightsnone": "(nimidä)",
+       "searchsuggest-search": "Eči",
+       "mw-widgets-titleinput-description-new-page": "sivuu ei vie ole"
+}
index 758f34b..cc106dc 100644 (file)
        "linksearch-pat": "ଖୋଜା ପ୍ରଣାଳୀ:",
        "linksearch-ns": "ନେମସ୍ପେସ:",
        "linksearch-ok": "ଖୋଜନ୍ତୁ",
-       "linksearch-text": "\"*.wikipedia.org\" ପରି ୱାଇଲ୍ଡକାର୍ଡ଼ର ବ୍ୟବହାର କରାଯାଇଥାଇ ପାରେ ।\nଏକ ଉଚ୍ଚକୋଟୀର ଡୋମେନ ଲୋଡ଼ା, ଯଥା \"*.org\".<br />\nଅନୁମୋଦିତ {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।",
+       "linksearch-text": "\"*.wikipedia.org\" ପରି ୱାଇଲ୍ଡକାର୍ଡ଼ର ବ୍ୟବହାର କରାଯାଇଥାଇ ପାରେ ।\nଏକ ଉଚ୍ଚକୋଟୀର ଡୋମେନ ଲୋଡ଼ା, ଯଥା \"*.org\".<br />\nଅନୁମୋଦିତ {{PLURAL:$2|protocol|protocols}}: $1 (ଯଦି କୌଣସି ପ୍ରୋଟୋକଲ ଦିଆଯାଇନଥାଏ ତେବେ ଆପେ ଆପେ http:// ହୋଇଯାଇଥାଏ) ।",
        "linksearch-line": "$1 ଟି $2ରୁ ଯୋଡ଼ାଯାଇଅଛି ।",
        "linksearch-error": "କେବଳ ହୋଷ୍ଟ ନାମର ଆରମ୍ଭରେ ୱାଇଲ୍ଡକାର୍ଡ଼ ଦେଖାଯିବ ।",
        "listusersfrom": "ଏହି ନାମରେ ସଭ୍ୟ ଜଙ୍କ ନାମ ଦେଖାଇବେ:",
index 6c3561d..e3b19e2 100644 (file)
        "otherlanguages": "Kareng aliwang amanu",
        "redirectedfrom": "(Miyalis direksiun manibat king $1)",
        "redirectpagesub": "Bulung ning pamanaliling direksiun (redirect)",
+       "redirectto": "I-redirekta king:",
        "lastmodifiedat": "Tauli yang miyalilan ining bulung anyang $2, $1.",
        "viewcount": "Ining bulung linawe da neng {{PLURAL:$1|misan|$1 besis/ukdu}}.",
        "protectedpage": "Bulung a protektadu/makakambil",
        "toc": "Kalamnan",
        "showtoc": "pakit",
        "hidetoc": "isalikut",
+       "confirmable-yes": "Wa",
+       "confirmable-no": "Ali",
        "thisisdeleted": "Lawen o ibalik $1?",
        "viewdeleted": "Lon ya ing $1?",
        "restorelink": "{{PLURAL:$1|metung a edit a mebura|$1 edit a mebura}}",
        "upload-file-error-text": "Mika pamagkamaling pangkilub aniang susubukan nang maglalang pansamantalang simpan king server.\nPakiyaus me ing metung a talapanibala ([[Special:ListUsers/sysop|administrator]]).",
        "upload-misc-error": "E makikilalang pamagkamali king pamaglulan (unknown upload error)",
        "upload-misc-error-text": "Ating miliaring e makikilalang pamagkamali aniang maglulan.\nPakilawe mu nung ustu ya at maliari yang luban ing URL, at subukan mung pasibayu.\nNung atin pa muring prublema, maus kang talapanibala ([[Special:ListUsers/sysop|administrator]]).",
+       "upload-dialog-button-cancel": "E taglus",
+       "upload-dialog-button-done": "Meyari na",
+       "upload-dialog-button-save": "Isikap (save)",
+       "upload-dialog-button-upload": "Maglulan (upload)",
+       "upload-dialog-label-infoform-title": "Ding detalye",
+       "upload-dialog-label-infoform-name": "Lagyu",
+       "upload-dialog-label-infoform-description": "Pamilarawan",
        "upload-curl-error6": "E ne ayabut ing URL",
        "upload-curl-error6-text": "E ne ayabut ing mibieng URL.\nPakilawe mung pasibayu nung ustu ya ing URL at makasalangi ya ing karinan (site).",
        "upload-curl-error28": "Megisan na ing oras para king pamag-upload",
        "mailnologin": "Alang piparalan (no send address)",
        "mailnologintext": "Kailangan [[Special:UserLogin|maka-login]] ka at maki gaganang e-mail address kareng kekang  [[Special:Preferences|pinili]] ba kang makaparalang e-mail kareng aliwang talagamit.",
        "emailuser": "E-mail me ing talagamit a ini",
-       "emailpage": "E-mail talagamit",
        "emailpagetext": "Nung atin yang gaganang e-mail address ketang kayang pinili ning talagamit (user preferences) ing talagamit a ini, magparla yang metung a mensahi ing form king lalam. Lunto ya ing e-mail address a sinulat mu ketang kekang pinili ning talagamit ketang  \"From\" address (\"ibat kang\") ning sulat, ba yang makapakibat itang miparalan.",
        "defemailsubject": "e-mail ning {{SITENAME}}",
        "noemailtitle": "Alang e-mail address",
        "tooltip-pt-login": "Agkat da kang mag login, oneng e sapilitan iti.",
        "tooltip-pt-logout": "Mag log out",
        "tooltip-ca-talk": "Pamisabi-sabi tungkul king bulung kalamnan (content page)",
-       "tooltip-ca-edit": "Malyari meng samasan ing bulung a ini. Pakigamit me pamu ing \"pasinag a pipindutan\" bayu me isikap.",
+       "tooltip-ca-edit": "I-edit/alilan ya ing bulung a ini",
        "tooltip-ca-addsection": "Mangibili kang bayung dake o \"section\".",
        "tooltip-ca-viewsource": "Protektadu/makakambil ya ing bulung a ini. Malyari meng lon ing kayang pikuanan (source).",
        "tooltip-ca-history": "Deng milabas a bersion ning bulung a ini.",
        "version-license": "Lisensia",
        "version-software-product": "Produktu",
        "version-software-version": "Bersion",
+       "version-libraries-license": "Lisensya",
        "fileduplicatesearch": "Maintun simpan (file) a kapareu",
        "fileduplicatesearch-legend": "Maintun kapareu",
        "fileduplicatesearch-filename": "Lagyungsimpan (filename):",
index 1bf6dc2..5e0e4a8 100644 (file)
        "download": "Runnerlaade",
        "listredirects": "Lischt vun Weiderleidinge",
        "randompage": "Ennich Ardickel",
+       "randomincategory-submit": "OK",
        "randomredirect": "Random Weiderleiding",
        "statistics": "Nummere",
        "statistics-header-pages": "Nummere vun Bledder",
index 007387b..c39ce4c 100644 (file)
@@ -7,7 +7,8 @@
                        "Manuae",
                        "SPS",
                        "Xqt",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Ling'g unnaschdraische",
        "resetpass-abort-generic": "S'Passwoad weggsle isch vunna Eawaidarung unnabroche worre.",
        "resetpass-expired": "Doi Passwoad isch abgloffe. Gebbä naijes Passwoad oi.",
        "passwordreset": "Kennword zriggsedze",
-       "passwordreset-legend": "Kennword zriggsedze",
        "passwordreset-username": "Middawaida:",
        "passwordreset-capture": "E-Mail õgugge?",
        "changeemail": "E-Mail-Adress ännare",
index fea3d1c..4693f77 100644 (file)
@@ -79,7 +79,8 @@
                        "Kszapsza",
                        "Openbk",
                        "Doctore",
-                       "PiotrAntosz"
+                       "PiotrAntosz",
+                       "The Polish"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "actionthrottledtext": "Mechanizm obrony przed spamem ogranicza liczbę wykonań tej czynności w jednostce czasu. Usiłowałeś przekroczyć to ograniczenie. Spróbuj jeszcze raz za kilka minut.",
        "protectedpagetext": "Wyłączono możliwość edycji tej strony.",
        "viewsourcetext": "Tekst źródłowy strony można podejrzeć i skopiować.",
-       "viewyourtext": "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
+       "viewyourtext": "Tekst źródłowy <strong>zmodyfikowanej przez Ciebie</strong> strony możesz podejrzeć i skopiować.",
        "protectedinterface": "Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.\nBy dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.",
        "editinginterface": "<strong>Ostrzeżenie:</strong> Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.",
        "translateinterface": "Aby dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/ translatewiki.net], projekt lokalizacji oprogramowania MediaWiki.",
        "logouttext": "'''Nie jesteś już zalogowany.'''\n\nZauważ, że do momentu wyczyszczenia pamięci podręcznej przeglądarki niektóre strony mogą wyglądać tak, jakbyś wciąż był zalogowany.",
        "welcomeuser": "Witaj, $1!",
        "welcomecreation-msg": "Twoje konto zostało utworzone.\nMożesz zmienić swoje [[Special:Preferences|preferencje]], jeśli chcesz.",
-       "yourname": "Nazwa {{GENDER:|użytkownika|użytkowniczki}}",
+       "yourname": "Nazwa {{GENDER:|użytkownika|użytkowniczki}}:",
        "userlogin-yourname": "Nazwa użytkownika",
        "userlogin-yourname-ph": "Wprowadź swoją nazwę użytkownika",
        "createacct-another-username-ph": "Wprowadź nazwę użytkownika",
        "createacct-benefit-body2": "{{PLURAL:$1|strona|strony|stron}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktywny użytkownik|aktywnych użytkowników}} w ostatnim miesiącu",
        "badretype": "Wprowadzone hasła różnią się między sobą.",
+       "usernameinprogress": "Tworzenie konta dla tej nazwy użytkownika jest już w toku.\nProszę czekać.",
        "userexists": "Wybrana przez Ciebie nazwa użytkownika jest już zajęta.\nWybierz inną nazwę użytkownika.",
        "loginerror": "Błąd logowania",
        "createacct-error": "Błąd tworzenia konta",
        "creating": "Tworzenie $1",
        "editingsection": "Edytujesz $1 (sekcja)",
        "editingcomment": "Edytujesz $1 (nowa sekcja)",
-       "editconflict": "Twoje zmiany nie mogły zostać zapisane z powodu wystąpienia konfliktu edycji. Czy {{GENDER:|chcesz}} rozwiązać go ręcznie?",
+       "editconflict": "Konflikt edycji: $1",
        "explainconflict": "Ktoś zmienił treść strony w trakcie Twojej edycji.\nGórne pole zawiera tekst strony aktualnie zapisany w bazie danych.\nTwoje zmiany znajdują się w dolnym polu.\nBy wprowadzić swoje zmiany, musisz zmodyfikować tekst z górnego pola.\n'''Tylko''' tekst z górnego pola zostanie zapisany w bazie, gdy wciśniesz „{{int:savearticle}}”.",
        "yourtext": "Twój tekst",
        "storedversion": "Zapisana wersja",
        "yourdiff": "Różnice",
        "copyrightwarning": "Wkład na {{SITENAME}} jest udostępniany na licencji $2 (szczegóły w $1). Jeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />\nZapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych.\n'''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''",
        "copyrightwarning2": "Wszelki wkład na {{SITENAME}} może być edytowany, zmieniany lub usunięty przez innych użytkowników.\nJeśli nie chcesz, żeby Twój tekst był dowolnie zmieniany przez każdego i rozpowszechniany bez ograniczeń, nie umieszczaj go tutaj.<br />\nZapisując swoją edycję, oświadczasz, że ten tekst jest Twoim dziełem lub pochodzi z materiałów dostępnych na warunkach ''domeny publicznej'' lub kompatybilnych (zobacz także $1).\n'''PROSZĘ NIE WPROWADZAĆ MATERIAŁÓW CHRONIONYCH PRAWEM AUTORSKIM BEZ POZWOLENIA WŁAŚCICIELA!'''",
+       "editpage-cannot-use-custom-model": "Model zawartości tej strony nie może być zmieniony.",
        "longpageerror": "'''Błąd! Wprowadzony przez Ciebie tekst ma {{PLURAL:$1|1 kilobajt|$1 kilobajty|$1 kilobajtów}}. Długość tekstu nie może przekraczać {{PLURAL:$2|1 kilobajt|$2 kilobajty|$2 kilobajtów}}. Tekst nie może być zapisany.'''",
        "readonlywarning": "'''Uwaga! Baza danych została zablokowana do celów administracyjnych. W tej chwili nie można zapisać nowej wersji strony. Jeśli chcesz, może skopiować ją do pliku, aby móc zapisać ją później.'''\n\nAdministrator, który zablokował bazę, podał następujące wyjaśnienie: $1",
        "protectedpagewarning": "'''Uwaga! Możliwość modyfikacji tej strony została zabezpieczona. Mogą ją edytować jedynie użytkownicy z uprawnieniami administratora.'''\nOstatni wpis z rejestru jest pokazany poniżej.",
        "semiprotectedpagewarning": "'''Uwaga!''' Ta strona została zabezpieczona i tylko zarejestrowani użytkownicy mogą ją edytować.\nOstatni wpis z rejestru jest pokazany poniżej.",
-       "cascadeprotectedwarning": "'''Uwaga!''' Ta strona została zabezpieczona i tylko użytkownicy z uprawnieniami administratora mogą ją edytować. Strona ta jest zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:",
+       "cascadeprotectedwarning": "<strong>Uwaga:</strong> Ta strona została zabezpieczona i tylko użytkownicy z uprawnieniami administratora mogą ją edytować. Została ona osadzona w {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:",
        "titleprotectedwarning": "'''Uwaga! Utworzenie strony o tej nazwie zostało zabezpieczone. Do jej utworzenia wymagane są [[Special:ListGroupRights|specyficzne uprawnienia]].'''\nOstatni wpis z rejestru jest pokazany poniżej.",
        "templatesused": "{{PLURAL:$1|Szablon użyty|Szablony użyte}} w tym artykule:",
        "templatesusedpreview": "{{PLURAL:$1|Szablon użyty|Szablony użyte}} w tym podglądzie:",
        "revdelete-radio-unset": "Widoczny",
        "revdelete-suppress": "Utajnij informacje przed administratorami, tak samo jak przed innymi",
        "revdelete-unsuppress": "Wyłącz utajnianie dla odtwarzanej historii zmian",
-       "revdelete-log": "Powód",
+       "revdelete-log": "Powód:",
        "revdelete-submit": "Zaakceptuj dla {{PLURAL:$1|wybranej|wybranych}} wersji",
        "revdelete-success": "'''Uaktualniono widoczność wersji.'''",
        "revdelete-failure": "'''Widoczność wersji nie może zostać uaktualniona – '''\n$1",
        "revdelete-otherreason": "Inny lub dodatkowy powód:",
        "revdelete-reasonotherlist": "Inny powód",
        "revdelete-edit-reasonlist": "Edytuj listę przyczyn usunięcia",
-       "revdelete-offender": "Autor wersji",
+       "revdelete-offender": "Autor wersji:",
        "suppressionlog": "Rejestr utajniania",
        "suppressionlogtext": "Poniżej znajduje się lista usunięć i blokad utajnionych przed administratorami.\nZobacz [[Special:BlockList|rejestr blokad]], jeśli chcesz sprawdzić aktualne zakazy i blokady.",
        "mergehistory": "Scalanie historii stron",
        "mergehistory-autocomment": "Historia [[:$1]] scalona z [[:$2]]",
        "mergehistory-comment": "Historia [[:$1]] scalona z [[:$2]]: $3",
        "mergehistory-same-destination": "Strona źródłowa i docelowa nie mogą być takie same",
-       "mergehistory-reason": "Powód",
+       "mergehistory-reason": "Powód:",
        "mergelog": "Scalone",
        "revertmerge": "Rozdziel",
        "mergelogpagetext": "Poniżej znajduje się lista ostatnich scaleń historii zmian stron.",
        "search-category": "(kategoria $1)",
        "search-file-match": "(odpowiada zawartości pliku)",
        "search-suggest": "Czy chodziło Ci o: $1",
+       "search-rewritten": "Wyświetlone wyniki dla $1. zamiast tego wyszukaj $2.",
        "search-interwiki-caption": "Projekty siostrzane",
        "search-interwiki-default": "Wyniki od $1:",
        "search-interwiki-more": "(więcej)",
        "search-nonefound": "Brak wyników spełniających kryteria podane w zapytaniu.",
        "powersearch-legend": "Wyszukiwanie zaawansowane",
        "powersearch-ns": "Przeszukaj przestrzenie nazw:",
-       "powersearch-togglelabel": "Zaznacz",
+       "powersearch-togglelabel": "Zaznacz:",
        "powersearch-toggleall": "wszystko",
        "powersearch-togglenone": "nic",
        "powersearch-remember": "Zapamiętaj wybór dla kolejnych wyszukiwań",
        "rows": "Wiersze:",
        "columns": "Kolumny:",
        "searchresultshead": "Wyszukiwanie",
-       "stub-threshold": "Maksymalny (w bajtach) rozmiar strony oznaczanej jako <a href=\"#\" class=\"stub\">zalążek (stub)</a>",
+       "stub-threshold": "Maksymalny rozmiar strony oznaczanej jako zalążek ($1):",
+       "stub-threshold-sample-link": "przykład",
        "stub-threshold-disabled": "Wyłączone",
        "recentchangesdays": "Liczba dni prezentowanych w ostatnich zmianach:",
        "recentchangesdays-max": "(maksymalnie $1 {{PLURAL:$1|dzień|dni}})",
        "prefs-registration": "Data rejestracji:",
        "yourrealname": "Imię i nazwisko:",
        "yourlanguage": "Język interfejsu:",
-       "yourvariant": "Wariant języka treści",
+       "yourvariant": "Wariant języka treści:",
        "prefs-help-variant": "Preferowany wariant ortografii, który ma zostać użyty przy wyświetlaniu treści tej wiki.",
        "yournick": "Nowy podpis:",
        "prefs-help-signature": "Wypowiedzi na stronach dyskusji powinny być podpisywane za pomocą „<nowiki>~~~~</nowiki>”, dzięki temu automatycznie wstawiany jest Twój podpis wraz z bieżącą datą.",
        "email-address-validity-invalid": "Wymagany jest prawidłowy adres!",
        "userrights": "Zarządzanie uprawnieniami użytkowników",
        "userrights-lookup-user": "Zarządzaj grupami użytkownika",
-       "userrights-user-editname": "Wprowadź nazwę użytkownika",
+       "userrights-user-editname": "Wprowadź nazwę użytkownika:",
        "editusergroup": "Edytuj grupy użytkownika",
        "editinguser": "Zmiana uprawnień {{GENDER:$1|użytkownika|użytkowniczki}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Edytuj grupy użytkownika",
        "userrights-groupsmember": "Należy do:",
        "userrights-groupsmember-auto": "Na stałe należy do:",
        "userrights-groups-help": "Możesz zmienić przynależność tego użytkownika do podanych grup:\n* Zaznaczone pole oznacza przynależność użytkownika do danej grupy.\n* Niezaznaczone pole oznacza, że użytkownik nie należy do danej grupy.\n* Gwiazdka * informuje, że nie możesz usunąć użytkownika z grupy po dodaniu do niej lub dodać po usunięciu.",
-       "userrights-reason": "Powód",
+       "userrights-reason": "Powód:",
        "userrights-no-interwiki": "Nie masz dostępu do edycji uprawnień na innych wiki.",
        "userrights-nodatabase": "Baza danych $1 nie istnieje lub nie jest lokalna.",
        "userrights-nologin": "Musisz [[Special:UserLogin|zalogować się]] na konto administratora, by nadawać uprawnienia użytkownikom.",
        "userrights-notallowed": "Nie jesteś upoważniony do nadawania i odbierania uprawnień użytkownikom.",
-       "userrights-changeable-col": "Grupy, które możesz wybrać:",
-       "userrights-unchangeable-col": "Grupy, których nie możesz wybrać:",
+       "userrights-changeable-col": "Grupy, które możesz wybrać",
+       "userrights-unchangeable-col": "Grupy, których nie możesz wybrać",
        "userrights-conflict": "Konflikt zmiany uprawnień użytkownika! Proszę sprawdzić i potwierdzić swoje zmiany.",
        "userrights-removed-self": "Pomyślnie odebrałeś sobie uprawnienia. W związku z tym nie masz już dostępu do tej strony.",
-       "group": "Grupa",
+       "group": "Grupa:",
        "group-user": "Użytkownicy",
        "group-autoconfirmed": "Automatycznie zatwierdzeni użytkownicy",
        "group-bot": "Boty",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|obserwujący użytkownik|obserwujących użytkowników}}]",
        "rc_categories": "Ogranicz do kategorii (oddzielaj za pomocą „|”)",
-       "rc_categories_any": "Wszystkie",
+       "rc_categories_any": "Dowolna z wybranych",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajty|bajtów}} po zmianie",
        "newsectionsummary": "/* $1 */ nowa sekcja",
        "rc-enhanced-expand": "Pokaż szczegóły",
        "uploadlogpagetext": "Lista ostatnio przesłanych plików.\nPrzejdź na stronę [[Special:NewFiles|galerii nowych plików]], by zobaczyć pliki jako miniaturki.",
        "filename": "Nazwa pliku",
        "filedesc": "Opis",
-       "fileuploadsummary": "Opis",
+       "fileuploadsummary": "Opis:",
        "filereuploadsummary": "Zmiany w pliku:",
-       "filestatus": "Status prawny",
-       "filesource": "Źródło",
+       "filestatus": "Status prawny:",
+       "filesource": "Źródło:",
        "ignorewarning": "Zignoruj ostrzeżenia i wymuś zapisanie pliku",
        "ignorewarnings": "Ignoruj wszystkie ostrzeżenia",
        "minlength1": "Nazwa pliku musi składać się co najmniej z jednej litery.",
        "file-thumbnail-no": "Nazwa pliku zaczyna się od <strong>$1</strong>.\nWydaje się, że jest to pomniejszona grafika ''(miniaturka)''.\nJeśli posiadasz tę grafikę w pełnym rozmiarze – prześlij ją. Jeśli chcesz wysłać tę – zmień nazwę przesyłanego obecnie pliku.",
        "fileexists-forbidden": "Plik o tej nazwie już istnieje i nie może zostać nadpisany.\nJeśli chcesz przesłać plik cofnij się i prześlij go pod inną nazwą. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Plik o tej nazwie już istnieje we współdzielonym repozytorium plików.\nCofnij się i załaduj plik pod inną nazwą. [[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "Ten plik jest kopią {{PLURAL:$1|pliku|następujących plików:}}",
+       "file-exists-duplicate": "Ten plik jest kopią {{PLURAL:$1|pliku|następujących plików}}:",
        "file-deleted-duplicate": "Identyczny do tego plik ([[:$1]]) został wcześniej usunięty.\nSprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.",
        "file-deleted-duplicate-notitle": "Plik jest identyczny z plikiem, który został wcześniej usunięty, a jego nazwa została ukryta. Należy poprosić kogoś z możliwością przeglądania ukrytych danych, aby przeanalizował sytuację przed przystąpieniem do jego ponownego przesłania.",
        "uploadwarning": "Ostrzeżenie o przesyłaniu",
        "uploadvirus": "W pliku jest wirus! Szczegóły: $1",
        "uploadjava": "Ten plik zawiera deklarację klasy Java skompresowaną ZIP.\nPrzesyłanie plików Java nie jest dozwolone, ponieważ mogłoby zostać użyte do obchodzenia zabezpieczeń.",
        "upload-source": "Plik źródłowy",
-       "sourcefilename": "Nazwa pierwotna",
-       "sourceurl": "Źródłowy adres URL",
-       "destfilename": "Nazwa docelowa",
+       "sourcefilename": "Nazwa pierwotna:",
+       "sourceurl": "Źródłowy adres URL:",
+       "destfilename": "Nazwa docelowa:",
        "upload-maxfilesize": "Wielkość pliku ograniczona jest do $1",
        "upload-description": "Opis pliku",
        "upload-options": "Opcje przesyłania",
        "upload-too-many-redirects": "URL zawiera zbyt wiele przekierowań",
        "upload-http-error": "Wystąpił błąd protokołu HTTP – $1",
        "upload-copy-upload-invalid-domain": "Przesyłanie kopii z tej domeny nie jest dostępne.",
+       "upload-dialog-title": "Prześlij plik",
+       "upload-dialog-error": "Wystąpił błąd",
+       "upload-dialog-warning": "Pojawiło się ostrzeżenie",
+       "upload-dialog-button-cancel": "Anuluj",
+       "upload-dialog-button-done": "Gotowe",
+       "upload-dialog-button-save": "Zapisz",
+       "upload-dialog-button-upload": "Prześlij",
+       "upload-dialog-label-select-file": "Wybierz plik",
+       "upload-dialog-label-infoform-title": "Szczegóły",
+       "upload-dialog-label-infoform-name": "Nazwa",
+       "upload-dialog-label-infoform-description": "Opis",
+       "upload-dialog-label-usage-title": "Korzystanie",
+       "upload-dialog-label-usage-filename": "Nazwa pliku",
        "backend-fail-stream": "Nie można odczytać pliku $1.",
        "backend-fail-backup": "Nie można utworzyć kopii zapasowej pliku  $1 .",
        "backend-fail-notexists": "Plik  $1  nie istnieje.",
        "upload-curl-error6-text": "Podany adres URL jest nieosiągalny. Upewnij się, czy podany adres URL jest prawidłowy i czy dana strona jest dostępna.",
        "upload-curl-error28": "Upłynął limit czasu odpowiedzi",
        "upload-curl-error28-text": "Zbyt długi czas odpowiedzi serwera.\nSprawdź, czy strona działa, odczekaj kilka minut i spróbuj ponownie.\nMożesz także spróbować w czasie mniejszego obciążenia serwera.",
-       "license": "Licencja",
+       "license": "Licencja:",
        "license-header": "Licencja",
        "nolicense": "Nie wybrano",
        "licenses-edit": "Edytuj opcje licencji",
        "upload_source_file": "(wybrany plik na twoim komputerze)",
        "listfiles-delete": "usuń",
        "listfiles-summary": "Na tej stronie specjalnej prezentowane są wszystkie przesłane pliki.",
-       "listfiles_search_for": "Szukaj pliku o nazwie",
+       "listfiles_search_for": "Szukaj pliku o nazwie:",
        "listfiles-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
        "imgfile": "plik",
        "listfiles": "Lista plików",
        "filerevert": "Przywracanie $1",
        "filerevert-legend": "Przywracanie poprzedniej wersji pliku",
        "filerevert-intro": "Zamierzasz przywrócić '''[[Media:$1|$1]]''' do [$4 wersji z $3, $2].",
-       "filerevert-comment": "Powód",
+       "filerevert-comment": "Powód:",
        "filerevert-defaultcomment": "Przywrócono wersję z $2, $1",
        "filerevert-submit": "Przywróć",
        "filerevert-success": "Plik '''[[Media:$1|$1]]''' został cofnięty do [$4 wersji z $3, $2].",
        "filedelete-legend": "Usuń plik",
        "filedelete-intro": "Chcesz usunąć plik '''[[Media:$1|$1]]''' razem z całą jego historią.",
        "filedelete-intro-old": "Usuwasz wersję pliku '''[[Media:$1|$1]]''' z datą [$4 $3, $2].",
-       "filedelete-comment": "Powód",
+       "filedelete-comment": "Powód:",
        "filedelete-submit": "Usuń plik",
        "filedelete-success": "Usunięto plik '''$1'''.",
        "filedelete-success-old": "Usunięto plik '''[[Media:$1|$1]]''' w wersji z $3, $2.",
        "filedelete-nofile": "Plik '''$1''' nie istnieje.",
        "filedelete-nofile-old": "Brak zarchiwizowanej wersji '''$1''' o podanych atrybutach.",
-       "filedelete-otherreason": "Inny powód",
+       "filedelete-otherreason": "Inny powód:",
        "filedelete-reason-otherlist": "Inny powód",
        "filedelete-reason-dropdown": "* Najczęstsze przyczyny usunięcia\n** Naruszenie praw autorskich\n** Kopia już istniejącego pliku",
        "filedelete-edit-reasonlist": "Edycja listy powodów usunięcia pliku",
        "filedelete-maintenance-title": "Nie można usunąć pliku",
        "mimesearch": "Wyszukiwanie MIME",
        "mimesearch-summary": "Ta strona umożliwia wyszukiwanie plików ze względu na ich typ MIME.\nUżycie: typ_treści/podtyp albo typ_treści/*, np. <code>image/jpeg</code>.",
-       "mimetype": "Typ MIME",
+       "mimetype": "Typ MIME:",
        "download": "pobierz",
        "unwatchedpages": "Nieobserwowane strony",
        "listredirects": "Lista przekierowań",
        "double-redirect-fixed-maintenance": "Automatyczna naprawa podwójnego przekierowania podczas prac konserwacyjnych z [[$1]] na [[$2]].",
        "double-redirect-fixer": "Naprawiacz przekierowań",
        "brokenredirects": "Zerwane przekierowania",
-       "brokenredirectstext": "Poniższe przekierowania wskazują na nieistniejące strony.",
+       "brokenredirectstext": "Poniższe przekierowania wskazują na nieistniejące strony:",
        "brokenredirects-edit": "edytuj",
        "brokenredirects-delete": "usuń",
        "withoutinterwiki": "Strony bez odnośników do projektów w innych językach",
        "unusedimages": "Nieużywane pliki",
        "wantedcategories": "Brakujące kategorie",
        "wantedpages": "Najpotrzebniejsze strony",
-       "wantedpages-summary": "Najczęściej linkowane nieistniejące strony, z wyłączeniem stron, do których linkują wyłącznie przekierowania. Lista nieistniejących stron, do których linkują przekierowania, znajduje się na [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Lista najczęściej linkowanych, nieistniejących stron, z wyłączeniem takich stron, do których linkują wyłącznie przekierowania. By zobaczyć listę nieistniejących stron, do których linkują przekierowania, zobacz [[{{#special:BrokenRedirects}}|listę zerwanych przekierowań]].",
        "wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
        "wantedfiles": "Potrzebne pliki",
        "wantedfiletext-cat": "Następujące pliki są używane, ale nie istnieją. Pliki z obcych repozytoriów mogą być wymienione pomimo istnienia. Takie fałszywe wyniki zostaną <del>przekreślone</del>. Ponadto strony, które osadzają pliki, które nie istnieją, są wymienione w [[:$1]].",
        "usereditcount": "$1 {{PLURAL:$1|edycja|edycje|edycji}}",
        "usercreated": "{{GENDER:$3|Utworzył|Utworzyła|Utworzone}} $1 o $2",
        "newpages": "Nowe strony",
-       "newpages-username": "Nazwa użytkownika",
+       "newpages-username": "Nazwa użytkownika:",
        "ancientpages": "Najstarsze strony",
        "move": "Przenieś",
        "movethispage": "Przenieś tę stronę",
        "booksources-search": "Szukaj",
        "booksources-text": "Poniżej znajduje się lista odnośników do innych witryn, które pośredniczą w sprzedaży nowych i używanych książek, a także mogą posiadać dalsze informacje na temat poszukiwanej przez Ciebie książki.",
        "booksources-invalid-isbn": "Podany numer ISBN został rozpoznany jako nieprawidłowy. Sprawdź czy podany numer zgadza się z numerem zaczerpniętym ze źródła.",
-       "specialloguserlabel": "Kto",
-       "speciallogtitlelabel": "Co (tytuł lub użytkownik)",
+       "specialloguserlabel": "Kto:",
+       "speciallogtitlelabel": "Co (tytuł lub użytkownik):",
        "log": "Rejestr operacji",
        "all-logs-page": "Wszystkie publiczne operacje",
        "alllogstext": "Wspólny rejestr wszystkich typów operacji dla {{GRAMMAR:D.lp|{{SITENAME}}}}.\nMożesz zawęzić liczbę wyników poprzez wybranie typu rejestru, nazwy użytkownika albo tytułu strony.",
        "allpages": "Wszystkie strony",
        "nextpage": "Następna strona ($1)",
        "prevpage": "Poprzednia strona ($1)",
-       "allpagesfrom": "Strony o tytułach rozpoczynających się od",
-       "allpagesto": "Strony o tytułach kończących się na",
+       "allpagesfrom": "Strony o tytułach rozpoczynających się od:",
+       "allpagesto": "Strony o tytułach kończących się na:",
        "allarticles": "Wszystkie artykuły",
        "allinnamespace": "Wszystkie strony (w przestrzeni nazw $1)",
        "allpagessubmit": "Pokaż",
-       "allpagesprefix": "Pokaż strony o tytułach rozpoczynających się od",
+       "allpagesprefix": "Pokaż strony o tytułach rozpoczynających się od:",
        "allpagesbadtitle": "Podana nazwa jest nieprawidłowa, zawiera prefiks międzyprojektowy lub międzyjęzykowy. Może ona także zawierać w sobie jeden lub więcej znaków, których użycie w nazwach jest niedozwolone.",
        "allpages-bad-ns": "W {{GRAMMAR:MS.lp|{{SITENAME}}}} nie istnieje przestrzeń nazw „$1”.",
        "allpages-hide-redirects": "Ukryj przekierowania",
        "cachedspecial-refresh-now": "Najpóźniejszy widok.",
        "categories": "Kategorie",
        "categoriespagetext": "Strona przedstawia {{PLURAL:$1|kategorię zawierającą|listę kategorii zawierających}} strony lub pliki.\n[[Special:UnusedCategories|Nieużywane kategorie]] zostały ukryte.\nZobacz również [[Special:WantedCategories|brakujące kategorie]].",
-       "categoriesfrom": "Wyświetl kategorie, zaczynając od",
+       "categoriesfrom": "Wyświetl kategorie, zaczynając od:",
        "special-categories-sort-count": "sortowanie według liczby",
        "special-categories-sort-abc": "sortowanie alfabetyczne",
        "deletedcontributions": "Usunięty wkład użytkownika",
        "deletedcontributions-title": "Usunięty wkład użytkownika",
        "sp-deletedcontributions-contribs": "wkład",
        "linksearch": "Wyszukiwarka linków zewnętrznych",
-       "linksearch-pat": "Wzorzec wyszukiwania",
+       "linksearch-pat": "Wzorzec wyszukiwania:",
        "linksearch-ns": "Przestrzeń nazw:",
        "linksearch-ok": "Szukaj",
-       "linksearch-text": "Można użyć symboli wieloznacznych jak „*.wikipedia.org”.\nWymaga podania co najmniej domeny najwyższego poziomu np. „*.org”.<br />\n{{PLURAL:$2|Obsługiwany protokół|Obsługiwane protokoły}}: <code>$1</code> (jeśli nie podano, domyślny to http://).",
+       "linksearch-text": "Można użyć symboli wieloznacznych, takich jak „*.wikipedia.org”.\nWymaganie jest podanie co najmniej domeny najwyższego poziomu np. „*.org”.<br />\n{{PLURAL:$2|Obsługiwany protokół|Obsługiwane protokoły}}: $1 (jeśli nie podano, domyślny to http://).",
        "linksearch-line": "$1 link na stronie $2",
        "linksearch-error": "Symbolu wieloznacznego można użyć wyłącznie na początku nazwy hosta.",
-       "listusersfrom": "Pokaż użytkowników zaczynając od",
+       "listusersfrom": "Pokaż użytkowników zaczynając od:",
        "listusers-submit": "Pokaż",
        "listusers-noresult": "Nie znaleziono żadnego użytkownika.",
        "listusers-blocked": "({{GENDER:$1|zablokowany|zablokowana|zablokowany}})",
        "activeusers": "Lista aktywnych użytkowników",
        "activeusers-intro": "Poniżej znajduje się lista użytkowników, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}.",
        "activeusers-count": "w ciągu {{PLURAL:$3|ostatniego dnia|ostatnich $3 dni}} {{GENDER:$2|wykonał|wykonała|wykonał}} $1 {{PLURAL:$1|operację|operacje|operacji}}",
-       "activeusers-from": "Pokaż użytkowników zaczynając od",
+       "activeusers-from": "Pokaż użytkowników zaczynając od:",
        "activeusers-hidebots": "Ukryj boty",
        "activeusers-hidesysops": "Ukryj administratorów",
        "activeusers-noresult": "Nie odnaleziono żadnego użytkownika.",
        "emailuser": "Wyślij e‐mail do tego użytkownika",
        "emailuser-title-target": "Wyślij e-mail do {{GENDER:$1|tego użytkownika|tej użytkowniczki|tego użytkownika}}",
        "emailuser-title-notarget": "Wyślij wiadomość e‐mail",
-       "emailpage": "Wyślij e‐mail do użytkownika",
        "emailpagetext": "Możesz użyć poniższego formularza, aby wysłać wiadomość e‐mail do {{GENDER:$1|tego użytkownika|tej użytkowniczki}}.\nAdres e‐mailowy, który został przez Ciebie wprowadzony w [[Special:Preferences|Twoich preferencjach]], zostanie umieszczony w polu „Od”, dzięki czemu odbiorca będzie mógł Ci odpowiedzieć.",
        "defemailsubject": "{{SITENAME}} – e‐mail od użytkownika „$1”",
        "usermaildisabled": "E‐mail użytkownika jest wyłączony",
        "nowikiemailtext": "Ten użytkownik nie chce otrzymywać wiadomości e‐mail od innych użytkowników.",
        "emailnotarget": "Adresat nie istnieje lub podana nazwa użytkownika jest nieprawidłowa.",
        "emailtarget": "Wpisz nazwę użytkownika, który jest adresatem",
-       "emailusername": "Nazwa użytkownika",
+       "emailusername": "Nazwa użytkownika:",
        "emailusernamesubmit": "Wyślij",
        "email-legend": "Wyślij e‐mail do innego użytkownika {{GRAMMAR:D.lp|{{SITENAME}}}}",
-       "emailfrom": "Od",
-       "emailto": "Do",
-       "emailsubject": "Temat",
+       "emailfrom": "Od:",
+       "emailto": "Do:",
+       "emailsubject": "Temat:",
        "emailmessage": "Wiadomość:",
        "emailsend": "Wyślij",
        "emailccme": "Wyślij mi kopię mojej wiadomości.",
        "watchlistanontext": "Zaloguj się, aby obejrzeć lub edytować elementy listy obserwowanych.",
        "watchnologin": "Nie jesteś zalogowany",
        "addwatch": "Dodaj do listy obserwowanych",
-       "addedwatchtext": "Strona „[[:$1|$1]]” została dodana do Twojej [[Special:Watchlist|listy obserwowanych]].\nKażda zmiana treści tej strony lub związanej z nią strony dyskusji zostanie odnotowana na tej liście.",
+       "addedwatchtext": "Strona „[[:$1|$1]]” wraz ze swoją stroną dyskusji została dodana do Twojej [[Special:Watchlist|listy obserwowanych]].",
        "addedwatchtext-short": "Strona „$1” została dodana do twojej listy obserwowanych.",
        "removewatch": "Usuń z listy obserwowanych",
-       "removedwatchtext": "Strona „[[:$1]]” została usunięta z Twojej [[Special:Watchlist|listy obserwowanych]].",
+       "removedwatchtext": "Strona „[[:$1|$1]]” wraz ze swoją stroną dyskusji została usunięta z Twojej [[Special:Watchlist|listy obserwowanych]].",
        "removedwatchtext-short": "Strona „$1” została usunięta z twojej listy obserwowanych.",
        "watch": "Obserwuj",
        "watchthispage": "Obserwuj",
        "dellogpagetext": "Poniżej znajduje się lista ostatnio wykonanych usunięć.",
        "deletionlog": "rejestr usunięć",
        "reverted": "Przywrócono poprzednią wersję",
-       "deletecomment": "Powód",
+       "deletecomment": "Powód:",
        "deleteotherreason": "Inny lub dodatkowy powód:",
        "deletereasonotherlist": "Inny powód",
        "deletereason-dropdown": "* Najczęstsze przyczyny usunięcia\n** Spam\n** Wandalizm\n** Naruszenia praw autorskich\n** Prośba autora\n** Zerwane przekierowanie",
        "sessionfailure-title": "Błąd sesji",
        "sessionfailure": "Wystąpił problem z weryfikacją zalogowania.\nPolecenie zostało anulowane, aby uniknąć przechwycenia sesji.\nNaciśnij „wstecz” w przeglądarce, przeładuj stronę, po czym ponownie wydaj polecenie.",
        "changecontentmodel": "Edycja modelu zawartości strony",
+       "changecontentmodel-legend": "Zmienić model zawartości",
        "changecontentmodel-title-label": "Tytuł strony",
+       "changecontentmodel-model-label": "Nowy model zawartości",
        "changecontentmodel-reason-label": "Powód:",
+       "changecontentmodel-success-title": "Model zawartości został zmieniony",
+       "changecontentmodel-success-text": "Typ zawartości [[:$1]] został zmieniony.",
+       "changecontentmodel-cannot-convert": "Zawartość [[:$1]] nie może być przekształcona do typu $2.",
+       "changecontentmodel-nodirectediting": "Model zawartości $1 nie obsługuje bezpośredniego edytowania",
+       "log-name-contentmodel": "Rejestr zmian modelu zawartości",
        "logentry-contentmodel-change-revertlink": "Przywróć",
        "logentry-contentmodel-change-revert": "Przywróć",
        "protectlogpage": "Zabezpieczone",
        "protect-norestrictiontypes-text": "Ta strona nie może być chroniona, gdyż nie ma dla niej żadnych dostępnych typów ograniczeń.",
        "protect-norestrictiontypes-title": "Nieblokowalna strona",
        "protect-legend": "Potwierdź zabezpieczenie",
-       "protectcomment": "Powód",
-       "protectexpiry": "Czas wygaśnięcia",
+       "protectcomment": "Powód:",
+       "protectexpiry": "Czas wygaśnięcia:",
        "protect_expiry_invalid": "Podany czas automatycznego odbezpieczenia jest nieprawidłowy.",
        "protect_expiry_old": "Podany czas automatycznego odblokowania znajduje się w przeszłości.",
        "protect-unchain-permissions": "Odblokuj dodatkowe opcje zabezpieczania",
        "protect-locked-blocked": "Nie możesz zmienić poziomów zabezpieczenia, ponieważ jesteś zablokowany.\nObecne ustawienia dla strony '''$1''' to:",
        "protect-locked-dblock": "Nie można zmienić poziomu zabezpieczenia z powodu działającej blokady bazy danych. Obecne ustawienia dla strony '''$1''' to:",
        "protect-locked-access": "Nie masz uprawnień do zmiany poziomu zabezpieczenia strony. Obecne ustawienia dla strony '''$1''' to:",
-       "protect-cascadeon": "Ta strona jest zabezpieczona przed edycją, ponieważ jest używana przez {{PLURAL:$1|następującą stronę, która została zabezpieczona|następujące strony, które zostały zabezpieczone}} z włączoną opcją dziedziczenia. Zmiany stopnia zabezpieczenia tej strony nie wpłyną na dziedziczenie zabezpieczenia.",
+       "protect-cascadeon": "Ta strona jest zabezpieczona przed edycją, ponieważ jest osadzona w {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia. Zmiany stopnia zabezpieczenia tej strony nie wpłyną na dziedziczenie zabezpieczenia.",
        "protect-default": "Dostęp mają wszyscy użytkownicy",
        "protect-fallback": "Wymaga uprawnień „$1”",
        "protect-level-autoconfirmed": "Dozwolone tylko dla użytkowników automatycznie zatwierdzonych",
        "protect-expiry-indefinite": "na zawsze",
        "protect-cascade": "Dziedziczenie zabezpieczenia – zabezpiecz wszystkie strony zawarte na tej stronie.",
        "protect-cantedit": "Nie możesz zmienić poziomu zabezpieczenia tej strony, ponieważ nie masz uprawnień do jej edycji.",
-       "protect-othertime": "Inny okres",
+       "protect-othertime": "Inny okres:",
        "protect-othertime-op": "inny okres",
        "protect-existing-expiry": "Obecny czas wygaśnięcia: $2 o $3",
        "protect-existing-expiry-infinity": "Obecny czas wygaśnięcia: nieskończony",
-       "protect-otherreason": "Inny lub dodatkowy powód",
+       "protect-otherreason": "Inny lub dodatkowy powód:",
        "protect-otherreason-op": "Inny powód",
        "protect-dropdown": "*Najczęstsze powody zabezpieczenia\n** Częste wandalizmy\n** Częste spamowanie\n** Wojna edycyjna\n** Wygłupy",
        "protect-edit-reasonlist": "Edytuj listę przyczyn zabezpieczenia",
        "protect-expiry-options": "1 godzina:1 hour,1 dzień:1 day,1 tydzień:1 week,2 tygodnie:2 weeks,1 miesiąc:1 month,3 miesiące:3 months,6 miesięcy:6 months,1 rok:1 year,na zawsze:infinite",
-       "restriction-type": "Ograniczenia",
-       "restriction-level": "Stopień",
+       "restriction-type": "Ograniczenia:",
+       "restriction-level": "Stopień:",
        "minimum-size": "Minimalny rozmiar",
-       "maximum-size": "Maksymalny rozmiar",
+       "maximum-size": "Maksymalny rozmiar:",
        "pagesize": "(bajtów)",
        "restriction-edit": "edytowanie",
        "restriction-move": "przenoszenie",
        "undeletelink": "pokaż lub odtwórz",
        "undeleteviewlink": "pokaż",
        "undeleteinvert": "Odwróć zaznaczenie",
-       "undeletecomment": "Powód",
+       "undeletecomment": "Powód:",
        "undeletedrevisions": "odtworzono {{PLURAL:$1|1 wersję|$1 wersje|$1 wersji}}",
        "undeletedrevisions-files": "odtworzono $1 {{PLURAL:$1|wersję|wersje|wersji}} i $2 {{PLURAL:$2|plik|pliki|plików}}",
        "undeletedfiles": "odtworzył $1 {{PLURAL:$1|plik|pliki|plików}}",
        "contributions-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
        "nocontribs": "Brak zmian odpowiadających tym kryteriom.",
        "uctop": "(ostatnia)",
-       "month": "Do miesiąca (włącznie)",
-       "year": "Do roku (włącznie)",
+       "month": "Do miesiąca (włącznie):",
+       "year": "Do roku (włącznie):",
        "sp-contributions-newbies": "Pokaż wyłącznie wkład nowych użytkowników",
        "sp-contributions-newbies-sub": "Dla nowych użytkowników",
        "sp-contributions-newbies-title": "Wkład nowych użytkowników",
        "sp-contributions-talk": "dyskusja",
        "sp-contributions-userrights": "zarządzanie uprawnieniami użytkownika",
        "sp-contributions-blocked-notice": "To konto użytkownika jest obecnie zablokowane. Ostatni wpis rejestru blokad jest pokazany poniżej.",
-       "sp-contributions-blocked-notice-anon": "Ten adres IP jest obecnie zablokowany.\nPoniżej znajduje się ostatni wpis w rejestrze blokowania.",
+       "sp-contributions-blocked-notice-anon": "Ten adres IP jest obecnie zablokowany.\nOstatni wpis rejestru blokad jest pokazany poniżej.",
        "sp-contributions-search": "Szukaj wkładu",
-       "sp-contributions-username": "Adres IP lub nazwa użytkownika",
+       "sp-contributions-username": "Adres IP lub nazwa użytkownika:",
        "sp-contributions-toponly": "Pokaż wyłącznie ostatnie wersje",
        "sp-contributions-newonly": "Pokazuj tylko edycje tworzące nową stronę",
        "sp-contributions-submit": "Szukaj",
        "whatlinkshere": "Linkujące",
        "whatlinkshere-title": "Strony linkujące do „$1”",
-       "whatlinkshere-page": "Strona",
+       "whatlinkshere-page": "Strona:",
        "linkshere": "Następujące strony odwołują się do '''[[:$1]]''':",
        "nolinkshere": "Żadna strona nie odwołuje się do '''[[:$1]]'''.",
        "nolinkshere-ns": "Żadna strona nie odwołuje się do '''[[:$1]]''' w wybranej przestrzeni nazw.",
        "blockip": "Zablokuj {{GENDER:$1|użytkownika|użytkowniczkę}}",
        "blockip-legend": "Zablokuj użytkownika",
        "blockiptext": "Użyj poniższego formularza do zablokowania możliwości edycji spod określonego adresu IP lub konkretnemu użytkownikowi.\nBlokować należy jedynie po to, by zapobiec wandalizmom, zgodnie z [[{{MediaWiki:Policy-url}}|przyjętymi zasadami]].\nPodaj powód (np. umieszczając nazwy stron, na których dopuszczono się wandalizmu).",
-       "ipaddressorusername": "Adres IP lub nazwa użytkownika",
-       "ipbexpiry": "Upływa",
-       "ipbreason": "Powód",
+       "ipaddressorusername": "Adres IP lub nazwa użytkownika:",
+       "ipbexpiry": "Czas trwania:",
+       "ipbreason": "Powód:",
        "ipbreason-dropdown": "*Najczęstsze przyczyny blokad\n** Ataki na innych użytkowników\n** Naruszenie praw autorskich\n** Niedozwolona nazwa użytkownika\n** Open proxy lub Tor\n** Spamowanie\n** Usuwanie treści stron\n** Wprowadzanie fałszywych informacji\n** Wulgaryzmy\n** Wypisywanie bzdur na stronach",
        "ipb-hardblock": "Zablokuj możliwość edytowania przez zalogowanych użytkowników z tego adresu IP.",
        "ipbcreateaccount": "Zapobiegnij utworzeniu konta",
        "movepagetext": "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.\nPod starym tytułem zostanie umieszczona strona przekierowująca.\nMożesz automatycznie zaktualizować przekierowania wskazujące na tytuł przed zmianą.\nJeśli nie wybierzesz tej opcji, upewnij się po przeniesieniu strony, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]].\nJesteś odpowiedzialny za to, by linki w dalszym ciągu prowadziły tam, gdzie powinny.\n\nStrona '''nie''' zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.\nTo oznacza, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony.\n\n'''UWAGA!'''\nMoże to być drastyczna lub nieprzewidywalna zmiana w przypadku popularnych stron.\nUpewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.",
        "movepagetext-noredirectfixer": "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.\nPod starym tytułem zostanie umieszczona strona przekierowująca.\nUpewnij się po przeniesieniu strony, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]].\nJesteś odpowiedzialny za to, by linki w dalszym ciągu pokazywały tam, gdzie powinny.\n\nStrona '''nie''' zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.\nTo oznacza, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony.\n\n'''UWAGA!'''\nMoże to być drastyczna lub nieprzewidywalna zmiana w przypadku popularnych stron.\nUpewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.",
        "movepagetalktext": "Powiązana strona dyskusji, jeśli istnieje, będzie przeniesiona automatycznie, chyba że:\n*niepusta strona dyskusji już jest pod nową nazwą\n*usuniesz zaznaczenie z poniższego pola wyboru\n\nW takich przypadkach treść dyskusji można przenieść tylko ręcznie.",
-       "movearticle": "Przeniesienie strony",
+       "movearticle": "Przeniesienie strony:",
        "moveuserpage-warning": "'''Uwaga!''' Masz zamiar przenieść stronę użytkownika. Miej na uwadze, że zostanie przeniesiona tylko strona, a '''nazwa użytkownika pozostanie niezmieniona'''.",
        "movecategorypage-warning": "<strong>Uwaga!</strong> Masz zamiar przenieść stronę kategorii. Miej na uwadze, że strony, które należały do starej kategorii, <em>nie</em> zostaną przeniesione do nowej.",
        "movenologintext": "Przenoszenie stron jest możliwe dopiero po zarejestrowaniu się i [[Special:UserLogin|zalogowaniu]].",
        "cant-move-to-user-page": "Nie masz uprawnień do przenoszenia strony do strony użytkownika (za wyjątkiem podstron użytkownika).",
        "cant-move-category-page": "Nie masz uprawnień do przenoszenia stron kategorii.",
        "cant-move-to-category-page": "Nie masz uprawnień do przenoszenia strony do strony kategorii.",
-       "newtitle": "Nowy tytuł",
+       "newtitle": "Nowy tytuł:",
        "move-watch": "Obserwuj",
        "movepagebtn": "Przenieś stronę",
        "pagemovedsub": "Przeniesienie powiodło się",
        "exportnohistory": "----\n'''Uwaga:''' Wyłączono możliwość eksportowania pełnej historii stron z użyciem tego narzędzia z powodu kłopotów z wydajnością.",
        "exportlistauthors": "Dołącz pełną listę autorów dla każdej strony",
        "export-submit": "Eksportuj",
-       "export-addcattext": "Dodaj strony z kategorii",
+       "export-addcattext": "Dodaj strony z kategorii:",
        "export-addcat": "Dodaj",
-       "export-addnstext": "Dodaj strony z przestrzeni nazw",
+       "export-addnstext": "Dodaj strony z przestrzeni nazw:",
        "export-addns": "Dodaj",
        "export-download": "Zapisz do pliku",
        "export-templates": "Dołącz szablony",
        "allmessages-filter-unmodified": "Niezmodyfikowane",
        "allmessages-filter-all": "Wszystkie",
        "allmessages-filter-modified": "Zmodyfikowane",
-       "allmessages-prefix": "Tytuły rozpoczynające się od",
+       "allmessages-prefix": "Tytuły rozpoczynające się od:",
        "allmessages-language": "Język:",
        "allmessages-filter-submit": "Pokaż",
        "allmessages-filter-translate": "Przetłumacz",
        "import-mapping-default": "Importuj do domyślnych lokalizacji",
        "import-mapping-namespace": "Importuj do przestrzeni nazw:",
        "import-mapping-subpage": "Importuj jako podstrony strony:",
-       "import-upload-filename": "Nazwa pliku",
+       "import-upload-filename": "Nazwa pliku:",
        "import-comment": "Komentarz:",
        "importtext": "Korzystając na źródłowej wiki z narzędzia [[Special:Export|eksportu]] wyeksportuj plik.\nZapisz go na swoim dysku, a następnie prześlij go tutaj.",
        "importstart": "Trwa importowanie stron...",
        "tooltip-ca-nstab-main": "Zobacz stronę treści",
        "tooltip-ca-nstab-user": "Zobacz stronę osobistą użytkownika",
        "tooltip-ca-nstab-media": "Zobacz stronę pliku",
-       "tooltip-ca-nstab-special": "To jest strona specjalna. Nie możesz jej edytować.",
+       "tooltip-ca-nstab-special": "To jest strona specjalna i nie można jej edytować.",
        "tooltip-ca-nstab-project": "Zobacz stronę projektu",
        "tooltip-ca-nstab-image": "Zobacz stronę grafiki",
        "tooltip-ca-nstab-mediawiki": "Zobacz komunikat systemowy",
        "spam_reverting": "Przywracanie ostatniej wersji nie zawierającej linków do $1",
        "spam_blanking": "Wszystkie wersje zawierały odnośniki do $1. Czyszczenie strony.",
        "spam_deleting": "Wszystkie wersje zawierały linki do $1, usuwam.",
-       "simpleantispam-label": "Filtr antyspamowy.\n'''NIE''' wpisuj tu nic!",
+       "simpleantispam-label": "Filtr antyspamowy.\n<strong>Not</strong> wpisuj tu nic!",
        "pageinfo-title": "Informacje o „$1”",
        "pageinfo-not-current": "Niestety, te informacje nie są dostępne dla starych wersji stron.",
        "pageinfo-header-basic": "Podstawowe informacje",
        "imagelisttext": "Poniżej na {{PLURAL:$1||posortowanej $2}} liście {{PLURAL:$1|znajduje|znajdują|znajduje}} się '''$1''' {{PLURAL:$1|plik|pliki|plików}}.",
        "newimages-summary": "Na tej stronie specjalnej prezentowane są ostatnio przesłane pliki.",
        "newimages-legend": "Filtruj",
-       "newimages-label": "Nazwa pliku (lub jej fragment)",
+       "newimages-label": "Nazwa pliku (lub jej fragment):",
        "newimages-showbots": "Pokaż pliki przesłane przez boty",
        "noimages": "Brak plików do pokazania.",
        "ilsubmit": "Szukaj",
        "deletedwhileediting": "'''Uwaga!''' Ta strona została usunięta po tym, jak rozpoczął{{GENDER:|eś|aś|eś(‐aś)}} jej edycję!",
        "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|dyskusja]]) usun{{GENDER:$1|ął|ęła|ął(‐ęła)}} tę stronę po tym, jak rozpoczął{{GENDER:|eś|aś|eś(‐aś)}} jego edycję, podając jako powód usunięcia:\n: ''$2''\nCzy na pewno chcesz ją ponownie utworzyć?",
        "confirmrecreate-noreason": "Użytkownik [[User:$1|$1]] ([[User talk:$1|dyskusja]]) usunął tę stronę po rozpoczęciu przez Ciebie edycji. Potwierdź, czy naprawdę chcesz, ponownie utworzyć tę stronę.",
-       "recreate": "Strona została usunięta od czasu rozpoczęcia twojej edycji. Naciśnij „$1”, aby ją powtórnie utworzyć.",
+       "recreate": "Utwórz powtórnie",
        "confirm_purge_button": "Wyczyść",
        "confirm-purge-top": "Wyczyścić pamięć podręczną dla tej strony?",
        "confirm-purge-bottom": "Odświeżenie strony wyczyści pamięć podręczną i wymusi pokazanie jej aktualnej wersji.",
        "table_pager_first": "Pierwsza strona",
        "table_pager_last": "Ostatnia strona",
        "table_pager_limit": "Pokaż $1 pozycji na stronie",
-       "table_pager_limit_label": "Pozycji na stronie",
+       "table_pager_limit_label": "Pozycji na stronie:",
        "table_pager_limit_submit": "Pokaż",
        "table_pager_empty": "Brak wyników",
        "autosumm-blank": "UWAGA! Usunięcie treści (strona pozostała pusta)!",
        "fileduplicatesearch": "Wyszukiwanie duplikatów pliku",
        "fileduplicatesearch-summary": "Wyszukiwanie duplikatów pliku na podstawie wartości funkcji skrótu.",
        "fileduplicatesearch-legend": "Szukaj duplikatów pliku",
-       "fileduplicatesearch-filename": "Nazwa pliku",
+       "fileduplicatesearch-filename": "Nazwa pliku:",
        "fileduplicatesearch-submit": "Szukaj",
        "fileduplicatesearch-info": "$1 × $2 pikseli<br />Wielkość pliku: $3<br />Typ MIME: $4",
        "fileduplicatesearch-result-1": "Brak duplikatu pliku „$1”.",
        "intentionallyblankpage": "Tę stronę umyślnie pozostawiono pustą.",
        "external_image_whitelist": " #Pozostaw tę linię dokładnie tak, jak jest.<pre>\n#Wstaw poniżej fragmenty wyrażeń regularnych (tylko to, co znajduje się między //).\n#Wyrażenia te zostaną dopasowane do adresów URL zewnętrznych (bezpośrednio linkowanych) grafik.\n#Dopasowane adresy URL zostaną wyświetlone jako grafiki, w przeciwnym wypadku będzie pokazany jedynie link do grafiki.\n#Linie zaczynające się od # są traktowane jako komentarze.\n#We wpisach ma znaczenie wielkość znaków.\n\n#Wstaw wszystkie deklaracje wyrażeniami regularnymi poniżej tej linii. Pozostaw tę linię dokładnie tak, jak jest.</pre>",
        "tags": "Sprawdź zmiany w oparciu o wzorce tekstu",
-       "tag-filter": "Filtr [[Special:Tags|znaczników]]",
+       "tag-filter": "Filtr [[Special:Tags|znaczników]]:",
        "tag-filter-submit": "Filtr",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2)",
        "tags-title": "Znaczniki",
        "htmlform-cloner-create": "Dodaj więcej",
        "htmlform-cloner-delete": "Usuń",
        "htmlform-cloner-required": "Wymagana jest co najmniej jedna wartość.",
+       "htmlform-title-badnamespace": "[[:$1]] nie znajduje się w przestrzeni nazw „{{ns:$2}}”.",
+       "htmlform-title-not-creatable": "Nie można użyć „$1” do utworzenia tytułu strony",
+       "htmlform-title-not-exists": "[[:$1]] nie istnieje.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nie istnieje.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nie jest prawidłową nazwą użytkownika.",
        "sqlite-has-fts": "$1 z obsługą pełnotekstowego wyszukiwania",
        "sqlite-no-fts": "$1 bez obsługi pełnotekstowego wyszukiwania",
        "logentry-delete-delete": "$1 {{GENDER:$2|usunął|usunęła}} stronę $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|utworzył|utworzyła}} konto użytkownika $3",
        "logentry-newusers-byemail": "Konto $3 zostało utworzone przez użytkownika $1, hasło wysłano e-mailem",
        "logentry-newusers-autocreate": "$1 automatycznie {{GENDER:$2|utworzył|utworzyła|utworzył}} konto użytkownika",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|przeniósł|przeniosła}} ustawienia zabezpieczeń z $4 do $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup",
        "logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)",
        "feedback-error3": "Błąd – brak odpowiedzi API",
        "feedback-error4": "Błąd: Nie można wysłać danego tytułu opinii",
        "feedback-message": "Wiadomość:",
-       "feedback-subject": "Temat",
+       "feedback-subject": "Temat:",
        "feedback-submit": "Wyślij",
        "feedback-terms": "Rozumiem, że mój identyfikator User Agenta zawiera informacje o wersjach mojej przeglądarki i systemu operacyjnego oraz że będzie udostępniony publicznie wraz z moim komentarzem.",
        "feedback-termsofuse": "Zgadzam się udostępnić komentarz zgodnie z warunkami korzystania.",
        "limitreport-expensivefunctioncount": "Liczba wywołań kosztownych funkcji parsera",
        "expandtemplates": "Rozwijanie szablonów",
        "expand_templates_intro": "We wprowadzonym na tej stronie tekście źródłowym zostaną rozwinięte rekurencyjnie wszystkie szablony.\nRozwinięte także zostaną funkcje parsera takie jak\n<code><nowiki>{{</nowiki>#language:…}}</code> i zmienne jak\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nW zasadzie rozwijane jest prawie wszystko w podwójnych nawiasach klamrowych.",
-       "expand_templates_title": "Pozorny tytuł strony dla zmiennych takich jak {{FULLPAGENAME}}",
-       "expand_templates_input": "Tekst wejściowy",
+       "expand_templates_title": "Pozorny tytuł strony dla zmiennych takich jak {{FULLPAGENAME}}:",
+       "expand_templates_input": "Tekst wejściowy:",
        "expand_templates_output": "Rezultat",
        "expand_templates_xml_output": "wynik w formacie XML",
        "expand_templates_html_output": "Wyświetlanie surowego HTML",
        "special-characters-title-endash": "półpauza",
        "special-characters-title-emdash": "pauza",
        "special-characters-title-minus": "minus",
+       "mw-widgets-dateinput-no-date": "Nie wybrano daty",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
        "mw-widgets-titleinput-description-redirect": "przekierowanie do $1"
 }
index 046dc83..f42c471 100644 (file)
@@ -14,7 +14,8 @@
                        "לערי ריינהארט",
                        "Shirayuki",
                        "아라",
-                       "Kolega2357"
+                       "Kolega2357",
+                       "Purodha"
                ]
        },
        "tog-underline": "Anliure con la sotliniadura",
        "actionthrottled": "Assion limità",
        "actionthrottledtext": "Për evité che 'd gent ò 'd màchine an carìo dla rumenta, st'assion-sì as peul nen fesse tròp ëd soèns, e chiel a l'ha arpetula tròpe vire. Ch'a sia gentil, ch'a preuva torna antra dontré minute.",
        "protectedpagetext": "Sta pàgina-sì a l'è stàita blocà për evité 'd modìfiche o d'àutre assion.",
-       "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina:",
-       "viewyourtext": "A peul vëdde e copié la sorgiss ëd '''soe modìfiche''' a costa pàgina-sì:",
+       "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina.",
+       "viewyourtext": "A peul vëdde e copié la sorgiss ëd <strong>soe modìfiche</strong> a costa pàgina-sì.",
        "protectedinterface": "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part dl'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.\nPër gionté o modifiché dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "editinginterface": "<strong>Dossman!</strong> A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki.",
        "translateinterface": "Për gionté o modifiché le tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgine}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contributor}} recent",
        "badretype": "Le doe ciav che a l'ha scrivù a resto diferente antra 'd lor.",
+       "usernameinprogress": "Na creassion ëd cont për së stranòm a l'é già an cors. Ch'a l'abia passiensa.",
        "userexists": "Lë stranòm anserì a l'é già dovrà.\nPër piasì ch'a serna në stranòm diferent.",
        "loginerror": "Eror ën rintrand ant ël sistema",
        "createacct-error": "Eror durant la creassion dël cont",
        "passwordreset": "Ri-inissialisassion ëd la ciav",
        "passwordreset-text-one": "Ch'a completa 's formolari për reimposté soa ciav.",
        "passwordreset-text-many": "{{PLURAL:$1|Ch'a compila un dij camp për arsèive na ciav provisòria për pòsta eletrònica.}}",
-       "passwordreset-legend": "Riampostassion ëd la ciav",
        "passwordreset-disabled": "La reinissialisassion ëd le ciav a l'é stàita disabilità su sta wiki.",
        "passwordreset-emaildisabled": "Le fonsionalità ëd pòsta eletrònica a son ëstàite disativà su sta wiki.",
        "passwordreset-username": "Stranòm:",
        "resettokens": "Riamposté ij geton",
        "resettokens-text": "Ambelessì a peul riamposté ij geton ch'a permëtto d'acede a chèich dàit privà associà a sò cont.\n\nA dovrìa felo si për asar chiel a l'ha partagiaje con cheidun o si sò cont a l'é stàit compromëttù.",
        "resettokens-no-tokens": "A-i é gnun geton da riamposté.",
-       "resettokens-legend": "Riamposté ij geton.",
        "resettokens-tokens": "Geton:",
        "resettokens-token-label": "$1 (valor atual: $2)",
        "resettokens-watchlist-token": "Geton për ël fluss an sl'aragnà (Atom/RSS) ëd [[Special:Watchlist|modìfiche a le pàgine che as ten sot-euj]]",
        "yourdiff": "Diferense",
        "copyrightwarning": "Che a ten-a për piasì da ment che tute le contribussion a {{SITENAME}} as consìdero dàite sota a na licensa ëd la sòrt $2 (che a varda $1 për avèj pì 'd detaj).\nSe a veul nen che sò test a peula esse modificà e distribuì da qualsëssìa përson-a sensa gnun-a limitassion ëd gnun-a sòrt, che a lo buta pa ambelessì.<br />\nËn mandand ës test-sì chiel as fa garant sota soa responsabilità che ël test a l'ha scrivusslo despërchiel, ò pura che a l'ha tracopialo da na sorgiss ëd pùblich domini, ò da n'àutra sorgiss dla midema sòrt.\n'''Anserì mai dël material coatà da drit d'autor sensa avèj n'autorisassion për felo!'''",
        "copyrightwarning2": "Për piasì, che a ten-a da ment che tute le contribussion a {{SITENAME}} a peulo esse modificà ò scancelà da d'àutri contributor. Se a veul nen che lòn che a scriv a ven-a modificà sensa limitassion ëd gnun-a sòrt, che a lo manda nen ambelessì.<br />\nAnt l'istess temp, ën mandand dël material un as pija la responsabilità dë dì che a l'ha scrivusslo daspërchiel, ò pura che a l'ha copialo da na sorgiss ëd domini pùblich, ò pura da 'nt n'àutra sorgiss dla midema sòrt (che a varda $1 për avèj pì d'anformassion).\n'''Che a manda pa dël material coata da drit d'autor sensa avèj avù ël përmess ëd felo!'''",
+       "editpage-cannot-use-custom-model": "Ël model ëd contnù ëd sa pàgina a peul nen esse modificà.",
        "longpageerror": "'''EROR: Ël test che a l'ha mandà a l'é longh {{PLURAL:$1|un kilobyte|$1 kilobytes}}, che a resta pì che ël lìmit màssim {{PLURAL:$2|d'un kilobyte|ëd $2 kilobyte}}.''' Parèj as peul pa salvesse.",
        "readonlywarning": "'''Avis: La base ëd dat a l'é stàita blocà për manutension, e donca a podrà pa salvesse soe modìfiche tut sùbit.'''\nA peul esse che a-j ven-a còmod copiesse via sò test e ancoless-lo an n'archivi ëd test e goernelo për pi tard.\n\nL'aministrator che a l'ha fàit ël blocagi a l'ha dàit costa spiegassion: $1",
        "protectedpagewarning": "'''Avis: costa pàgina-sì a l'é stàita protegiùa an manera che mach j'utent con la qualìfica da aministrator a peulo feje dle modìfiche.'''\nL'ùltima vos dël registr a l'é smonùa sì-sota për arferiment:",
        "semiprotectedpagewarning": "'''Nòta:''' Costa pàgina-sì a l'é stàita blocà an manera che mach j'utent registrà a peulo modifichela.\nL'ùltima vos dël registr a l'é smonùa sì-sota për arferiment:",
-       "cascadeprotectedwarning": "'''Tension:''' Sta pàgina a l'é stàita blocà an manera che mach j'utent con la qualìfica da aministrator a peulo modifichela, për via che a l'é comprèisa an {{PLURAL:$1|costa pàgina-sì|an coste pàgine-sì}} ch'a l'han ël sistema ëd protession a cascada:",
+       "cascadeprotectedwarning": "<strong>Tension:</strong> Sta pàgina a l'é stàita blocà an manera che mach j'utent con la qualìfica da aministrator a peulo modifichela, për via che a l'é comprèisa an {{PLURAL:$1|costa pàgina-sì|an coste pàgine-sì}} ch'a l'han ël sistema ëd protession a cascada:",
        "titleprotectedwarning": "'''Avis: sta pàgina-sì a l'é stàita blocà an manera che a-i é dabzògn ëd [[Special:ListGroupRights|drit specìfich]] për creela.'''\nL'ùltima vos dël registr a l'é smonùa sì-sota për arferiment:",
        "templatesused": "{{PLURAL:$1|Stamp}} dovrà da costa pàgina-sì:",
        "templatesusedpreview": "{{PLURAL:$1|Stamp}} dovrà an costa preuva:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oget veuid",
        "content-json-empty-array": "Tàula veuida",
+       "duplicate-args-warning": "<strong>Atension:</strong> [[:$1]] a arciama [[:$2]] con pe che un valor për ël paràmeter \"$3\". Mach l'ùltim valor fornì a sarà dovrà.",
        "duplicate-args-category": "Pàgine ch'a deuvro d'argoment dobi ant j'arceste dë stamp",
        "duplicate-args-category-desc": "La pàgina a conten cj'arceste dë stamp che deuvro ëd duplicà d'argoment, tanme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Atension:''' Costa pàgina a l'ha tròpe ciamà costose a le fonsions d'anàlisi sintàtica.\n\nA dovrìa essnie men che {{PLURAL:$2|$2}}, adess a-i na j'é {{PLURAL:$1|$1}}.",
        "search-category": "(categorìa $1)",
        "search-file-match": "(a corëspond al contnù d'archivi)",
        "search-suggest": "Vorìi-lo pa dì: $1",
+       "search-rewritten": "Visualisassion dj'arzultà për $1. Sërché nopà $2.",
        "search-interwiki-caption": "Proget frej",
        "search-interwiki-default": "Arzultà da $1:",
        "search-interwiki-more": "(ëd pì)",
        "rows": "Righe:",
        "columns": "Colòne:",
        "searchresultshead": "Specifiché soe preferense d'arserca",
-       "stub-threshold": "Valor mìnim për j'<a href=\"#\" class=\"stub\">anliure a jë sbòss</a>:",
+       "stub-threshold": "Valor mìnim për buté an forma j'anliure dë sbòss ($1):",
+       "stub-threshold-sample-link": "esempi",
        "stub-threshold-disabled": "Disabilità",
        "recentchangesdays": "Vàire dì smon-e ant j'ùltime modìfiche:",
        "recentchangesdays-max": "(al pì $1 {{PLURAL:$1|di|di}})",
        "badsig": "Soa firma a l'é nen giusta, che a controla j'istrussion HTML.",
        "badsiglength": "Sò stranòm a l'é tròp longh.\nA deuv nen esse pì longh che $1 {{PLURAL:$1|caràter|caràter}}.",
        "yourgender": "'Me ch'a preferiss esse descrivù?",
-       "gender-unknown": "I preferisso nen dilo",
+       "gender-unknown": "Cand a parlërà ëd chiel, ël programa a dovrërà dle paròle ëd géner neutral, s'a l'é possìbil",
        "gender-male": "Chiel a modìfica dle pàgine dla wiki",
        "gender-female": "Chila a modìfica dle pàgine dla wiki",
        "prefs-help-gender": "Definì coste preferense a l'é opsional.\nËl programa a deuvra sò valor për adressesse a chiel e massionelo a j'àutri an dovrand ël géner gramatical giust.\nCosta anformassion a sarà pùblica.",
        "newpageletter": "N",
        "boteditletter": "t",
        "number_of_watching_users_pageview": "[tnùa sot-euj da {{PLURAL:$1|n'utent|$1 utent}}]",
-       "rc_categories": "Limité a le categorìe (che a jë scriva separand-je antra 'd lor con un \"|\")",
-       "rc_categories_any": "Qualsëssìa",
+       "rc_categories": "Limité a le categorìe (che a jë scriva separand-je antra 'd lor con un \"|\"):",
+       "rc_categories_any": "Un-a qualsëssìa ëd cole selessionà",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} apress ij cambi",
        "newsectionsummary": "/* $1 */ session neuva",
        "rc-enhanced-expand": "Mostré ij detaj",
        "uploaddisabledtext": "La possibilità ëd carié dj'archivi a l'é staita disabilità.",
        "php-uploaddisabledtext": "Ij cariament d'archivi a son disabilità an PHP.\nPër piasì, ch'a controla l'ampostassion file_uploads.",
        "uploadscripted": "St'archivi-sì a l'ha andrinta chèich-còs (dël còdes HTML ò pura un senari) che a podrìa esse travajà mal da chèich programa ëd navigassion.",
+       "upload-scripted-pi-callback": "Impossìbil carié n'archivi ch'a conten d'anstrussion ëd tratament ëd feuj dë stil XML.",
+       "uploaded-script-svg": "Element ëscrivìbil «$1» trovà ant l'archivi SVG carià.",
+       "uploaded-hostile-svg": "CSS nen sigur trovà ant l'element dë stil ëd n'archivi SVG carià.",
+       "uploaded-event-handler-on-svg": "Fissé dj'atribù ëd gestion d'eveniment <code>$1=\"$2\"</code> a l'é nen përmëttù ant j'archivi SVG.",
+       "uploaded-href-attribute-svg": "J'atribù <code>&lt;$1 $2=\"$3\"&gt;</code> con un bërsaj nen local (për esempi http://, javascript:, e via fòrt) a son nen përmëttù ant j'archivi SVG.",
+       "uploaded-href-unsafe-target-svg": "href ver un bërsaj nen sigur <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
+       "uploaded-animate-svg": "Trovà na tichëtta «animate», ch'a podrìa modifiché ël href an dovrand l'atribù «from» <code>&lt;$1 $2=\"$3\"&gt;</code> ant l'archivi SVG carià.",
+       "uploaded-setting-event-handler-svg": "Ël posissionament dj'atribù ëd mansé a l'é blocà, <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
+       "uploaded-setting-href-svg": "L’usage dla tichëtta «set» për gionté n'atribù «href» a l’element pare a l'é blocà.",
        "uploadscriptednamespace": "S'archivi SVG a conten në spassi nominal «$1» nen autorisà",
        "uploadinvalidxml": "L'XML ant l'archivi carià a l'ha nen podù esse analisà.",
        "uploadvirus": "St'archivi-sì a l'han andrinta un '''vìrus!''' Detaj: $1",
        "randomincategory-nopages": "A-i é gnun-e pàgine ant la categorìa [[:Category:$1|$1]].",
        "randomincategory-category": "Categorìa:",
        "randomincategory-legend": "Pàgina a l'ancàpit ant la categorìa",
+       "randomincategory-submit": "Va",
        "randomredirect": "Na ridiression qualsëssìa",
        "randomredirect-nopages": "A-i é pa gnun-a ridiression ant lë spassi nominal \"$1\".",
        "statistics": "Statìstiche",
        "nmembers": "$1 {{PLURAL:$1|element|element}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|mèmber}}",
        "nrevisions": "{{PLURAL:$1|na revision|$1 revision}}",
-       "nviews": "{{PLURAL:$1|na consultassion|$1 consultassion}}",
        "nimagelinks": "Dovrà dzora a $1 {{PLURAL:$1|pàgina|pàgine}}",
        "ntransclusions": "dovrà dzora a $1 {{PLURAL:$1|pàgina|pàgine}}",
        "specialpage-empty": "Pàgina veujda.",
        "linksearch-pat": "Schema d'arsërca:",
        "linksearch-ns": "Spassi nominal:",
        "linksearch-ok": "Sërché",
-       "linksearch-text": "As peulo dovresse dij ciapatut com \"*.wikipedia.org\".\nA-i é dabzògn almanch d'un domini a livel pi àut, për esempi \"*.org\".<br />\n{{PLURAL:$2|Protocòl|Protocòj}} ch'as peulo dovresse: <code>$1</code> (predefinì http:// se gnun protocòl a l'é specificà).",
+       "linksearch-text": "As peulo dovresse dij ciapatut com \"*.wikipedia.org\".\nA-i é dabzògn almanch d'un domini a livel pi àut, për esempi \"*.org\".<br />\n{{PLURAL:$2|Protocòl|Protocòj}} ch'as peulo dovresse: $1 (predefinì http:// se gnun protocòl a l'é specificà).",
        "linksearch-line": "$1 a l'ha n'anliura ch'a-j riva dzora da $2",
        "linksearch-error": "Ij ciapatut as peulo butesse mach an prinsipi dël nòm dël sërvent.",
        "listusersfrom": "Smon-me j'utent a parte da:",
        "emailuser": "Mandeje un mëssagi eletrònich a st'utent-sì",
        "emailuser-title-target": "Mandé un mëssagi ëd pòsta eletrònica a cost {{GENDER:$1|utent}}",
        "emailuser-title-notarget": "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
-       "emailpage": "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
        "emailpagetext": "A peul dovré ël formolari sì-sota për mandé un mëssagi ëd pòsta eletrònica a st'{{GENDER:$1|utent}}-sì.\nL'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|sò gust]] a sarà butà ant l'adrëssa «Da» ëd sò mëssagi, parèj chi ch'a l'arsèiv a podrà rësponde diretament a chiel.",
        "defemailsubject": "Mëssagi da l'utent \"$1\"",
        "usermaildisabled": "Pòsta eletrònica dl'utent disabilità",
        "emailccsubject": "Còpia dël mëssagi mandà a $1: $2",
        "emailsent": "Mëssagi eletrònich mandà",
        "emailsenttext": "Sò mëssagi eletrònich a l'é stàit mandà",
-       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «{{int:emailpage}}» ëd {{SITENAME}}.",
+       "emailuserfooter": "Ës mëssagi eletrònich a l'é stàit mandà da $1 a $2 con la fonsion «{{int:emailuser}}» ëd {{SITENAME}}.",
        "usermessage-summary": "A l'ha lassà un mëssagi ëd sistema.",
        "usermessage-editor": "Mëssagerìa ëd sistema",
        "watchlist": "Ròba che as ten sot-euj",
        "tooltip-pt-logout": "Seurte da",
        "tooltip-pt-createaccount": "I-j consejoma ëd creé un cont e ëd rintré ant ël sistema; però a l'é nen obligatòri",
        "tooltip-ca-talk": "Discussion ansima a sta pàgina ëd contnù.",
-       "tooltip-ca-edit": "A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.",
+       "tooltip-ca-edit": "Modifiché costa pàgina",
        "tooltip-ca-addsection": "Ancaminé na neuva session",
        "tooltip-ca-viewsource": "Sta pàgina-sì a l'é protegiùa.\nA peul visualisene la sorgiss",
        "tooltip-ca-history": "Veje version dla pàgina.",
        "tooltip-ca-nstab-main": "Vardé la pàgina ëd contnù.",
        "tooltip-ca-nstab-user": "Vardé la pàgina Utent.",
        "tooltip-ca-nstab-media": "Vardé la pàgina dël mojen",
-       "tooltip-ca-nstab-special": "Costa a l'é na pàgina special, a peul nen modifichela.",
+       "tooltip-ca-nstab-special": "Costa a l'é na pàgina special, e a peul nen esse modificà",
        "tooltip-ca-nstab-project": "Vardé la pàgina proteta.",
        "tooltip-ca-nstab-image": "Vardé la pàgina dl'archivi",
        "tooltip-ca-nstab-mediawiki": "Vardé ël mëssagi ëd sistema.",
        "spam_reverting": "Butà andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
        "spam_blanking": "Pàgina dësvujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
        "spam_deleting": "Scancelà, dagià che tute le revision a contnisìo dle liure a $1",
-       "simpleantispam-label": "Contròl contra la rumenta.\nCompilé '''NEN''' sòn!",
+       "simpleantispam-label": "Contròl contra la rumenta.\nCompilé <strong>NEN</strong> sòn!",
        "pageinfo-title": "Anformassion për «$1»",
        "pageinfo-not-current": "J'anformassion a peulo mach esse smonùe për la revision an cors.",
        "pageinfo-header-basic": "Anformassion ëd base",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tratin en",
        "special-characters-title-emdash": "tratin em",
-       "special-characters-title-minus": "segn meno"
+       "special-characters-title-minus": "segn meno",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index 472daa4..8c10941 100644 (file)
        "about": "بارے چ",
        "article": "آرٹیکل والا صفہ",
        "newwindow": "(نئی ونڈو چ کھولو)",
-       "cancel": "ختم",
+       "cancel": "مکاؤ",
        "moredotdotdot": "مزید۔۔۔۔",
        "mypage": "میرا صفہ",
        "mytalk": "میریاں گلاں",
        "actions": "کم",
        "namespaces": "ناواں دی جگہ:",
        "variants": "قسماں",
+       "navigation-heading": "کھوج پتر",
        "errorpagetitle": "مسئلہ",
        "returnto": "واپس $1 چلو",
        "tagline": " {{SITENAME}} توں",
        "permalink": "پکا جوڑ",
        "print": "چھاپو",
        "view": "وکھالہ",
+       "view-foreign": "$1 تے ویکھو",
        "edit": "لکھو",
        "create": "بناؤ",
+       "create-local": "آپنی لکھت رلاؤ",
        "editthispage": "اس صفحہ تے لکھو",
        "create-this-page": "اے صفحہ بناؤ",
        "delete": "مٹاؤ",
        "articlepage": "مضمون آلا صفحہ",
        "talk": "گل بات",
        "views": "وکھالے",
-       "toolbox": "اوزار ڈبہ",
+       "toolbox": "اوزار",
        "userpage": "ورتن آلے دا صفہ ویکھو",
        "projectpage": "ویونت والا صفہ ویکھو",
        "imagepage": "فائل آلا صفہ ویکھو",
        "viewhelppage": "مدد آلا صفحہ ویکھو",
        "categorypage": "گٹھ آلا صفحہ ویکھو",
        "viewtalkpage": "گلاں باتاں وکھاؤ",
-       "otherlanguages": "دÙ\88جÛ\8cاں Ø²Ø¨Ø§Ù\86ں وچ",
+       "otherlanguages": "دÙ\88جÛ\8cاں Ø¨Ù\88Ù\84Û\8cاں وچ",
        "redirectedfrom": "(لیایا گیا $1)",
        "redirectpagesub": "صفحہ ریڈائریکٹ کرو",
+       "redirectto": "اگے کرو:",
        "lastmodifiedat": "This page was last modified on $1, at $2.\nاس صفحے نوں آخری آری $1 تریخ نوں $2 وجے بدلیا گیا۔",
        "viewcount": "اس صفحے نوں {{PLURAL:$1|اک واری|$1 واری}} کھولیا گیا اے۔",
        "protectedpage": "بجایا صفحہ",
        "aboutpage": "Project:بارے وچ",
        "copyright": "مال $1 دے تھلے ہے گا اے۔",
        "copyrightpage": "{{ns:project}}:نقل دے حق",
-       "currentevents": "اج Ú©Ù\84 Ø¯Û\92 Ù\88اÙ\82عات",
-       "currentevents-url": "Project:اج Ú©Ù\84 Ø¯Û\92 Ù\88اÙ\82عات",
+       "currentevents": "اج Ú©Ù\84 Ø¯Û\8cاں Ú¯Ù\84اں",
+       "currentevents-url": "Project:اج Ú©Ù\84 Ø¯Û\8cاں Ú¯Ù\84اں",
        "disclaimers": "منکرنا",
        "disclaimerpage": "Project:عام منکرنا",
        "edithelp": "لکھن وچ مدد",
        "site-atom-feed": "$1 Atom Feed",
        "page-rss-feed": "\"$1\" RSS Feed",
        "page-atom-feed": "\"$1\" Atom Feed",
-       "red-link-title": "$1 (اÛ\92 ØµÙ\81Ø­ہ حلے تک نئیں بنایا گیا)",
+       "red-link-title": "$1 (اÛ\8cÛ\81 ØµÙ\81ہ حلے تک نئیں بنایا گیا)",
        "sort-descending": "ونڈ تھلے ول",
        "sort-ascending": "ونڈ اتے ول",
        "nstab-main": "صفہ",
        "cannotdelete": "صفحہ یا فائل \"$1\" نوں مٹایا نا جاسکیا۔\nاینوں پہلاں توں ای کسے نے مٹایا ہوۓ گا۔",
        "cannotdelete-title": "صفہ مٹا نئیں سکدے \"$1\"",
        "badtitle": "پیڑا عنوان",
-       "badtitletext": "منگیا گۓ صفحہ دا ناں غلط اے، خالی اے یا غلط تریقے نال جوڑیا گیا اے۔\nہوسکدا اے ایدے چ اک دو ھندسے ایسے ہون جیڑے عنوان وچ استعمال نہیں کیتے جاسکدے۔",
+       "badtitletext": "منگیا گۓ صفے دا ناں غلط اے، خالی، یا ایہ غلط ول نال جوڑیا گیا اے۔\nہوسکدا اے ایدے چ اک دو ھندسے ایسے ہون جیڑے ناں وچ ورتے نہیں جاسکدے۔",
        "perfcached": "تھلے دتا گیا ڈیٹا کاشیڈ اے تے پانویں نواں ناں ہووے. زیادہ توں زیادہ کاشے چ  {{PLURAL:$1|اک نتیجہ ہووے|$1 نتیجے ہوون}} گے.",
        "perfcachedts": "تھلے دتا گیا ڈیٹا کاشیڈ اے تے  $1 نوں نواں کیتا گیا۔ زیادہ توں زیادہ {{PLURAL:$4|اک نتیجہ ہووے|$4 نتیجے ہوون}} نتیجے کاشے چ ہیگے نیں .",
        "querypage-no-updates": "اس صفحے نوں اپڈیٹ فلحال نئیں کیتا جا سکدا۔\nایدا مال ہلے نواں نئیں کیتا جاۓ گا۔",
        "virus-unknownscanner": "اندیکھا اینٹیوائرس:",
        "logouttext": "'''تسی لاگ آؤٹ ہوگۓ او.'''\nتسی   {{SITENAME}} نوں گمنامی چ ورت سکدے او یا تسی <span class='plainlinks'>[$1 لاگ ان دوبارہ]</span> ہوجاؤ اوسے ناں توں یا وکھرے ورتن والے توں۔ اے گل چیتے رکھنا جے کج صفیاں تے تسی لاگ ان دسے جاؤگے جدوں تک تسی اپنے براؤزر دے کاشے نوں صاف ناں کرلو۔\nYou can continue to use {{SITENAME}} anonymously, or you can <span class='plainlinks'>[$1 log in again]</span> as the same or as a different user.\nNote that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
        "yourname": "ورتن والہ:",
+       "userlogin-yourname": "ورتن ناں",
+       "userlogin-yourname-ph": "اپنا ورتن ناں لکھو",
        "yourpassword": "کنجی:",
+       "userlogin-yourpassword": "کنجی",
+       "userlogin-yourpassword-ph": "کنجی پاؤ",
+       "createacct-yourpassword-ph": "کنجی پاؤ",
        "yourpasswordagain": "کنجی دوبارہ لکھو:",
+       "createacct-yourpasswordagain": "کنجی پکی کرو",
+       "createacct-yourpasswordagain-ph": "کنجی فیر پاؤ",
        "remembermypassword": "اس براؤزر تے میرا ورتن ناں یاد رکھو ($1 {{PLURAL:$1|دن|دناں}} واسطے)",
+       "userlogin-remembermypassword": "مینوں لاگ ان رکھو",
        "yourdomainname": "تواڈا علاقہ:",
        "externaldberror": "ڈیٹابیس چ توانوں پہچاننے چ کوئی مسئلہ ہویا اے یا فیر تسی اپنا بارلا کھاتا نئیں بدل سکدے۔",
        "login": "اندر آؤ جی",
        "logout": "لاگ توں باہر",
        "userlogout": "باہر آؤ",
        "notloggedin": "لاگ ان نئیں ہوۓ او",
+       "userlogin-noaccount": "تواڈا کھاتہ نہیں اے؟",
+       "userlogin-joinproject": "کھاتہ بناؤ",
        "nologin": "تواڈا کھاتہ نہیں اے؟ '''$1'''۔",
        "nologinlink": "کھاتہ بناؤ",
        "createaccount": "کھاتہ بناؤ",
        "gotaccount": "تواڈا پہلے توں کھاتہ ہے؟ '''$1'''",
        "gotaccountlink": "اندر آؤ",
        "userlogin-resetlink": "اپنے لاگ ان ہون دیاں شیواں پل گۓ؟",
+       "userlogin-resetpassword-link": "اپنی کنجی بھل گۓ او؟",
+       "userlogin-helplink2": "لاگ ان ہون وچ ہتھ ونڈائی",
+       "createacct-emailoptional": "ای-میل پتہ (مرضی نال)",
+       "createacct-email-ph": "اپنا ای-میل پتہ دیؤ",
        "createaccountmail": "ای میل دے نال",
        "createaccountreason": "وجہ:",
+       "createacct-captcha": "بچاؤ روک",
+       "createacct-imgcaptcha-ph": "اتے ویکھی لکھت ایتھے پاؤ",
+       "createacct-submit": "اپنا کھاتا کھولو",
+       "createacct-benefit-heading": "پنجابی وکی نوں تواڈے ورگے لوکاں نے بنایا اے۔",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفہ|صفے}}",
+       "createacct-benefit-body3": "ہن دے {{PLURAL:$1|کم|کماں}}",
        "badretype": "تواڈی کنجی صحیح نئیں۔",
        "userexists": "اے ورتن ناں پہلاں توں ای کوئی ورت ریا اے۔\nمہربانی کر کے کوئی دوجا چن لو۔",
        "loginerror": "لاگ ان چ مسئلا اے",
        "login-abort-generic": "تسی لاگ ان نئیں ہوسکے۔",
        "loginlanguagelabel": "بولی: $1",
        "suspicious-userlogout": "تھواڈی لاگ آؤٹ ہوں دی کوشش رک گئی اینج لگدا اے  جیویں اے ٹٹے براؤزر یا کیشنگ پراکسی توں پیجیا گیا سی۔",
+       "pt-login": "لاگ ان ہوو",
+       "pt-login-button": "اندر آؤ جی",
+       "pt-createaccount": "کھاتہ کھولو",
+       "pt-userlogout": "باہر آجاؤ",
        "php-mail-error-unknown": "PHP میل دے کم چ کوئی انجانی غلطی۔",
        "user-mail-no-addy": "ای-میل پتے بنا ای-میل کلن دی کوشش۔",
        "changepassword": "کنجی بدلو",
        "resetpass-submit-cancel": "ختم",
        "resetpass-wrong-oldpass": "غلط عارضی یا ہلے دی کنجی۔\nتساں نے شاید اپنی کنجی بدل لئی ہوۓ یا عارضی کنجی دی درخواست کیتی ہوۓ۔",
        "resetpass-temp-password": "عارضی کنجی:",
-       "passwordreset": "کنجی واپس لیاؤ",
-       "passwordreset-legend": "کنجی واپس لیاؤ",
+       "passwordreset": "کنجی فیر بناؤ",
        "passwordreset-disabled": "اس وکی تے کنجی واپس نئیں لیائی جاسکدی۔",
        "passwordreset-username": "ورتن ناں:",
        "passwordreset-domain": "ڈومین",
        "changeemail-submit": "ای-میل بدلو",
        "bold_sample": "موٹی لکھائی",
        "bold_tip": "موٹی لکھائی",
-       "italic_sample": "ترچھی لکھائی",
-       "italic_tip": "ترچھی لکھائی",
+       "italic_sample": "ٹیڈی لکھائی",
+       "italic_tip": "ٹیڈی لکھائی",
        "link_sample": "جوڑ",
        "link_tip": "اندرونی جوڑ",
        "extlink_sample": "http://www.example.com جوڑ دا ناں",
-       "extlink_tip": "بیرونی جوڑ (remember http:// prefix)",
+       "extlink_tip": "بارلے جوڑ (remember http:// prefix)",
        "headline_sample": "شہ سرخی",
        "headline_tip": "دوسرے درجے دی سرخی",
        "nowiki_sample": "فارمیٹ نہ ہوئی لکھائی ایتھے پاؤ",
        "summary": "ویروا:",
        "subject": "موضوع/شہ سرخی:",
        "minoredit": "اے نکا جیا کم اے",
-       "watchthis": "اس صفحے تے نظر رکھو",
+       "watchthis": "اس صفے تے اکھ رکھو",
        "savearticle": "کم بچاؤ",
        "preview": "وکھاؤ",
        "showpreview": "کچا کم ویکھو",
        "showdiff": "تبدیلیاں وکھاؤ",
-       "anoneditwarning": "'''خبردار''' تسی اندر نہیں آۓ\nتواڈا ''آئی پی'' پتہ فائل فائل وچ لکھیا جاۓ گا۔",
+       "anoneditwarning": "'''خبردار''': تسی اندر نہیں آۓ\nتواڈا ''آئی پی'' پتہ فائل وچ لکھیا جاۓ گا تے ساریاں نوں دسے گا۔ اگر تسیں $1 اندر آؤ یا $2 کھاتہ کھولو تے تواڈیاں لکھتاں تواڈے ورتن ناں نال جڑیاں ہون گئیاں۔",
        "anonpreviewwarning": "''تسی ہلے لاگ ان نئیں ہوۓ،۔ کم بچاؤ گے تے تواڈا IP پتہ صفحے دی تریخ چ لکھ لیا جاۓ گا۔''",
        "missingsummary": "'''یادکرائی:''' تساں تبدیلی دی سمری نئیں دتی۔  اگر تسیں \"{{int:savearticle}}\" نوں کلک کروگے تواڈیاں تبدیلیاں اک دے بنا بچ جان گیاں۔",
        "missingcommenttext": "تھلے اپنی گل لکھو۔",
        "newarticle": "(نواں)",
        "newarticletext": "تسی ایسے صفحے دے جوڑ توں ایتھے پہنچے او جیڑا ھلے تک نہیں بنیا۔<br />\nاس صفحہ بنانے آسطے تھلے دتے گۓ ڈبے وچ لکھنا شروع کر دیو(زیادہ رہنمائی آستے اے ویکھو [$1 <br />مدد دا صفحہ])۔\nاگر تسی ایتھے غلطی نال پہنچے او تے اپنے کھوجی توں \"بیک\" دا بٹن دبا دیو۔",
        "anontalkpagetext": "----'' ایہ اک گمنام ورتن والے دا گل بات دا صفہ اے جینے ہلے کھاتہ نئیں کھولیا یا او اینون ورتدا نئیں۔\nسانوں فیر نمبراں والا آئی پی پتہ ورتنا پوے گا اونوں لئی. ایہو جیا آئی پی پتہ گئی ورتن والے ورت سکدے نیں۔ \nاگر تسیں اک گمنام ورتن والے او تے اے مسوس کردے او جے پیڑی گل بات تواڈی بارے ہوئی اے، مہربانی کرکے [[Special:UserLogin/signup|create an account]] یا [[Special:UserLogin|log in]] اگے کسے مسلے توں بچن گمنام ورتن والیاں کولوں",
-       "noarticletext": "اس ویلے اس صفحے تے کج نہیں لکھیا ہویا تسیں [[Special:Search/{{PAGENAME}}|اس صفحے دے ناں نوں دوجے صفحیاں تے کھوج سکدے او]] یا فیر [{{fullurl:{{FULLPAGENAME}}|action=edit}} اس صفحے نوں لکھ سکدے او۔]",
+       "noarticletext": "اس ویلے اس صفے تے کج نہیں لکھیا ہویا تسیں [[Special:Search/{{PAGENAME}}|اس صفے دے ناں نوں دوجے صفیاں تے کھوج سکدے او]] یا فیر [{{fullurl:{{FULLPAGENAME}}|action=edit}} اس صفے نوں لکھ سکدے او۔]",
        "noarticletext-nopermission": "ایس ویلے ایس صفے تے کوئی لکھت نئیں۔ \nتسیں [[Special:Search/{{PAGENAME}}|search for this page title]] دوسریاں صفیاں تے،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>۔",
        "userpage-userdoesnotexist": "ورتن کھاتہ \"$1\" رجسٹر نئیں ہویا۔\nمہربانی کرکے دسو جے تسیں ای ھفا بنانا/بدلنا چاندے او۔",
        "userpage-userdoesnotexist-view": "''$1'' کھاتا رجسٹرڈ نئیں اے۔",
        "token_suffix_mismatch": "'''تواڈی لکھت نئیں منی گئی کیوں جے تواڈے بندے نے پنکچوایشن کیریکٹر لکھت ٹوکن چ رلاۓ.'''\nایس تبدیلی نوں لکھت چ خرابی نوں روکن لئی روکیا گیا اے۔.\nاے اودوں ہوندا اے جدوں تسیں گمنام سرور ورتدے او۔.",
        "edit_form_incomplete": "''' ایڈٹ فارم دے کج پاسے سرور تک نئيں اپڑے؛ دو واری چیک کرو جے تھواڈیاں تبدیلیاں بچیاں نیں تے فیر کوشش کرو'''",
        "editing": "تسی \"$1\" لکھ رہے او",
+       "creating": "$1 بناندیاں",
        "editingsection": "$1 دا حصہ لکھ رہے او",
        "editingcomment": "$1 بدل ریاں (نواں پاسہ)",
        "editconflict": "تبدیلی رپھڑ: $1",
        "semiprotectedpagewarning": "'''نوٹ:''' ایس صفے نوں بچایا گیا اے تے رجسٹر ورتن والے ای ایدے چ تبدیلی کرسکدے نیں۔\nآخری لاگ لکھت تھلے اتے پتے لئی دتی گئی اے۔",
        "cascadeprotectedwarning": "'''خبردار:''' ایس صفے نوں بچایا گیا اے ایس لئی مکھیا ای اینوں بدل سکدے نیں کیوں جے اے تھلے دتے گۓ بچاؤ {{PLURAL:$1|صفہ|صفے}} چ دتا گیا اے:",
        "titleprotectedwarning": "'''خبردار: ایہ صفہ بچایا گیا اے[[Special:ListGroupRights|specific rights]] دے بنان دی لوڑ اے.'''\nتھلے نیڑے دی لاگ لکھت دتی گ‏ی اے اتے پتے ل‏ی:",
-       "templatesused": "اس صفحے تے  ورتے گۓ {{PLURAL:$1|سانچے|سانچہ}}:",
+       "templatesused": "اس صفے تے  ورتے گۓ {{PLURAL:$1|سانچے|سانچہ}}:",
        "templatesusedpreview": "اس کچے کم تے ورتے گئے {{PLURAL:$1|سانچے|سانچہ}} :",
        "templatesusedsection": "{{PLURAL:$1|سچہ|سچے}} ایس ٹوٹے چ ورتے گۓ:",
        "template-protected": "(بچایا گیا)",
        "sectioneditnotsupported-text": "ایس صفے تے پاسہ تبدیلی نئیں ہوسکدی۔",
        "permissionserrors": "توانوں اجازت چ کوئی مسئلا اے",
        "permissionserrorstext": "تھلے دتیاں گیا {{PLURAL:$1|وجہ|وجاں}}وجاں توں توانوں اینوں تبدیل کرن دی اجازت نئیں۔",
-       "permissionserrorstext-withaction": "تواڈے کول $2 کرن دی اجازت نئیں اے۔ اس دی {{PLURAL:$1|وجہ|وجوہات}} نیں۔",
+       "permissionserrorstext-withaction": "تواڈے کول $2 کرن دی اجازت نئیں اے، اس دے {{PLURAL:$1|کارن|کارناں}} نیں",
        "recreate-moveddeleted-warn": "'''خبردار: تسی اک پہلاں توں مٹایا ہویا صفحہ دوبارا لکھ رہے او۔'''\n\nتوانوں اے گل سوچنی چائیدی اے کہ اینو لکھنا کوئی عقلمنداں دا کم اے۔\nتواڈی سہولت آسطے مٹان دا لاگ ایتھے موجود اے۔",
-       "moveddeleted-notice": "اس صفحے نوں مٹا دتا گیا اے۔\nمٹان دا لاگ تھلے دتا گیا اے۔",
+       "moveddeleted-notice": "اس صفے نوں مٹا دتا گیا اے۔\nمٹان دا لاگ تھلے دتا گیا اے۔",
        "log-fulllog": "پوری لاگ ویکھو",
        "edit-hook-aborted": "تبدیلی ہک نال رکی۔ بنا وجہ توں۔",
        "edit-gone-missing": "اے صفہ نواں نئیں ہوسکیا۔\nلکدا اے مٹا دتا گیا۔",
        "currentrev": "ہن آلی تبدیلی",
        "currentrev-asof": "$1 ویلے دا صفحہ",
        "revisionasof": "دی تبدیلیاں $1",
-       "revision-info": "$2 نے $1 تے اے لکھیا",
+       "revision-info": " $1 دی دہرائی  توں {{جنس:$6|$2}}$7",
        "previousrevision": "← اوس توں پچھلا کم",
        "nextrevision": "نویں تبدیلی →",
        "currentrevisionlink": "موجودہ حالت",
        "cur": "ہنوالا",
        "next": "اگلا",
-       "last": "آخری",
+       "last": "پہلا",
        "page_first": "پہلا",
        "page_last": "آخری",
        "histlegend": "ڈف سلیکشن: وکھری تبدیلیاں دا مقابلا کرن واسطے ریڈیو ڈبیاں تے نشان لاؤ تے اینٹر یا تھلے دتا گیا بٹن دباؤ۔<br />\nلیجنڈ: (موجودہ) = موجودہ تبدیلی نال مقابلہ،\n(آخری) = پچھلی تبدیلی توں فرق، M = تھوڑی تبدیلی",
        "revertmerge": "وکھریاں کرو",
        "mergelogpagetext": "تھلے اک صفے والے کٹھے کیتے گۓ صفے دی لسٹ اے۔",
        "history-title": "\"$1\" دا ریکارڈ",
+       "difference-title": "\"$1\" دیاں دہرائیاں وچ وکھراپا",
        "difference-multipage": "(صفیاں چ فرق)",
        "lineno": "لیک $1:",
        "compareselectedversions": "چنے صفحے آپنے سامنے کرو",
        "showhideselectedversions": "وکھاؤ/لکاؤ چنیاں دہرائیاں",
        "editundo": "واپس",
+       "diff-multi-sameuser": "({{PLURAL:$1|اک وشکارلی ریوین|$1 }} توں ایس ورتنوالے دیاں ریویناں نہیں دسیاں گئیاں)",
        "diff-multi-manyusers": "({{انیک:$1|اک وشکارلی ریوین|$1 وشکارلیاں ریویناں}} توں ود $2 {{انیک:$2|ورتن والا|ورتن والا}} نئیں دسی گئی)",
        "searchresults": "کھوج دا نتارا",
        "searchresults-title": "\"$1\" دے کھوج نتارے",
        "shown-title": "وکھاؤ $1 {{PLURAL:$1|نتیجے}}",
        "viewprevnext": "ویکھو ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''ایس وکی تے \"[[:$1]]\" ناں دا صفہ ہے۔.'''",
-       "searchmenu-new": "'''اÛ\8cس Ù\88Ú©Û\8c ØªÛ\92 \"[[:$1]]\" Ø¨Ù\86اؤ'''",
+       "searchmenu-new": "'''اÛ\8cس Ù\88Ú©Û\8c ØªÛ\92 \"[[:$1]]\" ØµÙ\81Û\81 Ø¨Ù\86اؤ''' {{PLURAL:$2|0=|اپÙ\86Û\8c Ú©Ú¾Ù\88ج Ù\86اÙ\84 Ù\84بÛ\92 ØµÙ\81Û\92 Ù\88Û\8cÚ©Ú¾Ù\88.|Ù\84بÛ\92 Ú©Ú¾Ù\88ج Ù\86تارÛ\92 Ù\88Û\8c Ù\88Û\8cÚ©Ú¾Ù\88.}}",
        "searchprofile-articles": "لسٹ صفے",
        "searchprofile-images": "ملٹیمیڈیا",
        "searchprofile-everything": "ہرشے",
        "searchprofile-images-tooltip": "فائلاں لئی لبو",
        "searchprofile-everything-tooltip": "سارا مواد لبو (گل بات والے صفے وی)",
        "searchprofile-advanced-tooltip": "کسٹم ناواں چ لبو",
-       "search-result-size": "$1 ({{PLURAL:$2|1 لفظ|$2 الفاظ}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 شبد|$2 شبد}})",
        "search-result-category-size": "{{PLURAL:$1|1 سنگی|$1 سنگی}} ({{PLURAL:$2|1 نکیاں گٹھاں|$2 نکیاں گٹھاں}}, {{PLURAL:$3|1 فائل|$3 فائلاں}})",
        "search-redirect": "($1 ریڈائریکٹ)",
        "search-section": "($1 ٹوٹا)",
        "searchrelated": "جڑیا",
        "searchall": "سارے",
        "showingresults": "تھلیوں دسے گۓ  {{PLURAL:$1|'''1''' نتیجہ|'''$1''' نتیجے}}  شروع #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|نتارا<strong>$1</strong> دا <strong>$3</strong>|نتارے<strong>$1 - $2</strong> دے <strong>$3</strong>}}",
        "search-nonefound": "سوال نال رلدے کوئی نتارے نئیں سن۔",
        "powersearch-legend": "ہور کھوج",
        "powersearch-ns": "ناں الیاں جگہاں چ لبو:",
        "right-override-export-depth": "5 تک صفے تے جڑے صفے لے کے جاؤ",
        "right-sendemail": "دوجے ورتن والیاں نوں ای-میل کرو",
        "right-passwordreset": "کنجی بدلی ای-میلاں نوں وکھاؤ",
-       "newuserlogpage": "ورتاوا بنان آلی لاگ",
+       "newuserlogpage": "ورتنوالا بنان آلی لاگ",
        "newuserlogpagetext": "اے ورتن والا بنان دی لاگ اے۔",
        "rightslog": "ورتن والے دے حقاں دی لاگ",
        "rightslogtext": "ورتن حقاں چ تبدیلیاں دی اے لاگ اے۔",
        "action-siteadmin": "ڈیٹابیس نوں کھولو یا بند کرو",
        "action-sendemail": "ای-میلاں پیجو",
        "nchanges": "$1 {{PLURAL:$1|change|تبدیلیاں}}",
+       "enhancedrc-history": "پچھلا کم",
        "recentchanges": "نویاں تبدیلیاں",
        "recentchanges-legend": "نویاں تبدیلیاں دیاں راواں",
        "recentchanges-summary": "ایس وکی تے نیڑے نیڑے ہون والیاں تبدیلیاں ایس صفے تے دسو۔",
        "recentchanges-feed-description": "اس فیڈ وچ وکی تے ہوئیاں نویاں تبدیلیاں نو ویکھو۔",
        "recentchanges-label-newpage": "ایس تبدیلی نے نواں صفہ بنایا اے۔",
-       "recentchanges-label-minor": "اÛ\92 اک چھوٹی تبدیلی اے۔",
+       "recentchanges-label-minor": "اÛ\8cÛ\81 اک چھوٹی تبدیلی اے۔",
        "recentchanges-label-bot": "ایس تبدیلی نوں بوٹ نے کیتا اے۔",
        "recentchanges-label-unpatrolled": "ایس تبدیلی تے ہلے گشت نئیں ہوئی۔",
+       "recentchanges-label-plusminus": "صفے دا ناپ اینے بائٹاں نال بدلیا گیا",
+       "recentchanges-legend-heading": "'''وات:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ایہ وی ویکھو [[Special:NewPages|نویں صفیاں دی لسٹ]])",
        "rcnotefrom": "ہلے تک '''$2''' توں '''$1''' تبدیلیاں تھلے دتیاں گئیاں نیں۔",
        "rclistfrom": "$3 $2 توں ہونے آلیاں نویاں تبدیلیاں وکھاؤ",
        "rcshowhideminor": "$1 معمولی تبدیلیاں",
+       "rcshowhideminor-show": "وکھاو",
+       "rcshowhideminor-hide": "لکاؤ",
        "rcshowhidebots": "$1 بوٹ",
+       "rcshowhidebots-show": "وکھاؤ",
+       "rcshowhidebots-hide": "لکاؤ",
        "rcshowhideliu": "$1 ورتن آلے اندر نیں",
+       "rcshowhideliu-hide": "لکاؤ",
        "rcshowhideanons": "$1 گمنام ورتن والے",
+       "rcshowhideanons-show": "وکھاو",
+       "rcshowhideanons-hide": "لکاؤ",
        "rcshowhidepatr": "$1 ویکھی گئی لکھائی",
        "rcshowhidemine": "$1 میرے کم",
+       "rcshowhidemine-show": "وکھاو",
+       "rcshowhidemine-hide": "لکاؤ",
        "rclinks": "آخری $2 دناں دیاں $1 تبدیلیاں وکھاؤ<br />$3",
        "diff": "فرق",
        "hist": "پچھلا کم",
        "rc-enhanced-hide": "لمبی کہانی لکاؤ",
        "recentchangeslinked": "ملدیاں جلدیاں تبدیلیاں",
        "recentchangeslinked-feed": "ملدیاں جلدیاں تبدیلیاں",
-       "recentchangeslinked-toolbox": "ملدیاں جلدیاں تبدیلیاں",
+       "recentchangeslinked-toolbox": "رلدیاں ملدیاں تبدیلیاں",
        "recentchangeslinked-title": "\"$1\" نال تعلق آلیاں تبدیلیاں",
-       "recentchangeslinked-summary": "اے اوناں تبدیلیاں دی لسٹ اے جیڑیاں تھوڑا چر پہلاں بنائیاں گئیاں اوناں صفحیاں تے جیڑے خاص صفحے تے جڑدے نے یا کسی خاص کیٹاگری دے ممبراں نوں۔<br />\nتواڈی [[Special:Watchlist|اکھ تھلے صفحے]] '''موٹے''' نیں۔",
+       "recentchangeslinked-summary": "اے اوناں تبدیلیاں دی لسٹ اے جیڑیاں تھوڑا چر پہلاں بنائیاں گئیاں اوناں صفیاں تے جیڑے خاص صفے تے جڑدے نے یا کسی خاص کیٹاگری دے ممبراں نوں۔<br />\nتواڈی [[Special:Watchlist|اکھ تھلے صفے]] '''موٹے''' نیں۔",
        "recentchangeslinked-page": "صفے دا ناں:",
-       "recentchangeslinked-to": "کھلے ہوۓ صفحے دی بجاۓ ایدے نال جڑے صفحے دیاں نویاں تبدیلیاں وکھاؤ",
+       "recentchangeslinked-to": "کھلے ہوۓ صفے دی بجاۓ ایدے نال جڑے صفے دیاں نویاں تبدیلیاں وکھاؤ",
        "upload": "فائل چڑھاؤ",
        "uploadbtn": "فائل چڑھاؤ",
        "reuploaddesc": "فائل چڑانا چھڑو تے فائل چڑانے آلے فارم تے واپس ٹرو",
        "filehist-filesize": "فائل دا ناپ",
        "filehist-comment": "راۓ",
        "imagelinks": "فائل ورتن",
-       "linkstoimage": "تھلے دتے گۓ {{PLURAL:$1|$1 صفحے}} اس فائل نال جڑدے نے",
+       "linkstoimage": "تھلے دتے گۓ {{PLURAL:$1|$1 صفے}} اس فائل نال جڑدے نے",
        "linkstoimage-more": "$1 توں چوکھے {{PLURAL:$1|صفہ جوڑ|صفہ جوڑ}} ایس فائل نوں۔\nتھلے دتی گئی لسٹ {{PLURAL:$1|پہلا صفہ جوڑ|پہلا $1 صفہ جوڑ}} ایس فائل نال دسدی اے۔\nاک خاص [[Special:WhatLinksHere/$2|پوری لسٹ]] ہیگی اے۔",
        "nolinkstoimage": "اس فائل نال جڑیا کوئی صفحہ نہیں۔",
        "morelinkstoimage": "ایس فائل نوں [[Special:WhatLinksHere/$1|ہور جوڑ]] ویکھو",
        "uploadnewversion-linktext": "اس فائل دا نوا ورژن چھڑھاؤ",
        "shared-repo-from": "$1 توں",
        "shared-repo": "اک سانجی ریپوزیٹری",
+       "upload-disallowed-here": "تسیں ایس فائل تے نہیں لکھ سکدے",
        "filerevert": "$1 واپس",
        "filerevert-legend": "فائل پچھلی حالت چ لے جاؤ",
        "filerevert-intro": "تسیں فائل '''[[Media:$1|$1]]''' نوں واپس کرن والے او [$4 ورین $3, $2] ول۔",
        "unusedtemplates": "نا استعمال ہوۓ سچے",
        "unusedtemplatestext": "ایس صفے چ  سارے صفیاں دی لسٹ اے {{ns:ٹمپلیٹ}} تے جیہڑے کسے ہور صفے نال نئیں رلے۔  ٹمپلیٹ تے  ہور جوڑ ویکھ لو مٹان توں پہلے۔",
        "unusedtemplateswlh": "دوجے جوڑ",
-       "randompage": "ملے جلے صفحے",
+       "randompage": "رلے ملے صفے",
        "randompage-nopages": "ایتھے کوئی صفے نئیں تھلے دتے گۓ {{PLURAL:$2|ناںتھاں|ناںتھانواں}} : $1",
        "randomredirect": "بے پترتیب ریڈائریکٹ",
        "randomredirect-nopages": "\"$1\" ناں نال کوئی ریڈائرکٹ نئیں۔",
        "nlinks": "$1 {{PLURAL:$1|link|جوڑ}}",
        "nmembers": "$1 {{PLURAL:$1|member|ممبران}}",
        "nrevisions": "$1 {{PLURAL:$1|ریوین|ریویناں}}",
-       "nviews": "$1 {{PLURAL:$1|وکھالہ|وکھالے}}",
        "nimagelinks": "تے ورتیا $1 {{PLURAL:$1|صفہ|صفے}}",
        "ntransclusions": "$1 تے ورتے  {{PLURAL:$1|صفہ|صفے}}",
        "specialpage-empty": "ایس رپورٹ دے کوئی نتیجے نئیں۔",
        "querypage-disabled": "اے صفہ ناکارہ کیتا گیا پرفارمنس وجہ توں۔",
        "booksources": "کتاب توں اتہ پتہ",
        "booksources-search-legend": "اس مضمون تے کتاباں لبو",
+       "booksources-search": "کھوج",
        "booksources-text": "تھلے اوناں جوڑاں دی لسٹ اے جتھے نویاں تے پرانیاں کتاباں وکدیاں نیں، تے ہور وی جانکاری ہوسکدی اے  کتاباں بارے تسیں ویکھدے او:",
        "booksources-invalid-isbn": "دتی گئی آئی ایس بی این چلدی نئیں لکدی ؛ اصل سورس نوں چیک کرو کاپی کرن توں پہلے۔",
        "specialloguserlabel": "کرن والا:",
        "linksearch-pat": "کھوج راہ:",
        "linksearch-ns": "ناں دی جگہ:",
        "linksearch-ok": "کھوج",
-       "linksearch-text": "وائلڈکارڈز جیویں کہ \"*.wikipedia.org\" ورتے جاسکدے نیں۔\n\"*.org\".<br /> دی لوڑ\nمنے گۓ پروٹوکول: <code>$1</code>",
+       "linksearch-text": "وائلڈکارڈز جیویں کہ \"*.wikipedia.org\" ورتے جاسکدے نیں۔\n\"*.org\".<br /> دی لوڑ\nمنے گۓ پروٹوکول: $1",
        "linksearch-line": "$1 نوں $2 نال جوڑیا",
        "linksearch-error": "وکیکارڈو میزبان دے ناں دے شروع چ دس سکدے نیں۔",
        "listusersfrom": "ورتن والے ایس توں شروع ہون والے دسو:",
        "mailnologin": "ناں پیح پتہ",
        "mailnologintext": "تسیں لازمی [[Special:UserLogin|لاگان]] ہوو تے اک پکا ای-میل پتہ تواڈی [[Special:Preferences|تانگ]] چ ہووے تاں جے دوجے ورتن والے توانوں ای-میل کرسکن۔",
        "emailuser": "اس ورتن والے نو ای میل کرو",
-       "emailpage": "ای-میل ورتن والا",
        "emailpagetext": "تسیں تھلے دتا گیا فارم  ورت سکدے اوہ ایس ورتن والے نوں ای-میل سنیعہ کلن لئی۔ \nای-میل پتہ تساں [[Special:Preferences|تواڈے ورتن تانکآں]] چ پایا اے  ای-میل توں تواڈا پتہ دسے گا جتھے چٹھی چلی تاں جے چٹھی لین والا توانوں سدا جواب دے سکے۔",
        "defemailsubject": "{{SITENAME}}ای-میل ورتن والے \"$1\" توں",
        "usermaildisabled": "ورتن ای-میل ناکارہ",
        "delete-warning-toobig": "ایس صفے دی تبدیلی دی اک لمی تریخ اے۔ $1 توں ود {{PLURAL:$1|ریوین|ریویناں}}۔\nاینوں مٹان تے {{SITENAME}} دے ڈیٹا اوپریشنز چ مسلہ بن سکدا اے۔\nسوچ سمج کے اگے ودو۔",
        "rollback": "لکھائیاں واپس کرو",
        "rollbacklink": "واپس",
+       "rollbacklinkcount": "واپس $1 {{PLURAL:$1|لکھت|لکھتاں}}",
        "rollbackfailed": "واپس کرن ناکام",
        "cantrollback": "تبدیلی واپس نئیں ہوسکدی؛\nآخری لکھاری ای ایدا اکو لکھاری سی۔",
        "alreadyrolled": "[[:$1]] دی آخری تبدیلی جیہڑی [[User:$2|$2]]  نے ([[User talk:$2|talk|]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); کیتی؛ واپس نئیں ہوسکدی\nکسے ہور نے تبدیلی یا پچھے نوں پہلے ای کردتا اے۔\n\nصفے تے آخری تبدیلی [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) نے کیتی.",
        "tooltip-invert": "ایس ڈبے نوں ویکھو تبدیلیاں چھپان لئی چونویں ناںتھاں تے (تے رلدے ناںتھاں اگر چیک کیتے جان)",
        "namespace_association": "رلدے ناں تھاں",
        "tooltip-namespace_association": "ایس ڈبے نون وی ویکھو گل بات یا ناںتھاں  چونویں ناںتھاں نال رلدا۔",
-       "blanknamespace": "(خاص)",
-       "contributions": "ورتن آلے دا حصہ",
+       "blanknamespace": "(مکھ)",
+       "contributions": " $1 ورتن آلے دا حصہ",
        "contributions-title": "$1 دے کم",
        "mycontris": "میرے کم",
        "contribsub2": "$1 آستے ($2)",
        "sp-contributions-toponly": "صرف اوہ تبدیلیاں وکھاؤ جیہڑیاں سب توں نیڑے ویلے ہویاں نیں۔",
        "sp-contributions-submit": "کھوجو",
        "whatlinkshere": "ایتھے کیدا جوڑ اے",
-       "whatlinkshere-title": "او صفحات جیڑے \"$1\" نال جڑے نے",
+       "whatlinkshere-title": "او صفے جیڑے \"$1\" نال جڑے نیں",
        "whatlinkshere-page": "صفہ:",
        "linkshere": "تھلے دتے گۓ صفے اس دے نال جڑدے نے '''[[:$1]]''':",
        "nolinkshere": "'''[[:$1]]''' دے نال کسے دا جوڑ نہیں",
        "isredirect": "ریڈائرکٹ صفہ",
        "istemplate": "ملن",
        "isimage": "مورت دا جوڑ",
-       "whatlinkshere-prev": "{{PLURAL:$1|پچھل $1ا|پچھلا}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|پچھلا $1ا|پچھلا}}",
        "whatlinkshere-next": "{{PLURAL:$1|اگلا $1|اگلا}}",
        "whatlinkshere-links": "← جوڑ",
        "whatlinkshere-hideredirs": "$1 ریڈائریکٹس",
        "tooltip-pt-mytalk": "میریاں گلاں",
        "tooltip-pt-anontalk": "ایس IP  پتے دیاں تبدیلیاں تے گل بات",
        "tooltip-pt-preferences": "میریاں تانگاں",
-       "tooltip-pt-watchlist": "او صفحے جنہاں وچ تبدیلیاں تسی ویکھ رہے او",
+       "tooltip-pt-watchlist": "او صفے جنہاں وچ تبدیلیاں تسی ویکھ رہے او",
        "tooltip-pt-mycontris": "میرے کم",
        "tooltip-pt-login": "ایہ بہتر اے کہ لاگ ان ہو جاؤ، فیر وی ایہ لازمی نئیں۔",
        "tooltip-pt-logout": "باہر آؤ",
+       "tooltip-pt-createaccount": "ایہ تواڈے لئی چنگا اے جے تسیں کھاتہ بناؤ تے لاگ ان ہوو؛ پر ایہ لازمی وی نئیں",
        "tooltip-ca-talk": "اس صفے بارے گل بات",
-       "tooltip-ca-edit": "تسÛ\8cÚº Ø§Ø³ ØµÙ\81Û\92 ØªÛ\92 Ù\84Ú©Ú¾ Ø³Ú©Ø¯Û\92 Ø§Ù\88Û\94\nبÚ\86اÙ\86 ØªÙ\88Úº Ù¾Û\81Ù\84اں Ú©Ú\86Û\92 Ú©Ù\85 Ù\86Ù\88Úº Ù\88Û\8cÚ©Ú¾ Ù\84Ù\88Û\94",
+       "tooltip-ca-edit": "اس ØµÙ\81Û\92 ØªÛ\92 Ù\84Ú©Ú¾Ù\88",
        "tooltip-ca-addsection": "اس گل بات وچ حصہ لے لو۔",
-       "tooltip-ca-viewsource": "اے صفحہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
-       "tooltip-ca-history": "اس صفحے دا پرانہ ورژن۔",
+       "tooltip-ca-viewsource": "اے صفہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
+       "tooltip-ca-history": "اس صفے دا پرانہ ورژن۔",
        "tooltip-ca-protect": "اس صفے نوں بچاؤ",
        "tooltip-ca-unprotect": "ایس صفے دا بچاؤ بدلو۔",
        "tooltip-ca-delete": "اس صفے نوں مٹاؤ",
        "tooltip-ca-undelete": "ایس صفے دیاں تبدیلیاں نوں واپس لیاؤ ایس توں پہلے کے اے مٹ جاۓ۔",
-       "tooltip-ca-move": "اس صفحے نوں لے چلو",
+       "tooltip-ca-move": "اس صفے نوں لے چلو",
        "tooltip-ca-watch": "اس صفحہ تے نظر رکھو",
        "tooltip-ca-unwatch": "اس صفحے توں نظر ہٹاؤ",
        "tooltip-search": "کھوج {{SITENAME}}",
-       "tooltip-search-go": "اس ناں دے صفحے تے چلو، اگر اے ہے گا اے",
-       "tooltip-search-fulltext": "اس لفظ نوں صفحیاں چ لبو",
+       "tooltip-search-go": "اس ناں دے صفے تے چلو، اگر ایہ ہیگا اے",
+       "tooltip-search-fulltext": "اس شبد نوں صفیاں چ لبو",
        "tooltip-p-logo": "پہلا صفہ",
        "tooltip-n-mainpage": "پہلے صفے نوں ویکھو",
        "tooltip-n-mainpage-description": "پہلے ورقے تے جاؤ",
        "tooltip-n-randompage": "کوئی صفہ کھولو۔",
        "tooltip-n-help": "مدد لینے آلی جگہ۔",
        "tooltip-t-whatlinkshere": "اس نال جڑے سارے وکی صفے۔",
-       "tooltip-t-recentchangeslinked": "اس صفحے توں جڑے صفحیاں چ نویاں تبدیلیاں",
+       "tooltip-t-recentchangeslinked": "اس صفے توں جڑے صفیاں چ نویاں تبدیلیاں",
        "tooltip-feed-rss": "RSS feed for this page",
        "tooltip-feed-atom": "Atom feed for this page",
        "tooltip-t-contributions": "اس ورتن والے دے کم ویکھو",
        "tooltip-t-upload": "فائل چڑھاؤ",
        "tooltip-t-specialpages": "سارے خاص صفیاں دی اک لسٹ",
        "tooltip-t-print": "اس صفے دا چھپنے آلا ورژن ویکھو",
-       "tooltip-t-permalink": "اس صفحے دے اس ورژن نال پرماننٹ لنک",
-       "tooltip-ca-nstab-main": "مواد آلا صفحہ ویکھو",
-       "tooltip-ca-nstab-user": "ورتن آلے دا صفحہ ویکھو",
+       "tooltip-t-permalink": "اس صفے دے اس ورژن نال پکا جوڑ",
+       "tooltip-ca-nstab-main": "مواد آلا صفہ ویکھو",
+       "tooltip-ca-nstab-user": "ورتن آلے دا صفہ ویکھو",
        "tooltip-ca-nstab-media": "میڈیا آلا صفحہ ویکھو",
-       "tooltip-ca-nstab-special": "اÛ\92 Ø§Ú© Ø®Ø§Øµ ØµÙ\81Ø­Û\81 Ø§Û\92Ø\8c ØªÛ\92Û\8c Ø§Û\92 ØµÙ\81Ø­ہ آپے نئیں لکھ سکدے",
-       "tooltip-ca-nstab-project": "Ù\85Ù\86صÙ\88بÛ\92 Ø¯Ø§ ØµÙ\81Ø­ہ ویکھو",
-       "tooltip-ca-nstab-image": "فائل دا صفحہ ویکھو",
+       "tooltip-ca-nstab-special": "اÛ\8cÛ\81 Ø§Ú© Ø®Ø§Øµ ØµÙ\81Û\81 Ø§Û\92Ø\8c ØªÛ\92 Ø§Û\8cÛ\81 ØµÙ\81ہ آپے نئیں لکھ سکدے",
+       "tooltip-ca-nstab-project": "Ù\88Û\8cÙ\86ت Ø¯Ø§ ØµÙ\81ہ ویکھو",
+       "tooltip-ca-nstab-image": "فائل دا صفہ ویکھو",
        "tooltip-ca-nstab-mediawiki": "پربندھ سنیعہ ویکھو",
-       "tooltip-ca-nstab-template": "سانچہ تکو",
+       "tooltip-ca-nstab-template": "سانچہ ویکھو",
        "tooltip-ca-nstab-help": "مدد دا صفحہ ویکھو",
-       "tooltip-ca-nstab-category": "کیٹاگری آلا صفحہ ویکھو",
+       "tooltip-ca-nstab-category": "کیٹاگری آلا صفہ ویکھو",
        "tooltip-minoredit": "انیو نکے کم چ گنو",
        "tooltip-save": "اپنا کم بچالو",
        "tooltip-preview": "کچا کم ویکھو، اس بٹن نوں بچان توں پہلاں استعمال کرو!۔",
-       "tooltip-diff": "اس عبارت وچ کیتیاں تبدیلیاں وکھاؤ۔",
+       "tooltip-diff": "اس لکھت وچ کیتیاں تبدیلیاں وکھاؤ۔",
        "tooltip-compareselectedversions": "چنے ہوۓ صفحیاں وچ فرق ویکھو۔",
        "tooltip-watch": "اس صفے تے نظر رکھو",
        "tooltip-watchlistedit-normal-submit": "ٹائیٹلز ہٹاؤ",
        "tooltip-watchlistedit-raw-submit": "اکھ تھلے رکھی لسٹ نون نواں کرو",
        "tooltip-recreate": "ایہ صفہ دوبارہ بناؤ پاویں اے مٹادتا گیا ہووے۔",
        "tooltip-upload": "فائل چڑھانا شروع کرو",
-       "tooltip-rollback": "\"رول بیک\" اک کلک چ صفحے نوں پچھلی حالت چ لے چلے گا",
+       "tooltip-rollback": "\"رول بیک\" اک کلک چ صفے نوں پچھلی حالت چ لے چلے گا",
        "tooltip-undo": "\"واپس\" تے کلک کرن نال توانوں صفحہ کچا وکھایا جاۓ گا۔\nاس نال تسی واپس کرن دی وجہ لکھ سکو گے۔",
        "tooltip-preferences-save": "تانگاں بچاؤ",
        "tooltip-summary": "اک نکی سمری پاؤ",
        "spambot_username": "میڈیاوکی سپام سفائی",
        "spam_reverting": "آخری ریوین ول جیدے چ $1 دے جوڑ ناں ہون۔",
        "spam_blanking": "سارے ریوین جناں چ $1 نوں جوڑ نیں، طاف کیتا جاریا اے۔",
-       "simpleantispam-label": "سپام روک پھاٹک\nایدے تے ناں لکھو۔",
+       "simpleantispam-label": "سپام روک پھاٹک\nDo <strong>not</strong> fill this in!",
        "pageinfo-title": "\"$1\" لئی جانکاری",
        "pageinfo-header-edits": "تبدیلیاں",
        "pageinfo-watchers": "ویکھن والے",
        "pageinfo-edits": "تبدیلیاں گنتی",
        "pageinfo-authors": "وکھرے لکھاریاں دی گنتی",
+       "pageinfo-toolboxlink": "صفہ وات",
        "markaspatrolleddiff": "ویکھے گۓ دا نشان لاؤ",
        "markaspatrolledtext": "ایس صفے تے ویکھن دا نشان لاؤ",
        "markedaspatrolled": "ویکھن دا نشان لاؤ",
        "file-info-size-pages": "$1 × $2 پکسل, فائل ناپ: $3, مائم ٹائپ: $4, $5 {{PLURAL:$5|صفہ|صفے}}",
        "file-nohires": "اس توں وڈی فوٹو موجود نہیں۔",
        "svg-long-desc": "ایس وی جی فائل، پکسل:$1 × $2، فائل سائز: $3",
-       "show-big-image": "وڈی مورت",
+       "show-big-image": "اصلی فائل",
        "show-big-image-preview": "ایس وکھالے دا ناپ: $1۔",
        "show-big-image-other": "دوجے {{PLURAL:$2|ریزولوشن|ریزولوشنز}}: $1.",
        "show-big-image-size": "$1 × $2 پکسلز",
        "exif-primarychromaticities": "کرومیٹیسٹیز آف پرآمریٹیز",
        "exif-ycbcrcoefficients": "کلر سپیس ٹرانسنارمیشن میٹرکس کوایفیشینٹز",
        "exif-referenceblackwhite": "کالے چٹے جوڑے دی ریفرنس ویلیو",
-       "exif-datetime": "Ù\81ائÙ\84 Ø¨Ø¯Ù\84Ù\86 Ø¯Û\8c ØªØ§Ø±Û\8cØ® ØªÛ\92 Ù\88Û\8cÙ\84ا",
+       "exif-datetime": "فائل بدلن دی تریخ تے ویلا",
        "exif-imagedescription": "مورت دا ناں",
        "exif-make": "کیمرہ بنانے آلا",
        "exif-model": "کیمرا ماڈل",
        "tags": "منے ہوۓ تبدیلی دے ٹیگ",
        "tag-filter": "[[Special:Tags|Tag]] نتارا:",
        "tag-filter-submit": "فلٹر",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2)",
        "tags-title": "ٹیگز",
        "tags-intro": "ایس صفے تے ٹیگ دی لسٹ اے جینوں سوفٹوئیر تبدیلی دا نشان لا سکدا اے۔",
        "tags-tag": "ٹیگ ناں",
        "revdelete-uname-unhid": "ورتن والے دا ناں ںئیں لکیا",
        "revdelete-restricted": "مکھیاں تے روکاں لگیاں",
        "revdelete-unrestricted": "مکھیاں تے روکاں لتھیاں",
-       "logentry-move-move": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4",
+       "logentry-move-move": "$1 {{جنس:$2|پلٹی}} صفہ $3 توں $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ڑیڈائرکٹ چھڈے بنا",
        "logentry-move-move_redir": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 ریڈائرکٹ",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|پلٹی}} صفہ $3 توں $4 اک ریڈائرکٹ دے بنا کسے ریڈائرکٹ دتیاں",
        "logentry-newusers-create": "$1 {{GENDER:$2|بنایا}} اک ورتن والا کھاتہ",
        "logentry-newusers-create2": "$1 {{GENDER:$2|بنایا}} {{GENDER:$4|اک ورتن کھاتہ}} $3",
        "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{GENDER:$2|بنایا گیا}} بنایا گیا۔",
+       "logentry-upload-upload": "$1 {{جنس:$2|چڑھائی گئی}} $3",
        "rightsnone": "(کوئی وی نئیں)",
        "revdelete-summary": "لکھائی دا خلاصہ",
        "feedback-adding": "مشورہ  صفے تے دیو۔۔۔۔۔۔۔",
index 56e3151..e67d487 100644 (file)
        "nlinks": "$1 {{PLURAL:$1|autengīnsenis|autengīnsenei}}",
        "nmembers": "$1 {{PLURAL:$1|streīpstus|streīpstai}}",
        "nrevisions": "$1 {{PLURAL:$1|wersiōni|wersiōnis}}",
-       "nviews": "$1 {{PLURAL:$1|kāimalukisenis|kāimalukisenei}}",
        "specialpage-empty": "Ni ast rezultātai per šin repōrtan.",
        "lonelypages": "Ainaseīlingis pāusai",
        "lonelypagestext": "Prēi zemmaisins pāusans ni autenginna niaīnan kittan pāusan anga tenēi ni autenginna prei niaīnan kittan pāusan en {{SITENAME}}.",
        "linksearch-pat": "Laukīsnas šablōni:",
        "linksearch-ns": "Emninplattibi:",
        "linksearch-ok": "Laukīs",
-       "linksearch-text": "Mazīngi tērpautun tulapresliskan simbōlin \"*\"  - perwaidīnsnai „*.wikipedia.org”<br />\nEbšlūzitai prōtokulai: <code>$1</code>",
+       "linksearch-text": "Mazīngi tērpautun tulapresliskan simbōlin \"*\"  - perwaidīnsnai „*.wikipedia.org”<br />\nEbšlūzitai prōtokulai: $1",
        "linksearch-line": "Prei $1 autenginna $2",
        "linksearch-error": "Mazīngi tērpautun tulapresliskan simbōlin \"*\" tēr en hostas pabilīsnas pagaūseņu.",
        "listusersfrom": "Waidinnais tērpautajans pagaūnintei ezze:",
index bc9d391..0f8da47 100644 (file)
@@ -24,8 +24,8 @@
        "tog-watchdeletion": "زما کتنلړ کې دې هغه مخونه او دوتنې ورگډې شي چې زه يې ړنگوم",
        "tog-watchrollback": "هغه مخونه چې ما پکې پر شاتمبونې ترسره کړي زما کتنلړ کې ورگډول",
        "tog-minordefault": "په تلواليزه توگه ټول سمونونه واړه په نخښه کول",
-       "tog-previewontop": "د سمون بکس نه دمخه مخکتنه ښکاره کول",
-       "tog-previewonfirst": "په لومړي سمون کې مخکتنه ښکاره کول",
+       "tog-previewontop": "د سمون بکس څخه مخکې مخليدنه ښکاره کول",
+       "tog-previewonfirst": "په لومړي سمون کې مخليدنه ښکاره کول",
        "tog-enotifwatchlistpages": "کله چې زما د کتنلړ په يوې دوتنې يا يو مخ کې بدلون راځي نو ما ته دې د بدلون په اړه برېښليک راشي",
        "tog-enotifusertalkpages": "کله چې زما د خبرو اترو په مخ کې بدلون پېښېږي نو ما ته دې يو برېښليک ولېږلی شي.",
        "tog-enotifminoredits": "کله چې په مخونو او دوتنو کې وړې سمونې کېږي نو ماته دې د بدلون په اړه برېښليک راشي",
        "badtitle": "ناسم سرليک",
        "badtitletext": "ستاسې د غوښتل شوي مخ سرليک سم نه وو، يا مو د سرليک ځای تش وو او يا هم د ژبو خپلمنځي تړنې څخه يا د ويکي گانو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.\nکېدای شي چې ستاسې په ورکړ شوي سرليک کې يو يا څو داسې توري وي چې د سرليک په توگه بايد و نه کارېږي.",
        "title-invalid-interwiki": "په سرليک کې يوه ويکي خپلمنځي تړنه ده",
+       "perfcached": "لاندينی اومتوک په حافظه کې ساتل شوی او کېدای شي اوسمهاله شوی نه وي.  اکثر بريد له مخې {{PLURAL:$1|يوه پايله|$1 پايلې}} په حافظه کې شته.",
        "querypage-no-updates": "د دې مخ اوسمهالېدنې ناچارن شوي.\nپه ښکاره توگه د دې ځای اومتوک به نه وي تازه شوي.",
        "viewsource": "سرچينه کتل",
        "viewsource-title": "د $1 سرچينه کتل",
        "anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
        "missingcommenttext": "لطفاً تبصره لاندې وليکۍ.",
        "summary-preview": "د لنډيز مخليدنه:",
-       "subject-preview": "سکالو/سرليک مخکتنه:",
+       "subject-preview": "سکالو/سرليک مخليدنه:",
        "previewerrortext": "د بدلونونو د مخليدنو په وخت کې مو يوه ستونزه رامېنځ ته شوه.",
        "blockedtitle": "پر کارن بنديز لگېدلی",
        "blockedtext": "'''ستاسې د کارن-نوم يا آی پي پتې مخنيوی شوی.'''\n\nهمدا بنديز د $1 له خوا پر تاسې لږېدلی. او د همدې کړنې سبب ''$2'' دی.\n\n* د بنديز د پېل نېټه: $8\n* د بنديز د پای نېټه: $6\n* بنديزونه دي پر: $7\n\nتاسې کولای شی چې د $1 او يا هم د يو بل [[{{MediaWiki:Grouppage-sysop}}|پازوال]] سره اړيکې ټينگې کړی او د بنديز ستونزې مو هوارې کړی.\nتاسې نه شی کولای چې د 'کارن ته برېښلک لېږل' کړنې نه گټه پورته کړی تر څو چې تاسې د خپل گڼون په [[Special:Preferences|غوره توبونو]] کې يوه کره برېښليک پته نه وي ځانگړې کړې او تر دې بريده چې پر تاسې د هغې د کارولو بنديز نه وي لگېدلی.\nستاسې د دم مهال آی پي پته $3 ده، او ستاسې د بنديز پېژند #$5 دی. مهرباني وکړۍ د خپلې يادونې پر مهال د دغو دوو څخه د يوه او يا هم د دواړو ورکول مه هېروۍ.",
        "prefs-edits": "د سمونو شمېر:",
        "prefsnologintext2": "د غوره توبونو بدلولو لپاره مو غونډال ته ننوځئ.",
        "prefs-skin": "پوښۍ",
-       "skin-preview": "مخکتنه",
+       "skin-preview": "مخليدنه",
        "datedefault": "هېڅ نه ټاکل",
        "prefs-labs": "د آزمېښتون ځانگړنې",
        "prefs-user-pages": "کارن مخونه",
        "rows": "ليکې:",
        "columns": "ستنې:",
        "searchresultshead": "پلټل",
+       "stub-threshold-sample-link": "مخبېلگه",
        "stub-threshold-disabled": "ناچارن",
        "recentchangesdays": "د هغو ورځو شمېر وټاکی چې په وروستي بدلونو کې يې ليدل غواړی:",
        "recentchangesdays-max": "حد اکثر $1 {{PLURAL:$1|ورځ|ورځې}}",
        "right-importupload": "د يوې پورته شوې دوتنې څخه مخونه راغوښتل",
        "right-patrol": "د نورو سمونونه څارل شوي په نښه کول",
        "right-unwatchedpages": "د ناکتلو مخونو يو لړليک کتل",
+       "right-mergehistory": "د مخونو پېښليک سره اخږل",
        "right-userrights": "د کارن ټولې رښتې سمول",
        "right-userrights-interwiki": "په نورو ويکي گانو د نورو کارنانو  کارن-رښتې سمول",
+       "right-siteadmin": "توکبنسټ کولپول او پرانيستل",
        "right-sendemail": "نورو کارنانو ته برېښليک لېږل",
        "newuserlogpage": "د کارن-نوم د جوړېدو يادښت",
        "newuserlogpagetext": "دا د کارن-نوم د جوړېدو يادښت دی",
        "enhancedrc-history": "پېښليک",
        "recentchanges": "وروستي بدلونونه",
        "recentchanges-legend": "د ورستي بدلونو خوښنې",
-       "recentchanges-summary": "په دې مخ د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.",
+       "recentchanges-summary": "په دې مخ د ويکي تر ټولو تازه بدلونونه څارلی شی.",
        "recentchanges-noresult": "د ټاکلې مودې بدلونونه کې يو يې هم د دغو معيارونو سره همغاړي نه دي.",
        "recentchanges-feed-description": "همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وگورۍ چې څه پېښ شوي.",
        "recentchanges-label-newpage": "دغه سمون يو نوی مخ جوړ کړی",
        "filetype-banned": "په دې ډول دوتنې بنديز دی.",
        "verification-error": "دا دوتنه د دوتنې تاييدېدنې څخه بريالۍ و نه وتله.",
        "illegal-filename": "د دوتنې نوم نه دی پرېښل شوی.",
-       "unknown-error": "Ù\8aÙ\88Ù\87 Ù\86اÚ\85رګنده تېروتنه رامېنځته شوه.",
+       "unknown-error": "Ù\8aÙ\88Ù\87 Ù\86اÚ\85رگنده تېروتنه رامېنځته شوه.",
        "tmp-create-error": "لنډمهاله دوتنه جوړېدای نه شي",
        "fileexists": "د پخوا څخه پدې نوم يوه دوتنه شته، که {{GENDER:|تاسې}} پرې ډاډمن نه ياست چې بدلون پکې راولۍ، نو لطفاً <strong>[[:$1]]</strong> وگورئ.\n[[$1|بټنوک]]",
        "fileexists-extension": "په دې نوم يوه بله دوتنه د پخوا څخه شته: [[$2|بټنوک]]\n* د پورته کېدونکې دوتنې نوم: <strong>[[:$1]]</strong>\n* د پخوانۍ موجودې دوتنې نوم: <strong>[[:$2]]</strong>\nآيا تاسې غواړۍ چې يو داسې بېل نوم ټاکۍ چې د پخوانۍ دوتنې سره توپير ولري؟",
        "upload-file-error": "کورنۍ ستونزه",
        "upload-misc-error": "د پورته کېدنې نامالومه تېروتنه",
        "upload-http-error": "د HTTP يوه ستونزه رامېنځ ته شوې: $1",
+       "upload-dialog-title": "دوتنه پورته کول",
+       "upload-dialog-error": "يوه ستونزه پېښه شوې",
+       "upload-dialog-warning": "يوه گواښنه رامېنځ ته شوه",
+       "upload-dialog-button-cancel": "ناگارل",
+       "upload-dialog-button-done": "ترسره شو",
+       "upload-dialog-button-save": "خوندي کول",
+       "upload-dialog-button-upload": "پورته کول",
+       "upload-dialog-label-select-file": "دوتنه ټاکل",
+       "upload-dialog-label-infoform-title": "ځانگړنې",
+       "upload-dialog-label-infoform-name": "نوم",
+       "upload-dialog-label-infoform-description": "څرگندونه",
+       "upload-dialog-label-usage-title": "کارېدنې",
+       "upload-dialog-label-usage-filename": "د دوتنې نوم",
        "backend-fail-notexists": "د $1 په نوم دوتنه نشته.",
        "backend-fail-delete": "د \"$1\" دوتنه ړنګه نه شوه.",
        "backend-fail-alreadyexists": "د $1 دوتنه له پخوا نه شته.",
        "emailuser": "کارن ته برېښليک لېږل",
        "emailuser-title-target": "دې {{GENDER:$1|کارن}} ته برېښليک لېږل",
        "emailuser-title-notarget": "کارن ته برېښليک لېږل",
-       "emailpage": "کارن ته برېښليک لېږل",
        "defemailsubject": "د \"$1\" کارن لخوا د {{SITENAME}} برېښليک",
        "usermaildisabled": "د کارن برېښليک ناچارند دی",
        "usermaildisabledtext": "په دې ويکي تاسې نورو کارنانو ته برېښليک نه شی ورلېږلی",
        "emailccsubject": "$1 ته ستاسې د پيغام لمېسه: $2",
        "emailsent": "برېښليک مو ولېږل شو",
        "emailsenttext": "ستاسې برېښليکي پيغام ولېږل شو.",
-       "emailuserfooter": "دا برېښليک $2 ته د $1 لخوا د \"{{int:emailpage}}\" کړنې په مرسته د {{SITENAME}} له لارې لېږل شوی.",
+       "emailuserfooter": "دا برېښليک $2 ته د $1 لخوا د \"{{int:emailuser}}\" کړنې په مرسته د {{SITENAME}} له لارې لېږل شوی.",
        "usermessage-summary": "د غونډال پيغام پرېښودل.",
        "usermessage-editor": "د غونډال پيغام رسونکی",
        "watchlist": "کتنلړ",
        "delete-edit-reasonlist": "د ړنگولو سببونه سمول",
        "rollbacklink": "په شابېول",
        "rollbacklinkcount": "$1 {{PLURAL:$1|سمون|سمونونه}} پرشابېول",
+       "editcomment": "د سمون لنډيز دا و: \"''$1''\".",
        "changecontentmodel-title-label": "مخ سرليک",
        "changecontentmodel-reason-label": "سبب:",
        "protectlogpage": "د ژغورنې يادښت",
        "ipusubmit": "دا بنديز ليرې کول",
        "unblocked": "له [[User:$1|$1]] بنديز ليري شو",
        "unblocked-range": "له $1 بنديز ليرې شو",
+       "unblocked-ip": "له [[Special:Contributions/$1|$1]] څخه بنديز ليرې شو.",
        "blocklist": "بنديز لگېدلي کارنان",
        "ipblocklist": "بنديز لگېدلي کارنان",
        "ipblocklist-legend": "يو بنديز شوی کارن موندل",
        "tooltip-ca-nstab-main": "د مخ مېنځپانگه کتل",
        "tooltip-ca-nstab-user": "د کارن پاڼه کتل",
        "tooltip-ca-nstab-media": "د رسنۍ مخ کتل",
-       "tooltip-ca-nstab-special": "دا Ù\8aÙ\88 Ú\81اÙ\86Ú¯Ú\93Û\8c Ù\85Ø® Ø¯Û\8cØ\8c ØªØ§Ø³Û\90 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø³Ù\85Ù\88Ù\86 Ù\86Ù\87 Ø´Û\8c Ú©Ù\88Ù\84اÛ\8c.",
+       "tooltip-ca-nstab-special": "دا Ù\8aÙ\88 Ú\81اÙ\86Ú¯Ú\93Û\8c Ù\85Ø® Ø¯Û\8cØ\8c Ø§Ù\88 Ù¾Ù\87 Ø¯Û\90 Ù\85Ø® Ú©Û\90 Ø³Ù\85Ù\88Ù\86 Ù\86Ù\87 Ú©Û\90Ú\96Ù\8a.",
        "tooltip-ca-nstab-project": "د پروژې مخ کتل",
        "tooltip-ca-nstab-image": "د دوتنې مخ کتل",
        "tooltip-ca-nstab-mediawiki": "د غونډال پيغامونه کتل",
        "siteusers": "د {{SITENAME}} {{PLURAL:$2|کارن|کارنان}} $1",
        "anonusers": "د {{SITENAME}} {{PLURAL:$2|ورکنومی کارن|ورکنومي کارنان}} $1",
        "creditspage": "د دې مخ کرېډټونه",
-       "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه </strong> ډکوئ!",
+       "simpleantispam-label": "سپام-ضد څارنه.\nدا برخه <strong>مه</strong> ډکوئ!",
        "pageinfo-title": "د \"$1\" مالومات",
        "pageinfo-header-basic": "بنسټيز مالومات",
        "pageinfo-header-edits": "د سمون پېښليک",
        "exif-lightsource-255": "د رڼا بله سرچينه",
        "exif-flash-fired-0": "فلش و نه ځلېده",
        "exif-focalplaneresolutionunit-2": "انچه",
-       "exif-sensingmethod-1": "Ù\86اÚ\85رګنده",
+       "exif-sensingmethod-1": "Ù\86اÚ\85رگنده",
        "exif-filesource-3": "گڼياليزه ولاړه کامره",
        "exif-customrendered-0": "نورماله بهير",
        "exif-scenecapturetype-0": "معيار",
        "api-error-filetype-missing": "دوتنې نوم يو شاتاړی نه لري.",
        "api-error-illegal-filename": "د دوتنې نوم نه دی پرېښل شوی.",
        "api-error-mustbeloggedin": "د دوتنو د پورته کولو لپاره بايد تاسې غونډال کې ننوتلی اوسۍ.",
-       "api-error-unclassified": "Ù\8aÙ\88Ù\87 Ù\86اÚ\85رګنده تېروتنه رامېنځته شوه.",
-       "api-error-unknown-code": "Ù\86اÚ\85رګنده تېروتنه: \"$1\"",
+       "api-error-unclassified": "Ù\8aÙ\88Ù\87 Ù\86اÚ\85رگنده تېروتنه رامېنځته شوه.",
+       "api-error-unknown-code": "Ù\86اÚ\85رگنده تېروتنه: \"$1\"",
        "api-error-unknown-warning": "ناڅرگنده گواښنه: \"$1\".",
-       "api-error-unknownerror": "Ù\86اÚ\85رګنده تېروتنه: \"$1\".",
+       "api-error-unknownerror": "Ù\86اÚ\85رگنده تېروتنه: \"$1\".",
        "api-error-uploaddisabled": "په دې ويکي باندې پورته کېدنې ناچارنې شوي.",
        "api-error-verification-error": "کېدای شي دا دوتنه خرابه وي او يا هم ناسم شاتاړی ولري.",
        "duration-seconds": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
        "expand_templates_remove_comments": "تبصرې غورځول",
        "expand_templates_remove_nowiki": "په پايلو کې د <nowiki> نښلنونه ځپل",
        "expand_templates_generate_rawhtml": "خام HTML ښکاره کول",
-       "expand_templates_preview": "مخکتنه",
+       "expand_templates_preview": "مخليدنه",
        "pagelanguage": "د مخ ژبټاکونکی",
        "pagelang-name": "مخ",
        "pagelang-language": "ژبه",
        "special-characters-group-arabicextended": "غځېدلې عربي",
        "special-characters-group-persian": "پارسي",
        "special-characters-group-hebrew": "عبراني",
-       "special-characters-group-bangla": "بÙ\86Ú«الي",
+       "special-characters-group-bangla": "بÙ\86Ú¯الي",
        "special-characters-group-tamil": "تاميلي",
        "special-characters-group-telugu": "تېلوګو",
        "special-characters-group-sinhala": "سېنهالي",
-       "special-characters-group-gujarati": "Ú«جراتي",
-       "special-characters-group-devanagari": "دېوانګري",
+       "special-characters-group-gujarati": "Ú¯Ù\88جراتي",
+       "special-characters-group-devanagari": "دېواناگري",
        "special-characters-group-thai": "تايلنډي",
        "special-characters-group-lao": "لاوي",
        "special-characters-group-khmer": "خمري",
index 053ee0d..2e42327 100644 (file)
@@ -81,7 +81,9 @@
                        "RosaMafalda17",
                        "Macofe",
                        "TheEduGobi",
-                       "Araceletorres"
+                       "Araceletorres",
+                       "L",
+                       "Walesson"
                ]
        },
        "tog-underline": "Sublinhar links:",
@@ -92,9 +94,9 @@
        "tog-usenewrc": "Agrupar alterações por páginas nas mudanças recentes e nas páginas vigiadas",
        "tog-numberheadings": "Auto-numerar cabeçalhos",
        "tog-showtoolbar": "Mostrar barra de ferramentas de edição",
-       "tog-editondblclick": "Editar páginas quando houver clique duplo",
+       "tog-editondblclick": "Editar páginas no clique duplo",
        "tog-editsectiononrightclick": "Habilitar edição de seção por clique com o botão direito no título da seção (requer JavaScript)",
-       "tog-watchcreations": "Adicionar as páginas e arquivos que eu criar à minha lista de páginas vigiadas",
+       "tog-watchcreations": "Adicionar as páginas e arquivos que \neu criar à minha lista de páginas vigiadas",
        "tog-watchdefault": "Adicionar as páginas e arquivos que eu editar à minha lista de páginas vigiadas",
        "tog-watchmoves": "Adicionar as páginas e arquivos que eu mover à minha lista de páginas vigiadas",
        "tog-watchdeletion": "Adicionar as páginas e arquivos que eu eliminar à minha lista de páginas vigiadas",
        "faq": "FAQ",
        "faqpage": "Project:FAQ",
        "actions": "Ações",
-       "namespaces": "Espaços nominais",
+       "namespaces": "Domínios",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "returnto": "Retornar para $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
-       "search": "Pesquisar",
+       "search": "Pesquisa",
        "searchbutton": "Pesquisar",
        "go": "Ir",
        "searcharticle": "Ir",
        "history_short": "Histórico",
        "updatedmarker": "atualizado desde a minha última visita",
        "printableversion": "Versão para impressão",
-       "permalink": "Link permanente",
+       "permalink": "Ligação permanente",
        "print": "Imprimir",
        "view": "Ver",
        "view-foreign": "Ver no $1",
        "unprotectthispage": "Alterar a proteção desta página",
        "newpage": "Página nova",
        "talkpage": "Dialogar sobre esta página",
-       "talkpagelinktext": "discussão",
+       "talkpagelinktext": "Discussão",
        "specialpage": "Página especial",
        "personaltools": "Ferramentas pessoais",
        "articlepage": "Ver página de conteúdo",
        "copyrightpage": "{{ns:project}}:Direitos_de_autor",
        "currentevents": "Eventos atuais",
        "currentevents-url": "Project:Eventos atuais",
-       "disclaimers": "Exoneração de responsabilidade",
-       "disclaimerpage": "Project:Aviso_geral",
+       "disclaimers": "Termo de responsabilidade",
+       "disclaimerpage": "Project:Aviso geral",
        "edithelp": "Ajuda de edição",
        "helppage-top-gethelp": "Ajuda",
        "mainpage": "Página principal",
        "portal": "Portal comunitário",
        "portal-url": "Project:Portal comunitário",
        "privacy": "Política de privacidade",
-       "privacypage": "Project:Política_de_privacidade",
+       "privacypage": "Project:Política de privacidade",
        "badaccess": "Erro de permissão",
        "badaccess-group0": "Você não está autorizado a executar a ação requisitada.",
        "badaccess-groups": "A ação que você tentou executar está limitada a usuários {{PLURAL:$2|do grupo|de um dos seguintes grupos}}: $1.",
        "nstab-user": "Página d{{GENDER:{{BASEPAGENAME}}|o usuário|a usuária|e usuário(a)}}",
        "nstab-media": "Página de mídia",
        "nstab-special": "Página especial",
-       "nstab-project": "Página do projeto",
+       "nstab-project": "Página de projeto",
        "nstab-image": "Arquivo",
        "nstab-mediawiki": "Mensagem",
        "nstab-template": "Predefinição",
        "badtitletext": "O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorreto.\nTalvez contenha um ou mais caracteres que não podem ser usados em títulos.",
        "title-invalid-empty": "O título da página solicitada está vazio ou contém somente o nome do espaço de nomes.",
        "title-invalid-utf8": "O título da página solicitada contém uma sequência UTF-8 inválida.",
-       "title-invalid-interwiki": "O título contém um link interwiki",
+       "title-invalid-interwiki": "O título da página solicitado contém um link interwiki que não pode ser usado em títulos.",
        "title-invalid-talk-namespace": "O título da página solicitada refere-se a uma página de discussão que pode não existir.",
        "title-invalid-characters": "O título da página solicitada contém caracteres inválidos: \"$1\".",
        "title-invalid-relative": "O título tem um caminho relativo.Títulos de página relativos (./, ../) são inválidos, porque muitas vezes estarão inacessíveis quando consultados pelo navegador do usuário.",
        "actionthrottled": "Ação controlada",
        "actionthrottledtext": "Como medida \"anti-spam\", você se encontra impedido de realizar esta operação muitas vezes em um curto espaço de tempo; você já excedeu esse limite.\nTente novamente em alguns minutos.",
        "protectedpagetext": "Esta página foi protegida contra novas edições ou ações relacionadas.",
-       "viewsourcetext": "Você pode ver e copiar o código desta página:",
-       "viewyourtext": "Pode ver e copiar o código fonte '''das suas edições''' nesta página:",
+       "viewsourcetext": "Você pode ver e copiar o código desta página.",
+       "viewyourtext": "Você pode ver e copiar o código fonte '''das suas edições''' a esta página.",
        "protectedinterface": "Esta página fornece texto de interface ao software deste wiki, se encontrando protegida para prevenir abusos.\n\nPara adicionar ou alterar traduções em todos os wikis, utilize o [//translatewiki.net/ translatewiki.net], projeto de traduções do MediaWiki.",
        "editinginterface": "'''Aviso:''' Você se encontra prestes a editar uma página que é utilizada para fornecer texto de interface ao software.\nAlterações nesta página irão afetar a aparência da interface de usuário para outros usuários deste wiki.\nPara alterar ou adicionar traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt-br translatewiki.net], um projeto destinado para a tradução do MediaWiki.",
        "translateinterface": "Para adicionar ou modificar traduções para todas as wikis, por favor use  [//translatewiki.net/ translatewiki.net], o projeto de localização do MediaWiki.",
-       "cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de \"proteção progressiva\" ativada):\n$2",
+       "cascadeprotected": "Esta página foi protegida contra edições porque é transcluída na seguinte {{PLURAL: $1, | página, que é | páginas, que estão protegidas}} com a \"cascata\" opção ativada: $2",
        "namespaceprotected": "Você não possui permissão para editar páginas no espaço nominal '''$1'''.",
        "customcssprotected": "Você não tem permissão para editar esta página CSS, porque ele contém configurações pessoais de outro usuário.",
        "customjsprotected": "Você não tem permissão para editar esta página de JavaScript, porque ele contém configurações pessoais de outro usuário.",
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuidor|contribuidores}} recentes",
        "badretype": "As senhas que você digitou não são iguais.",
+       "usernameinprogress": "Uma criação da conta para este nome de usuário já está em andamento. Por favor, aguarde.",
        "userexists": "O nome de usuário fornecido já está em uso.\nEscolha um nome diferente.",
        "loginerror": "Erro de autenticação",
        "createacct-error": "Erro ao criar a conta",
        "yourdiff": "Diferenças",
        "copyrightwarning": "Por favor, note que todas as suas contribuições em {{SITENAME}} são consideradas como lançadas nos termos da licença $2 (veja $1 para detalhes). Se não deseja que o seu texto seja inexoravelmente editado e redistribuído de tal forma, não o envie.<br />\nVocê está, ao mesmo tempo, garantindo-nos que isto é algo escrito por você mesmo ou algo copiado de uma fonte de textos em domínio público ou similarmente de teor livre.\n'''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS AUTORAIS SEM A DEVIDA PERMISSÃO!'''",
        "copyrightwarning2": "Por favor, note que todas as suas contribuições em {{SITENAME}} podem ser editadas, alteradas ou removidas por outros contribuidores. Se você não deseja que o seu texto seja inexoravelmente editado, não o envie.<br />\nVocê está, ao mesmo tempo, a garantir-nos que isto é algo escrito por si, ou algo copiado de alguma fonte de textos em domínio público ou similarmente de teor livre (veja $1 para detalhes).\n'''NÃO ENVIE TRABALHO PROTEGIDO POR DIREITOS DE AUTOR SEM A DEVIDA PERMISSÃO!'''",
+       "editpage-cannot-use-custom-model": "O modelo de conteúdo desta página não pode ser alterado.",
        "longpageerror": "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''\nA página não pode ser salva.",
        "readonlywarning": "'''Aviso: O banco de dados foi bloqueado para manutenção, por isso você não poderá salvar a sua edição neste momento.'''\nTalvez você queira copiar o seu texto num editor externo e guardá-lo, para posterior envio.\n\nQuem bloqueou o banco de dados forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Atenção: Esta página foi protegida para que apenas usuários com privilégios de administrador possam editá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida, sendo que apenas usuários registrados poderão editá-la.\nA última entrada no histórico é fornecida abaixo para referência:",
-       "cascadeprotectedwarning": "'''Atenção:''' Esta página se encontra protegida; apenas {{int:group-sysop}} podem editá-la, uma vez que se encontra incluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} com a \"proteção progressiva\":",
+       "cascadeprotectedwarning": "<strong> Aviso: </ strong> Esta página foi protegida para que somente os usuários com privilégios de administrador pode editá-lo porque ele é transcluída na seguinte protegido por cascata {{PLURAL: $1 | página | páginas}}:",
        "titleprotectedwarning": "'''Atenção: esta página foi protegida; [[Special:ListGroupRights|privilégios específicos]] são necessários para criá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "templatesused": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta página:",
        "templatesusedpreview": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta previsão:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Array vazia",
+       "duplicate-args-warning": "<strong> Aviso: </ strong> [[:$1]] está chamando [[:$2]] com mais de um valor para o parâmetro \"$3\". Será utilizado apenas o último valor fornecido.",
        "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "duplicate-args-category-desc": "A pagina contem modelos que usam argumentos duplicados, como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Aviso: Esta página contém muitas chamadas a funções do analisador \"parser\".\n\nDeveria ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento {{PLURAL:$1|há $1 chamada|existem $1 chamadas}}.",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
-       "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong>{{PLURAL:$2|0=| Veja também a página encontrada com sua pesquisa.|Veja também os resultados das pesquisas encontradas.}}",
+       "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada com sua pesquisa.|Veja também os resultados da pesquisa encontrados.}}",
        "searchprofile-articles": "Páginas de conteúdo",
        "searchprofile-images": "Multimídia",
        "searchprofile-everything": "Tudo",
        "search-section": "(seção $1)",
        "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do arquivo)",
-       "search-suggest": "Você quis dizer: $1",
+       "search-suggest": "Você quis dizer: $1?",
+       "search-rewritten": "Mostrando resultados por $1. Pesquisar em vez de $2.",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "rows": "Linhas:",
        "columns": "Colunas:",
        "searchresultshead": "Pesquisar",
-       "stub-threshold": "Links para páginas de conteúdo aparecerão <a href=\"#\" class=\"stub\">desta forma</a> se elas possuírem menos de (bytes):",
+       "stub-threshold": "Limiar para a formatação ligação stub (US $1):",
+       "stub-threshold-sample-link": "amostra",
        "stub-threshold-disabled": "Desabilitado",
        "recentchangesdays": "Dias a apresentar nas mudanças recentes:",
        "recentchangesdays-max": "(máximo: $1 {{PLURAL:$1|dia|dias}})",
        "badsig": "Assinatura inválida; verifique o código HTML utilizado.",
        "badsiglength": "A sua assinatura é muito longa.\nEla deve ter menos de $1 {{PLURAL:$1|caractere|caracteres}}.",
        "yourgender": "Como você prefere ser descrito(a)?",
-       "gender-unknown": "Prefiro não dizer",
+       "gender-unknown": "Ao mencionar você, o software usará palavras do gênero neutro sempre que possível",
        "gender-male": "Ele edita páginas wiki",
        "gender-female": "Ela edita páginas wiki",
        "prefs-help-gender": "A configuração desta preferência é opcional.\nO software utiliza seu valor para tratá-lo(a) e mencioná-lo(a) a outros usando o gênero gramatical adequado.\nEsta informação será pública.",
        "userrights-lookup-user": "Administrar grupos de usuários",
        "userrights-user-editname": "Forneça um nome de usuário:",
        "editusergroup": "Editar grupos de usuários",
-       "editinguser": "Modificando privilégios d{{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} '''[[User:$1|$1]]''' $2",
+       "editinguser": "Modificando privilégios d{{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} <strong>[[User:$1|$1]]</Strong> $2",
        "userrights-editusergroup": "Editar grupos do usuário",
        "saveusergroups": "Salvar grupos do usuário",
        "userrights-groupsmember": "Membro de:",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 usuário|$1 usuários}} vigiando]",
-       "rc_categories": "Limite para categorias (separar com \"|\")",
-       "rc_categories_any": "Qualquer",
+       "rc_categories": "Limite para categorias (separar com \"|\"):",
+       "rc_categories_any": "Qualquer dos escolhidos",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após alterações",
        "newsectionsummary": "/* $1 */ nova seção",
        "rc-enhanced-expand": "Exibir detalhes",
        "uploaddisabledtext": "O envio de arquivos encontra-se desativado.",
        "php-uploaddisabledtext": "O envio de arquivos via PHP está desativado.\nVerifique a configuração file_uploads.",
        "uploadscripted": "Este arquivo contém HTML ou código que pode ser erroneamente interpretado por um navegador web.",
+       "upload-scripted-pi-callback": "Não é possível fazer upload de um arquivo que contém a instrução de processamento XML-estilo.",
+       "uploaded-script-svg": "Elemento encontrado programável \"$1\" no arquivo SVG carregado.",
+       "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.",
+       "uploaded-event-handler-on-svg": "Configuração de manipulador de eventos atribui <code> $1 = \"$2\" </ code> não é permitido em arquivos SVG.",
        "uploadscriptednamespace": "Este aruivo SVG contém um espaço nominal probido \"$1\"",
        "uploadinvalidxml": "O XML no arquivo enviado não pôde ser analisado.",
        "uploadvirus": "O arquivo contém vírus!\nDetalhes: $1",
        "upload-too-many-redirects": "A URL contém redirecionamentos demais",
        "upload-http-error": "Ocorreu um erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "Não é possível realizar envios remotos neste domínio.",
+       "upload-dialog-button-cancel": "Cancelar",
+       "upload-dialog-button-done": "Feito",
+       "upload-dialog-button-save": "Salvar",
+       "upload-dialog-button-upload": "Enviar",
+       "upload-dialog-label-select-file": "Selecionar arquivo",
+       "upload-dialog-label-infoform-title": "Detalhes",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrição",
+       "upload-dialog-label-usage-title": "uso",
+       "upload-dialog-label-usage-filename": "Nome do arquivo",
        "backend-fail-stream": "Não foi possível transmitir o arquivo  $1.",
        "backend-fail-backup": "Não foi possível fazer backup do arquivo  $1 .",
        "backend-fail-notexists": "O arquivo $1 não existe.",
        "unusedimages": "Arquivos não utilizados",
        "wantedcategories": "Categorias pedidas",
        "wantedpages": "Páginas pedidas",
-       "wantedpages-summary": "Lista de páginas não-existentes com mais links para elas, excluindo páginas que apenas têm redirecionamentos linkando para elas. Para obter uma lista de páginas inexistentes que redireciona links para elas, veja [[{{#special: Brokenredirects}}]].",
+       "wantedpages-summary": "Lista de páginas não-existentes com mais links para eles, excluindo páginas que apenas têm redirecionamentos links para eles. Para obter uma lista de páginas não-existentes que têm redirecionamentos links para eles, veja [[{{#special: Brokenredirects}} | lista de redirecionamentos quebrados]].",
        "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]].",
        "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.",
        "specialloguserlabel": "Executor:",
-       "speciallogtitlelabel": "Destino (título ou usuário):",
+       "speciallogtitlelabel": "Alvo (título ou {{ns: user}}: nome de usuário para usuário):",
        "log": "Registros",
        "all-logs-page": "Todos os registros públicos",
        "alllogstext": "Exibição combinada de todos registros disponíveis para o {{SITENAME}}.\nVocê pode diminuir a lista escolhendo um tipo de registro, um nome de usuário (sensível a maiúsculas e minúsculas), ou uma página afetada (também sensível a maiúsculas e minúsculas).",
-       "logempty": "Nenhum item idêntico no registro.",
+       "logempty": "Nenhum item correspondente no registro.",
        "log-title-wildcard": "Procurar por títulos que sejam iniciados com o seguinte texto",
        "showhideselectedlogentries": "Exibir/ocultar os itens de registros selecionados",
        "log-edit-tags": "Editar etiquetas das entradas selecionadas",
        "linksearch-pat": "Procurar padrão:",
        "linksearch-ns": "Espaço nominal:",
        "linksearch-ok": "Pesquisar",
-       "linksearch-text": "É possível usar caracteres coringa, como \"*.wikipedia.org\".\nNecessário no mínimo um domínio de nível superior, por exemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: <code>$1</code> (caso nenhum seja especificado, o protocolo http:// será selecionado automaticamente).",
+       "linksearch-text": "É possível usar caracteres coringa, como \"*.wikipedia.org\".\nNecessário no mínimo um domínio de nível superior, por exemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: $1 (caso nenhum seja especificado, o protocolo http:// será selecionado automaticamente).",
        "linksearch-line": "$2 possui links para $1",
        "linksearch-error": "\"Caracteres mágicos\" (''wildcards'') só podem ser usados no início do endereço.",
        "listusersfrom": "Mostrar usuários começando em:",
        "emailuser": "Enviar-lhe um e-mail",
        "emailuser-title-target": "Enviar e-mail para {{GENDER:$1|este usuário|esta usuária}}",
        "emailuser-title-notarget": "Enviar e-mail",
-       "emailpage": "Enviar e-mail ao usuário",
        "emailpagetext": "Você pode usar o formulário a seguir para enviar um e-mail para {{GENDER:$1|este usuário|esta usuária}}.\nO endereço de e-mail que você inseriu em [[Special:Preferences|suas preferências de usuário]] irá aparecer como o endereço do remetente da mensagem, com o destinatário podendo responder diretamente para você.",
        "defemailsubject": "E-mail do usuário \"$1\" da {{SITENAME}}",
        "usermaildisabled": "O e-mail do usuário foi desativado",
        "emailccsubject": "Cópia de sua mensagem para $1: $2",
        "emailsent": "E-mail enviado",
        "emailsenttext": "Sua mensagem foi enviada.",
-       "emailuserfooter": "Este email foi enviado por $1 para $2 através da função\"{{int:emailpage}}\" do site {{SITENAME}}.",
+       "emailuserfooter": "Este email foi enviado por $1 para $2 através da função\"{{int:emailuser}}\" do site {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "watchlistanontext": "Por favor, faça login para ver ou editar os itens na sua lista de páginas vigiadas.",
        "watchnologin": "Não está autenticado",
        "addwatch": "Adicionar às páginas vigiadas",
-       "addedwatchtext": "A página \"[[:$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].\nFuturas modificações em tal página e páginas de discussão relacionadas serão listadas lá.",
+       "addedwatchtext": "A página \"[[:$1]]\" e sua página de discussão foram adicionadas à sua [[Special:Watchlist|lista de páginas vigiadas]].",
        "addedwatchtext-short": "A página \"$1\" foi adicionada à sua lista de páginas vigiadas.",
        "removewatch": "Remover das páginas vigiadas",
-       "removedwatchtext": "A página \"[[:$1]]\" foi removida de sua [[Special:Watchlist|lista de páginas vigiadas]].",
+       "removedwatchtext": "A página \"[[:$1]]\" e sua página de discussão foram removidas de sua [[Special:Watchlist|lista de páginas vigiadas]].",
        "removedwatchtext-short": "A página \"$1\" foi removida de sua lista de páginas vigiadas.",
        "watch": "Vigiar",
        "watchthispage": "Vigiar esta página",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "sessionfailure-title": "Erro de sessão",
        "sessionfailure": "Foram detetados problemas com a sua sessão;\nEsta ação foi cancelada como medida de proteção contra a intercepção de sessões.\nExperimente usar o botão \"Voltar\" e atualizar a página de onde veio e tente novamente.",
+       "changecontentmodel": "Mudar modelo de conteúdo de uma página",
+       "changecontentmodel-legend": "Mudar modelo de conteúdo",
+       "changecontentmodel-title-label": "Título da página",
+       "changecontentmodel-reason-label": "Motivo:",
+       "logentry-contentmodel-change-revertlink": "reverter",
        "protectlogpage": "Registro de proteção",
        "protectlogtext": "Encontra-se abaixo o registro de proteção e desproteção de páginas.\nConsulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as páginas que se encontram protegidas neste momento.",
        "protectedarticle": "protegeu \"[[$1]]\"",
        "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-login": "Você é encorajado a autenticar-se; no entanto, não é obrigatório",
        "tooltip-pt-logout": "Sair",
        "tooltip-pt-createaccount": "É recomendado que você crie uma conta e inicie uma seção; todavia, isto não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
-       "tooltip-ca-edit": "Você pode editar esta página. Use o botão \"Mostrar previsão\" antes de salvar.",
+       "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar uma nova seção",
        "tooltip-ca-viewsource": "Esta página está protegida.\nVocê pode, no entanto, visualiar seu código-fonte.",
        "tooltip-ca-history": "Edições anteriores desta página.",
        "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-recentchanges": "Uma lista de mudanças recentes nesta 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-n-help": "O lugar para informar-se",
        "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",
        "spam_reverting": "Revertendo para a última versão que não contém links para $1",
        "spam_blanking": "Todas revisões contendo links para $1, limpando",
        "spam_deleting": "Eliminada por todas as suas edições conterem links para $1",
-       "simpleantispam-label": "Verificação contra spam\n'''NÃO''' preencha isto!",
+       "simpleantispam-label": "Verificação contra spam.\n<strong>Não</strong>  preencha isto!",
        "pageinfo-title": "Informações sobre \"$1\"",
        "pageinfo-not-current": "Desculpe-nos, não é possível fornecer esses dados para edições antigas.",
        "pageinfo-header-basic": "Informação básica",
        "version-libraries": "Bibliotecas instaladas",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versão",
+       "version-libraries-license": "Licença",
+       "version-libraries-description": "Descrição",
+       "version-libraries-authors": "Autores",
        "redirect": "Redirecionar por arquivo, usuário ou ID de revisão",
        "redirect-legend": "Redirecionar para um arquivo ou página",
        "redirect-summary": "Esta página especial redireciona a um arquivo (dado o nome do arquivo), a uma página (dado um ID de revisão ou ID da página) ou a uma página de usuário (dado o ID do usuário). Uso: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "log-name-pagelang": "Mudar idioma do log",
        "log-description-pagelang": "Este é um registro de alterações aos idiomas das páginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|alterou}} o idioma da página $3 de $4 para $5.",
-       "default-skin-not-found": "Ops! A aparência padrão para sua wiki, definida em <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, não está disponível.\n\nSua instalação parece incluir a(s) seguinte(s) {{PLURAL:$4|aparência|aparências}}. Veja [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuração de aparência] para informações sobre como  {{PLURAL:$4|habilitá-la|habilitá-las e escolha a padrão}}.\n\n$2\n\n; Se você já instalou o MediaWiki:\n: Você provavelmente instalou do git, ou diretamente do código fonte usando usando algum outro método. Isto é esperado. Tente instalar algumas aparências do [https://www.mediawiki.org/wiki/Category:All_skins diretório de aparências do mediawiki.org]:\n:* Baixando o [https://www.mediawiki.org/wiki/Download instalador tarball], que vem com várias aparências e extensões. Você pode copiar e colar o diretório <code>skins/</code> dele.\n:* Baixando tarballs individuais de aparência de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando um dos repositórios <code>mediawiki/skins/*</code> via git no diretório <code dir=\"ltr\">skins/</code> de sua instalação MediaWiki.\n: Fazer isso não deve interferir no seu repositório git se você é um desenvolvedor MediaWiki.\n\n; Se você já atualizou o MediaWiki:\n: O MediaWiki 1.24 e os mais recentes não permitem mais aparências instaladas automaticamente (veja [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Você pode colar {{PLURAL:$5|a seguinte linha|as seguintes linhas}} em <code>LocalSettings.php</code> para habilitar {{PLURAL:$5|a|todas as}} {{PLURAL:$5|aparência instalada atualmente|aparências instaladas atualmente}} :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se você já modificou <code>LocalSettings.php</code>:\n: Verifique cuidadosamente se não há erros de digitação nos nomes das aparências.",
+       "default-skin-not-found": "Ops! A aparência padrão para sua wiki, definida em <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, não está disponível.\n\nSua instalação parece incluir a(s) seguinte(s) {{PLURAL:$4|aparência|aparências}}. Veja [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuração de aparência] para informações sobre como  {{PLURAL:$4|habilitá-la|habilitá-las e escolha a padrão}}.\n\n$2\n\n; Se você já instalou o MediaWiki:\n: Você provavelmente instalou do git, ou diretamente do código fonte usando usando algum outro método. Isto é esperado. Tente instalar algumas aparências do [https://www.mediawiki.org/wiki/Category:All_skins diretório de aparências do mediawiki.org]:\n:* Baixando o [https://www.mediawiki.org/wiki/Download instalador tarball], que vem com várias aparências e extensões. Você pode copiar e colar o diretório <code>skins/</code> dele.\n:* Baixando tarballs individuais de aparência de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git/pt-br#Usando_o_Git_para_baixar_extensões_do_MediaWiki Usando o Git para baixar aparências].\n: Fazer isso não deve interferir no seu repositório git se você é um desenvolvedor MediaWiki.\n\n; Se você já atualizou o MediaWiki:\n: O MediaWiki 1.24 e os mais recentes não permitem mais aparências instaladas automaticamente (veja [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Você pode colar {{PLURAL:$5|a seguinte linha|as seguintes linhas}} em <code>LocalSettings.php</code> para habilitar {{PLURAL:$5|a|todas as}} {{PLURAL:$5|aparência instalada|aparências instaladas}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se você já modificou <code>LocalSettings.php</code>:\n: Verifique cuidadosamente se não há erros de digitação nos nomes das aparências.",
        "default-skin-not-found-no-skins": "Ops! A aparência padrão para sua wiki, definida em <code>$wgDefaultSkin</code> como <code>$1</code>, não está disponível.\n\nVocê não tem aparências instaladas.\n\n; Se você já instalou ou atualizou o MediaWiki:\n: Você provavelmente instalou do git, ou diretamente do código fonte usando usando algum outro método. Isto é esperado. O MediaWiki 1.24 e mais recentes não incluem todas as aparências no repositório principal.Tente instalar algumas aparências do [https://www.mediawiki.org/wiki/Category:All_skins diretório de aparências do mediawiki.org]:\n:* Baixando o [https://www.mediawiki.org/wiki/Download instalador tarball], que vem com várias aparências e extensões. Você pode copiar e colar o diretório <code>skins/</code> dele.\n:* Baixando tarballs individuais de aparência de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonando um dos repositórios <code>mediawiki/skins/*</code> via git no diretório <code dir=\"ltr\">skins/</code> de sua instalação MediaWiki.\n: Fazer isso não deve interferir no seu repositório git se você é um desenvolvedor MediaWiki.Veja [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para informações sobre como habilitar aparências e escolhar a padrão.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (habilitado)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desabilitado''')",
        "special-characters-group-khmer": "Cambojano",
        "special-characters-title-endash": "traço",
        "special-characters-title-emdash": "travessão",
-       "special-characters-title-minus": "sinal de menos"
+       "special-characters-title-minus": "sinal de menos",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-redirect": "Direto para $1"
 }
index e1c80b8..40b1339 100644 (file)
        "title-invalid-talk-namespace": "O título da página solicitada refere-se a uma página de discussão que não existe.",
        "title-invalid-characters": "O título da página solicitada contém carateres inválidos: \"$1\".",
        "title-invalid-too-long": "O título da página solicitada é demasiado longo. Não deverá ser maior que $1 {{PLURAL:$1|byte|bytes}} na codificação UTF-8.",
+       "title-invalid-leading-colon": "O título da página solicitada contém um erro de pontuação (:) no início.",
        "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. No máximo {{PLURAL:$1|um resultado é disponível|$1 resultados são disponíveis}} na ''cache''.",
        "perfcachedts": "Os seguintes dados encontram-se armazenados na ''cache'' e foram atualizados pela última vez a $1. No máximo {{PLURAL:$4|um resultado está disponível|$4 resultados estão disponíveis}} na ''cache''.",
        "querypage-no-updates": "As atualizações estão presentemente desativadas para esta página.\nPor enquanto, os dados aqui presentes não poderão ser atualizados.",
        "actionthrottled": "Operação limitada",
        "actionthrottledtext": "Como medida anti-spam, está impedido de realizar esta operação demasiadas vezes num espaço de tempo curto e já excedeu esse limite. Tente de novo dentro de alguns minutos, por favor.",
        "protectedpagetext": "Esta página foi protegida para prevenir a sua edição.",
-       "viewsourcetext": "Pode ver e copiar o conteúdo desta página:",
-       "viewyourtext": "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
+       "viewsourcetext": "Pode ver e copiar o conteúdo desta página.",
+       "viewyourtext": "Pode ver e copiar o código-fonte das <strong>suas edições</strong> desta página.",
        "protectedinterface": "Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.",
        "editinginterface": "<strong>Aviso:</strong> Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores.",
        "translateinterface": "Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
-       "cascadeprotected": "Esta página foi protegida contra edições por estar incluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de proteção \"em cascata\" ativada):\n$2",
+       "cascadeprotected": "Esta página foi protegida contra edições por estar transcluída {{PLURAL:$1|na página listada|nas páginas listadas}} a seguir, ({{PLURAL:$1|página essa que está protegida|páginas essas que estão protegidas}} com a opção de proteção \"em cascata\" ativada):\n$2",
        "namespaceprotected": "Não tem permissão para editar páginas no domínio '''$1'''.",
        "customcssprotected": "Não tem permissão para editar esta página de CSS porque esta contém as configurações pessoais de outro utilizador.",
        "customjsprotected": "Não tem permissão para editar esta página de JavaScript porque esta contém as configurações pessoais de outro utilizador.",
        "createacct-benefit-body2": "{{PLURAL:$1|página|páginas}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuidor|contribuidores}} recentes",
        "badretype": "As palavras-passe que introduziu não coincidem.",
+       "usernameinprogress": "Uma conta para este nome de utilizador já está a ser criada.\nPor favor, aguarde.",
        "userexists": "O nome de utilizador introduzido já existe.\nPor favor escolha um nome diferente.",
        "loginerror": "Erro ao iniciar sessão",
        "createacct-error": "Erro na criação da conta",
        "creating": "A criar $1",
        "editingsection": "A editar $1 (secção)",
        "editingcomment": "A editar $1 (nova secção)",
-       "editconflict": "As suas alterações não puderam ser gravadas devido a um conflito de edição. Gostaria de resolver o conflito manualmente?",
+       "editconflict": "Conflito de edição: $1",
        "explainconflict": "A página foi alterada por alguém desde que começou a editá-la.\nA caixa de texto abaixo mostra o texto existente neste momento.\nAs suas mudanças são mostradas na área ao fundo da página.\nTerá de reintegrar as suas mudanças no texto da caixa abaixo.\n'''Só''' o texto desta caixa será gravado quando clicar \"{{int:savearticle}}\".",
        "yourtext": "O seu texto",
        "storedversion": "Versão gravada",
        "yourdiff": "Diferenças",
        "copyrightwarning": "Note, por favor, que todas as suas contribuições na {{SITENAME}} são consideradas publicadas nos termos da licença $2 (consulte $1 para mais detalhes).\nSe não deseja que o seu texto possa ser inexoravelmente editado e redistribuído, não o envie.\nGarante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre.<br />\n'''Não envie conteúdos cujos direitos de autor estão protegidos, sem ter a devida permissão!'''",
        "copyrightwarning2": "Note, por favor, que todas as suas contribuições na {{SITENAME}} podem ser editadas, alteradas ou removidas por outros utilizadores.\nSe não deseja que o seu texto seja inexoravelmente editado, não o envie.<br />\nGarante-nos também que isto é algo escrito por si, ou copiado do domínio público ou de outra fonte de teor livre (consulte $1 para mais detalhes).<br />\n'''Não envie conteúdos cujos direitos de autor estão protegidos, sem ter a devida permissão!'''",
+       "editpage-cannot-use-custom-model": "O modelo de conteúdo desta página não pode ser alterado.",
        "longpageerror": "'''Erro: O texto que submeteu ocupa {{PLURAL:$1|um kilobyte|$1 kilobytes}}, que excede o máximo de {{PLURAL:$2|um kilobyte|$2 kilobytes}}.'''\nA página não pode ser gravada.",
        "readonlywarning": "'''Aviso: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar a sua edição neste momento.'''\nPode, no entanto, copiar e colar o seu texto num ficheiro de texto e guardá-lo para mais tarde.\n\nO administrador que bloqueou a base de dados forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Aviso: Esta página foi protegida para só poder ser editada por administradores.'''\nO último registo é apresentado abaixo para referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida de modo a que apenas utilizadores registados a possam editar.\nA última entrada no histórico é fornecida abaixo como referência.",
-       "cascadeprotectedwarning": "'''Aviso:''' Esta página está protegida de forma que apenas os administradores possam editá-la, porque se encontra incluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} em cascata:",
+       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página está protegida de forma que apenas os administradores possam editá-la, porque se encontra transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} em cascata:",
        "titleprotectedwarning": "'''Aviso: Esta página foi protegida de forma a que [[Special:ListGroupRights|privilégios específicos]] sejam necessários para criá-la.'''\nPara referência, é apresentada abaixo a última entrada do registo:",
        "templatesused": "{{PLURAL:$1|Predefinição utilizada|Predefinições utilizadas}} nesta página:",
        "templatesusedpreview": "{{PLURAL:$1|Predefinição utilizada|Predefinições utilizadas}} nesta antevisão:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Matriz vazia",
+       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] chama [[:$2]] com mais de um valor para o parâmetro \"$3\". Somente o último valor fornecido será utilizado.",
        "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "duplicate-args-category-desc": "A página contém campos de predefinições que utilizam duplicatas de argumentos, tais como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Aviso:''' Esta página contém demasiadas chamadas de funções exigentes do analisador sintático.\n\nDevia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLURAL:$1|chamada|chamadas}}.",
        "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
        "search-suggest": "Será que quis dizer: $1",
+       "search-rewritten": "A mostrar resultados para $1. Pesquise antes por $2.",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "rows": "Linhas:",
        "columns": "Colunas:",
        "searchresultshead": "Pesquisar",
-       "stub-threshold": "Ligações para páginas curtas terão <a href=\"#\" class=\"stub\">este formato</a> se ocuparem menos de (bytes):",
+       "stub-threshold": "Limite para a formatação de ligações para esboços ($1):",
+       "stub-threshold-sample-link": "amostra",
        "stub-threshold-disabled": "Desativado",
        "recentchangesdays": "Dias a apresentar nas mudanças recentes:",
        "recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|dia|dias}}",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 utilizador|$1 utilizadores}} a vigiar]",
-       "rc_categories": "Limitar às categorias (separar com \"|\")",
-       "rc_categories_any": "Qualquer",
+       "rc_categories": "Limitar às categorias (separar com \"|\"):",
+       "rc_categories_any": "Qualquer dos escolhidos",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após mudança",
        "newsectionsummary": "/* $1 */ nova secção",
        "rc-enhanced-expand": "Mostrar detalhes",
        "upload-too-many-redirects": "A URL continha demasiados redirecionamentos",
        "upload-http-error": "Ocorreu um erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "Não é possível realizar carregamentos remotos neste domínio.",
+       "upload-dialog-title": "Carregar ficheiro",
+       "upload-dialog-error": "Ocorreu um erro",
+       "upload-dialog-warning": "Ocorreu um aviso",
+       "upload-dialog-button-cancel": "Cancelar",
+       "upload-dialog-button-done": "Feito",
+       "upload-dialog-button-save": "Gravar",
+       "upload-dialog-button-upload": "Carregar",
+       "upload-dialog-label-select-file": "Selecionar ficheiro",
+       "upload-dialog-label-infoform-title": "Detalhes",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrição",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nome do ficheiro",
        "backend-fail-stream": "Não foi possível transmitir o ficheiro \"$1\".",
        "backend-fail-backup": "Não foi possível fazer cópia de segurança do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro $1 não existe.",
        "unusedimages": "Ficheiros não utilizados",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
+       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações a elas, excluindo páginas que possuem apenas redirecionamentos a elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento a elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
        "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, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].",
        "booksources-text": "É apresentada abaixo uma lista de ligações para outros sítios na Internet que vendem livros novos e usados e talvez possuam informações adicionais sobre os livros que procura:",
        "booksources-invalid-isbn": "O número ISBN fornecido não parece ser válido; verifique a existência de erros ao copiar da fonte original.",
        "specialloguserlabel": "Executante:",
-       "speciallogtitlelabel": "Alvo (página ou utilizador):",
+       "speciallogtitlelabel": "Alvo (título ou página ou {{ns:user}}:nome de utilizador):",
        "log": "Registos",
        "all-logs-page": "Todos os registos públicos",
        "alllogstext": "Apresentação combinada de todos os registos disponíveis na wiki {{SITENAME}}.\nPode reduzir a lista escolhendo um tipo de registo, um nome de utilizador ou um título de página. Respeite maiúsculas e minúsculas.",
-       "logempty": "Não há dados a apresentar.",
+       "logempty": "Nenhum item correspondente no registo.",
        "log-title-wildcard": "Procurar títulos iniciados por este texto",
        "showhideselectedlogentries": "Mostrar ou ocultar as entradas selecionadas",
        "log-edit-tags": "Editar etiquetas das entradas de registo selecionadas",
        "linksearch-pat": "Padrão de pesquisa:",
        "linksearch-ns": "Domínio:",
        "linksearch-ok": "Pesquisar",
-       "linksearch-text": "É possível usar caracteres de substituição ''(wildcards)'', tais como \"*.wikipedia.org\".\nÉ necessário, pelo menos, um domínio de topo, por exemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: <code>$1</code> (será utilizado http:// se não for especificado um protocolo).",
+       "linksearch-text": "É possível usar caracteres de substituição ''(wildcards)'', tais como \"*.wikipedia.org\".\nÉ necessário, pelo menos, um domínio de topo, por exemplo \"*.org\".<br />\n{{PLURAL:$2|Protocolo suportado|Protocolos suportados}}: $1 (será utilizado http:// se não for especificado um protocolo).",
        "linksearch-line": "Ligação para $1 na página $2",
        "linksearch-error": "Caracteres de substituição ''(wildcards)'' só podem ser usados no início do endereço.",
        "listusersfrom": "Mostrar utilizadores começados por:",
        "emailuser": "Enviar correio eletrónico a este utilizador",
        "emailuser-title-target": "Enviar correio eletrónico a {{GENDER:$1|este utilizador|esta utilizadora}}",
        "emailuser-title-notarget": "Enviar correio eletrónico ao utilizador",
-       "emailpage": "Enviar correio eletrónico ao utilizador",
        "emailpagetext": "Pode usar o formulário abaixo para enviar uma mensagem por correio eletrónico para {{GENDER:$1|este utilizador|esta utilizadora}}.\nO endereço de correio que introduziu nas [[Special:Preferences|suas preferências]] irá aparecer no campo do remetente da mensagem \"De:\", para que o destinatário lhe possa responder diretamente.",
        "defemailsubject": "Correio eletrónico da {{SITENAME}}, do utilizador \"$1\"",
        "usermaildisabled": "O correio eletrónico do utilizador foi desativado",
        "emailccsubject": "Cópia da sua mensagem para $1: $2",
        "emailsent": "Mensagem enviada",
        "emailsenttext": "A sua mensagem foi enviada.",
-       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"{{int:emailpage}}\" em {{SITENAME}}.",
+       "emailuserfooter": "Esta mensagem foi enviada por $1 para $2 através da opção \"{{int:emailuser}}\" em {{SITENAME}}.",
        "usermessage-summary": "Deixar mensagem de sistema.",
        "usermessage-editor": "Editor de mensagens de sistema",
        "watchlist": "Páginas vigiadas",
        "watchlistanontext": "Por favor, inicie sessão para ver ou editar itens da sua lista de páginas vigiadas.",
        "watchnologin": "Não está autenticado(a)",
        "addwatch": "Adicionar às páginas vigiadas",
-       "addedwatchtext": "A página \"[[:$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].\nModificações futuras desta página e da respetiva página de discussão serão listadas lá.",
+       "addedwatchtext": "\"[[:$1]]\" e a sua página de discussão foram adicionadas à sua [[Special:Watchlist|lista de páginas vigiadas]].",
        "addedwatchtext-short": "A página \"$1\" foi adicionada à sua lista de vigiadas.",
        "removewatch": "Remover das páginas vigiadas",
-       "removedwatchtext": "A página \"[[:$1]]\" foi removida da sua lista de [[Special:Watchlist|páginas vigiadas]].",
+       "removedwatchtext": "\"[[:$1]]\" e a sua página de discussão foram removidas da sua lista de [[Special:Watchlist|páginas vigiadas]].",
        "removedwatchtext-short": "A página \"$1\" foi removida da sua lista de vigiadas.",
        "watch": "Vigiar",
        "watchthispage": "Vigiar esta página",
        "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
        "sessionfailure-title": "Erro de sessão",
        "sessionfailure": "Foram detectados problemas com a sua sessão;\na operação foi cancelada como medida de proteção contra a interceptação de sessões.\nVolte à página anterior, recarregue-a e tente novamente.",
+       "changecontentmodel": "Editar o modelo de conteúdo de uma página",
+       "changecontentmodel-legend": "Editar modelo de contéudo",
+       "changecontentmodel-title-label": "Título da página",
+       "changecontentmodel-model-label": "Novo modelo de conteúdo",
        "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-success-title": "O modelo de conteúdo foi alterado",
+       "changecontentmodel-success-text": "O tipo de conteúdo de [[:$1]] foi alterado.",
+       "logentry-contentmodel-change-revertlink": "reverter",
+       "logentry-contentmodel-change-revert": "reverter",
        "protectlogpage": "Registo de proteção",
        "protectlogtext": "Encontra abaixo o registo de proteção e desproteção de páginas.\nConsulte a [[Special:ProtectedPages|lista de páginas protegidas]] para ver as páginas que se encontram protegidas neste momento.",
        "protectedarticle": "protegeu \"[[$1]]\"",
        "protect-locked-blocked": "Não pode alterar níveis de proteção enquanto estiver bloqueado.\nEsta é a configuração presente para a página '''$1''':",
        "protect-locked-dblock": "Não é possível alterar os níveis de proteção, porque a base de dados está bloqueada.\nEsta é a configuração atual para a página '''$1''':",
        "protect-locked-access": "A sua conta não tem permissões para alterar os níveis de proteção de uma página.\nEsta é a configuração atual da página '''$1''':",
-       "protect-cascadeon": "Esta página está atualmente protegida porque está incluída {{PLURAL:$1|na página listada a seguir, a qual|nas páginas listadas a seguir, as quais}} têm a proteção em cascata ativada.\nAlterações feitas ao nível de proteção desta página não afetarão a proteção em cascata.",
+       "protect-cascadeon": "Esta página está atualmente protegida porque está transcluída {{PLURAL:$1|na página listada a seguir, a qual|nas páginas listadas a seguir, as quais}} têm a proteção em cascata ativada.\nAlterações feitas ao nível de proteção desta página não afetarão a proteção em cascata.",
        "protect-default": "Permitir todos os utilizadores",
        "protect-fallback": "Permitir apenas utilizadores com o privilégio de \"$1\"",
        "protect-level-autoconfirmed": "Permitir apenas utilizadores autoconfirmados",
        "undeletepagetext": "{{PLURAL:$1|A seguinte página foi eliminada|As seguintes páginas foram eliminadas}}, mas ainda {{PLURAL:$1|permanece|permanecem}} em arquivo e podem ser restauradas. O arquivo pode ser limpo periodicamente.",
        "undelete-fieldset-title": "Restaurar edições",
        "undeleteextrahelp": "Para restaurar o histórico de edições completo desta página, desmarque todas as caixas de seleção e clique '''''{{int:undeletebtn}}'''''.\nPara efetuar uma restauração seletiva, marque as caixas correspondentes às edições que pretende restaurar e clique '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|edição disponível|edições disponíveis}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisão eliminada|revisões eliminadas}}",
        "undeletehistory": "Se restaurar uma página, todas as edições serão restauradas para o histórico.\nSe uma nova página foi criada com o mesmo nome desde a eliminação, as edições restauradas aparecerão no histórico anterior.",
        "undeleterevdel": "O restauro não será efetuado se resulta na remoção parcial da versão mais recente da página ou ficheiro.\nNestes casos, deverá desmarcar ou revelar a versão eliminada mais recente.",
        "undeletehistorynoadmin": "Esta página foi eliminada. O motivo de eliminação é apresentado no sumário abaixo, junto dos detalhes do utilizador que editou esta página antes de eliminar. O texto atual destas edições eliminadas encontra-se agora apenas disponível para administradores.",
        "importcantopen": "Não foi possível abrir o ficheiro a importar",
        "importbadinterwiki": "Ligação interlíngua incorreta",
        "importsuccess": "Importação completa!",
-       "importnosources": "Não foram definidas fontes de importação transwikis e o carregamento direto de históricos encontra-se desativado.",
+       "importnosources": "Não foram definidas as wikis das quais importar e o carregamento direto de históricos encontra-se desativado.",
        "importnofile": "Nenhum ficheiro de importação foi carregado.",
        "importuploaderrorsize": "O carregamento do ficheiro importado falhou.\nO ficheiro é maior do que o tamanho máximo permitido.",
        "importuploaderrorpartial": "O carregamento do ficheiro importado falhou.\nO ficheiro foi recebido parcialmente.",
        "tooltip-n-mainpage-description": "Visitar a página principal",
        "tooltip-n-portal": "Sobre o projeto, o que se pode fazer e onde encontrar as coisas",
        "tooltip-n-currentevents": "Informação temática sobre acontecimentos atuais",
-       "tooltip-n-recentchanges": "A lista de mudanças recentes nesta wiki.",
+       "tooltip-n-recentchanges": "Uma lista de mudanças recentes nesta wiki",
        "tooltip-n-randompage": "Carregar página aleatória",
        "tooltip-n-help": "Um local reservado para auxílio.",
        "tooltip-t-whatlinkshere": "Lista de todas as páginas que contêm ligações para esta",
        "tooltip-ca-nstab-main": "Ver a página de conteúdo",
        "tooltip-ca-nstab-user": "Ver a página de utilizador",
        "tooltip-ca-nstab-media": "Ver a página de multimédia",
-       "tooltip-ca-nstab-special": "Esta é uma página especial, não pode ser editada.",
+       "tooltip-ca-nstab-special": "Esta é uma página especial e não pode ser editada.",
        "tooltip-ca-nstab-project": "Ver a página de projeto",
        "tooltip-ca-nstab-image": "Ver a página de ficheiro",
        "tooltip-ca-nstab-mediawiki": "Ver a mensagem de sistema",
        "spam_reverting": "A reverter para a última revisão que não contém ligação para $1",
        "spam_blanking": "Todas as revisões continham ligações para $1; a esvaziar",
        "spam_deleting": "Todas as revisões continham ligações para $1; a eliminar",
-       "simpleantispam-label": "Verificação contra spam.\n<strong>NÃ\83O</strong> preencha isto!",
+       "simpleantispam-label": "Verificação contra spam.\n<strong>Não</strong> preencha isto!",
        "pageinfo-title": "Informações sobre \"$1\"",
        "pageinfo-not-current": "Desculpe, é impossível fornecer esta informação para revisões antigas.",
        "pageinfo-header-basic": "Informação básica",
        "pageinfo-robot-index": "Permitida",
        "pageinfo-robot-noindex": "Não permitida",
        "pageinfo-watchers": "Número de vigilantes da página",
+       "pageinfo-visiting-watchers": "Número de vigilantes que consultaram as edições recentes da página",
        "pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
+       "pageinfo-few-visiting-watchers": "Pode ou não pode haver editores a vigiar as edições recentes",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
        "pageinfo-subpages-name": "Subpáginas desta página",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})",
        "deletedwhileediting": "<strong>AVISO:</strong> Esta página foi eliminada depois de ter começado a editá-la!",
        "confirmrecreate": "Depois de ter começado a editar esta página, o utilizador [[User:$1|$1]] ([[User talk:$1|conversar]]) eliminou-a pelo seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que quer realmente recriar esta página.",
        "confirmrecreate-noreason": "O utilizador [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou esta página depois de ter começado a editá-la. Confirme que deseja recriar a página, por favor.",
-       "recreate": "A página que começou a editar foi eliminada entretanto. Pressione \"$1\" para recriá-la.",
+       "recreate": "Recriar",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Limpar a memória cache desta página?",
        "confirm-purge-bottom": "Recarregar uma página, limpa a cache e força a sua versão mais recente a aparecer.",
        "watchlisttools-raw": "Editar a lista de páginas vigiadas em forma de texto",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])",
        "duplicate-defaultsort": "<strong>Aviso:</strong> A chave de ordenação padrão \"$2\" sobrepõe-se à anterior \"$1\".",
-       "duplicate-displaytitle": "<strong>Aviso:</strong> Exibir título \"$2\" substituindo o título anteriormente em exibição \"$1\".",
+       "duplicate-displaytitle": "<strong>Aviso:</strong> O título em exibição \"$2\" anula o título anteriormente em exibição \"$1\".",
        "invalid-indicator-name": "<strong>Erro:</strong> O atributo <code>name</code>, da página de estados, não deve estar em branco.",
        "version": "Versão",
        "version-extensions": "Extensões instaladas",
        "tags-edit-logentry-submit": "Aplicar alterações a {{PLURAL:$1|esta entrada de registo|$1 entradas de registo}}",
        "tags-edit-success": "As alterações foram aplicadas com sucesso.",
        "tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
+       "tags-edit-nooldid-title": "Revisão de página inválida",
+       "tags-edit-nooldid-text": "Não foi especificada nenhuma revisão na qual será realizada esta ação, ou a revisão especificada não existe.",
        "tags-edit-none-selected": "Por favor, selecione pelo menos uma etiqueta para adicionar ou remover.",
        "comparepages": "Comparar páginas",
        "compare-page1": "Página 1",
        "htmlform-cloner-create": "Adicionar mais",
        "htmlform-cloner-delete": "Remover",
        "htmlform-cloner-required": "Pelo menos um valor é necessário.",
+       "htmlform-title-badnamespace": "[[:$1]] não se encontra no domínio \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" não é um título que possa ser atribuído a uma página",
+       "htmlform-title-not-exists": "[[:$1]] não existe.",
+       "htmlform-user-not-exists": "<strong>$1</strong> não existe.",
+       "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de utilizador válido.",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
        "sqlite-no-fts": "$1 sem suporte de pesquisa de texto completo",
        "logentry-delete-delete": "$1 apagou a página $3",
        "logentry-newusers-create2": "A conta de utilizador $3 foi criada por $1",
        "logentry-newusers-byemail": "A conta de utilizador $3 foi criada por $1 e a palavra-passe foi enviada por correio eletrónico",
        "logentry-newusers-autocreate": "A conta de utilizador $1 foi criada automaticamente",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|moveu}} as preferências de proteção de $4 para $3",
        "logentry-rights-rights": "$1 modificou os privilégios do utilizador $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
        "feedback-bugornote": "Se está pronto para descrever um problema técnico em detalhe, por favor, [$1 comunique o defeito].\nCaso contrário, pode facilmente usar o formulário abaixo. O seu comentário será adicionado à página \"[$3 $2]\", junto com o seu nome de utilizador e o navegador que está a usar.",
        "feedback-cancel": "Cancelar",
        "feedback-close": "Feito",
+       "feedback-external-bug-report-button": "Assinalar erro técnico",
        "feedback-dialog-title": "Enviar opinião",
        "feedback-dialog-intro": "Pode usar o fácil formulário abaixo para enviar os seus comentários. A sua opinião será adicionada à página \"$1\", juntamente com o seu nome de utilizador(a).",
        "feedback-error-title": "Erro",
        "feedback-message": "Mensagem:",
        "feedback-subject": "Assunto:",
        "feedback-submit": "Enviar",
+       "feedback-terms": "Entendo que as informações de meu agente de utilizador inclui a informação acerca da versão exata de meu navegador e sistema operacional e que serão partilhadas publicamente juntamente aos meus comentários.",
        "feedback-termsofuse": "Concordo em fornecer comentários de acordo com as Condições de Uso.",
        "feedback-thanks": "Obrigado! O seu comentário foi adicionado à página \"[$2 $1]\".",
        "feedback-thanks-title": "Obrigado!",
+       "feedback-useragent": "Agente de utilizador:",
        "searchsuggest-search": "Pesquisa",
        "searchsuggest-containing": "contendo...",
        "api-error-badaccess-groups": "Não tem permissão para enviar ficheiros para esta wiki.",
        "mediastatistics-header-drawing": "Desenhos (imagens vetoriais)",
        "mediastatistics-header-audio": "Áudio",
        "mediastatistics-header-video": "Vídeo",
+       "mediastatistics-header-multimedia": "Rich media",
        "mediastatistics-header-office": "Documentos",
        "mediastatistics-header-text": "Textuais",
        "mediastatistics-header-executable": "Executáveis",
        "special-characters-title-endash": "hífen",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de subtração",
+       "mw-widgets-dateinput-no-date": "Nenhuma data selecionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
        "mw-widgets-titleinput-description-redirect": "redirecionar para $1"
 }
index ca6d375..d3b5a99 100644 (file)
                        "Macofe",
                        "FRacco",
                        "Robin0van0der0vliet",
-                       "TTO"
+                       "TTO",
+                       "J. 'mach' wust",
+                       "Ciencia Al Poder"
                ]
        },
        "sidebar": "{{notranslate}}",
        "tog-underline": "[[Special:Preferences]], tab 'Misc'. Offers user a choice how to underline links. {{Gender}}",
-       "tog-hideminor": "[[Special:Preferences]], tab 'Recent changes'. Offers user to hide minor edits in recent changes or not. {{Gender}}",
-       "tog-hidepatrolled": "Option in Recent changes tab of [[Special:Preferences]] (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}",
+       "tog-hideminor": "[[Special:Preferences]], tab 'Recent changes'. Offers user to hide minor edits in recent changes or not. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-hidepatrolled": "Option in Recent changes tab of [[Special:Preferences]] (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-newpageshidepatrolled": "Toggle in [[Special:Preferences]], section \"Recent changes\" (if [[mw:Manual:$wgUseRCPatrol|$wgUseRCPatrol]] is enabled). {{Gender}}",
        "tog-extendwatchlist": "[[Special:Preferences]], tab 'Watchlist'. Offers user to show all applicable changes in watchlist (by default only the last change to a page on the watchlist is shown). {{Gender}}",
        "tog-usenewrc": "{{Gender}}\nUsed as label for the checkbox in [[Special:Preferences]], tab \"Recent changes\".\n\nOffers user to use alternative representation of [[Special:RecentChanges]] and watchlist.",
        "tog-fancysig": "In user preferences under the signature box.  {{Gender}}",
        "tog-uselivepreview": "{{Gender}}\nToggle option used in [[Special:Preferences]].\n\nLive preview is a feature to use edit preview without loading the page again.",
        "tog-forceeditsummary": "Toggle option used in [[Special:Preferences]] to force an edit ''{{msg-mw|summary}}''. {{Gender}}",
-       "tog-watchlisthideown": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}",
-       "tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}",
-       "tog-watchlisthideminor": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide minor edits from watchlist. {{Gender}}",
-       "tog-watchlisthideliu": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}",
-       "tog-watchlisthideanons": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}",
-       "tog-watchlisthidepatrolled": "Option in Watchlist tab of [[Special:Preferences]]. {{Gender}}",
+       "tog-watchlisthideown": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideminor": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide minor edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideliu": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthideanons": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
+       "tog-watchlisthidepatrolled": "Option in Watchlist tab of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-ccmeonemails": "Option in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}. {{Gender}}",
        "tog-diffonly": "Toggle option used in [[Special:Preferences]]. {{Gender}}",
        "tog-showhiddencats": "Toggle option used in [[Special:Preferences]]. {{Gender}}",
        "virus-scanfailed": "Used as error message. \"scan\" stands for \"virus scan\". Parameters:\n* $1 - exit code of virus scanner",
        "virus-unknownscanner": "Used as error message. This message is followed by the virus scanner name.",
        "logouttext": "Log out message. Parameters:\n* $1 - (Unused) an URL to [[Special:Userlogin]] containing <code>returnto</code> and <code>returntoquery</code> parameters",
-       "welcomeuser": "Text for a welcome heading that users see after registering a user account.\n\nParameters:\n* $1 - the username of the new user. See [[bugzilla:42215]]",
-       "welcomecreation-msg": "A welcome message users see after registering a user account, following a welcomeuser heading.\n\nParameters:\n* $1 - (Unused) the username of the new user.\n\nReplaces welcomecreation in 1.21wmf5, see [[bugzilla:42215]]",
+       "welcomeuser": "Text for a welcome heading that users see after registering a user account.\n\nParameters:\n* $1 - the username of the new user. See [[phab:T44215]]",
+       "welcomecreation-msg": "A welcome message users see after registering a user account, following a welcomeuser heading.\n\nParameters:\n* $1 - (Unused) the username of the new user.\n\nReplaces [[MediaWiki:welcomecreation|welcomecreation]] in 1.21wmf5, see [[phab:T44215]]",
        "yourname": "Since 1.22 no longer used in core, but used by some extensions.\n{{Identical|Username}}",
        "userlogin-yourname": "In user login & create account forms, label for username field.\n{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}\n\nSee examples: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n{{Identical|Username}}",
        "userlogin-yourname-ph": "Placeholder text in login & create account form field.\n\nSee example: [[Special:UserLogin]] and [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
        "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
        "createacct-benefit-body3": "In vertical-layout create account form, the text for the third benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head3}} (number of contributors).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of contributors (users)",
        "badretype": "Used as error message when the new password and its retype do not match.",
+       "usernameinprogress": "Used as error message in creating a user account.",
        "userexists": "Used as error message in creating a user account.",
        "loginerror": "Used as title of error message.\n{{Identical|Login error}}",
        "createacct-error": "Used as heading for the error message.",
        "sectioneditnotsupported-text": "I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [[meta:Help:Section_editing#Section_editing|meta]].",
        "permissionserrors": "Used as title of error message.\n\nSee also:\n* {{msg-mw|loginreqtitle}}\n{{Identical|Permission error}}",
        "permissionserrorstext": "This message is \"without action\" version of {{msg-mw|Permissionserrorstext-withaction}}.\n\nParameters:\n* $1 - the number of reasons that were found why ''the action'' cannot be performed",
-       "permissionserrorstext-withaction": "This message is \"with action\" version of {{msg-mw|Permissionserrorstext}}.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed\n* $2 - one of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[bugzilla:14246]] (now closed) for background.",
+       "permissionserrorstext-withaction": "This message is \"with action\" version of {{msg-mw|Permissionserrorstext}}.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed\n* $2 - one of the action-* messages (for example {{msg-mw|action-edit}}) or other such messages tagged with {{tl|doc-action}} in their documentation\n\nPlease report at [[Support]] if you are unable to properly translate this message. Also see [[phab:T16246]] (now closed) for background.",
        "recreate-moveddeleted-warn": "Warning shown when creating a page which has already been deleted. See for example [[Test]].",
        "moveddeleted-notice": "Shown on top of a deleted page in normal view modus ([{{canonicalurl:Test}} example]).",
        "log-fulllog": "Used as link text.",
        "mergehistory-reason": "{{Identical|Reason}}",
        "mergehistory-revisionrow": "{{Optional}}\nA revision row in the merge history page. Parameters:\n* $1 - a radio button to indicate a merge point\n* $2 - a link to the last revision of a page ({{msg-mw|Last}})\n* $3 - a page link\n* $4 - a user link\n* $5 - a revision size\n* $6 - a revision comment",
        "mergelog": "{{doc-logpage}}\n\nThis is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.",
-       "pagemerge-logentry": "{{ignored}}This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
+       "pagemerge-logentry": "{{ignored}}This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "revertmerge": "Used as link text",
        "mergelogpagetext": "Description of the [{{canonicalurl:Special:Log|type=merge&user=&page=&year=&month=-1}} merge log], on the log. The associated [[Special:MergeHistory|Merge]] special page is not enabled by default.",
        "history-title": "Displayed as page title when you click on the \"history\" tab. Parameters:\n* $1 - the normal page title",
        "search-category": "This text will be shown on the search result listing after the page title of a result if the search algorithm thinks that the page being in a particular category is relevant.\n\nParameters:\n* $1 - the category's name with any matching portion highlighted\n{{Identical|Category}}",
        "search-file-match": "This text will be shown on the search result listing after the page title of a result if the search engine got search results from the contents of files, rather than the pages.",
        "search-suggest": "Used for \"Did you mean\" suggestions:\n* $1 - suggested link",
+       "search-rewritten": "Used when the user is served the results for a query other than what they provided. Parameters:\n* $1 - a link to search for the current result set.\n* $2 - a link to perform the original search without rewriting.",
        "search-interwiki-caption": "Used in [[Special:Search]], when showing search results from other wikis.",
        "search-interwiki-default": "Parameters:\n* $1 - the hostname of the remote wiki from where the additional results listed below are returned",
        "search-interwiki-custom": "#REDIRECT [[MediaWiki:Wmf-search-interwiki-custom/qqq]]",
        "rows": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Row}}",
        "columns": "Used on [[Special:Preferences]], \"Editing\" section in the \"Size of editing window\" fieldset.\n{{Identical|Column}}",
        "searchresultshead": "Replaced by {{msg-mw|prefs-searchoptions}}, though may still be used in some extensions. DEPRECATED.\n\n{{Identical|Search}}",
-       "stub-threshold": "Used in [[Special:Preferences]], tab \"Misc\".",
+       "stub-threshold": "Used in [[Special:Preferences]], \"Advanced options\" section. The setting allows the user to select a threshold value, in bytes, from a predefined list of options. Any links that lead to pages smaller than the threshold (\"stub links\") will be styled differently.\n\nParameters:\n* $1: the text of {{msg-mw|stub-threshold-sample-link}}, styled as a stub link",
+       "stub-threshold-sample-link": "Passed as a parameter to the {{msg-mw|stub-threshold}} message.",
        "stub-threshold-disabled": "Used in [[Special:Preferences]].\n{{Identical|Disabled}}",
        "recentchangesdays": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "recentchangesdays-max": "Shown as hint in [[Special:Preferences]], tab \"Recent changes\". Parameters:\n* $1 - number of days\nSee also:\n* {{msg-mw|Prefs-watchlist-days-max}}",
        "unpatrolledletter": "{{optional}}\n\nUsed in {{msg-mw|Recentchanges-label-legend}}, meaning \"unpatrolled\".",
        "number_of_watching_users_RCview": "{{notranslate}}\nParameters:\n* $1 - number of users who are watching",
        "number_of_watching_users_pageview": "Used if <code>$wgPageShowWatchingUsers</code> is true.\n* $1 - number of watching user(s)",
-       "rc_categories": "Probably to do with 'recent changes' special page, either in a particular skin, or for a particular user group.\n\nI guess that this should appear before an input box where you can specify that recent changes should be shown for pages belonging to certain categories only. You name the categories in the input box, and separate them by a pipe character. If this is right, then you should be able to use 'restrict' instead of 'limit', or even 'show pages in the following categories only'.",
-       "rc_categories_any": "Used in the CategoryFilter form on [[Special:RecentChanges]], if <code>$wgAllowCategorizedRecentChanges</code> is true.\n{{Identical|Any}}",
+       "rc_categories": "A label of an input box. Appears on Special:RecentChanges if filtering recent changes by category is enabled (that is, $wgAllowCategorizedRecentChanges is set to true).",
+       "rc_categories_any": "Appears ''after'' the input box the label of which is {{msg-mw|rc_categories}}, which appears on [[Special:RecentChanges]], if <code>$wgAllowCategorizedRecentChanges</code> is true. \"Chosen\" refers to categories.",
        "rc-change-size": "{{optional}}\nDoes not work under $wgMiserMode ([[mwr:48986|r48986]]).\n\nParameters:\n* $1 - size of diff",
        "rc-change-size-new": "Tooltip when hovering a change list diff size. Parameters:\n* $1 - the resulting new size (in bytes)",
        "newsectionsummary": "Default summary when adding a new section to a page. Parameters:\n* $1 - section title",
        "uploadwarning": "Used as section header in [[Special:Upload]].",
        "uploadwarning-text": "Used in [[Special:Upload]].",
        "savefile": "When uploading a file",
-       "uploadedimage": "{{ignored}}This is ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
-       "overwroteimage": "{{ignored}}This is ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
+       "uploadedimage": "{{ignored}}This is ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
+       "overwroteimage": "{{ignored}}This is ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
        "uploaddisabled": "Title of the [[Special:Upload]] page when upload is disabled.\n\nSee also:\n* {{msg-mw|Copyuploaddisabled}}",
        "copyuploaddisabled": "See also:\n* {{msg-mw|Uploaddisabled}}",
-       "uploaddisabledtext": "Parameters:\n* $1 - (Optional) the name of the target file. See r22243 and [[bugzilla:8818|bug 8818]].",
+       "uploaddisabledtext": "Parameters:\n* $1 - (Optional) the name of the target file. See [[mw:Special:Code/MediaWiki/r22243|r22243]] and [[phab:T10818|T10818]].",
        "php-uploaddisabledtext": "This means that file uploading is disabled in PHP, not upload of PHP-files.",
        "uploadscripted": "Used as error message when uploading a file.\n\nSee also:\n* {{msg-mw|zip-wrong-format}}\n* {{msg-mw|uploadjava}}\n* {{msg-mw|uploadvirus}}",
        "upload-scripted-pi-callback": "Used as error message when uploading an SVG file that contains xml-stylesheet processing instruction.",
        "upload-warning-msg": "Used as warning body which is posted on the user talk page. Parameters:\n* $1 - the URL the file was uploaded from, when using upload-by-URL\n* $2 - the session key for the upload\nSee also:\n* {{msg-mw|Upload-warning-subj|subject}}",
        "upload-proto-error": "See also:\n* {{msg-mw|Upload-proto-error|title}}\n* {{msg-mw|Upload-proto-error-text|text}}",
        "upload-proto-error-text": "\"Remote upload\" is explained on [[w:Uploading_and_downloading#Remote_upload|Wikipedia]].\n\nSee also:\n* {{msg-mw|Upload-proto-error|title}}\n* {{msg-mw|Upload-proto-error-text|text}}",
-       "upload-file-error": "Unused on core [http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/specials/SpecialUpload.php?r1=53161&r2=53282].\n\nExtensions making use of it:\n*ImportFreeImages\n*SemanticForms\nSee also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}\n{{Identical|Internal error}}",
+       "upload-file-error": "Unused on core [[mw:Special:Code/MediaWiki/53282]].\n\nExtensions making use of it:\n*ImportFreeImages\n*SemanticForms\nSee also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}\n{{Identical|Internal error}}",
        "upload-file-error-text": "See also:\n* {{msg-mw|Upload-file-error|title}}\n* {{msg-mw|Upload-file-error-text|text}}",
        "upload-misc-error": "See also:\n* {{msg-mw|Upload-misc-error|title}}\n* {{msg-mw|Upload-misc-error-text|text}}",
        "upload-misc-error-text": "See also:\n* {{msg-mw|Upload-misc-error|title}}\n* {{msg-mw|Upload-misc-error-text|text}}",
        "upload-too-many-redirects": "Error message shown when uploading a file via URL, if the upload failed because the URL returned too many redirects.",
        "upload-http-error": "Parameters:\n* $1 - error message",
        "upload-copy-upload-invalid-domain": "Error message shown if a user is trying to upload (i.e. copy) a file from a website that is not in $wgCopyUploadsDomains (if set).\n\nSee also:\n* {{msg-mw|http-invalid-url}}\n* {{msg-mw|tmp-create-error}}\n* {{msg-mw|tmp-write-error}}",
+       "upload-dialog-title": "Title of the upload dialog box\n{{Identical|Upload file}}",
+       "upload-dialog-error": "Error message from upload",
+       "upload-dialog-warning": "Warning message from upload",
+       "upload-dialog-button-cancel": "Button to cancel the dialog\n{{Identical|Cancel}}",
+       "upload-dialog-button-done": "Button to close the dialog once upload is complete\n{{Identical|Done}}",
+       "upload-dialog-button-save": "Button to save the file\n{{Identical|Save}}",
+       "upload-dialog-button-upload": "Button to initiate upload\n{{Identical|Upload}}",
+       "upload-dialog-label-select-file": "Label for the select file widget\n{{Identical|Select file}}",
+       "upload-dialog-label-infoform-title": "Title for the information form\n{{Identical|Detail}}",
+       "upload-dialog-label-infoform-name": "Label for the file name input\n{{Identical|Name}}",
+       "upload-dialog-label-infoform-description": "Label for the file description input\n{{Identical|Description}}",
+       "upload-dialog-label-usage-title": "Title for the insert form showing how to use the uploaded item.\n{{Identical|Usage}}",
+       "upload-dialog-label-usage-filename": "Label for the file name input\n{{Identical|Filename}}",
        "backend-fail-stream": "Parameters:\n* $1 - a filename",
        "backend-fail-backup": "Parameters:\n* $1 - a filename",
        "backend-fail-notexists": "Parameters:\n* $1 - a filename",
        "statistics-header-users": "Used in [[Special:Statistics]].\n{{Identical|User statistics}}",
        "statistics-header-hooks": "Header of a section on [[Special:Statistics]] containing data provided by MediaWiki extensions",
        "statistics-articles": "Used in [[Special:Statistics]].\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
+       "statistics-articles-desc": "Caption shown below ''Content pages'' on [[Special:Statistics]]",
        "statistics-pages": "Used in [[Special:Statistics]]\n{{Identical|Page}}",
        "statistics-pages-desc": "Tooltip shown over ''Pages'' (or as a note below it) in [[Special:Statistics]]",
        "statistics-files": "Used in [[Special:Statistics]].\n{{Identical|Uploaded file}}",
        "listusers-summary": "{{notranslate}}\nThe summary displayed at the top of [[Special:Listusers]]. [[mw:Manual:Interface/Special pages summary|mw manual]].",
        "listusers-editsonly": "Option in [[Special:ListUsers]].",
        "listusers-creationsort": "Option in [[Special:ListUsers]].",
-       "listusers-desc": "Used as label for the checkbox.",
+       "listusers-desc": "Used as label for the checkbox on [[Special:ListUsers]].",
        "usereditcount": "Shown behind every username on [[Special:ListUsers]]. Parameters:\n* $1 - number of edits",
        "usercreated": "Used in [[Special:ListUsers]]. Parameters:\n* $1 - a date\n* $2 - a time\n* $3 - the name of the user, for use in GENDER",
        "newpages": "{{doc-special|NewPages}}\n{{Identical|New page}}",
        "emailuser-title-target": "{{doc-special|EmailUser|unlisted=1}}\nUsed when a user was given to e-mail. Parameters:\n* $1 - a plain text username, used for GENDER.",
        "emailuser-title-notarget": "{{doc-special|EmailUser|unlisted=1}}\nUsed when no user given to e-mail yet.",
        "emailuser-summary": "{{doc-specialpagesummary|emailuser}}",
-       "emailpage": "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.",
        "emailpagetext": "This is the text that is displayed above the email form on [[Special:EmailUser]].\n\nSpecial:EmailUser appears when you click on the link \"Email this user\" in the sidebar, but only if there is an email address in the recipient's user preferences. If there isn't then the message {{msg-mw|Noemailtext}} will appear instead of Special:EmailUser.\n\nParameters:\n* $1 - username",
        "defemailsubject": "The default subject of EmailUser emails. Parameters:\n* $1 - the username of the user sending the email and can be used for GENDER",
        "usermaildisabled": "Caption for an error message ({{msg-mw|Usermaildisabledtext}}) shown when the user-to-user e-mail feature is disabled on the wiki (see [[mw:Manual:$wgEnableEmail]], [[mw:Manual:$wgEnableUserEmail]]).",
        "changecontentmodel-success-title": "Title of the success page of the change content model special page",
        "changecontentmodel-success-text": "Message telling user that their change has been successfully done.\n* $1 - Target page title",
        "changecontentmodel-cannot-convert": "Error message shown if the content model cannot be changed to the specified type. $1 is the page title, $2 is the localized content model name.",
-       "changecontentmodel-title-cantexist": "Error message shown if the page the user provided is a special page.\n\nParameters:\n* $1 - the page title which cannot exist",
        "changecontentmodel-nodirectediting": "Error message shown if the content model does not allow for direct editing. $1 is the localized name of the content model.",
        "log-name-contentmodel": "{{doc-logpage}}\n\nTitle of [[Special:Log/contentmodel]].",
        "log-description-contentmodel": "Text in [[Special:Log/contentmodel]].",
        "protectedarticle": "Text describing an action on [[Special:Log]]. $1 is a page title.",
        "modifiedarticleprotection": "Text describing an action on [[Special:Log]]. $1 is a page title.",
        "unprotectedarticle": "Used as action in the log. Parameters:\n* $1 - target page title",
-       "movedarticleprotection": "This is a log entry. It appears in the log if a protected page is renamed.\n\nExample:\n<code>00:51, 16 September 2010 Siebrand +(Talk • contribs • block) moved protection settings from \"User:Siebrand/prot-move\" to \"User:Siebrand/prot-moved\" ‎ (User:Siebrand/prot-move moved to User:Siebrand/prot-moved: prot_move test.)</code>\n\nParameters:\n* $1 - target page title\n* $2 - source page title",
+       "movedarticleprotection": "This is a ''logentry'' message only used on IRC. It appears in the log if a protected page is renamed.\n\nExample:\n<code>00:51, 16 September 2010 Siebrand +(Talk • contribs • block) moved protection settings from \"User:Siebrand/prot-move\" to \"User:Siebrand/prot-moved\" ‎ (User:Siebrand/prot-move moved to User:Siebrand/prot-moved: prot_move test.)</code>\n\nParameters:\n* $1 - target page title\n* $2 - source page title",
        "protect-title": "Title for the protection form. $1 is the title of the page to be (un)protected.",
        "protect-title-notallowed": "Same as {{msg-mw|Protect-title}}, but when the user does not have the right to change protection levels.\n\nParameters:\n* $1 - page title",
        "prot_1movedto2": "Message description: [[mw:Manual:Interface/1movedto2]]\n\nParameters:\n* $1 - source page title\n* $2 - target page title",
        "blocklogpage": "{{doc-logpage}}\n\nThe page name of [[Special:Log/block]]. Also appears in the drop down menu of [[Special:Log]] pages and in the action links of Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\n{{Identical|Block log}}",
        "blocklog-showlog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nSee also:\n* {{msg-mw|Blocklog-showsuppresslog}}\n* {{msg-mw|Globalblocking-showlog}}",
        "blocklog-showsuppresslog": "Parameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER",
-       "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
-       "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
+       "blocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 - the blocked user or IP (with link to contributions and talk)\n* $2 - the duration of the block (hours, days etc.) or the specified expiry date\n* $3 - contains \"(details) (''reason'')\", or empty string\nSee also:\n* {{msg-mw|Unblocklogentry}}\n* {{msg-mw|Reblock-logentry}}",
+       "reblock-logentry": "This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the user being reblocked\n* $2 - the expiry time of the block\n* $3 - extra parameters like \"account creation blocked\" (they are automatically between brackets)",
        "blocklogtext": "Appears on top of [[Special:Log/block]].",
-       "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
+       "unblocklogentry": "This is ''logentry'' message only used on IRC.\n* $1 is the user being unblocked",
        "block-log-flags-anononly": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Anononlyblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-nocreate": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Createaccountblock}}\n{{Related|Block-log-flags}}",
        "block-log-flags-noautoblock": "Used as a block log flag in [[Special:Log/block]] and in [[Special:Block]].\n{{Related|Block-log-flags}}\n{{Identical|Autoblock disabled}}",
        "import-rootpage-nosubpage": "Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:\n* $1 is a namespace name.",
        "importlogpage": "{{doc-logpage}}",
        "importlogpagetext": "This text appears at the top of the [{{canonicalurl:Special:Log|type=import}} import log] special page.",
-       "import-logentry-upload": "{{ignored}}This is ''logentry'' message only used on IRC.\n* $1 is the name of the imported file",
+       "import-logentry-upload": "{{ignored}}This is ''logentry'' message only used on IRC.\n* $1 is the name of the imported file",
        "import-logentry-upload-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\nSee also:\n* {{msg-mw|Import-logentry-interwiki-detail}}",
-       "import-logentry-interwiki": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - page title",
+       "import-logentry-interwiki": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - page title",
        "import-logentry-interwiki-detail": "Used as success message and log entry. Parameters:\n* $1 - number of succeeded revisions\n* $2 - interwiki name\nSee also:\n* {{msg-mw|Import-logentry-upload-detail}}",
        "javascripttest": "Title of the special page [[Special:JavaScriptTest]].\n\nSee also:\n* {{msg-mw|Javascripttest|title}}\n* {{msg-mw|Javascripttest-pagetext-noframework|summary}}\n* {{msg-mw|Javascripttest-pagetext-unknownframework|error message}}",
        "javascripttest-backlink": "{{optional}}\nUsed as subtitle in [[Special:JavaScriptTest]]. Parameters:\n* $1 - page title",
        "sunday-at": "Phrase for indicating that something occurred at a particular time on the most recent Sunday.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
        "today-at": "Phrase for indicating that something occurred at a particular time today.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
        "yesterday-at": "Phrase for indicating that something occurred at a particular time yesterday.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
-       "bad_image_list": "箇条信息只出现在引导管理员用正确个格式加链接。弗会徕Mediawiki别荡处出现。",
+       "bad_image_list": "This message only appears to guide administrators to add links with the right format. This will not appear anywhere else in MediaWiki.",
        "variantname-zh-hans": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "variantname-zh-hant": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "variantname-zh-cn": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "autosumm-new": "The auto summary when creating a new page. $1 are the first X number of characters of the new page.",
        "autosumm-newblank": "The automatic edit summary when creating a blank page. This is not the same as blanking a page.",
        "autoblock_whitelist": "{{notranslate}}",
-       "size-bytes": "{{optional}}\nSize (of a page, typically) in bytes.",
+       "size-bytes": "Size (of a page, typically) in bytes.",
        "size-kilobytes": "{{optional}}\nSize (of a page, typically) in kibibytes (1 kibibyte = 1024 bytes).",
        "size-megabytes": "{{optional}}\nSize (of a file, typically) in mebibytes (1 mebibyte = 1024×1024 bytes).",
        "size-gigabytes": "{{optional}}\nSize (of a file, typically) in gibibytes (1 gibibyte = 1024×1024×1024 bytes).",
        "size-exabytes": "{{optional}}\nSize (of a file, typically) in exbibytes (1 exbibytes = 1024×1024×1024×1024×1024×1024 bytes).",
        "size-zetabytes": "{{optional}}\nSize (of a file, typically) in zebibytes (1 zebibytes = 1024×1024×1024×1024×1024×1024×1024 bytes).",
        "size-yottabytes": "{{optional}}\nSize (of a file, typically) in yobibytes (1 yobibytes = 1024×1024×1024×1024×1024×1024×1024×1024 bytes).",
-       "size-pixel": "{{optional}}\nSize (of a file, typically) in pixel.",
+       "size-pixel": "Size (of a file, typically) in pixel.",
        "size-kilopixel": "{{optional}}\nSize (of a file, typically) in kilopixel (1 kilopixel = 1000 pixel).",
        "size-megapixel": "{{optional}}\nSize (of a file, typically) in megapixel (1 megapixel = 1000×1000 pixel).",
        "size-gigapixel": "{{optional}}\nSize (of a file, typically) in gigapixel (1 gigapixel = 1000×1000×1000 pixel).",
        "version-api": "{{optional}}",
        "version-other": "{{Identical|Other}}",
        "version-mediahandlers": "Used in [[Special:Version]]. It is the title of a section for media handler extensions (e.g. [[mw:Extension:OggHandler]]).\nThere are no such extensions here, so look at [[wikipedia:Special:Version]] for an example.",
-       "version-hooks": "Shown in [[Special:Version]]",
+       "version-hooks": "Shown in [[Special:Version]]\n{{Identical|Hook}}",
        "version-parser-extensiontags": "Part of [[Special:Version]].\nThis message is followed by the list of parser extension tags like <code><nowiki><charinsert></nowiki></code>, <code><nowiki><coordinates></nowiki></code>, etc.",
        "version-parser-function-hooks": "Shown in [[Special:Version]]",
        "version-hook-name": "Shown in [[Special:Version]].\n\nFor meaning of hook see [[mw:Special:MyLanguage/Manual:Hooks|mw:Manual:Hooks]] and [[w:Hooking]].",
        "htmlform-cloner-create": "Used as the text for the button that adds a row to a multi-input HTML form element.\n\nSee also:\n* {{msg-mw|htmlform-cloner-delete}}\n* {{msg-mw|htmlform-cloner-required}}",
        "htmlform-cloner-delete": "Used as the text for the button that removes a row from a multi-input HTML form element\n\nSee also:\n* {{msg-mw|htmlform-cloner-create}}\n* {{msg-mw|htmlform-cloner-required}}\n{{Identical|Remove}}",
        "htmlform-cloner-required": "Used as an error message in HTML forms.\n\nSee also:\n* {{msg-mw|htmlform-required}}\n* {{msg-mw|htmlform-cloner-create}}\n* {{msg-mw|htmlform-cloner-delete}}",
+       "htmlform-title-badnamespace": "Error message shown if the page title provided by the user is not in the required namespace. $1 is the page, $2 is the numerical namespace index.",
+       "htmlform-title-not-creatable": "Error message shown if the page title provided by the user is not creatable (a special page). $1 is the page title.",
+       "htmlform-title-not-exists": "Error message shown if the page title provided by the user does not exist. $1 is the page title.",
+       "htmlform-user-not-exists": "Error message shown if a user with the name provided by the user does not exist. $1 is the username.",
+       "htmlform-user-not-valid": "Error message shown if the name provided by the user isn't a valid username. $1 is the username.",
        "sqlite-has-fts": "Shown on [[Special:Version]].\nParameters:\n* $1 - version",
        "sqlite-no-fts": "Shown on [[Special:Version]].\nParameters:\n* $1 - version",
        "logentry-delete-delete": "{{Logentry|[[Special:Log/delete]]}}",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move_redir": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move_redir-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
-       "logentry-patrol-patrol": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.",
-       "logentry-patrol-patrol-auto": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\"Automatically\" refers to users with autopatrol right who mark revisions automatically patrolled when editing.",
+       "logentry-patrol-patrol": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\nSee also:\n* {{msg-mw|logentry-patrol-patrol-auto}}",
+       "logentry-patrol-patrol-auto": "{{Logentry|[[Special:Log/patrol]]}}\n* $4 - a formatted revision number, maybe linked to the diff.\n\"Automatically\" refers to users with autopatrol right who mark revisions automatically patrolled when editing.\n\nSee also:\n* {{msg-mw|logentry-patrol-patrol}}",
        "logentry-newusers-newusers": "The user (previously unregistered) has registered on the wiki, creating an account for self.\n----\n{{Logentry|[[Special:Log/newusers]]}}",
        "logentry-newusers-create": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the gender of the target user.",
        "logentry-newusers-create2": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the name of the user that was created.",
        "logentry-newusers-byemail": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the name of the user that was created.",
        "logentry-newusers-autocreate": "{{Logentry|[[Special:Log/newusers]]}}\n\n$4 is the gender of the target user.",
+       "logentry-protect-move_prot": "{{Logentry|[[Special:Log/protect]]}}\n* $4 - the old title",
        "logentry-rights-rights": "* $1 - username\n* $2 - (see below)\n* $3 - username\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n----\n{{Logentry|[[Special:Log/rights]]}}",
        "logentry-rights-rights-legacy": "* $1 - username\n* $2 - (see below)\n* $3 - username\n----\n{{Logentry|[[Special:Log/rights]]}}",
        "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below)\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n----\n{{Logentry|[[Special:Log/rights]]}}",
        "patrol-log-line": "Text of notes on entries in the [{{FULLURL:Special:Log|type=patrol}} patrol log].\nParameters:\n* $1 - the link whose text is {{msg-mw|patrol-log-diff}}\n* $2 - the name of the page\n* $3 - appears to be {{msg-mw|Patrol-log-auto}} (at least sometimes)\n\nThe message appears after the name of the patroller.",
        "patrol-log-auto": "Automated edit summary when patrolling.\n\n{{Identical|Automatic}}",
        "patrol-log-diff": "The text of the diff link in {{msg-mw|Patrol-log-line}} (inside <code>$1</code> there).\n\nParameters:\n* $1 - revision ID\n{{Identical|Revision}}",
-       "1movedto2": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - the original page name\n* $2 - the destination page name\nSee also:\n* {{msg-mw|1movedto2 redir}}",
-       "1movedto2_redir": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - the original page name\n* $2 - the destination page name\nSee also:\n* {{msg-mw|1movedto2}}",
+       "1movedto2": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - the original page name\n* $2 - the destination page name\nSee also:\n* {{msg-mw|1movedto2 redir}}",
+       "1movedto2_redir": "{{ignored}}This is ''logentry'' message only used on IRC. Parameters:\n* $1 - the original page name\n* $2 - the destination page name\nSee also:\n* {{msg-mw|1movedto2}}",
        "move-redirect-suppressed": "{{ignored}}Message unused?",
        "newuserlog-create-entry": "Part of the \"Newuserlog\" extension. It is the summary in the [[Special:RecentChanges|recent changes]] and on [[Special:Log/newusers]].",
        "newuserlog-create2-entry": "Part of the \"Newuserlog\" extension.\n\nIt is the summary in the [[Special:RecentChanges|recent changes]] and on [[Special:Log/newusers]] when creating an account for someone else (\"$1\").\n\nPreceded by the name of the user doing this task.\n\nParameters:\n* $1 - username",
        "limitreport-postexpandincludesize-value": "Format for the \"Post-expand include size\" row in the limit report table. Parameters:\n* $1 - the usage (in bytes)\n* $2 - the maximum (in bytes)",
        "limitreport-templateargumentsize": "Label for the \"Template argument size\" row in the limit report table",
        "limitreport-templateargumentsize-value": "Format for the \"Template argument size\" row in the limit report table.\n\nParameters:\n* $1 - the usage (in bytes)\n* $2 - the maximum (in bytes)",
-       "limitreport-expansiondepth": "Label for the \"Highest expansion depth\" row in the limit report table",
+       "limitreport-expansiondepth": "Label for the \"Highest expansion depth\" row in the limit report table.\n\nIf \"highest depth\" is an oxymoron in your language, use \"deepest (depth)\" instead.",
        "limitreport-expansiondepth-value": "{{optional}}\nFormat for the \"Highest expansion depth\" row in the limit report table.\n\nParameters:\n* $1 - the depth\n* $2 - the maximum",
        "limitreport-expensivefunctioncount": "Label for the \"Expensive parser function count\" row in the limit report table",
        "limitreport-expensivefunctioncount-value": "{{optional}}\nFormat for the \"Expensive parser function count\" row in the limit report table.\n\nParameters:\n* $1 - the usage\n* $2 - the maximum",
        "special-characters-title-endash": "Title tooltip for the en dash character (–); See https://en.wikipedia.org/wiki/Dash",
        "special-characters-title-emdash": "Title tooltip for the em dash character (—); See https://en.wikipedia.org/wiki/Dash",
        "special-characters-title-minus": "Title tooltip for the minus sign character (−), not to be confused with a hyphen",
+       "mw-widgets-dateinput-no-date": "Label of a date input field when no date has been selected.",
+       "mw-widgets-dateinput-placeholder-day": "[[File:DateInputWidget active, empty.png|frame|Screenshot]]\nPlaceholder displayed in a date input field when it's empty, representing a date format with 4 digits for year, 2 digits for month, and 2 digits for day, separated with hyphens. This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
+       "mw-widgets-dateinput-placeholder-month": "Placeholder displayed in a date input field when it's empty, representing a date format with 4 digits for year and 2 digits for month, separated with hyphens (without a day). This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "mw-widgets-titleinput-description-new-page": "Description label for a new page in the title input widget.",
        "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget."
 }
index fdb1d76..7ec0ccb 100644 (file)
        "disclaimers": "Chiqakunamanta rikuchiy",
        "disclaimerpage": "Project:Sapsilla saywachasqa paqtachiy",
        "edithelp": "Llamk'ana yanapay",
+       "helppage-top-gethelp": "Yanapa",
        "mainpage": "Qhapaq p'anqa",
        "mainpage-description": "Qhapaq p'anqa",
        "policy-url": "Project:Kawpay",
        "passwordreset": "Yaykuna rimata kutichiy",
        "passwordreset-text-one": "Kay hunt'ana p'anqata hunt'ay, yaykuna rimaykita kutichinaykipaq.",
        "passwordreset-text-many": "{{PLURAL:$1|Kay k'itichakunamanta hukta hunt'achiy, yaykuna rimaykita kutichinaykipaq.}}",
-       "passwordreset-legend": "Yaykuna rimata kutichiy",
        "passwordreset-disabled": "Kay wikipiqa yaykuna rimata manam kutichiyta atinkichu.",
        "passwordreset-emaildisabled": "Kay wikipiqa e-chaski llamk'anakunaman ama nisqam.",
        "passwordreset-username": "Ruraqpa sutin:",
        "changeemail-throttled": "Nisyu kutiñam yaykuykacharqunki.\nAma hina kaspa, $1 suyay manaraq musuqmanta yaykuykachaspayki.",
        "resettokens": "Llawikunata kutichiy",
        "resettokens-no-tokens": "Manam kanchu kutichina llawikuna.",
-       "resettokens-legend": "Llawikunata kutichiy",
        "resettokens-tokens": "Llawikuna:",
        "resettokens-token-label": "$1 (kunan chani: $2)",
        "resettokens-done": "Llawikunaqa kutichimusqañam.",
        "nmembers": "$1 {{PLURAL:$1|qillqa|qillqakuna}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|wankurisqa|wankurisqakuna}}",
        "nrevisions": "$1 {{PLURAL:$1|llamk'apusqa|llamk'apusqakuna}}",
-       "nviews": "$1 {{PLURAL:$1|rikuy|rikuykuna}}",
        "nimagelinks": "$1 {{PLURAL:$1|p'anqapi|p'anqakunapi}} llamk'achisqa",
        "ntransclusions": "$1 {{PLURAL:$1|p'anqapi|p'anqakunapi}} llamk'achisqa",
        "specialpage-empty": "Kay p'anqaqa ch'usaqmi.",
        "pager-older-n": "{{PLURAL:$1|aswan mawk'a 1|aswan mawk'a $1}}",
        "suppress": "Rikurpariy",
        "querypage-disabled": "Kay sapaq p'anqamanqa ama nisqam allinta llamk'anapaq.",
+       "apihelp": "API yanapa",
        "booksources": "Liwrukunapi pukyukuna",
        "booksources-search-legend": "Liwrukunapi pukyukunata maskay",
        "booksources-search": "Maskay",
        "linksearch-pat": "Kay qatinallakama maskay:",
        "linksearch-ns": "Suti k'iti:",
        "linksearch-ok": "Maskay",
-       "linksearch-text": "Ima rantipas sananchawanpas maskayta saqillasunkim, ahinataq \"*.wikipedia.org\".\nHawa kaq duminyullapas kanam, ahinataq \"*.org\".<br />\nQ'imichisqa tantari {{PLURAL:$2|qillqa|qillqakuna}}: <code>$1</code> (mana mayqintapas akllaptiykiqa, http:// nisqam kanqa).",
+       "linksearch-text": "Ima rantipas sananchawanpas maskayta saqillasunkim, ahinataq \"*.wikipedia.org\".\nHawa kaq duminyullapas kanam, ahinataq \"*.org\".<br />\nQ'imichisqa tantari {{PLURAL:$2|qillqa|qillqakuna}}: $1 (mana mayqintapas akllaptiykiqa, http:// nisqam kanqa).",
        "linksearch-line": "$1-man $2-manta t'inkimusqa",
        "linksearch-error": "Ima rantipas sananchaqa (* ?) tiyaypa qallariyninpim kanman chaylla.",
        "listusersfrom": "Kaywan qallariq ruraqkunata rikuchiy:",
        "tooltip-pt-logout": "Llamk'apuy tiyaymanta lluqsiy",
        "tooltip-pt-createaccount": "Rakiquna kamarispayki yaykunaykiqa allinchá kanman, hinaspapas ruranayki manam tiyanchu.",
        "tooltip-ca-talk": "Qillqasqap samiqninmanta rimanakuna p'anqa",
-       "tooltip-ca-edit": "Kay p'anqata llamk'apuytam atinki. Ama hina kaspa, manaraq waqaychaspa ñawpaqta qhawarillay.",
+       "tooltip-ca-edit": "Kay p'anqata llamk'apuy",
        "tooltip-ca-addsection": "Musuq rakita qallariy",
        "tooltip-ca-viewsource": "Kay p'anqaqa amachasqam. Qallariy qillqataqa qhawallaytam atinki, mana hukchaspa.",
        "tooltip-ca-history": "Kay p'anqapaq ñawpaq llamk'apusqakuna llamk'apuqkunapas",
index 2034bab..3ae9792 100644 (file)
        "resetpass-wrong-oldpass": "Fauss pled-clav temporar u actual.\nEventualmain has ti gia midà cun success tes pled-clav u dumandà per in nov pled-clav temporar.",
        "resetpass-temp-password": "Pled-clav temporar:",
        "passwordreset": "Redefinir il pled-clav",
-       "passwordreset-legend": "Redefinir il pled-clav",
        "passwordreset-disabled": "La pussaivladad da redefinir il pled-clav è vegnida deactivada sin questa wiki.",
        "passwordreset-username": "Num d'utilisader:",
        "passwordreset-domain": "Domain:",
        "nlinks": "$1 {{PLURAL:$1|colliaziun|colliaziuns}}",
        "nmembers": "$1 {{PLURAL:$1|commember|commembers}}",
        "nrevisions": "{{PLURAL:$1|Ina versiun|$1 versiuns}}",
-       "nviews": "Contemplà $1 {{PLURAL:$1|giada|giadas}}",
        "nimagelinks": "Utilisà sin $1 {{PLURAL:$1|pagina|paginas}}",
        "ntransclusions": "utilisà sin $1 {{PLURAL:$1|pagina|paginas}}",
        "specialpage-empty": "Questa pagina cuntegna actualmain naginas endataziuns.",
        "linksearch-pat": "Muster da tschertgar:",
        "linksearch-ns": "Tip da pagina:",
        "linksearch-ok": "Tschertgar",
-       "linksearch-text": "Tegnaplazzas sco \"*.wikipedia.org\" pon vegnir utilisads.\nDovra almain ina top-level domain, per exempel \"*.org\".<br />\n{{PLURAL:$2|Protocol sustegnì|Protocols sustegnids}}: <code>$1</code> (standard è http:// sche nagin protocol è specifitgà).",
+       "linksearch-text": "Tegnaplazzas sco \"*.wikipedia.org\" pon vegnir utilisads.\nDovra almain ina top-level domain, per exempel \"*.org\".<br />\n{{PLURAL:$2|Protocol sustegnì|Protocols sustegnids}}: $1 (standard è http:// sche nagin protocol è specifitgà).",
        "linksearch-line": "$1 è collià davent da la pagina $2",
        "linksearch-error": "Wildcards pon esser be a l'entschatta dal num da host.",
        "listusersfrom": "Mussar utilisaders davent da:",
index 555e802..a71f4d1 100644 (file)
        "actionthrottled": "Acțiune limitată",
        "actionthrottledtext": "Ca o măsură anti-spam, aveți permisiuni limitate în a efectua această acțiune de prea multe ori într-o perioadă scurtă de timp, iar dv. tocmai ați depășit această limită.\nVă rugăm să încercați din nou în câteva minute.",
        "protectedpagetext": "Această pagină este protejată împotriva modificărilor sau a altor acțiuni.",
-       "viewsourcetext": "Se poate vizualiza și copia conținutul acestei pagini:",
-       "viewyourtext": "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
+       "viewsourcetext": "Puteți vizualiza și copia sursa acestei pagini.",
+       "viewyourtext": "Puteți vizualiza și copia conținutul <strong>modificărilor dumneavoastră</strong> efectuate asupra acestei pagini.",
        "protectedinterface": "Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
        "editinginterface": "<strong>Avertizare</strong>: Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.",
        "translateinterface": "Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki pentru localizare.",
-       "cascadeprotected": "Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:\n$2",
+       "cascadeprotected": "Această pagină a fost protejată la modificare, deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}} {{PLURAL:$1|protejată|protejate}} cu opțiunea „în cascadă”:\n$2",
        "namespaceprotected": "Nu aveți permisiunea de a modifica pagini din spațiul de nume '''$1'''.",
        "customcssprotected": "Nu aveți permisiunea de a modifica această pagină CSS, deoarece conține setările personale ale altui utilizator.",
        "customjsprotected": "Nu aveți permisiunea de a modifica această pagină JavaScript, deoarece conține setările personale ale altui utilizator.",
        "createacct-benefit-body2": "{{PLURAL:$1|pagină|pagini|de pagini}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuitor recent|contribuitori recenți|de contribuitori recenți}}",
        "badretype": "Parolele pe care le-ați introdus diferă.",
+       "usernameinprogress": "Crearea unui cont pentru acest nume de utilizator este deja în derulare. Vă rugăm să așteptați.",
        "userexists": "Numele de utilizator pe care l-ați introdus este deja folosit.\nVă rugăm să alegeți un alt nume.",
        "loginerror": "Eroare de autentificare",
        "createacct-error": "Eroare la crearea contului",
        "readonlywarning": "'''Atenție: Baza de date a fost blocată pentru întreținere, deci nu veți putea salva modificările în acest moment.'''\nPuteți copia textul într-un fișier text, păstrându-l pentru mai târziu.\n\nAdministratorul care a efectuat blocarea a oferit următoarea explicație: $1",
        "protectedpagewarning": "'''Atenție: această pagină a fost protejată astfel încât poate fi modificată doar de către administratori.'''\nUltima intrare în jurnal este afișată mai jos pentru referință:",
        "semiprotectedpagewarning": "'''Observație: această pagină a fost protejată și poate fi modificată doar de către utilizatorii înregistrați.'''\nUltima intrare în jurnal este afișată mai jos pentru referință:",
-       "cascadeprotectedwarning": "'''Atenție:''' Această pagină a fost blocată astfel încât numai administratorii o pot modifica, deoarece este inclusă în {{PLURAL:$1|următoarea pagină protejată|următoarele pagini protejate}} în cascadă:",
+       "cascadeprotectedwarning": "<strong>Atenție:</strong> Această pagină a fost protejată, astfel încât numai administratorii o pot modifica, fiind inclusă în {{PLURAL:$1|următoarea pagină protejată|următoarele pagini protejate}} în cascadă:",
        "titleprotectedwarning": "'''Atenție: această pagină a fost protejată astfel încât doar anumiți [[Special:ListGroupRights|utilizatori]] o pot crea.'''\nUltima intrare în jurnal este afișată mai jos pentru referință:",
        "templatesused": "{{PLURAL:$1|Format folosit|Formate folosite}} în această pagină:",
        "templatesusedpreview": "{{PLURAL:$1|Format folosit|Formate folosite}} în această previzualizare:",
        "search-category": "(categoria $1)",
        "search-file-match": "(se regăsește în conținutul fișierului)",
        "search-suggest": "V-ați referit la: $1",
+       "search-rewritten": "Se afișează rezultatele pentru $1. Căutați, în schimb, după $2.",
        "search-interwiki-caption": "Proiecte înrudite",
        "search-interwiki-default": "Rezultate de la $1:",
        "search-interwiki-more": "(mai mult)",
        "rows": "Rânduri:",
        "columns": "Coloane:",
        "searchresultshead": "Parametri căutare",
-       "stub-threshold": "Valoarea minimă pentru un <a href=\"#\" class=\"stub\">ciot</a> (octeți):",
+       "stub-threshold": "Pragul pentru formatarea legăturilor către cioturi ($1):",
+       "stub-threshold-sample-link": "exemplu",
        "stub-threshold-disabled": "Dezactivat",
        "recentchangesdays": "Numărul de zile afișate în schimbări recente:",
        "recentchangesdays-max": "(maxim {{PLURAL:$1|o zi|$1 zile}})",
        "boteditletter": "b",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utilizator|utilizatori|de utilizatori}} care urmăresc]",
-       "rc_categories": "Limitează la categoriile (separate prin \"|\")",
-       "rc_categories_any": "Oricare",
+       "rc_categories": "Limitează la categoriile (separate prin „|”):",
+       "rc_categories_any": "Oricare dintre cele alese",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octeți|de octeți}} după modificare",
        "newsectionsummary": "/* $1 */ secțiune nouă",
        "upload-too-many-redirects": "URL-ul conținea prea multe redirecționări",
        "upload-http-error": "A avut loc o eroare HTTP: $1",
        "upload-copy-upload-invalid-domain": "Încărcarea copiilor nu este disponibilă pentru acest domeniu.",
+       "upload-dialog-title": "Încărcare fișier",
+       "upload-dialog-error": "A apărut o eroare",
+       "upload-dialog-warning": "A apărut o atenționare",
+       "upload-dialog-button-cancel": "Revocare",
+       "upload-dialog-button-done": "Realizat",
+       "upload-dialog-button-save": "Salvare",
+       "upload-dialog-button-upload": "Încarcă",
+       "upload-dialog-label-select-file": "Selectează fișier",
+       "upload-dialog-label-infoform-title": "Detalii",
+       "upload-dialog-label-infoform-name": "Nume",
+       "upload-dialog-label-infoform-description": "Descriere",
+       "upload-dialog-label-usage-title": "Utilizare",
+       "upload-dialog-label-usage-filename": "Numele fișierului",
        "backend-fail-stream": "Imposibil de citit fișierul $1.",
        "backend-fail-backup": "Imposibil de efectuat o copie de rezervă a fișierului $1.",
        "backend-fail-notexists": "Fișierul $1 nu există.",
        "booksources-text": "Mai jos se află o listă de legături înspre alte situri care vând cărți noi sau vechi și care pot oferi informații suplimentare despre cărțile pe care le căutați:",
        "booksources-invalid-isbn": "Codul ISBN oferit nu este valid; verificați dacă a fost copiat corect de la sursa originală.",
        "specialloguserlabel": "Executant:",
-       "speciallogtitlelabel": "Destinație (titlu sau utilizator):",
+       "speciallogtitlelabel": "Destinație (titlu sau {{ns:user}}:numeutilizator pentru utilizator):",
        "log": "Jurnale",
        "all-logs-page": "Toate jurnalele publice",
        "alllogstext": "Afișare combinată a tuturor jurnalelor {{SITENAME}}.\nPuteți limita vizualizarea selectând tipul jurnalului, numele de utilizator sau pagina afectată.",
        "linksearch-pat": "De căutat:",
        "linksearch-ns": "Spațiu de nume:",
        "linksearch-ok": "Caută",
-       "linksearch-text": "Pot fi folosite metacaractere precum „*.wikipedia.org”.\nNecesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />\n{{PLURAL:$2|Protocol suportat|Protocoale suportate}}: <code>$1</code> (se trece implicit la http:// dacă nu este specificat niciun protocol).",
+       "linksearch-text": "Pot fi folosite metacaractere precum „*.wikipedia.org”.\nNecesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />\n{{PLURAL:$2|Protocol suportat|Protocoale suportate}}: $1 (se trece implicit la http:// dacă nu este specificat niciun protocol).",
        "linksearch-line": "$1 este legat de $2",
        "linksearch-error": "Metacaracterele pot să apară doar la începutul hostname-ului.",
        "listusersfrom": "Afișează utilizatori începând cu:",
        "trackingcategories-disabled": "Categoria este dezactivată",
        "mailnologin": "Nu există adresă de trimitere",
        "mailnologintext": "Trebuie să fii [[Special:UserLogin|autentificat]] și să ai o adresă validă de e-mail în [[Special:Preferences|preferințe]] pentru a trimite e-mail altor utilizatori.",
-       "emailuser": "Trimiteți un e-mail",
+       "emailuser": "Trimite-i un e-mail",
        "emailuser-title-target": "E-mail către {{GENDER:$1|acest utilizator|această utilizatoare}}",
        "emailuser-title-notarget": "E-mail către utilizator",
-       "emailpage": "E-mail către utilizator",
        "emailpagetext": "Puteți folosi formularul de mai jos pentru a trimite un e-mail {{GENDER:$1|acestui utilizator|acestei utilizatoare}}.\nAdresa de e-mail specificată de dumneavoastră în [[Special:Preferences|preferințele de utilizator]] va apărea ca adresa expeditorului e-mailului; astfel, destinatarul va putea să vă răspundă direct.",
        "defemailsubject": "E-mail {{SITENAME}} de la utilizatorul „$1”",
        "usermaildisabled": "E-mail dezactivat",
        "emailccsubject": "O copie a mesajului la $1: $2",
        "emailsent": "E-mail trimis",
        "emailsenttext": "E-mailul dumneavoastră a fost trimis.",
-       "emailuserfooter": "Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „{{int:emailpage}}” de la {{SITENAME}}.",
+       "emailuserfooter": "Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „{{int:emailuser}}” de la {{SITENAME}}.",
        "usermessage-summary": "a lăsat un mesaj de sistem",
        "usermessage-editor": "Mesager de sistem",
        "watchlist": "Pagini urmărite",
        "watchlistanontext": "Vă rugăm să vă autentificați pentru a consulta și modifica lista de pagini urmărite.",
        "watchnologin": "Nu sunteți autentificat",
        "addwatch": "Adăugă la lista de pagini urmărite",
-       "addedwatchtext": "Pagina „[[:$1]]” a fost adăugată în lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].\nModificările viitoare efectuate asupra acestei pagini dar și asupra paginii de discuție asociată vor fi listate acolo.",
+       "addedwatchtext": "Pagina „[[:$1]]” și pagina de discuție asociată au fost adăugate în lista dumneavoastră de [[Special:Watchlist|pagini urmărite]].",
        "addedwatchtext-short": "Pagina „$1” a fost adăugată în lista dumneavoastră de pagini urmărite.",
        "removewatch": "Elimină din lista de pagini urmărite",
-       "removedwatchtext": "Pagina „[[:$1]]” a fost eliminată din [[Special:Watchlist|lista de pagini urmărite]].",
+       "removedwatchtext": "Pagina „[[:$1]]” și pagina de discuție asociată au fost eliminate din [[Special:Watchlist|lista de pagini urmărite]].",
        "removedwatchtext-short": "Pagina „$1” a fost eliminată din lista de pagini urmărite.",
        "watch": "Urmărire",
        "watchthispage": "Urmărește pagina",
        "changecontentmodel-success-title": "Modelul de conținut a fost modificat",
        "changecontentmodel-success-text": "Tipul de conținut al paginii [[:$1]] a fost modificat.",
        "changecontentmodel-cannot-convert": "Conținutul paginii [[:$1]] nu poate fi convertit în tipul $2.",
-       "changecontentmodel-title-cantexist": "Nu se poate utiliza titlul de pagină: $1.",
        "changecontentmodel-nodirectediting": "Modelul de conținut $1 nu acceptă editarea directă",
        "log-name-contentmodel": "Jurnal modificări model de conținut",
        "log-description-contentmodel": "Evenimente referitoare la modelele de conținut ale paginilor",
        "protect-locked-blocked": "Nu poți schimba nivelurile de protecție fiind blocat.\nIată configurația curentă a paginii '''$1''':",
        "protect-locked-dblock": "Nivelurile de protecție nu pot fi aplicate deoarece baza de date este închisă.\nIată configurația curentă a paginii '''$1''':",
        "protect-locked-access": "Contul dumneavoastră nu are permisiunea de a schimba nivelurile de protejare a paginii.\nAici sunt setările curente pentru pagina '''$1''':",
-       "protect-cascadeon": "Această pagină este protejată deoarece este inclusă în {{PLURAL:$1|următoarea pagină ce are|următoarele pagini ce au}} activată protejarea în cascadă.\nSchimbarea nivelului de protejare al acestei pagini nu va afecta protejarea în cascadă.",
+       "protect-cascadeon": "Această pagină este protejată deoarece este transclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}} cu opțiunea de protejare „în cascadă” activată.\nSchimbarea nivelului de protejare al acestei pagini nu va afecta protejarea în cascadă.",
        "protect-default": "Permis pentru toți utilizatorii",
        "protect-fallback": "Autorizat doar pentru utilizatorii cu permisiunea „$1”",
        "protect-level-autoconfirmed": "Autorizat doar pentru utilizatorii autoconfirmați",
        "undeletepagetext": "{{PLURAL:$1|Următoarea pagină a fost ștearsă, dar încă se află în arhivă și poate fi recuperată|Următoarele $1 pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate|Următoarele $1 de pagini au fost șterse, dar încă se află în arhivă și pot fi recuperate}}. Arhiva ar putea fi ștearsă periodic.",
        "undelete-fieldset-title": "Recuperare versiuni",
        "undeleteextrahelp": "Pentru a restaura întregul istoric al paginii lăsați toate căsuțele nebifate și apăsați butonul '''''{{int:undeletebtn}}'''''.\nPentru a realiza o recuperare selectivă bifați versiunile pe care doriți să le recuperați și apăsați butonul '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|versiune arhivată|versiuni arhivate|de versiuni arhivate}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|versiune ștearsă|versiuni șterse|de versiuni șterse}}",
        "undeletehistory": "Dacă recuperați pagina, toate versiunile asociate vor fi adăugate retroactiv în istorie. Dacă o pagină nouă cu același nume a fost creată de la momentul ștergerii acesteia, versiunile recuperate vor apărea în istoria paginii, iar versiunea curentă a paginii nu va fi înlocuită automat de către versiunea recuperată.",
        "undeleterevdel": "Restaurarea unui versiuni nu va fi efectuată dacă ea va apărea în capul listei de versiuni parțial șterse.\nÎn acest caz, trebuie să debifați sau să reafișați (''unhide'') cea mai recentă versiune ștearsă.",
        "undeletehistorynoadmin": "Acest articol a fost șters. Motivul ștergerii apare mai jos, alături de detaliile utilzatorilor care au editat această pagină înainte de ștergere. Textul prorpiu-zis al reviziilor șterse este disponibil doar administratorilor.",
        "tooltip-ca-nstab-main": "Vedeți conținutul paginii",
        "tooltip-ca-nstab-user": "Vezi pagina de utilizator",
        "tooltip-ca-nstab-media": "Vezi pagina media",
-       "tooltip-ca-nstab-special": "Aceasta este o pagină specială, nu o puteți modifica direct.",
+       "tooltip-ca-nstab-special": "Aceasta este o pagină specială și nu poate fi modificată",
        "tooltip-ca-nstab-project": "Vezi pagina proiectului",
        "tooltip-ca-nstab-image": "Vezi pagina fişierului",
        "tooltip-ca-nstab-mediawiki": "Vedeți mesajul de sistem",
        "spam_reverting": "Revenire la ultima versiune care nu conține legături către $1",
        "spam_blanking": "Toate versiunile conținând legături către $1 au fost golite",
        "spam_deleting": "Toate versiunile conținând legături către $1 au fost șterse",
-       "simpleantispam-label": "Verificare antispam.\n'''NU''' completați!",
+       "simpleantispam-label": "Verificare antispam.\n<strong>Nu</strong> completați!",
        "pageinfo-title": "Informații pentru „$1”",
        "pageinfo-not-current": "Ne cerem scuze, dar este imposibilă furnizarea acestor informații pentru versiunile mai vechi ale paginii.",
        "pageinfo-header-basic": "Informații de bază",
        "htmlform-cloner-create": "Adăugă mai mult",
        "htmlform-cloner-delete": "Elimină",
        "htmlform-cloner-required": "Este necesară cel puțin o valoare.",
+       "htmlform-title-badnamespace": "[[:$1]] nu se află în spațiul de nume „{{ns:$2}}”.",
+       "htmlform-title-not-creatable": "„$1” este un titlu de pagină inutilizabil",
+       "htmlform-title-not-exists": "[[:$1]] nu există.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nu există.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nu este un nume de utilizator valid.",
        "sqlite-has-fts": "$1 cu suport de căutare în tot textul",
        "sqlite-no-fts": "$1 fără suport de căutare în tot textul",
        "logentry-delete-delete": "$1 {{GENDER:$2|a șters}} pagina $3",
        "logentry-newusers-create2": "Contul de utilizator $3 a fost {{GENDER:$2|creat}} de către $1",
        "logentry-newusers-byemail": "Contul de utilizator $3 a fost {{GENDER:$2|creat}} de către $1, iar parola a fost trimisă prin e-mail",
        "logentry-newusers-autocreate": "Contul de utilizator $1 a fost {{GENDER:$2|creat}} în mod automat",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|a mutat}} setările de protecție de la $4 la $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|a schimbat}} apartenența la grup pentru $3 de la $4 la $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|a schimbat}} apartenența la grup pentru $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|a fost promovat|a fost promovată}} în mod automat de la $4 la $5",
        "special-characters-title-endash": "linie de pauză (en dash)",
        "special-characters-title-emdash": "linie de pauză (em dash)",
        "special-characters-title-minus": "semnul minus",
+       "mw-widgets-dateinput-no-date": "Nicio dată selectată",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-LL-ZZ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-LL",
        "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
        "mw-widgets-titleinput-description-redirect": "redirecționare către $1"
 }
index 54c4084..8f3eebb 100644 (file)
@@ -7,7 +7,8 @@
                        "Reder",
                        "아라",
                        "C.R.",
-                       "Macofe"
+                       "Macofe",
+                       "Purodha"
                ]
        },
        "tog-underline": "Collegaminde sottolinèate:",
        "actionthrottled": "Azione inderrotte",
        "actionthrottledtext": "Cumme 'na mesure andi-spam, tu è state limitete da fà st'azione troppe vote jndr'à 'nu timbe piccinne e tu è subranete stu limite.\nPe piacere prueve cchiù tarde.",
        "protectedpagetext": "Sta pàgene ha state prutette pe no fa fà cangiaminde o otre aziune a uecchje.",
-       "viewsourcetext": "Tu puè vedè e cupià 'a sorgente de sta pàgene:",
-       "viewyourtext": "Tu puè vedè e copià 'a sorgende de '''le cangiaminde tune''' a sta pàgene:",
+       "viewsourcetext": "Tu puè 'ndrucà e cupià 'a sorgente de sta pàgene.",
+       "viewyourtext": "Tu puè 'ndrucà e copià 'a sorgende de <strong>le cangiaminde tune</strong> a sta pàgene.",
        "protectedinterface": "Sta pàgene dèje 'nu teste de l'inderfacce pu software de sta uicchi, e jè prutette pe prevenìe l'abbuse.\nPe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/ translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
        "editinginterface": "<strong>Fà attenziò:</strong> Tu ste cange 'na pàgene ca jè ausate pe dà 'n'inderfacce de teste p'u software.\nLe cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde de sta Uicchi.",
        "translateinterface": "Pe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
-       "cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a caschete\":\n$2",
+       "cascadeprotected": "Sta pàgene ha state prutette da le cangiaminde, purcè jè ingluse jndr'à {{PLURAL:$1|seguende pàgene, ca jè|le seguende pàggene, ca sonde}} prutette cu l'opzione \"a cascate\":\n$2",
        "namespaceprotected": "Non ge tine 'u permesse pe cangià pàggene d'u neimspeise '''$1'''.",
        "customcssprotected": "Non ge tine 'u permesse pe cangià sta pàgene de CSS, purcè tène otre configurazione personale.",
        "customjsprotected": "Non ge tine 'u permesse pe cangià sta pàgene de Javascript, purcè tène otre configurazione personale.",
        "creating": "Stoche a ccreje $1",
        "editingsection": "Cangiaminde de $1 (sezione)",
        "editingcomment": "Cangiaminde de $1 (seziona nove)",
-       "editconflict": "Le cangiaminde tune non ge ponne essere reggistrate purcé ste 'nu conflitte de cangiaminde. Vuè {{GENDER:|ccu}} resolve stu conflitte a màne?",
+       "editconflict": "conflitte de cangiaminde: $1",
        "explainconflict": "Quacchedune otre ha cangete 'a pàgene apprime ca tu accumenzasse a fà 'u cangiamende tue.\n'U teste ca iacchie sus condene 'u teste d'a pàgene accume se iacchije jndr'à stu mumende.\nLe cangiaminde sonde fatte vedè jndr'à vanne de sotte.\nTu puè scuagghià le cangiaminde jndr'à 'u teste de mò.\n'''Sulamende''' 'u teste ca stè sus avène reggistrate cazzanne 'u buttone \"{{int:savearticle}}\".",
        "yourtext": "'U teste tue",
        "storedversion": "Versione archivijete",
        "readonlywarning": "'''FA ATTENZIO': 'U database ha state bloccate pe manutenzione, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.'''\nTu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tune e pò cchiù tarde le reggistre sus 'a Uicchi.\n\nL'amministratore ca ha bloccate 'u database ha date stu mutive: $1",
        "protectedpagewarning": "'''ATTENZIO': Sta pàgene ha state bloccate e allore sulamende le utinde cu le privilegge de ''sysop'' ponne cangiarle.'''\nL'urteme archivie de le trasute ha state previste aqquà sotte pe referimende:",
        "semiprotectedpagewarning": "'''Fà attenzione:''' Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.\nL'urteme archivije de le trasute ha state previste aqquà sotte pe referimende:",
-       "cascadeprotectedwarning": "'''FA ATTENZIO':''' Sta pàgene ha state blocchete accussì sulamende l'utinde ca tènene le deritte de amministratore a ponne cangià, purcè inglude {{PLURAL:$1|pàgene|pàggrnr}} prutette a cascate:",
+       "cascadeprotectedwarning": "<strong>FA ATTENZIO':</strong> Sta pàgene ha state blocchete accussì sulamende l'utinde ca tènene le deritte de amministratore a ponne cangià, purcè inglude {{PLURAL:$1|pàgene|pàggene}} prutette a cascate:",
        "titleprotectedwarning": "'''ATTENZIONE: Sta pàgene ha state bloccate accussì sulamende [[Special:ListGroupRights|specifice diritte]] a ponne ccrejà.'''\nL'urteme archivije de le trasute jè provviste sotte pe referimende:",
        "templatesused": "{{PLURAL:$1|Template|Template}} ausate sus 'a sta pàgene:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Template}} ausate jndr'à sta andeprime:",
        "search-category": "(categorije $1)",
        "search-file-match": "(combronde 'u condenute d'u file)",
        "search-suggest": "Ce signifeche: $1",
+       "search-rewritten": "Stoche a fazze 'ndrucà le resultate pe $1. Cirche invece pe $2.",
        "search-interwiki-caption": "Pruggette sorelle",
        "search-interwiki-default": "Resultate da $1:",
        "search-interwiki-more": "(de cchiù)",
        "rows": "Righe:",
        "columns": "Culonne:",
        "searchresultshead": "Cirche",
-       "stub-threshold": "Soglie pe <a href=\"#\" class=\"stub\">collegamende stub</a> de formattazione (byte):",
+       "stub-threshold": "Soglie pe collegamende stub de formattazione ($1):",
+       "stub-threshold-sample-link": "esembie",
        "stub-threshold-disabled": "Disabbilitate",
        "recentchangesdays": "Sciurne da fà vedè jndr'à le cangiaminde recende:",
        "recentchangesdays-max": "(massime $1 {{PLURAL:$1|sciurne|sciurne}})",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utende|utinde}} ca condrollene]",
        "rc_categories": "Limite de le categorije (separate cu \"|\")",
-       "rc_categories_any": "Tutte",
+       "rc_categories_any": "Qualsiasi de le scacchiate",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} apprisse 'u cangiamende",
        "newsectionsummary": "/* $1 */ seziona nove",
        "uploaded-hostile-svg": "Acchiate 'nu CSS insecure ndr'à l'elemende de stile d'u file SVG carecate.",
        "uploaded-event-handler-on-svg": "'A 'mbostazione de le attribute de gestione de l'evende <code>$1=\"$2\"</code> non ge se pò ffà cu le file SVG.",
        "uploaded-href-attribute-svg": "le attribbute href <code>&lt;$1 $2=\"$3\"&gt;</code> cu le destinaziune de fore (p.e. http://, javascript:, etc) non ge se ponne mettere jndr'à le file SVG.",
+       "uploaded-href-unsafe-target-svg": "Acchiate 'na destinazione href non secure <code>&lt;$1 $2=\"$3\"&gt;</code> jndr'à 'u file SVG carecate.",
        "uploadscriptednamespace": "Stu file SVG tène 'nu namespace illegale '$1'",
        "uploadinvalidxml": "L'XML jndr'à 'u file carecate non ge pò essere analizzate.",
        "uploadvirus": "Alanga toje, 'u file condiene 'nu virus! Dettaglie: $1",
        "upload-too-many-redirects": "'A URL tène troppe redirezionaminde",
        "upload-http-error": "S'a verificate 'n'errore HTTP: $1",
        "upload-copy-upload-invalid-domain": "'A copie de le carecaminde non g'è disponibbile da stu dominie.",
+       "upload-dialog-title": "Careche 'u file",
+       "upload-dialog-error": "Ave assute 'n'errore",
+       "upload-dialog-warning": "Ha assute 'n'avvise",
+       "upload-dialog-button-cancel": "Annulle",
+       "upload-dialog-button-done": "Fatte",
+       "upload-dialog-button-save": "Reggìstre",
+       "upload-dialog-button-upload": "Careche",
+       "upload-dialog-label-select-file": "Scacchie 'u file",
+       "upload-dialog-label-infoform-title": "Dettaglie",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrizione",
+       "upload-dialog-label-usage-title": "Ause",
+       "upload-dialog-label-usage-filename": "Nome d'u file",
        "backend-fail-stream": "Non ge pozze trasmettere 'u file $1.",
        "backend-fail-backup": "Non ge pozze cupià 'u file $1.",
        "backend-fail-notexists": "'U file $1 non g'esiste.",
        "booksources-text": "Sotte stè 'na liste de collegaminde a otre site ca vennene libbre nuève e ausete e puà pure acchià cchiù 'mbormaziune sus a le libbre ca tu ste cirche:",
        "booksources-invalid-isbn": "L'ISBN ca è mise non ge pare ca ète corrette; verifiche ce è commesse quacche errore quanne ste cupiave quidde origginale.",
        "specialloguserlabel": "'Mblemendatore:",
-       "speciallogtitlelabel": "Destinazione (titole o utende):",
+       "speciallogtitlelabel": "Destinazione (titole o {{ns:user}}:nome de l'utende pe l'utende):",
        "log": "Archivije",
        "all-logs-page": "Tutte l'archivije pubbleche",
        "alllogstext": "Visualizzazione combinate de tutte le archivije disponibbele sus a {{SITENAME}}.\nTu puè restringere 'a viste selezionanne 'u tipe de archivije, 'u nome utende (senzibbile a le maiuscole), o le pàggene coinvolte (pure chiste senzibbile a le maiuscole).",
        "linksearch-pat": "Cirche le cambiune:",
        "linksearch-ns": "Neimspeise:",
        "linksearch-ok": "Cirche",
-       "linksearch-text": "Le wildcard cumme a \"*.wikipedia.org\" ponne essere ausate.<br />\nOnne abbesogne almene de 'nu dominie de levèlle ierte, pe esembie \"*.org\". <br />\n{{PLURAL:$2|Protocolle}} supportate: <code>$1</code> ('u valore de base jè http:// ce 'u protocolle non g'è specificate).",
+       "linksearch-text": "Le wildcard cumme a \"*.wikipedia.org\" ponne essere ausate.<br />\nOnne abbesogne almene de 'nu dominie de levèlle ierte, pe esembie \"*.org\". <br />\n{{PLURAL:$2|Protocolle}} supportate: $1 ('u valore de base jè http:// ce 'u protocolle non g'è specificate).",
        "linksearch-line": "$1 jè pundete da $2",
        "linksearch-error": "Le wildcard ponne essere ausate sulamende a l'inzie de l'hostname.",
        "listusersfrom": "Fà vedè l'utinde partenne da:",
        "emailuser": "Manne n'email a stu utende",
        "emailuser-title-target": "Manne n'email a quiste {{GENDER:$1|utende}}",
        "emailuser-title-notarget": "E-mail de l'utende",
-       "emailpage": "E-mail de l'utende",
        "emailpagetext": "Tu puè ausà 'a schermate aqquà sotte pe mannà 'n'email a stu {{GENDER:$1|utende}}.\nL'indirizze e-mail ca tu è 'nzerite jndr'à le [[Special:Preferences|preferenze tune]] iesse jndr'à 'u cambe \"Da\" de l'e-mail, accussì ce riceve 'a mail sape a ce addà responnere.",
        "defemailsubject": "e-mail de {{SITENAME}} da l'utende \"$1\"",
        "usermaildisabled": "L'e-mail de l'utende è disabbilitate",
        "emailccsubject": "Copie de le messàgge tue a $1: $2",
        "emailsent": "E-mail mannete",
        "emailsenttext": "'U messagge email tue ha state mannete.",
-       "emailuserfooter": "Sta e-mail ha state mannate da $1 a $2 da 'a funziona \"{{int:emailpage}}\" de {{SITENAME}}.",
+       "emailuserfooter": "Sta e-mail ha state mannate da $1 a $2 da 'a funziona \"{{int:emailuser}}\" de {{SITENAME}}.",
        "usermessage-summary": "Lassanne 'nu messagge de sisteme.",
        "usermessage-editor": "Messaggiatore de sisteme",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Pe piacere tràse pe 'ndrucà o cangià le vosce sus l'elenghe de le pàggene condrollate.",
        "watchnologin": "Non ge sinde colleghete",
        "addwatch": "Mitte jndr'à le pàggene condrollate",
-       "addedwatchtext": "'A pàgene \"[[:$1]]\" ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollate]].\nLe cangiaminde future a sta pàgene e 'a pàgene de le 'ngazzaminde associete le puè acchià aqquà.",
+       "addedwatchtext": "'A pàgene \"[[:$1]]\" e quedde de le 'ngazzaminde ha state aggiunde jndr'à le [[Special:Watchlist|pàggene condrollate]].",
        "addedwatchtext-short": "'A pàgene \"$1\" ha state aggiunde a l'elenghe de le pàggene condrollate.",
        "removewatch": "Live da le pàggene condrollate",
-       "removedwatchtext": "'A pàgene \"[[:$1]]\" ha state scangillete da [[Special:Watchlist|le pàggene condrollete tue]].",
+       "removedwatchtext": "'A pàgene \"[[:$1]]\" e quedde de le 'ngazzaminde ha state scangellate da [[Special:Watchlist|le pàggene condrollate tune]].",
        "removedwatchtext-short": "'A pàgene \"$1\" ha state luate da l'elenghe de le pàggene condrollate.",
        "watch": "Condrolle",
        "watchthispage": "Condrolle sta pàgene",
        "rollback-success": "Cangiaminde annullate da $1;\nturnate rete a l'urtema versione da $2.",
        "sessionfailure-title": "Sessione fallite",
        "sessionfailure": "Pare ca stonne probbleme cu 'a sessiona toje de collegamende;\nst'azione ha state scangellate pe precauzione condre a le 'ngasinaminde d'a sessione.\nPe piacere cazze \"rete\" e recareche 'a pàgene da addò tu è venute e pruève 'n'otra vote.",
+       "changecontentmodel": "Cange 'u modelle de condenute de 'na pàgene",
+       "changecontentmodel-legend": "Cange 'u modelle de condenute",
+       "changecontentmodel-title-label": "Titole d'a vôsce",
+       "changecontentmodel-model-label": "Modelle de vôsce de condenute nuève",
+       "changecontentmodel-reason-label": "Mutive:",
+       "changecontentmodel-success-title": "'U modelle d'u condenute ha cangiate",
+       "changecontentmodel-success-text": "'U tipe d'u condenute de [[:$1]] ha state cangiate.",
+       "changecontentmodel-cannot-convert": "'U condenute sus a [[:$1]] non ge pò essere convertite jndr'à 'u tipe $2.",
+       "logentry-contentmodel-change-revertlink": "annulle",
+       "logentry-contentmodel-change-revert": "annulle",
        "protectlogpage": "Archibie de le prutezziune",
        "protectlogtext": "Sotte ste 'na liste de le cangiaminde de le proteziune de le pàggene.\nVide 'a [[Special:ProtectedPages|liste de le pàggene prutette]] pa liste de le operaziune currende sus a le prutezzione de le pàggene.",
        "protectedarticle": "prutette \"[[$1]]\"",
        "protect-locked-blocked": "Tu non ge puè cangià le levèlle de protezzione quanne si bloccate.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
        "protect-locked-dblock": "Le levèlle de protezzione non ge ponne essere cangete purcè stè 'nu blocche d'u database.\nAqquà stonne le 'mbostaziune corrende pa pàgene '''$1''':",
        "protect-locked-access": "Tu non ge tine le permesse pe putè cangià le levèlle de protezione de le pàggene.\nChiste sonde le configuraziune corrende p'a pàgene '''$1''':",
-       "protect-cascadeon": "Sta pàgene mò jè  prutette purcè jè 'ngluse jndr'à {{PLURAL:$1|'a seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzecate.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
+       "protect-cascadeon": "Sta pàgene mò jè prutette purcè jè 'ngluse jndr'à {{PLURAL:$1|seguende pàgene, ca tène|le seguende pàggene, ca tènene}} a protezione a cascata appizzecate.\nTu puè cangià 'u levèlle de protezione de sta pàgene ma stu cangiamende non ge tène effette a cascata.",
        "protect-default": "Permitte a tutte l'utinde",
        "protect-fallback": "Richieste d'u permesse \"$1\"",
        "protect-level-autoconfirmed": "Blocche l'utinde nuève e chidde non reggistrate",
        "undeletepagetext": "{{PLURAL:$1|'A seguende pàgene ha state scangellate ma ète|Le seguende $1 pàggene one state scangellate ma sonde}} angore in archivije e se pò reprocessà.<br />\nL'archivije avène periodicamende sdevachete.",
        "undelete-fieldset-title": "Repristine le revisiune",
        "undeleteextrahelp": "Pe repristina totte 'a storie d'a pàgene, lasse tutte le caselle cu le spunde vacande e cazze '''''{{int:undeletebtn}}'''''.\nPe fà 'nu repristine selettive, mitte 'a spunde jndr'à le caselle corrispondende a le revisiune ca vuè ccu repristine e pò cazze '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|revisione|revisiune}} archiviete",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisione|revisiune}} scangellate",
        "undeletehistory": "Ce tu repristine 'a pàgene, tutte le revisiune avènene repristinate jndr'à storie.\nCe 'na pàgena nove cu 'u stesse nome ha state ccrejate da 'a scangellazione, le revisiune repristinate iessène jndr'à storia prengepàle.",
        "undeleterevdel": "Repristine non ge ponne essere eseguite ce succede ca sus a pàgene prengepàle o sus le revisiune d'u file onne state parzialmende scangellate.\nJndr'à ste case, tu à smarcà o a sconnere 'a revisione scangellate cchiù nove.",
        "undeletehistorynoadmin": "Sta pàgene ha state scangellate.\n'U mutive d'a scangellazione ste scritte jndr'à 'u riepileghe de sotte, cu tutte le dettaglie de l'utinde ca onne mise mane jndr'à sta pàgene apprima d'u scangellamende.\n'U teste corrende de ste revisiune scangellate jè sulamende disponibbile pe l'amministrature.",
        "tooltip-pt-logout": "Isse",
        "tooltip-pt-createaccount": "Te ste 'ngoragge pe ccrejà 'nu cunde e trasè; comungue, non g'è obbligatorie",
        "tooltip-ca-talk": "'Ngazzaminde sus 'a pàgene de le condenute",
-       "tooltip-ca-edit": "Tu puè cangià sta pàgene. Pe piacere ause 'u buttone de l'andeprime apprime de salvà.",
+       "tooltip-ca-edit": "Cange sta pàgene",
        "tooltip-ca-addsection": "Fà accumenzà 'na seziona nove",
        "tooltip-ca-viewsource": "Sta pàgene jè prutette.\nPuè vedè sulamende 'u sorgende.",
        "tooltip-ca-history": "Versiune passete de sta pàgene",
        "tooltip-ca-nstab-main": "Vide 'a pàgene cu le condenute",
        "tooltip-ca-nstab-user": "Vide 'a pàgene de l'utende",
        "tooltip-ca-nstab-media": "Vide 'a pàgene de le media",
-       "tooltip-ca-nstab-special": "Queste jè 'na pàgena speciale, ca tu non ge puè cangià",
+       "tooltip-ca-nstab-special": "Queste ète 'na pàgena speciale, e non ge pò essere cangiate",
        "tooltip-ca-nstab-project": "Vide 'a pàgene d'u proggette",
        "tooltip-ca-nstab-image": "Vide 'a pàgene d'u fail",
        "tooltip-ca-nstab-mediawiki": "Vide le messàgge d'u sisteme",
        "spam_reverting": "Turnanne a l'urtema revisione no ge condiene collegaminde a $1",
        "spam_blanking": "Tutte le revisiune condènene collegaminde a $1, vacande",
        "spam_deleting": "Tutte le revisiune condènene collegaminde a $1, stoche a scangelle",
-       "simpleantispam-label": "Verifiche andi-spam.\n'''NO''' anghiè quiste!",
+       "simpleantispam-label": "Verifiche andi-spam.\n<strong>NO</strong> inghie quiste!",
        "pageinfo-title": "'Mbormaziune pe \"$1\"",
        "pageinfo-not-current": "Ne despiace, non g'è possibbile pigghià sta 'mbormazione pe le versiune vecchie.",
        "pageinfo-header-basic": "'Mbormaziune 'nderra-'nderre",
        "pageinfo-robot-index": "Permesse",
        "pageinfo-robot-noindex": "Non permesse",
        "pageinfo-watchers": "Numere de visitature d'a pàgene",
+       "pageinfo-visiting-watchers": "Numere de visitature pe pàgene ca onne 'ndrucate le cangiaminde recende",
        "pageinfo-few-watchers": "Mene de $1 {{PLURAL:$1|visitatore|visitature}}",
        "pageinfo-redirects-name": "Numere de redirezionaminde a sta pàgene",
        "pageinfo-redirects-value": "$1",
        "htmlform-cloner-create": "Aggiunge 'n'otre",
        "htmlform-cloner-delete": "Live",
        "htmlform-cloner-required": "Almene 'nu valore l'a mettere.",
+       "htmlform-title-not-exists": "[[:$1]] non g'esiste.",
+       "htmlform-user-not-exists": "<strong>$1</strong> non g'esiste.",
+       "htmlform-user-not-valid": "<strong>$1</strong> non g'è 'nu nome utende valide.",
        "sqlite-has-fts": "$1 cu 'u supporte d'a ricerche full-text",
        "sqlite-no-fts": "$1 senze 'u supporte d'a ricerche full-text",
        "logentry-delete-delete": "$1 pàgena {{GENDER:$2|scangellate}} $3",
        "special-characters-title-endash": "trattine en",
        "special-characters-title-emdash": "trattine em",
        "special-characters-title-minus": "segne mene",
+       "mw-widgets-dateinput-no-date": "Nisciune date scacchiate",
        "mw-widgets-titleinput-description-new-page": "'a pàgene non g'esiste angore",
        "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1"
 }
index 5183fdc..4ea698d 100644 (file)
@@ -82,7 +82,8 @@
                        "Mariya",
                        "Marina Melik-Adamyan",
                        "Normalex",
-                       "WindEwriX"
+                       "WindEwriX",
+                       "Nzeemin"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "actionthrottled": "Ограничение по скорости",
        "actionthrottledtext": "В качестве меры борьбы со спамом, установлено ограничение на многократное применение данного действия в течение короткого промежутка времени. Пожалуйста, повторите попытку через несколько минут.",
        "protectedpagetext": "Эта страница защищена для предотвращения её редактирования или совершений других действий.",
-       "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы:",
-       "viewyourtext": "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
+       "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы.",
+       "viewyourtext": "Вы можете просмотреть и скопировать исходный текст <strong>ваших правок</strong> на этой странице.",
        "protectedinterface": "Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.\nЧтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]",
        "editinginterface": "<strong>Внимание:</strong> Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.",
        "translateinterface": "Чтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
-       "cascadeprotected": "Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|1=следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:\n$2",
+       "cascadeprotected": "Ð\94аннаÑ\8f Ñ\81траница защищена от изменений, поскольку она включена в {{PLURAL:$1|1=следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:\n$2",
        "namespaceprotected": "У вас нет разрешения редактировать страницы в пространстве имён «$1».",
        "customcssprotected": "У вас нет разрешения редактировать эту CSS-страницу, так как она содержит личные настройки другого участника.",
        "customjsprotected": "У вас нет разрешения редактировать эту JavaScript-страницу, так как она содержит личные настройки другого участника.",
        "createacct-benefit-body2": "{{PLURAL:$1|статья|статьи|статей}}",
        "createacct-benefit-body3": "{{PLURAL:$1|участник|участника|участников}} за последнее время",
        "badretype": "Введённые вами пароли не совпадают.",
+       "usernameinprogress": "Создание учётной записи для данного имени участника уже выполняется.\nПожалуйста, подождите.",
        "userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
        "loginerror": "Ошибка опознавания участника",
        "createacct-error": "Ошибка создания учётной записи",
        "session_fail_preview_html": "'''К сожалению, сервер не смог обработать вашу правку из-за потери данных сессии.'''\n\n''Так как {{SITENAME}} разрешает использовать чистый HTML, предварительный просмотр отключён в качестве меры предотвращения JavaScript-атак.''\n\n'''Если это добросовестная попытка редактирования, пожалуйста, попробуйте ещё раз.\nЕсли не получается повторная правка, попробуйте [[Special:UserLogout|завершить сеанс]] работы и заново представиться.'''",
        "token_suffix_mismatch": "'''Ваша правка была отклонена, так как ваша программа неправильно обрабатывает знаки пунктуации\nв окне редактирования. Правка была отменена для предотвращения искажения текста статьи.\nПодобные проблемы могут возникать при использовании анонимизирующих веб-прокси, содержащих ошибки.'''",
        "edit_form_incomplete": "'''Некоторые части формы редактирования не достигли сервера. Внимательно проверьте, что ваши правки не повреждены, и попробуйте ещё раз.'''",
-       "editing": "Редактирование $1",
+       "editing": "Редактирование: $1",
        "creating": "Создание страницы «$1»",
        "editingsection": "Редактирование: $1 (раздел)",
-       "editingcomment": "Редактирование $1 (новый раздел)",
+       "editingcomment": "Редактирование: $1 (новый раздел)",
        "editconflict": "Конфликт редактирования: $1",
        "explainconflict": "Пока вы редактировали эту страницу, кто-то внёс в неё изменения.\nВ верхнем окне для редактирования вы видите текущий текст страницы.\nВ нижнем окне находится ваш вариант.\nПеренесите сделанные вами изменения из нижнего окна в верхнее.\nПри нажатии на кнопку «{{int:savearticle}}» будет сохранён текст верхнего окна.",
        "yourtext": "Ваш текст",
        "readonlywarning": "'''Предупреждение. База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.'''\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nАдминистратор, заблокировавший базу данных, оставил следующее объяснение: $1",
        "protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администраторов.'''\nНиже для справки приведена последняя запись журнала:",
        "semiprotectedpagewarning": "'''Замечание.''' Эта страница была защищена; редактировать её могут только зарегистрированные участники.\nНиже для справки приведена последняя запись журнала:",
-       "cascadeprotectedwarning": "'''Предупреждение:''' Данную страницу могут редактировать только участники с административными правами, поскольку она включена {{PLURAL:$1|1=в следующую страницу, для которой|в следующие страницы, для которых}} включена каскадная защита:",
+       "cascadeprotectedwarning": "<strong>Предупреждение:</strong> Данную страницу могут редактировать только участники с административными правами, поскольку она включена {{PLURAL:$1|1=в следующую страницу, для которой|в следующие страницы, для которых}} включена каскадная защита:",
        "titleprotectedwarning": "'''Предупреждение.  Это название защищено. Создать эту страницу могут только участники с [[Special:ListGroupRights|соответствующими правами]].'''\nНиже для справки приведена последняя запись журнала:",
        "templatesused": "{{PLURAL:$1|1=Шаблон, используемый|Шаблоны, используемые}} на этой странице:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон, используемый|Шаблоны, используемые}} в режиме предпросмотра:",
        "search-category": "(категория $1)",
        "search-file-match": "(совпадает с содержимым файла)",
        "search-suggest": "Возможно, вы имели в виду «$1».",
+       "search-rewritten": "Показаны результаты для $1. Искать вместо этого $2.",
        "search-interwiki-caption": "Родственные проекты",
        "search-interwiki-default": "Результаты из $1:",
        "search-interwiki-more": "(ещё)",
        "rows": "Строк:",
        "columns": "Столбцов:",
        "searchresultshead": "Поиск",
-       "stub-threshold": "Порог для определения оформления <a href=\"#\" class=\"stub\">ссылок на заготовки</a> (в байтах):",
+       "stub-threshold": "Порог для определения оформления ссылок на заготовки ($1):",
+       "stub-threshold-sample-link": "пример",
        "stub-threshold-disabled": "Отключён",
        "recentchangesdays": "Количество дней, за которые показывать свежие правки:",
        "recentchangesdays-max": "(не более $1 {{PLURAL:$1|дня|дней}})",
        "right-override-export-depth": "экспортирование страниц, включая связанные страницы с глубиной до 5",
        "right-sendemail": "отправка электронной почты другим участникам",
        "right-passwordreset": "просмотр электронных писем с изменением пароля",
-       "right-managechangetags": "Создавать и удалять [[Special:Tags|метки]] из базы данных",
-       "right-applychangetags": "Ð\9fÑ\80имениÑ\82Ñ\8c [[Special:Tags|tags]] Ð½Ð°Ñ\80Ñ\8fдÑ\83 Ñ\81 Ð\92аÑ\88ими Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8fми",
-       "right-changetags": "Ð\94обавлÑ\8fÑ\82Ñ\8c Ð¸ Ñ\83далÑ\8fÑ\82Ñ\8c Ð¿Ñ\80оизволÑ\8cнÑ\8bе  [[Special:Tags|tags]] Ð½Ð° Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8fх и записях в журнале",
+       "right-managechangetags": "создание и удаление [[Special:Tags|меток]] из базы данных",
+       "right-applychangetags": "пÑ\80именение [[Special:Tags|меÑ\82ок]] Ð²Ð¼ÐµÑ\81Ñ\82е Ñ\81о Ñ\81воими Ð¿Ñ\80авками",
+       "right-changetags": "добавление Ð¸ Ñ\83даление Ð¿Ñ\80оизволÑ\8cнÑ\8bÑ\85 [[Special:Tags|меÑ\82ок]] Ð½Ð° Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ð¿Ñ\80авках и записях в журнале",
        "newuserlogpage": "Журнал регистрации участников",
        "newuserlogpagetext": "Список недавно зарегистрировавшихся участников",
        "rightslog": "Журнал прав участника",
        "boteditletter": "б",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблюдающий участник|наблюдающих участника|наблюдающих участников}}]",
-       "rc_categories": "Только из категорий (разделитель «|»)",
-       "rc_categories_any": "Ð\9bÑ\8eбой",
+       "rc_categories": "Только из категорий (разделитель «|»):",
+       "rc_categories_any": "Ð\9bÑ\8eбаÑ\8f Ð¸Ð· Ð²Ñ\8bбÑ\80аннÑ\8bÑ\85",
        "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}",
        "newsectionsummary": "/* $1 */ новая тема",
        "rc-enhanced-expand": "Показать подробности",
        "upload-too-many-redirects": "URL содержит слишком много перенаправлений",
        "upload-http-error": "Произошла ошибка HTTP: $1",
        "upload-copy-upload-invalid-domain": "Копирование загрузок не доступно в этом домене.",
+       "upload-dialog-title": "Загрузить файл",
+       "upload-dialog-error": "Произошла ошибка",
+       "upload-dialog-warning": "Появилось предупреждение",
+       "upload-dialog-button-cancel": "Отменить",
+       "upload-dialog-button-done": "Готово",
+       "upload-dialog-button-save": "Сохранить",
+       "upload-dialog-button-upload": "Загрузить",
+       "upload-dialog-label-select-file": "Выбрать файл",
+       "upload-dialog-label-infoform-title": "Подробности",
+       "upload-dialog-label-infoform-name": "Имя",
+       "upload-dialog-label-infoform-description": "Описание",
+       "upload-dialog-label-usage-title": "Использование",
+       "upload-dialog-label-usage-filename": "Имя файла",
        "backend-fail-stream": "Не удалось транслировать файл $1.",
        "backend-fail-backup": "Невозможно сделать резервную копию файла $1.",
        "backend-fail-notexists": "Файл $1 не существует.",
        "booksources-text": "На этой странице приведён список ссылок на сайты, где вы, возможно, найдёте дополнительную информацию о книге. Это интернет-магазины и системы поиска в библиотечных каталогах.",
        "booksources-invalid-isbn": "Указанный номер ISBN, судя по всему, содержит ошибку. Пожалуйста, проверьте, что при переносе номера из первоисточника не возникло искажений.",
        "specialloguserlabel": "Исполнитель:",
-       "speciallogtitlelabel": "Цель (название или участник):",
+       "speciallogtitlelabel": "Цель (название или {{ns:user}}:имя участника):",
        "log": "Журналы",
        "all-logs-page": "Все доступные журналы",
        "alllogstext": "Общий список журналов сайта {{SITENAME}}.\nВы можете отфильтровать результаты по типу журнала, имени участника (учитывается регистр) или затронутой странице (также учитывается регистр).",
        "linksearch-pat": "Шаблон для поиска:",
        "linksearch-ns": "Пространство имён:",
        "linksearch-ok": "Найти",
-       "linksearch-text": "Можно использовать подстановочные символы, например, <code>*.wikipedia.org</code>.\nНеобходимо указать по крайней мере домен верхнего уровня, например <code>*.org</code><br />\n{{PLURAL:$2|1=Поддерживаемый протокол|Поддерживаемые протоколы}}: <code>$1</code> (если протокол явно не задан, по умолчанию подставляется http://).",
+       "linksearch-text": "Можно использовать подстановочные символы, например, <code>*.wikipedia.org</code>.\nНеобходимо указать по крайней мере домен верхнего уровня, например <code>*.org</code><br />\n{{PLURAL:$2|1=Поддерживаемый протокол|Поддерживаемые протоколы}}: $1 (если протокол явно не задан, по умолчанию подставляется http://).",
        "linksearch-line": "Ссылка на $1 из $2",
        "linksearch-error": "Подстановочные символы могут использоваться только в начале адресов.",
        "listusersfrom": "Показать участников, начиная с:",
        "emailuser": "Письмо участнику",
        "emailuser-title-target": "Написание электронного письма {{GENDER:$1|участнику|участнице}}",
        "emailuser-title-notarget": "Написание электронного письма участнику",
-       "emailpage": "Письмо участнику",
        "emailpagetext": "С помощью данной формы можно отправить сообщение на адрес электронной почты {{GENDER:$1|этого участника|этой участницы}}.\nВ качестве обратного адреса будет указан тот адрес, который вы указали в [[Special:Preferences|своих настройках]], таким образом получатель будет иметь возможность ответить непосредственно вам.",
        "defemailsubject": "{{SITENAME}} — Письмо от $1",
        "usermaildisabled": "Электронная почта участника отключена",
        "emailccsubject": "Копия вашего сообщения для $1: $2",
        "emailsent": "Письмо отправлено",
        "emailsenttext": "Ваше электронное сообщение отправлено.",
-       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailpage}}» проекта {{SITENAME}}.",
+       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}.",
        "usermessage-summary": "Оставить системное сообщение.",
        "usermessage-editor": "Системная доставка",
        "watchlist": "Список наблюдения",
        "watchlistanontext": "Пожалуйста, войдите, чтобы просмотреть или отредактировать элементы в списке наблюдения.",
        "watchnologin": "Нужно представиться системе",
        "addwatch": "Добавить в список наблюдения",
-       "addedwatchtext": "Страница «[[:$1]]» была добавлена в ваш [[Special:Watchlist|список наблюдения]].\nТам будут отмечаться последующие изменения этой страницы, а также связанной с ней страницы обсуждения.",
+       "addedwatchtext": "Статья «[[:$1]]» и её страница обсуждения были добавлены в ваш [[Special:Watchlist|список наблюдения]].",
        "addedwatchtext-short": "Страница «$1» была добавлена в ваш список наблюдения.",
        "removewatch": "Удалить из списка наблюдения",
-       "removedwatchtext": "Страница «[[:$1]]» была удалена из вашего [[Special:Watchlist|списка наблюдения]].",
+       "removedwatchtext": "Статья «[[:$1]]» и её страница обсуждения были удалены из вашего [[Special:Watchlist|списка наблюдения]].",
        "removedwatchtext-short": "Страница «$1» была удалена из вашего списка наблюдения.",
        "watch": "Следить",
        "watchthispage": "Наблюдать за этой страницей",
        "changecontentmodel-success-title": "Модель содержимого была изменена",
        "changecontentmodel-success-text": "Модель содержимого [[:$1]] была изменена.",
        "changecontentmodel-cannot-convert": "Содержимое [[:$1]] не может быть преобразовано к типу $2.",
-       "changecontentmodel-title-cantexist": "Невозможно иметь страницу в $1.",
        "changecontentmodel-nodirectediting": "Модель содержимого $1 не поддерживает прямое редактирование",
        "log-name-contentmodel": "Журнал изменения моделей содержимого",
        "log-description-contentmodel": "События, связанные с моделями содержимого страниц",
        "protect-locked-blocked": "Вы не можете изменять уровень защиты страницы, пока ваша учётная запись заблокирована.\nТекущие установки для страницы '''$1''':",
        "protect-locked-dblock": "Уровень защиты не может быть изменён, так как основная база данных временно заблокирована.\nТекущие установки для страницы '''$1''':",
        "protect-locked-access": "У вашей учётной записи недостаточно прав для изменения уровня защиты страницы. Текущие установки для страницы '''$1''':",
-       "protect-cascadeon": "ЭÑ\82а страница сейчас защищена в связи с тем, что она включена в {{PLURAL:$1|1=указанную ниже страницу, для которой|нижеследующие страницы, для которых}} установлена каскадная защита. Изменения уровня защиты этой страницы не повлияет на каскадную защиту.",
+       "protect-cascadeon": "Ð\94аннаÑ\8f страница сейчас защищена в связи с тем, что она включена в {{PLURAL:$1|1=указанную ниже страницу, для которой|нижеследующие страницы, для которых}} установлена каскадная защита. Изменения уровня защиты этой страницы не повлияет на каскадную защиту.",
        "protect-default": "Без защиты",
        "protect-fallback": "Разрешено только участникам с правами «$1»",
        "protect-level-autoconfirmed": "Разрешено только автоподтверждённым участникам",
        "undeletepagetext": "{{PLURAL:$1|Следующая $1 страница была удалена|Следующие $1 страниц были удалены|Следующие $1 страницы были удалены|1=Следующая страница была удалена}}, однако {{PLURAL:$1|1=она всё ещё находится в архиве и поэтому может быть восстановлена|они всё ещё находятся в архиве и поэтому могут быть восстановлены}}.\nАрхив может периодически очищаться.",
        "undelete-fieldset-title": "Восстановить версии",
        "undeleteextrahelp": "Для полного восстановления истории страницы оставьте все отметки пустыми и нажмите '''«{{int:undeletebtn}}»'''.\nДля частичного восстановления отметьте те версии страницы, которые нужно восстановить, и нажмите '''«{{int:undeletebtn}}»'''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|версия|версий|версии}} {{PLURAL:$1|помещена|помещены}} в архив",
+       "undeleterevisions": "$1 {{PLURAL:$1|версия|версий|версии}} {{PLURAL:$1|удалена|удалены}}",
        "undeletehistory": "При восстановлении страницы восстанавливается и её история правок.\nЕсли после удаления была создана новая страница с тем же названием, то восстановленные версии появятся в истории правок перед новыми версиями.",
        "undeleterevdel": "Восстановление не будет произведено, если оно приведёт к частичному удалению последней версии страницы или файла.\nВ подобном случае вы должны снять отметку или показать последние удалённые версии.",
        "undeletehistorynoadmin": "Статья была удалена. Причина удаления и список участников, редактировавших статью до её удаления, показаны ниже. Текст удалённой статьи могут просмотреть только администраторы.",
        "spam_reverting": "Откат к последней версии, не содержащей ссылки на $1",
        "spam_blanking": "Все версии содержат ссылки на $1, очистка",
        "spam_deleting": "Все версии содержали ссылки на $1, производится удаление",
-       "simpleantispam-label": "Анти-спам проверка.\n'''НЕ''' заполняйте это!",
+       "simpleantispam-label": "Анти-спам проверка.\n<strong>Не</strong> заполняйте это!",
        "pageinfo-title": "Сведения по «$1»",
        "pageinfo-not-current": "К сожалению, невозможно предоставить эту информацию для старых версий.",
        "pageinfo-header-basic": "Основные сведения",
        "htmlform-cloner-create": "Добавить ещё",
        "htmlform-cloner-delete": "Удалить",
        "htmlform-cloner-required": "Требуется по крайней мере одно значение.",
+       "htmlform-title-badnamespace": "[[:$1]] находится не в пространстве имён «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» не является создаваемым заголовком страницы",
+       "htmlform-title-not-exists": "[[:$1]] не существует.",
+       "htmlform-user-not-exists": "<strong>$1</strong> не существует.",
+       "htmlform-user-not-valid": "<strong>$1</strong> не является допустимым именем пользователя.",
        "sqlite-has-fts": "$1 с поддержкой полнотекстового поиска",
        "sqlite-no-fts": "$1 без поддержки полнотекстового поиска",
        "logentry-delete-delete": "$1 {{GENDER:$2|удалил|удалила}} страницу $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|создал|создала}} учётную запись $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|создал|создала}} учётную запись $3 и пароль был отправлен по электронной почте",
        "logentry-newusers-autocreate": "Автоматически создана учётная запись {{GENDER:$2|участника|участницы}} $1",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|перенёс|перенесла}} настройки защиты с $4 на $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3 с $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3",
        "logentry-rights-autopromote": "$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5",
        "special-characters-title-endash": "среднее тире",
        "special-characters-title-emdash": "длинное тире",
        "special-characters-title-minus": "знак минус",
+       "mw-widgets-dateinput-no-date": "Дата не выбрана",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница ещё не существует",
        "mw-widgets-titleinput-description-redirect": "перенаправление на $1"
 }
index 984516f..8946049 100644 (file)
        "passwordreset": "Ресет гесла",
        "passwordreset-text-one": "Выпиште тот формуларь, жебы сьте могли здобыти нове гесло",
        "passwordreset-text-many": "{{PLURAL:$1|На здобытя нового гесла доповньте єдно з даных.}}",
-       "passwordreset-legend": "Знову наставити гесло",
        "passwordreset-disabled": "Зновунаставлїня гесла є на тій вікі заказане",
        "passwordreset-emaildisabled": "Функції електронічной пошты были выпнуы на тій вікі.",
        "passwordreset-username": "Мено хоснователя:",
        "resettokens": "Реініціалізація клічів",
        "resettokens-text": "На тій сторінцї можете реініціалізовати клічі, якы уможнюють приступ к даякым пріватным даным звязаным з вашым контом.\n\n{{GENDER:|Мав|Мала|Мали}} бы сьте то учінити тогды, колы сьте помылково дакому {{GENDER:|прозрадив|прозрадила|прозрадили}}, або ваше конто было зрушене.",
        "resettokens-no-tokens": "Не є ниякых клічів на реініціалізацію.",
-       "resettokens-legend": "Реініціалізація клічів",
        "resettokens-tokens": "Клічі:",
        "resettokens-token-label": "$1 (актуалне значіня: $2)",
        "resettokens-watchlist-token": "Кліч до вебового канала (Atom/RSS) [[Special:Watchlist|змін слїдованых сторінок]]",
        "nlinks": "$1 {{PLURAL:$1|одказ|одказы|одказів}}",
        "nmembers": "$1 {{PLURAL:$1|обєкт|обєкты|обєктів}}",
        "nrevisions": "$1 {{PLURAL:$1|ревізія|ревізії|ревізій}}",
-       "nviews": "$1 {{PLURAL:$1|навщіва|навщівы|навщів}}",
        "nimagelinks": "Хоснованый ня $1 {{PLURAL:$1|сторінка|сторінкы|сторінках}}",
        "ntransclusions": "хоснованый ня $1 {{PLURAL:$1|сторінка|сторінкы|сторінках}}",
        "specialpage-empty": "Той пожадавцї не одповідають жадны записы.",
        "linksearch-pat": "Шаблона про ґлядяня:",
        "linksearch-ns": "Простор назв:",
        "linksearch-ok": "Глядати",
-       "linksearch-text": "Може хосновати заступны сімболы, наприклад „*.wikipedia.org“.<br />\nПовиннов є передовшыткым домена найвысшой уровни, напр. „*.org“.<br />\n{{PLURAL:$2|Підпорованый протокол|Підпорованы протоколы}}: <code>$1</code> (кідь не є шпеціфікованый та http://).",
+       "linksearch-text": "Може хосновати заступны сімболы, наприклад „*.wikipedia.org“.<br />\nПовиннов є передовшыткым домена найвысшой уровни, напр. „*.org“.<br />\n{{PLURAL:$2|Підпорованый протокол|Підпорованы протоколы}}: $1 (кідь не є шпеціфікованый та http://).",
        "linksearch-line": "$2 одказує на $1",
        "linksearch-error": "Заступны сімболы може хосновати лем на початку доменового мена.",
        "listusersfrom": "Вказати хоснователїв, што ся зачінають на:",
        "special-characters-group-gujarati": "Ґуджараті",
        "special-characters-group-thai": "Тайськы",
        "special-characters-group-lao": "Лаоськы",
-       "special-characters-group-khmer": "Кгмерськы"
+       "special-characters-group-khmer": "Кгмерськы",
+       "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ"
 }
index fa51788..7853e83 100644 (file)
        "passwordreset": "कूटशब्दः परिवर्त्यताम्",
        "passwordreset-text-one": "वि-पत्रमाध्यमेन अल्पकालीनकूटशब्दं प्राप्तुम् अधस्तनं प्रपत्रं पूरयतु ।",
        "passwordreset-text-many": "{{PLURAL:$1|वि-पत्रमाध्यमेन अल्पकालीनकूटशब्दं प्राप्तुम् अधस्तनां कामपि एकां पेटिकां पूरयतु ।}}",
-       "passwordreset-legend": "कूटशब्दः परिवर्त्यताम्",
        "passwordreset-disabled": "अस्मिन् विकि-जालस्थाने कूटशब्दं परिर्तितुं निषेधः अस्ति ।",
        "passwordreset-emaildisabled": "अस्मिन् विकि-जालस्थाने वि-पत्रसम्बद्धाः सेवाः असमर्थिताः सन्ति ।",
        "passwordreset-username": "योजकनाम:",
        "resettokens": "चिह्नानि (tokens) परिवर्त्यताम्",
        "resettokens-text": "भवतः/भवत्याः सदस्यतया सह सल्लग्नानि चिह्नानि () उपयोक्तुं शक्यन्ते । येन अनया सदस्यतया सह सल्लग्नाः काश्चन गुप्तसूचनाः ज्ञातुं शक्यन्ते ।",
        "resettokens-no-tokens": "परिवर्तनार्थं न किमपि चिह्नं तत्र विद्यते ।",
-       "resettokens-legend": "चिह्नानि (tokens) परिवर्त्यताम्",
        "resettokens-tokens": "चिह्नानि :",
        "resettokens-token-label": "$1 (वर्तमानमूल्यम् : $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|भवतः/भवत्याः ध्यानसूच्याः परिवर्तनस्य]] जालपूर्तेः (Atom/RSS) चिह्नं",
        "showpreview": "प्राग्दृश्यं दृश्यताम्",
        "showdiff": "परिवर्तनानि दृश्यन्ताम्",
        "blankarticle": "<strong>पूर्वसूचना : </strong> भवान्/भवती एकस्य रिक्तपृष्ठस्य निर्माणं करोति ।\nयदि भवान्/भवती \"{{int:savearticle}}\" इत्येतत् पुनः नोत्स्यति, तर्हि रिक्तपृष्ठस्य निर्माणं भविष्यति ।",
-       "anoneditwarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना''' à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरवà¥\87शà¤\83 à¤¨ à¤\95à¥\83तà¤\83 !\nà¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤ªà¥\8dरवà¥\87शà¤\83 à¤\85निवारà¥\8dयà¤\83 à¥¤ à¤\85नà¥\8dयथा à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 (IP) à¤¸à¤\99à¥\8dà¤\96à¥\8dया à¤\85à¤\99à¥\8dà¤\95िता à¤­à¤µà¤¤à¤¿ à¥¤ à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 <strong>[$1 à¤ªà¥\8dरविषà¤\9aि]</strong> \nउत <strong>[$2 सदस्यातां प्राप्नोति]</strong>, तर्हि अन्यसुविधाभिः सह भवान्/भवती सम्पादनानां श्रेयम् अपि प्राप्स्यति ।",
+       "anoneditwarning": "'''पà¥\82रà¥\8dवसà¥\82à¤\9aना''' à¤­à¤µà¤¤à¤¾/भवतà¥\8dया à¤ªà¥\8dरवà¥\87शà¤\83 à¤¨ à¤\95à¥\83तà¤\83 !\nà¤\85तà¥\8dर à¤¸à¤®à¥\8dपादनà¤\82 à¤\95रà¥\8dतà¥\81à¤\82 à¤ªà¥\8dरवà¥\87शà¤\83 à¤\85निवारà¥\8dयà¤\83 à¥¤ à¤\85नà¥\8dयथा à¤\85सà¥\8dय à¤ªà¥\83षà¥\8dठसà¥\8dय à¤\87तिहासà¥\87 à¤­à¤µà¤¤à¤\83/भवतà¥\8dयाà¤\83 à¤\85नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदà¤\83 (IP) à¤¸à¤\99à¥\8dà¤\96à¥\8dया à¤\85à¤\99à¥\8dà¤\95िता à¤­à¤µà¤¤à¤¿ à¥¤ à¤¯à¤¦à¤¿ à¤­à¤µà¤¾à¤¨à¥\8d/भवतà¥\80 <strong>[$1 à¤ªà¥\8dरविषति]</strong> \nउत <strong>[$2 सदस्यातां प्राप्नोति]</strong>, तर्हि अन्यसुविधाभिः सह भवान्/भवती सम्पादनानां श्रेयम् अपि प्राप्स्यति ।",
        "anonpreviewwarning": "''भवता/भवत्या प्रवेशः न स्वीकृतः । अस्य पृष्ठस्य परिवर्तनस्य इतिहासे भवतः/भवत्याः अन्तर्जालसंविदः (IP) उल्लेखो भविष्यति ।''",
        "missingsummary": "'''स्मरतु''' भवता/भवत्या सम्पादनस्य सारांशः न प्रदत्तः ।\n\"{{int:savearticle}}\" अत्र यदि भवान्/भवती द्वितीयवारं नोत्स्यति, तर्हि भवतः/भवत्याः सम्पादनसारांशात् ऋते परिवर्तनं रक्षितं भविष्यति ।",
        "selfredirect": "<strong>पूर्वसूचना :</strong> भवान्/भवती एतत् पृष्ठं एतत्पृष्ठं प्रत्येव प्रेषयति ।\nअनुप्रेषिणाय दोषपूर्णं लक्ष्यनिर्देशं भवितुम् अर्हति, अथवा तु भवान्/भवती अशुद्धपृष्ठस्य सम्पादनाय प्रयतते ।\n\"{{int:savearticle}}\" इत्ययत् भवान्/भवती पुनः नुदति चेत्, पुनर्नर्देशनं स्वयमेव भविष्यति ।",
        "last": "पूर्वतनम्",
        "page_first": "प्रप्रथमम्",
        "page_last": "अन्तिमम्",
-       "histlegend": "भà¥\87दसà¥\8dय à¤\9aयनमà¥\8d : à¤\86वà¥\83तà¥\8dतिभेदं द्रष्टुम् अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
+       "histlegend": "भà¥\87दसà¥\8dय à¤\9aयनमà¥\8d : à¤¸à¤\82सà¥\8dà¤\95रणभेदं द्रष्टुम् अग्रे प्रदत्ता रेडियो-मञ्जूषा नुद्यताम्, एण्टर्-कुड्मलं नुद्यताम्, अधः दत्तं कुड्मलं वा नुद्यताम् । <br />\nनूतनसंस्करणम् = नूतनासु आवृत्तिषु भेदः, \n(पूर्वतनम्) = पूर्वतनासु आवृत्तिषु भेदः, (लघु) = लघु सम्पादनम्",
        "history-fieldset-title": "अन्वेषणस्य इतिहासः",
        "history-show-deleted": "केवलम् अपाकृतम्",
        "histfirst": "पुरातनतमम्",
        "linksearch-pat": "अन्वेषणस्य क्रमः ।",
        "linksearch-ns": "नामस्थानम् :",
        "linksearch-ok": "अन्वेषणम्",
-       "linksearch-text": "\"*.wikipedia.org\" सदृशानि वन्यपत्राणि योजयितुं शक्यते । \nन्यूनातिन्यूनं \".org\" सदृशः अत्युन्नतस्तरस्य डोमेन आवश्यकम् अस्ति <br />\nअनुमोदितक्रमागतिः {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (http:// एतेषु कतममपि अन्वेषणे न योजयतु )",
+       "linksearch-text": "\"*.wikipedia.org\" सदृशानि वन्यपत्राणि योजयितुं शक्यते । \nन्यूनातिन्यूनं \".org\" सदृशः अत्युन्नतस्तरस्य डोमेन आवश्यकम् अस्ति <br />\nअनुमोदितक्रमागतिः {{PLURAL:$2|protocol|protocols}}: $1 (http:// एतेषु कतममपि अन्वेषणे न योजयतु )",
        "linksearch-line": " $1 इति $2 इत्यस्मात् परिसन्धितमस्ति",
        "linksearch-error": "वन्यपत्राणि आतिथेयस्य नाम्ना समं केवलं प्रभान्ति ।",
        "listusersfrom": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
        "emailuser": "एतस्मै योजकाय वि-पत्रं प्रेष्यताम्",
        "emailuser-title-target": "{{GENDER:$1|एतस्मै सदस्याय}} वि-पत्रं प्रैष्यताम्",
        "emailuser-title-notarget": "ईपत्र योजकः",
-       "emailpage": "वि-पत्रोपयोक्ता",
        "emailpagetext": "{{GENDER:$1|अस्मै}} योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । \n[[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।",
        "defemailsubject": "{{SITENAME}}\"$1\" इति योजकात् विद्युन्मानपत्रम् ।",
        "usermaildisabled": "योजकस्य विद्युन्मानपत्रं निष्क्रियम् ।",
        "emailccsubject": "$1: $2 कृते अपि भवतः सन्देशस्य प्रकृतीः ।",
        "emailsent": "वि-पत्रं प्रेषितम्",
        "emailsenttext": "भवतः/भवत्याः वि-पत्रसन्देशः प्रेषितः",
-       "emailuserfooter": "एतद्वि-पत्रं {{SITENAME}} इत्यस्य योजपत्राचरव्यवस्थाद्वारा  $1 इत्यनेन $2 {{int:emailpage}} कृते प्रेषितम् ।",
+       "emailuserfooter": "एतद्वि-पत्रं {{SITENAME}} इत्यस्य योजपत्राचरव्यवस्थाद्वारा  $1 इत्यनेन $2 {{int:emailuser}} कृते प्रेषितम् ।",
        "usermessage-summary": "तान्त्रिकसन्देशानां त्यागः ।",
        "usermessage-editor": "तान्त्रिकसन्देशवाहकः ।",
        "watchlist": "निरीक्षासूचिः",
        "special-characters-group-khmer": "खमेर",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
-       "special-characters-title-minus": "minus sign"
+       "special-characters-title-minus": "minus sign",
+       "mw-widgets-titleinput-description-new-page": "पृष्ठं न विद्यते"
 }
index 1148f68..6e2ded1 100644 (file)
        "actionthrottled": "Түргэнин хааччахтааһын",
        "actionthrottledtext": "Бу дьайыыны кылгас кэм иһигэр элбэхтик оҥорор бобуллар. Бу быраабыла спаамы утары охсуһарга көмөлөһөр. Аҕыйах мүнүүтэннэн өссө боруобалаар.",
        "protectedpagetext": "Бу сирэй уларытыыттан уонна да атын дьайыылартан көмүскэммит.",
-       "viewsourcetext": "Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:",
-       "viewyourtext": "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
+       "viewsourcetext": "Эн бу сирэй төрүт куодун көрүөххүн уонна төгүллээн ылыаххын сөп:",
+       "viewyourtext": "<strong>Бэйэҥ көннөрүүлэриҥ</strong> төрүт куодун бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп.",
        "protectedinterface": "Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.\nТылбааһын уларытыаххын баҕарар буоллаххына онно аналлаах тылбаас ситим-сирин туһан: MediaWiki [//translatewiki.net/ translatewiki.net]",
        "editinginterface": "<strong>Болҕой:</strong> Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.\nБу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр быраҕыраамма көстүүтэ уларыйыа.",
        "translateinterface": "Бу биллэриини тылбаастыырга эбэтэр уларытарга, бука диэн, MediaWiki диэн анал тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
-       "cascadeprotected": "Бу сирэй уларыйар кыаҕа суох, тоҕо диэтэххэ уларыйара бобуллубут (каскаднай көмүскэл холбоммут) {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:\n$2",
+       "cascadeprotected": "Бу сирэй уларыйар кыаҕа суох, тоҕо диэтэххэ уларыйара бобуллубут {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр (каскаднай көмүскэл холбоммут):\n$2",
        "namespaceprotected": "Эн '''$1''' аат эйгэтигэр киирэр сирэйдэри уларытар кыаҕыҥ суох.",
        "customcssprotected": "Эн бу CSS-сирэйи уларытар кыаҕыҥ суох, тоҕо диэтэххэ онтуҥ атын киһи тус бэйэтин туруорууларын таарыйар.",
        "customjsprotected": "Эн бу JavaScript-сирэйи уларытар кыаҕыҥ суох, тоҕо диэтэххэ онтуҥ атын киһи тус бэйэтин туруорууларын таарыйар.",
        "createacct-benefit-body2": "{{PLURAL:$1|сирэй|сирэй}}",
        "createacct-benefit-body3": "кэнники {{PLURAL:$1|кыттааччы|кыттааччы}}",
        "badretype": "Киирии тылларыҥ сөп түбэспэтилэр.",
+       "usernameinprogress": "Бу аатынан бэлиэтэнии бара турар.\nБука диэн кэтэһэ түс.",
        "userexists": "Суруйбут аатыҥ бэлиэр баар.\nБука диэн, атын аатта тал.",
        "loginerror": "Ааккын система билбэтэ",
        "createacct-error": "Бэлиэтэнии кэмигэр алҕас таҕыста",
        "passwordreset": "Киирии тылы саҥаттан",
        "passwordreset-text-one": "Урукку киирии тылы уларытарга бу форманы толор.",
        "passwordreset-text-many": "{{PLURAL:$1|Быстах киирии тылы электрон почтаҕар ыыттарарга түннүктэртэн биирдэстэрин толор.}}",
-       "passwordreset-legend": "Киирии тылы саҥаттан",
        "passwordreset-disabled": "Бу биикигэ киирии тылы саҥардыы бобуллубут.",
        "passwordreset-emaildisabled": "Бу биикигэ эл. почтаны туттуу араарыллыбыт",
        "passwordreset-username": "Кыттааччы:",
        "resettokens": "Токеннары бырах",
        "resettokens-text": "Бу ситим-сиргэ бэлиэтэммит ааккын кытта ситимнээх токеннары сотуоххун сөп.\n\nАлҕас кимиэхэ эрэ биэрэн кэбиспит буоллаххына эбэтэр ким эрэ эн ааккынан алдьатан киирбит буоллаҕына маны туһаныахха сөп.",
        "resettokens-no-tokens": "Сотуллар токен суох эбит.",
-       "resettokens-legend": "Токеннары бырах",
        "resettokens-tokens": "Токеннар:",
        "resettokens-token-label": "$1 (билиҥҥитэ: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|Кэтиир сирэйдэриҥ уларыйыыларын]] ситим-ханаалын (Atom/RSS) токена",
        "yourdiff": "Уратылар",
        "copyrightwarning": "Болҕой, манна оҥоһуллубут эбиилэр уонна уларытыылар $2 лицензиялаахтар (сиһ. маны көр $1). Өскө эн ыстатыйаларыҥ көҥүл тарҕаналларын уонна туһаныллалларын баҕарбат буоллаххына манна суруйума.<br />\nЭбиитин манна суруйар матырыйаалгын эбэтэр бэйэҥ суруйуохтааххын, эбэтэр көҥүл туһаныллары уонна көҥүл уларытары көҥүллүүр сиртэн ылбыт буолуохтааххын.\n'''КИМ ЭРЭ БАС БИЛЭР МАТЫРЫЙААЛЫН КИНИТТЭН КӨҤҮЛЭ СУОХ МАННА УГУМА!'''",
        "copyrightwarning2": "Болҕой, эн суруйбут матырыйаалгын ким баҕарар уларытар уонна суох гынар бырааптаах. Суруйбуккун уларыталларын сөбүлээбэт буоллаххына манна суруйума.<br />\nЭбиитин манна суруйдаххына, уларытыы ааптара мин буолабын, эбэтэр көҥүл туһанары уонна уларытары көҥүллүүр сиртэн ыллым диэн бигэргэтэҕин (маны көр $1).<br /> '''КИМ ЭРЭ БАС БИЛИИТИН МАННА КИНИТТЭН КӨҤҮЛЭ СУОХ УГУМА!'''",
+       "editpage-cannot-use-custom-model": "Бу сирэй иһинээҕитин тутула уларыйар кыаҕа суох.",
        "longpageerror": "'''Алҕас: Суруйар кэрчиккит {{PLURAL:$1|биир килобаайт|$1 килобаайт}} ыйааһыннаах, онтуккут көҥүллэммит {{PLURAL:$2|биир килобаайты|$2 килобайты}} килобаайты куоһарар. Онон сирэй бигэргэтиллэр кыаҕа суох.'''",
        "readonlywarning": "'''Сэрэтии: Сиэрбэргэ техническай үлэ бара турар, онон киллэрбит уларытыыларыҥ тута бигэргэнэр кыахтара суох.'''\nОнон уларытыыгын тиэкистээх билэҕэ уган баран, кэлин манна киллэриэххин сөп.\n\nХааччаҕы туруорбут дьаһабыл маннык быһаарыыны хаалларбыт: $1",
        "protectedpagewarning": "'''Сэрэтии:  Бу сирэй хатанан турар, администратор бырааптаах эрэ кыттааччылар уларытар кыахтаахтар.'''\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
        "semiprotectedpagewarning": "'''Биллэрии:''' Бу сирэй хатанан турар; ааттарын билиһиннэрбит эрэ кыттааччылар уларытар кыахтаахтар.\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
-       "cascadeprotectedwarning": "'''Сэрэтии:''' Бу сирэйи \"дьаһабыллар\" бөлөххө киирэр кыттааччылар эрэ уларытар кыахтаахтар, тоҕо диэтэххэ сирэй каскаднай көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:",
+       "cascadeprotectedwarning": "<strong>Сэрэтии:</strong> Бу сирэйи дьаһабыллар эрэ уларытар кыахтаахтар, тоҕо диэтэххэ сирэй каскаднай көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:",
        "titleprotectedwarning": "'''Сэрэтии:  Маннык ааттаах сирэйи уларытар бобуллубут, [[Special:ListGroupRights|анал бырааптаах эрэ дьон]] уларытыахтарын сөп .'''\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
        "templatesused": "Манна туттуллубут {{PLURAL:$1|халыып|халыыптар}} :",
        "templatesusedpreview": "Манна туттуллубут {{PLURAL:$1|халыып|халыыптар}} бигэргэтиэх иннинэ көстүүлэрэ:",
        "shown-title": "Сирэйгэ $1 {{PLURAL:$1|суругу|суруктары}} көрдөр",
        "viewprevnext": "Көр ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Бу биикигэ бу сирэй маннык ааттаах \"[[$1]]\"'''",
-       "searchmenu-new": "<strong>Бу биикигэ \"[[:$1]]\" сирэйи айарга!</strong>{{PLURAL:$2|0=|Эбии көрдөөһүн түмүгэр көстүбүт сирэйи көр.|Эбии көрдөөһүн түмүктэрин көр.}}",
+       "searchmenu-new": "<strong>\"[[:$1]]\" сирэйи айыаххын баҕарар буоллаххына, кыһылынан суруллубут сирэй аатын баттаа! </strong>\n{{PLURAL:$2|0=|Көрдөөһүн түмүгэр көстүбүт сирэйи кытта билсиэххин сөп:|Көрдөөһүн түмүктэрин кытта билсиэхин сөп:}}",
        "searchprofile-articles": "Ыстатыйалар истэрэ",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Барыта",
        "search-category": "(категория $1)",
        "search-file-match": "(билэ иһинээҕитин кытта сөп түбэһэр)",
        "search-suggest": "Баҕар маннык диэри гыммытыҥ буолуо: $1",
+       "search-rewritten": "Бу түмүктэрэ көстөллөр: $1. Ол оннугар маны көрдөт: $2.",
        "search-interwiki-caption": "Уруулуу бырайыактар",
        "search-interwiki-default": "$1 түмүгэ:",
        "search-interwiki-more": "(өссө)",
        "rows": "Строкаалара:",
        "columns": "Колонкалара:",
        "searchresultshead": "Көрдөөһүн түмүгэ",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">омооннорго ыйынньыктары</a> оҥоруу боруога:",
+       "stub-threshold": "Омооннорго ыйынньыктары оҥоруу боруога ($1):",
+       "stub-threshold-sample-link": "холобур",
        "stub-threshold-disabled": "Арахсыбыт",
        "recentchangesdays": "Хас хонук иһинэн уларытыылары көрдөрөргө:",
        "recentchangesdays-max": "(улааппыта $1 күн)",
        "badsig": "Сыыһа илии баттааһын; HTML тиэгтэрин көр.",
        "badsiglength": "Наһаа уһун илии баттааһын.\n$1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}} ордук буолуо суохтаах.",
        "yourgender": "Хайата Эйиэхэ сөп түбэһэрий?",
-       "gender-unknown": "ЫйбаÑ\82 Ð¸Ð½Ð¸Ð±Ð¸Ð½",
+       "gender-unknown": "Эн Ñ\82Ñ\83Ñ\81кÑ\83нан Ñ\81Ñ\83Ñ\80Ñ\83йаÑ\80Ñ\8bгаÑ\80, Ð±Ð°Ð°Ð¹Ñ\8bм Ñ\8dÑ\80гин Ð±Ð¸Ð¸Ñ\82Ñ\8dÑ\80 Ð´Ñ\8cаÑ\85Ñ\82аÑ\80гÑ\8bн Ð°Ñ\80ааÑ\80Ñ\8bа Ñ\81Ñ\83оÒ\95а",
        "gender-male": "Кини биики сирэйдэри уларытар",
        "gender-female": "Кини биики сирэйдэри уларытар",
        "prefs-help-gender": "Маны туруорар булгуччута суох. \nБырагыраамма сорох дьоҥҥо туһаайыллыбыт биллэриилэригэр эбэтэр кинилэргэ сыһыаннаах этиилэригэр кытааччы дьахтарыттан эбэтэр эр киһититтэн көрөн этии тутулун уларытан биэриэн сөп. \nТуора дьоҥҥо көстөр бэлиэтээһин.",
        "right-passwordreset": "Киирии тылы почта нөҥүө уларытыыны көрүү",
        "right-managechangetags": "[[Special:Tags|Бэлиэлэри]] билии олоҕуттан ылыы уонна сотуу",
        "right-applychangetags": "Улартыыларгын кытта [[Special:Tags|тиэктэри]] тутун",
+       "right-changetags": "Ханнык баҕарар [[Special:Tags|тиэктэри]] биирдиилээн уларытыыларга уонна сурунаал суруйууларыгар эбэри уонна сотору көҥүллээ",
        "newuserlogpage": "Кыттааччылары бэлиэтиир сурунаал",
        "newuserlogpagetext": "Соторутааҕыта бэлиэтэммит кыттааччылар.",
        "rightslog": "Кыттаачы бырааптарын сурунаала",
        "action-editmyprivateinfo": "бэйэҥ тускунан суруллубуту уларыт",
        "action-editcontentmodel": "сирэй ис тутулун уларытыы",
        "action-managechangetags": "билии олоҕор бэлиэлэри оҥоруу уонна сотуу",
+       "action-applychangetags": "тиэктэри Эн уларытыыларгын кытта туһанары көҥүллээ",
+       "action-changetags": "ханнык баҕарар тиэктэри сурунаал биирдиилээн уларытыыларыгар уонна суруктарыгар эбэри уонна сотору көҥүллээ",
        "nchanges": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|тиһэх сылдьыыгыттан}}",
        "enhancedrc-history": "устуоруйата",
        "newpageletter": "С",
        "boteditletter": "р",
        "number_of_watching_users_pageview": "[$1 кэтиир {{PLURAL:$1|кыттааччы|кыттааччылар}}]",
-       "rc_categories": "Бу эрэ категориялартан (араар бэлиэ \"|\")",
-       "rc_categories_any": "ХаннÑ\8bк баҕарар",
+       "rc_categories": "Бу эрэ категориялартан (араарар бэлиэ \"|\")",
+       "rc_categories_any": "ТалÑ\8bллÑ\8bбÑ\8bÑ\82Ñ\82ан Ñ\85айаÑ\82а баҕарар",
        "rc-change-size-new": "Уларытыы кээмэйэ: $1 баайт",
        "newsectionsummary": "/* $1 */ саҥа сиэксийэ",
        "rc-enhanced-expand": "Сиһилии көрдөр",
        "uploadscripted": "Бу билэ HTML эбэтэр скрипт куодтаах эбит. Интэриниэт көрдөрөр бырагыраамма ону сыыһа ааҕыан сөп.",
        "upload-scripted-pi-callback": "XML истиилин табылыыссатын таҥастыыр туһунан ыйыылаах-кэрдиилээх билэни хачайдыыр табыллыбата.",
        "uploaded-script-svg": "Хачайдаммыт SVG-билэҕэ сценарийы өйүүр куттааллаах «$1» элэмиэн көһүннэ.",
+       "uploaded-hostile-svg": "Хачайдаммыт SVG-билэ истиилин элэмиэнигэр кутталлаах CSS-куод көһүннэ.",
+       "uploaded-event-handler-on-svg": "SVG-билэлэргэ <code>$1=\"$2\"</code> сабыытыйаны таҥастааччы атрибууттарын туруоруу көҥүллэммэт.",
+       "uploaded-href-attribute-svg": "SVG-билэлэргэ олохтоох соруга суох href-атрибууттар <code>&lt;$1 $2=\"$3\"&gt;</code> бобуллаллар (а.э. http://, javascript:, уо.д.а.).",
+       "uploaded-href-unsafe-target-svg": "Хачайдаммыт SVG-билэҕэ кутталлаах сигэ көһүннэ <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "«Animate» тиэк көһүннэ, кини «from»-атрибут көмөтүнэн  <code>&lt;$1 $2=\"$3\"&gt;</code> хачайдаммыт SVG-билэҕэ сигэни уларытыан сөп.",
+       "uploaded-setting-href-svg": "Төрүт элэмиэҥҥэ «href» атрибуту киллэрэр «set» тиэги туһанар бобуулаах.",
+       "uploaded-wrong-setting-svg": "«Set» тиэги аадырыс/дааннай/сценарий быһыытынан ханнык баҕарар атрибуукка эбии хааччахтаммыт. Угуллубут SVG-билэҕэ <code>&lt;set to=\"$1\"&gt;</code> конструкция көстүбүт.",
+       "uploaded-setting-handler-svg": "«Handler» атрибууту аадырыс/дааннай/скрипт көмөтүнэн быһаарар SVG хааччахтаммыт. Угуллубут SVG-билэҕэ <code>$1=\"$2\"</code> конструкция көстүбүт.",
        "uploaded-image-filter-svg": "Хачайдаммыт SVG-билэҕэ маннык URL-аадырыстаах ойуу сиидэтэ көстүбүт <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Бу SVG-билэ алҕастаах аат даллаах эбит: '$1'",
        "uploadinvalidxml": "Хачайдаммит билэҕэ XML анаалыстанар кыаҕа суох.",
        "upload-too-many-redirects": "URL наһаа элбэх утаарыылаах",
        "upload-http-error": "HTTP алҕаһа таҕыста: $1",
        "upload-copy-upload-invalid-domain": "Бу домеҥҥа хачайдааһыны хатылыыр табыллыбат.",
+       "upload-dialog-title": "Билэни угуу",
+       "upload-dialog-button-cancel": "Салҕаама",
+       "upload-dialog-button-done": "Оҥоһулунна",
+       "upload-dialog-button-save": "Бигэргэт",
+       "upload-dialog-button-upload": "Киллэрии",
+       "upload-dialog-label-select-file": "Билэни тал",
+       "upload-dialog-label-infoform-title": "Сиһилии",
+       "upload-dialog-label-infoform-name": "Аата",
+       "upload-dialog-label-infoform-description": "Быһаарыыта",
+       "upload-dialog-label-usage-title": "Туһаныы",
+       "upload-dialog-label-usage-filename": "Билэ аата",
        "backend-fail-stream": "$1 билэни ыытар табыллыбата.",
        "backend-fail-backup": "Бу билэ $1 резервнэй куопуйатын оҥорор табыллыбата.",
        "backend-fail-notexists": "Маннык $1 билэ суох эбит.",
        "randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
        "randomincategory-category": "Категория:",
        "randomincategory-legend": "Категория түбэспиччэ ыстатыйата",
+       "randomincategory-submit": "Көс",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
        "logempty": "Сурунаалга сөп түбэһэр элэмиэннэр суохтар.",
        "log-title-wildcard": "Бу сурук бэлиэлэриттэн (буукубалартан) саҕаланар ааттары бул",
        "showhideselectedlogentries": "Талыллыбыт суруктары кистээ/көрдөр",
+       "log-edit-tags": "Сурунаалтан талбыт суругуҥ тиэгин уларыт",
        "allpages": "Сирэйдэр барыта",
        "nextpage": "Аныгыскы сирэй ($1)",
        "prevpage": "Бу иннинээҕи сирэй ($1)",
        "linksearch-pat": "Көрдөөһүн халыыба:",
        "linksearch-ns": "Аат хочото (namespace):",
        "linksearch-ok": "Бул",
-       "linksearch-text": "Туруоран биэрэр бэлиэлэри туһаныахха сөп, холобур,  <code>*.wikipedia.org</code>.\nҮрдүкү таһымнаах домен буолуохтаах, холобур <code>*.org</code>.<br />\nӨйөнөр {{PLURAL:$2|боротокуол|боротокуоллар}}: <code>$1</code> (көрдүүргэр ханнык да боротокуолу талбатаххына http:// туруоруллуо)",
+       "linksearch-text": "Туруоран биэрэр бэлиэлэри туһаныахха сөп, холобур,  <code>*.wikipedia.org</code>.\nҮрдүкү таһымнаах домен буолуохтаах, холобур <code>*.org</code>.<br />\nӨйөнөр {{PLURAL:$2|боротокуол|боротокуоллар}}: $1 (көрдүүргэр ханнык да боротокуолу талбатаххына http:// туруоруллуо)",
        "linksearch-line": "Мантан $2 манна $1 ыйынньык",
        "linksearch-error": "Туруоран биэрэр бэлиэлэри аадырыс/hostname саҕаланыытыгар эрэ туттуохха сөп.",
        "listusersfrom": "Мантан саҕалаан кыттааччылары көрдөр:",
        "trackingcategories-desc": "Категорияҕа киирии киритиэрийэ",
        "noindex-category-desc": "Бу сирэйи көрдүүр роботтар болҕомотоҕо ылбаттар, тоҕо диэтэххэ <code><nowiki>__NOINDEX__</nowiki></code> диэн «аптаах тыл» туттуллубут. Сирэй инньэ гынарга көҥүллэммит аат далыгар баар эбит.",
        "index-category-desc": "Сирэйгэ <nowiki>__INDEX__</nowiki> диэн «аптаах тыл» баар эбит (сирэй ону көҥүллүүр аат далыгар баар эбит), онон көрдүүр роботтар кинини болҕомтоҕо ылыа да суох түгэннэргэ көрөллөр эбит.",
-       "post-expand-template-inclusion-category-desc": "Халыыптары барытын көрөдөрдөххө сирэй кээмэйэ маннааҕар улаатыа <code>$wgMaxArticleSize</code>, ол иһин сорох халыыптар көрдөрүллүбэтилэр.",
+       "post-expand-template-inclusion-category-desc": "Халыыптары барытын көрдөрдөххө сирэй ыйааһына маны <code>$wgMaxArticleSize</code> куоһарыан сөп, онон сорҕото эрэ көрдөрүлүннэ.",
        "post-expand-template-argument-category-desc": "Халыып аргуменын арыйдахха (фигурнай ускуопка иһигэр баары, холобур, <code>{{{Foo}}})</code>, сирэй маннааҕар улахан буолуо: <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Сирэйгэ наһаа элбэх ресурсаны сиир функция туттуллубут (холобур, маннык <code>#ifexist</code>). Сиһилии — бу сирэйгэ: [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Бу категория билэҕэ алҕастаах сигэ баар буоллаҕына эбиллэр (суох билэҕэ сигэнии).",
        "emailuser": "Кыттааччыга сурук",
        "emailuser-title-target": "Эл. суругу {{GENDER:$1|кыттааччыга}} суруйуу",
        "emailuser-title-notarget": "Кыттааччыга e-mail сурук ыытыы",
-       "emailpage": "Кыттааччыга E-mail ыыт",
        "emailpagetext": "Бу фуорма көмөтүнэн {{GENDER:$1|кыттааччыга}} сурук ыытыаххын сөп.\n\"Кимтэн\" диэҥҥэ эн [[Special:Preferences|туруорууларгар]] баар аадырыһыҥ киириэҕэ,\nонон суругу туппут киһи ол аадырыскар чопчу хардарар кыахтаныа.",
        "defemailsubject": "{{SITENAME}} — $1 диэн киһиттэн сурук кэлбит",
        "usermaildisabled": "Кыттааччы эл почтата арахса сылдьар",
        "rollback-success": "$1 көннөрүүлэр бу торумҥа төннөрүлүннүлэр: $2.",
        "sessionfailure-title": "Сиэссийэ алҕаһа",
        "sessionfailure": "Арааһа туох эрэ сатаммата, дьайыыҥ оҥоһуллубата. Браузергар \"Төнүн\" тимэҕи баттаа уонна бу иннинээҕи сирэйгин иккистээн киллэрэн көр.",
+       "changecontentmodel": "Сирэй ис тутулун киэбин уларытыы",
+       "changecontentmodel-title-label": "Сирэй баһа",
+       "changecontentmodel-model-label": "Иһинээҕитин саҥа киэбэ",
+       "changecontentmodel-reason-label": "Төрүөтэ:",
+       "changecontentmodel-success-title": "Иһинээҕитин киэбэ уларыйда",
+       "changecontentmodel-success-text": "[[:$1]] иһинээҕитин киэбэ уларыйда.",
+       "changecontentmodel-cannot-convert": "[[:$1]] иһинээҕитэ $2 көрүҥҥэ уларыйар кыаҕа суох эбит.",
+       "changecontentmodel-nodirectediting": "$1 иһинээҕитин киэбин быһа уларытар сатаммат эбит",
+       "log-name-contentmodel": "Иһинээҕитин киэбин уларытыы сурунаала",
+       "log-description-contentmodel": "Сирэй иһинээҕитин киэбин кытта ситимнээх",
+       "logentry-contentmodel-change-revertlink": "төннөрүү",
+       "logentry-contentmodel-change-revert": "төннөрүү",
        "protectlogpage": "Харысхал сурунаала (көннөрүүттэн көмүскэммит билэлэр испииһэктэрэ)",
        "protectlogtext": "Манна сирэйи көмүскээһин устуоруйата суруллубут.\nЭн өссө [[Special:ProtectedPages|билигин уларытыллыбат гына көмүскэммит сирэйдэр тиһиктэрин]] көрүөххүн сөп.",
        "protectedarticle": "\"[[$1]]\" сирэй уларытыллыбат",
        "protect-locked-blocked": "Уларытыы таһымын учуотунай суругуҥ бобуллубут кэмигэр уларытар кыаҕыҥ суох.\n'''$1''' сирэй уларытыытын таһыма:",
        "protect-locked-dblock": "Уларытыы таһыма уларыйар кыаҕа суох - дааннайдар баазаларын уларытар бобулунна.\n'''$1''' сирэй уларытыытын таһыма билиҥҥи туругунан маннык:",
        "protect-locked-access": "Эн аккаунуҥ уларытыы таһымын көннөрөр кыаҕа суох.\n'''$1''' сирэй уларыыттын таһыма билиҥҥи туругунан маннык:",
-       "protect-cascadeon": "Бу сирэй уларытыыттан көмүскэммит {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} (каскааднай көмүскэл) киирэр буолан эмиэ көмүскэммит. Эн көмүскэнии таһымын уларытыаххын сөп, ол каскаднай көмүскэли уларыппат.",
+       "protect-cascadeon": "Бу сирэй көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр буолан уларытыыттан көмүскэммит. Көмүскэл таһымын уларытыаххын сөп эрээри, ол каскаднай көмүскэли уларыппат.",
        "protect-default": "Барыларыгар көҥүллэнэр",
        "protect-fallback": "\"$1\" кыттааччылар эрэ маны оҥорор кыахтаахтар",
        "protect-level-autoconfirmed": "Аптамаатынан бигэргэммит кыттааччыларга эрэ көҥүллэнэр",
        "namespace": "Аат дала (Пространство имён):",
        "invert": "Бэлиэтэниллибити таҥнары тут",
        "tooltip-invert": "Бу бэлиэни туруоран талбыт аат далгар баар сирэйдэри уларытыыны көстүбэт оҥор (уонна анаан ыйыллыбыт буоллаҕына ситимнээх аат далларыгар)",
+       "tooltip-whatlinkshere-invert": "Бу чыычааҕы туруордаххына талбыт аат далгыттан сигэлэри кистиэҥ",
        "namespace_association": "Ситимнээх аат даллара",
        "tooltip-namespace_association": "Бу бэлиэни туруордаххына талбыт аат далгын кытта ситимнээх аат даллара эмиэ холбоһуохтара",
        "blanknamespace": "(Сүрүн)",
        "autoblockid": "Аптамаатынан хааччахтааһын #$1",
        "block": "Кыттааччыны хааччахтааһын",
        "unblock": "Кытааччы хааччаҕын устуу",
-       "blockip": "IP аадырыстан киириини бобуу",
+       "blockip": "{{GENDER:$1|Кыттааччыны}} хааччахтаа",
        "blockip-legend": "Кыттааччыны хааччахтааһын",
        "blockiptext": "Ханнык эмит IP-ттан суруйары манна баар форманы туһанан боп.\nВандализмы утаран уонна [[{{MediaWiki:Policy-url}}]]\nбыраабылалрын тутуһан эрэ бобуохтааххын.\nХайаан да бобуу төрүөтүн кэпсээ (холобур, вандализм баар сирэйдэриттэн\nбыһа тардан манна көрдөр).",
        "ipaddressorusername": "IP аадырыһа эбэтэр кыттааччы аата:",
        "ipb-unblock-addr": "$1 бобуутун суох гын",
        "ipb-unblock": "Кыттаачыны эбэтэр IP-ны бобуллубуттар испииһэктэриттэн таһаар",
        "ipb-blocklist": "Бобуулары көрдөр",
-       "ipb-blocklist-contribs": "$1 кыттааччы кылаата/киллэриитэ",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} суруйуута",
        "unblockip": "Кыттааччыны көҥүллээ",
        "unblockiptext": "IP эбэтэр кыттааччы көннөрөр/уларытар быраабын манна баар форманы туһанан төннөр.",
        "ipusubmit": "Хааччаҕын уһул",
        "unblocked": "[[User:$1|$1]] хааччахтаныыта уһулунна",
        "unblocked-range": "$1 хааччаҕа уһулунна",
        "unblocked-id": "$1 хааччахтаныыта уһулунна",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] хааччаҕа уһулунна.",
        "blocklist": "Бобуллубут кыттааччылар",
        "ipblocklist": "Хааччахтаммыт кыттааччылар",
        "ipblocklist-legend": "Хааччахтаммыт/бобуллубут кыттааччыны көрдөөһүн",
        "thumbnail-temp-create": "Эскииз быстах билэтин оҥорор табыллыбата",
        "thumbnail-dest-create": "Эскииһи ыйбыт сиргэр угар табыллыбата",
        "thumbnail_invalid_params": "Кыра ойуу кээмэйэ сыыһалаах",
+       "thumbnail_toobigimagearea": "Билэ кээмэйэ мантан - $1 - улахан",
        "thumbnail_dest_directory": "Наадалаах каталогы оҥорор табыллыбата",
        "thumbnail_image-type": "Маннык ойуу көрүҥэ манна туттуллубат",
        "thumbnail_gd-library": "GD бибилитиэкэ толору конфигурацията суох, бу функция суох: $1",
        "thumbnail_image-missing": "Арааһа бу билэ суох быһыылаах: $1",
        "thumbnail_image-failure-limit": "Эскииһи наһаа элбэхтик киллэрэ сатаатыҥ ($1 төгүл, биитэр өссө элбэх). Бука диэн, кэлин хатылаан көрөөр.",
        "import": "Сирэйдэри импортааһын",
-       "importinterwiki": "Ð\91иики Ñ\8bккаÑ\80дÑ\8bнааÒ\95Ñ\8b Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82",
-       "import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.",
+       "importinterwiki": "Ð\90Ñ\82Ñ\8bн Ð±Ð¸Ð¸ÐºÐ¸Ñ\82Ñ\82Ñ\8dн ÐºÐ¸Ð»Ð»Ñ\8dÑ\80ии",
+       "import-interwiki-text": "Биикини уонна импортанар сирэй аатын ый.\nУларытыылар күннэрэ-ыйдара уонна ааптардар ааттара оннуларынан хаалыаҕа.\nАтын биикиттэн ылыы [[Special:Log/import|аналлаах сурунаалга]] бэлиэтэниэҕэ.",
        "import-interwiki-sourcewiki": "Ийэ биики:",
        "import-interwiki-sourcepage": "Бастааҥы сирэй:",
        "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
        "import-interwiki-templates": "Бары халыыптары киллэр",
        "import-interwiki-submit": "Импортаа",
+       "import-mapping-default": "Атыны эппэтэххэ угар сир аадырыһа",
+       "import-mapping-namespace": "Бу аат далыгар:",
+       "import-mapping-subpage": "Бу сирэй хос сирэйин курдук импортаа:",
        "import-upload-filename": "Билэ аата:",
        "import-comment": "Хос быһаарыы:",
        "importtext": "Сирэйи [[Special:Export|экспорт үнүстүрүмүөнүн]] көмөтүнэн бастакы биикиттэн экспортаа. \nБилэни бастаан бэйэҥ көмпүүтэргэр суруй, онтон манна көһөр.",
        "tooltip-pt-logout": "Тахсыы",
        "tooltip-pt-createaccount": "Манна киирэргэ бэлиэтэнэр уонна куруук ол аатынан киирэр ордук; ол булгуччута суох",
        "tooltip-ca-talk": "Ыстатыйаны ырытыы",
-       "tooltip-ca-edit": "Бу сирэйи уларытыахха сөп. Бука диэн бастаан хайдах буоларын көрөн баран уларыт.",
+       "tooltip-ca-edit": "Бу сирэйи уларыт",
        "tooltip-ca-addsection": "Саҥа салааны саҕалааһын",
        "tooltip-ca-viewsource": "Бу сирэй улартыллыбат. Ол гынан баран тутулун көрүөххүн уонна устан ылыаххын сөп.",
        "tooltip-ca-history": "Бу сирэй урукку торумнара.",
        "patrol-log-page": "Бэрэбиэркэ сурунаала",
        "patrol-log-header": "Ботуруулламмыт торумнар сурунааллара.",
        "log-show-hide-patrol": "$1 ботурууллааһын сурунаала",
+       "log-show-hide-tag": "$1 тиэк сурунаала",
        "deletedrevision": "$1 урукку торума сотулунна",
        "filedeleteerror-short": "Билэни сотор сатаммата: $1",
        "filedeleteerror-long": "Билэни сотуу кэмигэр кэккэ моһоллор таҕыстылар:\n\n$1",
        "watchlisttools-raw": "\"Сиикэй\" испииһэги уларытыы",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ырытыы]])",
        "duplicate-defaultsort": "Болҕой: Наардааһын «$2» күлүүһэ урукку «$1» күлүүһү сабар (Ключ сортировки переопределяет прежний ключ).",
+       "duplicate-displaytitle": "<strong>Болҕой:</strong> Көрдөрүллүбүт «$2» аат урут көрдөрүллүбүт «$1» ааты уларытар.",
        "version": "MediaWiki барыла (биэрсийэтэ)",
        "version-extensions": "Туруоруллубут расширениялар",
-       "version-skins": "Тас көстүү барыллара",
+       "version-skins": "Туруоруллубут тас көстүү барыллара",
        "version-specialpages": "Аналлаах сирэйдэр",
        "version-parserhooks": "синтаксическай анализатор перехватчиктара",
        "version-variables": "Уларыйар дааннайдар (переменнайдар)",
        "version-libraries": "Олордуллубут бибилэтиэкэлэр",
        "version-libraries-library": "Бибилэтиэкэ",
        "version-libraries-version": "Биэрсийэтэ",
+       "version-libraries-license": "Лиссиэнсийэ",
+       "version-libraries-description": "Ойуулааһын",
+       "version-libraries-authors": "Ааптар",
        "redirect": "Билэттэн, кыттааччыттан, сирэйтэн эбэтэр барыл идентификаторыттан утаарыы",
        "redirect-legend": "Билэҕэ эбэтэр сирэйгэ утаарыы",
        "redirect-summary": "Бу аналлаах сирэй билэҕэ (билэ аатыттан), сирэйгэ (барыл эбэтэр сирэй идентификааторыттан) эбэтэр кыттааччы сирэйигэр (кыттааччы идентификаторыттан) утаарар. Туһаныы: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]] эбэтэр\n[[{{#Special:Redirect}}/user/101]].",
        "tags-activate": "холбоо",
        "tags-deactivate": "араар",
        "tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
+       "tags-manage-no-permission": "Тиэктэри уларытар кыаҕыҥ суох эбит.",
+       "tags-create-heading": "Саҥа тиэги оҥоруу",
+       "tags-create-explanation": "Саҥа оҥоһуллубут тиэктэри кыттааччылар уонна буоттар уларытар кыахтаах буолуохтара.",
        "tags-create-tag-name": "Бэлиэ аата:",
        "tags-create-reason": "Төрүөтэ:",
        "tags-create-submit": "Оҥоруу",
        "tags-deactivate-submit": "араар",
        "tags-edit-title": "Тиэктэри уларытыы",
        "tags-edit-manage-link": "Тиэктэри дьаһайыы",
+       "tags-edit-existing-tags": "Баар тиэктэр:",
        "tags-edit-existing-tags-none": "''Суох''",
        "tags-edit-new-tags": "Саҥа тиэктэр:",
        "tags-edit-add": "Бу тиэктэри эп:",
        "htmlform-cloner-create": "Өссө эп",
        "htmlform-cloner-delete": "Сот",
        "htmlform-cloner-required": "Саатар биирин толоруохтаах эбиккин.",
+       "htmlform-title-not-creatable": "«$1» оҥоһуллар сирэй аата буолбатах",
+       "htmlform-title-not-exists": "[[:$1]] суох.",
+       "htmlform-user-not-exists": "<strong>$1</strong> суох.",
        "sqlite-has-fts": "$1 толору тиэкистээх көрдөөһүнү өйүүр",
        "sqlite-no-fts": "$1 толору тиэкистээх көрдөөһүнү өйөөбөт",
        "logentry-delete-delete": "$3 сирэйи $1 соппут",
        "logentry-rights-rights-legacy": "$3 бөлөхтөргө киириитин $1 уларыппыт",
        "logentry-rights-autopromote": "$1 мантан $4 манна $5 көһөрүллүбүт",
        "logentry-upload-upload": "$1 {{GENDER:$2|укпут}} $3",
+       "log-name-managetags": "Тиэктэр сурунааллара",
        "rightsnone": "(суох)",
        "revdelete-summary": "уларытыылар туһунан",
        "feedback-adding": "Сирэй туһунан санаа этии...",
        "right-pagelang": "Сирэй тылын уларыт",
        "action-pagelang": "сирэй тылын уларытар буол",
        "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (холбоммут)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''арахсыбыт''')",
        "mediastatistics": "Миэдьийэ ыстатыыстыката",
        "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME көрүҥэ",
index 5eca1c4..bbc3660 100644 (file)
@@ -17,7 +17,7 @@
                        "Macofe"
                ]
        },
-       "tog-underline": "Suttalinia li lijami:",
+       "tog-underline": "Suttalìnia li lijami:",
        "tog-hideminor": "Ammuccia li canciamenti nichi nta l'ùrtimi canciamenti",
        "tog-hidepatrolled": "Ammuccia li mudìfichi battugghiati nta l'ùrtimi canciamenti",
        "tog-newpageshidepatrolled": "Ammuccia li pàggini battugghiati di l'alencu dî pàggini cchiu' novi",
        "returnto": "Ritorna a' $1.",
        "tagline": "Di {{SITENAME}}",
        "help": "Guida",
-       "search": "Arriscedi",
+       "search": "Arricerca",
        "searchbutton": "Va cerca",
        "go": "Trova",
        "searcharticle": "Vai",
        "readonly": "Basi di dati bluccata",
        "enterlockreason": "Spiega lu mutivu dû bloccu, spicificannu na stima di quannu veniravi livatu.",
        "readonlytext": "Com'ad ora la basi di dati è bluccata e nun sunnu pussìbbili junti o canciamenti; lu mutivu prubbabbili è la manutinzioni ordinària, finuta la quali la basi di dati turniravi normali.\n\nL'amministraturi chi la bluccau desi sta spiegazzioni: $1",
-       "missing-article": "La basi di dati nun attruvau lu testu di na pàggina ch'avìssi avutu a' attruvari, cu' nomu \"$1\" $2.\n\nSta cosa di sòlitu succedi quannu s'arrichiama, a' pàrtiri di na crunuluggìa o di nu cunfruntu tra virsioni, nu liami a na pàggina chi' fu' cancillata.\n\nSi' nun è accussì, po' èssiri ca scupristi nu bug ntô software.\nPi' favuri signala stu fattu a' n'[[Special:ListUsers/sysop|amministraturi]], spicificannu l'URL.",
+       "missing-article": "La basi di dati nun attruvau lu testu di na pàggina c'avissi avutu a attruvari, cu nomu \"$1\" $2.\n\nSta cosa di sòlitu succedi quannu s'arrichiama, a pàrtiri di na crunuluggìa o di nu cunfruntu tra virsioni, nu liami a na pàggina chi fu cancillata.\n\nSi nun è accussì, pò èssiri ca scupristi nu bug ntô software.\nPi favuri signala stu fattu a n'[[Special:ListUsers/sysop|amministraturi]], spicificannu l'URL.",
        "missingarticle-rev": "(№ di virsioni: $1)",
        "missingarticle-diff": "(Diff: $1, $2)",
        "readonly_lag": "La basi di dati fu' bluccata autumaticamenti nta mentri ca li server di basi di dati slave si sincrunìzzanu cu' chiddu master",
        "delete-hook-aborted": "Cancillazzioni annullata di n'hook.\nNun desi nudda spiegazzioni.",
        "no-null-revision": "Non fu' pussibbili criari na virsioni nulla pâ paggina \"$1\"",
        "badtitle": "Tìtulu nun bonu",
-       "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn lijami intir-linguìsticu o intir-wiki malu fattu.\nPutissi cuntèniri unu o cchiu' ssai caràttiri chi' nun su' cunsintuti ntê tìtula.",
+       "badtitletext": "Lu tìtulu di pàggina addumannatu nun era vàlidu, era vacanti, o vinìa dûn lijami nterlinguìsticu o nterwiki malu fattu.\nPutissi cuntèniri unu o chiossai caràttiri chi nun sù cunzintuti ntê tìtula.",
        "title-invalid-empty": "Lu tìtulu addumannatu pâ pàggina è vacanti o puru cunteni sulu lu nomu dûn namespace.",
        "title-invalid-utf8": "Lu tìtulu addumannatu pâ pàggina cunteni na siguenza UTF-8 nun vàlida.",
        "title-invalid-interwiki": "Lu tìtulu addumannatu pâ pàggina cunteni ligami interwiki, ca ntê tìtula nun si ponnu adupirari.",
        "actionthrottled": "Azzioni ritardata",
        "actionthrottledtext": "Comu misura di sicurezza contru lu spam, l'esecuzioni di alcuni azzionu è limitata a nu nùmmuru massimu di voti ni nu determinatu piriudu du tempu, limiti ca ni stu casu fu supiratu. Si prega di ripruvari tra qualchi minutu.",
        "protectedpagetext": "Sta pàggina fu bluccata pi privèniri canciamenti o autri opirazzioni.",
-       "viewsourcetext": "È pussìbbili visualizzari e cupiari lu còdici surgenti di sta pàggina:",
-       "viewyourtext": "È pussibbili visualizzarei cupiari lu còdici surgenti dî '''tò canciamenti''' nti sta pàggina:",
+       "viewsourcetext": "Poi taliari e cupiari lu còdici surgenti di sta pàggina.",
+       "viewyourtext": "Poi taliari e cupiari lu còdici surgenti dî <strong>tò canciamenti</strong> nti sta pàggina.",
        "protectedinterface": "Sta pàggina cunteni un elementu ca fà parti dâ nterfaccia utenti dû software eggh'è  prutetta p'evitari pussìbbili abbusi. Pi jùnciri o canciari li traduzzioni pi tutti li wiki usari [//translatewiki.net/translatewiki.net] lu pruggettu di lucalizzazzioni di Mediawiki.",
        "editinginterface": "<strong>Accura:</strong> Lu testu di sta pàggina fà parti di l'interfaccia utenti dû situ.\nTutti li canciamenti appurtati a sta pàggina si riflèttinu supra li missaggi visualizzati pi tutti l'utenti di sta wiki.",
        "translateinterface": "Pi' agghiunciri o canciari traduzzioni pi' tutti i wiki, pi' favuri adupirati [//translatewiki.net/ translatewiki.net], lu pruggettu di lucalizzazzioni di MediaWiki.",
-       "cascadeprotected": "Supra sta pàggina nun è pussìbbili effittuari canciamenti pirchì veni nclusa nt{{PLURAL:$1|â pàggina siquenti, ca fu prutetta|ê pàggini siquenti, ca foru prutetti}} silizziunannu la prutizzioni \"ricursiva\":\n$2",
+       "cascadeprotected": "Sta pàggina è prutetta dî canciamenti pirchì veni nclusa {{PLURAL:$1|ntâ pàggina siquenti, ca fu prutiggiuta|ntê pàggini siquenti, ca foru prutiggiuti}} cu l'opzioni «a cascata»:\n$2",
        "namespaceprotected": "Nun hai lu pirmissu pi canciari li pàggini ntô namespace '''$1'''.",
        "customcssprotected": "Nun hai lu pirmissu pi' canciari sta pàggina CSS picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
        "customjsprotected": "Nun hai lu pirmissu pi' canciari sta pàggina JavaScript picchì cunteni i mpustazzioni pirsunali di n'autru utenti.",
        "createacct-benefit-body2": "{{PLURAL:$1|pàggina|pàggini}}",
        "createacct-benefit-body3": "{{PLURAL:$1|cuntribbuturi ricenti|cuntribbutura ricenti}}",
        "badretype": "Li password chi' mittisti nun currispùnnunu tra d'iddi.",
+       "usernameinprogress": "Un cuntu cu stu nomu utenti già si sta criannu.\nPi favuri aspetta.",
        "userexists": "Lu nomu utenti nziritu è già usatu.\nTi prijamu pirciò di vuliri scègghîri nu nomu utenti diffirenti.",
        "loginerror": "Erruri ntâ trasuta",
        "createacct-error": "Erruri ntâ criazzioni dû cuntu",
        "link_sample": "Tìtulu dû lijami",
        "link_tip": "Lijami di dintra",
        "extlink_sample": "http://www.example.com tìtulu dâ lijami",
-       "extlink_tip": "Lijami di fora (ricurdàrisi lu prifissu http://)",
+       "extlink_tip": "Lijami di fora (arricurdàrisi lu prifissu http://)",
        "headline_sample": "Ntistazzioni",
        "headline_tip": "Suttantistazzioni",
        "nowiki_sample": "Nzirisci ccà lu testu nun furmattatu",
        "image_sample": "Asempiu.jpg",
        "image_tip": "File ncurpuratu",
        "media_sample": "Asempiu.ogg",
-       "media_tip": "Lijami a' file",
+       "media_tip": "Lijami a file",
        "sig_tip": "A to firma cu' data e ura",
        "hr_tip": "Linia urizzuntali (usari cu' giudizziu)",
        "summary": "Riassuntu:",
        "accmailtitle": "Password mannata",
        "accmailtext": "Na password ginirata casualmenti pi' [[User talk:$1|$1]] fu' spiduta a $2. Si po' canciari di la pàggina di <em>[[Special:ChangePassword|canciamentu dâ password]]</em> comu unu trasi.",
        "newarticle": "(Novu)",
-       "newarticletext": "Siguisti na lijami a' na pàggina ch'ancora nun esisti.\nPi' criari sta pàggina, accumenza a' scrìviri ccassutta (talìa la [$1 pàggina d'ajutu] p'aviri majuri nfurmazzioni).\nSi' agghicasti cca pi' sbagghiu, carca lu buttuni <strong>n' arreri</strong> dû to browser.",
+       "newarticletext": "Siguisti na lijami a na pàggina chancora nun esisti.\nPi criari sta pàggina, accumenza a scrìviri ccassutta (talìa la [$1 pàggina d'aiutu] p'aviri maiuri nfurmazzioni).\nSi agghicasti ccà pi sbagghiu, carca lu buttuni <strong>n arreri</strong> dû tò browser.",
        "anontalkpagetext": "----''Chista è la pàggina di discussioni di n’utenti anònimu, ca nun criau ancora n’accessu o ca nun l’usa.\nP’idintificàrilu è pirciò nicissariu usari lu nùmmiru di lu sò nnirizzu IP.\nLi nnirizzi IP ponnu pirò èssiri spartuti di cchiù utenti.\nSiddu sî n’utenti anònimu e riteni ca li cummenti prisenti nta sta pàggina nun si rifirìscinu a tia, [[Special:UserLogin/signup|crea n’accessu novu]] o [[Special:UserLogin|trasi]] cu chiddu ca già hai p’evitari d’èssiri cunfusu cu àutri utenti anònimi ‘n futuru.''",
        "noarticletext": "Nta stu mumentu la pàggina addumannata è vacanti. È pussìbbili [[Special:Search/{{PAGENAME}}|circari stu tìtulu]] nta l'àutri pàggini dû situ oppuru <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|action=edit}} circari ntê riggistra culligati] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} canciari la pàggina ora]</span>.",
        "noarticletext-nopermission": "Nta stu mumentu la pàggina addumannata è vacanti. È pussibbili [[Special:Search/{{PAGENAME}}|circari stu titulu]] nti àutri pàggini dû situ o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} circari ntê riggistra culligati]</span>, ma nun hai li pirmissa pi criari sta pàggina.",
-       "missing-revision": "A virsioni #$1 dâ paggina ntitulata \"{{FULLPAGENAME}}\" nun esisti.\n\nStu fattu di sòlitu succedi quannu si segui na lijami di crunuluggìa versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "missing-revision": "A virsioni #$1 dâ paggina ntitulata \"{{FULLPAGENAME}}\" nun esisti.\n\nStu fattu di sòlitu succedi quannu si segui na lijami di crunuluggìa versu na pàggina chi fu cancillata.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
        "userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" nun currispunni a n'utenti riggistratu. Virificari si si voli criari o canciari sta pàggina.",
        "userpage-userdoesnotexist-view": "U cuntu utenti \"$1\" nun è riggistratu.",
        "blocked-notice-logextract": "St'utenti pi' com'ora è bluccatu.\nComu rifirimentu ccassutta cc'è l'ùltima vuci dû riggìstru dî blocchi:",
        "yourdiff": "Diffirenzi",
        "copyrightwarning": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} s'hannu a' cunsiddirari sutta â licenza d'usu $2 (talìa $1 pî dittagghî).\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu e ridistribbuùti a' vogghia, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti chi' lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira.\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
        "copyrightwarning2": "Pi' favuri nota ca tutti li cuntribbuti mannati a' {{SITENAME}} ponnu vèniri canciati, altirati o cancillati di l'autri participanti.\nSi' nun voi ca li to testi vènunu mudificati senza nuddu riguardu, allura nê mannari cca.<br />\nMannannu lu to testu nni dichiari sparti ca lu scrivisti tu pirsunalmenti, o puru ca lu cupiasti di na fonti di pùbblicu duminiu o analugamenti lìbbira (talìa $1 pi' majuri dittagghî).\n<strong>Nun mannari matiriali cupertu di drittu d'auturi senza auturizzazzioni!</strong>",
-       "editpage-cannot-use-custom-model": "Lu mudellu dû cuntinutu di sta pàggina nun si po’ canciari.",
+       "editpage-cannot-use-custom-model": "Lu mudellu dû cuntinutu di sta pàggina nun si pò canciari.",
        "longpageerror": "<strong>Erruri: Lu testu ca hai suttamisu è longu {{PLURAL:$1|un kilobyte|$1 kilobyte}}, cchiù' ssai dû màssimu ca è di {{PLURAL:$2|un kilobyte|$2 kilobyte}}.</strong>\nNun si po' sarvari.",
        "readonlywarning": "<strong>Accura: Lu database è fermu pi manutinzioni, pirciò nun poi sarvari li tò canciamenti nta stu mumentu.</strong>\nLa cosa megghia è fari un copia e ncodda dû testu nta n'àutru prugramma e sarvàrilu pi quannu lu database torna accissìbbili.\n\nL'amministraturi ca bluccau lu database desi sta spiegazzioni: $1",
        "protectedpagewarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' sulu l'utenti cu' privileggi d'amministraturi a ponnu canciari.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Sta pàggina fu' prutetta a' manera chi' sulu l'utenti riggistrati la ponnu canciari.\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
-       "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina havi statu bluccata di manera ca sulu l'utenti cu' privileggi di amministraturi la ponnu canciari, pirchì veni nclusa {{PLURAL:$1|nta siquente pàggina ca havi statu prutiggiuta|ntê siquenti pàggini ca hannu statu prutiggiuti}} a' cascata:",
+       "cascadeprotectedwarning": "<strong>Accura:</strong> Sta pàggina fu bluccata di manera ca sulu l'utenti cu privileggi di amministraturi la ponnu canciari, pirchì veni nclusa {{PLURAL:$1|ntâ pàggina  siquenti ca è prutiggiuta|ntê pàggini siquenti ca sunnu prutiggiuti}} a cascata:",
        "titleprotectedwarning": "<strong>Accura: Sta pàggina fu' prutetta a' manera chi' giuvunu [[Special:ListGroupRights|privileggi spicìfici]] pi' criàrila.</strong>\nPi' rifirimentu, ccassutta è ripurtata l'ultima vuci dû riggistru:",
        "templatesused": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta sta pàggina:",
        "templatesusedpreview": "{{PLURAL:$1|Template adupiratu|Template adupirati}} nta st'antiprima:",
        "revdelete-edit-reasonlist": "Cancia li mutivazioni pi la cancillazzioni",
        "revdelete-offender": "Auturi dâ virsioni:",
        "suppressionlog": "Riggistru dî supprissioni",
-       "suppressionlogtext": "Ccassutta cc'è n'elencu dî cancillazzioni e dî blocchi chi' cumpòrtunu l'ammucciata di cuntinutu a' l'occhî di l'amministratura.\nSi po' cunsultari la [[Special:BlockList|lista dî blocchi]] pi' canùsciri li furbanna e li blocchi in viguri pi' com'ora.",
+       "suppressionlogtext": "Ccassutta c'è n'elencu dî cancillazzioni e dî blocchi chi cumpòrtanu l'ammucciata di cuntinutu a l'occhî di l'amministratura.\nSi pò cunzurtari la [[Special:BlockList|lista dî blocchi]] pi canùsciri li furbanna e li blocchi n viguri pi com'ora.",
        "mergehistory": "Junciuta dî crunuluggìi",
        "mergehistory-header": "Sta pàggina fa' jùnciri li crunuluggìi di du pàggini, abbuccannu li virsioni di na pàggina surgenti nta na pàggina cchiu' nova.\nAssicùriti ca stu canciamentu mantiniràvi la cuntinuità storica di la pàggina.",
        "mergehistory-box": "Junci li storii di dui pàggini:",
        "mergehistory-from": "Pàggina d'orìggini:",
        "mergehistory-into": "Pàggina di distinazioni:",
        "mergehistory-list": "Crunuluggìa chi' si po' jùnciri",
-       "mergehistory-merge": "Si pònnu jùnciri li virsioni di [[:$1]] nnicati ccassutta â crunuluggìa di [[:$2]].\nAdòpira la culonna chî buttuni di opzioni pi' jùnciri sulu li virsioni fatti nfina â data e l'ura spicificati.\nGuàrditi ca s'adòpiri lijami di navigazzioni la culonna veni azzirata.",
+       "mergehistory-merge": "Si ponnu jùnciri li virsioni di [[:$1]] nnicati ccassutta â crunuluggìa di [[:$2]].\nAdòpira la culonna chî buttuna d'opzioni pi jùnciri sulu li virsioni fatti nfina â data e l'ura spicificati.\nGuàrdati ca s'adòpiri lijami di navigazzioni la culonna veni azzirata.",
        "mergehistory-go": "Vidi li canciamenti ca ponnu èssiri junciuti",
        "mergehistory-submit": "Junci li virsioni",
        "mergehistory-empty": "Nudda virsioni di jùnciri.",
        "diff-multi-sameuser": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} dû stissu utenti nun {{PLURAL:$1|mustrata|mustrati}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Na diffirenza minzana|$1 diffirenzi minzani}} di cchiu' ssai di {{PLURAL:$2|n'autru utenti|autri $2 utenti}} nun {{PLURAL:$1|mustrata|mustrati}})",
-       "difference-missing-revision": "{{PLURAL:$2|Na virsioni|$2 virsioni}} di sta diffirenza ($1) {{PLURAL:$2|nun fu' truvata|nun furu truvati}}.\n\nStu fattu di sòlitu succedi quannu si segui nu lijami di diffirenza versu na pàggina chi' fu' cancillata.\nSi ponnu a' vìdiri i dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
+       "difference-missing-revision": "{{PLURAL:$2|Na virsioni|$2 virsioni}} di sta diffirenza ($1) {{PLURAL:$2|nun fu attruvata|nun foru attruvati}}.\n\nStu fattu di sòlitu succedi quannu si segui nu lijami di diffirenza versu na pàggina chi fu cancillata.\nSi ponnu vìdiri li dittagghî ntô [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistru dî cancillazzioni].",
        "searchresults": "Risurtati dâ risciduta",
        "searchresults-title": "Risurtati dâ risciduta di \"$1\"",
        "titlematches": "Currispunnenzi ntê tìtuli dî pàggini",
        "search-category": "(catigurìa $1)",
        "search-file-match": "(currispunnenza ntô cuntinutu dûn file)",
        "search-suggest": "Forsi circavutu: $1",
+       "search-rewritten": "Sunnu ammustrati li risurtati pi $1. Mmeci cerca $2.",
        "search-interwiki-caption": "Pruggetti frati",
        "search-interwiki-default": "Risultati di $1:",
        "search-interwiki-more": "(cchiù)",
        "rows": "Righi:",
        "columns": "Culonni:",
        "searchresultshead": "Risciduta",
-       "stub-threshold": "Valuri minimu pî <a href=\"#\" class=\"stub\">liami a li stub</a>:",
+       "stub-threshold": "Sogghia pi furmattari na liami comu bozza ($1):",
+       "stub-threshold-sample-link": "esempiu",
        "stub-threshold-disabled": "Disattivatu",
        "recentchangesdays": "Nùmmiru di jorna a' ammustrari nta l'ùrtimi cancaiamenti:",
        "recentchangesdays-max": "(màssimu $1 {{PLURAL:$1|jornu|jorna}})",
        "badsig": "Firma grezza nun vàlida.\nCuntrolla l'etichetti HTML.",
        "badsiglength": "La to firma è troppu longa.\nNun havi a' èssiri cchiu' longa di $1 {{PLURAL:$1|caràttiri|caràttiri}}.",
        "yourgender": "Comu prifirisci èssiri discrivutu?",
-       "gender-unknown": "Quannu ti mmuntùa, si’ po’, lu prugramma adupiriràvi lu gèniri grammaticali neutru",
+       "gender-unknown": "Quannu t'ammintua, si pò, lu prugramma adòpira lu gèniri grammaticali nèutru",
        "gender-male": "N'auturi di pàggini dâ wiki",
        "gender-female": "N'autrici di pàggini dâ wiki",
        "prefs-help-gender": "Mpustari sta prifirenza è facultativu.\nU software adòpira u so valuri pi' parrari cu' tia, e di tia a' l'autri, facennu usu dû gèniri grammaticali currettu.\nSta nfurmazzioni sarravi pùbblica.",
        "email": "Nnirizzu di posta elittrònica",
        "prefs-help-realname": "Lu nomu veru è facultativu.\nSiddu scegghî di furnìrilu, veni adupiratu pi' dàriti crèditu dû tò travagghiu.",
        "prefs-help-email": "Lu nnirizzu di posta elittrònica è facultativu, ma po' giuvari p'azzirari la password, ntô casu chi' tâ scordi.",
-       "prefs-help-email-others": "Poi videmma scègghîri di pirmèttiri ca l'autri ti cuntàttanu pi' posta elittrònica a' pàrtiri dî lijami chi' si tròvanu ntê to pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntàttunu.",
+       "prefs-help-email-others": "Poi videmma scègghiri di pirmèttiri ca l'àutri ti cuntàttanu pi posta elittrònica a pàrtiri dî lijami chi s'attròvanu ntê tò pàggini d'utenti o di discussioni.\nLu tò nnirizzu nun veni rivilatu quannu l'àutri utenti ti cuntàttanu.",
        "prefs-help-email-required": "Lu nnirizzu di posta elittrònica è obbligatoriu.",
        "prefs-info": "Nfurmazzioni essinziali",
        "prefs-i18n": "Intirnazziunalizzazioni",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[taliata di {{PLURAL:$1|nu utenti|$1 utenti}}]",
-       "rc_categories": "Lìmita a li catigurìi (siparati di \"|\")",
-       "rc_categories_any": "Quali è jè",
+       "rc_categories": "Lìmita a li catigurìi (spartuti cu «|»)",
+       "rc_categories_any": "Qualegghiè tra chiddi scigghiuti",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} appressu dû canciamentu",
        "newsectionsummary": "/* $1 */ sizzioni nova",
        "rc-enhanced-expand": "Ammustra li dittagghî",
        "upload-too-many-redirects": "L'URL cuntineva troppi redirect",
        "upload-http-error": "Mmattìu n'erruri HTTP: $1",
        "upload-copy-upload-invalid-domain": "Lu carricamentu di copî nun è cunsintutu di stu duminiu.",
+       "upload-dialog-title": "Carricamentu dûn file",
+       "upload-dialog-error": "Ammattìu n'erruri",
+       "upload-dialog-warning": "Ammattìu n'avvisu",
+       "upload-dialog-button-cancel": "Annulla",
+       "upload-dialog-button-done": "Finutu",
+       "upload-dialog-button-save": "Sarva",
+       "upload-dialog-button-upload": "Càrrica",
+       "upload-dialog-label-select-file": "Scegghi lu file",
+       "upload-dialog-label-infoform-title": "Dittagghî",
+       "upload-dialog-label-infoform-name": "Nomu",
+       "upload-dialog-label-infoform-description": "Discrizzioni",
+       "upload-dialog-label-usage-title": "Usu",
+       "upload-dialog-label-usage-filename": "Nomu dû file",
        "backend-fail-stream": "Nun fu pussìbbili trasmèttiri lu file \"$1\".",
        "backend-fail-backup": "Nun fu' pussìbbili fari na copia di riserva dû file \"$1\".",
        "backend-fail-notexists": "Lu file $1 nun esisti.",
        "backend-fail-maxsize": "Nun fu' pussìbbili scrìviri lu file \"$1\" picchì è cchiu' grossu di {{PLURAL:$2|un byte|$2 byte}}.",
        "backend-fail-readonly": "U backend di mimurizzazzioni \"$1\" pi' com'ora è a' sula littura. La spiegazzioni data è: \"<em>$2</em>\"",
        "backend-fail-synced": "Lu file \"$1\" si trova nta nu statu incoerenti tra dî backend di mimurizzazzioni interni.",
-       "backend-fail-connect": "Nun fu' pussìbbili culligàrisi ô backend di mimurizzazzioni \"$1\".",
-       "backend-fail-internal": "Mmattìu n'erruri scanusciutu ntô backend di mimurizzazzioni \"$1\".",
-       "backend-fail-contenttype": "Nun fu' pussìbbili ditirminari lu tipu di cuntinutu dû file di mimurizzari nta \"$1\".",
+       "backend-fail-connect": "Nun fu pussìbbili culligàrisi ô supportu di mimurizzazzioni \"$1\".",
+       "backend-fail-internal": "Si virificau n'erruri scanusciutu ntô supportu di mimurizzazzioni \"$1\".",
+       "backend-fail-contenttype": "Nun fu pussìbbili ditirminari lu tipu di cuntinutu dû file di mimurizzari nti \"$1\".",
        "backend-fail-batchsize": "U backend di mimurizzazzioni ricivìu na nfurnata di {{PLURAL:$1|una opirazzioni|$1 opirazzioni}} tra file; però lu so lìmiti è di {{PLURAL:$2|na sula opirazzioni|$2 opirazzioni}}.",
        "backend-fail-usable": "Nun fu' pussìbbili lèggiri o scrìviri lu file \"$1\" pi' causa di pirmissi nsufficienti o cartelli/cuntinituri mancanti.",
        "filejournal-fail-dbconnect": "Nun fu' pussìbbili culligàrisi â basi di dati giurnali dû backend di mimurizzazzioni \"$1\".",
        "linkstoimage": "{{PLURAL:$1|La pàggina siquenti richiàma|Li $1 pàggini siquenti richiàmanu}} stu file:",
        "linkstoimage-more": "Cci su' cchiu' ssai di $1 {{PLURAL:$1|pàggina|pàggini}} ca richiàmunu stu file.\nLa lista ccassutta ammustra sulu {{PLURAL:$1|la prima pàggina|li primi $1 pàggini}}.\nSi po' puru a' vìdiri [[Special:WhatLinksHere/$2|na lista cumpleta]].",
        "nolinkstoimage": "Nudda pàggina richiama stu file.",
-       "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|autri lijami]] versu di stu file.",
+       "morelinkstoimage": "Ammustra [[Special:WhatLinksHere/$1|àutri lijami]] versu di stu file.",
        "linkstoimage-redirect": "$1 (rimannu ô file) $2",
        "duplicatesoffile": "{{PLURAL:$1|Stu|Sti $1}} file {{PLURAL:$1|è nu dupppiuni|sunnu duppiuni}} di st'autru file ([[Special:FileDuplicateSearch/$2|cchiù dittagli]]):",
        "sharedupload": "Stu file veni di $1 e purrìa èssiri adupiratu di autri pruggetti.",
        "listduplicatedfiles-summary": "Chista è na lista dî file unni la virsioni cchiu' nova è nu duppiuni dâ virsioni cchiu' nova di quarchi' autru file. Sulu li file lucali su' pigghiati a' cunsiddirazzioni.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] havi [[$3|{{PLURAL:$2|nu duppiuni|$2 duppiuna}}]].",
        "unusedtemplates": "Template nun usati",
-       "unusedtemplatestext": "Sta pàggina elenca tutti li pàggini nto namespace {{ns:template}} ca nun sunnu nclusi nta nudda autra pàggina.\nPrima di cancillàrili è megghiu cuntrullari ca nun hannu autri lijami ca cci tràsunu.",
-       "unusedtemplateswlh": "autri lijami",
+       "unusedtemplatestext": "Sta pàggina elenca tutti li pàggini ntô namespace {{ns:template}} ca nun sunnu nclusi nta nudda àutra pàggina.\nPrima di cancillàrili è megghiu cuntrullari ca nun hannu àutri lijami ca ci tràsinu.",
+       "unusedtemplateswlh": "àutri lijami",
        "randompage": "Na pàggina a' muzzu",
        "randompage-nopages": "Nun cci su' pàggini {{PLURAL:$2|nta stu namespace|nta sti namespace}}: $1.",
        "randomincategory": "Na pàggina a' muzzu nta na catigurìa",
        "randomincategory-nopages": "Nun cci su' pàggini ntâ catigurìa [[:Category:$1|$1]].",
        "randomincategory-category": "Catigurìa:",
        "randomincategory-legend": "Pàggina a' muzzu nta na catigurìa",
+       "randomincategory-submit": "Vai",
        "randomredirect": "Nu rimannu a' muzzu",
        "randomredirect-nopages": "Nun cc'è nuddu rimannu ntô namespace \"$1\".",
        "statistics": "Statìstichi",
        "pageswithprop-prophidden-long": "valuri tistuali longu dâ prupietà ammucciatu ($1)",
        "pageswithprop-prophidden-binary": "valuri binariu dâ prupietà ammucciatu ($1)",
        "doubleredirects": "Rimanni duppî",
-       "doubleredirectstext": "Sta pàggina alenca li pàggini chi' rimànnunu ad autri pàggini di rimannu.\nOgnin riga cunteni lijami versu lu primu e versu lu secunnu rimannu, sparti dâ distinazzioni dû secunnu rimannu, ca di sòlitu è la pàggina \"giusta\" unni avissi a' puntari macari lu primu rimannu.\nLi rimanni <del>sbarrati</del> hannu statu cunsati.",
+       "doubleredirectstext": "Sta pàggina alenca li pàggini chi rimànnanu a àutri pàggini di rimannu.\nOgni riga cunteni lijami versu lu primu e versu lu secunnu rimannu, sparti dâ distinazzioni dû secunnu rimannu, ca di sòlitu è la pàggina \"giusta\" unni avissi a puntari macari lu primu rimannu.\nLi rimanni <del>sbarrati</del> foru cunzati.",
        "double-redirect-fixed-move": "[[$1]] fu spustata.\nFu aggiurnata autumaticamenti e ora rimanna a [[$2]].",
        "double-redirect-fixed-maintenance": "Cunsatu autumaticamenti nu rimannu duppiu di [[$1]] a' [[$2]] ntôn sirvizzu di manutinzioni.",
        "double-redirect-fixer": "Cunsaturi dî rimanni",
        "brokenredirectstext": "Li rimanni siguenti pùntanu a' pàggini ca nun esìstinu:",
        "brokenredirects-edit": "cancia",
        "brokenredirects-delete": "cancella",
-       "withoutinterwiki": "Pàggini senza lijami intir-linguìstici",
-       "withoutinterwiki-summary": "Li pàggini siguenti nun hannu lijami versu dî virsioni nta l'autri lingui.",
+       "withoutinterwiki": "Pàggini senza lijami nterlinguìstici",
+       "withoutinterwiki-summary": "Li pàggini siguenti nun hannu lijami versu dî virsioni nta l'àutri lingui.",
        "withoutinterwiki-legend": "Prifissu",
        "withoutinterwiki-submit": "Ammustra",
        "fewestrevisions": "Pàggini cu' cchiu' picca virsioni",
        "ntransclusions": "adupiratu nta $1 {{PLURAL:$1|pàggina|pàggini}}",
        "specialpage-empty": "Nun cci su' risultati pi' stu rennicuntu.",
        "lonelypages": "Pàggini òrfani",
-       "lonelypagestext": "Li pàggini ccassutta nun hannu lijami ca vèninu d'autri pàggini e nun su' trasclusi nta autri pàggini di {{SITENAME}}.",
+       "lonelypagestext": "Li pàggini ccassutta nun hannu lijami ca vèninu d'àutri pàggini e nun sù nclusi nta àutri pàggini di {{SITENAME}}.",
        "uncategorizedpages": "Pàggini nun catigurizzati",
        "uncategorizedcategories": "Catigurìi nun catigurizzati",
        "uncategorizedimages": "File nun catigurizzati",
        "shortpages": "Pàggini curti",
        "longpages": "Pàggini longhi",
        "deadendpages": "Pàggini senza nisciuta",
-       "deadendpagestext": "Li pàggini siguenti sunnu privi di lijami versu autri pàggini di {{SITENAME}}.",
+       "deadendpagestext": "Li pàggini siguenti sunnu privi di lijami versu àutri pàggini di {{SITENAME}}.",
        "protectedpages": "Pàggini prutetti",
        "protectedpages-indef": "Sulu prutizzioni a' tempu innitirminatu",
        "protectedpages-summary": "Sta pàggina elenca li pàggini già esistenti chi' comu ad ora su' prutetti. Pi' na lista dî tìtuli prutetti, chî quali vèni pruibbutu criari pàggini novi, talìa [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "ancientpages": "Pàggini cchiu' vecchî",
        "move": "Sposta",
        "movethispage": "Sposta sta pàggina",
-       "unusedimagestext": "Li file ccassutta esìstunu però nun sunnu ncurpurati nta nudda pàggina.\nAccura: autri siti web ponnu aviri lijami versu dûn file pi' menzu di URL diretti; li file addupirati a' sta manera putìssiru èssiri elincati ccassutta macari si' si nni fa' usu.",
+       "unusedimagestext": "Li file ccassutta esìstinu pirò nun sunnu ncurpurati nta nudda pàggina.\nAccura: àutri siti web ponnu aviri lijami versu dûn file pi menzu di URL diretti; li file addupirati a sta manera putìssiru èssiri elincati ccassutta macari si si nni fa usu.",
        "unusedcategoriestext": "Li siguenti pàggini di catigurìi esìstunu, però nudda autra pàggina o catigurìa nni fa' usu.",
        "notargettitle": "Nudda distinazzioni",
        "notargettext": "Nun spicificasti na pàggina o puru n'utenti comu distinazzioni di st'opirazzioni.",
        "booksources-search-legend": "Ricerca di fonti libbrarî",
        "booksources-isbn": "Còdici ISBN:",
        "booksources-search": "Va cerca",
-       "booksources-text": "Ccassutta cc'è n'elencu di lijami versu autri siti ca vìnninu libbra novi e usati, e ponnu aviri majuri nfurmazzioni a' prupòsitu dî libbra ca stai circannu:",
+       "booksources-text": "Ccassutta c'è n'elencu di lijami versu àutri siti ca vìnninu libbra novi e usati, e ponnu aviri maiuri nfurmazzioni a prupòsitu dî libbra ca stai circannu:",
        "booksources-invalid-isbn": "Lu còdici ISBN chi' spicificasti nun pari bonu; cuntrolla si' nun cci furu sbagghî di ricupiatura.",
        "specialloguserlabel": "Fattu di l'utenti:",
-       "speciallogtitlelabel": "Oggettu (tìtulu o utenti):",
+       "speciallogtitlelabel": "Oggettu (tìtulu o {{ns:user}}:nomuutenti):",
        "log": "Riggistra",
        "all-logs-page": "Tutti li riggistra pubblici",
        "alllogstext": "Prisintazzioni cumminata di tutti li riggistra dispunìbbili di {{SITENAME}}.\nPoi ristrìnciri la visuali silizziunannu nu tipu di riggistru, l'utenti ca fici l'azzioni (cuntunu majusculi e minusculi), o la pàggina ntirissata (cuntunu majusculi e minusculi puru).",
        "deletedcontributions": "Cuntribbuta di l'utenti cancillati",
        "deletedcontributions-title": "Cuntribbuta di l'utenti cancillati",
        "sp-deletedcontributions-contribs": "cuntribbuta",
-       "linksearch": "Risciduta dî lijami di fora",
+       "linksearch": "Arricerca dî lijami di fora",
        "linksearch-pat": "Esprissioni di risciduta:",
        "linksearch-ns": "Namespace:",
-       "linksearch-ok": "Arriscedi",
-       "linksearch-text": "Si ponnu adupirari li caràttiri matta, ad esempiu \"*.wikipedia.org\".\nCci voli almenu nu duminiu di primu liveddu, ad esempiu \"*.org\".<br />\n{{PLURAL:$2|Protucollu suppurtatu|Protucolli suppurtati}}: <code>$1</code> (è pridifinutu http:// si' nun si nni spicìfica)",
+       "linksearch-ok": "Arricerca",
+       "linksearch-text": "Si ponnu adupirari li caràttiri matta, ad esempiu \"*.wikipedia.org\".\nCci voli almenu nu duminiu di primu liveddu, ad esempiu \"*.org\".<br />\n{{PLURAL:$2|Protucollu suppurtatu|Protucolli suppurtati}}: $1 (è pridifinutu http:// si' nun si nni spicìfica)",
        "linksearch-line": "$1 è culligatu dâ pàggina $2",
        "linksearch-error": "Li caràttiri matta ponnu appariri sulu ô principiu dû nomu host.",
        "listusersfrom": "Ammustra l'utenti a' pàrtiri di:",
        "post-expand-template-inclusion-category-desc": "La grannizza di sta pàggina passa <code>$wgMaxArticleSize</code> appressu a' l'espansioni di tutti li template, dunca certi template nun furu espannuti.",
        "post-expand-template-argument-category-desc": "Sta pàggina veni cchiu' granni di <code>$wgMaxArticleSize</code> appressu chi' s'espànni l'argumentu dûn template (quarchi' cosa nta parèntisi graffi tripli, comu <code>{{{Pippu}}}</code>).",
        "expensive-parserfunction-category-desc": "Sta pàggina adòpira troppi funzioni di l'analizzaturi sintatticu custusi (comu <code>#ifexist</code>). Talìa [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Sta pàggina cunteni nu lijami a' file ruttu (nu lijami pi' ncurpurari nu file chi' nun esisti).",
-       "hidden-category-category-desc": "Sta catigurìa cunteni <code><nowiki>__HIDDENCAT__</nowiki></code> ntô corpu dâ so pàggina, cosa chi' nâ fa' spuntari comu mpustazzioni pridifinuta dintra dû riquatru dî lijami ê catigurìi ntê pàggini.",
+       "broken-file-category-desc": "Sta pàggina cunteni nu lijami a file ruttu (nu lijami pi ncurpurari nu file chi nun esisti).",
+       "hidden-category-category-desc": "Sta catigurìa cunteni <code><nowiki>__HIDDENCAT__</nowiki></code> ntô corpu dâ sò pàggina, cosa chi nun la fa spuntari comu mpustazzioni pridifinuta dintra dû riquatru dî lijami ê catigurìi ntê pàggini.",
        "trackingcategories-nodesc": "Nudda discrizzioni dispunìbbili.",
        "trackingcategories-disabled": "Sta catigurìa è disattivata",
        "mailnologin": "Nuddu nnirizzu pi' mannari",
        "emailuser": "Manna nu missaggiu di posta elittrònica a' st'utenti",
        "emailuser-title-target": "Mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}",
        "emailuser-title-notarget": "Mannari nu missaggiu di posta elittrònica a' n'utenti",
-       "emailpage": "Mannari nu missaggiu di posta elittrònica a' l'utenti",
        "emailpagetext": "Poi adupirari lu mòdulu ccassutta pi' mannari nu missaggiu di posta elittrònica a' {{GENDER:$1|stu utenti|sta utenti}}.\nLu nnirizzu di posta elittrònica ca mittisti ntê [[Special:Preferences|prifirenzi dû to utenti]] và a' cumpàriri comu mittenti dû missaggiu, di manera ca lu distinatariu ti pò arrispùnniri dirittamenti.",
        "defemailsubject": "Missaggiu di {{SITENAME}} di l'utenti \"$1\"",
        "usermaildisabled": "Missaggi di posta elittrònica a' l'utenti disattivati",
        "emailccsubject": "Copia dû missaggiu ca mannasti a' $1: $2",
        "emailsent": "Missaggiu di posta elittrònica mannatu",
        "emailsenttext": "Lu to missaggiu di posta elittrònica fu' mannatu.",
-       "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 pi' menzu dâ funzioni \"{{int:emailpage}}\" supra a' {{SITENAME}}.",
+       "emailuserfooter": "Stu missaggiu fu' mannatu di $1 a' $2 pi' menzu dâ funzioni \"{{int:emailuser}}\" supra a' {{SITENAME}}.",
        "usermessage-summary": "Lassatu nu missaggiu di sistema.",
        "usermessage-editor": "Missaggeri di sistema",
        "watchlist": "Lista taliata",
        "watchlistanontext": "Pi' vìdiri e canciari li vuci dâ to lista taliata hâ' tràsiri.",
        "watchnologin": "Nun hai trasutu",
        "addwatch": "Agghiunci â lista taliata",
-       "addedwatchtext": "La pàggina \"[[:$1]]\" fu' agghiunciuta â to [[Special:Watchlist|lista taliata]].\nI canciamenti futuri a' sta pàggina e â so pàggina di discussioni venirannu elincati cca.",
+       "addedwatchtext": "La pàggina «[[:$1]]» e la sò pàggina di discussioni foru agghiunciuti â tò [[Special:Watchlist|lista taliata]].",
        "addedwatchtext-short": "La pàggina \"$1\" fu' agghiunciuta â to lista taliata.",
        "removewatch": "Leva dâ lista taliata",
-       "removedwatchtext": "La pàggina \"[[:$1]]\" fu' livata dâ [[Special:Watchlist|to lista taliata]].",
+       "removedwatchtext": "La pàggina «[[:$1]]» e la sò pàggina di discussioni foru livati dâ tò [[Special:Watchlist|lista taliata]].",
        "removedwatchtext-short": "La pàggina \"$1\" fu' livata dâ to lista taliata.",
        "watch": "Talìa",
        "watchthispage": "Talìa sta pàggina",
        "changecontentmodel-title-label": "Tìtulu dâ pàggina",
        "changecontentmodel-model-label": "Mudellu dû cuntinutu novu",
        "changecontentmodel-reason-label": "Mutivu:",
-       "changecontentmodel-success-title": "Lu mudellu dû cuntinutu fu’ canciatu",
-       "changecontentmodel-success-text": "Lu tipu dû cuntinutu di [[:$1]] fu’ canciatu.",
-       "changecontentmodel-cannot-convert": "Nun si po’ cunvèrtiri lu cuntinutu di [[:$1]] ntô tipu $2.",
-       "changecontentmodel-title-cantexist": "Nun si po’ mèttiri na pàggina nta $1.",
-       "changecontentmodel-nodirectediting": "Lu mudellu dû cuntinutu $1 nun cunsenti lu canciamentu direttu.",
+       "changecontentmodel-success-title": "Lu mudellu dû cuntinutu fu canciatu",
+       "changecontentmodel-success-text": "Lu tipu dû cuntinutu di [[:$1]] fu canciatu.",
+       "changecontentmodel-cannot-convert": "Nun si pò cummèrtiri lu cuntinutu di [[:$1]] ntô tipu $2.",
+       "changecontentmodel-nodirectediting": "Lu mudellu dû cuntinutu $1 nun cunzenti lu canciamentu direttu.",
        "log-name-contentmodel": "Riggistru dî canciamenti ô mudellu dû cuntinutu",
-       "log-description-contentmodel": "Eventi ca riguàrdunu lu mudellu dû cuntinutu di na pàggina",
-       "logentry-contentmodel-change": "$1 {{GENDER:$2|canciàu}} lu mudellu dû cuntinutu dâ pàggina $3 di «$4» a’ «$5»",
+       "log-description-contentmodel": "Eventi c'arriguàrdanu lu mudellu dû cuntinutu di na pàggina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|canciau}} lu mudellu dû cuntinutu dâ pàggina $3 di «$4» a’ «$5»",
        "logentry-contentmodel-change-revertlink": "annulla",
        "logentry-contentmodel-change-revert": "annullamentu",
        "protectlogpage": "Riggistru dî prutizzioni",
        "protect-locked-blocked": "Nun si ponnu canciari li livedda di prutizzioni quannu unu è bluccatu.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
        "protect-locked-dblock": "Nun si ponnu canciari li livedda di prutizzioni picchì cc'è attivatu un bloccu dâ basi di dati.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
        "protect-locked-access": "Lu to cuntu nun havi lu pirmissu di canciari li livedda di prutizzioni.\nCca cci su' li mpustazzioni attuali dâ pàggina <strong>$1</strong>:",
-       "protect-cascadeon": "Com'ad ora sta pàggina è prutetta picchi' veni nclusa {{PLURAL:$1|ntâ pàggina innicata di sèquitu, supra â quali|ntê pàggini innicati di sèquitu, supra ê quali}} è attivata la prutizzioni a' cascata.\nI canciamenti fatti ô liveddu di prutizzioni di sta pàggina nun vannu a' canciari la prutizzioni a' cascata.",
+       "protect-cascadeon": "Com'a ora sta pàggina è prutetta pirchì veni nclusa {{PLURAL:$1|ntâ pàggina siquenti, ca havi|ntê pàggini siquenti, ca hannu}} la prutizzioni a cascata attivata.\nLi canciamenti ca si fannu ô liveddu di prutizzioni di sta pàggina nun vannu a canciari la prutizzioni a cascata.",
        "protect-default": "Cunsenti a' tutti l'utenti",
        "protect-fallback": "Cunsenti sulu a' l'utenti cû pirmissu \"$1\"",
        "protect-level-autoconfirmed": "Cunsenti sulu a' l'utenti autu-cunfirmati",
        "undeletepagetext": "{{PLURAL:$1|La siguenti pàggina fu' cancillata|Li siguenti $1 pàggini foru cancillati}}, però {{PLURAL:$1|è|sunnu}} ancora nta l'archiviu e pi' chistu si {{PLURAL:$1|po|ponnu}} ancora ricupirari.\nPiriudicamenti l'archìviu po' vèniri svacantatu.",
        "undelete-fieldset-title": "Ricùpira virsioni",
        "undeleteextrahelp": "Pi' ricupirari la storia sana dâ pàggina, cliccari <strong><em>{{int:undeletebtn}}</em></strong> senza scegghîri nudda casedda.\nPi' fari nu ricùpiru silittivu, scegghîri li caseddi currispunnenti ê virsioni di ripigghiari, e cliccari <strong><em>{{int:undeletebtn}}</em></strong>.",
-       "undeleterevisions": "$1 {{PLURAL:$1|virsioni|virsioni}} nta l'archiviu",
+       "undeleterevisions": "$1 {{PLURAL:$1|virsioni}} cancillati",
        "undeletehistory": "Siddu ricùpiri sta pàggina, tutti li so virsioni vèninu ricupirati ntâ crunuluggìa.\nSiddu na pàggina nova havi statu criata cû stissu tìtulu di chidda di ricupirari doppu dâ so cancillazzioni, li virsioni ricupirati vannu a' finiri ntâ crunuluggìa passata.",
        "undeleterevdel": "Lu ricùpiru nun veni fattu siddu pròvuca la cancillazzioni parziali dâ virsioni currenti dâ pàggina o dû file.\nNta stu casu, hai a' livari lu signu di spunta o l'ammucciamentu dâ virsioni cancillata cchiu' ricenti.",
        "undeletehistorynoadmin": "Sta pàggina fu' cancillata.\nLu mutivu dâ cancillazzioni è ammustratu ccà sutta, nzèmmula ê dittagghî di l'utenti ca canciaru sta pàggina prima dâ so cancillazzioni.\nLu testu cuntinutu ntê virsioni cancillati è dispunìbbili sulu a' l'amministratura.",
        "undelete-revision": "Virsioni cancillata di $1 (dû $4 ê $5) di $3:",
-       "undeleterevision-missing": "Virsioni nun vàlida o mancanti.\nPo' èssiri chi' hai na lijami sbagghiata, o puru la virsioni hâ statu già ricupirata o livata di l'archiviu.",
+       "undeleterevision-missing": "Virsioni nun vàlida o ammancanti.\nPò èssiri chi hai na lijami sbagghiata, o puru la virsioni fu già ricupirata o livata di l'archiviu.",
        "undelete-nodiff": "Nun fu attruvata nudda virsioni passata.",
        "undeletebtn": "Ricùpira",
        "undeletelink": "talìa/ricùpira",
        "sp-contributions-username": "Nnirizzu IP o nomu utenti:",
        "sp-contributions-toponly": "Ammustra sulu li canciamenti ca sunnu l'ùrtimi virsioni pâ pàggina",
        "sp-contributions-newonly": "Ammustra sulu li canciamenti ca sunnu criazzioni di pàggini novi",
-       "sp-contributions-submit": "Risciduta",
+       "sp-contributions-submit": "Arricerca",
        "whatlinkshere": "Chi' punta cca",
        "whatlinkshere-title": "Pàggini ca pùntanu a \"$1\"",
        "whatlinkshere-page": "Pàggina:",
        "whatlinkshere-hideredirs": "$1 li rimanni",
        "whatlinkshere-hidetrans": "$1 li trasclusioni",
        "whatlinkshere-hidelinks": "$1 li lijami",
-       "whatlinkshere-hideimages": "$1 li lijami a' file",
+       "whatlinkshere-hideimages": "$1 li lijami a file",
        "whatlinkshere-filters": "Filtri",
        "autoblockid": "Bloccu autumàticu #$1",
        "block": "Bluccari a' n'utenti",
        "blocklist-by": "Amministraturi chi' bluccau",
        "blocklist-params": "Paràmitri dû bloccu",
        "blocklist-reason": "Mutivu",
-       "ipblocklist-submit": "Risciduta",
+       "ipblocklist-submit": "Arricerca",
        "ipblocklist-localblock": "Bloccu lucali",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Autru bloccu|Autri blocchi}}",
        "infiniteblock": "infinitu",
        "blocklog-showsuppresslog": "St'utenti havi statu bluccatu e ammucciatu ntô passatu.\nComu rifirimentu ccassutta cc'è lu riggistru dî supprissioni:",
        "blocklogentry": "hà bluccatu [[$1]]; scadenza $2 $3",
        "reblock-logentry": "Canciau li mpustazzioni dû bloccu pi [[$1]] cu na scadenza di $2 $3",
-       "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu di l'utenti.\nLi nnirizzi IP bluccati autumaticamenti nun sunnu alincati.\nCunzurtari l'[[Special:BlockList|alencu dî blocchi]] pi' vìdiri li furbanna e' li blocchi chi' sunnu 'n viguri pi' com'ora.",
+       "blocklogtext": "Chistu è l'alencu di l'azzioni di bloccu e sbloccu di l'utenti.\nLi nnirizzi IP bluccati autumaticamenti nun sunnu alincati.\nCunzurtari l'[[Special:BlockList|alencu dî blocchi]] pi vìdiri li furbanna e li blocchi chi sunnu n viguri pi com'ora.",
        "unblocklogentry": "sbluccau a' \"$1\"",
        "block-log-flags-anononly": "sulu utenti anònimi",
        "block-log-flags-nocreate": "criazzioni account bluccata",
        "move-over-sharedrepo": "== U file già esisti ==\n[[:$1]] già esisti ntôn dipòsitu cunnivisu. Spustari nu file nta chistu titulu suprascriviravi u file cunnivisu.",
        "file-exists-sharedrepo": "U nomu di file scigghiutu già è adupiratu ntôn dipòsitu cunnivisu.\nPi' favuri scegghî n'autru nomu.",
        "export": "Esporta pàggini",
-       "exporttext": "È pussìbbili espurtari lu testu e la cronoluggìa dî canciamenti di na pàggina o d'un gruppu di pàggini n furmatu XML pi mpurtàrili n àutri siti ca utilìzzanu lu software MediaWiki, attraversu la pàggina [[Special:Import|d'importu]].\n\nP'espurtari li pàggini innicari li tìtuli ntâ casella di testu suttastanti, unu pi riga, e spicificari siddu s'addisìa attèniri la virsioni currenti e tutti li virsioni pricidenti, cu li dati dâ cronoluggìa dâ pàggina, oppuru surtantu l'ùrtima virsioni e li dati currispunnenti a l'ùrtimu canciamentu.\n\nNta st'ùrtimu casu si pò macari utilizzari na lijami, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] p'espurtari \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exporttext": "È pussìbbili spurtari lu testu e la cronoluggìa dî canciamenti di na pàggina o d'un gruppu di pàggini n furmatu XML pi mpurtàrili n àutri siti ca utilìzzanu lu software MediaWiki, attraversu la pàggina [[Special:Import|di mportu]].\n\nPi spurtari li pàggini innicari li tìtuli ntâ casella di testu suttastanti, unu pi riga, e spicificari siddu s'addisìa ottèniri la virsioni currenti e tutti li virsioni pricidenti, cu li dati dâ cronuluggìa dâ pàggina, oppuru surtantu l'ùrtima virsioni e li dati currispunnenti a l'ùrtimu canciamentu.\n\nNta st'ùrtimu casu si pò macari utilizzari na lijami, p'asempiu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pi spurtari \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Esporta tutti i pàggini",
        "exportcuronly": "Ncludi sulu la rivisioni attuali, nun la ntera cronoluggìa",
        "exportnohistory": "---- '''Nota:''' l'espurtazzioni dâ ntera cronoluggìa dî pàggini attraversu sta nterfaccia hà stata disattivata pi mutivi ligati a li pristazzioni dû sistema.",
        "import-invalid-interwiki": "E' mpussìbbili mpurtari dû pruggettu wiki nnicatu.",
        "import-error-edit": "A pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di canciàrila.",
        "import-error-create": "La pàggina \"$1\" nun fu' mpurtata picchì nun hai u pirmissu di criàrila.",
-       "import-error-interwiki": "La pàggina \"$1\" nun fu' mpurtata picchì lu so nomu è risirvatu pî lijami di fora (inter-wiki).",
+       "import-error-interwiki": "La pàggina \"$1\" nun fu mpurtata picchì lu sò nomu è risirvatu pî lijami di fora (inter-wiki).",
        "import-error-special": "A pàggina \"$1\" nun fu' mpurtata picchì apparteni a' nu namespace spiciali chi' nun cunsenti pàggini.",
        "import-error-invalid": "A pàggina \"$1\" nun fu' mpurtata picchì u nomu unni sarrìa mpurtata nun è vàlidu supra a' sta wiki.",
        "import-error-unserialize": "A virsioni $2 dâ pàggina \"$1\" nun si potti di-sirializzari. Era signatu chi' sta virsioni adupirava u mudellu di cuntinutu $3 sirializzatu comu $4.",
        "tooltip-ca-unwatch": "Leva sta pàggina dâ to lista taliata",
        "tooltip-search": "Cerca 'n {{SITENAME}}",
        "tooltip-search-go": "Vai a na pàggina cu chistu nomu esattu siddu asisti",
-       "tooltip-search-fulltext": "Arriscedi pàggini pi chistu testu",
+       "tooltip-search-fulltext": "Attrova pàggini pi stu testu",
        "tooltip-p-logo": "Pàggina principali",
        "tooltip-n-mainpage": "Vìsita la pàggina principali",
        "tooltip-n-mainpage-description": "Talìa la pàggina principali",
        "tooltip-ca-nstab-main": "Vidi l'artìculu",
        "tooltip-ca-nstab-user": "Vidi la pàggina utenti",
        "tooltip-ca-nstab-media": "Vidi la pàggina dû file multimidiali",
-       "tooltip-ca-nstab-special": "Chista è na pàggina spiciali, nun pò èssiri canciata",
+       "tooltip-ca-nstab-special": "Chista è na pàggina spiciali, e nun si pò canciari",
        "tooltip-ca-nstab-project": "Vidi la pàggina di sirvizziu",
        "tooltip-ca-nstab-image": "Vidi la pàggina dâ mmàggini",
        "tooltip-ca-nstab-mediawiki": "Vidi lu missaggiu di sistema",
        "spamprotectionmatch": "Lu nostru filtru anti-spam hà ndividuatu lu testu siquenti: $1",
        "spambot_username": "MediaWiki - sistema di rimuzzioni spam",
        "spam_reverting": "Ripristinata l'ùrtima virsioni priva di lijami versu $1",
-       "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìunu lijami versu $1",
-       "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìunu lijami versu $1",
-       "simpleantispam-label": "Cuntrollu anti spam.\n<strong>NUN</strong> jìnchiri stu campu!",
+       "spam_blanking": "Pàggina svacantata, tutti li virsioni cuntinìanu lijami versu $1",
+       "spam_deleting": "Pàggina cancillata, tutti li virsioni cuntinìanu lijami versu $1",
+       "simpleantispam-label": "Cuntrollu anti-spam.\n<strong>NUN JÌNCHIRI</strong> stu campu!",
        "pageinfo-title": "Nfurmazzioni supra a' \"$1\"",
        "pageinfo-not-current": "Sfurtunatamenti, nun è pussìbbili furnìri sti nfurmazzioni pî virsioni vecchî.",
        "pageinfo-header-basic": "Nfurmazzioni essinziali",
        "pageinfo-robot-index": "Cunsintuta",
        "pageinfo-robot-noindex": "Pruibbuta",
        "pageinfo-watchers": "Quanti talìunu sta pàggina",
-       "pageinfo-visiting-watchers": "Nùmmiru d’utenti ntirissati a’ sta pàggina ca talìunu li canciamenti cchiu’ ricenti",
+       "pageinfo-visiting-watchers": "Nùmmiru d'utenti ntirissati a sta pàggina ca hannu taliatu li canciamenti chiù ricenti",
        "pageinfo-few-watchers": "Cchiu' picca di $1 {{PLURAL:$1|taliaturi|taliatura}}",
-       "pageinfo-few-visiting-watchers": "Forsi cc’è quarchi utenti ntirissatu ca talìa li canciamenti ricenti, forsi no",
+       "pageinfo-few-visiting-watchers": "Forsi c'è quarchi utenti ntirissatu ca talìa li canciamenti ricenti, forsi no",
        "pageinfo-redirects-name": "Nùmmiru di rimanni a' sta pàggina",
        "pageinfo-subpages-name": "Nùmmiru di suttapàggini di sta pàggina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|chi' è un rimannu|chi' su' rimanni}}; $3 {{PLURAL:$3|chi' nun è un rimannu|chi' nun su' rimanni}})",
        "saturday-at": "Sàbbatu ê $1",
        "sunday-at": "Dumìnica ê $1",
        "yesterday-at": "Ajeri ê $1",
-       "bad_image_list": "Lu furmatu è lu siguenti:\n\nSu' pigghiati a' cunsiddirazzioni sulu li vuci d'elenchi puntati (li righi ca accumènzanu cû sìmmulu *).\nLa prima lijami nta ogni' riga havi a' puntari ôn file nun addisiatu.\nSi' cci su' autri lijami ntâ stissa riga, su' cunsiddirati comu eccizzioni, vali a' diri pàggini unni lu file po' èssiri ncurpuratu.",
+       "bad_image_list": "Lu furmatu è lu siguenti:\n\nSù pigghiati a cunziddirazzioni sulu li vuci d'elenchi puntati (li righi c'accumènzanu cû sìmmulu *).\nLa prima lijami nta ogni riga havi a puntari ôn file nun addisiatu.\nSi ci sù àutri lijami ntâ stissa riga, sù cunziddirati comu eccizzioni, vali a diri pàggini unni lu file pò èssiri ncurpuratu.",
        "metadata": "Metadati",
        "metadata-help": "Stu file cunteni autri nfurmazzioni, prubbabbirmenti agghiunciuti dâ màchina futugràfica o dû scanner adupirati pi' criàrilu o diggitalizzàrilu.\nSiddu lu file hâ statu canciatu dâ so cunnizzioni origginali, certi dittagghî putìssiru nun currispùnniri ô statu novu dû file.",
        "metadata-expand": "Ammustra li nfurmazzioni dittagghiati",
        "exif-originaldocumentid": "Idintificaturi unìvucu dû ducumentu origginali",
        "exif-licenseurl": "URL dâ licenza di drittu d'auturi",
        "exif-morepermissionsurl": "Nfurmazzioni pâ cuncissioni di autri licenzi",
-       "exif-attributionurl": "Quannu si fa' usu di st'òpira, si prega di mèttiri na lijami versu",
+       "exif-attributionurl": "Quannu si fa usu di st'òpira, si prega di mèttiri na lijami versu",
        "exif-preferredattributionname": "Quannu si fa' usu di st'òpira, si prega di attribuìrinni a patirnità a'",
        "exif-pngfilecomment": "Cummentu dû file PNG",
        "exif-disclaimer": "Dichiarazzioni di esclusioni di rispunsabbilità",
        "monthsall": "tutti",
        "confirmemail": "Cunfirma dû nnirizzu di posta elittrònica",
        "confirmemail_noemail": "Nun hà statu ndicatu un ndirizzu e-mail vàlidu ntê propi [[Special:Preferences|prifirenzi]].",
-       "confirmemail_text": "{{SITENAME}} dumanna la cunvàlida dû to nnirizzu di posta elittrònica pi' putìri adupirari li funziunalità assuciati.\nCalca lu buttuni ccassutta pi' mannari nu missaggiu e-mail di cunfirma a lu to nnirizzu.\nNtô missaggiu cci sarravi na lijami cuntinenti un còdici;\ncàrrica dda lijami cu lu to browser pi' cunfirmari ca lu to nnirizzu di posta elittrònica è vàlidu.",
+       "confirmemail_text": "{{SITENAME}} addumanna la cunvàlida dû tò nnirizzu di posta elittrònica pi putìri adupirari li funziunalità assuciati.\nCarca lu buttuni ccassutta pi mannari nu missaggiu e-mail di cunferma a lu tò nnirizzu.\nNtô missaggiu c'è na lijami ca cunteni un còdici;\ncàrrica dda lijami cô tò browser pi cunfirmari ca lu tò nnirizzu di posta elittrònica è vàlidu.",
        "confirmemail_pending": "Già nu còdici di cunfirma t'havi statu mannatu via posta elittrònica;\nsiddu hai criatu lu to cuntu di picca tempu, è mègghiu ch'aspètti l'arrivu dû còdici pi' quarchi minutu prima di pruvari a' addumannàrinni unu novu.",
        "confirmemail_send": "Manna un còdici di cunfirma via e-mail",
        "confirmemail_sent": "Missaggiu e-mail di cunfirma mannatu.",
        "confirmemail_success": "Lu ndirizzu e-mail è cunfirmatu. Ora è pussìbbili esèquiri l'accessu e fari chinu usu dû situ.",
        "confirmemail_loggedin": "Lu tò nnirizzu email fu ora cunfirmatu.",
        "confirmemail_subject": "Cunfirma dû nnirizzu di posta elittronica pi' {{SITENAME}}",
-       "confirmemail_body": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nriggistràu un cuntu \"$2\" cu stu nnirizzu di posta elittrònica supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari li funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
-       "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciàu u nnirizzu di posta elittrònica dû cuntu \"$2\" supra a' {{SITENAME}} mpustannulu a' chistu.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari n'autra vota i funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
-       "confirmemail_body_set": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nmpustàu stu nnirizzu di posta elittrònica pû cuntu \"$2\" supra a' {{SITENAME}}.\n\nPi' cunfirmari ca stu cuntu apparteni pi' davera a' tia,\ne attivari li funziunalità di posta elittrònica supra a' {{SITENAME}},\napri sta lijami cû to browser:\n\n$3\n\nSi' nveci stu cuntu *nun t'apparteni*, clicca sta lijami\npi' nigari la cunfirma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunfirma scadi û $4.",
+       "confirmemail_body": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nriggistrau un cuntu \"$2\" cu stu nnirizzu di posta elittrònica supra a {{SITENAME}}.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
+       "confirmemail_body_changed": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\ncanciau lu nnirizzu di posta elittrònica dû cuntu \"$2\" supra a {{SITENAME}} mpustànnulu a chistu.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari n'àutra vota li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
+       "confirmemail_body_set": "Quarchidunu, prubbabbilmenti tu stissu, dû nnirizzu IP $1,\nmpustau stu nnirizzu di posta elittrònica pû cuntu \"$2\" supra a {{SITENAME}}.\n\nPi cunfirmari ca stu cuntu apparteni pi daveru a tìa,\ne attivari li funziunalità di posta elittrònica supra a {{SITENAME}},\ngrapi sta lijami cû tò browser:\n\n$3\n\nSi mmeci stu cuntu *nun t'apparteni*, clicca sta lijami\npi nigari la cunferma dû nnirizzu di posta elittrònica:\n\n$5\n\nStu còdici di cunferma scadi lu $4.",
        "confirmemail_invalidated": "Cunvàlida dû nnirizzu di posta elittronica nigata",
        "invalidateemail": "Nigazzioni dâ cunvàlida dâ posta elittrònica",
        "scarytranscludedisabled": "[La nchiusioni di pàggini tra siti wiki nun è attiva]",
        "specialpages-group-developer": "Stigghi dû sviluppaturi",
        "blankpage": "Pàggina vacanti",
        "intentionallyblankpage": "Sta pàggina è lassata vacanti apposta e è usata pi benchmark, ecc.",
-       "external_image_whitelist": " #Lassari sta riga pi' com'è ora, senza tuccàrila<pre>\n#Mèttiri li frammenti dî sprissioni rigulari (sulu la parti ca va' mmenzu ê //) ccassutta\n#Sarrannu cunfruntati cu l'URL dî mmàggini esterni (hotlinked)\n#Chiddi ca currispùnnunu sarrannu ammustrati comu mmàggini, pi' l'autri veniravi ammustrata sulu na lijami a' la mmàggini\n#Li righi ca accumencianu cu' # sunnu trattati comu cummenti\n#Nun cc'è diffirenza tra majusculi e minusculi\n\n#Mèttiri tutti li frammenti di sprissioni rigulari supra a' sta riga. Lassari sta riga pi' com'è ora, senza tuccàrila</pre>",
+       "external_image_whitelist": " #Lassari sta riga pi com'è ora, senza tuccàrila<pre>\n#Mèttiri li frammenti dî sprissioni rigulari (sulu la parti ca va ammenzu ê //) ccassutta\n#Sunnu cunfruntati cu l'URL dî mmàggini esterni (hotlinked)\n#Chiddi ca currispùnninu sunnu ammustrati comu mmàggini, pi l'àutri veni ammustrata sulu na lijami â mmàggini\n#Li righi ca accumènzanu cu # sunnu trattati comu cummenti\n#Nun c'è diffirenza tra maiùsculi e minùsculi\n\n#Mèttiri tutti li frammenti di sprissioni rigulari supra a sta riga. Lassari sta riga pi com'è ora, senza tuccàrila</pre>",
        "tags": "Etichetti dî canciamenti validi",
        "tag-filter": "Filtra pi' [[Special:Tags|etichetta]]",
        "tag-filter-submit": "Filtra",
        "htmlform-cloner-create": "Agghiunci autru",
        "htmlform-cloner-delete": "Leva",
        "htmlform-cloner-required": "Cci voli almenu nu valuri.",
+       "htmlform-title-badnamespace": "[[:$1]] nun sta ntô namespace «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» nun è lu tìtulu di na pàggina ca si pò criari",
+       "htmlform-title-not-exists": "[[:$1]] nun esisti.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nun esisti.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nun è vàlidu comu nomu utenti.",
        "sqlite-has-fts": "$1 cu' capacità di risciduta a' tuttu testu",
        "sqlite-no-fts": "$1 senza capacità di risciduta a' tuttu testu",
        "logentry-delete-delete": "$1 {{GENDER:$2|cancillau}} la pàggina $3",
        "logentry-newusers-create2": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1",
        "logentry-newusers-byemail": "U cuntu di l'utenti $3 fu' {{GENDER:$2|criatu}} di $1 e a password fu' mannata via posta elittrònica",
        "logentry-newusers-autocreate": "U cuntu di l'utenti $1 fu' {{GENDER:$2|criatu}} di manera autumàtica",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|spustau}} li mpustazzioni di prutizzioni di $4 a’ $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|canciau}} l'appartinenza di $3 dû gruppu $4 ô gruppu $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|canciau}} l'appartinenza a' gruppi di $3",
        "logentry-rights-autopromote": "$1 fu' {{GENDER:$2|prumuvutu|prumuvuta}} di manera autumatica di $4 a' $5",
        "feedback-thanks": "Grazzî! U to cummentu fu' affissu ntâ pàggina \"[$2 $1]\".",
        "feedback-thanks-title": "Ti ringrazziamu!",
        "feedback-useragent": "Aggenti di l'utenti:",
-       "searchsuggest-search": "Risciduta",
+       "searchsuggest-search": "Arricerca",
        "searchsuggest-containing": "chi' cunteni...",
        "api-error-badaccess-groups": "Nun hai u pirmissu di carricari file nta sta wiki.",
        "api-error-badtoken": "Erruri nternu: Token sbagghiatu",
        "special-characters-title-endash": "liniedda enni",
        "special-characters-title-emdash": "liniedda emmi",
        "special-characters-title-minus": "signu menu",
+       "mw-widgets-dateinput-no-date": "Nudda data scigghiuta",
        "mw-widgets-titleinput-description-new-page": "sta pàggina ancora nun esisti",
-       "mw-widgets-titleinput-description-redirect": "rimannu a $1"
+       "mw-widgets-titleinput-description-redirect": "rimannu a $1"
 }
index 6735a93..76ea3ff 100644 (file)
        "passwordreset": "Reset passwaird",
        "passwordreset-text-one": "Compleate this form tae receive ae temperie passwaird via wab-mail.",
        "passwordreset-text-many": "{{PLURAL:$1|Fill in yin o the fields tae receive ae temperie passwaird via wab-mail.}}",
-       "passwordreset-legend": "Reset passwaird",
        "passwordreset-disabled": "Passwaird resets hae been disabled oan this wiki.",
        "passwordreset-emaildisabled": "Wab-mail features hae been disabled oan this wiki.",
        "passwordreset-username": "Uisername:",
        "resettokens": "Reset tokens.",
        "resettokens-text": "Ye can reset tokens that permit ye access til certain private data associated wi yer accoont here.\n\nYe shid dae it gif ye accidentally shaired theim wi somebodie or gif yer accoont haes been compromised.",
        "resettokens-no-tokens": "Thaur ar nae tokens tae reset.",
-       "resettokens-legend": "Reset tokens.",
        "resettokens-tokens": "Tokens':",
        "resettokens-token-label": "$1 (value the nou: $2)",
        "resettokens-watchlist-token": "Token fer the wab feed (Atom/RSS) o [[Special:Watchlist|chynges til pages oan yer watchleet]]",
        "nmembers": "$1 {{PLURAL:$1|memmer|memmers}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|memmer|memmers}}",
        "nrevisions": "$1 {{PLURAL:$1|reveesion|reveesions}}",
-       "nviews": "$1 {{PLURAL:$1|luik|luiks}}",
        "nimagelinks": "Uised oan $1 {{PLURAL:$1|page|pages}}",
        "ntransclusions": "uised oan $1 {{PLURAL:$1|page|pages}}",
        "specialpage-empty": "Thaur's naw ootcomes fer this report.",
        "linksearch-pat": "Rake pattern:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Rake",
-       "linksearch-text": "Wildcairds like \"*.wikipedia.org\" can be uised.\nNeeds at least ae top-level domain, fer example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: <code>$1</code> (defaults to http:// gif naw protocol is speceefied).",
+       "linksearch-text": "Wildcairds like \"*.wikipedia.org\" can be uised.\nNeeds at least ae top-level domain, fer example \"*.org\".<br />\nSupported {{PLURAL:$2|protocol|protocols}}: $1 (defaults to http:// gif naw protocol is speceefied).",
        "linksearch-line": "$1 is airtit fae $2",
        "linksearch-error": "Wildcards micht appear yinlie at the stairt o the hoastname.",
        "listusersfrom": "Displey uisers stairtin at:",
        "emailuser": "E-mail this uiser",
        "emailuser-title-target": "Wab-mail this {{GENDER:$1|uiser}}",
        "emailuser-title-notarget": "Wab-mail uiser",
-       "emailpage": "Wab-mail uiser",
        "emailpagetext": "Ye can uise the form ablo tae send ae wab-mail message til this {{GENDER:$1|uiser}}.\nThe wab-mail address that ye entered in [[Special:Preferences|yer uiser preeferances]] will kith aes the \"Fae\" address o the wab-mail, sae that the receepient will be able tae replie directlie til ye.",
        "defemailsubject": "{{SITENAME}} wab-mail fae uiser \"$1\"",
        "usermaildisabled": "Uiser wab-mail disablit",
        "tooltip-pt-logout": "Log oot",
        "tooltip-pt-createaccount": "We encoorage ye tae creaute aen accoont n log in; houever, it's no strictllie nesisair",
        "tooltip-ca-talk": "Discussion aneat the content page",
-       "tooltip-ca-edit": "Ye can eedit this page. Please uise the luikower button afore hainin",
+       "tooltip-ca-edit": "Eedit this page",
        "tooltip-ca-addsection": "Stairt ae new section",
        "tooltip-ca-viewsource": "This page is protectit.\nYe can see its soorce",
        "tooltip-ca-history": "Bygane reveesions o this page",
        "spam_reverting": "Revertin til the laist reveesion na containin links til $1",
        "spam_blanking": "Aw reveesions contained links til $1, blankin",
        "spam_deleting": "Aw reveesions contained links til $1, delytin",
-       "simpleantispam-label": "Anti-spam check.\nDiv <strong>NAW</strong> ful this in!",
+       "simpleantispam-label": "Anti-spam check.\nDae <strong>nae</strong> fill this in!",
        "pageinfo-title": "Information fer \"$1\"",
        "pageinfo-not-current": "Sairrie, it's na possible tae provide this information fer auld reveesions.",
        "pageinfo-header-basic": "Baseec information",
index abe5406..e4a0b4e 100644 (file)
        "passwordreset": "Šennikufal yeeti",
        "passwordreset-text-one": "Takaddaa woo timmandi ka duu šiiyan šennikufal bataga ra.",
        "passwordreset-text-many": "{{PLURAL:$1|Faari foo toonandi ka duu šiiyan šennikufal foo bataga ra.}}",
-       "passwordreset-legend": "Šennikufal yeeti",
        "passwordreset-disabled": "Šennikufal yeetiyan n' ka kaŋ wikiyoo woo se.",
        "passwordreset-emaildisabled": "Bataga alhaaley n' ka kaŋ wikiyoo ga.",
        "passwordreset-username": "Goykaw maa:",
        "resettokens": "Tammaasawey yeeti",
        "resettokens-text": "War ga hin ka tammaasawey yeeti kaŋ ga too war ma hin ka dii sutura bayhaya tanayaŋ nda war kontoo ne.\n|nWar ga hima k'a tte nda war dere k'i noo boro waani se wala nda war ga šikka kaŋ boro waani n' ka huru kontoo ra.",
        "resettokens-no-tokens": "Tammaasa kul šii yeetiyan se.",
-       "resettokens-legend": "Tammaasawey yeeti",
        "resettokens-tokens": "Tammaasawey:",
        "resettokens-token-label": "$1 (sohõda hinna: $2)",
        "resettokens-watchlist-token": "Tammaasa interneti toonandiyanoo se (Atom/RSS) [[Special:Hawgayhayey|barmawey war hawgayhayey maašeedaa ga]]",
        "nmembers": "{{PLURAL:$1|kondayze}} $1",
        "nmemberschanged": "{{PLURAL:$2|kondayze}} $1 → $2 \\",
        "nrevisions": "{{PLURAL:$1|filla}} $1",
-       "nviews": "{{PLURAL:$1|gunari}} $1 \\",
        "nimagelinks": "Goyandi {{PLURAL:$1|moo}} ga",
        "ntransclusions": "goyandi {{PLURAL:$1|moo}} 1",
        "specialpage-empty": "Hunyan kulyaŋ ši bayrandiroo woo se.",
        "linksearch-pat": "Noone ceeci:",
        "linksearch-ns": "Maafarru:",
        "linksearch-ok": "Ceeci",
-       "linksearch-text": "Baytal tammaasawey sanda \"*.wikipedia.org\" ga hin ka goyandi.\nMa bara nda, nd'a jaase, beene-alkadar nungu, sanda \"*.org\".<br />\n{{PLURAL:$2|fondo|fondawey}}: <code>$1</code> (tilasu ra bere http:// ga nda fondo kul mana tabatandi).",
+       "linksearch-text": "Baytal tammaasawey sanda \"*.wikipedia.org\" ga hin ka goyandi.\nMa bara nda, nd'a jaase, beene-alkadar nungu, sanda \"*.org\".<br />\n{{PLURAL:$2|fondo|fondawey}}: $1 (tilasu ra bere http:// ga nda fondo kul mana tabatandi).",
        "linksearch-line": "$1 ga dobu $2 ga",
        "linksearch-error": "Baytal tammaasawey ga bangay zunbudoo maa šintinoo hinne ga.",
        "listusersfrom": "Goykey cebe kaŋ ga šintin ne:",
index 3de17ab..dc7ac9a 100644 (file)
@@ -9,59 +9,61 @@
                        "아라"
                ]
        },
-       "tog-underline": "Pabrauktė nūruodas:",
-       "tog-hideminor": "Pakavuotė mažus pataisėmus vielībūju taisīmu sārašė",
-       "tog-extendwatchlist": "Ėšpliestė keravuojamu sāraša, kū ruodītu vėsus tėnkamus pakeitėmus",
-       "tog-usenewrc": "Grupoutė keitėmus vielībūsiūs pakeitėmūs ė keravuojamu poslapiu sārašė",
-       "tog-numberheadings": "Autuomatėškā numeroutė skėrsnelios",
-       "tog-showtoolbar": "Ruodītė redagavėma rakondinė (JavaScript)",
-       "tog-editondblclick": "Poslapiu redagavėms dvėgobu paspaudėmu (JavaScript)",
-       "tog-editsectiononrightclick": "Ijongtė skėrsneliu redagavėma paspaudos skėrsnelė pavadėnėma<br />dešėniouju pelies klavėšu (JavaScript)",
-       "tog-watchcreations": "Pridietė poslapius, katrūs sokorio, i keravuojamu sāraša",
-       "tog-watchdefault": "Pridietė poslapius, katrūs taisau, i keravuojamu sāraša",
-       "tog-watchmoves": "Pridietė poslapius, katrūs parkelio, i keravuojamu sāraša",
-       "tog-watchdeletion": "Pridietė poslapius, katrūs ėštrino, i keravuojamu sāraša",
-       "tog-minordefault": "Palē nutīliejėma pažīmietė redagavėmus kāp mažus",
-       "tog-previewontop": "Ruodītė parvaiza vėrš redagavėma lauka",
-       "tog-previewonfirst": "Ruodītė straipsnė parvėiza pėrmu redagavėmu",
-       "tog-enotifwatchlistpages": "Siōstė mon gromata, kūmet pakeitams poslapis, katra stebiu",
+       "tog-underline": "Pabriežtė nūruodas:",
+       "tog-hideminor": "Pakavuotė mažus pataisėmus vielībūju keitėmu sārošė",
+       "tog-extendwatchlist": "Ėšpliestė keravuojamu sāroša, ka ruodītu ne tėktās vielībūsius pakeitėmus",
+       "tog-usenewrc": "Skėrstītė keitėmus vielībūsiūs pakeitėmūs ė keravuojamu poslapiu sārašė",
+       "tog-numberheadings": "Autuomatėškā numeroutė skėrsnelius",
+       "tog-showtoolbar": "Ruodītė keitėmu rakondėnė",
+       "tog-editondblclick": "Poslapiu keitėms kāp dosīk spaudi ont poslapė",
+       "tog-editsectiononrightclick": "Ijongtė skėrsneliu keitėma kāp paspaudi skėrsnelė pavadėnėma so dešėnio pelies mīgtoko",
+       "tog-watchcreations": "Pridietė poslapius, katrūs padėrbo, keravuojamu sārošap",
+       "tog-watchdefault": "Pridietė poslapius, katrūs keito, keravuojamu sārošap",
+       "tog-watchmoves": "Pridietė poslapius, katrūs parvadėno, keravuojamu sārošap",
+       "tog-watchdeletion": "Pridietė poslapius, katrūs ėštrėno, keravuojamu sārošap",
+       "tog-watchrollback": "Pridietė poslapius, katrūs keitėmus grōžėno atgal, keravuojamu sārošap",
+       "tog-minordefault": "Kāp prėgol pažīmietė pakeitėmus mažās",
+       "tog-previewontop": "Ruodītė parvaiza vėrš taisīmu lauka",
+       "tog-previewonfirst": "Ruodītė straipsnė parvėiza pėrmo keitėmo",
+       "tog-enotifwatchlistpages": "Siōstė mon gromata, kumet pakeitams poslapis, katron keravuojo",
        "tog-enotifusertalkpages": "Siōstė mon gromata, kūmet pakaitams mona nauduotuojė aptarėma poslapis",
-       "tog-enotifminoredits": "Siōstė mon gromata, kūmet poslapė keitėms īr mažos",
+       "tog-enotifminoredits": "Siōstė mon gromata, kumet poslapė keitėms īr mažos",
        "tog-enotifrevealaddr": "Ruodītė mona el. pašta adresa primėnėma gromatuos",
        "tog-shownumberswatching": "Ruodītė keravuojantiu nauduotuoju skatliu",
-       "tog-oldsig": "Esams parašos:",
+       "tog-oldsig": "Dabartėnis parašos:",
        "tog-fancysig": "Parašos kāp wiki tekstos (ba autuomatėniu nūruodu)",
-       "tog-uselivepreview": "Nauduotė tėisiogėne parvėiza (JavaScript) (Eksperimentėnis)",
+       "tog-uselivepreview": "Nauduotė vielība parveiza",
        "tog-forceeditsummary": "Klaustė, kumet palėiku toščē pakeitėma kuomentara",
-       "tog-watchlisthideown": "Kavuotė mona pakeitėmos keravuojamu sarašė",
-       "tog-watchlisthidebots": "Kavuotė robotu pakeitėmos keravuojamu sārašė",
-       "tog-watchlisthideminor": "Kavuotė mažos pakeitėmos keravuojamu sarašė",
-       "tog-watchlisthideliu": "Kavuotė prisėjongosium nauduotuojum keitėmus keravuojamu sārošė",
-       "tog-watchlisthideanons": "Kavuotė anonimėniu nauduotuoju keitėmus keravuojamu sarašė",
-       "tog-watchlisthidepatrolled": "Kavuotė parveizietos pakeitėmos keravuojamu sārašė",
-       "tog-ccmeonemails": "Siōstė mon gromatu kopėjės, katros siontiu kėtėims nauduotojams",
+       "tog-watchlisthideown": "Kavuotė mona pakeitėmus keravuojamu sārošė",
+       "tog-watchlisthidebots": "Kavuotė robotu pakeitėmos keravuojamu sārošė",
+       "tog-watchlisthideminor": "Kavuotė mažus pakeitėmus keravuojamu sārošė",
+       "tog-watchlisthideliu": "Kavuotė prėsėjongosiu nauduotuoju keitėmus keravuojamu sārošė",
+       "tog-watchlisthideanons": "Kavuotė anonimėniu nauduotuoju keitėmus keravuojamu sārošė",
+       "tog-watchlisthidepatrolled": "Kavuotė sodabuotus pakeitėmus keravuojamu sārošė",
+       "tog-ccmeonemails": "Siōstė monėi gromatu kuopėjės, katros siontio kėtėims nauduotuojams",
        "tog-diffonly": "Neruodītė poslapė torėnė puo skėrtomās",
        "tog-showhiddencats": "Ruodītė pakavuotas kateguorėjės",
        "tog-norollbackdiff": "Nekrēptė diemesė i skėrtoma atlėkus atmetėma",
-       "underline-always": "Visumet",
-       "underline-never": "Nikumet",
-       "underline-default": "Palē naršīklės nostatīmos",
+       "tog-useeditwarning": "Monėi dout žėnuot, kāp ėšēno ėš poslapė anon naėšsauguojis",
+       "underline-always": "Vėsūmet",
+       "underline-never": "Nikūmet",
+       "underline-default": "Vagol naršīklės nustatīmus",
        "editfont-style": "Redagavėma longa teksta stėlios:",
-       "editfont-default": "Palē naršīklės nostatīmos",
-       "sunday": "sekma dėina",
-       "monday": "pėrmadėinis",
-       "tuesday": "ontradėinis",
-       "wednesday": "trečiadėinis",
-       "thursday": "ketvėrtadėinis",
-       "friday": "pėnktadėinis",
-       "saturday": "subata",
-       "sun": "Sekm",
-       "mon": "Pėrm",
-       "tue": "Ontr",
-       "wed": "Treč",
+       "editfont-default": "Vagol naršīklės nustatīmus",
+       "sunday": "nedielės dėina",
+       "monday": "panedielis",
+       "tuesday": "oterninks",
+       "wednesday": "sereda",
+       "thursday": "ketvergs",
+       "friday": "pernīčė",
+       "saturday": "sobata",
+       "sun": "Ned",
+       "mon": "Pan",
+       "tue": "Oter",
+       "wed": "Sered",
        "thu": "Ketv",
-       "fri": "Pėnk",
-       "sat": "Sub",
+       "fri": "Pern",
+       "sat": "Sob",
        "january": "sausė",
        "february": "vasarė",
        "march": "kuova",
        "december-date": "Groudė $1",
        "pagecategories": "{{PLURAL:$1|Kateguorėjė|Kateguorėjės|Kateguorėju}}",
        "category_header": "Kateguorėjės „$1“ straipsnē",
-       "subcategories": "Subkateguorėjės",
+       "subcategories": "Pukateguorėjės",
        "category-media-header": "Abruozdielis kateguorėjuo „$1“",
-       "category-empty": "''Šėta kateguorėjė nūnā netor nė vėina straipsnė a faila.''",
-       "hidden-categories": "{{PLURAL:$1|Pakavuota kateguorėjė|Pakavuotas kateguorėjės}}",
+       "category-empty": "<em>Ton kateguorėjuo nūnā naprėgol anėjuokis poslapis aba abruozdielis.</em>",
+       "hidden-categories": "{{PLURAL:$1|Pakavuota kateguorėjė|Pakavuotas kateguorėjės|Pakavuotu kateguorėju}}",
        "hidden-category-category": "Pakavuotas kateguorėjės",
-       "category-subcat-count": "{{PLURAL:$2|Tuo kateguorėjuo īr vėina subkateguorėjė.|{{PLURAL:$1|Ruodoma|Ruodomas|Ruodoma}} $1 {{PLURAL:$1|subkateguorėjė|subkateguorėjės|subkateguorėju}} (ėš vėsa īr $2 {{PLURAL:$2|subkateguorėjė|subkateguorėjės|subkateguorėju}}).}}",
+       "category-subcat-count": "{{PLURAL:$2|Tuo kateguorėjuo ī vėina pukateguorėjė.|{{PLURAL:$1|Ruodoma|Ruodomas|Ruodomu}} $1 {{PLURAL:$1|pukateguorėjė|pukateguorėjės|pukateguorėju}} (ėš vėsa īr $2 {{PLURAL:$2|pukateguorėjė|pukateguorėjės|pukateguorėju}}).}}",
        "category-subcat-count-limited": "Tuo kateguorėjuo īr {{PLURAL:$1|subkateguorėjė|subkateguorėjės|subkateguorėju}}.",
-       "category-article-count": "{{PLURAL:$2|Tuo kateguorėjuo īr vėins poslapis.|{{PLURAL:$1|Ruodoms|Ruodomė|Ruodoma}} $1 tuos kateguorėjės {{PLURAL:$1|poslapis|poslapē|poslapiu}} (ėš vėsa kateguorėjuo īr $2 {{PLURAL:$2|poslapis|poslapē|poslapiu}}).}}",
+       "category-article-count": "{{PLURAL:$2|Tuo kateguorėjuo īr vėins poslapis.|{{PLURAL:$1|Ruodoms|Ruodomė|Ruodomu}} $1 tuos kateguorėjės {{PLURAL:$1|poslapis|poslapē|poslapiu}} (ėš vėsa kateguorėjuo īr $2 {{PLURAL:$2|poslapis|poslapē|poslapiu}}).}}",
        "category-article-count-limited": "{{PLURAL:$1|Ruodoms|Ruodomė|Ruodom}} $1 tuos kateguorėjės {{PLURAL:$1|poslapis|poslapē|poslapiu}}.",
        "category-file-count": "{{PLURAL:$2|Tuo kateguorėjuo īr vėins poslapis.|{{PLURAL:$1|Ruodoms|Ruodomė|Ruodoma}} $1 tuos kateguorėjės {{PLURAL:$1|fails|failā|failu}} (ėš vėsa kateguorėjuo īr $2 {{PLURAL:$2|poslapis|poslapē|poslapiu}}).}}",
        "category-file-count-limited": "{{PLURAL:$1|Ruodoms|Ruodomė|Ruodom}} $1 tuos kateguorėjės {{PLURAL:$1|fails|failā|failu}}.",
        "listingcontinuesabbrev": "tes.",
        "index-category": "Indeksoutė poslapē",
        "noindex-category": "Neindeksoutė poslapē",
-       "broken-file-category": "Poslapē, katrėi tor neteisingas nūruodas i failus",
+       "broken-file-category": "Poslapē, katrėi tor bluogas nūruodas abruozdieliūsp",
        "about": "Aple",
        "article": "Straipsnis",
        "newwindow": "(īr atverams naujam longė)",
-       "cancel": "Nutrauktė",
+       "cancel": "Pabengtė",
        "moredotdotdot": "Daugiau...",
-       "morenotlisted": "Tas sārošos užbengts nie.",
+       "morenotlisted": "Tas sārošos ožbengts nie.",
        "mypage": "Poslapis",
        "mytalk": "Aptarėms",
-       "anontalk": "Šėta IP aptarėms",
+       "anontalk": "Ton IP adresa aptarėms",
        "navigation": "Naršīms",
        "and": "&#32;ėr",
        "qbfind": "Ėiškuotė",
        "faq": "DOK",
        "faqpage": "Project:DOK",
        "actions": "Vēksmā",
-       "namespaces": "Vardū srėtīs",
-       "variants": "Variantā",
+       "namespaces": "Vardū srėtis",
+       "variants": "Atmainā",
        "navigation-heading": "Naršīma pasėrinkėmā",
        "errorpagetitle": "Klaida",
        "returnto": "Grīžtė i $1.",
        "searcharticle": "Ēk",
        "history": "Poslapė istuorėjė",
        "history_short": "Istuorėjė",
-       "updatedmarker": "atnaujėnta nu paskotėnė mona apsėlonkīma",
-       "printableversion": "Versėjė spausdintė",
-       "permalink": "Nulatėnė nūruoda",
-       "print": "Spausdėntė",
+       "updatedmarker": "pakeist nug tada, kāp lonkiaus paskotėni sīki",
+       "printableversion": "Atmains spausdėnėmō",
+       "permalink": "Nūlatėnė nūruoda",
+       "print": "Spausdintė",
        "view": "Veizietė",
-       "view-foreign": "Perveiziet $1",
+       "view-foreign": "Parveiziet $1",
        "edit": "Taisītė",
        "edit-local": "Taisītė vėitėni aprašīma",
-       "create": "Sokortė",
-       "create-local": "Prikergtė vėitėni aprašīma",
+       "create": "Padėrbtė",
+       "create-local": "Prėkergtė vėitėni aprašīma",
        "editthispage": "Taisītė ton poslapė",
-       "create-this-page": "Sokortė ta poslapi",
+       "create-this-page": "Dėrbtė ton poslapi",
        "delete": "Trintė",
        "deletethispage": "Trintė ton poslapė",
-       "undeletethispage": "Atkortė ta poslapi",
-       "undelete_short": "Atstatītė $1 {{PLURAL:$1:redagavėma|redagavėmus|redagavėmu}}",
+       "undeletethispage": "Ton poslapi padėrbtė apent",
+       "undelete_short": "Dėrbtė apent $1 {{PLURAL:$1:pakeitėma|pakeitėmus|pakeitėmu}}",
        "viewdeleted_short": "Veizietė $1 {{PLURAL:$1|ėštrinta keitėma|ėštrintus keitėmus|ėštrintū keitėmu}}",
-       "protect": "Ožrakintė",
+       "protect": "Apsergietė",
        "protect_change": "pakeistė",
-       "protectthispage": "Ožrakintė šėta poslapi",
-       "unprotect": "Keistė apsauga",
-       "unprotectthispage": "Keistė tuo poslapė apsauga",
+       "protectthispage": "Apsergietė ton poslapi",
+       "unprotect": "Keistė apsarga",
+       "unprotectthispage": "Keistė ton poslapė apsarga",
        "newpage": "Naus poslapis",
-       "talkpage": "Aptartė šėta poslapi",
+       "talkpage": "Aptartė ton poslapi",
        "talkpagelinktext": "Aptarėms",
-       "specialpage": "Specēlosis poslapis",
-       "personaltools": "Persuonalėnē rakondā",
+       "specialpage": "Specēlos poslapis",
+       "personaltools": "Asabėnē rakondā",
        "articlepage": "Veizietė straipsnė",
        "talk": "Aptarėms",
-       "views": "Parveizė",
+       "views": "Parveizė̄jėmā",
        "toolbox": "Rakondā",
-       "userpage": "Ruodītė nauduotoja poslapi",
+       "userpage": "Ruodītė nauduotuojė poslapi",
        "projectpage": "Ruodītė pruojekta poslapi",
        "imagepage": "Veizietė abruozdielė poslapi",
        "mediawikipage": "Ruodītė pranešėma poslapi",
        "templatepage": "Ruodītė šabluona poslapi",
-       "viewhelppage": "Ruodītė pagelbuos poslapi",
+       "viewhelppage": "Ruodītė pagelbas poslapi",
        "categorypage": "Ruodītė kateguorėjės poslapi",
        "viewtalkpage": "Ruodītė aptarėma poslapi",
        "otherlanguages": "Kėtuom kalbuom",
-       "redirectedfrom": "(Nokreipta ėš $1)",
-       "redirectpagesub": "Nokreipėma poslapis",
-       "redirectto": "Nukreipėms ont:",
-       "lastmodifiedat": "Šėts poslapis paskotini karta pakeists $1 $2.",
-       "viewcount": "Tas poslapis bova atverts $1 {{PLURAL:$1|čiesa|čiesus|čiesu}}.",
-       "protectedpage": "Ožrakints poslapis",
+       "redirectedfrom": "(Nusokta ėš $1)",
+       "redirectpagesub": "Nusokėma poslapis",
+       "redirectto": "Nusokėms ont:",
+       "lastmodifiedat": "Tas poslapis paskotini sīki parkeists $1 $2.",
+       "viewcount": "Tas poslapis bova atverts $1 {{PLURAL:$1|sīkis|sīkius|sīkiu}}.",
+       "protectedpage": "Apsergiets poslapis",
        "jumpto": "Paršuoktė i:",
-       "jumptonavigation": "navėgacėjė",
+       "jumptonavigation": "naršīms",
        "jumptosearch": "paėiška",
-       "view-pool-error": "Atsėprašuom, bat serverē daba īr perkrautė.\nNuognē pardaug nauduotoju skait ton poslapi.\nPrašuom palaukat ė mieginkat i ton poslapi patekt vieliau.\n\n$1",
+       "view-pool-error": "Atsėprašuom, bat serverē daba īr parkrautė.\nNuognē pardaug nauduotoju skait ton poslapi.\nPrašuom palaukat ė mieginkat i ton poslapi patekt apent.\n\n$1",
        "pool-errorunknown": "Nežėnuoma klaida",
        "aboutsite": "Aple {{SITENAME}}",
        "aboutpage": "Project:Aple",
-       "copyright": "Turinīs pateikts so $1 licencėjė.",
-       "copyrightpage": "{{ns:project}}:Autuoriu teisės",
-       "currentevents": "** Vielībė̅jė ivīkē **",
-       "currentevents-url": "Project:VielÄ«bÄ\97Ì\85\97 ivÄ«kÄ\93",
+       "copyright": "Turinīs pateikts so $1 lėcencėjė.",
+       "copyrightpage": "{{ns:project}}:Dėrbieju teisės",
+       "currentevents": "Vielībė̄jė notėkėmā",
+       "currentevents-url": "Project:VielÄ«bÄ\97Ì\84\97 notÄ\97\97\81",
        "disclaimers": "Atsakuomībės aprėbuojims",
        "disclaimerpage": "Project:Atsakuomībės aprėbuojims",
-       "edithelp": "Kāp redagoutė",
+       "edithelp": "Kāp dėrbtė",
+       "helppage-top-gethelp": "Pagelba",
        "mainpage": "Pėrms poslapis",
        "mainpage-description": "Pėrms poslapis",
        "policy-url": "Project:Puolitėka",
        "privacypage": "Project:Privatoma puolitėka",
        "badaccess": "Privėlėju klaida",
        "badaccess-group0": "Tomstā nelēdama ivīkdītė veiksma, katruo prašiet.",
+       "versionrequired": "Rēk $1 MediaWiki atmaina",
        "ok": "Gerā",
        "retrievedfrom": "Gautė ėš „$1“",
-       "youhavenewmessages": "Tamsta toret $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tamsta turėt}} $1 nū {{PLURAL:$3|kėta nauduotojė|$3 nauduotoju}} ($2).",
-       "youhavenewmessagesmanyusers": "Tamsta turėt $1 nū daug nauduotoju ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|naus pranešėms|999=naujė pranešėmā}}",
-       "newmessagesdifflinkplural": "paskiausis {{PLURAL:$1|pakeitėms|999=pakeitėmā}}",
-       "youhavenewmessagesmulti": "Toret naujū žėnotiu $1",
+       "youhavenewmessages": "{{PLURAL:$3|Tamstā parė̄jė}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tamstā parė̄jė}} $1 nug {{PLURAL:$3|kėta nauduotojė|$3 nauduotoju}} ($2).",
+       "youhavenewmessagesmanyusers": "Tamstā parė̄jė $1 nug gausoma nauduotoju ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|naujė žėnie|999=naujės žėnės}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|vielībs pakeitėms|999=vielībė pakeitėmā}}",
+       "youhavenewmessagesmulti": "Tamstā parė̄jė naujės žėnės tėnklapi $1",
        "editsection": "taisītė",
        "editold": "taisītė",
        "viewsourceold": "veizietė šaltėni",
-       "editlink": "keistė",
+       "editlink": "taisītė",
        "viewsourcelink": "veizietė kuoda",
        "editsectionhint": "Redagoutė skirsneli: $1",
        "toc": "Torėnīs",
        "showtoc": "ruodītė",
        "hidetoc": "kavuotė",
-       "collapsible-collapse": "Sugōžtė",
+       "collapsible-collapse": "Sogōžtė",
        "collapsible-expand": "Atsklēstė",
        "confirmable-confirm": "A tikslē tēp mīslėjat?",
        "confirmable-yes": "Tēp",
        "confirmable-no": "Ne",
-       "thisisdeleted": "Veizėtė a atkortė $1?",
-       "viewdeleted": "Ruodītė $1?",
-       "restorelink": "$1 {{PLURAL:$1|ėštrinta keitėma|ėštrintos keitėmos|ėštrintū keitėmu}}",
+       "thisisdeleted": "Veizietė aba dėrbtė apent $1?",
+       "viewdeleted": "Veizietė $1?",
+       "restorelink": "$1 {{PLURAL:$1|ėštrinta keitėma|ėštrintus keitėmus|ėštrintū keitėmu}}",
        "feedlinks": "Šaltėnis:",
        "site-rss-feed": "$1 RSS šaltėnis",
        "site-atom-feed": "$1 Atom šaltėnis",
        "nstab-user": "Nauduotuojė poslapis",
        "nstab-media": "Abruozdielė poslapis",
        "nstab-special": "Specēlos poslapis",
-       "nstab-project": "Proujekta poslapis",
-       "nstab-image": "Fails",
+       "nstab-project": "Aple tėnklapi",
+       "nstab-image": "Abruozdielis",
        "nstab-mediawiki": "Teksts",
        "nstab-template": "Šabluons",
        "nstab-help": "Pagelbuos poslapis",
        "nstab-category": "Kateguorėjė",
-       "nosuchaction": "Nier tuokė veiksma",
+       "nosuchaction": "Nier tuokė vēksma",
        "nosuchspecialpage": "Nier tuokė specēlėjė poslapė",
        "nospecialpagetext": "Tamsta prašiet nelaistėna specēlė̄jė poslapė, laistėnū specēliūju poslapiu sōraša rasėt [[Special:SpecialPages|specēliūju poslapiu sārošė]].",
        "error": "Klaida",
        "enterlockreason": "Iveskėt ožrakėnėma prižasti, tēpuogi kumet daugmaž bus atrokėnta",
        "readonlytext": "Doumenū bazė daba īr ožrakėnta naujėm irašam a kėtėm keitėmam,\nmažo doumenū bazės techninē pruofilaktėkā,\npuo tuo vėsks griš i sava viežes.\nOžrakėnusiuojo admėnėstratuoriaus pateikts rakėnima paaiškėnims: $1",
        "missing-article": "Doumenū bazė nerada poslapė teksta, katra ana torietu rastė, pavadėnta „$1“ $2.\n\nPaprastā tas būn dielē pasenosės skėrtoma vuo istuorėjės nūruodas i poslapi, katros bova ėštrėnts.\n\nJēgo tas nie šėts varėjants, Tamsta mažo raduot klaida pruogramėnė ironguo.\nPrašuom aple šėtā paskelbtė [[Special:ListUsers/sysop|adminėstratoriō]], nepamėršdamė nuruodītė nūruoda.",
-       "missingarticle-rev": "(versėjė#: $1)",
+       "missingarticle-rev": "(atmains nr. $1)",
        "missingarticle-diff": "(Skėrt.: $1, $2)",
        "readonly_lag": "Doumenū bazė bova autuomatėškā ožrakėnta, kuol pagelbinės doumenū bazės pasvīs pagrėndine",
        "internalerror": "Vėdėnė klaida",
        "internalerror_info": "Vėdėnė klaida: $1",
-       "filecopyerror": "Nepavīkst kopėjoutė faila ėš „$1“ i „$2“.",
-       "filerenameerror": "Nepavīkst parvardėntė faila ėš „$1“ i „$2“.",
+       "filecopyerror": "Naėšēn parkeltė abruozdielė nug „$1“ i „$2“.",
+       "filerenameerror": "Naėšēn parvadintė abruozdielė ėš „$1“ i „$2“.",
+       "filedeleteerror": "Naėšēn ėštrintė abruozdielė „$1“.",
        "filenotfound": "Nepavīkst rastė faila „$1“.",
        "unexpected": "Natėkieta raikšmie: „$1“=„$2“.",
        "cannotdelete": "Nepavīka ėštrintė nuruodīta poslapė a faila \"$1\". (Mažo kažkas padarė pėrmesnis šėta)",
        "badtitletext": "Nuruodīts poslapė pavadėnėms bova neleistėns, toščės a neteisėngā sojongts terpkalbinis a terppruojektėnis pavadėnėms. Anamė gal būtė vėins a daugiau sėmbuoliu, neleistėnū pavadėnėmūs",
        "perfcachedts": "Ruodoma ėšsauguota doumenū kopėjė, katra bova atnaujėnta $1. Daugiausē $4 {{PLURAL:$4|rezoltats|rezoltatā|rezoltatu}} īr sauguoma.",
        "querypage-no-updates": "Atnaujėnėmā tam poslapiō nūnā ėšjongtė īr. Doumenīs nūnā čė nebus atnaujėntė.",
-       "viewsource": "Veizėtė kuoda",
+       "viewsource": "Veizietė",
+       "viewsource-title": "Veizietė poslapė $1 teksta",
        "protectedpagetext": "Šėts poslapis īr ožrakints, saugont anū nū taisīma.",
-       "viewsourcetext": "Tomsta galėt veizietė ėr kopėjoutė poslapė kuoda:",
+       "viewsourcetext": "Tamsta galat veizietė ė parsėkeltė poslapė teksta.",
        "protectedinterface": "Šėtom poslapi īr pruogramėnės īronguos sasajuos teksts katros īr apsauguots, kū neprietelē anū nasogadėntu.",
        "editinginterface": "<strong>Diemesė:</strong> Tamsta keitat poslapi, katros īr nauduojams programėnės irongas sōsajės tekstė. Pakeitėmā tamė poslapū tēpuogi pakeis nauduotuojė sōsajės ėšruoda ė kėtėims nauduotujams. Jēgo nuorėt pargoldītė, siūluom pasėnauduotė [//translatewiki.net „translatewiki.net“], „MediaWiki“ lokalėzacėjės pruojėktu.",
        "namespaceprotected": "Tamsta netorėt teisiu keistė poslapiu '''$1''' srėtī.",
-       "ns-specialprotected": "Specēlė̅ jė poslapē negal būtė keitamė.",
+       "ns-specialprotected": "Specēlė̄jė poslapē nagal būtė keitamė.",
+       "titleprotected": "Nauduotuos [[User:$1|$1]] ožgīnė padėrbtė straipsni tuokio pavadėnėmo.\nDingstės īr „<em>$2</em>“.",
        "exception-nologin": "Nesat prėsėjongis",
-       "logouttext": "'''Daba Tamsta esat atsėjongės.'''\n\nGalat ė tuoliau nauduotė {{SITENAME}} anuonimėškā aba <span class='plainlinks'>[$1 prisėjonkat]</span> ėš naujė šėtuo patiu a kėto nauduotuojė vardu.\nPastebiejims: katruos nekatruos poslapiuos ė tuoliau gal ruodītė būktā būtomiet prisėjongės lėgė tuol, kumet ėšvalīsėt sava naršīklės dietovė (''cache'').",
+       "exception-nologin-text": "Ka galietomiet ton padėrbtė, Tamstā būtėnā rēk prėsėjongtė.",
+       "exception-nologin-text-manual": "Ka galietomiet ton padėrbtė, Tamstā būtėnā rēk $1.",
+       "logouttext": "'''Daba Tamsta esat atsėjongis.'''\n\nGalat ė tuoliau nauduotė {{SITENAME}} anuonėmėškā aba <span class='plainlinks'>[$1 prėsėjonkat]</span> ėš naujė tuo patio aba kėto nauduotuojė vardo.\nAtėduos: katrūs nakatrūs poslapiūs ė tuoliau gal ruodītė būktā būtomiet prėsėjongis lėgė tuol, kumet ėšvalīsat sava naršīklės dietovė (''cache'').",
        "welcomeuser": "Svēks, $1!",
-       "welcomecreation-msg": "Tamstas paskīra jau padėrbta.\nNūnā galat pakeitė sava {{SITENAME}} [[Special:Preferences|nustatīmos]], jēgo tėktās nuorat.",
+       "welcomecreation-msg": "Tamstas paskīra jau padėrbta.\nNūnā galat pakeistė sava {{SITENAME}} [[Special:Preferences|nustatīmus]], jēgo tėktās nuorat.",
        "yourname": "Nauduotuojė vards:",
        "userlogin-yourname": "Nauduotuojė vards:",
        "userlogin-yourname-ph": "Ožrašīkėt sava nauduotojė varda",
        "createacct-another-username-ph": "Ožrašīkėt nauduotojė varda",
        "yourpassword": "Slaptažuodis:",
        "userlogin-yourpassword": "Slaptažuodis",
-       "userlogin-yourpassword-ph": "Ožrašīkėt sava slaptažuodi",
-       "createacct-yourpassword-ph": "Ožrašīkėt slaptažuodi",
+       "userlogin-yourpassword-ph": "Ožrašīkat sava slaptažuodi",
+       "createacct-yourpassword-ph": "Ožrašīkat slaptažuodi",
        "yourpasswordagain": "Pakartuoket slaptažuodė:",
        "createacct-yourpasswordagain": "Čīstā tuokis slaptažuodis?",
-       "createacct-yourpasswordagain-ph": "Viel ožrašīkėt slaptažuodi",
+       "createacct-yourpasswordagain-ph": "Apent ožrašīkat slaptažuodi",
        "remembermypassword": "Atmintė prisėjongėma infuormacėjė šėtom kuompioteri (daugiausē $1 {{PLURAL:$1|dėina|dėinė|dėinas}})",
        "userlogin-remembermypassword": "Ka liktō prisėjongis",
        "userlogin-signwithsecure": "Apsauguots rīšīs",
        "yourdomainname": "Tamstas domens:",
        "password-change-forbidden": "Negalat tuo wiki keistė slaptažuodiu.",
-       "login": "Prisėjongtė",
-       "nav-login-createaccount": "Prėsėjongtė / sokortė paskīra",
-       "userlogin": "Prėsėjongtė / sokortė paskīra",
-       "userloginnocreate": "Prisėjongtė",
+       "login": "Prėsėjongtė",
+       "nav-login-createaccount": "Prėsėjongtė / padėrbtė paskīra",
+       "userlogin": "Prėsėjongtė / padėrbtė paskīra",
+       "userloginnocreate": "Prėsėjongtė",
        "logout": "Atsėjongtė",
        "userlogout": "Atsėjongtė",
-       "notloggedin": "Neprisėjongis",
-       "userlogin-noaccount": "Netorėt paskīruos?",
-       "userlogin-joinproject": "Jonkėtėis pri {{SITENAME}}",
-       "nologin": "Netorėt prisėjongėma varda? '''$1'''.",
+       "notloggedin": "Neprėsėjongis",
+       "userlogin-noaccount": "Netorat paskīruos?",
+       "userlogin-joinproject": "Jonkėtėis prī {{SITENAME}}",
+       "nologin": "Netorat prėsėjongėma varda? '''$1'''.",
        "nologinlink": "Sokorkėt paskīra",
-       "createaccount": "Sokortė paskīra",
+       "createaccount": "Pasėdėrbtė paskīra",
        "gotaccount": "Jau torėt paskīra? '''$1'''.",
-       "gotaccountlink": "Prisėjonkėt",
-       "userlogin-resetlink": "Ožmiršat sava prisėjongėma doumenis?",
-       "userlogin-resetpassword-link": "Pamiršuot slaptažuodi?",
-       "userlogin-helplink2": "Prisėjongėma pagelba",
+       "gotaccountlink": "Prėsėjonkat",
+       "userlogin-resetlink": "Ožmiršat sava prėsėjongėma doumenis?",
+       "userlogin-resetpassword-link": "Ožmiršat sava slaptažuodi?",
+       "userlogin-helplink2": "Prėsėjongėma pagelba",
        "userlogin-createanother": "Padėrbtė kėta paskīra",
        "createacct-emailrequired": "El. pašta adresos",
        "createacct-emailoptional": "El. paštos (nie būtėns)",
-       "createacct-email-ph": "Ožrašīkėt sava el. pašta adresa",
+       "createacct-email-ph": "Ožrašīkat sava el. pašta adresa",
        "createacct-another-email-ph": "Ožrašīkėt el. pašta adresa",
        "createaccountmail": "Nauduokėt laikėna slaptažuodi ė siōskėt nuruodėtō el. paštō",
        "createacct-realname": "Tėkros vardos (nie būtėns)",
-       "createaccountreason": "Prīžastis:",
-       "createacct-reason": "Prīžastis",
-       "createacct-captcha": "Apsauguos patėkrėnėms",
+       "createaccountreason": "Dingstės:",
+       "createacct-reason": "Dingstės",
+       "createacct-captcha": "Sargtėis patikrėnėms",
        "createacct-imgcaptcha-ph": "Ožrašīkėt ženklus, katrus veizėt viršō",
-       "createacct-submit": "Padėrbkėt sau paskīra",
+       "createacct-submit": "Padėrbkat savėi paskīra",
        "createacct-another-submit": "Padėrbtė kėta paskīra",
        "createacct-benefit-heading": "{{SITENAME}} īr sokorta prietėliu, tuokiu, kāp Tamsta.",
        "createacct-benefit-body1": "{{PLURAL:$1|pataisīms|pataisīmā|pataisīmu}}",
        "createacct-benefit-body2": "{{PLURAL:$1|poslapis|poslapē|poslapiu}}",
        "createacct-benefit-body3": "{{PLURAL:$1|vielībs nauduotuos|vielībė nauduotuojē|vielībū nauduotuoju}}",
-       "badretype": "Ivestė slaptažuodē nesotamp.",
+       "badretype": "Ivestė slaptažuodē nasotink.",
        "userexists": "Irašīts nauduotuojė vards jau īr nauduojams.\nPrašuom pasėrėnktė kėtuoki varda.",
        "loginerror": "Prisėjongėma klaida",
-       "createaccounterror": "Neėšiejė sokortė paskīruos: $1",
-       "nocookiesnew": "Nauduotuojė paskīra bova sokurta, ale Tamsta nēsot prisėjongis. {{SITENAME}} nauduo pakavukus, kū prijongtu nauduotuojus. Tamsta esot ėšjongis anūs. Prašuom ijongtė pakavukus, tumet prisėjonkėt so sava nauju nauduotuojė vardu ė slaptažuodiu.",
-       "nocookieslogin": "{{SITENAME}} nauduo pakavukus (''cookies''), kū prijongtu nauduotuojus. Tamsta esat ėšjongės anūs. Prašuom ijongtė pakavukus ė pamiegītė viel.",
-       "loginsuccesstitle": "Siekmingā prisėjongiet.",
-       "loginsuccess": "'''Nūnā Tamsta esot prisėjongės pri {{SITENAME}} kāp „$1“.'''",
-       "nosuchuser": "Nier anėjuokė nauduotuojė pavadėnta „$1“.\nPatikrėnkėt rašība, aba [[Special:UserLogin/signup|sokorkėt naujė paskīra]].",
-       "nosuchusershort": "Nier juokė nauduotuojė, pavadėnta „$1“. Patėkrinkėt rašība.",
+       "createaccounterror": "Nė̄šiejė padėrbtė paskīruos: $1",
+       "nocookiesnew": "Nauduotuojė paskīra bova sokurta, bat Tamsta nēsot prėsėjongis. {{SITENAME}} nauduo pakavukus (''cookies''), ka prėkergtom nauduotuojus. Tamsta esot ėšjongis anūs. Prašuom ijongtė pakavukus, tumet prisėjonkat so sava naujo nauduotuojė vardo ė slaptažuodio.",
+       "nocookieslogin": "{{SITENAME}} nauduo pakavukus (''cookies''), ka prėkergtom nauduotuojus. Tamsta esat ėšjongis anūs. Prašuom ijongtė pakavukus ė pamiegītė apent.",
+       "loginsuccesstitle": "Gerā prėsėjongiet",
+       "loginsuccess": "'''Dabā Tamsta esat prėsėjongis prī {{SITENAME}} kāp „$1“.'''",
+       "nosuchuser": "Nier anėjuokė nauduotuojė pavadėnta „$1“.\nPatikrinkat rašība, aba [[Special:UserLogin/signup|padėrbkat naujė paskīra]].",
+       "nosuchusershort": "Nier juokė nauduotuojė, pavadėnta „$1“. Patėkrinkat rašība.",
        "nouserspecified": "Tamstā rēk nuruodītė nauduotuojė varda.",
-       "login-userblocked": "Nauduotuos ožblokouts. Prisėjongt nie galėma.",
-       "wrongpassword": "Ivests neteisings slaptažuodis. Pameginket dā karta.",
-       "wrongpasswordempty": "Ivests slaptažuodis īr tošts. Pameginket vielėk.",
-       "passwordtooshort": "Tamstas slaptažuodis nier laistėns aba par tromps īr. Ans tor būtė nuors {{PLURAL:$1|1 sėmbuolė|$1 sėmbuoliu}} ėlgoma.",
+       "login-userblocked": "Nauduotuos ožgints īr. Pakliūtė nie galama.",
+       "wrongpassword": "Bluogs slaptažuodis. Pamiegīkat apent.",
+       "wrongpasswordempty": "Slaptažuodis dīks īr. Pamiegīkat apent.",
+       "passwordtooshort": "Tamstas slaptažuodis nier tinkoms aba par tromps īr. Ons tor būtė nuors {{PLURAL:$1|1 sėmbuolė|$1 sėmbuoliu}} ėlgoma.",
+       "passwordtoolong": "Slaptažuodis negal būtė ėlgesnis kāp {{PLURAL:$1|1 znuoks|$1 znuokā|$1 znuoku}}.",
        "password-name-match": "Tamstas slaptažuodis tor skirtėis nu Tamstas nauduotuojė varda.",
        "password-login-forbidden": "Tuo nauduotuojė varda ė slaptažuodė nauduojėms nie galėms.",
-       "mailmypassword": "Atkortė slaptažuodi",
+       "mailmypassword": "Atgamintė slaptažuodi",
        "passwordremindertitle": "Laikėns {{SITENAME}} slaptažuodis",
        "passwordremindertext": "Kažkastā (tėkriausē Tamsta, ėš IP adresa $1)\npaprašė, kū atsiōstomiet naujė slaptažuodi pruojektō {{SITENAME}} ($4).\nLaikėns slaptažuodis nauduotuojō „$2“ bova sokorts ėr nustatīts kāp „$3“.\nJēgo Tamsta nuoriejot ana pakeistė tūmet torietomiet prisėjongtė ė daba pakeistė sava slaptažuodi.\nTamstas laikėns slaptažuodis bengs galiuotė par {{PLURAL:$5|dėina|$5 dėinas}}.\n\nJēgo kažkas kėts atlėka ta prašīma aba Tamsta prisėmėniet sava slaptažuodi ė\nnebnuorėt ana pakeistė, Tamsta galėt tėisiuog nekreiptė diemiesė ė šėta gruomata ė tuoliau\nnauduotis sava senu slaptažuodžiu.",
        "noemail": "Nier anėjuokė el. pašta adresa ivesta nauduotuojō „$1“.",
        "passwordsent": "Naus slaptažuodis bova nusiōsts i el. pašta adresa,\nožregėstrouta nauduotuojė „$1“.\nPrašuom prisėjongtė vielē, kumet Tamsta gausėt anū.",
        "blocked-mailpassword": "Tamstas IP adresos īr ožblokouts nū redagavėma, tudie neleidama nauduotė slaptažuodė priminėma funkcėjės, kū apsėsauguotomė nū pėktnaudžēvėma.",
        "eauthentsent": "Patvėrtėnėma gruomata bova nusiōsta i paskėrta el. pašta adresa.\nPrīš ėšsiontiant kėta gruomata i Tamstas diežote, Tamsta torėt vīkdītė nuruodīmus gruomatuo, kū patvėrtėntomiet, kū diežotė tėkrā īr Tamstas.",
-       "throttled-mailpassword": "Slaptažuodžė priminims jau bova ėšsiōsts, par paskotėnes {{PLURAL:$1|adīna|$1 adīnas}}. Nuorint apsėsauguotė nū pėktnaudžēvėma, slaptažuodė priminims gal būt ėšsiōsts tėk kas {{PLURAL:$1|adīna|$1 adīnas}}.",
-       "mailerror": "Klaida siontiant pašta: $1",
+       "throttled-mailpassword": "Slaptažuodžė priminims jau bova ėšsiōsts, par paskotėnės {{PLURAL:$1|adīna|$1 adīnas}}. Nuorint apsėsauguotė nū pėktnaudēvėma, slaptažuodė priminėms gal būt ėšsiōsts tėk kas {{PLURAL:$1|adīna|$1 adīnas}}.",
+       "mailerror": "Bieda siontiont gromata: $1",
        "acct_creation_throttle_hit": "Ton pruojekta lankītuojē, katrėi nauduo Tamstas IP adresa, padėrba {{PLURAL:$1|$1 paskīra|$1 paskīras|$1 paskīrū}} par paskotėnta dėina, a tas īr dėdliausis leidams skaitlios par ta čiesa.\nTudie šėton čieso lankītuojē, katrėi nauduo ta IP adresa, daugiau paskīrū dėrbt negal.",
        "emailauthenticated": "Tamstas el. pašta adresos bova ožtvirtėnts $2 d. $3.",
        "emailnotauthenticated": "Tamstas el. pašta adresos da nier patvėrtėnts. Anėjuokės gruomatas\nnebus siontamas ni vėinam žemiau ėšvardėntam puoslaugiō.",
        "noemailprefs": "Nuruodėkīt el. pašta adresa, kū vėiktu šėtos funkcėjės.",
        "emailconfirmlink": "Patvėrtinkėt sava el. pašta adresa",
-       "accountcreated": "Nauduotuos sokorts",
+       "accountcreated": "Nauduotuos padėrbts īr",
        "accountcreatedtext": "Paskīra nauduotojō [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|aptarėms]]) bova padėrbta.",
        "createaccount-title": "{{SITENAME}} paskīruos kūrėms",
+       "createaccount-text": "Kažkastā svetainie {{SITENAME}} ($4) padėrba nauduotojė poslapi, katros vadėnas \"$2\" ė katruo slaptažuodis ī \"$3\", so Tamstas el. pašta adreso.\nDaba galat prėsėjongtė ė pasėkeistė slaptažuodi.\n\nJēgo tat ī kuokistā soklīdėms, tumet Jumis nieka darītė nerēk.",
+       "login-throttled": "Tamsta nuognē daug sīkiu miegėnat prėsėjongtė.\nPalaukat $1 prīš miegėnont apent.",
        "loginlanguagelabel": "Kalba: $1",
-       "pt-login": "Prisėjongtė",
-       "pt-login-button": "Prisėjongtė",
-       "pt-createaccount": "Pasdėrbtė paskīra",
+       "pt-login": "Prėsėjongtė",
+       "pt-login-button": "Prėsėjongtė",
+       "pt-createaccount": "Pasėdėrbtė paskīra",
        "pt-userlogout": "Atsėjongtė",
        "changepassword": "Pakeistė slaptažuodė",
-       "resetpass_announce": "Ka ožbengtomėt jongtėis, torėt sokortė nauja slaptažuodi.",
+       "resetpass_announce": "Ka ožbengtomiet jongtėis, torėt sokortė naujė slaptažuodi.",
        "resetpass_header": "Keistė paskīruos slaptažuodi",
        "oldpassword": "Sens slaptažuodis:",
        "newpassword": "Naus slaptažuodis:",
-       "retypenew": "Pakartuokėt nauja slaptažuodi:",
+       "retypenew": "Apent ožrašīkat naujė slaptažuodi:",
        "resetpass_submit": "Nostatītė slaptažuodi ė prėsėjongtė",
        "changepassword-success": "Tamstas slaptažuodis pakeists siekmėngā!",
        "changepassword-throttled": "Baisē daug čiesu mieginot prisėjongtė.\nDaba palaukėt $1 prīš mieginant vie.",
        "resetpass-submit-loggedin": "Keistė slaptažuodi",
-       "resetpass-submit-cancel": "Nutrauktė",
+       "resetpass-submit-cancel": "Pabengtė",
        "resetpass-temp-password": "Laikėns slaptažuodis:",
+       "passwordreset": "Apent padėrbtė slaptažuodi",
        "passwordreset-username": "Nauduotuojė vards:",
        "passwordreset-domain": "Domens:",
        "passwordreset-email": "El. pašta adresos:",
        "changeemail": "Keistė el. pašta adresa",
+       "changeemail-oldemail": "Vielībs el. pašta adresosː",
+       "changeemail-newemail": "Naus el. pašta adresosː",
        "changeemail-none": "(nie)",
        "changeemail-password": "Tamstas {{SITENAME}} slaptažuodis:",
        "changeemail-submit": "Keistė el. pašta",
-       "bold_sample": "Pastuorints teksts",
-       "bold_tip": "Pastuorintė teksta",
-       "italic_sample": "Teksts kursīvu",
-       "italic_tip": "Teksts kursīvu",
-       "link_sample": "Nūruodas pavadinėms",
-       "link_tip": "Vėdinė nūruoda",
+       "changeemail-throttled": "Tamsta nuognē daug sīkiu miegėnat prėsėjongtė.\nPalaukat $1 prīš miegėnont apent.",
+       "bold_sample": "Pastuorints raštos",
+       "bold_tip": "Pastuorints raštos",
+       "italic_sample": "Pasviris raštos",
+       "italic_tip": "Pasviris raštos",
+       "link_sample": "Nūruodas pavadėnėms",
+       "link_tip": "Vėduojė nūruoda",
        "extlink_sample": "http://www.example.com nūruodas pavadėnėms",
-       "extlink_tip": "Ėšuorėnė nūruoda (nepamėrškėt http:// priraša)",
-       "headline_sample": "SkÄ«rė pavadėnėms",
-       "headline_tip": "Ontra lÄ«gÄ\97 skÄ«rė pavadėnėms",
-       "nowiki_sample": "Iterpkėt nefuormouta teksta čė",
-       "nowiki_tip": "Ėgnoroutė wiki fuormata",
+       "extlink_tip": "Laukėnė nūruoda (neožmėrškat http:// prīraša)",
+       "headline_sample": "SkÄ\97rsnė pavadėnėms",
+       "headline_tip": "Ontra lÄ«gÄ\97 skÄ\97rsnė pavadėnėms",
+       "nowiki_sample": "Diekat čiuonās teksta, katruo nerēk formatoutė",
+       "nowiki_tip": "Neprėveizietė wiki teksta skvarma",
        "image_sample": "Pavīzdīs.jpg",
-       "image_tip": "Idietė abruozdieli",
+       "image_tip": "dietė abruozdieli",
        "media_sample": "Pavīzdīs.ogg",
-       "media_tip": "Nūruoda i media faila",
-       "sig_tip": "Tomstas parašos ėr čiesos",
-       "hr_tip": "Guorizuontali linėjė (nenauduokėt ba reikala)",
+       "media_tip": "Nūruoda abruozdielin",
+       "sig_tip": "Tamstas parašos ė čiesos",
+       "hr_tip": "Golos briežis (nenauduokat ba rēkala)",
        "summary": "Pāiškėnėms:",
        "subject": "Tema/ontraštė:",
-       "minoredit": "Mažos pataisims",
-       "watchthis": "Keravuotė šėta poslapė",
+       "minoredit": "Mažos pakeitėms",
+       "watchthis": "Keravuotė ton poslapė",
        "savearticle": "Ėšsauguotė poslapė",
        "preview": "Parveiza",
        "showpreview": "Ruodītė parveiza",
        "showdiff": "Ruodītė skėrtomus",
-       "anoneditwarning": "'''Diemesė:''' Tomsta nesat prisėjungės. Jūsa IP adresos būs irašīts i šiuo poslapė istuorėjė.",
+       "blankarticle": "<strong>Atėdės:</strong> Tamsta dėrbat dīka poslapi.\nJēgo apent mīgsat \"{{int:savearticle}}\", ta ons poslapis vės vėin bos padėrbts.",
+       "anoneditwarning": "<strong>Atidėsǃ</strong> Tamsta nāsot prėsėjongis. Tamstas IP adresos bos vėišā regėms, jēgo padėrbsat kuoki pakeitėma. Vuo jēgo <strong>[$1 prėsėjongsat]</strong> aba <strong>[$2 pasėdėrbsat nauduotuojė skīriu]</strong>, tumet Tamstas pakeitėmā prėgols prī Tamstas nauduotojė varda.",
+       "anonpreviewwarning": "<em>Tamsta nāsat prėsėjongis. Kāp ėšsauguosat poslapi, tāp regiesės Tamstas IP adresos</em>",
        "missingsummary": "'''Priminėms:''' Tamsta nenuruodiet pakeitėma kuomentara. Jēgo viel paspausėt ''Ėšsauguotė'', Tamstas pakeitėms bus ėšsauguots ba anuo.",
-       "missingcommenttext": "Prašuom ivestė kuomentara.",
-       "summary-preview": "Kuomentara parvaiza:",
+       "selfredirect": "<strong>Atėdės:</strong> Tamsta dėrbat poslapė nosokėma savėsp.\nParašīkat tėkslē, kor ons poslapis tor soktė.\nJēgo apent mīgsat \"{{int:savearticle}}\", ta ons poslapis vės vėin bos padėrbts.",
+       "missingcommenttext": "Duokat pāiškėnėma apatiuo.",
+       "summary-preview": "Pāiškėnėma parvaiza:",
        "subject-preview": "Skėrsnelė/ontraštės parvaiza:",
-       "blockedtitle": "Nauduotuos īr ožblokouts",
-       "blockedtext": "'''Tamstas nauduotuojė vards a IP adresos īr ožblokouts.'''\n\nOžbluokava $1.\nNuruodīta prižastis īr ''$2''.\n\n* Bluokavėma pradžia: $8\n* Bluokavėma pabenga: $6\n* Numatīts bluokoujamasės: $7\n\nTamsta galėt sosėsėiktė so $1 a kėtu\n[[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aptartė ožbluokavėma.\nTamsta negalėt nauduotės funkcėjė „Rašītė laiška tam nauduotuojō“, jēgo nesot pateikis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nesot ožblokouts nu anuos nauduojėma.\nTamstas dabartėnis IP adresos īr $3, a bluokavėma ID īr #$5. Prašuom nuruodītė šėtā, kumet kreipiatės diel atbluokavėma.",
-       "autoblockedtext": "Tamstas IP adresos bova autuomatėškā ožblokouts, kadongi ana nauduojė kėts nauduotuos, katra ožbluokava $1.\nNuruodīta prīžastis īr tuokė:\n\n:''$2''\n\n* Bluokavėma pradžė: $8\n* Bluokavėma pabenga: $6\n* Numatuoms bluokavėma čiesos: $7\n\nTamsta galėt sosėsėiktė so $1 aba kėtu [[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aprokoutomėt biedas diel bluokavėma.\n\nTamsta negalėt nauduotės fonkcėjė „Rašītė gruomata tam nauduotuojō“, jēgo nesot nuruode tėkra el. pašta adresa sava [[Special:Preferences|nauduotuojė nustatīmūs]]. Tēpuogi Tamsta negalat nauduotės ta fonkcėjė, jēgo Tamstā ožblokouts anuos nauduojėms.\n\nTamstas IP adresos īr $3, bluokavėma ID īr $5.\nPrašuom nuruodītė šėtūs doumenis visūmet, kumet kreipiatės diel bluokavėma.",
-       "blockednoreason": "prīžastis nier nuruodīta",
-       "whitelistedittext": "Tamsta torėt $1, kū keistomėt poslapius.",
-       "nosuchsectiontitle": "Nier tuokė skīrė",
-       "loginreqlink": "prisėjongtė",
+       "blockedtitle": "Nauduotuos īr ožgints",
+       "blockedtext": "'''Tamstas nauduotuojė vards aba IP adresos ožgints īr.'''\n\nOžgīnė nauduotuos $1.\nDingstės ''$2''.\n\n* Ožgīnėms prasėdė̄jė: $8\n* Ožgīnėms pasėbengs: $6\n* Kas tor būtė ožgints: $7\n\nTamsta galat parašītė $1 aba kėtėim\n[[{{MediaWiki:Grouppage-sysop}}|admėnėstratuorėm]], jēgo mīslėjat, ka Tamstā ožgīnė ba grieka.\nTamsta negalat „rašītė gromata ton nauduotuojō“, jēgo nasat davis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nasat ožgints nu anuos nauduojėma.\nTamstas dabartėnis IP adresos īr $3, vuo ožgīnėma ID īr #$5. Prašuom nuruodītė ton, kumet prašīsėt atgėnoms.",
+       "autoblockedtext": "Tamstas IP adresos bova liuosā ožgints, tudie, ka ana nauduojė kėts nauduotuos, katra ožgīnė $1.\nDouta dingstės īr tuokė:\n\n:''$2''\n\n* Ožgīnėms prasėdė̄jė: $8\n* Ožgīnėms pasėbengs: $6\n* Kas tor būtė ožgints: $7\n\nTamsta galėt sosėsėiktė so $1 aba kėtu [[{{MediaWiki:Grouppage-sysop}}|adminėstratuoriom]], kū aprokoutomėt biedas diel bluokavėma.\n\nTamsta galat parašītė $1 aba kėtėim\n[[{{MediaWiki:Grouppage-sysop}}|admėnėstratuorėm]], jēgo mīslėjat, ka Tamstā ožgīnė ba grieka.\nTamsta negalat „rašītė gromata ton nauduotuojō“, jēgo nasat davis tėkra sava el. pašta adresa sava [[Special:Preferences|paskīruos nustatīmūs]] ė nasat ožgints nu anuos nauduojėma.\nTamstas dabartėnis IP adresos īr $3, vuo ožgīnėma ID īr #$5. Prašuom nuruodītė ton, kumet prašīsėt atgėnoms.",
+       "blockednoreason": "dingstėis nie douta",
+       "whitelistedittext": "Tamstā rēk $1, ka dėrbtomiet poslapius.",
+       "nosuchsectiontitle": "Nier tuokė skėrsnė",
+       "loginreqtitle": "Rēk prėsėjongtė",
+       "loginreqlink": "prėsėjongtė",
+       "loginreqpagetext": "Rēk $1, paveiziejėmō kėtū poslapiu.",
        "accmailtitle": "Slaptažuodis ėšsiūsts īr.",
-       "accmailtext": "Nauduotuojė '$1' slaptažuodis nusiūsts i $2 īr.",
+       "accmailtext": "Bikāp padėrbts slaptažuodis, katros prėgol prī [[User talk:$1|$1]] bova siōsts pošto $2. Kāp prėsėjongsat, galat <em>[[Special:ChangePassword|anon parkeistė]]</em>.",
        "newarticle": "(Naus)",
-       "newarticletext": "Tamsta pakliovuot i nūnā neesoti poslapi.\nNuoriedamė sokortė poslapi, pradiekėt rašītė žemiau esontiamė ivedima pluotė\n(platiau [$1 pagelbas poslapī]).\nJēgo pakliovuot čė netīčiuom, paprastiausē paspauskėt naršīklės mīgtoka '''atgal'''.",
+       "newarticletext": "Tamsta pakliovat poslapin, katros dā nie padėrbts.\nJēgo nuorat anon padėrbtė, rašīkat laukė, katros ī apatiuo\n(veiziekat [$1 pagelbas poslapi]).\nJēgo pakliovat čė netīčiuom, paprastiausē paspauskat naršīklės mīgtoka '''atgal'''.",
        "anontalkpagetext": "----''Tas īr anonimėnė nauduotuojė, katros nier sosėkūrės aba nenauduo paskīruos, aptarėmu poslapis.\nDielē tuo nauduojams IP adresos anuo atpažėnėmō.\nTas IP adresos gal būtė dalinams keletō nauduotuoju.\nJēgo Tamsta esat anonimėnis nauduotuos ėr veizėt, kū kuomentarā nier skėrtė Tamstā, [[Special:UserLogin/signup|sokorkėt paskīra]] aba [[Special:UserLogin|prisėjonkėt]], ė nebūsėt maišuoms so kėtās anonimėnēs nauduotuojās.''",
-       "noarticletext": "Tuo čiesu tamė poslapī nier juokė teksta.\nTamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėnėma]] kėtūs poslapiūs,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė sosėjosiu regėstru],\naba [{{fullurl:{{FULLPAGENAME}}|action=edit}} keistė ta poslapi]</span>.",
-       "noarticletext-nopermission": "Tuo čiesu tamė poslapī nier juokė teksta.\nTamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėnėma]] kėtūs poslapiūs,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė sosėjosiu regėstru]</span>.",
+       "noarticletext": "Nūnā tamė poslapī nie nė juokė teksta.\nTamsta galat [[Special:Search/{{PAGENAME}}|ėiškuotė ton poslapė pavadėnėma]] terp kėtū poslapiū,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė prėgolontiu īrašu],\naba [{{fullurl:{{FULLPAGENAME}}|action=edit}} keistė ton poslapi]</span>.",
+       "noarticletext-nopermission": "Nūnā tamė poslapī nier anėjuokė teksta.\nTamsta galėt [[Special:Search/{{PAGENAME}}|ėiškuotė šėta poslapė pavadėnėma]] kėtūs poslapiūs,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ėiškuotė prėgolontiu regėstru]</span>.",
        "userpage-userdoesnotexist": "Nauduotuojė paskīra „<nowiki>$1</nowiki>“ nier ožregėstrouta. Prašuom patikrėntė, a Tamsta nuorėt kortė/keistė ta poslapi.",
+       "userpage-userdoesnotexist-view": "Nie nauduotuojė vardo „$1“",
+       "blocked-notice-logextract": "Nauduotuos ožgints īr.\nApatiuo paruodīta kas ė kāpː",
        "clearyourcache": "'''Diemesė:''' ėšsauguojus Tamstā gal prireiktė ėšvalītė Tamstas naršīklės rėnktovė, kū paveizėtomėt pakeitėmus. '''Mozilla / Safari / Konqueror:''' laikīdami ''Shift'' pasėrinkėt ''Atsiōstė ėš nauja'', a paspauskėt ''Ctrl-Shift-R'' (sėstemuo Apple Mac ''Cmd-Shift-R''); '''IE:''' laikīdamė ''Ctrl'' paspauskėt ''Atnaujėntė'', o paspauskėt ''Ctrl-F5''; '''Konqueror:''' paprastiausē paspauskėt ''Perkrautė'' mīgtoka, o paspauskėt ''F5''; '''Opera''' nauduotuojam gal prireiktė pėlnā ėšvalītė anū rėnktovė ''Rakondā→Nustatīmā''.",
        "usercssyoucanpreview": "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji CSS priš ėšsaugont.",
        "userjsyoucanpreview": "'''Patarėms:''' Nauduokit „Ruodītė parvaiza“ mīgtoka, kū ėšmiegintomiet sava naujaji JS priš ėšsaugont.",
        "userjspreview": "'''Nepamirškėt, kū Tamsta tėk testoujat/parvaizėt sava nauduotoja ''JavaScript'', ans da nabova ėšsauguots!'''",
        "userinvalidcssjstitle": "'''Diemesė:''' Nė juokės ėšruodos „$1“. Napamirškėt, kū sava .css ėr .js poslapē nauduo pavadėnėma mažuosiomės raidiemis, pvz., Nauduotuos:Foo/vector.css, o ne Nauduotuos:Foo/Vector.css.",
        "updated": "(Atnaujėnta)",
-       "note": "'''Pastebiejims:'''",
+       "note": "'''Žėniuo:'''",
        "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_html": "'''Atsėprašuom! Mes nagalėm apdoroutė Tamstas keitėma diel sesėjės doumenū praradėma.'''\n''Kadaogi šėtom pruojekte grīnasės HTML īr ijongts, parveiza īr pasliepta kāp atsargoma prėimonė priš JavaScript atakas.''\n'''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",
-       "explainconflict": "Kažėn kas kėts jau pakeitė poslapi nū tuo čiesa, kumet Tamsta pradiejuot ana redagoutė.\nVėršotėniamė tekstėniamė laukė pateikta šėtu čiesu esontė poslapė versėjė.\nTamstas pakeitėmā pateiktė žemiau esontiamė laukė.\nTamstā rēk sojongtė Tamstas pakeitėmus so esontė versėjė.\nKumet paspausėte „{{int:savearticle}}“, bus irašīts '''tėktās''' teksts vėršotėniam tekstėniam laukė.",
-       "yourtext": "Tamstas teksts",
-       "storedversion": "Ėšsauguota versėjė",
-       "editingold": "'''ISPIEJIMS: Tamsta keitat ne naujausė poslapė versėjė.\nJēgo ėšsauguosėt sava pakeitėmus, paskum darītė pakeitėmā prapols.'''",
+       "editingsection": "Keitams $1 (skėrsnelis)",
+       "editingcomment": "Keitams $1 (naus skėrsnis)",
+       "editconflict": "Do keitėmo nesotink: $1",
+       "explainconflict": "Kažėn kas kėts jau pakeitė poslapi nug ton čiesa, kāp Tamsta pradiejuot anon keistė.\nVėršō īr patė vielībuojė straipsnė ėšruoda.\nTamstas pakeitėmā pateiktė apatiuo.\nTamstā rēk sokergtė Tamstas pakeitėmus so tās, katrėi vėršō.\nKumet paspausat „{{int:savearticle}}“, bos ožrašīts '''tėktās''' tas raštos, katros īr ėšgoldīts vėršō.",
+       "yourtext": "Tamstas raštos",
+       "storedversion": "Ėšsauguots atmains",
+       "editingold": "'''Atėdės: Tamsta keitat ne vielībiausi poslapė atmaina.\nJēgo ėšsauguosat sava pakeitėmus, īkondin darītė pakeitėmā prapols.'''",
        "yourdiff": "Skėrtomā",
-       "copyrightwarning": "Primenam, kū vėsks, kas patenk i {{SITENAME}}, īr laikuoma pavėišėnto palē $2 (platiau - $1). Jēgo nenuorit, kū Tamstas duovis būtou ba pasėgailiejėma keitams ė platėnams, nerašīkėt čė.<br />\nTamsta tēpuogi pasėžadat, kū tas īr Tamstas patėis rašīts torėnīs a kuopėjouts ėš vėišū a panašiū valnū šaltėniu.\n'''NEKOPĖJOUKĖT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''",
-       "copyrightwarning2": "Primenam, kū vėsks, kas patenk i {{SITENAME}} gal būtė keitama, perdaruoma, a pašalėnama kėtū nauduotuoju. Jēgo nenuorėt, kū Tamstas duovis būtu ba pasėgailiejėma keitams, čiuonās nerašīkėt.<br />\nTēpuogi Tamsta pasėžadat, kū tas īr Tamstas rašīts teksts aba kuopėjouts\nėš vėišū liousū šaltėniu (detaliau - $1).\n'''NEKUOPĖJOUKAT AUTUORĖNIEM TEISIEM APSAUGUOTU DARBŪ BA LEIDĖMA!'''",
+       "copyrightwarning": "Žėnuokat, ka vėsks, kas patenk i {{SITENAME}}, īr laikuoma pavėišėnto vagol $2 (platiau - $1). Jēgo nenuorat, ka Tamstas duovis būtom ba gailesė keitams ė skleidams, nerašīkat čė.<br />\nTamsta tēpuogi pasėžadat, ka tas īr Tamstas patėis rašīts torėnīs aba parrašīts nug vėišū aba panašiū liousū vėitu.\n'''NEDIEKAT AUTUORĖNIEM TEISIEM APSERGIETU DARBŪ BA LEIDĖMA!'''",
+       "copyrightwarning2": "Žėnuokat, ka vėsks, kas patenk i {{SITENAME}}, gal būtė keitama ė trėnama. Jēgo nenuorat, ka Tamstas duovis būtom ba gailesė keitams ė skleidams, nerašīkat čė.<br />\nTamsta tēpuogi pasėžadat, ka tas īr Tamstas patėis rašīts torėnīs aba parrašīts nug vėišū aba panašiū liousū vėitu.\n'''NEDIEKAT AUTUORĖNIEM TEISIEM APSERGIETU DARBŪ BA LEIDĖMA!'''",
        "readonlywarning": "'''DIEMESĖ: Doumenū bazė bova ožrakėnta teknėnē pruofilaktėkā,\ntudie negaliesėt ėšsauguotė sava pakeitėmu daba. Tamsta galėt nosėkopėjoutė teksta i tekstėni faila\nė paskum ikeltė ana čė.'''",
        "protectedpagewarning": "'''DIEMESĖ: Šėts poslapis īr ožrakints ėr anū redagoutė gal tėk admėnėstratuorė teises torėntīs prietelē.'''",
        "semiprotectedpagewarning": "'''Pastebiejėms:''' Šėts poslapis bova ožrakėnts ėr anuo gal redagoutė tėk regėstroutė nauduotojā.",
        "titleprotectedwarning": "'''DIEMESĖ: Tas poslapis bova ožrakėnts tēp, ka tėktās kāpkatrė nauduotuojē galietu ana sokortė.'''",
-       "templatesused": "{{PLURAL:$1|Šabluons|Šabluonā}}, katrėi īr nauduojamė poslapī:",
+       "templatesused": "{{PLURAL:$1|Šabluons, katros|Šabluonā, katrėi}}, īr nauduojamė tamė poslapi:",
        "templatesusedpreview": "{{PLURAL:$1|Šabluons|Šabluonā}}, nauduotė šėtuo parvaizuo:",
        "templatesusedsection": "Šabluonā, nauduotė šėtom skėrsnelī:",
-       "template-protected": "(apsauguots)",
-       "template-semiprotected": "(posiau apsauguots)",
-       "hiddencategories": "Tas poslapis prėklausa $1 {{PLURAL:$1|pakavuotā kateguorėjē|pakavuotoms kateguorėjėms|pakavuotu kateguorėju}}:",
+       "template-protected": "(apsergiets)",
+       "template-semiprotected": "(posiau apsergiets)",
+       "hiddencategories": "Ons poslapis prėgol $1 {{PLURAL:$1|pakavuotā kateguorėjē|pakavuotoms kateguorėjėms|pakavuotu kateguorėju}}:",
        "nocreatetext": "{{SITENAME}} aprėbuojė galėmībe kortė naujus poslapius.\nTamsta galėt grīžtė ė redagoutė nūnā esonti poslapi, a [[Special:UserLogin|prėsėjongtė a sokortė paskīra]].",
        "permissionserrors": "Teisiu klaida",
        "permissionserrorstext": "Tamsta netorėt teisiu šėta darītė diel {{PLURAL:$1|tuos prīžastėis|tū prīžastiū}}:",
-       "permissionserrorstext-withaction": "Tamsta netorėt leidėma $2 dielē {{PLURAL:$1|tos prīžastėis|tū prīžastiu}}:",
+       "permissionserrorstext-withaction": "Tamsta natorėt leidėma $2 dielē {{PLURAL:$1|tuokės dingstėis|tuokiū dingstiū}}:",
        "recreate-moveddeleted-warn": "'''Parspiejėms: Tamsta ikeliat faila, katros onkstiau bova ėštrėnts.'''\n\nTamsta torietomiet nusprēstė, a īr naudėnga tuoliau ikeldinietė ta faila.\nTuo faila pašalinėma istuorėjė īr pateikta dielē patuogoma:",
-       "moveddeleted-notice": "Tas poslapis bova ėštrėnts.\nĖštrėnta poslapė versėju sārašos īr pateikts paveiziejėmō žemiau.",
-       "edit-conflict": "Redagavėma kuonflėktos",
+       "moveddeleted-notice": "Tas poslapis bova ėštrints.\nĖštrinta poslapė atmainū sārošos īr douts paveiziejėmō apatiuo.",
+       "log-fulllog": "Veizietė vėskon",
+       "edit-conflict": "Do keitėmo nesotink.",
        "postedit-confirmation-created": "Poslapis padėrbts.",
        "postedit-confirmation-restored": "Poslapis atkorts.",
        "postedit-confirmation-saved": "Tamstas padėrbts pakeitėms ėšsauguots īr.",
+       "edit-already-exists": "Nie galam padėrbtė poslapė. Ons jau īr.",
+       "defaultmessagetext": "Tekstos kāp prėklaus",
        "post-expand-template-inclusion-warning": "Perspiejėms: Šabluonu īterpėma dėdoms īr par dėdelis.\nKāp katrėi šabluonā nebus ītrauktė.",
        "post-expand-template-inclusion-category": "Poslapē, kur šabluonu īterpėma dėdoms viršėjams",
        "post-expand-template-argument-warning": "Perspiejėms: Tas poslapis tor nuors vėina šabluona argomenta, katros tor per dėdli ėšplietėma dėdoma.\nTė argomentā bova praleistė.",
        "post-expand-template-argument-category": "Poslapē, katrėi tor praleistū šabluona argomentu",
        "undo-success": "Keitėms gal būtė atšaukts. Prašuom patėkrėntė palīgėnėma, asonti žemiau, kū patvėrtėntomiet, kū Tamsta šėta ė nuorėt padarītė, ė tumet ėšsauguokit pakeitėmos, asontios žemiau, kū ožbėngtomiet keitėma atšaukėma.",
        "undo-failure": "Keitėms nagal būt atšaukts diel konflėktounantiu tarpėniu pakeitėmu.",
-       "undo-summary": "Atšauktė [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) versėje $1",
+       "undo-summary": "Pargrōžėnams pakeitėms $1, padėrbts nauduotuojė [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]])",
+       "cantcreateaccounttitle": "Nie galam padėrbtė nauduotuojė",
        "cantcreateaccount-text": "Paskīrū kūrėma ėš šėta IP adresa ('''$1''') ožbluokava [[User:$3|$3]].\n\n$3 nuruodīta prīžastis īr ''$2''",
-       "viewpagelogs": "Ruodītė šėtuo poslapė specēliōsios vaiksmos",
+       "cantcreateaccount-range-text": "Nauduotuoju dėrbėms nug IP adresū '''$1''', terp katrū prėgol ė Tamstas IP adresos ('''$4'''), bova ožgints nauduotuojė [[User:$3|$3]].\n\n$3 ožrašė tuokė dingstiː ''$2''",
+       "viewpagelogs": "Ruodītė ton poslapė īpatingus notėkėmus",
        "nohistory": "Šėts poslapis netor keitėmu istuorėjės.",
-       "currentrev": "Dabartėnė versėjė",
-       "currentrev-asof": "Dabartėnė $1 versėjė",
-       "revisionasof": "$1 versėjė",
-       "revision-info": "$1 versėjė nauduotuojė $2",
-       "previousrevision": "←Onkstesnė versėjė",
-       "nextrevision": "Paskesnė versėjė→",
-       "currentrevisionlink": "Dabartėnė versėjė",
-       "cur": "dab",
+       "currentrev": "Vielībasā atmains",
+       "currentrev-asof": "Vielībasā $1 atmains",
+       "revisionasof": "$1 atmains",
+       "revision-info": "Pakeitėms nug $1 padėrbts {{GENDER:$6|$2}}$7",
+       "previousrevision": "←Onkstesnis atmains",
+       "nextrevision": "Paskesnis atmains →",
+       "currentrevisionlink": "Vielībasā atmains",
+       "cur": "viel.",
        "next": "kėts",
        "last": "pask",
        "page_first": "pėrm",
        "histlegend": "Skėrtomā terp versėju: pažīmiekit līginamas versėjės ė spauskėt ''Enter'' klavėša a mīgtuka apatiuo.<br />\nŽīmiejimā: (dab) = palīginims so vielibiausė versėjė,\n(pask) = palīginims so priš ta bovosia versėjė, S = mažos pataisims.",
        "history-fieldset-title": "Naršītė istuorėjuo",
        "history-show-deleted": "Tėktās ėštrintė",
-       "histfirst": "Seniausė",
+       "histfirst": "paskiausė",
        "histlast": "Vielibė̄jė",
        "historysize": "($1 {{PLURAL:$1|baits|baitā|baitu}})",
        "historyempty": "(nieka nier)",
        "history-feed-item-nocomment": "$1 $2",
        "history-feed-empty": "Prašuoms poslapis nēgzėstuo.\nAns galiejė būtė ėštrėnts ėš pruojekta, aba parvardėnts.\nPamiegīkėt [[Special:Search|ėiškoutė pruojektė]] sosėjosiu naujū poslapiu.",
        "rev-delundel": "ruodītė/kavuotė",
+       "rev-showdeleted": "ruodītė",
        "revisiondelete": "Trintė/atkortė versėjės",
        "revdelete-show-file-submit": "Tēp",
        "logdelete-selected": "{{PLURAL:$2|Pasėrinkts|Pasėrinktė|Pasėrinktė}} $1 istuorėjės {{PLURAL:$2|atėtėkims|atsėtėkimā|atsėtėkimā}}:",
        "revdelete-hide-comment": "Keitėma pāiškėnėms",
-       "revdelete-hide-user": "Keitiejė nauduotojė vardos/IP adresos",
+       "revdelete-hide-user": "Nauduotojė vardos/IP adresos",
        "revdelete-unsuppress": "Šalėntė apribuojėmos atkortuos versėjės",
        "revdel-restore": "Keistė veizėmuma",
-       "revdelete-edit-reasonlist": "Keistė trīnėma prīžastis",
+       "pagehist": "Poslapė istuorėjė",
+       "deletedhist": "Ėštrinta istuorėjė",
+       "revdelete-otherreason": "Kėta/papėlduoma dingstės:",
+       "revdelete-reasonotherlist": "Kėta dingstės",
+       "revdelete-edit-reasonlist": "Keistė trīnėma dingstis",
        "suppressionlog": "Trīnėma istuorėjė",
+       "mergehistory": "Sokergtė poslapė istuorėjės",
+       "mergehistory-from": "Kėlėma poslapisː",
+       "mergehistory-into": "Tiksla poslapisː",
        "mergehistory-success": "$3 [[:$1]] versėju siekmėngā sojongta so [[:$2]].",
        "revertmerge": "Atskėrtė",
        "history-title": "Poslapė „$1“ istuorėjė",
-       "difference-title": "$1: Skėrtoms terp redakcėju",
-       "difference-title-multipage": "$1 ė $2: Skėrtoms terp poslapiu",
+       "difference-title": "$1 – skėrtoms terp pakeitėmu.",
+       "difference-title-multipage": "Skėrtoms terp poslapiu „$1“ ė „$2“",
+       "difference-multipage": "(Skėtroms terp poslapiu)",
        "lineno": "Eilotė $1:",
-       "compareselectedversions": "Palīgintė pasėrinktas versėjės",
-       "editundo": "atšauktė",
-       "searchresults": "Paėiškuos rezoltatā",
-       "searchresults-title": "Paėiškuos rezoltatā \"$1\"",
+       "compareselectedversions": "Pamieruotė pasėrinktus atmainus",
+       "editundo": "atgrōžintė",
+       "diff-empty": "(Nie skėrtoma)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Vėins tarpėnis pakeitėms|$1 tarpėnē pakeitėmā|$1 tarpėniu pakeitėmu}}, padėrbtū tuo patė nauduotuojė, nie ruoduoma)",
+       "searchresults": "Paėiškuos gavėnē",
+       "searchresults-title": "Paėiškuos gavėnē \"$1\"",
        "titlematches": "Straipsniu pavadėnėmu atitėkmenīs",
        "textmatches": "Poslapė torėnė atėtikmenīs",
        "notextmatches": "Juokiū poslapė teksta atitikmenū",
-       "prevn": "onkstesnius {{PLURAL:$1|$1}}",
-       "nextn": "paskesnius {{PLURAL:$1|$1}}",
+       "prevn": "pėrmesnius {{PLURAL:$1|$1}}",
+       "nextn": "paskuojus {{PLURAL:$1|$1}}",
+       "prev-page": "pėrmesnis poslapis",
+       "next-page": "paskesnis poslapis",
        "prevn-title": "{{PLURAL:$1|Onkstesnis $1 rezoltats|Onkstesnio $1 rezoltato|Onkstesni $1 rezoltatā}}",
-       "nextn-title": "{{PLURAL:$1|Kėts $1 rezoltats|Kėto $1 rezoltato|Kėti $1 rezoltatā}}",
-       "shown-title": "Ruodītė $1 {{PLURAL:$1|rezoltata|rezultato|rezoltatus}} poslapī",
+       "nextn-title": "{{PLURAL:$1|Kėts $1 gavėms|Kėtė $1 gavėmā|Kėtū $1 gavėmu}}",
+       "shown-title": "Ruodītė $1 {{PLURAL:$1|gavėni|gavėnius|gavėniū}} poslapī",
        "viewprevnext": "Veizėtė ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Poslapis pavadėnts „[[$1]]“ šėtuo wiki'''",
-       "searchmenu-new": "'''Sokortė poslapi „[[:$1]]“ šėtuo wiki!'''",
+       "searchmenu-new": "<strong>Padėrbtė poslapi, katros vadėntos „[[:$1]]“</strong> {{PLURAL:$2|0=|Dā veiziekat paėiškuo rasta straipsni|Dā veiziekat paėiškuos gavėnius.}}",
        "searchprofile-articles": "Torėnė poslapē",
-       "searchprofile-images": "Daugēlīpės terpės failā",
-       "searchprofile-everything": "Vėsks",
+       "searchprofile-images": "Multimedėjė",
+       "searchprofile-everything": "Vėskos",
        "searchprofile-advanced": "Prapliesta",
        "searchprofile-articles-tooltip": "Ėiškuotė čiuonās: $1",
-       "searchprofile-images-tooltip": "Ėiškuotė failu",
-       "searchprofile-everything-tooltip": "Ėiškuotė vėsuo torėnė (tuom patėm ėr aptarėma poslapiu)",
-       "searchprofile-advanced-tooltip": "Ėiškoutė skėrtingūsė vardū sėtīsė",
+       "searchprofile-images-tooltip": "Ėiškuotė abruozdieliu",
+       "searchprofile-everything-tooltip": "Ėiškuotė vėsuo torėnė (tēpuogi ėr aptarėma poslapiūs)",
+       "searchprofile-advanced-tooltip": "Ėiškoutė skėrtingūs vardū sėtīs",
        "search-result-size": "$1 ({{PLURAL:$2|1 žuodis|$2 žuodē|$2 žuodiu}})",
        "search-result-category-size": "{{PLURAL:$1|1 narīs|$1 nariū}} ({{PLURAL:$2|1 subkateguorėjuo|$2 subkateguorėju}}, {{PLURAL:$3|1 fails|$3 failu}})",
-       "search-redirect": "(paradresavėms $1)",
-       "search-section": "(skÄ«rios $1)",
+       "search-redirect": "(nosokėms $1)",
+       "search-section": "(skÄ\97rsnis $1)",
        "search-category": "(kateguorėjė $1)",
        "search-file-match": "(atėtėnk abruozdielė torėni)",
-       "search-suggest": "Mažo nuoriejot $1",
+       "search-suggest": "Mažnē mīslėjėt ka $1",
+       "search-rewritten": "Ruod kas ī soėiškuota pavadėnėmo „$1“. Mažnē geriau ėiškuotė „$2“?",
        "search-interwiki-caption": "Dokterėnē pruojektā",
-       "search-interwiki-default": "$1 rezoltatā:",
+       "search-interwiki-default": "Soėiškuota nug $1ː",
        "search-interwiki-more": "(daugiau)",
        "search-relatedarticle": "Sosėjėn",
        "searchrelated": "sosėjėn",
        "searchall": "vėsė",
        "showingresults": "Žemiau ruodoma lėgė '''$1''' {{PLURAL:$1|rezoltata|rezoltatu|rezoltatu}} pradedont #'''$2'''.",
-       "search-nonefound": "Nier rezoltatu, katrėi atitėktu ožklausėma.",
+       "showingresultsinrange": "Apatiuo ruod lėgė {{PLURAL:$1|<strong>1</strong> gavėnė|<strong>$1</strong> gavėniū}} nug #<strong>$2</strong> lėgė #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Gavėms <strong>$1</strong> nug <strong>$3</strong>|Gavėmā <strong>$1 - $2</strong> nug <strong>$3</strong>}}",
+       "search-nonefound": "Nier gavėniū, katrėi prėgoltom ožklausėmō.",
        "powersearch-legend": "Prapliesta paėiška",
-       "powersearch-ns": "Ėiškoutė vardū srėtīsė:",
+       "powersearch-ns": "Ėiškoutė vardū srėtīs:",
        "powersearch-togglelabel": "Pažīmietė:",
        "powersearch-toggleall": "Vėskon",
        "powersearch-togglenone": "Nieka",
-       "search-external": "Ėšuorėnė paėiška",
+       "powersearch-remember": "Atmintė parinkėma būsontē paėiškā.",
+       "search-external": "Laukėnė paėiška",
+       "searchdisabled": "{{SITENAME}} paėiška nasėgaun.\nTasgaties, ėiškuotė miegīkat par Gūla.\nAtminkat, ka anū paėiška gal būtė nab'vielība.",
+       "search-error": "Soklīdėms notėka baėiškontː $1",
        "preferences": "Nustatīmā",
        "mypreferences": "Mona nustatīmā",
        "prefs-edits": "Keitėmu skaitlius:",
+       "prefsnologintext2": "Prėsėjonkat, ka pakeistomiet sava nustatīmus.",
        "prefs-skin": "Ėšruoda",
        "skin-preview": "Parveiza",
        "datedefault": "Juokė pasėrėnkėma",
+       "prefs-user-pages": "Nauduotuojė poslapē",
        "prefs-personal": "Nauduotuojė pruopilis",
        "prefs-rc": "Vielībė̅jė pakeitėmā",
        "prefs-watchlist": "Keravuojamu sārašos",
-       "prefs-watchlist-days": "Kėik dėinū ruodītė keravuojamu sārašė:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-editwatchlist": "Keistė keravuojamu sāroša",
+       "prefs-editwatchlist-clear": "Ėštrintė keravuojamu sāroša",
+       "prefs-watchlist-days": "Kėik dėinū ruodītė keravuojamu sārošė:",
+       "prefs-watchlist-days-max": "(daugiausē $1 {{PLURAL:$1|dėina|dėinas|dėinū}})",
        "prefs-watchlist-edits": "Kėik pakeitėmu ruodītė ėšpliestiniam keravuojamu sārašė:",
-       "prefs-watchlist-edits-max": "(dėdliausias skaitlius: 1000)",
+       "prefs-watchlist-edits-max": "Dėdliausis skaitlios: 1000",
        "prefs-misc": "Ivairė nustatīmā",
        "prefs-resetpass": "Keistė slaptažuodi",
+       "prefs-changeemail": "Keistė el. pašta adresa",
+       "prefs-setemail": "El. pašta adresa parkeitėms",
+       "prefs-email": "El. pašta nustatīmā",
        "prefs-rendering": "Ėšruoda",
        "saveprefs": "Ėšsauguotė",
-       "restoreprefs": "Atstatītė vėsus numatītūsius nustatīmus",
+       "restoreprefs": "Grōžintė vėsus nustatīmus kāp bova pradiuo",
        "prefs-editing": "Redagavėms",
        "rows": "Eilotės:",
        "columns": "Štolpalē:",
-       "searchresultshead": "Paėiškuos nostatīmā",
+       "searchresultshead": "Paėiškuos nustatīmā",
        "stub-threshold": "Minimums <a href=\"#\" class=\"stub\">nabėngta poslapė</a> fuormatavėmō:",
-       "recentchangesdays": "Ruodomas dėinas vielībūju pakeitėmu sārašė:",
+       "stub-threshold-disabled": "Ėšjongta īr",
+       "recentchangesdays": "Ruodomas dėinas vielībūju pakeitėmu sārošė:",
        "recentchangesdays-max": "(daugiausē $1 {{PLURAL:$1|dėina|dėinū|dėinas}})",
-       "recentchangescount": "Numatītasā keitėmu skaitlius, ruodoms vielībūju keitėmu, poslapiu istuorėjėsė ė notėkėmu sarašūsė:",
+       "recentchangescount": "Ruoduoms keitėmu skaitliosː",
        "savedprefs": "Nostatīmā siekmėngā ėšsauguotė.",
-       "timezonelegend": "Čiesa zuona",
-       "localtime": "Vėitinis čiesos:",
-       "timezoneuseserverdefault": "Nauduotė palē nutīliejėma ėš serverė",
+       "timezonelegend": "Čiesa joustaː",
+       "localtime": "Vėitas čiesos:",
+       "timezoneuseserverdefault": "Tāp, kāp ruod serveris ($1)",
        "timezoneuseoffset": "Kėta (patikslėntė skėrtoma)",
        "servertime": "Serverė čiesos:",
        "guesstimezone": "Paimtė ėš naršīklės",
        "allowemail": "Lēstė siūstė el. gramuotelės ėš kėtū nauduotuoju",
        "prefs-searchoptions": "Ėiškuotė",
        "prefs-namespaces": "Vardū srėtīs",
-       "default": "palē nūtīliejėma",
-       "prefs-files": "Failā",
-       "youremail": "El. pašts:",
-       "username": "Nauduotuojė vards:",
-       "prefs-memberingroups": "{{PLURAL:$1|Gropės|Gropiu}} narīs:",
+       "default": "kāp prėgol",
+       "prefs-files": "Abruozdielē",
+       "prefs-custom-css": "Asabėšks CSS",
+       "prefs-custom-js": "Asabėšks JavaScript",
+       "prefs-emailconfirm-label": "Tėkrā tuokis el. paštos?",
+       "youremail": "El. paštos:",
+       "username": "{{GENDER:$1|Nauduotuojė vards}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Nauduotuos}} prėgol {{PLURAL:$1|skīriō|skīriams|skīriu}}:",
        "prefs-registration": "Ožsėregėstravėma čiesos:",
        "yourrealname": "Tėkros vards:",
        "yourlanguage": "Aplėnkuos kalba:",
        "yournick": "Pasėrinkts slapīvardis:",
        "badsig": "Neteisings parašas; patėkrinkėt HTML žīmės.",
        "badsiglength": "Tamstas parašos īr par ėlgs.\nAna gal sodarītė ne daugiau kāp $1 {{PLURAL:$1|sėmbuolis|sėmbuolē|sėmbuoliu}}.",
-       "yourgender": "Lītis:",
+       "yourgender": "Lītės:",
        "gender-unknown": "Nier nuruodīta",
        "gender-male": "Vīrs",
        "gender-female": "Muoterėška",
-       "email": "El. pašts",
+       "email": "El. paštos:",
        "prefs-help-realname": "Tėkrs vards nier privaluoms, vuo jēgo Tamsta ana ivesėt, ons bus nauduojams Tamstas darba pažīmiejėmō.",
-       "prefs-help-email": "El. pašta adresos nier privaloms, ale uns leid Tamstā gautė nauja slaptažuodi, jēgo pamėršuot kuoks uns bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė a nauduotuojė aptarėma poslapi neatsklėidont Tamstas tapatoma.",
+       "prefs-help-email": "El. pašta adresos nier būtėns, bat ons leid Tamstā gautė naujė slaptažuodi, jēgo pamėršuot kuoks ons bova, ė tēpuogi Tamsta galėt leistė kėtėims pasėiktė Tamsta par Tamstas nauduotuojė aba nauduotuojė aptarėma poslapi tāp, ka anėi nežėnuotom Tamstas el. pašta adresa.",
        "prefs-help-email-required": "Rēk el. pašta adresa",
-       "prefs-info": "Glavnuojė infuormacėjė",
+       "prefs-info": "Pagrindėnės žėnės",
        "prefs-i18n": "Kalbuos nustatīmā",
        "prefs-signature": "Parašos",
        "prefs-dateformat": "Datuos skvarma",
        "prefs-timeoffset": "Čiesa skėrtoms",
        "prefs-advancedediting": "Bendrė parametrā",
+       "prefs-editor": "Dėrbies",
        "prefs-preview": "Parveiza",
        "prefs-advancedrc": "Papėlduomė nustatīmā",
        "prefs-advancedrendering": "Papėlduomė nustatīmā",
        "userrights-lookup-user": "Tvarkītė nauduotuojė gropės",
        "userrights-user-editname": "Iveskėt nauduotuojė varda:",
        "editusergroup": "Redagoutė nauduotuojė gropes",
-       "editinguser": "Taisuoms nauduotuos '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+       "editinguser": "Teisiu keitėms {{GENDER:$1|Nauduotuojō}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Keistė nauduotuoju gropes",
        "saveusergroups": "Sauguotė nauduotuoju gropes",
        "userrights-groupsmember": "Narīs:",
-       "userrights-reason": "Prīžastis:",
+       "userrights-reason": "Dingstės:",
        "group": "Gropė:",
        "group-user": "Nauduotuojē",
        "group-autoconfirmed": "Autuomatėškā patvirtėntė nauduotuojē",
        "right-edit": "Keistė poslapius",
        "right-upload": "Ikeltė failus",
        "right-delete": "Trintė poslapius",
-       "newuserlogpage": "Nauduotuojė kūrėma regėstros",
+       "newuserlogpage": "Nauduotuojė kūrėma sārošos",
        "rightslog": "Nauduotuoju teisiu istuorėjė",
        "rightslogtext": "Pateikiams nauduotuoju teisiu pakeitėmu sārašos.",
+       "action-read": "skaitītė ton poslapi",
        "action-edit": "redagoutė ta poslapi",
+       "action-createpage": "dėrbtė poslapius",
        "action-move": "parvadintė šėta poslapi",
        "action-move-subpages": "parvadintė šėta poslapi ėr anuo dalės",
        "action-move-categorypages": "parvadintė kateguorėjes",
        "action-userrights": "keistė vėsū nauduotuoju teises",
        "nchanges": "$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}",
        "enhancedrc-history": "istuorėjė",
-       "recentchanges": "VielÄ«bÄ\97Ì\85jė pakeitėmā",
-       "recentchanges-legend": "Vielībuju pakeitėmu pasėrinkėmā",
-       "recentchanges-summary": "Keravuokėt patius vielībiausius wiki pakeitėmus tamė poslapī.",
+       "recentchanges": "VielÄ«bÄ\97Ì\84jė pakeitėmā",
+       "recentchanges-legend": "Vielībūju pakeitėmu pasėrinkėmā",
+       "recentchanges-summary": "Keravuokat patius vielībuosius wiki pakeitėmus tamė poslapi.",
        "recentchanges-feed-description": "Keravuokėt patius vielībiausius pakeitėmus pruojektō tamė šaltėnī.",
-       "recentchanges-label-newpage": "Šėto keitėmo sukurts naus poslapis",
+       "recentchanges-label-newpage": "Šėtuo keitėmuo padėrbts naus poslapis",
        "recentchanges-label-minor": "Tas īr mažos pataisīms",
        "recentchanges-label-bot": "Šėta keitėma padėrba autuomatėnė pruograma",
-       "recentchanges-label-unpatrolled": "Tas keitėms da nebova patikrints",
-       "recentchanges-label-plusminus": "Ton baitu skaitliom pakeists straipsnė apmiers",
+       "recentchanges-label-unpatrolled": "Ons pakeitėms dā nabova oždabuots",
+       "recentchanges-label-plusminus": "Anuo baitu skaitliom pakeists straipsnė apmiers",
        "recentchanges-legend-heading": "'''Pāiškėnėmā:'''",
-       "rcnotefrom": "Žemiau īr pakeitėma pradedant nū <b>$2</b> (ruodom lėgė <b>$1</b> pakeitėmu).",
-       "rclistfrom": "Ruodītė naujus pakeitėmus pradedant nū $3 $2",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dā veiziekat [[Special:NewPages|vielībūju straipsniu sāroša]])",
+       "rcnotefrom": "Apatiuo {{PLURAL:$5|ruodoms pakeitėms|ruodomė pakeitėmā}} nug <strong>$3, $4</strong> (ne daugiau kāp <strong>$1</strong> ruodoma īr).",
+       "rclistfrom": "Ruodītė vielībus pakeitėmus pradedont nug $3 $2",
        "rcshowhideminor": "$1 mažus pakeitėmus",
        "rcshowhideminor-show": "Ruodītė",
        "rcshowhideminor-hide": "Kavuotė",
        "rcshowhideliu": "$1 prėsėjongusiūm nauduotuojūm pakeitėmus",
        "rcshowhideliu-show": "Ruodītė",
        "rcshowhideliu-hide": "Kavuotė",
-       "rcshowhideanons": "$1 anuonimėnius nauduotuojus",
+       "rcshowhideanons": "$1 nažėnomus nauduotuojus",
        "rcshowhideanons-show": "Ruodītė",
        "rcshowhideanons-hide": "Kavuotė",
-       "rcshowhidepatr": "$1 patikrėntus pakeitėmus",
+       "rcshowhidepatr": "$1 sodabuotus pakeitėmus",
        "rcshowhidepatr-show": "Ruodītė",
        "rcshowhidepatr-hide": "Kavuotė",
        "rcshowhidemine": "$1 mona pakeitėmus",
        "rcshowhidemine-show": "Ruodītė",
        "rcshowhidemine-hide": "Kavuotė",
-       "rclinks": "Ruodītė paskotėnius $1 pakeitėmu par paskotėnė̅sēs $2 dėinū<br />$3",
+       "rclinks": "Ruodītė vielībus $1 pakeitėmu par paskuojės $2 dėinas<br />$3",
        "diff": "skėrt",
        "hist": "ist",
        "hide": "Kavuotė",
        "newpageletter": "N",
        "boteditletter": "r",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|keravuojontis nauduotuos|keravuojontīs nauduotuojē|keravuojontiu nauduotuoju}}]",
-       "rc_categories": "Ruodītė tėk šėtas kateguorėjės (atskirkit nauduodamė „|“)",
+       "rc_categories": "Ruodītė tėk tas kateguorėjės (atskirkat nauduojont „|“)",
        "rc_categories_any": "Bikuokė",
        "rc-change-size-new": "$1 {{PLURAL:$1|baits|baitā|baitu}} pu pakeitėma",
        "newsectionsummary": "/* $1 */ naus skėrsnelis",
-       "rc-enhanced-expand": "Ruodītė detales",
-       "rc-enhanced-hide": "Kavuotė detales",
+       "rc-enhanced-expand": "Ruodītė smolkmenas",
+       "rc-enhanced-hide": "Kavuotė smolkmenas",
        "rc-old-title": "pradiuo padėrbta kāp \"$1\"",
        "recentchangeslinked": "Sosėjėn pakeitėmā",
        "recentchangeslinked-feed": "Sosėjėn pakeitėmā",
        "recentchangeslinked-toolbox": "Sosėjėn pakeitėmā",
-       "recentchangeslinked-title": "So $1 sosėje pakeitimā",
-       "recentchangeslinked-summary": "Šėtom specēliajam poslapi ruodomė vielībė̅jė pakeitėmā poslapiūs, i katrūs īr nuruodoma. Poslapē ėš Tamstas [[Special:Watchlist|keravuojamu sāraša]] īr '''pastuorėntė'''.",
-       "recentchangeslinked-page": "Poslapė pavadinėms:",
-       "recentchangeslinked-to": "Ruodītė so doutu poslapiu sosėjosiu puslapiu pakeitėmus",
-       "upload": "Ikeltė faila",
+       "recentchangeslinked-title": "So $1 sosėjē pakeitėmā",
+       "recentchangeslinked-summary": "Tamė specēliam poslapi sogol vielībė̄jė pakeitėmā poslapiūs, i katrūs īr nuruodoma. Poslapē ėš Tamstas [[Special:Watchlist|keravuojamu sāroša]] ėšruod '''stuorā'''.",
+       "recentchangeslinked-page": "Poslapė pavadėnėms:",
+       "recentchangeslinked-to": "Ruodītė anūs poslapiu pakeitėmus, katrėi prėgol prī douta poslapė",
+       "upload": "Ožkrautė abruozdieli",
        "uploadbtn": "Ikeltė faila",
        "reuploaddesc": "Sogrīžtė i ikielima fuorma.",
        "uploadnologin": "Naprėsėjongis",
-       "uploadnologintext": "Nuoriedamė ikeltė faila, torėt būt [[Special:UserLogin|prėsėjongis]].",
+       "uploadnologintext": "$1, ka ožkrautomiet abruozdielius.",
        "upload_directory_read_only": "Tėnklapė serveris nagal rašītė i ikielima papke ($1).",
        "uploaderror": "Ikielima soklīdims",
+       "upload-recreate-warning": "<strong>Atėdės: Abruozdielis tuokio vardo bova ėštrints aba parvadints.</strong>\n\nApatiuo ėšdieta kas ė kāp:",
        "uploadtext": "Nauduokėtės žemiau pateikta skvarma kū ikeltomėt failus.\nNuoriedamė parveizietė ar ėiškuotė unkstiau ikeltū abruozdieliu, ēkėt i [[Special:FileList|ikeltū failu saraša]], ikielėmā ėr ėštrīnėmā īr ožregėstroujamė [[Special:Log/upload|ikielėmu istuorėjuo]], trīnėmā - [[Special:Log/delete|trīnėmu istuorėjuo]].\n\nNuoriedamė panauduotė ikelta faila poslapī, nauduokėt tuokės nūoruodas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' aba\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' tėisiuogėnē nūruodā i faila.",
-       "upload-permitted": "Laistėnė failu tėpā: $1.",
-       "upload-preferred": "Pageidajamė failu tėpā: $1.",
-       "upload-prohibited": "Oždraustė failu tėpā: $1.",
-       "uploadlogpage": "Ikielimu istuorėjė",
+       "upload-permitted": "{{PLURAL:$2|Galams skvarmas būds|Galamė skvarmas būdā}}: $1.",
+       "upload-preferred": "{{PLURAL:$2|Velėms skvarmas būds|Velėmė skvarmas būdā}}: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Nagalams skvarmas būds|Nagalamė skvarmas būdā}}: $1.",
+       "uploadlogpage": "Ožkruovėmu istuorėjė",
        "uploadlogpagetext": "Žemiau pateikiam paskotėniu failu ikielima istuorėjė.",
-       "filename": "Faila vards",
-       "filedesc": "Kuomentars",
-       "fileuploadsummary": "Kuomentars:",
+       "filename": "Abruozdėlė vards",
+       "filedesc": "Pāiškėnėms",
+       "fileuploadsummary": "Pāiškėnėms:",
+       "filereuploadsummary": "Abruozdielė pakeitėmāː",
+       "filestatus": "Derbieju teisėsː",
        "filesource": "Šaltėnis:",
        "ignorewarning": "Nekrėiptė diemiesė i parspiejėma ėr ėšauguotė faila vėsvėin.",
        "ignorewarnings": "Nekrėiptė diemesė i vėsuokius perspiejimos",
        "minlength1": "Faila pavadinėms tor būtė nuors vėina raidie.",
        "illegalfilename": "Faila vardė „$1“ īr sėmbuoliu, katrėi nier leidami poslapė pavadinėmūs. Prašuom parvadėntė faila ė miegītė ikeltė ana par naujė.",
        "badfilename": "Faila pavadinėms pakeists i „$1“.",
-       "filetype-missing": "Fails netor galūnės (kāp pavīzdīs „.jpg“).",
+       "filetype-missing": "Abruozdielis netor galūnės (kāp ontā „.jpg“).",
+       "illegal-filename": "Nagalams abruozdielė vards.",
        "unknown-error": "Nutėka nežėnuoma klaida.",
        "emptyfile": "Panašu, ka fails, katra ikieliet īr toščias. Tas gal būtė diel klaiduos faila pavadėnėmė. Pasėtėkrinkėt a tėkrā nuorėt ikeltė šėta faila.",
-       "fileexists": "Fails so tuokiu vardu jau īr, prašuom paveizėtė <strong>[[:$1]]</strong>, jēgo nesat ožtėkrėnts, a nuorit ana parrašītė.\n[[$1|thumb]]",
+       "fileexists": "Abruozdielis so tuokio vardo jau īr, prašuom paveizietė <strong>[[:$1]]</strong>, jēgo nasat tvirts, a nuorat ana parrašītė.\n[[$1|thumb]]",
        "fileexists-extension": "Fails so pavėdiu pavadinėmu jau īr: [[$2|thumb]]\n* Ikeliama faila pavadinėms: <strong>[[:$1]]</strong>\n* Jau esontė faila pavadinėms: <strong>[[:$2]]</strong>\nPrašuom ėšsėrėnktė kėta varda.",
        "file-exists-duplicate": "Tas fails īr {{PLURAL:$1|šėta faila|šėtū failu}} doblėkats:",
-       "uploadwarning": "Diemesė",
-       "savefile": "Ėšsauguotė faila",
-       "uploaddisabled": "Ikielėmā oždraustė.",
-       "uploaddisabledtext": "Failu ikielėmā oždraustė īr.",
+       "uploadwarning": "Atėdės",
+       "savefile": "Ėšsauguotė abruozdieli",
+       "uploaddisabled": "Ožkruovėma ožgintė īr.",
+       "uploaddisabledtext": "Abruozdieliu ožkruovėmā ožgintė īr.",
        "uploadscripted": "Šėts failos tor HTML a programėni kuoda, katros gal būtė klaidėngā soprasts interneta naršīklės.",
        "uploadvirus": "Šėtom faile īr virosas! Ėšsamiau: $1",
        "upload-source": "Faila šaltėnis",
-       "sourcefilename": "Ikeliams fails",
-       "destfilename": "Nuorims faila pavadinims",
-       "upload-maxfilesize": "Dėdliausias faila dėdoms: $1",
+       "sourcefilename": "Ožkraunoms abruozdielisː",
+       "destfilename": "Nuorims abruozdielė pavadėnėmsː",
+       "upload-maxfilesize": "Dėdliausis abruozdielė dėdloms: $1",
        "upload-description": "Abruozdielė aprašīms",
        "upload-options": "Nostatīmā īkelėmō",
-       "watchthisupload": "Keravuotė šėta faila",
-       "upload-success-subj": "Ikelt siekmėngā",
-       "upload-failure-subj": "Ikielėma bieda",
+       "watchthisupload": "Keravuotė ton abruozdieli",
+       "upload-success-subj": "Ožkruovėms pavīka gerā",
+       "upload-failure-subj": "Ožkruovėma bieda",
        "upload-proto-error": "Nateisėngs protuokols",
        "upload-proto-error-text": "Nutuolinē ikielims raikalaun, kū URL prasėdietu <code>http://</code> o <code>ftp://</code>.",
-       "upload-file-error": "Vėdėnė klaida",
+       "upload-file-error": "Vėduojė bieda",
        "upload-file-error-text": "Ivīka vėdėnė klaida bandont sokortė laikinaji faila serverī. Prašuom sosėsėiktė so sistemuos admėnėstratuoriom.",
        "upload-misc-error": "Nažėnuoma ikielėma klaida",
        "upload-misc-error-text": "Ivīka nežėnuoma klaida vīkstont ikielėmō. Prašuom patėkrėnt, kū URL teisėngs teipuogi pasėikiams ėr pamiegīkit viel. Jē bieda ėšlėik, sosėsėikėt so sistemuos admėnėstratuoriom.",
+       "upload-dialog-title": "Ožkrautė abruozdieli",
+       "upload-dialog-error": "Notėka klaida",
+       "upload-dialog-button-cancel": "Pabengtė",
+       "upload-dialog-button-done": "Padėrbt",
+       "upload-dialog-button-save": "Ėšsauguotė",
+       "upload-dialog-button-upload": "Ožkrautė",
+       "upload-dialog-label-select-file": "Rinktėis abruozdieli",
+       "upload-dialog-label-infoform-title": "Aple",
+       "upload-dialog-label-infoform-name": "Pavadėnėms",
+       "upload-dialog-label-infoform-description": "Aprašīms",
+       "upload-dialog-label-usage-title": "Nauduojėms",
+       "upload-dialog-label-usage-filename": "Abruozdielė pavadėnėms",
+       "backend-fail-notexists": "Abruozdielė „$1“ nie.",
+       "backend-fail-alreadyexists": "Abruozdielis „$1“ jau īr.",
+       "img-auth-accessdenied": "Ožgint prė̄tė",
        "upload-curl-error6": "Napavīkst pasėiktė URL",
        "upload-curl-error6-text": "Pataikts URL nagal būt pasėikts. Prašuom patėkrėntė, kū URL īr teisings ėr svetainė veik.",
        "upload-curl-error28": "Par ėlgā ikeliama",
        "upload-curl-error28-text": "Atsakontė svetainė ožtronk par ėlgā. Patėkrėnkėt, a svetainė veik, palaukėt tropoti ė vielē pamiegīkit. Mažo Tamstā rēktu pamiegītė ne tuokio apkrauto čieso.",
-       "license": "Licensėjė",
-       "license-header": "Licensėjė",
+       "license": "Lėcencėjėː",
+       "license-header": "Lėcencėjė",
        "nolicense": "Nepasėrėnkt",
        "licenses-edit": "Keistė lėcencėju parametrus",
        "license-nopreview": "(Parveiza negalėma)",
        "upload_source_file": " (fails Tamstas kompioterī)",
        "listfiles-delete": "trintė",
        "listfiles-summary": "Tas specēlus poslapis ruod vėsus ikeltus failus.\nPalē numatīma paskiausē ikeltė failā īr ruoduomė sāroša vėršou.\nPaspaude ont štolpelė ontraštės pakeisėt ėšruokavėma.",
-       "imgfile": "fails",
+       "imgfile": "abruozdielis",
        "listfiles": "Failu sārašos",
        "listfiles_thumb": "Somažints",
        "listfiles_date": "Data",
        "listfiles_name": "Pavadinėms",
        "listfiles_user": "Nauduotuos",
-       "listfiles_size": "Dėdoms",
+       "listfiles_size": "Dėdloms",
        "listfiles_description": "Aprašīms",
        "listfiles_count": "Versėjės",
        "listfiles-latestversion": "Vielība atmaina",
        "listfiles-latestversion-yes": "Tēp",
        "listfiles-latestversion-no": "Ne",
-       "file-anchor-link": "Fails",
+       "file-anchor-link": "Abruozdielis",
        "filehist": "Abruozdielė istuorėjė",
-       "filehist-help": "Paspauskėt ont datas/čiesa, ka paveizietomėt faila tuoki, kokis ons bova tū čiesu.",
+       "filehist-help": "Paspauskėt ont deinas/čiesa, ka paveizietomėt abruozdieli, kāp ons ėšruodė pradiuo.",
        "filehist-deleteall": "trintė vėsus",
-       "filehist-deleteone": "trintė šėta",
-       "filehist-revert": "sogōžėntė",
-       "filehist-current": "dabartėnis",
-       "filehist-datetime": "Data/Čiesos",
-       "filehist-thumb": "Miniatiūra",
-       "filehist-thumbtext": "Versėjės $1 miniatiūra",
+       "filehist-deleteone": "trintė",
+       "filehist-revert": "sogrōžintė",
+       "filehist-current": "vielībs",
+       "filehist-datetime": "Dėina/Čiesos",
+       "filehist-thumb": "Pamažėnėms",
+       "filehist-thumbtext": "Atmaina $1 pamažėnėms",
        "filehist-nothumb": "Somažinima nie",
        "filehist-user": "Nauduotuos",
        "filehist-dimensions": "Mierā",
-       "filehist-filesize": "Faila dėdoms",
+       "filehist-filesize": "Abruozdielė dėdloms",
        "filehist-comment": "Pāiškėnėms",
-       "imagelinks": "Failu nūruodas",
-       "linkstoimage": "{{PLURAL:$1|Šėts poslapis|Šėtė poslapē}} nuruod i šėta faila:",
-       "nolinkstoimage": "I faila neruod anėjuoks poslapis.",
+       "imagelinks": "Abruozdieliu nauduojėms",
+       "linkstoimage": "{{PLURAL:$1|Ons poslapis|Anėi poslapē}} ruod ton abruozdielin:",
+       "nolinkstoimage": "Abruozdielėp neruod anėjuoks poslapis.",
        "morelinkstoimage": "Veizietė [[Special:WhatLinksHere/$1|daugiau nūruodu]] ton abruozdielėn.",
        "sharedupload": "Tas fails īr ėš $1 ė gal būtė nauduojams kėtūs pruojektūs.",
-       "sharedupload-desc-here": "Tas fails īr ėš $1 ė gal būtė nauduojams kėtūsė pruojektūsė.\nInfuormacėjė ėš [$2 faila aprašīma poslapė] īr pateikta žemiau.",
-       "uploadnewversion-linktext": "Ikeltė nauja faila versėje",
+       "sharedupload-desc-here": "Tas abruozdielis īr nug $1 ė gal būtė nauduojams kėtūs poslapiūs.\nŽinės nug [$2 abruozdielė aprašīma poslapė] prėgol apatiuo.",
+       "uploadnewversion-linktext": "Ožkrautė nauji abruozdielė atmaina",
        "shared-repo-from": "ėš $1",
        "shared-repo": "bendruos saugīklas",
-       "upload-disallowed-here": "Negalėt perrašītė ton faila.",
+       "upload-disallowed-here": "Nie galama ožkrautė abruozdieli ont vėršous.",
        "filerevert": "Sogrōžėntė $1",
        "filerevert-legend": "Faila sogrōžinėms",
        "filerevert-intro": "<span class=\"plainlinks\">Tamsta grōžėnat '''[[Media:$1|$1]]''' i versėje $4 ($2, $3).</span>",
        "filerevert-submit": "Grōžėntė",
        "filedelete": "Trintė $1",
        "filedelete-legend": "Trintė faila",
-       "filedelete-intro": "Tamsta roušeties ėštrėntė faila '''[[Media:$1|$1]]''' so vėsa anuo istuorėjė.",
-       "filedelete-comment": "Prīžastis:",
+       "filedelete-intro": "Tamsta ėštrinsat '''[[Media:$1|$1]]''' so vėsa anuo istuorėjė.",
+       "filedelete-comment": "Dingstės:",
        "filedelete-submit": "Trintė",
        "filedelete-success": "'''$1''' bova ėštrints.",
        "filedelete-nofile": "'''$1''' nēsa.",
-       "filedelete-otherreason": "Kėta/papėlduoma prīžastis:",
-       "filedelete-reason-otherlist": "Kėta prīžastis",
-       "filedelete-reason-dropdown": "*Dažnas trīnėma prīžastīs\n** Autorīstės teisiu pažeidėmā\n** Pasėkartuojontis fails",
-       "filedelete-edit-reasonlist": "Keistė trīnėma prīžastis",
+       "filedelete-otherreason": "Kėta/papėlduoma dingstės:",
+       "filedelete-reason-otherlist": "Kėta dingstės",
+       "filedelete-reason-dropdown": "*Tonkės trīnėma dingstisː\n** Dėrbė̄ju teisiu pažeidėmā\n** Līgē tuokis jau īr",
+       "filedelete-edit-reasonlist": "Keistė trīnėma dingstis",
        "mimesearch": "MIME paėiška",
        "mimesearch-summary": "Šėts poslapis laid ruodīti failus vagol anū MIME tipa. Iveskėt: torėnėtips/potipis, pvz. <code>image/jpeg</code>.",
-       "mimetype": "MIME tips:",
+       "mimetype": "MIME būds:",
        "download": "parsėsiūstė",
        "unwatchedpages": "Nekeravuojėmė poslapē",
        "listredirects": "Paradresavėmu sārašos",
        "randompage-nopages": "Šėtuo vardū srėti nier anėjuokiu poslapiu.",
        "randomincategory": "Bikuoks poslapis kateguorėjuo",
        "randomincategory-category": "Kateguorėjė:",
-       "randomredirect": "Bikuoks paradresavėms",
-       "randomredirect-nopages": "Šėtuo vardū srėti nier anėjuokiū paradresavėmu.",
-       "statistics": "Statėstėka",
-       "statistics-header-pages": "Poslapiu statėstėka",
-       "statistics-header-edits": "Redagavėmu statėstėka",
-       "statistics-header-users": "Nauduotuoju statėstėka",
-       "statistics-header-hooks": "Kėta statėstėka",
+       "randomincategory-legend": "Bikuoks poslapis kateguorėjuo",
+       "randomincategory-submit": "Ēk",
+       "randomredirect": "Bikuoks nusokims",
+       "randomredirect-nopages": "Šėtuo vardū srėtie nie anėjuokiu nusokėmu.",
+       "statistics": "Skaitlē",
+       "statistics-header-pages": "Poslapiu sklaitlē",
+       "statistics-header-edits": "Keitėmu skaitlē",
+       "statistics-header-users": "Nauduotuoju skaitlē",
+       "statistics-header-hooks": "Kėtė skaitlē",
        "statistics-articles": "Torėnė poslapē",
        "statistics-pages": "Poslapē",
        "statistics-pages-desc": "Vėsė poslapē, terp anū: aptarėma, nukrėipėmu ė kėtė.",
-       "statistics-files": "Ikeltė failā",
+       "statistics-files": "Ožkrautė abruozdielē",
        "statistics-edits": "Poslapiu redagavėmu skaitlius nū {{SITENAME}} sokūrėma",
        "statistics-edits-average": "Vėdotėnis keitėmu skaitlius poslapiō",
        "statistics-users": "Ožsėregėstravosiu [[Special:ListUsers|nauduotuoju]]",
        "statistics-users-active": "Aktīviu nauduotuoju",
        "statistics-users-active-desc": "Nauduotuojē, katrėi par {{PLURAL:$1|paskiausė dėina|paskiausė 2 dėinė|paskiausės $1 dėinas|paskiausiu $1 dėinū}} padėrba keitėmu",
-       "doubleredirects": "Dvėgobė paradresavėmā",
+       "pageswithprop-submit": "Ēk",
+       "doubleredirects": "Dvėgobė nusokėmā",
        "doubleredirectstext": "Tėi paradresavėmā ruod i kėtus paradresavėma poslapius. Kuožnuo eilotē pamėnavuots pėrmasā ėr ontrasā paradresavėmā, tēpuogi ontrojė paradresavėma paskėrtis, katra paprastā ė paruod i tėkraji poslapi, i katra pėrmasā paradresavėms ė torietu ruodītė.",
-       "double-redirect-fixed-move": "[[$1]] bova parkelts, daba tas īr paradresavėms i [[$2]]",
+       "double-redirect-fixed-move": "Poslapis [[$1]] bova parvadints.\nOns atnaujėnts ė daba ruod i [[$2]].",
        "brokenredirects": "Neveikiantīs paradresavėmā",
        "brokenredirectstext": "Žemiau ėšvardintė paradresavėma poslapē ruod i nasontius poslapius:",
        "brokenredirects-edit": "redagoutė",
        "brokenredirects-delete": "trintė",
        "withoutinterwiki": "Poslapē ba kalbū nūruodu",
        "withoutinterwiki-summary": "Šėtė poslapē neruod i kėtū kalbū versėjės:",
+       "withoutinterwiki-legend": "Prīšdielis",
        "withoutinterwiki-submit": "Ruodītė",
        "fewestrevisions": "Straipsnē so mažiausė pakeitėmu",
        "nbytes": "$1 {{PLURAL:$1|baits|baitā|baitu}}",
        "nlinks": "$1 {{PLURAL:$1|nūruoda|nūruodas|nūruodu}}",
        "nmembers": "$1 {{PLURAL:$1|narīs|narē|nariū}}",
        "nrevisions": "$1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}}",
-       "nviews": "$1 {{PLURAL:$1|paruodīms|paruodīmā|paruodīmu}}",
+       "ntransclusions": "nauduonams $1 {{PLURAL:$1|poslapi|poslapiūs|poslapiu}}",
        "specialpage-empty": "Šėtā ataskaitā nie rezoltatu.",
-       "lonelypages": "Vėinišė straipsnē",
+       "lonelypages": "Straipsnē-sėratas",
        "lonelypagestext": "I šėtuos poslapius nier nūruodu ėš kėtū šėta pruojekta poslapiu.",
-       "uncategorizedpages": "Poslapē, napriskėrtė juokē kateguorėjē",
-       "uncategorizedcategories": "Kateguorėjės, naprėskėrtas juokē kateguorėjē",
-       "uncategorizedimages": "Abruozdielē, nepriskėrtė juokē kateguorėjē",
-       "uncategorizedtemplates": "Šabluonā, nepriskėrtė juokē kateguorėjē",
+       "uncategorizedpages": "Poslapē, naprėgolōs juokē kateguorėjē",
+       "uncategorizedcategories": "Kateguorėjės, naprėgolōs juokē kateguorėjē",
+       "uncategorizedimages": "Abruozdielē, naprėgolōs juokē kateguorėjē",
+       "uncategorizedtemplates": "Šabluonā, naprėgolōs juokē kateguorėjē",
        "unusedcategories": "Nenauduojamas kateguorėjės",
        "unusedimages": "Nenauduojamė failā",
        "wantedcategories": "Nuorėmiausės kateguorėjės",
        "mostlinkedtemplates": "Daugiausē ruodomė šabluonā",
        "mostcategories": "Straipsnē so daugiausē kateguorėju",
        "mostimages": "Daugiausē ruodomė abruozdielē",
+       "mostinterwikis": "Straipsnē so daugiausē interwiki nūruodu",
        "mostrevisions": "Straipsnē so daugiausē keitėmu",
        "prefixindex": "Vėsė poslapē so prīšdielio",
        "shortpages": "Trompiausė poslapē",
        "deadendpages": "Straipsnē-aklavėitės",
        "deadendpagestext": "Tė poslapē netor nūruodu i kėtus poslapius šėtom pruojektė.",
        "protectedpages": "Apsauguotė poslapē",
+       "protectedpages-noredirect": "Kavuotė nusokėmus",
        "protectedpagesempty": "Šėtu čiesu nier apsauguots anėjuoks fails so šėtās parametrās.",
+       "protectedpages-timestamp": "Čiesos",
+       "protectedpages-page": "Poslapis",
+       "protectedpages-expiry": "Beng vēktė",
+       "protectedpages-performer": "Kas apsergiejė",
+       "protectedpages-params": "Apsergiejėma žėnės",
+       "protectedpages-reason": "Dingstės",
+       "protectedpages-unknown-timestamp": "Nežėnuoms",
+       "protectedpages-unknown-performer": "Nežėnuoms nauduotuos",
        "protectedtitles": "Apsauguotė pavadinėmā",
        "protectedtitlesempty": "Šėtou čieso nier anėjuokė pavadinėma, katros apsauguots tās parametrās.",
-       "listusers": "Sārašos nauduotuoju",
+       "listusers": "Sārošos nauduotuoju",
        "listusers-editsonly": "Ruodītė tėktās nauduotuojus katrėi īr atlėkė pakeitėmus",
-       "usercreated": "Paskīra īr padėrbta $1 $2",
-       "newpages": "Naujausė straipsnē",
+       "usereditcount": "{{PLURAL:$1|pataisīms|pataisīmā|pataisīmu}}",
+       "usercreated": "{{GENDER:$3|Padėrba paskīra}} $1 $2",
+       "newpages": "Vielībė̄jė straipsnē",
        "newpages-username": "Nauduotuojė vards:",
        "ancientpages": "Seniausė poslapē",
        "move": "Parvadintė",
-       "movethispage": "Parvadintė šėta poslapi",
+       "movethispage": "Parvadintė ton poslapi",
        "unusedimagestext": "Primenam, kū kėtas svetainės gal būtė nuruodiosės i abruozdieli tėisiogėniu URL, no vėstėik gal būtė šėtom sārašė, nuors ėr īr aktīvē naudounams.",
        "unusedcategoriestext": "Šėtū kateguorėju poslapē sokortė, nuors juoks kėts straipsnis a kateguorėjė ana nenauduo.",
        "notargettitle": "Nenuruodīts objekts",
        "notargettext": "Tamsta nenuruodiet nuorima poslapė a nauduotuojė,\nkatram ivīkdītė šėta funkcėjė.",
+       "nopagetitle": "Nie tuokė poslapė",
        "pager-newer-n": "$1 {{PLURAL:$1|paskesnis|paskesni|paskesniū}}",
-       "pager-older-n": "{{PLURAL:$1|senesnis|senesni|senesniū}}",
-       "booksources": "Knīngu šaltinē",
-       "booksources-search-legend": "Knīngu šaltiniu paėiška",
+       "pager-older-n": "{{PLURAL:$1|paskesnis|paskesnė|paskesniū}}",
+       "booksources": "Kningu šaltėnē",
+       "booksources-search-legend": "Kningu šaltėniu paėiška",
        "specialloguserlabel": "Nauduotuos:",
        "speciallogtitlelabel": "Pavadėnims:",
-       "log": "Specēliūju veiksmū istuorėjė",
+       "log": "Specēliūju vīksmū istuorėjė",
        "all-logs-page": "Vėsos istuorėjės",
        "alllogstext": "Bėndra idietu failu, ėštrīnėmu, ožrakėnėmu, bluokavėmu ė prėvėlėju soteikėmu istuorėjė.\nĪr galėmībė somažintė rezoltatu skaitliu patėkslėnont vēksma tėpa, nauduotuojė a sosėjosė poslapė.",
        "logempty": "Istuorėjuo nier anėjuokiū atitinkontiu atsėtėkimu.",
        "showhideselectedlogentries": "Ruodītė/kavuotė sāraša ponktus, katrūs pasėrėnkot",
        "allpages": "Vėsė straipsnē",
        "nextpage": "Kėts poslapis ($1)",
-       "prevpage": "Unkstesnis poslapis ($1)",
-       "allpagesfrom": "Ruodītė poslapius pradedont nu:",
+       "prevpage": "Onkstesnis poslapis ($1)",
+       "allpagesfrom": "Ruodītė poslapius pradedont nug:",
        "allpagesto": "Ruodītė poslapius, basėbengėnčios so:",
        "allarticles": "Vėsė straipsnē",
        "allinnamespace": "Vėsė poslapē (srėtis - $1)",
-       "allpagessubmit": "Tink",
+       "allpagessubmit": "Dėrbtė",
        "allpagesprefix": "Ruodītė poslapios so prīdelēs:",
        "allpagesbadtitle": "Douts poslapė pavadėnėms īr neteisings a tor terpkalbėnė a terppruojektėnė prīdielė. Anamė īr vėns a kelė žėnklā, katrū negal nauduotė pavadėnėmūs.",
        "allpages-bad-ns": "{{SITENAME}} netor „$1“ vardū srėtėis.",
-       "allpages-hide-redirects": "Kavuotė nukrėipėmus",
+       "allpages-hide-redirects": "Kavuotė nusokėmus",
        "categories": "Kateguorėjės",
        "categoriespagetext": "Pruojekte īr šėtuos kateguorėjės.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
        "categoriesfrom": "Ruodītė kateguorėjės pradedont nu:",
-       "deletedcontributions": "Panaikėnts nauduotuojė duovis",
-       "deletedcontributions-title": "Ėštrėnts nauduotuojė duovis",
+       "deletedcontributions": "Ėštrints nauduotuojė duovis",
+       "deletedcontributions-title": "Ėštrints nauduotuojė duovis",
        "linksearch": "Ėšuorėnės nūruodas",
-       "linksearch-ns": "Vardū srėtis:",
+       "linksearch-ns": "Vardū srėtės:",
        "linksearch-ok": "Ėiškuotė",
        "linksearch-line": "$1 īr sosėits ėš $2",
-       "listusersfrom": "Ruodītė nauduotuojus pradedont nū:",
+       "listusersfrom": "Ruodītė nauduotuojus pradedont nug:",
        "listusers-submit": "Ruodītė",
        "listusers-noresult": "Nerast anėjuokiū nauduotuoju.",
+       "listusers-blocked": "(ožgints)",
+       "activeusers": "Vēkōs nauduotuojē",
+       "activeusers-hidebots": "Kavuotė robuotus",
+       "activeusers-hidesysops": "Kavuotė admėnėstratorius",
+       "activeusers-noresult": "Nerast anėjuokiu nauduotuoju.",
        "listgrouprights": "Nauduotuoju gropiu teisės",
        "listgrouprights-group": "Gropė",
-       "listgrouprights-members": "(nariū sārašos)",
+       "listgrouprights-rights": "Teisės",
+       "listgrouprights-members": "(nariū sārošos)",
        "mailnologin": "Nier adresa",
        "mailnologintext": "Tamstā reik būtė [[Special:UserLogin|prisėjongosiam]]\nė tor būtė ivests teisings el. pašta adresos Tamstas [[Special:Preferences|nustatīmuos]],\nkū siōstomiet el. gruomatas kėtėm nauduotuojam.",
        "emailuser": "Rašītė gruomata šėtam nauduotuojō",
-       "emailpage": "Siūstė el. gruomata nauduotuojui",
+       "emailuser-title-target": "Rašītė gromata {{GENDER:$1|tam nauduotuojuo}}",
+       "emailuser-title-notarget": "Rašītė gromata",
+       "defemailsubject": "{{SITENAME}} - gromata nug nauduotuojė $1",
+       "usermaildisabled": "El. paštos ėšjongts īr",
        "noemailtitle": "Nier el. pašta adreso",
-       "noemailtext": "Šėts nauduotuos nier nuruodės teisėnga el.pašta adresa a īr pasėrinkės negautė el. pašta ėš kėtū nauduotuoju.",
+       "noemailtext": "Tas nauduotuos nie davis sava el. pašta adresa.",
+       "nowikiemailtext": "Tas nauduotuos nenuor gautė el. gromatu nug kėtū nauduotuoju.",
+       "emailusername": "Nauduotuojė vards:",
+       "emailusernamesubmit": "Siōstė",
        "email-legend": "Siūstė elektruonėne gruomata kėtam {{SITENAME}} nauduotuojō",
        "emailfrom": "Nū:",
+       "emailto": "Kamː",
+       "emailsubject": "Aple konː",
        "emailmessage": "Pranešėms:",
        "emailsend": "Siōstė",
        "emailccme": "Siōstė monei mona gruomatas kuopėjė.",
        "emailccsubject": "Gruomatas kuopėjė nauduotuojō $1: $2",
        "emailsent": "El. gruomata ėšsiōsta",
        "emailsenttext": "Tamstas el. pašta žėnotė ėšsiōsta.",
-       "watchlist": "Keravuojamė straipsnē",
+       "emailuserfooter": "Nauduotuos $1 nosiontė gromata nauduotuojuo $2 par \"{{int:emailuser}}\" rakonda svetainie {{SITENAME}}.",
+       "watchlist": "Keravuojamė poslapē",
        "mywatchlist": "Keravuojamė poslapē",
        "watchlistfor2": "Nauduotuojė $1 ($2)",
        "nowatchlist": "Netorėt anėvėina keravuojama poslapė.",
-       "watchlistanontext": "Prašuom $1, ka parveizietomėt a pakeistomiet elementus sava keravuojamu sārašė.",
+       "watchlistanontext": "Prėsėjonkat, ka parveizietomėt a pakeistomiet dalīkus sava keravuojamu sārošė.",
        "watchnologin": "Neprisėjongės",
        "addwatch": "Prikergtė pri keravuojamu",
-       "addedwatchtext": "Poslapis \"[[$1]]\" idiets i [[Special:Watchlist|keravuojamu sāraša]].\nBūsantīs poslapė ėr atėtinkama aptarėma poslapė pakeitėmā bus paruoduomė keravuojamu poslapiu sārašė,\ntēpuogi bus '''parīškintė''' [[Special:RecentChanges|vielībūju pakeitėmu sārašė]], kū ėšsėskėrtom ėš kėtū straipsniu.\nJēgo bikumet ožsėnuorietomiet liautėis keravuotė straipsnė, spauskat \"nebkeravuotė\" vėršotėniam meniū.",
+       "addedwatchtext": "Poslapis [[:$1]] ė anuo aptarėms prėkergto Tamstas [[Special:Watchlist|keravuojamu sārošon]].",
+       "addedwatchtext-short": "Poslapis „$1“ daba prėgol prī Tamstas keravuojamu.",
        "removewatch": "Ėšmestė ėš kieravuojamu",
-       "removedwatchtext": "Poslapis „[[:$1]]“ pašalėnts ėš [[Special:Watchlist|Tamstas keravuojamu sāraša]].",
+       "removedwatchtext": "Poslapis [[:$1]] ė anuo aptarėms atkergto nug Tamstas [[Special:Watchlist|keravuojamu sāroša]].",
        "removedwatchtext-short": "Poslapis \"$1\" bova ėšmests ėš kieravuojamu.",
        "watch": "Keravuotė",
-       "watchthispage": "Keravuotė šėta poslapė",
-       "unwatch": "Nebkeravuotė",
-       "unwatchthispage": "Nustuotė keravuotė",
+       "watchthispage": "Keravuotė ton poslapi",
+       "unwatch": "Nab'keravuotė",
+       "unwatchthispage": "Bengtė keravuotė",
        "notanarticle": "Ne torėnė poslapis",
        "watchlist-details": "Keravuojama $1 {{PLURAL:$1|poslapis|$1 poslapē|$1 poslapiu}} neskaitlioujant aptarėmu poslapiu.",
        "wlheader-enotif": "El. pašta primėnėmā ijongtė īr.",
        "wlnote": "Ruoduoma '''$1''' paskotėniu pakeitėmu, atlėktū par '''$2''' paskotėniu adīnu.",
        "wlshowlast": "Ruodītė paskotėniu $1 adīnu, $2 dėinū a  pakeitėmus",
        "watchlist-options": "Keravuojamu sāroša pasėrinkėmā",
-       "watching": "Itraukiama i keravuojamu sāraša...",
+       "watching": "Kergiama keravuojamu sārošon...",
        "unwatching": "Šalėnama ėš keravuojamu sāraša...",
        "enotif_reset": "Pažīmietė vėsus poslapius kāp aplonkītus",
        "enotif_impersonal_salutation": "{{SITENAME}} nauduotuos",
        "created": "sokūrė",
        "changed": "pakeitė",
        "deletepage": "Trintė poslapi",
-       "confirm": "Ožtvėrtinu",
-       "excontent": "boves torinīs: „$1“",
-       "excontentauthor": "boves torinīs: „$1“ (redagava tėktās „[[Special:Contributions/$2|$2]]“)",
-       "exbeforeblank": "priš ėštrinant torinīs bova: „$1“",
-       "delete-confirm": "Ėštrėnta \"$1\"",
+       "confirm": "Tėkrā tāp",
+       "excontent": "bovis torėnīs: „$1“",
+       "excontentauthor": "bovis torėnīs: „$1“ (dėrba tėktās „[[Special:Contributions/$2|$2]]“)",
+       "exbeforeblank": "prīš ėštrinont torėnīs bova: „$1“",
+       "delete-confirm": "Trintė „$1“",
        "delete-legend": "Trīnėms",
-       "historywarning": "Diemesė: Trėnams poslapis tor istuorėjė:",
+       "historywarning": "<strong>Atėdės:</strong> Poslapis, katron nuorat ėštrintė, bova pakeists $1 {{PLURAL:$1|sīki|sīkius|sīkiu}}:",
        "confirmdeletetext": "Tamsta pasėrėnkuot ėštrėntė poslapi a abruozdieli draugum so vėsa anuo istuorėjė.\nPrašuom patvėrtėntė, kū Tamsta tėkrā nuorėt šėtu padarītė, žėnuot aple galėmus padarėnius, ė kū Tamsta šėtā daruot atsėžvelgdamė i [[{{MediaWiki:Policy-url}}|puolitėka]].",
-       "actioncomplete": "Vēksmos atlėkts īr",
-       "actionfailed": "Veiksmos atšaukts īr",
-       "deletedtext": "„$1“ ėštrints.\nPaskotiniu pašalinėmu istuorėjė - $2.",
-       "dellogpage": "Pašalinėmu istuorėjė",
-       "dellogpagetext": "Žemiau īr pateikiams paskotiniu ėštrīnimu sārašos.",
-       "deletionlog": "pašalinėmu istuorėjė",
-       "reverted": "Atkorta i onkstesne versėje",
-       "deletecomment": "Prīžastis:",
-       "deleteotherreason": "Kėta/papėlduoma prižastis:",
-       "deletereasonotherlist": "Kėta prižastis",
-       "deletereason-dropdown": "*Dažnas trīnėma prižastīs\n** Autorė prašīms\n** Autorėniu teisiu pažeidėms\n** Vandalėzmos",
-       "delete-edit-reasonlist": "Keistė trėnėma prīžastis",
-       "rollback": "Atmestė pakeitėmos",
+       "actioncomplete": "Vēksmos padėrbts īr",
+       "actionfailed": "Vēksmos atšaukts īr",
+       "deletedtext": "„$1“ ėštrints īr.\nVielībūju trīnėmu istuorėjė - $2.",
+       "dellogpage": "Ėštrīnėmu sārošos",
+       "dellogpagetext": "Apatiuo gol patīs vielībė̄jė ėštrīnėmā.",
+       "deletionlog": "ėštrīnėmu sārošos",
+       "reverted": "Grōžinta tāp, kāp ėšruodė pėrmiou",
+       "deletecomment": "Dingstės:",
+       "deleteotherreason": "Kėta/papėlduoma dingstės:",
+       "deletereasonotherlist": "Kėta dingstės",
+       "deletereason-dropdown": "* Tonkiausės ėštrėnėma dingstisː\n** Šiokšlėnėms\n** Zaunū/bikuo rašīms\n** Pažeistas dėrbieju teisės\n** Patėis nauduotuojė prašīms\n** Bluogs poslapė nusokėms",
+       "delete-edit-reasonlist": "Mainītė trīnėma dingstis",
+       "rollback": "Atmestė pakeitėmus",
        "rollbacklink": "atmestė",
-       "rollbacklinkcount": "atmestė $1 {{PLURAL:$1|keitėms|keitėmo|keitėmus|keitėmu}}",
-       "rollbackfailed": "Atmetims napavīka",
+       "rollbacklinkcount": "sogrōžintė $1 {{PLURAL:$1|pakeitėms|pakeitėmo|pakeitėmus|pakeitėmu}}",
+       "rollbacklinkcount-morethan": "sogrōžintė daugiau kāp $1 {{PLURAL:$1|pakeitėma|pakeitėmus|pakeitėmu}}",
+       "rollbackfailed": "Atmetėms nasėgava",
        "cantrollback": "Negalėma atmestė redagavėma; paskotinis keitės nauduotuos īr tuo poslapė autorius.",
-       "alreadyrolled": "Nepavīka atmestė paskotėnė [[User:$2|$2]] ([[User talk:$2|Aptarėms]]) darīta straipsnė [[$1]] keitėma;\nkažkas jau pakeitė straipsnė arba sospiejė pėrmiesnis atmestė keitėma.\n\nGalėnis keitėms dėrbts nauduotuojė [[User:$3|$3]] ([[User talk:$3|Aptarėms]]).",
+       "alreadyrolled": "Nė̄šēn otgrōžintė pakeitėma, [[:$1]] katra padėrba [[User:$2|$2]] ([[User talk:$2|aptarėms]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nkažkas ton jau padėrba pėrmiou.\n\nVielībiausā ton poslapė pakeitėms padėrbts [[User:$3|$3]] ([[User talk:$3|aptarėms]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) īr.",
        "editcomment": "Padėrbėma pāiškėnėms bova: „''$1''“.",
-       "revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarėms]]) pakeitėms; sogrōžėnta nauduotuojė [[User:$1|$1]] versėjė",
-       "rollback-success": "Atmestė $1 keitėmā; grōžėnta i paskotėne $2 versėje.",
-       "sessionfailure": "Atruod kū īr biedū so Tamstas prėsėjongėma sesėjė; šėts veiksmos bova atšaukts kāp atsargoma prėimonė priš sesėjės vuogėma.\nPrašoum paspaustė „atgal“ ėr parkrautė poslapi ėš katruo atiejot, ė pamieginkėt vielē.",
-       "protectlogpage": "Rakinėmu istuorėjė",
-       "protectlogtext": "Žemiau īr poslapė ožrakinėmu tēpuogi atrakinėmu istuorėjė. Nūnā veikiantiu poslapiu apsaugū sāraša sorasėt [[Special:ProtectedPages|apsauguotu poslapiu sarašė]].",
-       "protectedarticle": "ožrakina „[[$1]]“",
-       "modifiedarticleprotection": "pakeists „[[$1]]“ apsauguos līgis",
-       "unprotectedarticle": "atrakėna „[[$1]]“",
+       "revertpage": "Atmests [[Special:Contributions/$2|$2]] ([[User talk:$2|aptarėms]]) pakeitėms; sogrōžints atmains, katron padėrba nauduotuos [[User:$1|$1]]",
+       "rollback-success": "Atmestė $1 padėrbtė keitėmā; grōžints $2 padėrbts atmains.",
+       "sessionfailure": "Atruod ka īr biedū so Tamstas prėsėjongėmo; tas vēksmos bova grōžints kāp atsargoma prėimonė nu sesėjės vuogėma.\nPrašoum mīgtė „atgal“ ėr parkrautė poslapi ėš katruo atiejėt, ė pamieginkėt apent.",
+       "changecontentmodel-title-label": "Poslapė pavadėnėms",
+       "changecontentmodel-reason-label": "Dingstės:",
+       "logentry-contentmodel-change-revertlink": "sogrōžintė",
+       "logentry-contentmodel-change-revert": "sogrōžintė",
+       "protectlogpage": "Apsergiejėmu istuorėjė",
+       "protectlogtext": "Apatiuo īr poslapė ožsergiejėma tēpuogi atsergiejėma istuorėjė. Nūnā vēkiantiu poslapiu apsargū sāroša sorasat [[Special:ProtectedPages|apsergietu poslapiu sārošė]].",
+       "protectedarticle": "apsergiejė „[[$1]]“",
+       "modifiedarticleprotection": "pamainīts „[[$1]]“ apserguos miers",
+       "unprotectedarticle": "nujėmė apserga nug „[[$1]]“",
+       "movedarticleprotection": "apsergiejėma nustatīma parkeltė nug \"[[$2]]\" i \"[[$1]]\"",
        "protect-title": "Nustatuoms apsauguojėma līgis poslapiō „$1“",
        "prot_1movedto2": "Straipsnis [[$1]] parvadints i [[$2]]",
-       "protect-legend": "Ožrakinėma patvėrtinėms",
-       "protectcomment": "Prīžastis:",
-       "protectexpiry": "Beng galiuotė:",
+       "protect-legend": "Tėkrā tuokis apsergiejėms?",
+       "protectcomment": "Dingstės:",
+       "protectexpiry": "Beng vēktėː",
        "protect_expiry_invalid": "Galiuojėma čiesos īr nateisėngs.",
        "protect_expiry_old": "Galiuojėma čiesos īr praėitī.",
        "protect-text": "Čė Tamsta galėt paveizėtė ė pakeistė apsauguos līgi šėtuo poslapio '''$1'''.",
        "protect-level-autoconfirmed": "Blokoutė naujē prisėregėstravosius ė neregėstroutus nauduotuojus",
        "protect-level-sysop": "Tėktās adminėstratuorē",
        "protect-summary-cascade": "pakuopėnė apsauga",
-       "protect-expiring": "beng galiuotė $1 (UTC)",
-       "protect-expiring-local": "beng galiuotė $1",
-       "protect-expiry-indefinite": "nerėbuotā",
-       "protect-cascade": "Apsaugotė poslapius, itrauktus i šėta poslapi (pakuopėnė apsauga).",
+       "protect-expiring": "beng vēktė $1 (UTC)",
+       "protect-expiring-local": "beng vēktė $1",
+       "protect-expiry-indefinite": "par omžius",
+       "protect-cascade": "Apsergietė poslapius, katrėi prėgol ton poslapin (pakuopėnė apsauga).",
        "protect-cantedit": "Tamsta negalėt keistė šėta poslapė apsauguojėma līgiu, kagongi netorėt teisiu anuo redagoutė.",
        "protect-othertime": "Kėts čiesos:",
        "protect-othertime-op": "kėts čiesos",
        "protect-existing-expiry": "Esams rakėnėma ožsėbengėma čiesos: $3, $2",
        "protect-existing-expiry-infinity": "Dabartėnis galiuojėma čiesos: omžiams",
-       "protect-otherreason": "Kėta/papėlduoma prīžastis:",
-       "protect-otherreason-op": "Kėta/papėlduoma prīžastis",
-       "protect-dropdown": "*Iprastas ožrakinėma prīžastīs\n** Intensīvus vandalėzmos\n** Intensīvus nūruodu reklamavėms\n** Neproduktīvi redagavėma vaina\n** Dėdlė svarboma poslapis",
-       "protect-edit-reasonlist": "Keistė ožrakinėma prīžastis",
-       "protect-expiry-options": "1 adīna:1 hour,1 dėina:1 day,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mieniesē:3 months,6 mieniesē:6 months,1 metā:1 year,par omžius:infinite",
+       "protect-otherreason": "Kėta/papėlduoma dingstės:",
+       "protect-otherreason-op": "Kėta/papėlduoma dingstės",
+       "protect-dropdown": "*Tonkės apsergiejėma dingstis\n** Tonkē gadėnams\n** Tonkē šiokšlėnams\n** Remezis diel pakeitėmu\n** Dėdlė svarboma poslapis",
+       "protect-edit-reasonlist": "Mainītė apsergiejėma dingstis",
+       "protect-expiry-options": "1 adīna:1 hour,1 dėina:1 day,1 nedielė:1 week,2 nedieli:2 weeks,1 mienou:1 month,3 mieniesē:3 months,6 mieniesē:6 months,1 metā:1 year,par omžius:infinite",
        "restriction-type": "Laidėms:",
        "restriction-level": "Aprėbuojėma līgis:",
-       "minimum-size": "Minėmalus dėdoms",
-       "maximum-size": "Dėdliausis dėdoms",
+       "minimum-size": "Mažiausis dėdloms",
+       "maximum-size": "Dėdliausis dėdloms",
        "pagesize": "(baitās)",
-       "restriction-edit": "Redagavėms",
+       "restriction-edit": "Dėrbėms",
        "restriction-move": "Parvadėnėms",
-       "restriction-create": "Sokortė",
-       "restriction-upload": "Ikeltė",
-       "restriction-level-sysop": "pėlnā apsauguota",
-       "restriction-level-autoconfirmed": "posiau apsauguota",
+       "restriction-create": "Padėrbtė",
+       "restriction-upload": "Ožkrautė",
+       "restriction-level-sysop": "pilnā apsergieta",
+       "restriction-level-autoconfirmed": "posiou apsergieta",
        "restriction-level-all": "bikuoks",
-       "undelete": "Atstatītė ėštrinta poslapi",
-       "undeletepage": "Ruodītė ė atkortė ėštrintos poslapios",
-       "viewdeletedpage": "Ruodītė ėštrintos poslapios",
+       "undelete": "Veizietė ėštrintus poslapius",
+       "undeletepage": "Ruodītė ė grōžintė ėštrintus poslapius",
+       "viewdeletedpage": "Veizietė ėštrintus poslapius",
        "undeletepagetext": "Žemiau ėšvardėntė poslapē īr ėštrėntė, no da laikuomi\narkīve, tudie anie gal būt atstatītė. Arkīvs gal būt perēodėškā valuoms.",
        "undeleteextrahelp": "Nuoriedamė atkortė vėsa poslapi, palikit vėsas varnales napažīmietas ėr\nspauskėt '''''Atkortė'''''. Nuoriedamiė atlėktė pasirėnktini atstatīma, pažīmiekit varnales šėtū versėju, katras nuorietomiet atstatītė, ėr spauskėt '''''Atkortė'''''. Paspaudus\n'''''Ėš naujė''''' bos ėšvalītuos vėsos varnalės ėr kuomentara lauks.",
        "undeleterevisions": "$1 {{PLURAL:$1|versėjė|versėjės|versėju}} soarkīvouta",
        "undeletehistorynoadmin": "Šėts straipsnis bova ėštrints. Trīnima prižastis\nruodoma žemiau, teipuogi kas redagava poslapi\nlėgė trīnima. Ėštrintū poslapiu tekstos īr galėmas tėk admėnėstratuoriam.",
        "undelete-revision": "Ėštrėnta $1 versėjė, katra $4 d. $5 padėrba $3:",
        "undeleterevision-missing": "Neteisėnga a dėngosė versėjė. Tamsta mažo torėt bluoga nūruoda, a versėjė bova atkorta a pašalėnta ėš arkīva.",
-       "undeletebtn": "Atkortė",
-       "undeletelink": "veizietė/atstatītė",
+       "undeletebtn": "Grōžintė",
+       "undeletelink": "veizietė/grōžintė",
        "undeleteviewlink": "veizietė",
        "undeleteinvert": "Žīmietė prīšėngā",
-       "undeletecomment": "Kuomentars:",
-       "undeletedrevisions": "atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}}",
-       "undeletedrevisions-files": "atkorta $1 {{PLURAL:$1|versėjė|versėjės|versėju}} ėr $2 {{PLURAL:$2|fails|failā|failu}}",
-       "undeletedfiles": "atkorta $1 {{PLURAL:$1|fails|failā|failu}}",
-       "undeletedpage": "'''$1 bova atkurts'''\nParveizėkiet [[Special:Log/delete|trīnimu sāraša]], nuoriedamė rastė paskotėniu trīnimu ėr atkorėmu sāraša.",
-       "undelete-header": "Veizėkit [[Special:Log/delete|trīnima istuorėjuo]] paskoteniausē ėštrintū poslapiu.",
+       "undeletecomment": "Dingstės:",
+       "undeletedrevisions": "$1 {{PLURAL:$1|pakeitėms sogrōžints|pakeitėmā sogrōžintė|pakeitėmu sogrōžintu}} īr",
+       "undeletedrevisions-files": "sogrōžintaː $1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}} ėr $2 {{PLURAL:$2|abruozdielis|abruozdielē|abruozdieliu}}",
+       "undeletedfiles": "sogrōžintaː {{PLURAL:$1|abruozdielis|abruozdielē|abruozdieliu}}",
+       "undeletedpage": "'''$1 bova pargōžints'''\nParveizėkat [[Special:Log/delete|trīnėmu sāroša]], ka regietomiet, kas dabā ėšrinta/grōžinta īr.",
+       "undelete-header": "Veizėkat [[Special:Log/delete|trīnėma istuorėjuo]] paskoteniausē ėštrintus poslapius.",
        "undelete-search-box": "Ėiškuotė ėštrintū poslapiu",
        "undelete-search-prefix": "Ruodītė poslapios pradedant so:",
        "undelete-search-submit": "Ėiškuotė",
        "undelete-no-results": "Nabova rasta juokė atėtėnkontė poslapė ėštrīnima arkīve.",
        "undelete-show-file-confirm": "A ėš tėkrā nuorėt parveizietė ėštrėnta faila „<nowiki>$1</nowiki>“ $2 $3 versėjė?",
        "undelete-show-file-submit": "Tēp",
-       "namespace": "Vardū srėtis:",
+       "namespace": "Vardū srėtės:",
        "invert": "Žīmietė prīšėngā",
-       "namespace_association": "Sosėrėšos vardū srėtės",
+       "namespace_association": "Prėgolontė vardū srėtės",
        "blanknamespace": "(Pagrėndinė)",
        "contributions": "Nauduotuojė duovis",
        "contributions-title": "Nauduotuojė $1 duovis",
        "mycontris": "Duovis",
        "contribsub2": "Nauduotuojė $1 ($2)",
        "uctop": " (vielībs)",
-       "month": "Nu mienėsė (ėr onkstiau):",
-       "year": "Nu metu (ėr onkstiau):",
+       "month": "Nug mienėsė (ėr onkstiau):",
+       "year": "Nug metu (ėr onkstiau):",
        "sp-contributions-newbies": "Ruodītė tėk naujū prieteliu duovios",
        "sp-contributions-newbies-sub": "Naujuoms paskīruoms",
        "sp-contributions-newbies-title": "Nauduotuoju keitėmā naujuoms paskīruoms",
        "sp-contributions-blocklog": "Bluokavėmu istuorėjė",
        "sp-contributions-suppresslog": "panaikėnts nauduotuojė duovis",
-       "sp-contributions-deleted": "Panaikėnts nauduotuojė duovis",
+       "sp-contributions-deleted": "ėštrints nauduotuojė duovis",
        "sp-contributions-uploads": "abruozdielē",
        "sp-contributions-logs": "Specēliūju veiksmū istuorėjė",
        "sp-contributions-talk": "Aptarėms",
-       "sp-contributions-userrights": "Nauduotuoju teisiu valdīms",
+       "sp-contributions-userrights": "nauduotuoju teisiu rėkiavėms",
+       "sp-contributions-blocked-notice": "Nauduotuos ožgints īr.\nApatiuo paruodīta kas ė kāpː",
+       "sp-contributions-blocked-notice-anon": "Tas IP adresos ožgints īr.\nApatiuo paruodīta kas ė kāpː",
        "sp-contributions-search": "Ėiškuotė duovė",
        "sp-contributions-username": "IP adresos a nauduotuojė vards:",
        "sp-contributions-toponly": "Ruodītė tėktās paskiausius keitėmus",
        "whatlinkshere": "Sosėjėn straipsnē",
        "whatlinkshere-title": "Poslapē, katrėi ruod i \"$1\"",
        "whatlinkshere-page": "Poslapis:",
-       "linkshere": "Šėtė poslapē ruod i '''[[:$1]]''':",
+       "linkshere": "Anėi poslapē ruod i '''[[:$1]]''':",
        "nolinkshere": "I '''[[:$1]]''' nūruodu nier.",
        "nolinkshere-ns": "Nurodītuo vardū srėtī anė vėins poslapis neruod i '''[[:$1]]'''.",
-       "isredirect": "nukreipēmasės poslapis",
-       "istemplate": "iterpims",
-       "isimage": "faila nūruoda",
-       "whatlinkshere-prev": "$1 {{PLURAL:$1|onkstesnis|onkstesni|onkstesniū}}",
+       "isredirect": "nusokėma poslapis",
+       "istemplate": "īspraudėms",
+       "isimage": "abruozdielė nūruoda",
+       "whatlinkshere-prev": "$1 {{PLURAL:$1|pėrmesnis|pėrmesnė|pėrmesniū}}",
        "whatlinkshere-next": "$1 {{PLURAL:$1|kėts|kėtė|kėtū}}",
        "whatlinkshere-links": "← nūruodas",
-       "whatlinkshere-hideredirs": "$1 nukreipėmus",
+       "whatlinkshere-hideredirs": "$1 nusokėmus",
        "whatlinkshere-hidetrans": "$1 itraukėmus",
        "whatlinkshere-hidelinks": "$1 nūruodas",
        "whatlinkshere-hideimages": "$1 abruozdieliu nūruodas",
-       "whatlinkshere-filters": "Fėltrā",
-       "block": "Ožblokoutė nauduotuoja",
-       "unblock": "Atblokoutė nauduotuoja",
-       "blockip": "Ožblokoutė nauduotuoja",
-       "blockip-legend": "Blokoutė nauduotuoja",
+       "whatlinkshere-filters": "Kuošeklē",
+       "block": "Ožgintė nauduotuoji",
+       "unblock": "Nauduotuojė ožgīnėma bengtė",
+       "blockip": "Ožgintė {{GENDER:$1|nauduotoji}}",
+       "blockip-legend": "Ožgintė nauduotuoji",
        "blockiptext": "Nauduokėt šėta fuorma noriedamė oždraustė redagavėma teises nuruodīto IP adreso a nauduotuojo. Tas torietu būt atlėikama tam, kū sostabdītomiet vandalėzma, ė vagol [[{{ns:project}}:Puolitėka|puolitėka]].\nŽemiau nuruodīkėt tėkslē prižastė.",
        "ipaddressorusername": "IP adresos a nauduotuojė vards",
-       "ipbexpiry": "Galiuojėma čiesos",
-       "ipbreason": "Prīžastis:",
-       "ipbreason-dropdown": "*Dažniausės bluokavėma prižastīs\n** Melagėngas infuormacėjės rašīms\n** Torėnė trīnims ėš poslapiu\n** Spaminims\n** Zaunu/bikuo rašīms i poslapios\n** Gondinėmā/Pėktžuodiavėmā\n** Pėktnaudžiavėms paskėruomis\n** Netėnkams nauduotuojė vards",
-       "ipbcreateaccount": "Nelaistė kortė paskīrū",
-       "ipbemailban": "Nelaistė nauduotuojō siōstė el. gruomatas",
+       "ipbexpiry": "Vēkėma čiesos",
+       "ipbreason": "Dingstės:",
+       "ipbreason-dropdown": "*Tonkiausės ožgīnėma dingstisː\n** Neteisībės rašīms\n** Torėnė trīnims ėš poslapiu\n** Šiokšlėnėms\n** Zaunu/bikuo rašīms i poslapius\n** Gondėnėmā/Pėktžuodiavėmā\n** Nauduojėms daugiaus kāp vėinuos paskīruos\n** Natinkams nauduotuojė vards",
+       "ipbcreateaccount": "Nelaistė dėrbtė paskīrū",
+       "ipbemailban": "Nelaistė nauduotuojō siōstė el. gromatas",
        "ipbenableautoblock": "Autuomatėškā blokoutė tuo nauduotuojė paskiausē nauduota IP adresa, ė bikuokius paskesnius IP adresus, ėš katrū ons miegin redagoutė",
-       "ipbsubmit": "Blokoutė šėta nauduotuoja",
+       "ipbsubmit": "Ožgintė ton nauduotuoji",
        "ipbother": "Kėtuoks čiesos",
-       "ipboptions": "2 adīnas:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielės:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite",
+       "ipboptions": "2 adīnė:2 hours,1 dėina:1 day,3 dėinas:3 days,1 nedielė:1 week,2 nedielė:2 weeks,1 mienou:1 month,3 mienesē:3 months,6 mienesē:6 months,1 metā:1 year,omžėms:infinite",
        "ipbwatchuser": "Keravuotė tuo nauduotuojė poslapi ėr anuo aptarėma poslapi",
        "ipb-change-block": "Parblokoutė ta nauduotuoja so šėtās nustatīmās",
-       "ipb-confirm": "Tėkrā blokoutė",
+       "ipb-confirm": "Tėkrā ožgintė?",
        "badipaddress": "Nelaistėns IP adresos",
-       "blockipsuccesssub": "Ožblokavėms pavīka",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bova ožblokouts.\n<br />Aplonkīkėt [[Special:BlockList|IP blokavėmu istuorėjė]] noriedamė ana parveizėtė.",
-       "ipb-edit-dropdown": "Redagoutė blokavėmu prīžastis",
-       "ipb-unblock-addr": "Atblokoutė $1",
-       "ipb-unblock": "Atblokoutė nauduotuojė varda a IP adresa",
-       "ipb-blocklist": "Ruodītė asontius bluokavėmus",
+       "blockipsuccesssub": "Nauduotuos bova ožgints",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bova ožgints.\n<br />Aplonkīkat [[Special:BlockList|IP ožginėmu istuorėjė]], jēgo nuorat anou parveizietė.",
+       "ipb-edit-dropdown": "Mainītė ožgīnėma dingstis",
+       "ipb-unblock-addr": "Nug $1 nujėmtė ožgīnėma",
+       "ipb-unblock": "Nug nauduotuojė varda a IP adresa nujėmtė ožgīnėma",
+       "ipb-blocklist": "Ruodītė vielībousius ožgīnėmus",
        "ipb-blocklist-contribs": "$1 duovis",
-       "unblockip": "Atbluokoutė nauduotuoja",
+       "unblockip": "Nauduotuojė ožgīnėma bengtė",
        "unblockiptext": "Nauduokėt šėta fuorma, kū atkortomiet rašīma teises\nonkstiau ožbluokoutam IP adresō a nauduotuojō.",
-       "ipusubmit": "Atblokoutė šėta adresa",
-       "unblocked": "[[User:$1|$1]] bova atbluokouts",
-       "unblocked-range": "$1 bova atblokouts.",
-       "unblocked-id": "Bluokavėms $1 bova pašalėnts",
-       "unblocked-ip": "[[Special:Contributions/$1|$1]] bova atblokouts.",
-       "blocklist": "Ožblokoutė nauduotuojē",
-       "ipblocklist": "Ožblokoutė nauduotuojē",
-       "ipblocklist-legend": "Rastė ožblokouta nauduotuoja",
-       "blocklist-expiry": "Beng galiuotė",
-       "blocklist-by": "Blokoutuos",
-       "blocklist-params": "Blokavėma nustatīmā",
-       "blocklist-reason": "Prīžastis",
+       "ipusubmit": "Ton ožgīnėma nojėmtė",
+       "unblocked": "Nauduotuojė [[User:$1|$1]] ožgīnėms nug dėrbėma bengės",
+       "unblocked-range": "$1 ožgīnėms nug dėrbėma bengės",
+       "unblocked-id": "$1 ožgīnėms nug dėrbėma bengės",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] ožgīnėms nug dėrbėma bengės.",
+       "blocklist": "Ožgintė nauduotuojē",
+       "ipblocklist": "Ožgintė nauduotuojē",
+       "ipblocklist-legend": "Rastė ožginta nauduotuoji",
+       "blocklist-timestamp": "Čiesos",
+       "blocklist-target": "Kon",
+       "blocklist-expiry": "Beng vēktė",
+       "blocklist-by": "Kas ožgīnė",
+       "blocklist-params": "Ožgīnėma nustatīmā",
+       "blocklist-reason": "Dingstės",
        "ipblocklist-submit": "Ėiškuotė",
+       "ipblocklist-localblock": "Ožgīnėms vėituo",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Kėts ožgīnėms|Kėtė ožgīnėmā}}",
        "infiniteblock": "neribuotā",
-       "expiringblock": "beng galiuotė $1 $2",
+       "expiringblock": "beng vēktė $1 $2",
        "anononlyblock": "vėn anuonėmā",
-       "noautoblockblock": "autuomatinis blokavėms ėšjongts",
-       "createaccountblock": "paskīrū korėms oždrausts īr",
-       "emailblock": "el. pašts ožblokouts",
+       "noautoblockblock": "savaimėšks ožgīnėms nevēk",
+       "createaccountblock": "paskīrū dėrbėms ožgints īr",
+       "emailblock": "el. paštos ožgints īr",
        "blocklist-nousertalk": "negal rašītė sava aptarėmė",
        "ipblocklist-empty": "Blokavėmu sarašos toščias.",
        "ipblocklist-no-results": "Prašuoms IP adresos a nauduotuojė vards ožblokouts nier.",
-       "blocklink": "ožblokoutė",
-       "unblocklink": "atbluokoutė",
+       "blocklink": "ožgintė",
+       "unblocklink": "ožgīnėma bengtė",
        "change-blocklink": "keistė bluokavėma nustatīmus",
        "contribslink": "duovis",
        "emaillink": "siōstė pašta",
        "autoblocker": "Autuomatėnis ožbluokavėms, nes dalėnaties IP adreso so nauduotuojo \"$1\". Prīžastės - \"$2\".",
-       "blocklogpage": "Ožblokavėmu istuorėjė",
-       "blocklogentry": "ožblokava „[[$1]]“, blokavėma čiesos - $2 $3",
+       "blocklogpage": "Ožgīnėmu sārošos",
+       "blocklog-showlog": "Nauduotuos jau bova ožgints pėrmiou.\nApatiuo veiziekat kas ė kāpː",
+       "blocklogentry": "ožgīnė „[[$1]]“ nug dėrbėma, tas vēk ton čiesa - $2 $3",
        "reblock-logentry": "pakeistė [[$1]] bluokavėma nustatīmā, naus bluokavėma čiesos īr $2 $3",
        "blocklogtext": "Čė īr nauduotuoju blokavėma ėr atblokavėma sārašos. Autuomatėškā blokoutė IP adresā nier ėšvardėntė. Jeigu nuorėt paveizėtė nūnā blokoujamus adresus, veizėkėt [[Special:BlockList|IP ožbluokavėmu istuorėjė]].",
-       "unblocklogentry": "atbluokava $1",
-       "block-log-flags-anononly": "vėn anonėmėnē nauduotuojē",
+       "unblocklogentry": "nug $1 nujėmtė ožgīnėma",
+       "block-log-flags-anononly": "tėktās anuonėmėnē nauduotuojē",
        "block-log-flags-nocreate": "privėlėju kūrėms ėšjungts",
-       "block-log-flags-noautoblock": "automatėnis blokavėms ėšjungts",
-       "block-log-flags-noemail": "e-pašts bluokouts īr",
+       "block-log-flags-noautoblock": "savaimėšks ožgīnėms nevēk",
+       "block-log-flags-noemail": "el. paštos ožgints īr",
+       "block-log-flags-nousertalk": "nagal rašītė sava aptarėma poslapin",
+       "block-log-flags-angry-autoblock": "vēk prapliests ožgīnėms",
+       "block-log-flags-hiddenname": "nauduotuojė vards pakavuots īr",
        "ipb_expiry_invalid": "Galiuojėma čiesos nelaistėns.",
-       "ipb_already_blocked": "„$1“ jau ožblokouts",
+       "ipb_already_blocked": "„$1“ jau ožgints",
        "ipb-needreblock": "$1 jau īr ožblokouts. A nuorėt pakeistė nustatīmus?",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Kėts ožgīnėms|Kėtė ožgīnėmā}}",
        "unlockdbtext": "Atrakėnos doumenū baze grōžėns galimībe vėsėm\nnauduotuojam redagoutė poslapios, keistė anū nostatīmos, keistė anū keravuojamu sāraša ė\nkėtos dalīkos, rēkalaujontios pakeitėmu doumenū bazė.\nPrašuom patvėrtėntė šėtā, kū ketinat padarītė.",
        "locknoconfirm": "Tamsta neoždiejot patvėrtinėma varnalės.",
        "unlockdbsuccesstext": "Doumenū bazė bova atrakėnta.",
-       "move-page": "Pervadėntė $1",
-       "move-page-legend": "Poslapė pervadėnims",
-       "movepagetext": "Nauduodamė žemiau pateikta fuorma, parvadinsėt poslapi neprarasdamė anuo istuorėjės.\nSenasā pavadinėms pataps nukrēpiamouju - ruodīs i naujīji.\nTamsta esat atsakėngs ož šėta, kū nūruodas ruodītu i ten, kor ė nuorieta.\n\nPrimenam, kū poslapis '''nebus''' parvadints, jēgo jau īr poslapis naujo pavadinėmo, nebent tas poslapis īr tuščės a nukreipēmasis ė netor redagavėma istuorėjės.\nTumet, Tamsta galėt parvadintė poslapi seniau nauduota vardu, jēgo priš šėta ons bova par klaida parvadints, a egzėstounantiu poslapiu sogadintė negalėt.\n\n'''DIEMESĖ!'''\nJēgo parvadinat puopoliaru poslapi, tas gal sokeltė nepagēdaunamu šalotiniu efektu, tudie šėta veiksma vīkdīkit tėk isitėkine,\nkū soprantat vėsas pasiekmes.",
+       "move-page": "Parvadintė $1",
+       "move-page-legend": "Poslapė parvadėnėms",
+       "movepagetext": "Nauduojont ta skvarma, katra apatiuo īr, parvadinsat poslapi ėr ėšlaikīsat anuo istuorėjė.\nOnkstesnis pavadėnėms palėks nosokėmo - ons ruodīs poslapin naujė varda.\nTamsta esat atsakėngs, ka nūruodas ruodītom tenā, kor ė rēk.\n\nAtminkat, ka poslapis '''nabus''' parvadints, jēgo jau īr poslapis naujo pavadinėmo, tėktās jēgo ons īr dīks aba netor keitėmu istuorėjės.\nTumet, Tamsta galat parvadintė poslapi seniou nauduoto vardo, jēgo priš šėta ons bova par klaida parvadints, ar esontiu poslapiu sogadintė negalat.\n\n'''ATĖDĖS!'''\nJēgo parvadinat tonkē nauduojama poslapi, ta galat prėdėrbtė ėškadas. Tudie kervauokat, ka dėrbat.",
        "movepagetalktext": "Sosėits aptarėma poslapis bus autuomatėškā parkelts draugom so ano, '''ėšskīrus:''':\n*Poslapis nauju pavadinėmo tor netoštė aptarėma poslapi, a\n*Paliksėt žemiau asontė varnale nepažīmieta.\nŠėtās atviejās Tamsta sava nužiūra torėt parkeltė a apjongtė aptarėma poslapi.",
        "movearticle": "Parvadintė poslapi:",
+       "moveuserpage-warning": "<strong>Atėdės:</strong> Tamsta parvadėnsat nauduotuojė poslapi. Žėnuokat, ka tėktās poslapis bat <em>ne patsā nauduotuos</em> bos parvadints.",
+       "movecategorypage-warning": "<strong>Atėdės:</strong> Tamsta parvadinsat kateguorėjės poslapi. Žėnuokat, ka tėktas poslapis bos parvadints, bat <em>poslapē, katrėi anon prėgol,</em> tor būtė sokergtė apent.",
        "movenologintext": "Nuoriedamė parvadintė poslapi, torėt būtė ožsėregėstravės nauduotuos ė tēpuogi būtė [[Special:UserLogin|prisėjongės]].",
        "newtitle": "Naus pavadėnėms:",
-       "move-watch": "Keravuotė šėta poslapi",
-       "movepagebtn": "Parvadintė poslapė",
-       "pagemovedsub": "Parvadinta siekmingā",
+       "move-watch": "Keravuotė ton poslapi",
+       "movepagebtn": "Parvadintė poslapi",
+       "pagemovedsub": "Parvadėnėms pavīka gerā",
        "movepage-moved": "'''\"$1\" bova parvadints i \"$2\"'''",
-       "movepage-moved-redirect": "Nukreipims bova sokorts.",
+       "movepage-moved-redirect": "Nusokėms bova padėrbts.",
        "articleexists": "Straipsnis so tuokiu vardo jau īr\na parinktāsis vards īr bluogs.\nParinkat kėta varda.",
-       "movetalk": "Parkeltė sosėta aptarėma poslapi.",
+       "movetalk": "Parkeltė prėgolonti aptarėma poslapi.",
        "movepage-page-moved": "Poslapis $1 bova parvadints kāp $2.",
-       "movelogpage": "Parvardinėmu istuorėjė",
+       "movelogpage": "Parvardėnėmu istuorėjė",
        "movelogpagetext": "Sārašos parvadintu poslapiu.",
-       "movereason": "Prīžastis:",
+       "movereason": "Dingstės:",
        "revertmove": "atmestė",
        "delete_and_move": "Ėštrintė ė parkeltė",
        "delete_and_move_text": "==Rēkalings ėštrīnims==\nPaskėrties straipsnis „[[:$1]]“ jau īr. A nuorėt ana ėštrintė, kū galietomiet parvadintė?",
        "delete_and_move_confirm": "Tēp, trintė poslapi",
-       "delete_and_move_reason": "Ėštrinta diel parkielima",
+       "delete_and_move_reason": "Ėštrinta, ka $1 galietom būtė parvadints",
+       "selfmove": "Nė̄šēn parvadėntė i ton pati poslapi.",
        "move-leave-redirect": "Parvadėnant paliktė nukreipėma",
-       "export": "Ekspuortoutė poslapius",
+       "export": "Ėškeltė poslapius",
        "exportcuronly": "Eksportoutė tėktās dabartėne versėjė, neitraukiant istuorėjės",
        "export-submit": "Eksportoutė",
        "export-addcattext": "Pridietė poslapius ėš kateguorėjės:",
        "allmessagescurrent": "Dabartėnis teksts",
        "allmessagestext": "Čė pateikamė sėstemėniu pranešėmu sārašos, esontis MediaWiki srėtie.",
        "allmessagesnotsupportedDB": "'''{{ns:special}}:Allmessages''' nepalaikuoms īr, nes nustatīms '''$wgUseDatabaseMessages''' ėšjungts īr.",
+       "allmessages-filter-legend": "Kuošeklis",
+       "allmessages-filter-unmodified": "Naparkeistė",
+       "allmessages-filter-all": "Vėsė",
+       "allmessages-filter-modified": "Parkeistė",
+       "allmessages-language": "Kalbaː",
+       "allmessages-filter-submit": "Ēk",
        "allmessages-filter-translate": "Pargoldītė",
        "thumbnail-more": "Padėdintė",
+       "filemissing": "Nie abruozdielė",
        "thumbnail_error": "Klaida koriant somažėnta pavēkslieli: $1",
        "thumbnail_invalid_params": "Nalaistieni miniatiūras parametrā",
        "thumbnail_dest_directory": "Nepavīkst sokortė paskėrtėis papkes",
        "tooltip-pt-userpage": "Tamstas nauduotuojė poslapis",
        "tooltip-pt-anonuserpage": "Nauduotuojė poslapis Tamstas IP adresō",
        "tooltip-pt-mytalk": "Tamstas aptarėma poslapis",
-       "tooltip-pt-preferences": "Mona nostatīmā",
-       "tooltip-pt-watchlist": "Poslapiu sārašos, katrūs Tamsta pasėrėnkuot keravuotė.",
-       "tooltip-pt-mycontris": "Tamstas darītu keitimu sārašos",
-       "tooltip-pt-login": "Rekuomendoujam prėsėjongtė, nuors tas nėr privaluoma.",
+       "tooltip-pt-preferences": "Mona nustatīmā",
+       "tooltip-pt-watchlist": "Poslapiu, katrūs Tamsta pasėrėnkuot keravuotė, sārošos.",
+       "tooltip-pt-mycontris": "Tamstas dėrbtū keitėmu sārašos",
+       "tooltip-pt-login": "Kvėitam prėsėjongtė, nuors tas ė nie būtėna.",
        "tooltip-pt-logout": "Atsėjongtė",
+       "tooltip-pt-createaccount": "Tamstā kvėitam padėrbtė paskīra ė prėsėjongtė; bat tas nie būtėina",
        "tooltip-ca-talk": "Poslapė torėnė aptarėms",
-       "tooltip-ca-edit": "Tamsta galėt keistė ta poslapi. Nepamėrškėt paspaustė parvaizuos mīgtoka priš ėšsauguodamė.",
-       "tooltip-ca-addsection": "Pradietė nauja skīriu",
-       "tooltip-ca-viewsource": "Poslapis īr ožrakints. Galėt parveizėt torini.",
-       "tooltip-ca-history": "Unkstesnės poslapė versėjės.",
+       "tooltip-ca-edit": "Taisītė ton poslapė",
+       "tooltip-ca-addsection": "Pradietė naujė skėrsneli",
+       "tooltip-ca-viewsource": "Ons poslapis apsergiets īr. Galat tėktās parveiziet kas anamė ožrašīta.",
+       "tooltip-ca-history": "Onkstesnė ton poslapė atmainā.",
        "tooltip-ca-protect": "Ožrakintė šėta poslapi",
+       "tooltip-ca-unprotect": "Keistė ton poslapė apsergiejėma",
        "tooltip-ca-delete": "Trėntė ta poslapi",
        "tooltip-ca-move": "Parvadėntė poslapi",
-       "tooltip-ca-watch": "Pridietė poslapi i keravuojamu sāraša",
+       "tooltip-ca-watch": "Pridietė poslapi i keravuojamu sāroša",
        "tooltip-ca-unwatch": "Pašalėntė poslapi ėš keravuojamu sāraša",
        "tooltip-search": "Ėiškuotė šėtom pruojektė",
-       "tooltip-search-go": "Ētė i poslapi su tuokiu pavadėnėmu jēgo tuoks īr",
+       "tooltip-search-go": "Ētė poslapin so tuokio pavadėnėmo, jēgo tuoks īr",
        "tooltip-search-fulltext": "Ėiškuotė poslapiu so tuokiu tekstu",
-       "tooltip-p-logo": "Pėrms poslapis",
+       "tooltip-p-logo": "Ētė i pėrma poslapi",
        "tooltip-n-mainpage": "Aplonkītė pėrma poslapi",
        "tooltip-n-mainpage-description": "Ētė i pėrma poslapi",
-       "tooltip-n-portal": "Aple pruojekta, ka galėma vēktė, kamė ka rastė",
+       "tooltip-n-portal": "Aple pruojekta, kū galėma vēktė, kamė kū rastė",
        "tooltip-n-currentevents": "Raskėt naujausė infuormacėjė",
        "tooltip-n-recentchanges": "Vielībūju pakeitėmu sārašos tamė projektė.",
        "tooltip-n-randompage": "Atidarītė bikuoki straipsni",
        "tooltip-n-help": "Vėita, katruo rasėt rūpėmus atsakīmus.",
-       "tooltip-t-whatlinkshere": "Poslapiu sārašos, ruodantiu i čė",
-       "tooltip-t-recentchangeslinked": "Paskotėnē pakeitėmā straipsnious, pasėikiamous ėš šėta straipsnė",
+       "tooltip-t-whatlinkshere": "Poslapiu sārašos, katrėi ruod čiuonās",
+       "tooltip-t-recentchangeslinked": "Paskotėnē pakeitėmā straipsniūs, pasėikiamūs nug šėta straipsnė",
        "tooltip-feed-rss": "Šėta poslapė RSS šaltėnis",
-       "tooltip-feed-atom": "Šėta poslapė Atom šaltėnis",
-       "tooltip-t-contributions": "Ruodītė šėta nauduotuojė keitėmu sāraša",
+       "tooltip-feed-atom": "Ton poslapė Atom šaltėnis",
+       "tooltip-t-contributions": "Ruodītė ton nauduotuojė duovi",
        "tooltip-t-emailuser": "Siōstė gromata šėtom prietėliō",
-       "tooltip-t-upload": "Idietė abruozdielios a medėjės failos",
+       "tooltip-t-upload": "Ožkrautė abruozdielius",
        "tooltip-t-specialpages": "Specēliūju poslapiu sārašos",
-       "tooltip-t-print": "Šėta poslapė versėjė spausdėnėmō",
-       "tooltip-t-permalink": "Vėslaikėnė nūruoda i šėta poslapė versėje",
+       "tooltip-t-print": "Šėta poslapė atmains spausdėnėmō",
+       "tooltip-t-permalink": "Nūlatėnė nūruoda ton poslapė atmainuō",
        "tooltip-ca-nstab-main": "Ruodītė poslapė torėni",
        "tooltip-ca-nstab-user": "Ruodītė nauduotuojė poslapi",
-       "tooltip-ca-nstab-special": "Šėts poslapis īr specēlosis - anuo nagalėm redagoutė.",
+       "tooltip-ca-nstab-special": "Tas poslapis īr specēlos - anuo nagalėm keistė.",
        "tooltip-ca-nstab-project": "Ruodītė pruojekta poslapi",
        "tooltip-ca-nstab-image": "Ruodītė abruozdielė poslapi",
        "tooltip-ca-nstab-mediawiki": "Veizietė sėstėmas pranešėma",
        "tooltip-ca-nstab-help": "Ruodītė pagelbas poslapi",
        "tooltip-ca-nstab-category": "Ruodītė kateguorėjės poslapi",
        "tooltip-minoredit": "Pažīmietė pakeitėma kāp maža",
-       "tooltip-save": "Ėšsauguotė pakeitėmos",
-       "tooltip-preview": "Pakeitėmu parveiza, prašuom parveizėt priš ėšsaugont!",
-       "tooltip-diff": "Ruod, kuokios pakeitėmos padariet tekste.",
+       "tooltip-save": "Ėšsauguotė pakeitėmus",
+       "tooltip-preview": "Ta īr pakeitėmu parveiza. Prašuom parveizat prīš ėšsaugont!",
+       "tooltip-diff": "Ruod, kū parkeitiet straipsni.",
        "tooltip-compareselectedversions": "Veizėtė abodvėju pasėrėnktū poslapė versėju skėrtomos.",
        "tooltip-watch": "Pridietė šėta poslapi i keravuojamu sāraša",
        "tooltip-recreate": "Atkortė poslapi napaisant šėto, kū ans bova ėštrints",
-       "tooltip-rollback": "Atšauktė atmestus šėta poslapė keitėmus i vielībiause versėje par vėina paspaudėma",
-       "tooltip-undo": "\"Anolioutė\" atmeta ta keitėma ėr atidara unkstesnies versėjės redagavėma skvarma. Leid pridietė atmetėma prīžasti kuomentarūsė.",
+       "tooltip-rollback": "Sogrōžintė poslapi tāp, kāp ons bova prīš vielībūs ton nauduotuojė pardėrbėmus",
+       "tooltip-undo": "„Grōžėntė“ pargrōžėn pėrmesni pakeitėma ė laid ožrašītė, kudie īr dėrbams pargrōžėnėms.",
        "tooltip-preferences-save": "Sauguotė nustatīmus",
-       "tooltip-summary": "Īvestė trompa santrauka",
+       "tooltip-summary": "Doukat trompa aprašīma",
        "anonymous": "Neregėstrouts nauduotuos",
        "siteuser": "{{SITENAME}} nauduotuos $1",
        "lastmodifiedatby": "Šėta poslapi paskotini karta redagava $3 $2, $1.",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|nauduotuos|nauduotuojē}} $1",
        "creditspage": "Poslapė kūriejē",
        "spamprotectiontitle": "Prišreklamėnis fėltros",
-       "spamprotectiontext": "Poslapis, katra nuoriejot ėšsauguotė bova ožblokouts prišreklamėnė fėltra. Šėtā tėkriausē sokielė nūruoda i kėta svetaine. Ėšėmkit nūruoda ė pamieginkėt viel.",
+       "spamprotectiontext": "Poslapis, katra nuoriejot ėšsauguotė bova ožgints prīšreklamėnė kuošeklė. Tas gavas tėkriausē tudie, ka idiejėt nagalėma laukėnė nūruoda.",
        "spamprotectionmatch": "Šėts tekstos bova atpažėnts prišreklamėnė fėltra: $1",
        "spambot_username": "''MediaWiki'' reklamu šalėnėms",
        "spam_reverting": "Atkoriama i onkstesne versėje, katra nator nūruodu i $1",
        "spam_blanking": "Vėsos versėjės toriejė nūruodu i $1. Ėšvaluoma",
+       "pageinfo-header-basic": "Poslapė žėnės",
        "pageinfo-header-edits": "Keitėma istuorėjė",
        "pageinfo-header-restrictions": "Poslapė apsauga",
        "pageinfo-header-properties": "Poslapė savībės",
        "pageinfo-article-id": "Poslapė ID",
        "pageinfo-language": "Poslapė kalba",
+       "pageinfo-firstuser": "Poslapė dėrbiejē",
+       "pageinfo-firsttime": "Padėrbėma čiesos",
+       "pageinfo-lastuser": "Vielībs dėrbies",
+       "pageinfo-lasttime": "Vielība pakeitėma čiesos",
+       "pageinfo-edits": "Vėsū keitėmu skaitlios",
        "pageinfo-toolboxlink": "Poslapė infuormacėjė",
+       "pageinfo-redirectsto": "Nusokėms ont",
+       "pageinfo-redirectsto-info": "aple",
+       "pageinfo-contentpage-yes": "Tēp",
+       "pageinfo-protect-cascading-yes": "Tēp",
        "markaspatrolleddiff": "Žīmietė, kū patikrėnta",
        "markaspatrolledtext": "Pažīmietė, ka poslapis patėkrėnts īr",
        "markedaspatrolled": "Pažīmiets kāp patėkrints",
        "thumbsize": "Somažėntu pavēkslieliu didums:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|poslapis|poslapē|poslapiu}}",
        "file-info": "faila dėdoms: $1, MIME tips: $2",
-       "file-info-size": "$1 × $2 taškū, faila dėdoms: $3, MIME tips: $4",
+       "file-info-size": "$1 × $2 taškū, abruozdielė dėdloms: $3, MIME būds: $4",
        "file-nohires": "Geresnis ėšraiškėms negalėms.",
-       "svg-long-desc": "SVG fails, fuormalē $1 × $2 puškiu, faila dėdoms: $3",
-       "show-big-image": "Pėlns ėšraiškėms",
-       "show-big-image-preview": "Parvaizos dėdoms: $1.",
-       "show-big-image-other": "{{PLURAL:$2|Kėta rezoliocėjė|Kėtas rezoliocėjės}}: $1.",
+       "svg-long-desc": "SVG skvarmou, fuormalē $1 × $2 puškiu, skvarmenė dėdloms: $3",
+       "show-big-image": "Pėrms abruozdielis",
+       "show-big-image-preview": "Parvaizos dėdloms: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Kėts dėdloms|Kėtė dėdlomā|Kėtū dėdlomu}}: $1.",
        "show-big-image-size": "$1 × $2 pikselē",
        "newimages": "Naujausiu abruozdieliu galerėjė",
        "imagelisttext": "Žemiau īr '''$1''' failu sārašos, sorūšiouts $2.",
        "newimages-legend": "Rietis",
        "newimages-label": "Faila vards (ar anuo dalis):",
        "ilsubmit": "Ėiškoutė",
-       "bydate": "palē data",
+       "bydate": "vagol čiesa",
        "sp-newimages-showfrom": "Ruodītė naujus abruozdielius pradedant nū $2, $1",
+       "seconds": "{{PLURAL:$1|$1 sekondė|$1 sekondės|$1 sekondiu}}",
+       "minutes": "{{PLURAL:$1|$1 mėnotė|$1 mėnotės|$1 mėnotiu}}",
+       "hours": "{{PLURAL:$1|$1 adīna|$1 adīnas|$1 adīnu}}",
+       "days": "{{PLURAL:$1|$1 dėina|$1 dėinas|$1 dėinū}}",
+       "weeks": "{{PLURAL:$1|$1 nedielė|$1 nedielės|$1 nedieliu}}",
+       "months": "{{PLURAL:$1|$1 mienou|$1 mienesē|$1 mienesiu}}",
+       "years": "{{PLURAL:$1|$1 metā|$1 metā|$1 metu}}",
+       "ago": "prīš $1",
        "just-now": "vuo tėk daba",
+       "hours-ago": "prīš $1 {{PLURAL:$1|adīna|adīnas|adīnu}}",
+       "minutes-ago": "prīš $1 {{PLURAL:$1|mėnotė|mėnotės|mėnotiu}}",
+       "seconds-ago": "prīš $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}",
+       "yesterday-at": "Vakar dėinuo $1",
        "bad_image_list": "Fuormats tuoks īr:\n\nTėk eilotės, prasėdedantės *, īr itraukiamas. Pėrmuojė nūruoda eilotie tor būtė nūruoda i bluoga abruozdieli.\nVėsas kėtas nūoruodas tuo patiuo eilotie īr laikomas ėšėmtim, tas rēšk ka poslapē, katrūs leidama iterptė abruozdieli.",
        "metadata": "Metadoumenīs",
        "metadata-help": "Šėtom failė īr papėlduomos infuormacėjės, tikriausē pridietos skaitmeninės kameruos a skanėrė, katros bova nauduots anam sokortė a parkeltė i skaitmenėni fuormata. Jēgo fails bova pakeists ėš pradėnės versėjės, katruos nekatruos datalės gal nepėlnā atspėndietė nauja faila.",
        "metadata-fields": "Abruozdielė metadoumenū laukā, nuruodītė tamė pranešėmė, bus itrauktė i abruozdielė poslapi, kumet metadoumenū lentelė bus suskleista. Palē nutīliejėma kėtė laukā bus pakavuotė.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Platoms",
        "exif-imagelength": "Aukštoms",
-       "exif-orientation": "Pasokims",
-       "exif-xresolution": "Gorizuontalus ėšraiškėms",
-       "exif-datetime": "Faila keitėma data ė čiesos",
+       "exif-orientation": "Regėnė pasokėms",
+       "exif-xresolution": "Golos dėdloms",
+       "exif-datetime": "Abruozdielė parkeitėma čiesos",
        "exif-imagedescription": "Abruozdielė pavadėnėms",
-       "exif-make": "Kameras gamėntuos",
-       "exif-model": "Kameras muodelis",
+       "exif-make": "Puortaparata dėrbies",
+       "exif-model": "Puortaparata muodelis",
        "exif-artist": "Autuorios",
-       "exif-colorspace": "Spalvū pristatīms",
+       "exif-colorspace": "Spalvū lauks",
        "exif-compressedbitsperpixel": "Abruozdielė sospaudėma rėžėms",
-       "exif-datetimeoriginal": "Doumenū generavėma data ė čiesos",
+       "exif-pixelydimension": "Abruozdielė platoms",
+       "exif-pixelxdimension": "Abruozdielė augoms",
+       "exif-usercomment": "Pāiškėnėmā",
+       "exif-relatedsoundfile": "Prėgolons garsos",
+       "exif-datetimeoriginal": "Žėnės paderbėma čiesos",
        "exif-exposuretime": "Ėšlaikīma čiesos",
+       "exif-exposuretime-format": "$1 s. ($2)",
        "exif-fnumber": "F skaitlius",
        "exif-brightnessvalue": "Švėisoms",
        "exif-lightsource": "Švėisuos šaltėnis",
        "exif-languagecode": "Kalba",
        "exif-iimversion": "IIM versėjė",
        "exif-iimcategory": "Kateguorėjė",
-       "exif-orientation-1": "Standartėšks",
+       "exif-orientation-1": "Paprasts",
        "exif-xyresolution-i": "$1 puškē cuolī",
        "exif-xyresolution-c": "$1 puškē centėmetrė",
        "exif-componentsconfiguration-0": "nēsa",
        "exif-contrast-0": "Paprasts",
        "exif-contrast-1": "Mažos",
        "exif-contrast-2": "Dėdlis",
-       "namespacesall": "vėsas",
+       "exif-iimcategory-ace": "Mens, koltūra ė pramuogas",
+       "exif-iimcategory-clj": "Nosėkaltėms ė teisė",
+       "exif-iimcategory-dis": "Biedas",
+       "exif-iimcategory-fin": "Ūkis, verslos",
+       "exif-iimcategory-edu": "Muokslos",
+       "exif-iimcategory-evn": "Gomta",
+       "exif-iimcategory-hth": "Svēkata",
+       "exif-iimcategory-lab": "Darbs",
+       "exif-iimcategory-lif": "Puoėlsis",
+       "exif-iimcategory-pol": "Puolėtėka",
+       "exif-iimcategory-rel": "Viera",
+       "exif-iimcategory-sci": "Muokslā",
+       "exif-iimcategory-soi": "Vėišė̄jė dalīkā",
+       "exif-iimcategory-spo": "Spuorts",
+       "exif-iimcategory-war": "Karės, kuovės",
+       "exif-iimcategory-wea": "Uors",
+       "namespacesall": "vėskon",
        "monthsall": "vėsė",
        "confirmemail": "Patvirtėnkėt el. pašta adresa",
        "confirmemail_noemail": "Tamsta netorėt nuruodės teisėnga el. pašta adresa [[Special:Preferences|sava nustatīmūs]].",
        "confirmemail_sent": "Patvirtėnėma gruomata ėšsiōsta.",
        "confirmemail_needlogin": "Tamstā rēk $1, kū patvirtėntomiet sava el. pašta adresa.",
        "confirmemail_loggedin": "Tamstas el. pašta adresos ožtvėrtints īr.",
+       "confirmemail_subject": "{{SITENAME}} el. pašta ožtvirtėnėms",
        "confirmemail_body": "Kažėnkas, mosiet Tamsta IP adreso $1, ožregėstrava\npaskīra „$2“ sosėita so šėtuom el. pašta adresu pruojektė {{SITENAME}}.\n\nKū patvirtėntomiet, kū ta diežotė ėš tėkrā prėklausa Tamstā, ėr aktīvoutomiet\nel. pašta puoslaugi pruojėktė {{SITENAME}}, atdarīkiet ta nūruoda sava naršīklie:\n\n$3\n\nJēgo paskīra regėstravuot *ne* Tamsta, tumet ēkėt ta nūruoda,\nkū atšauktomiet el. pašta adresa patvirtėnėma:\n\n$5\n\nPatvirtėnėma kods bengs galiuotė $4.",
        "invalidateemail": "El. pašta patvirtėnėma atšaukėms",
-       "deletedwhileediting": "Diemesė: Šėts poslapis ėštrints po šėta, kumet pradiejot redagoutė!",
+       "deletedwhileediting": "<strong>Atėdės:</strong> Tas poslapis bova ėštrints pu tuo, kāp pradiejėt anon dėrbtė!",
+       "confirmrecreate": "Nauduotuos [[User:$1|$1]] ([[User talk:$1|aptarėms]]) ėštrīnė ton poslapi pu tuo, kāp anon pradiejėt dėrbtė; ons davė tuokė dingsti:\n: <em>$2</em>\nA tėkrā nuorat anon padėrbtė apent?",
+       "confirmrecreate-noreason": "Nauduotuos [[User:$1|$1]] ([[User talk:$1|aptarėms]]) ėštrīnė ton poslapi pu tuo, kāp anon pradiejėt dėrbtė. A tėkrā nuorat anon padėrbtė apent?",
        "recreate": "Atkortė",
        "confirm_purge_button": "Tink",
        "confirm-watch-button": "Gerā",
        "confirm-watch-top": "Pridietė šėta poslapi i keravuojamu sāraša?",
        "confirm-unwatch-button": "Gerā",
+       "confirm-unwatch-top": "Atkergtė nug sava keravuojamu poslapiu?",
+       "quotation-marks": "„$1“",
        "imgmultipageprev": "← unkstesnis poslapis",
        "imgmultipagenext": "kėts poslapis →",
        "imgmultigo": "Ētė!",
        "lag-warn-high": "Dielē dėdlė doumenū bazės pasėlikėma pakeitėmā, naujesnė nēgo $1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}, tamė sarašė gal būtė neruodomė.",
        "watchlistedit-normal-title": "Keistė keravuojamu sāroša",
        "watchlistedit-normal-legend": "Šalėntė poslapios ėš keravuojamu sāraša",
-       "watchlistedit-normal-explain": "Žemiau īr ruodomė poslapē Tamstas keravuojamu sārašė.\nNuoriedamė pašalėntė poslapi, pri anuo oždiekėt varnale ė paspauskėt „Šalėntė poslapios“.\nTamsta tēpuogi galėt [[Special:EditWatchlist/raw|redagoutė grīnaji keravuojamu sāraša]].",
+       "watchlistedit-normal-explain": "Apatiuo īr ruodomė poslapē Tamstas keravuojamu sārošė.\nJēgo nuorat atkergtė poslapi, tumet prī anuo oždiekat varnalė ė mīgat \"{{int:Watchlistedit-normal-submit}}\".\nTamsta tēpuogi galat [[Special:EditWatchlist/raw|keistė čīsta keravuojamu sāroša]].",
        "watchlistedit-normal-submit": "Šalėntė poslapios",
        "watchlistedit-normal-done": "$1 {{PLURAL:$1|poslapis bova pašalėnts|poslapē bova pašalėntė|poslapiu bova pašalėnta}} ėš Tamstas keravuojamu saraša:",
        "watchlistedit-raw-title": "Keistė grīnōjė keravuojamu sāraša",
        "watchlisttools-view": "Veizietė sosėjosius pakeitėmus",
        "watchlisttools-edit": "Veizietė ėr keistė keravuojamu straipsniu sāraša",
        "watchlisttools-raw": "Keistė nebėngta keravuojamu straipsniu sāraša",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|aptarėms]])",
        "version": "Versėjė",
-       "version-license": "Licenzėjė",
+       "version-no-ext-name": "[ba varda]",
+       "version-license": "Lėcencėjė",
+       "version-ext-license": "Lėcencėjė",
+       "version-poweredby-credits": "Ta wiki dėrb so <strong>[https://www.mediawiki.org/ MediaWiki]</strong> varėklio, copyright © 2001-$1 $2.",
+       "version-poweredby-translators": "translatewiki.net pargoldītuojē",
        "redirect-user": "Nauduotojė ID",
        "redirect-page": "Poslapė ID",
        "redirect-revision": "Poslapė versėjė",
        "fileduplicatesearch-filename": "Faila vards:",
        "fileduplicatesearch-submit": "Ėiškuotė",
        "fileduplicatesearch-info": "$1 × $2 pėkseliu<br />Faila dėdoms: $3<br />MIME tėps: $4",
-       "specialpages": "SpecÄ\93\97Ì\85jė poslapē",
+       "specialpages": "SpecÄ\93\97Ì\84jė poslapē",
        "specialpages-note-top": "Pāiškėnėmā",
        "specialpages-note": "* Normalūs specēlė̅jė puslapē.\n* <strong class=\"mw-specialpagerestricted\">Apribuotė specēlė̅jė puslapē.</strong>",
        "specialpages-group-maintenance": "Sėstemas palaikīma pranešėmā",
-       "specialpages-group-other": "KÄ\97\97 specÄ\93\97Ì\85jė poslapē",
+       "specialpages-group-other": "KÄ\97\97 specÄ\93\97Ì\84jė poslapē",
        "specialpages-group-login": "Prisėjongėms / Registracėjė",
-       "specialpages-group-changes": "Vielībiė̅ jė pakeitėmā ė regėstrā",
+       "specialpages-group-changes": "Vielībė̄jė pakeitėmā ė sārošā",
        "specialpages-group-media": "Infuormacėjė aple failus ėr anū pakruovėms",
        "specialpages-group-users": "Nauduotuojē ė teisės",
        "specialpages-group-highuse": "Platē nauduojamė poslapē",
-       "specialpages-group-pages": "Poslapiu sarašas",
+       "specialpages-group-pages": "Poslapiu sārošos",
        "specialpages-group-pagetools": "Poslapiu rakondā",
        "specialpages-group-wiki": "Wiki doumenīs ė rakondā",
-       "specialpages-group-redirects": "SpecÄ\93\97Ì\85\97 nukreipėma poslapē",
+       "specialpages-group-redirects": "SpecÄ\93\97Ì\84\97 nusokėma poslapē",
        "specialpages-group-spam": "Šlamšta valdīma rakondā",
        "blankpage": "Toščias poslapis",
        "external_image_whitelist": " #Palikėt ta eilotė, tuokė kāp īr <pre>\n#Īrašīkat standartėniu ėšraišku fragmentus (tėktās dali terp //)\n#Anūs bus miegėnama sotapatintė so ėšuorėniu abruozdieliu adresās\n#Tė, katrėi sotaps, bus ruodomė kāp abruozdielē, a kėtė bus ruodomė tėktās kāp nūoruodas\n#Raidiu dėdoms nier svarbos\n#Eilotės, katuos prasided # īr kuomentarā \n\n#Īterpkat vėsus standartiėniu ėšraišku fragmentus prīš šėta eilote. Palikat šėta eilote, tuokė kāp ana īr </pre>",
-       "tag-filter": "[[Special:Tags|Žīmiejėmu]] filtros:",
-       "tag-filter-submit": "Rietis",
+       "tag-filter": "[[Special:Tags|Žīmiū]] kuošeklis:",
+       "tag-filter-submit": "Kuošeklis",
        "tags-edit": "taisītė",
        "comparepages": "Primestė poslapio",
        "logentry-delete-delete": "$1 ėštrīnė poslapi $3",
        "logentry-delete-restore": "$1 atkūrė poslapi $3",
        "revdelete-content-hid": "torėnīs pakavuots",
-       "logentry-move-move": "$1 pervadėna poslapi $3 i $4",
-       "logentry-move-move-noredirect": "$1 pervadėna poslapi $3 i $4, nepalikdams nukreipėma",
-       "logentry-move-move_redir": "$1 pervadėna poslapi $3 i $4, vėituo buvosė nukreipėma",
-       "logentry-move-move_redir-noredirect": "$1 pervadėna poslapi $3 i $4, vėituo buvosė nukreipėma, bat nepadėrbdams naujė",
+       "logentry-move-move": "$1 {{GENDER:$2|parvadėna}} poslapi $3 i $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|parvadėna}} poslapi nug $3 i $4 nepalinkdoms nusokėma",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|parvadėna}} poslapi nog $3 i $4 ont bovosė nusokėma",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|parvadėna}} poslapi nug $3 i $4, vėituo buvosė nukreipėma, bat nepadėrbdoms naujė",
        "logentry-newusers-newusers": "$1 padėrba nauduotuojė paskīra",
        "logentry-newusers-create": "$1 padėrba nauduotuojė paskīra",
        "logentry-newusers-create2": "$1 padėrba nauduotuojė paskīra $3",
        "logentry-newusers-autocreate": "Paskīra $1 bova padėrbta autuomatėškā",
        "logentry-rights-rights": "$1 perkeitė $3 ėš $4 i $5",
+       "logentry-rights-autopromote": "$1 bova autuomatėškā {{GENDER:$2|parkelts}} ėš $4 i $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ožkruovė}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|ožkruovė}} naujė $3 atmaina",
+       "logentry-upload-revert": "$1 {{GENDER:$2|ožkruovė}} $3",
        "rightsnone": "(juokiū)",
        "revdelete-summary": "keitėma pāiškėnėms",
        "feedback-close": "Padėrbt",
        "searchsuggest-search": "Ėiškuotė",
        "searchsuggest-containing": "katrėi tor...",
        "api-error-duplicate-popup-title": "{{PLURAL:$1|Faila|Failu}} doblėkats.",
+       "duration-seconds": "$1 {{PLURAL:$1|sekondė|sekondės|sekondiu}}",
+       "duration-minutes": "$1 {{PLURAL:$1|mėnotė|mėnotės|mėnotiu}}",
+       "duration-hours": "$1 {{PLURAL:$1|adīna|adīnas|adīnu}}",
+       "duration-days": "{{PLURAL:$1|dėina|dėinū|dėinas}}",
        "expandtemplates": "Ėšskeistė šabluonus",
+       "pagelanguage": "Rinktėis poslapė kalba",
        "pagelang-name": "Poslapis",
        "pagelang-language": "Kalba",
        "pagelang-use-default": "Nauduotė kalba kāp nustatīta",
        "pagelang-select-lang": "Rinktėis kalba",
        "right-pagelang": "Mainītė poslapė kalba",
+       "action-pagelang": "mainītė poslapė kalba",
        "mediastatistics-table-mimetype": "MIME tips",
        "mediastatistics-header-unknown": "Nežėnuoms",
-       "json-error-syntax": "Sintaksės klaida"
+       "json-error-syntax": "Sintaksės klaida",
+       "special-characters-group-latin": "Luotīnėškā",
+       "special-characters-group-latinextended": "Luotīnėškā (prapliests)",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Sėmbuolē",
+       "special-characters-group-greek": "Graikėškā",
+       "special-characters-group-cyrillic": "Kirilėka",
+       "special-characters-group-arabic": "Arabėškā",
+       "special-characters-group-arabicextended": "Arabėškā (prapliests)",
+       "special-characters-group-persian": "Persėškā",
+       "special-characters-group-hebrew": "Žīdėškā",
+       "special-characters-group-bangla": "Bengalėškā",
+       "special-characters-group-tamil": "Tamėlėškā",
+       "special-characters-group-telugu": "Telogėškā",
+       "special-characters-group-sinhala": "Singalėškā",
+       "special-characters-group-gujarati": "Godžaratėškā",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tailondėškā",
+       "special-characters-group-lao": "Laosėitėškā",
+       "special-characters-group-khmer": "Kigmerėškā",
+       "mw-widgets-titleinput-description-redirect": "nusokėms i $1"
 }
index 728e19b..3ee09eb 100644 (file)
        "linksearch-pat": "Šema pretrage:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Traži",
-       "linksearch-text": "Možete koristiti džoker znakove poput \"*.wikipedia.org\".\nPotrebno je navesti osnovnu domenu (TLD), npr. \"*.org\".<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: <code>$1</code> (default je http:// ako nijedan protokol nije naveden).",
+       "linksearch-text": "Možete koristiti džoker znakove poput \"*.wikipedia.org\".\nPotrebno je navesti osnovnu domenu (TLD), npr. \"*.org\".<br />\nPodržani {{PLURAL:$2|protokol|protokoli}}: $1 (default je http:// ako nijedan protokol nije naveden).",
        "linksearch-line": "$1 je povezan od $2",
        "linksearch-error": "Džokeri se mogu pojavljivati samo na početku naziva servera.",
        "listusersfrom": "Prikaži korisnike počev od:",
index 327f92e..549d49e 100644 (file)
        "passwordreset": "මුරපදය වෙනස් කරන්න",
        "passwordreset-text-one": "තාවකාලික මුර-පදයක් විද්‍යුත් තැපෑළ මගින් ලබා ගැනීම සඳහා මෙම පෝරමය සම්පූර්ණ කරන්න.",
        "passwordreset-text-many": "{{PLURAL:$1|තාවකාලික මුරපදයක් ඊ-තැපෑල හරහා ගෙන්වා ගැනීමට එක් ක්ෂේත්‍රයක් පුරවන්න}}",
-       "passwordreset-legend": "මුරපදය යළි පිහිටුවන්න",
        "passwordreset-disabled": "මෙම විකියෙහි මුර පද ප්‍රත්‍යාරම්භ කිරීම් අක්‍රීය කොට ඇත.",
        "passwordreset-emaildisabled": "විද්‍යුත්  තැපැල් පහසුකම මෙම විකි ය සඳහා අවලංගු කොට ඇත.",
        "passwordreset-username": "පරිශීලක නාමය:",
        "resettokens": "සංකේත නැවත සකසන්න",
        "resettokens-text": "ඔබ මෙතනයි ඔබගේ ගිණුම හා සම්බන්ධ ඇතැම් පෞද්ගලික දත්ත වෙත ප්රවේශ ඉඩ දෙන ටෝකන් පත් සැකසිය හැක. \n\nඔබ වැරදී කෙනෙකු සමග හෝ ඔබගේ ගිණුම වෙනස් කර තිබේ නම්, ඔවුන් හවුල් නම් ඔබ එය කළ යුත්තේ.",
        "resettokens-no-tokens": "නැවත සකස් කිරීමට කිසිදු ටෝකන් පත් වේ.",
-       "resettokens-legend": "සංකේත නැවත සකසන්න",
        "resettokens-tokens": "සංකේත:",
        "resettokens-token-label": "$1 (පවතින අගය: $2)",
        "resettokens-watchlist-token": "වෙබ් සංග්රහය (Atom/RSS) සඳහා සංකේත [[Special:Watchlist|ඔබගේ මුර-ලැයිස්තුවෙහි පිටු වෙනස්කම්]]",
        "randomincategory-nopages": "[[:Category:$1|$1]] ප්‍රවර්ගයේ පිටු නොමැත.",
        "randomincategory-category": "ප්‍රවර්ගය:",
        "randomincategory-legend": "ප්‍රවර්ගයේ අහඹු පිටු",
+       "randomincategory-submit": "යන්න",
        "randomredirect": "අහුඹු යළි-යොමුකිරීම",
        "randomredirect-nopages": "\"$1\" නාම-අවකාශයෙහි යළි-යොමුවීම් නොමැත.",
        "statistics": "සංඛ්‍යාන දත්ත",
        "nmembers": "{{PLURAL:$1|එක් සාමාජිකයෙකි|සාමාජිකයෝ $1 කි}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|සාමාජිකයන්|සාමාජික}}",
        "nrevisions": "{{PLURAL:$1|එක් සංශෝධනයකි|සංශෝධන $1 කි }}",
-       "nviews": " {{PLURAL:$1|නැරඹුම් එකකි|නැරඹුම් $1 කි}}",
        "nimagelinks": "{{PLURAL:$1|පිටු|පිටු}} $1 ක භාවිතාකර ඇත",
        "ntransclusions": "{{PLURAL:$1|පිටු|පිටු}} $1 ක භාවිතාකර ඇත",
        "specialpage-empty": "මෙම වාර්තාවට ප්‍රතිඵල කිසිවක් නොමැත.",
        "linksearch-pat": "ගවේෂණ රටාව:",
        "linksearch-ns": "නාම-අවකාශය:",
        "linksearch-ok": "ගවේෂණය",
-       "linksearch-text": "\"*.wikipedia.org\" වැනි ආදේශක භාවිතා කල හැක.\nඅඩුම තරමින් උසස්-මට්ටමේ වසමක් අවශ්‍යයි, නිදසුනක් ලෙස \"*.org\".<br />\nසහය දක්වන : <code>$1</code> (ඔබේ සෙවුමෙහි මේවා කිසිවක් නොයොදන්න). {{PLURAL:$2|ප්‍රෝටෝකොලය|ප්‍රෝටෝකොලයන්}}:",
+       "linksearch-text": "\"*.wikipedia.org\" වැනි ආදේශක භාවිතා කල හැක.\nඅඩුම තරමින් උසස්-මට්ටමේ වසමක් අවශ්‍යයි, නිදසුනක් ලෙස \"*.org\".<br />\nසහය දක්වන : $1 (ඔබේ සෙවුමෙහි මේවා කිසිවක් නොයොදන්න). {{PLURAL:$2|ප්‍රෝටෝකොලය|ප්‍රෝටෝකොලයන්}}:",
        "linksearch-line": "$2 වෙතින් $1 සබැඳිණි",
        "linksearch-error": "ආදේශක  පෙනීසිටිය හැක්කේ සත්කාරකනාමය ආරම්භයෙහි පමණයි.",
        "listusersfrom": "‍මෙම අකුරෙන් පටන්ගෙන පරිශීලකයන් ප්‍රදර්ශනය කරන්න:",
        "emailuser": "මෙම පරිශීලක වෙත විද්‍යුත්-ලිපියක් යවන්න",
        "emailuser-title-target": "මෙම {{GENDER:$1|පරිශීලක}} ඊ-තැපැල් කරන්න",
        "emailuser-title-notarget": " පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න",
-       "emailpage": " පරිශීලකට විද්‍යුත්-ලිපියක් යවන්න",
        "emailpagetext": "මෙම {{GENDER:$1|පරිශීලකයා}} හට විද්‍යුත්-තැපෑල් පණිවුඩයක් යැවීම සඳහා මෙම ආකෘති පත්‍රය භාවිතා කිරීමට ඔබ හට හැක.\nලබන්නා විසින් සෘජු ලෙස ඔබ හට පිළිතුරු එවනු හැකි වන පරිදි, ඔබ විසින් [[Special:Preferences|ඔබගේ පරිශීලක අභිරුචියන්]] හි ඇතුළත් කල විද්‍යුත්-තැපැල් ලිපිනය,  විද්‍යුත්-තැපෑලෙහි \"වෙතින්\" ලිපිනයෙහි පෙන්නුම් කරනු ඇත.",
        "defemailsubject": "{{SITENAME}} පරිශීලක \"$1\" වෙතින් විද්‍යුත්-තැපෑල",
        "usermaildisabled": "ඔබගේ විද්‍යුත්-තැපෑල අක්‍රීය කොට ඇත",
        "emailccsubject": "$1: $2 වෙත ඔබගේ පණිවුඩය පිටපත් කරන්න",
        "emailsent": "විද්‍යුත්-තැපෑල යවන ලදි",
        "emailsenttext": "ඔබගේ  විද්‍යුත්-තැපැල්  පණිවුඩය යවා ඇත.",
-       "emailuserfooter": "{{SITENAME}} හි \"{{int:emailpage}}\" ශ්‍රිතය අනුසාරයෙන් $1 විසින්  $2  වෙත  විද්‍යුත්-තැපෑලක් යවන ලදි.",
+       "emailuserfooter": "{{SITENAME}} හි \"{{int:emailuser}}\" ශ්‍රිතය අනුසාරයෙන් $1 විසින්  $2  වෙත  විද්‍යුත්-තැපෑලක් යවන ලදි.",
        "usermessage-summary": "පද්ධති පණිවුඩයක් තබමි.",
        "usermessage-editor": "පද්ධති පණිවුඩ කරු",
        "watchlist": "මුරලැයිස්තුව",
        "tooltip-pt-logout": "නික්මීම",
        "tooltip-pt-createaccount": "ඔබ ගිණුමක් තනා පිවිසෙන්නේ නම් මැනවි; කෙසේ වුවත්, එය අනිවාර්ය නොවේ.",
        "tooltip-ca-talk": "අන්තර්ගත පිටුව පිළිබඳ සාකච්ඡාව",
-       "tooltip-ca-edit": "à¶\94බâ\80\8dට à¶¸à·\99ම à¶´à·\92ටà·\94à·\80 à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\9aල à·\84à·\90à¶\9a. à·\83à¶\82à¶\9aරණ à·\83à·\94රà·\90à¶\9aà·\93මට à¶´à·\99ර à¶´à·\99රදà·\83à·\94න à¶¶à·\9cතà·\8aතම à¶·à·\8fà·\80à·\92තà·\8fà¶\9aà·\92රà·\93ම à¶ºà·\9dà¶\9cà·\8aâ\80\8dයà·\80à·\9a.",
+       "tooltip-ca-edit": "මà·\99ම à¶´à·\92ටà·\94à·\80 à·\83à¶\82à·\83à·\8aà¶\9aරණය à¶\9aරනà·\8aන",
        "tooltip-ca-addsection": "නව කොටසක් අරඹන්න",
        "tooltip-ca-viewsource": "මෙම පිටුව ආරක්‍ෂණය කොට ඇත.\nඔබට එහි මූලාශ්‍රය නැරඹිය හැක.",
        "tooltip-ca-history": "මෙම පිටුවේ පෙර සංශෝධන",
index 4002e8b..5a4c688 100644 (file)
        "linksearch-pat": "Vyhľadávací vzor:",
        "linksearch-ns": "Menný priestor:",
        "linksearch-ok": "Hľadať",
-       "linksearch-text": "Je možné používať zástupné znaky, napr. „*.wikipedia.org“.\nPovinná je minimálne doména najvyššej úrovne, napr. „*.org“.<br />\n{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: <code>$1</code> (ak protokol nie je uvedený, použije sa http://).",
+       "linksearch-text": "Je možné používať zástupné znaky, napr. „*.wikipedia.org“.\nPovinná je minimálne doména najvyššej úrovne, napr. „*.org“.<br />\n{{PLURAL:$2|Podporovaný protokol|Podporované protokoly}}: $1 (ak protokol nie je uvedený, použije sa http://).",
        "linksearch-line": "Na $1 odkazuje $2",
        "linksearch-error": "Zástupné znaky je možné použiť iba na začiatku názvu domény.",
        "listusersfrom": "Zobraziť používateľov počnúc:",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "pomlčka",
        "special-characters-title-emdash": "dlhá pomlčka",
-       "special-characters-title-minus": "mínus"
+       "special-characters-title-minus": "mínus",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM"
 }
index ce555e4..37b4b30 100644 (file)
@@ -10,7 +10,8 @@
                        "Yerpo",
                        "아라",
                        "MaGa",
-                       "Skalcaa"
+                       "Skalcaa",
+                       "Janezdrilc"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "actionthrottled": "Dejanje zaustavljeno",
        "actionthrottledtext": "Kot ukrep proti smetju, je število izvajanj tega dejanja v časovnem obdobju omejeno, in vi ste ta limit presegli.\nProsimo, poskusite znova čez nekaj minut.",
        "protectedpagetext": "Ta stran je bila zaklenjena za preprečitev urejanja ali drugih dejanj.",
-       "viewsourcetext": "Vsebino te strani si lahko ogledate in kopirate:",
-       "viewyourtext": "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
+       "viewsourcetext": "Vsebino te strani si lahko ogledate in kopirate.",
+       "viewyourtext": "Lahko si ogledate in kopirate vsebino <strong>vaših urejanj</strong> te strani.",
        "protectedinterface": "Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.\n\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
        "editinginterface": "<strong>Opozorilo:</strong> Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.",
        "translateinterface": "Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1|stran|strani}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nedavni sodelavec|nedavna sodelavca|nedavni sodelavci|nedavnih sodelavcev}}",
        "badretype": "Gesli, ki ste ju vnesli, se ne ujemata.",
+       "usernameinprogress": "Ustvarjanje računa za to uporabniško ime je že v teku. Prosimo, počakajte.",
        "userexists": "Uporabniško ime, ki ste ga vnesli, je že zasedeno.\nProsimo, izberite drugo.",
        "loginerror": "Napaka ob prijavi",
        "createacct-error": "Napaka pri ustvarjanju računa",
        "preview": "Predogled",
        "showpreview": "Prikaži predogled",
        "showdiff": "Prikaži spremembe",
-       "blankarticle": "<strong>Opozorilo:</strong> Stran, ki jo ustvarjate, je prazna.\nČe ponovno kliknete »{{int:savearticle}}«, bomo stran ustvarili brez kakršne koli vsebine.",
-       "anoneditwarning": "<strong>Opozorilo:</strong> Niste prijavljeni. Vaš IP-naslov bo javno viden, če naredite kakršno koli urejanje. Če se <strong>[$1 prijavite]</strong> ali <strong>[$2 ustvarite račun]</strong>, bodo vaša urejanja pripisana vašemu uporabniškemu imenu skupaj z drugimi prednostmi.",
+       "blankarticle": "<strong>Opozorilo:</strong> Stran, ki jo ustvarjate, je prazna.\nČe ponovno kliknete »{{int:savearticle}}«, bomo stran ustvarili brez kakršnekoli vsebine.",
+       "anoneditwarning": "<strong>Opozorilo:</strong> Niste prijavljeni. Vaš IP-naslov bo javno viden, če naredite kakršnokoli urejanje. Če se <strong>[$1 prijavite]</strong> ali <strong>[$2 ustvarite račun]</strong>, bodo vaša urejanja pripisana vašemu uporabniškemu imenu skupaj z drugimi prednostmi.",
        "anonpreviewwarning": "Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.",
        "missingsummary": "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
        "selfredirect": "<strong>Opozorilo:</strong> Stran preusmerjate na samo nase.\nMorda ste za cilj preusmeritve navedli napačno stran ali pa morda urejate napačno stran.\nČe ponovno kliknete »{{int:savearticle}}«, bomo preusmeritev vseeno ustvarili.",
        "editingold": "'''Opozorilo: Urejate staro redakcijo strani.'''\nČe jo boste shranili, bodo vse poznejše spremembe razveljavljene.",
        "yourdiff": "Primerjava",
        "copyrightwarning": "Vsi prispevki k {{GRAMMAR:dajalnik|{{SITENAME}}}} se obravnavajo kot objave pod pogoji $2 (za podrobnosti glej $1). Če niste pripravljeni na neusmiljeno urejanje in prosto razširjanje vašega gradiva, ga ne prispevajte.<br />\nPoleg tega zagotavljate, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz javno dostopnega ali podobnega prostega vira.\n'''Ne dodajajte avtorsko zaščitenega dela brez dovoljenja!'''",
-       "copyrightwarning2": "Vedite, da lahko drugi urejevalci urejajo, spremenijo ali odstranijo kateri koli prispevek k {{GRAMMAR:dajalnik|{{SITENAME}}}}.\nČe niste pripravljeni na neusmiljeno urejanje svojega gradiva, ga ne objavljajte tukaj.<br />\nPoleg tega jamčite, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz vira v javni lasti ali podobnega prostega vira (za podrobnosti glej $1).\n'''Ne objavljajte avtorsko zaščitenega gradiva brez dovoljenja!'''",
+       "copyrightwarning2": "Vedite, da lahko drugi urejevalci urejajo, spremenijo ali odstranijo katerikoli prispevek k {{GRAMMAR:dajalnik|{{SITENAME}}}}.\nČe niste pripravljeni na neusmiljeno urejanje svojega gradiva, ga ne objavljajte tukaj.<br />\nPoleg tega jamčite, da ste prispevke napisali oziroma ustvarili sami ali pa prepisali iz vira v javni lasti ali podobnega prostega vira (za podrobnosti glej $1).\n'''Ne objavljajte avtorsko zaščitenega gradiva brez dovoljenja!'''",
        "editpage-cannot-use-custom-model": "Modela vsebine strani ni mogoče spremeniti.",
        "longpageerror": "'''Napaka: Predloženo besedilo je dolgo $1 {{PLURAL:$1|kilobajt|kilobajta|kilobajte|kilobajtov}}, s čimer presega največjo dovoljeno dolžino $2 {{PLURAL:$2|kilobajta|kilobajtov|kilobajtov|kilobajtov}}.'''\nZato ga ni mogoče shraniti.",
        "readonlywarning": "<strong>Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti.</strong>\nProsimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
        "search-category": "(kategorija $1)",
        "search-file-match": "(ujema se z vsebino datoteke)",
        "search-suggest": "Iščete morda: $1",
+       "search-rewritten": "Prikazujemo rezultate za $1. Namesto tega poiščite $2.",
        "search-interwiki-caption": "Sorodni projekti",
        "search-interwiki-default": "Rezultati s strani $1:",
        "search-interwiki-more": "(več)",
        "prefsnologintext2": "Za spreminjanje svojih nastavitev se morate prijaviti.",
        "prefs-skin": "Koža",
        "skin-preview": "Predogled",
-       "datedefault": "Kakor koli",
+       "datedefault": "Kakorkoli",
        "prefs-labs": "Funkcije laboratorija",
        "prefs-user-pages": "Uporabniške strani",
        "prefs-personal": "Podatki o uporabniku",
        "rows": "Vrstic:",
        "columns": "Stolpcev:",
        "searchresultshead": "Nastavitve poizvedovanja",
-       "stub-threshold": "Prag označevanja <a href=\"#\" class=\"stub\">škrbin</a> (v bajtih):",
+       "stub-threshold": "Prag označevanja škrbin ($1):",
+       "stub-threshold-sample-link": "primer",
        "stub-threshold-disabled": "Onemogočeno",
        "recentchangesdays": "Število dni, prikazanih v zadnjih spremembah:",
        "recentchangesdays-max": "Največ $1 {{PLURAL:$1|dan|dneva|dnevi|dni}}",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[temo {{PLURAL:$1|spremlja|spremljata|spremljajo|spremlja|spremlja}} $1 {{PLURAL:$1|uporabnik|uporabnika|uporabniki|uporabnikov|uporabnikov}}]",
-       "rc_categories": "Omejitev na kategorije (ločite jih z »|«)",
-       "rc_categories_any": "Katero koli",
+       "rc_categories": "Omejitev na kategorije (ločite jih z »|«):",
+       "rc_categories_any": "Katera koli od izbranih",
        "rc-change-size-new": "po spremembi: $1 {{PLURAL:$1|zlog|zloga|zlogi|zlogov}}",
        "newsectionsummary": "/* $1 */ nov razdelek",
        "rc-enhanced-expand": "Pokaži podrobnosti",
        "uploaded-animate-svg": "V naloženi datoteki SVG smo našli oznako »animate«, ki lahko spreminja href z uporabo atributa »from« <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Določevanje atributov za dogodke je blokirano; v naloženi datoteki SVG smo našli <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-href-svg": "Uporaba oznake »set« za določevanje atributa »href« starševskega elementa je blokirano.",
-       "uploaded-wrong-setting-svg": "Uporaba oznake »set« za dodajanje oddaljenega/podatkovnega/skriptnega cilja kateremu koli atributu je blokirano. V naloženi datoteki SVG smo našli <code>&lt;set to=\"$1\"&gt;</code>.",
+       "uploaded-wrong-setting-svg": "Uporaba oznake »set« za dodajanje oddaljenega/podatkovnega/skriptnega cilja kateremukoli atributu je blokirano. V naloženi datoteki SVG smo našli <code>&lt;set to=\"$1\"&gt;</code>.",
        "uploaded-setting-handler-svg": "SVG, ki nastavi atribut »handler« z oddaljenim/podatkovnim/skriptom ciljem, je blokiran. V naloženi datoteki SVG smo našli <code>$1=\"$2\"</code>.",
-       "uploaded-remote-url-svg": "SVG, ki določi kateri koli slogovni atribut z oddaljenim URL-jem, je blokiran. V naloženi datoteki SVG smo našli <code>$1=\"$2\"</code>.",
+       "uploaded-remote-url-svg": "SVG, ki določi katerikoli slogovni atribut z oddaljenim URL-jem, je blokiran. V naloženi datoteki SVG smo našli <code>$1=\"$2\"</code>.",
        "uploaded-image-filter-svg": "V naloženi datoteki SVG smo našli slikovni filter z URL-jem: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Datoteka SVG vsebuje nedovoljen imenski prostor »$1«",
        "uploadinvalidxml": "XML v naloženi datoteki ne moremo razčleniti.",
        "upload-too-many-redirects": "URL vsebuje preveč preusmeritev",
        "upload-http-error": "Prišlo je do napake HTTP: $1",
        "upload-copy-upload-invalid-domain": "Nalaganje kopij s te domene ni možno.",
+       "upload-dialog-title": "Naloži datoteko",
+       "upload-dialog-error": "Prišlo je do napake",
+       "upload-dialog-warning": "Pojavilo se je opozorilo",
+       "upload-dialog-button-cancel": "Prekliči",
+       "upload-dialog-button-done": "Končano",
+       "upload-dialog-button-save": "Shrani",
+       "upload-dialog-button-upload": "Naloži",
+       "upload-dialog-label-select-file": "Izberi datoteko",
+       "upload-dialog-label-infoform-title": "Podrobnosti",
+       "upload-dialog-label-infoform-name": "Ime",
+       "upload-dialog-label-infoform-description": "Opis",
+       "upload-dialog-label-usage-title": "Uporaba",
+       "upload-dialog-label-usage-filename": "Ime datoteke",
        "backend-fail-stream": "Ne morem pretakati datoteke $1.",
        "backend-fail-backup": "Ne morem varnostno kopirati datoteke $1.",
        "backend-fail-notexists": "Datoteka $1 ne obstaja.",
        "randomincategory-nopages": "V kategoriji [[:Category:$1]] ni nobene strani.",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Naključna stran v kategoriji",
+       "randomincategory-submit": "Pojdi",
        "randomredirect": "Naključna preusmeritev",
        "randomredirect-nopages": "V imenskem prostoru »$1« ni preusmeritev.",
        "statistics": "Statistika",
        "newpages": "Nove strani",
        "newpages-username": "Uporabniško ime:",
        "ancientpages": "Najdlje nespremenjeni članki",
-       "move": "Prestavi",
+       "move": "Preimenuj",
        "movethispage": "Prestavi stran",
        "unusedimagestext": "Spodnje datoteke obstajajo, vendar niso vključene v nobeno stran.\nProsimo, upoštevajte, da se lahko druge spletne strani povezujejo na datoteko z neposrednim URL in je zato morda še vedno navedena tukaj, čeprav se aktivno uporablja.",
        "unusedcategoriestext": "Naslednje strani kategorij obstajajo, vendar jih ne uporablja noben članek ali druga kategorija.",
        "booksources-text": "Sledi seznam povezav do drugi spletnih strani, ki prodajajo nove in rabljene knjige, in imajo morda nadaljnje informacije o knjigah, ki jih iščete:",
        "booksources-invalid-isbn": "Za dani ISBN se ne zdi, da je veljaven; preverite za morebitne napake pri kopiranju iz prvotnega vira.",
        "specialloguserlabel": "Izvajalec:",
-       "speciallogtitlelabel": "Cilj (naslov ali uporabnik):",
+       "speciallogtitlelabel": "Cilj (naslov ali {{ns:user}}:uporabniškoime za uporabnika):",
        "log": "Dnevniki",
        "all-logs-page": "Vsi javni dnevniki",
        "alllogstext": "Združeno so prikazani dnevniki sprememb uporabniških pravic, preimenovanj uporabnikov, nalaganja predstavnostnih datotek, prestavljanja in zaščite strani, brisanja, registracij uporabnikov, sprememb položaja botov ter blokiranja in deblokiranja uporabnikov na strani {{SITENAME}}. Pogled lahko zožite z izbiro dnevnika, uporabniškega imena ali strani. Vedite, da polje »Uporabnik« razlikuje med malimi in velikimi črkami.",
        "linksearch-pat": "Iskalni vzorec:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Išči",
-       "linksearch-text": "Uporabljate lahko nadomestne znake, kot je »*.wikipedia.org«.\nZahtevana je vsaj najvišja domena, na primer »*.org«.<br />\n{{PLURAL:$2|Podprt protokol|Podprta protokola|Podprti protokoli}}: <code>$1</code> (če protokol ni določen, se privzame http://).",
+       "linksearch-text": "Uporabljate lahko nadomestne znake, kot je »*.wikipedia.org«.\nZahtevana je vsaj najvišja domena, na primer »*.org«.<br />\n{{PLURAL:$2|Podprt protokol|Podprta protokola|Podprti protokoli}}: $1 (če protokol ni določen, se privzame http://).",
        "linksearch-line": "$1 povezano iz $2",
        "linksearch-error": "Jokerji se lahko pojavijo le na začetku gostiteljskega imena.",
        "listusersfrom": "Prikaži uporabnike začenši z:",
        "listusers-noresult": "Ni najdenih uporabnikov.",
        "listusers-blocked": "(blokiran)",
        "activeusers": "Seznam aktivnih uporabnikov",
-       "activeusers-intro": "Seznam uporabnikov, ki so bili kakor koli aktivni v {{PLURAL:$1|zadnjem $1 dnevu|zadnjih $1 dneh}}.",
+       "activeusers-intro": "Seznam uporabnikov, ki so bili kakorkoli aktivni v {{PLURAL:$1|zadnjem $1 dnevu|zadnjih $1 dneh}}.",
        "activeusers-count": "$1 {{PLURAL:$1|dejanje|dejanji|dejanja|dejanj}} v {{PLURAL:$3|preteklem dnevu|preteklih $3 dneh}}",
        "activeusers-from": "Prikaži uporabnike začenši z:",
        "activeusers-hidebots": "Skrij bote",
        "emailuser": "Pošlji uporabniku e-pismo",
        "emailuser-title-target": "Pošlji {{GENDER:$1|uporabniku|uporabnici}} e-pošto",
        "emailuser-title-notarget": "Pošlji uporabniku e-pismo",
-       "emailpage": "Pošlji uporabniku e-pismo",
        "emailpagetext": "S spodnjim obrazcem lahko {{GENDER:$1|uporabniku|uporabnici}} pošljete e-poštno sporočilo.\nE-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo {{GENDER:$1|prejemnik lahko odgovoril|prejemnica lahko odgovorila}} neposredno vam.",
        "defemailsubject": "Elektronska pošta {{GRAMMAR:rodilnik|{{SITENAME}}}} od uporabnika »$1«",
        "usermaildisabled": "Uporabniška e-pošta je onemogočena",
        "emailccsubject": "Kopija tvojega sporočila iz $1: $2",
        "emailsent": "E-pismo je poslano!",
        "emailsenttext": "E-pismo je poslano.",
-       "emailuserfooter": "To e-poštno sporočilo je bilo poslal(-a) $1 uporabniku $2 s funkcijo »{{int:emailpage}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
+       "emailuserfooter": "To e-poštno sporočilo je bilo poslal(-a) $1 uporabniku $2 s funkcijo »{{int:emailuser}}« na {{GRAMMAR:dative|{{SITENAME}}}}.",
        "usermessage-summary": "Pusti sistemsko sporočilo.",
        "usermessage-editor": "Sistemski sporočevalec",
        "watchlist": "Spisek nadzorov",
        "watchlistanontext": "Za pregled ali urejanje vsebine vašega spiska nadzorov se morate prijaviti.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisek nadzorov",
-       "addedwatchtext": "Stran »[[:$1]]« smo dodali na vaš [[Special:Watchlist|spisek nadzorov]].\nTam bodo navedene prihodnje spremembe te strani in pripadajoče pogovorne strani.",
+       "addedwatchtext": "»[[:$1]]« in pripadajočo pogovorno stran smo dodali na vaš [[Special:Watchlist|spisek nadzorov]].",
        "addedwatchtext-short": "Stran »$1« smo dodali na vaš spisek nadzorov.",
        "removewatch": "Odstrani s spiska nadzorov",
-       "removedwatchtext": "Stran »[[:$1]]« smo odstranili z vašega [[Special:Watchlist|spiska nadzorov]].",
+       "removedwatchtext": "»[[:$1]]« in pripadajočo pogovorno stran smo odstranili z vašega [[Special:Watchlist|spiska nadzorov]].",
        "removedwatchtext-short": "Stran »$1« smo odstranili z vašega spiska nadzorov.",
        "watch": "Opazuj",
        "watchthispage": "Opazuj stran",
        "rollback-success": "Razveljavljene spremembe uporabnika $1;\nvrnjeno na urejanje uporabnika $2.",
        "sessionfailure-title": "Neuspeh seje",
        "sessionfailure": "Vaša prijava ni uspela; da bi preprečili ugrabitev seje, je bilo dejanje preklicano. Prosimo, izberite »Nazaj« in ponovno naložite stran, s katere prihajate, nato poskusite znova.",
+       "changecontentmodel": "Spremeni model vsebine strani",
+       "changecontentmodel-legend": "Spremeni model vsebine",
+       "changecontentmodel-title-label": "Naslov strani",
+       "changecontentmodel-model-label": "Novi model vsebine",
+       "changecontentmodel-reason-label": "Razlog:",
+       "changecontentmodel-success-title": "Spremenili smo model vsebine",
+       "changecontentmodel-success-text": "Spremenili smo vrsto vsebine [[:$1]].",
+       "changecontentmodel-cannot-convert": "Vsebine na [[:$1]] ni mogoče pretvoriti v vrsto $2.",
+       "changecontentmodel-nodirectediting": "Model vsebine $1 ne podpira neposrednega urejanja",
+       "log-name-contentmodel": "Dnevnik sprememb modela vsebine",
+       "log-description-contentmodel": "Dogodki, povezani z modeli vsebin strani",
+       "logentry-contentmodel-change": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} model vsebine strani $3 z »$4« na »$5«",
+       "logentry-contentmodel-change-revertlink": "vrni",
+       "logentry-contentmodel-change-revert": "vrni",
        "protectlogpage": "Dnevnik zaščit strani",
        "protectlogtext": "Prikazan je seznam sprememb zaščit strani.\nOglejte si [[Special:ProtectedPages|seznam zaščitenih strani]] za seznam trenutno zaščitenih strani.",
        "protectedarticle": "je zaščitil(-a) stran »[[$1]]«",
        "restriction-upload": "Naloži",
        "restriction-level-sysop": "popolna zaščita",
        "restriction-level-autoconfirmed": "delno zaščiteno",
-       "restriction-level-all": "katera koli raven",
+       "restriction-level-all": "katerakoli raven",
        "undelete": "Ogled izbrisanih strani",
        "undeletepage": "Prikaži izbrisane strani in jih obnovi",
        "undeletepagetitle": "'''Slednje zajema izbrisane redakcije [[:$1|$1]].'''",
        "undeletepagetext": "{{PLURAL:$1|Naslednja stran je bila izbrisana, vendar je še vedno v arhivu in jo lahko obnovite.|Naslednji $1 strani sta bili izbrisani, vendar sta še vedno v arhivu in ju lahko obnovite.|Naslednje $1 strani so bile izbrisane, vendar so še vedno v arhivu in jih lahko obnovite.|Naslednjih $1 strani je bilo izbrisanih, vendar so še vedno v arhivu in jih lahko obnovite.}}\nArhiv je treba občasno počistiti.",
        "undelete-fieldset-title": "Obnovi redakcije",
        "undeleteextrahelp": "Da bi obnovili celotno stran z vso njeno zgodovino, pustite vsa potrditvena polja prazna in kliknite '''''Obnovi'''''.\nČe želite obnoviti le določene redakcije strani, pred klikom gumba '''''Obnovi''''' označite ustrezna potrditvena polja.",
-       "undeleterevisions": "{{PLURAL:$1|Arhivirana je|Arhivirani sta|Arhivirane so|Arhiviranih je|Arhiviranih ni}} $1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}",
+       "undeleterevisions": "{{PLURAL:$1|Izbrisana je|Izbrisani sta|Izbrisane so|Izbrisanih je}} $1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij}}",
        "undeletehistory": "Če obnovite stran, bodo v zgodovino obnovljene vse redakcije.\nČe je bila po brisanju ustvarjena nova stran z enakim imenom, bodo obnovljene redakcije prikazane v prejšnji zgodovini.",
        "undeleterevdel": "Obnovitev ne bo izvedena, če vodi v delni izbris redakcije vrhnje strani ali datoteke.\nV takem primeru morate odznačiti ali prikazati najnovejšo izbrisano redakcijo.",
        "undeletehistorynoadmin": "Stran je bila izbrisana.\nRazlog za izbris je skupaj s podrobnostmi o uporabnikih, ki so jo urejali pred izbrisom, naveden v prikazanem povzetku.\nDejansko besedilo izbrisanih redakcij je dostopno le administratorjem.",
        "lockfilenotwritable": "Datoteka zaklepanja zbirke podatkov ni zapisljiva.\nZa zaklepanje in odklepanje zbirke podatkov mora biti ta datoteka zapisljiva s strani spletnega strežnika.",
        "databasenotlocked": "Zbirka podatkov ni zaklenjena.",
        "lockedbyandtime": "($1 dne $2 ob $3)",
-       "move-page": "Prestavi $1",
+       "move-page": "Preimenuj $1",
        "move-page-legend": "Prestavitev strani",
        "movepagetext": "Z naslednjim obrazcem lahko stran preimenujete in hkrati prestavite tudi vso njeno zgodovino.\nDosedanja stran se bo spremenila v preusmeritev na prihodnje mesto.\nSamodejno lahko posodobite preusmeritve, ki kažejo na dosedanji naslov.\nČe se za to ne odločite, ne pozabite preveriti vseh [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nOdgovorni ste, da bodo povezave še naprej kazale na prava mesta.\n\nKjer stran z izbranim novim imenom že obstaja, dejanje '''ne''' bo izvedeno, razen če je sedanja stran preusmeritev in brez zgodovine urejanj.\nTo pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.\n\n'''Opozorilo!'''\nPrestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.",
        "movepagetext-noredirectfixer": "Z uporabo spodnjega obrazca lahko preimenujete stran tako, da prestavite vso njeno zgodovino na novo ime.\nStar naslov bo postal preusmeritvena stran na nov naslov.\nNe pozabite preveriti [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nVi ste odgovorni, da vse povezave še naprej kažejo tja, kamor naj bi.\n\nUpoštevajte, da stran '''ne''' bo prestavljena, če že obstaja stran z novim naslovom, razen če je prazna ali preusmeritev brez pretekle zgodovine urejanj.\nTo pomeni, da lahko stran preimenujete nazaj, če ste naredili napako, vendar ne morete prepisati obstoječe strani.\n\n'''Opozorilo!'''\nTo je lahko velika in nepričakovana sprememba za priljubljeno stran;\nprosimo, pred nadaljevanjem se prepričajte, da razumete posledice tega dejanja.",
        "movepagetalktext": "Če obstaja, bo samodejno prestavljena tudi pripadajoča pogovorna stran, '''razen kadar'''\n*pod novim imenom že obstaja neprazna pogovorna stran ali\n*ste odkljukali spodnji okvirček.\n\nČe je tako, boste morali pogovorno stran, če želite, prestaviti ali povezati ročno.",
-       "movearticle": "Prestavi stran:",
+       "movearticle": "Preimenuj stran:",
        "moveuserpage-warning": "'''Opozorilo:''' Premikate uporabniško stran. To pomeni, da bo premaknjena samo stran in uporabnik ''ne'' bo preimenovan.",
        "movecategorypage-warning": "<strong>Opozorilo:</strong> Prestavili boste stran kategorije. Pomnite, da boste prestavili samo stran; vse strani v stari kategoriji <em>ne</em> bomo prekategorizirali v novo kategorijo.",
        "movenologintext": "Za prestavljanje strani morate biti registrirani in [[Special:UserLogin|prijavljeni]].",
        "tooltip-pt-logout": "Odjavite se",
        "tooltip-pt-createaccount": "Predlagamo vam, da ustvarite račun in se prijavite, vendar pa to ni obvezno.",
        "tooltip-ca-talk": "Pogovor o strani",
-       "tooltip-ca-edit": "Stran lahko uredite. Preden jo shranite, uporabite gumb za predogled.",
+       "tooltip-ca-edit": "Uredi stran",
        "tooltip-ca-addsection": "Začnite novo razpravo",
        "tooltip-ca-viewsource": "Stran je zaščitena, ogledate si lahko njeno izvorno kodo",
        "tooltip-ca-history": "Prejšnje redakcije strani",
        "tooltip-ca-unprotect": "Spremenite zaščito strani",
        "tooltip-ca-delete": "Brišite stran",
        "tooltip-ca-undelete": "Obnovite pred izbrisom napravljena urejanja strani.",
-       "tooltip-ca-move": "Preimenujte stran",
+       "tooltip-ca-move": "Preimenuj stran",
        "tooltip-ca-watch": "Dodajte stran na spisek nadzorov",
        "tooltip-ca-unwatch": "Odstranite stran s spiska nadzorov",
        "tooltip-search": "Preiščite wiki",
        "tooltip-ca-nstab-main": "Prikaže članek",
        "tooltip-ca-nstab-user": "Prikaže uporabniško stran",
        "tooltip-ca-nstab-media": "Prikaže stran s predstavnostno vsebino",
-       "tooltip-ca-nstab-special": "Te posebne strani ne morete urejati",
+       "tooltip-ca-nstab-special": "To je posebna stran in je ni mogoče urejati",
        "tooltip-ca-nstab-project": "Prikaže stran projekta",
        "tooltip-ca-nstab-image": "Prikaže stran s sliko ali drugo datoteko",
        "tooltip-ca-nstab-mediawiki": "Prikaže sistemsko sporočilo",
        "spam_reverting": "Vračanje na zadnjo redakcijo brez povezav na $1",
        "spam_blanking": "Vse redakcije so vsebovale povezave na $1, izpraznjujem",
        "spam_deleting": "Vse redakcije so vsebovale povezave na $1, brišem",
-       "simpleantispam-label": "Preverjanje proti smetju.\n'''NE''' izpolnite tega!",
+       "simpleantispam-label": "Preverjanje proti smetju.\n<strong>Ne</strong> izpolnite tega!",
        "pageinfo-title": "Informacije o »$1«",
        "pageinfo-not-current": "Oprostite, vendar ne moremo nuditi podatkov starejših redakcij.",
        "pageinfo-header-basic": "Osnovni podatki",
        "pageinfo-robot-index": "Dovoljeno",
        "pageinfo-robot-noindex": "Nedovoljeno",
        "pageinfo-watchers": "Število spremljevalcev strani",
+       "pageinfo-visiting-watchers": "Število sledilcev strani, ki so si ogledali zadnja urejanja",
        "pageinfo-few-watchers": "Manj kot $1 {{PLURAL:$1|spremljevalec|spremljevalca|spremljevalci|spremljevalcev}}",
+       "pageinfo-few-visiting-watchers": "Lahko obstaja uporabnik, ki si ogleduje zadnja urejanja",
        "pageinfo-redirects-name": "Število preusmeritev na stran",
        "pageinfo-subpages-name": "Podstrani strani",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|preusmeritev|preusmeritvi|preusmeritve|preusmeritev}}; $3 {{PLURAL:$3|nepreusmeritev|nepreusmeritvi|nepreusmeritve|nepreusmeritev}})",
        "confirmemail_pending": "Potrditveno geslo vam je že bilo poslano; če ste pred kratkim ustvarili svoj račun, boste na njega morali počakati nekaj minut da prispe, preden boste poskušali zahtevali novo geslo.",
        "confirmemail_send": "Pošlji mi potrditveno sporočilo",
        "confirmemail_sent": "Potrditveno e-sporočilo je bilo poslano.",
-       "confirmemail_oncreate": "Potrditveno geslo je bilo poslano na vaš e-poštni naslov.\nTo geslo ni potrebno za vpis, vendar ga boste morali vnesti pred omogočanjem katere koli funkcije temelječe na e-pošti na wikiju.",
+       "confirmemail_oncreate": "Potrditveno geslo je bilo poslano na vaš e-poštni naslov.\nTo geslo ni potrebno za vpis, vendar ga boste morali vnesti pred omogočanjem katerekoli funkcije temelječe na e-pošti na wikiju.",
        "confirmemail_sendfailed": "Potrditvenega sporočila ni bilo mogoče poslati.\nProsimo, preverite, če niste naslova vnesli napačno.\n\nPosrednik e-pošte je vrnil: $1",
        "confirmemail_invalid": "Potrditveno geslo je neveljavno. Morda je poteklo.",
        "confirmemail_needlogin": "Za potrditev svojega e-poštnega naslova se morate $1.",
        "version-poweredby-others": "drugi",
        "version-poweredby-translators": "Prevajalci translatewiki.net",
        "version-credits-summary": "Radi bi priznali prispevek naslednjih oseb k [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki je prosto programje; lahko ga razširjate in / ali spreminjate pod pogoji GNU General Public License, kot ga je objavila Free Software Foundation; bodisi License različice 2 ali (po vaši izbiri) katere koli poznejše različice.\n\nMediaWiki je razširjan v upanju, da bo uporaben, vendar BREZ KAKRŠNEGA KOLI ZAGOTOVILA; tudi brez posrednega jamstva PRODAJNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. Oglejte si GNU General Public License za več podrobnosti.\n\nSkupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo GNU General Public License]; če je niste, pišite Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ali jo [//www.gnu.org/licenses/old-licenses/gpl-2.0.html preberite na spletu].",
+       "version-license-info": "MediaWiki je prosto programje; lahko ga razširjate in / ali spreminjate pod pogoji GNU General Public License, kot ga je objavila Free Software Foundation; bodisi License različice 2 ali (po vaši izbiri) katerekoli poznejše različice.\n\nMediaWiki je razširjan v upanju, da bo uporaben, vendar BREZ KAKRŠNEGA KOLI ZAGOTOVILA; tudi brez posrednega jamstva PRODAJNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. Oglejte si GNU General Public License za več podrobnosti.\n\nSkupaj s programom bi morali bi prejeti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopijo GNU General Public License]; če je niste, pišite Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ali jo [//www.gnu.org/licenses/old-licenses/gpl-2.0.html preberite na spletu].",
        "version-software": "Nameščena programska oprema",
        "version-software-product": "Izdelek",
        "version-software-version": "Različica",
        "htmlform-cloner-create": "Dodaj več",
        "htmlform-cloner-delete": "Odstrani",
        "htmlform-cloner-required": "Zahtevana je vsaj ena vrednost.",
+       "htmlform-title-badnamespace": "[[:$1]] ni v imenskem prostoru »{{ns:$2}}«.",
+       "htmlform-title-not-creatable": "»$1« je naslov strani, ki ga ni mogoče ustvariti",
+       "htmlform-title-not-exists": "[[:$1]] ne obstaja.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ne obstaja.",
+       "htmlform-user-not-valid": "<strong>$1</strong> ni veljavno uporabniško ime.",
        "sqlite-has-fts": "$1 s podporo iskanju polnih besedil",
        "sqlite-no-fts": "$1 brez podpore iskanju polnih besedil",
        "logentry-delete-delete": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} stran $3",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun $3",
        "logentry-newusers-byemail": "$1 je {{GENDER:$2|ustvaril|ustvarila|ustvaril(-a)}} uporabniški račun $3; geslo je bilo poslano po e-pošti",
        "logentry-newusers-autocreate": "Račun $1 je bil samodejno {{GENDER:$2|ustvarjen}}",
+       "logentry-protect-move_prot": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} nastavitve zaščite s strani $4 na $3",
        "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3 z $4 na $5",
        "logentry-rights-rights-legacy": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3",
        "logentry-rights-autopromote": "$1 je {{GENDER:$2|bil samodejno povišan|bila samodejno povišana|bil(-a) samodejno povišan(-a)}} z $4 na $5",
        "special-characters-title-endash": "navaden pomišljaj",
        "special-characters-title-emdash": "dolgi pomišljaj",
        "special-characters-title-minus": "znak za minus",
+       "mw-widgets-dateinput-no-date": "Datum ni izbran",
+       "mw-widgets-dateinput-placeholder-day": "LLLL-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "LLLL-MM",
        "mw-widgets-titleinput-description-new-page": "stran še ne obstaja",
        "mw-widgets-titleinput-description-redirect": "preusmeritev na $1"
 }
index da013e8..45f8809 100644 (file)
        "ncategories": "$1 {{PLURAL:$1|Kategorie|Kategoria}}",
        "nmembers": "{{PLURAL:$1|1 Eentrag|$1 Eenträge}}",
        "nrevisions": "{{PLURAL:$1|1 Beoarbeetung|$1 Beoarbeetunga}}",
-       "nviews": "{{PLURAL:$1|1 Obfroage|$1 Obfroaga}}",
        "specialpage-empty": "De Seite enthält aktuell kenne Einträge.",
        "lonelypages": "Verwaiste Seyta",
        "lonelypagestext": "De folgenden Seyta waan ne eingebunden oder is werd ne uff se ei {{SITENAME}} verwiesa.",
        "deletedcontributions-title": "Geläschte Beiträge",
        "linksearch-ns": "Noamensraum:",
        "linksearch-ok": "Sucha",
-       "linksearch-text": "Diese Spezialseite ermeegliecht de Suche noach Seita, ei denen bestimmte Weblinks enthaala sein. Dabei kinna Wildcards wie beispielsweise <code>*.example.com</code> benutzt waan.<br />Understitzte Protokolle: <code>$1</code>",
+       "linksearch-text": "Diese Spezialseite ermeegliecht de Suche noach Seita, ei denen bestimmte Weblinks enthaala sein. Dabei kinna Wildcards wie beispielsweise <code>*.example.com</code> benutzt waan.<br />Understitzte Protokolle: $1",
        "linksearch-line": "$1 ies verlinkt vun $2",
        "linksearch-error": "Wildcards kinna ock oam Oanfang dar URL verwendet waan.",
        "listusersfrom": "Zeige Benutzer ob:",
        "delete-toobig": "Diese Seite hoot miet meh ols $1 {{PLURAL:$1|Version|Versionen}} anne siehr lange Versionsgeschichte. Doas Läscha sulcher Seita wurde eingeschränkt, im anne versehentliche Ieberlastung der Server zu verhindern.",
        "delete-warning-toobig": "Diese Seite hoot miet meh ols $1 {{PLURAL:$1|Version|Versionen}} anne sehr lange Versionsgeschichte. Doas Läscha koan zu Sterunga eim Datenbankbetrieb fiehrn.",
        "rollback": "Zerrickesetza dar Änderunga",
-       "rollback_short": "Zerrickesetza",
        "rollbacklink": "Zerrickesetza",
        "rollbackfailed": "Zerrickesetza gescheitert",
        "cantrollback": "De Änderung koan ne zerrickegesetzt waan, do is kenne friehera Autoren gibt.",
        "import-interwiki-text": "Wähle a Wiki und anne Seite zum Importieren aus.\nDe Versionsdaten und Nutzernoama bleiba dabei erhaala.\nOlle Transwiki-Import-Aksjonna waan eim [[Special:Log/import|Import-Logbuch]] protokolliert.",
        "import-interwiki-history": "Olle Versionen dieser Seite importieren",
        "import-interwiki-templates": "Olle Vurloaga einschließen",
-       "import-interwiki-namespace": "Zielnoamasraum:",
        "import-upload-filename": "Dateinoame:",
        "importtext": "Uff dieser Spezialseyte kinna ieber de [[Special:Export|Exportfunktion]] eim Quellwiki exportierte Seyta ei dieses Wiki importiert waan.",
        "importstart": "Importiere Seite …",
        "import-token-mismatch": "Verlust dar Sessiondaten. Bitte versuche is erneut.",
        "import-invalid-interwiki": "Aus damm oagegahn'n Wiki ies kee Import meeglich.",
        "importlogpagetext": "Administrativer Import vu Seyta miet Versionsgeschichte vu andern Wikis.",
-       "import-logentry-upload": "hoot „[[$1]]“ vu a'r Datei importiert",
-       "import-logentry-interwiki": "hoot „$1“ importiert (Transwiki)",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|Version|Versiona}} vun $2",
        "tooltip-pt-userpage": "Denne Nutzerseyte",
        "tooltip-pt-anonuserpage": "Nutzerseite dar IP-Atresse vu dar aus du Änderunga durchfiehrst",
        "watchlisttools-view": "Beobachtungsliste: Änneronga",
        "watchlisttools-edit": "normal bearbta",
        "watchlisttools-raw": "eim Listenfurmat bearbta (Import/Export)",
-       "unknown_extension_tag": "Unbekennter Extension-Tag „$1“",
        "duplicate-defaultsort": "Ochtiche: Dar Sortierungsschlissel „$2“ ieberschreibt dann vorher verwendeta Schlissel „$1“.",
        "version-specialpages": "Spezialseyta",
        "version-other": "Oanderes",
index 137331a..5813cfe 100644 (file)
                        "아라",
                        "Gertakapllani",
                        "OrvenBregu",
-                       "Macofe"
+                       "Macofe",
+                       "Liridon",
+                       "Ammartivari",
+                       "Kosovastar"
                ]
        },
-       "tog-underline": "Nënvizo lidhjet:",
-       "tog-hideminor": "Fshih redaktimet e vogla në ndryshimet e fundit",
+       "tog-underline": "Nënvizizimi i lidhjes:",
+       "tog-hideminor": "Fsheh redaktimet e vogla nga ndryshimet e fundit",
        "tog-hidepatrolled": "Fshih redaktimet e vrojtuara në ndryshimet e fundit",
        "tog-newpageshidepatrolled": "Fshih faqet e vrojtuara nga lista e faqeve të reja",
        "tog-extendwatchlist": "Zgjero listën e faqeve të vëzhguara që t'i tregojë të gjitha ndryshimet, jo vetëm më të fundit.",
@@ -44,6 +47,7 @@
        "tog-watchdefault": "Shto faqet dhe skedat e redaktuara prej meje tek lista e faqeve nën mbikqyrje",
        "tog-watchmoves": "Shto faqet dhe skedat e zhvendosura prej meje tek lista e faqeve nën mbikqyrje",
        "tog-watchdeletion": "Shto faqet dhe skedat e grisura prej meje tek lista e faqeve  nën mbikqyrje",
+       "tog-watchrollback": "Shto faqet ku unë kam kryer një rikthim tek lista ime mbikqyrëse",
        "tog-minordefault": "Shëno të gjitha redaktimet si të vogla automatikisht",
        "tog-previewontop": "Vendose kutinë e bocetit sipër kutisë së redaktimeve",
        "tog-previewonfirst": "Tregoje bocetin në redaktimin e parë",
@@ -94,7 +98,7 @@
        "february": "shkurt",
        "march": "mars",
        "april": "prill",
-       "may_long": "Maj",
+       "may_long": "maj",
        "june": "qershor",
        "july": "korrik",
        "august": "gusht",
        "feb": "Shku",
        "mar": "Mar",
        "apr": "Pri",
-       "may": "maj",
+       "may": "Maj",
        "jun": "Qer",
        "jul": "Korr",
        "aug": "Gush",
        "pagecategories": "{{PLURAL:$1|Kategoria|Kategoritë}}",
        "category_header": "Artikuj në kategorinë \"$1\"",
        "subcategories": "Nën-kategori",
-       "category-media-header": "Skeda në kategori \"$1\"",
+       "category-media-header": "Skeda në kategori \"$1\"",
        "category-empty": "''Kjo kategori aktualisht nuk përmban asnjë faqe apo media.''",
        "hidden-categories": "{{PLURAL:$1|Kategori e fshehur|Kategori të fshehura}}",
        "hidden-category-category": "Kategori të fshehura",
        "sort-descending": "Radhit në zbritje",
        "sort-ascending": "Radhit në ngjitje",
        "nstab-main": "Artikulli",
-       "nstab-user": "Faqja e përdoruesit",
-       "nstab-media": "Media-faqe",
+       "nstab-user": "{{GENDER:{{ROOTPAGENAME}}|Faqja e përdoruesit|Faqja e përdorueses}}",
+       "nstab-media": "Medie",
        "nstab-special": "Faqe speciale",
-       "nstab-project": "Projekt-faqe",
+       "nstab-project": "Projekti",
        "nstab-image": "Skedë",
        "nstab-mediawiki": "Mesazh",
        "nstab-template": "Stampa",
        "readonly_lag": "Databaza është kyçur automatikisht për t'i dhënë kohë serverëve databazë slave që të arrijnë në një nivel me serverin databazë master",
        "internalerror": "Gabim i brendshëm",
        "internalerror_info": "Gabim i brendshëm: $1",
+       "internalerror-fatal-exception": "Përjashtim fatal i tipit \"$1\"",
        "filecopyerror": "I pamundur kopjimi i skedës \"$1\" tek \"$2\".",
        "filerenameerror": "I pamundur riemërtimi i skedës \"$1\" në \"$2\".",
        "filedeleteerror": "E pamundur fshirja e skedës \"$1\".",
        "createacct-submit": "Krijoni llogarinë tuaj",
        "createacct-another-submit": "Krijo një llogari tjeter",
        "createacct-benefit-heading": "{{SITENAME}} është bërë nga njerëz si ju.",
-       "createacct-benefit-body1": "$1 {{PLURAL:$1|redaktim|redaktime}}",
-       "createacct-benefit-body2": "\n{{Plural: $ 1 | faqe | faqe}}",
-       "createacct-benefit-body3": "kohët e fundit <span class=\"notranslate\" translate=\"asnjë\">{{PLURAL:$1|</span>kontribues|kontribuesit}}",
+       "createacct-benefit-body1": "{{PLURAL:$1|redaktim|redaktime}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|faqe|faqe}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|kontribues}} kohët e fundit",
        "badretype": "Fjalëkalimet nuk janë njësoj.",
        "userexists": "Emri i përdoruesit që kërkuat është në përdorim. \nZgjidhni një emër tjetër.",
        "loginerror": "Gabim gjatë identifikimit",
        "passwordreset": "Ndrysho fjalkalimin",
        "passwordreset-text-one": "Plotësoni këtë formular për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.",
        "passwordreset-text-many": "<span class=\"notranslate\" translate=\"asnjë\">{{PLURAL:$1|</span>Mbush një nga fushat për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.}}",
-       "passwordreset-legend": "Ndrysho fjalkalimin",
        "passwordreset-disabled": "Rivendosja e fjalëkalimit është deaktivizuar në këtë wiki.",
        "passwordreset-emaildisabled": "Karakteristikat e  Email janë të paaftë në këtë wiki.",
        "passwordreset-username": "Nofka:",
        "updated": "(E ndryshuar)",
        "note": "'''Shënim:'''",
        "previewnote": "'''Vini re! Kjo faqe është vetëm për shqyrtim.'''\nNdryshimet tuaja nuk janë ruajtur ende!",
-       "continue-editing": "Vazhdo ndryshimin",
+       "continue-editing": "Shko në pjesën për redaktim",
        "previewconflict": "Kjo parapamje reflekton tekstin sipër kutisë së redaktimit siç do të duket kur të kryeni ndryshimin.",
        "session_fail_preview": "'''Ju kërkojmë ndjesë! Redaktimi juaj nuk mund të perpunohej për shkak të humbjes së të dhënave të seancës.'''\nJu lutemi, provojeni përsëri.\nNëse përsëri nuk punon, provoni të [[Special:UserLogout|dilni nga faqja]] dhe të identifikoheni serish.",
        "session_fail_preview_html": "'''Ju kërkojmë ndjesë! I pamundur përpunimi i redaktimeve tuaja për shkak të humbjes së të dhënave të seancës.'''\n'' Për shkak se {{SITENAME}} ka të aktivizuar përdorimin e HTML-së së papërpunuar, teksti për shqyrtim është fshehur si masë parandaluese kundër sulmeve JavaScript.''\n'''Nëse kjo është një përpjekje e sinqertë për redaktim, ju lutemi, provojeni përsëri.'''\nNëse përsëri nuk funksiono, provoni [[Special:UserLogout|të dilni nga faqja]] dhe të identifikoheni sërish.",
        "invalid-content-data": "Të pavlefshme të dhënave e përmbajtjes",
        "editwarning-warning": "Duke e lënë këtë faqe mund të shkaktojë ju për të humbur të gjitha ndryshimet që keni bërë ju.\nNëse ju jeni regjistruar, ju mund të çaktivizoni këtë paralajmërim në \"{{int:prefs-editing}}\" seksionin e preferencave tuaja.",
        "content-model-text": "tekst i thejshtë",
+       "content-model-javascript": "JavaScript",
        "expensive-parserfunction-warning": "Kujdes: Kjo faqe ka shumë kërkesa që kërkojnë analizë gramatikore të kushtueshme për sistemin.\n\nDuhet të ketë më pakë se $2, {{PLURAL:$2|kërkesë|kërkesa}}, kurse tani {{PLURAL:$1|është $1 kërkesë|janë $1 kërkesa}}.",
        "expensive-parserfunction-category": "Faqe me shumë shprehje të kushtueshmë për analizë gramatikore",
        "post-expand-template-inclusion-warning": "'''Kujdes''': Numri i shablloneve që perfshihen është shumë i madh.\nDisa shabllone nuk do të përfshihen.",
        "currentrev": "Versioni i tanishëm",
        "currentrev-asof": "Versioni momental që nga $1",
        "revisionasof": "Versioni i $1",
-       "revision-info": "Versioni më $1 nga $2",
+       "revision-info": "Versioni i datës $1 nga {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version më i vjetër",
        "nextrevision": "Version më i ri →",
        "currentrevisionlink": "shikoni versionin e tanishëm",
        "histlegend": "Legjenda: (tani) = ndryshimet me versionin e tanishëm,\n(fund) = ndryshimet me versionin e parardhshëm, V = redaktim i vogël",
        "history-fieldset-title": "Shfleto historikun",
        "history-show-deleted": "Vetëm versionet të grisur",
-       "histfirst": "Së pari",
-       "histlast": "Së fundmi",
+       "histfirst": "më të vjetër",
+       "histlast": "më të rinj",
        "historysize": "({{PLURAL:$1|1 B|$1 B}})",
        "historyempty": "(bosh)",
        "history-feed-title": "Historiku i versioneve",
        "history-feed-empty": "Faqja që kërkuat nuk ekziston. Ajo mund të jetë grisur nga wiki ose mund të jetë zhvendosur nën një emër tjetër. Mund të provoni ta gjeni duke e [[Special:Search|kërkuar]].",
        "rev-deleted-comment": "(Edit përmbledhje larguar)",
        "rev-deleted-user": "(përdoruesi u largua)",
-       "rev-deleted-event": "(veprimi në regjistër është hequr)",
+       "rev-deleted-event": "(detajet e regjistrit janë hequr)",
        "rev-deleted-user-contribs": "[Përdoruesi ose adresa IP u hoq - redaktimet e  fshehura nga kontribuesit]",
        "rev-deleted-text-permission": "Versioni i kësaj faqeje është '''fshirë'''.\nDetajet mund të gjenden tek [{{fullurl:{{#Special:Log}}/delete={{FULLPAGENAME}}}} regjistri i grisjeve].",
        "rev-deleted-text-unhide": "Ky version i faqes është '''grisur'''.\nDetajet mund të gjenden tek [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAME}}}} regjistri i grisjeve].\nJu akoma mund ta [$1 shikoni këtë version] nëse doni të vazhdoni.",
        "revdelete-hide-image": "Fshih përmbajtjen skedës",
        "revdelete-hide-name": "Fshihe veprimin dhe shënjestrën",
        "revdelete-hide-comment": "fshih komentin e redaktimit",
-       "revdelete-hide-user": "Fshihe emrin/IP-në të redaktuesit",
+       "revdelete-hide-user": "Nofta e redaktuesit/Adresa IP",
        "revdelete-hide-restricted": "Ndalo të dhëna nga administrues si dhe të tjerë",
        "revdelete-radio-same": "(Mos ndryshoni)",
-       "revdelete-radio-set": "Po",
-       "revdelete-radio-unset": "Jo",
+       "revdelete-radio-set": "Fshehur",
+       "revdelete-radio-unset": "Dukshëm",
        "revdelete-suppress": "Ndalo të dhëna nga administrues si dhe të tjerë",
        "revdelete-unsuppress": "Hiq kufizimet nga versionet e restauruara",
        "revdelete-log": "Arsyeja:",
        "revdelete-no-change": "'''Kujdes:''' artikulli i datës $2, $1 e ka kërkesën e parametrit të dukshmërisë.",
        "revdelete-concurrent-change": "Gabim gjatë modifikimit të artikullit të datës $2, $1: statusi i tij duket të jetë ndryshuar nga dikush tjetër kur ju po provonit ta modifikonit.\nJu lutemi kontrolloni regjistrat.",
        "revdelete-only-restricted": "Gabim gjatë fshehjes së artikullit të datës $2, $1: ju nuk mund të fshihni artikuj nga pamja e administratorëve pa zgjedhur gjithashtu një nga opsionet e tjera të dukshmërisë.",
-       "revdelete-reason-dropdown": "* Arsye grisjeje e përbashkët\n** Shkelje të të drejtave të autorit\n** Informacion pa  kriter personal\n** Potencialisht informacion shfipës",
+       "revdelete-reason-dropdown": "* Arsye të zakonshme të grisjes\n** Shkelje të të drejtave të autorit\n** Komente ose të dhëna personale të papërshtatshme\n** Emër i papërshtatshëm i përdoruesit\n** Të dhëna potencialisht shpifëse",
        "revdelete-otherreason": "Arsye tjetër/shtesë:",
        "revdelete-reasonotherlist": "Arsye tjetër",
        "revdelete-edit-reasonlist": "Arsye grisjeje për redaktimet",
        "compareselectedversions": "Krahasoni versionet e zgjedhura",
        "showhideselectedversions": "Shfaq/fshih versionet e zgjedhura",
        "editundo": "zhbëje",
+       "diff-empty": "(Pa ndryshime)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Një versioni i ndërmjetëm|$1 versione të ndërmjetme}} nga i njëjti përdorues nuk {{PLURAL:$1|është|janë}} paraqitur)",
        "diff-multi-manyusers": "({{PLURAL:$1|Një versioni i ndërmjetshëm|$1 versione të ndërmjetshme}} nga më shumë se $2 {{PLURAL:$2|përdorues|përdorues}} i/të pashfaqur)",
        "searchresults": "Rezultatet e kërkimit",
        "searchresults-title": "Rezultatet e kërkimit për \"$1\"",
        "notextmatches": "Nuk ka asnjë tekst faqeje që përputhet",
        "prevn": "{{PLURAL:$1|$1}} më para",
        "nextn": "{{PLURAL:$1|$1}} më pas",
+       "prev-page": "faqja paraardhëse",
+       "next-page": "faqja pasardhëse",
        "prevn-title": "$1 i mëparshëm {{PLURAL:$1|rezultat|rezultate}}",
        "nextn-title": "$1 në vazhdim {{PLURAL:$1|rezultat|rezultate}}",
        "shown-title": "Trego $1 {{PLURAL:$1|rezultat|rezultate}} për faqe",
        "viewprevnext": "Shikoni ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Në këtë wiki kjo faqe është emëruar \"[[:$1]]\"'''",
-       "searchmenu-new": "'''Hapë faqen \"[[:$1]]\" në këtë wiki!'''",
+       "searchmenu-new": "<strong>Krijo faqen \"[[:$1]]\" në këtë wiki!</strong> {{PLURAL:$2|0=|Shih gjithashtu faqen e gjetur në kërkimin tuaj.|Shih gjithashtu rezultatet e gjetura nga kërkimi.}}",
        "searchprofile-articles": "Përmbajtja e faqeve",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Gjithçka",
        "search-result-category-size": "{{PLURAL:$1|1 anëtar|$1 anëtarë}} ({{PLURAL:$2|1 nën-kategori|$2 nën-kategori}}, {{PLURAL:$3|1 skedë|$3 skeda}})",
        "search-redirect": "(përcjellim $1)",
        "search-section": "(seksioni $1)",
+       "search-category": "(kategoria $1)",
        "search-suggest": "Mos kishit në mendje: $1",
        "search-interwiki-caption": "Projekte simotra",
        "search-interwiki-default": "$1 përfundime:",
        "searchrelated": "të ngjashme",
        "searchall": "të gjitha",
        "showingresults": "Më poshtë tregohen {{PLURAL:$1|'''1''' përfundim|'''$1''' përfundime}} duke filluar nga #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Rezultati <strong>$1</strong> nga <strong>$3</strong>|Rezultatet <strong>$1 - $2</strong> nga <strong>$3</strong>}}",
        "search-nonefound": "Nuk ka rezultate që përputhen me kërkesën.",
        "powersearch-legend": "Kërkim i përparuar",
        "powersearch-ns": "Kërkim në hapësira:",
        "prefs-personal": "Përdoruesi",
        "prefs-rc": "Ndryshime së fundmi",
        "prefs-watchlist": "Lista mbikqyrëse",
+       "prefs-editwatchlist": "Redakto listën mbikqyrëse",
        "prefs-watchlist-days": "Numri i ditëve të treguara tek lista mbikqyrëse:",
        "prefs-watchlist-days-max": "Maksimumi $1 ditë",
        "prefs-watchlist-edits": "Numri i redaktimeve të treguara tek lista mbikqyrëse e zgjeruar:",
        "timezoneregion-indian": "Oqeani Indian",
        "timezoneregion-pacific": "Oqeani Paqësor",
        "allowemail": "Lejo përdoruesit të më dërgojnë email",
-       "prefs-searchoptions": "Mundësi kërkimi",
+       "prefs-searchoptions": "Kërko",
        "prefs-namespaces": "Hapësirat",
        "default": "parazgjedhje",
        "prefs-files": "Figura",
        "prefs-reset-intro": "Mundeni me përdorë këtë faqe për me i kthy parapëlqimet tueja në ato të paracaktuemet e faqes.\nKjo nuk mundet me u zhbâ.",
        "prefs-emailconfirm-label": "Konfirmimi i emailit:",
        "youremail": "Adresa e email-it*",
-       "username": "Nofka e përdoruesit:",
-       "prefs-memberingroups": "Anëtar i {{PLURAL:$1|grupit|grupeve}}:",
+       "username": "{{GENDER:$1|Emri i përdoruesit|Emri i përdorueses}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Anëtar i|Anëtare e}} {{PLURAL:$1|grupit|grupeve}}:",
        "prefs-registration": "Koha e regjistrimit:",
        "yourrealname": "Emri juaj i vërtetë*",
        "yourlanguage": "Ndërfaqja gjuhësore",
        "prefs-help-signature": "Komentet në faqet e diskutimit duhet të nënshkruhen me \"<nowiki>~~~~</nowiki>\" të cilat do të konvertohen me emrin tuaj të përdoruesit dhe kohën.",
        "badsig": "Sintaksa e signaturës është e pavlefshme, kontrolloni HTML-in.",
        "badsiglength": "Nënshkrimi është tepër i gjatë.\nNuk duhet të jetë më i gjatë se $1 {{PLURAL:$1|karakter|karaktere}}.",
-       "yourgender": "Gjinia:",
-       "gender-unknown": "e pacaktuar",
-       "gender-male": "Mashkull",
-       "gender-female": "Femër",
-       "prefs-help-gender": "Sipas dëshirës: përdoret për adresim korrekt në relacion me gjininë nga software-i.\nKjo informatë është publike.",
+       "yourgender": "Si dëshironi të përshkruheni?",
+       "gender-unknown": "Kur ju të përmendeni, softueri do të përdorë fjalë asnjanëse kur është e mundur (në të shumtën e rasteve do të jenë fjalë të gjinisë mashkullore)",
+       "gender-male": "Ai redakton faqet wiki",
+       "gender-female": "Ajo redakton faqet wiki",
+       "prefs-help-gender": "Vendosja e këtij parapëlqimi nuk është e detyrueshme.\nSoftueri përdor vlerat e tij për t'ju adresuar dhe për t'ju përmendur ju te të tjerët duke përdorur gjininë e duhur gramatikore.\nKy informacion do të jetë publik.",
        "email": "Email",
        "prefs-help-realname": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jipni do të përmendeni si kontribues për punën që ke bërë.",
        "prefs-help-email": "Posta elektronike është zgjedhore, por ju mundëson që fjalëkalimi i ri të ju dërgohet nëse e harroni atë. Gjithashtu mund të zgjidhni nëse doni të tjerët t'ju shkruajnë ose jo përmes faqes suaj të diskutimit pa patur nevojë të zbulojnë identitetin tuaj.",
        "prefs-dateformat": "Data i formatit",
        "prefs-timeoffset": "Kohë të kompensuar",
        "prefs-advancedediting": "Opsionet e avancuar",
+       "prefs-editor": "redaktor",
+       "prefs-preview": "Parapamje",
        "prefs-advancedrc": "Opsionet e avancuar",
        "prefs-advancedrendering": "Opsionet e avancuar",
        "prefs-advancedsearchoptions": "Opsionet e avancuar",
        "userrights-lookup-user": "Ndrysho grupet e përdoruesit",
        "userrights-user-editname": "Fusni emrin e përdoruesit:",
        "editusergroup": "Redakto grupet e përdoruesve",
-       "editinguser": "Duke ndryshuar privilegjet e përdoruesit '''[[User:$1|$1]]''' $2",
+       "editinguser": "Duke ndryshuar privilegjet e {{GENDER:$1|përdoruesit|përdorueses}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Anëtarësimi tek grupet",
        "saveusergroups": "Ruaj Grupin e Përdoruesve",
-       "userrights-groupsmember": "Anëtar i:",
-       "userrights-groupsmember-auto": "Anëtar implicit i:",
-       "userrights-groups-help": "Mund të ndryshoni anëtarësimin e këtij përdoruesi në grupe:\n* Kutia e zgjedhur shënon që përdoruesi është anëtar në atë grup\n* Kutia e pazgjedhur shënon që përdoruesi nuk është anëtar në atë grup\n* Një * shënon që nuk mund ta hiqni grupin pasi ta keni shtuar (dhe anasjelltas).",
+       "userrights-groupsmember": "{{GENDER:$2|Anëtar i|Anëtare e}}:",
+       "userrights-groupsmember-auto": "{{GENDER:$2|Anëtar i nënkuptuar i|Anëtare e nënkuptuar e}}:",
+       "userrights-groups-help": "Mund të ndryshoni anëtarësimin e {{GENDER:$1|këtij përdoruesi|kësaj përdorueseje}} në grupe:\n* Kutia e zgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Kutia e pazgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} nuk është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Një * tregon që nuk mund ta hiqni grupin pasi ta keni shtuar (dhe anasjelltas).",
        "userrights-reason": "Arsyeja:",
        "userrights-no-interwiki": "Nuk keni leje për të ndryshuar privilegjet e përdoruesve në wiki të tjera.",
        "userrights-nodatabase": "Regjistri $1 nuk ekziston ose nuk është vendor.",
        "userrights-nologin": "Duhet të [[Special:UserLogin|hyni brenda]] me një llogari administrative për të ndryshuar privilegjet e përdoruesve.",
-       "userrights-notallowed": "llogaria juaj nuk ka leje për të shtuar ose hequr privilegjet e përdoruesve.",
+       "userrights-notallowed": "Ju nuk keni leje për të shtuar ose hequr privilegjet e përdoruesve.",
        "userrights-changeable-col": "Grupe që mund të ndryshoni",
        "userrights-unchangeable-col": "Grupe që s'mund të ndryshoni",
+       "userrights-conflict": "Konflikt në ndryshimin e të drejtave të përdoruesit! Ju lutemi të rishikoni dhe konfirmomi ndryshimet tuaja.",
        "group": "Grupi:",
        "group-user": "Përdorues",
        "group-autoconfirmed": "Përdorues të vërtetuar automatikisht",
        "right-importupload": "Importo faqet nga një ngarkim skede",
        "right-patrol": "Shëno redaktimin e tjerëve si të patrulluar",
        "right-autopatrol": "A e vet redaktimet e shënuar automatikisht patrulluar",
-       "right-patrolmarks": "Shiko ndryshimet e fundit shënon patrullë",
+       "right-patrolmarks": "Shiko shënimet patrulluese tek ndryshimet e fundit",
        "right-unwatchedpages": "Shiko listën e faqeve të pa vëzhguara",
        "right-mergehistory": "Bashko historinë e faqeve",
        "right-userrights": "Redakto të gjitha të drejtat e përdoruesit",
        "action-siteadmin": "mbyll ose hap bazën e të dhënave",
        "action-sendemail": "dërgo e-maile",
        "nchanges": "$1 {{PLURAL:$1|ndryshim|ndryshime}}",
-       "recentchanges": "Ndryshime së fundmi",
+       "enhancedrc-history": "historia",
+       "recentchanges": "Ndryshimet e fundit",
        "recentchanges-legend": "Zgjedhjet e ndryshimeve momentale",
        "recentchanges-summary": "Ndiqni ndryshime së fundmi tek kjo faqe.",
+       "recentchanges-noresult": "Nuk ka ndryshime gjatë periudhës së dhënë që plotësojnë këto kritere.",
        "recentchanges-feed-description": "Ndjek ndryshimet më të fundit në wiki tek kjo fushë.",
        "recentchanges-label-newpage": "Ky redaktim krijoi një faqe të re",
-       "recentchanges-label-minor": "Ky është një editim i vogël",
-       "recentchanges-label-bot": "Ky editim është kryer nga një bot",
+       "recentchanges-label-minor": "Ky është një redaktim i vogël",
+       "recentchanges-label-bot": "Ky redaktim u krye nga një robot",
        "recentchanges-label-unpatrolled": "Ky editim ende nuk është patrolluar",
-       "recentchanges-legend-newpage": "$1 - faqe të re",
+       "recentchanges-label-plusminus": "Madhësia e faqes ndryshoi me këtë numër bajtësh",
+       "recentchanges-legend-heading": "'''Legjenda:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (shiko gjithashtu [[Special:NewPages|listën e faqeve të reja]])",
        "rcnotefrom": "Më poshtë janë ndryshime së fundmi nga <b>$2</b> (treguar deri në <b>$1</b>).",
        "rclistfrom": "Tregon ndryshime së fundmi duke filluar nga $3 $2",
        "rcshowhideminor": "$1 redaktimet e vogla",
+       "rcshowhideminor-show": "Shfaq",
+       "rcshowhideminor-hide": "Fshih",
        "rcshowhidebots": "$1 robotët",
-       "rcshowhideliu": "$1 përdoruesit e regjistruar",
+       "rcshowhidebots-show": "Shfaq",
+       "rcshowhidebots-hide": "Fshih",
+       "rcshowhideliu": "$1 përdorues të regjistruar",
+       "rcshowhideliu-hide": "Fshih",
        "rcshowhideanons": "$1 përdoruesit anonim",
+       "rcshowhideanons-show": "Shfaq",
+       "rcshowhideanons-hide": "Fshih",
        "rcshowhidepatr": "$1 redaktime të patrulluara",
        "rcshowhidemine": "$1 redaktimet e mia",
+       "rcshowhidemine-show": "Shfaq",
+       "rcshowhidemine-hide": "Fshih",
        "rclinks": "Trego $1 ndryshime gjatë $2 ditëve<br />$3",
        "diff": "ndrysh",
        "hist": "hist",
        "uploadnewversion-linktext": "Ngarkoni një version të ri për këtë skedë",
        "shared-repo-from": "nga $1",
        "shared-repo": "një magazinë e përbashkët",
+       "upload-disallowed-here": "Ju nuk mund mbishkruani këtë skedë.",
        "filerevert": "Rikthe $1",
        "filerevert-legend": "Rikthe skedën",
        "filerevert-intro": "Po ktheni '''[[Media:$1|$1]]''' tek [versioni $4 i $3, $2].",
        "unusedtemplateswlh": "lidhje",
        "randompage": "Faqe e rastit",
        "randompage-nopages": "Nuk ka faqe në {{PLURLA:$2|hapësirën|hapësirat}} në vijim: $1",
+       "randomincategory-invalidcategory": "\"$1\" nuk është emër i vlefshëm kategorie.",
+       "randomincategory-nopages": "Nuk ka faqe në kategorinë [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategoria:",
+       "randomincategory-legend": "Faqe e rastit në kategori",
+       "randomincategory-submit": "Shko",
        "randomredirect": "Përcjellim i rastit",
        "randomredirect-nopages": "Nuk ka përcjellim në \"$1\".",
        "statistics": "Statistika",
        "statistics-users": "[[Special:ListUsers|Përdoruesit]] e regjistruar",
        "statistics-users-active": "Përdoruesit aktiv",
        "statistics-users-active-desc": "Përdoruesit që kanë së paku një veprim në {{PLURAL:$1|ditën|$1 ditët}} e fundit",
+       "pageswithprop-prop": "Emri i pronës:",
+       "pageswithprop-submit": "Shko",
        "doubleredirects": "Përcjellime dopjo",
        "doubleredirectstext": "Kjo faqe liston faqet përcjellëse tek faqet e tjera përcjellëse.\nSecili rresht përmban lidhjet tek përcjellimi i parë dhe përcjellimi i dytë, gjithashtu synimin e përcjellimit të dytë, që është zakonisht faqja synuese '''e vërtetë''', që faqja w parë duhej të ishte përcjellëse e kësaj faqeje.\n<del>Kalimet nga</del> hyrjet janë zgjidhur.",
-       "double-redirect-fixed-move": "[[$1]] u zhvendos, tani është gjendet në [[$2]]",
+       "double-redirect-fixed-move": "[[$1]] u zhvendos.\n\nËshtë përditësuar automatikisht dhe tani përcjellet tek [[$2]]",
        "double-redirect-fixed-maintenance": "Duke zgjidhur përcjellimin e dyfishtë nga [[$1]] tek [[$2]].",
        "double-redirect-fixer": "Rregullues zhvendosjesh",
        "brokenredirects": "Përcjellime të prishura",
        "fewestrevisions": "Artikuj më të paredaktuar",
        "nbytes": "$1 {{PLURAL:$1|byte|byte}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
+       "ninterwikis": "$1 {{PLURAL:$1|ndërwiki|ndërwikit}}",
        "nlinks": "$1 {{PLURAL:$1|lidhje|lidhje}}",
        "nmembers": "$1 {{PLURAL:$1|antar|antarë}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|anëtar|anëtarët}}",
        "nrevisions": "$1 {{PLURAL:$1|version|versione}}",
-       "nviews": "$1 {{PLURAL:$1|shikim|shikime}}",
        "nimagelinks": "Përdorur në $1 {{PLURAL:$1|faqe|faqe}}",
        "ntransclusions": "përdorur në $1 {{PLURAL:$1|faqe|faqe}}",
        "specialpage-empty": "Kjo faqe është boshe.",
        "protectedpages-indef": "Vetëm mbrojtjet pa afat",
        "protectedpages-cascade": "Vetëm mbrojtjet",
        "protectedpagesempty": "Nuk ka faqe të mbrojtura me të dhënat e kërkuara.",
+       "protectedpages-page": "Faqja",
+       "protectedpages-expiry": "Skadon",
+       "protectedpages-reason": "Arsyeja",
        "protectedtitles": "Titujt e mbrojtur",
        "protectedtitlesempty": "Asnjë titull i mbrojtur nuk u gjet në këtë hapësirë.",
        "listusers": "Lista e përdoruesve",
        "pager-older-n": "{{PLURAL:$1|1 më i vjetër|$1 më të vjetra}}",
        "suppress": "Kujdestari",
        "querypage-disabled": "Kjo faqe speciale është çaktivizuar për arsye të performancës.",
+       "apihelp-no-such-module": "Moduli \"$1\" nuk u gjet.",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim burimor librash",
+       "booksources-search": "Kërko",
        "booksources-text": "Më posht është një listë me lidhje të cilët shesin ose përdorin libra dhe munden të kenë informacione për librat që kërkoni ju:",
        "booksources-invalid-isbn": "ISBN-ja e dhënë nuk duket të jetë e vlefshme; kontrolloni oër gabime gjatë kopjimit nga burimi origjinal.",
        "specialloguserlabel": "Performuesi:",
        "listgrouprights-removegroup-self-all": "Hiq të gjitha grupet nga llogaria",
        "mailnologin": "S'ka adresë dërgimi",
        "mailnologintext": "Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.",
-       "emailuser": "Email përdoruesit",
-       "emailpage": "Dërgo email përdoruesve",
+       "emailuser": "Email {{GENDER:{{PAGENAME}}|përdoruesit|përdorueses}}",
        "emailpagetext": "Mund të përdorni formularin e mëposhtëm për të dërguar e-mail tek ky përdorues.\nAdresa e email-it që shkruat tek [[Special:Preferences|preferencat tuaja]] do të duket si \"Nga\" adresa e email-it, pra marrësi do të ketë mundësinë t'ju përgjigjet direkt.",
        "defemailsubject": "{{SITENAME}} posta elektronike nga përdoruesi \"$1\"",
        "usermaildisabled": "Email-i i përdoruesit çaktivizua",
        "watcherrortext": "Është paraqitur një gabim përderisa ndryshuat parametrat e listës suaj mbikqyrëse për \"$1\".",
        "enotif_reset": "Shëno të gjitha faqet e vizituara",
        "enotif_impersonal_salutation": "Përdorues i {{SITENAME}}",
+       "enotif_subject_created": "{{SITENAME}} faqja $1 është {{GJINIA:$2|krijuar}} nga $2",
        "enotif_lastvisited": "Shikoni $1 për të gjitha ndryshimet që prej vizitës tuaj të fundit.",
        "enotif_lastdiff": "Shikoni $1 për ndryshime.",
        "enotif_anon_editor": "përdorues anonim $1",
        "deletecomment": "Arsyeja:",
        "deleteotherreason": "Arsye tjetër:",
        "deletereasonotherlist": "Arsyeja tjetër",
-       "deletereason-dropdown": "*Arsye për grisje:\n** Pa të drejtë autori\n** Kërkesë nga autori\n** Vandalizëm",
+       "deletereason-dropdown": "*Arsye të zakonshme të grisjes\n** Spam\n** Vandalizëm\n** Shkelje e të drejtave të autorit\n** Kërkesë e autorit\n** Faqe përcjellëse e thyer",
        "delete-edit-reasonlist": "Ndrysho arsyet e grisjes",
        "delete-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e faqeve të tilla ka qenë kufizuar për të parandaluar përçarjen aksidentale të {{SITENAME}}.",
        "delete-warning-toobig": "Kjo faqe ka një historik të madh redaktimesh, më shumë se $1 {{PLURAL:$1|version|versione}}.\nGrisja e saj mund të ndërpresë operacionet e bazës së të dhënave të {{SITENAME}};\nvazhdoni me kujdes.",
        "rollback": "Riktheji mbrapsh redaktimet",
        "rollbacklink": "riktheje",
-       "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshimin|ndryshiemt}}",
+       "rollbacklinkcount": "riktheni $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "rollbacklinkcount-morethan": "riktheni më tepër $1 {{PLURAL:$1|ndryshim|ndryshime}}",
        "rollbackfailed": "Rikthimi dështoi",
        "cantrollback": "Redaktimi nuk mund të kthehej;\nredaktori i fundit është i vetmi autor i këtij artikulli.",
        "rollback-success": "Ndryshimet e $1 u kthyen mbrapsh; artikulli ndodhet tek verzioni i $2.",
        "sessionfailure-title": "Dështim sesioni",
        "sessionfailure": "Duket se ka një problem me seancën tuaj hyrëse; ky veprim është anuluar për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutemi kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.",
+       "changecontentmodel-reason-label": "Arsyeja:",
        "protectlogpage": "Regjistri i mbrojtjeve",
        "protectlogtext": "Më poshtë është lista e kyçjeve dhe çkyçjeve të faqes.\nShih listën e [[Special:ProtectedPages|faqeve të mbrojtura]] nga lista e mbrojtjeve të faqeve tani në veprim.",
        "protectedarticle": "mbrojti [[$1]]",
        "protect-existing-expiry": "Koha ekzistuese e skadimit: $3, $2",
        "protect-otherreason": "Arsye tjera/shtesë:",
        "protect-otherreason-op": "Arsyeja tjetër",
-       "protect-dropdown": "*Arsyet e përbashkëta të mbrojtjes\n**Vandalizëm i tepërt\n**Spam i tepërt\n**Counter-productive edit warning\n**Faqe e lartë trafiku",
+       "protect-dropdown": "*Arsye të zakonshme të mbrojtjes\n**Vandalizëm i tepërt\n**Spam i tepërt\n**Paralajmërim i redaktimeve joprodukive\n**Faqe e trafikut të lartë",
        "protect-edit-reasonlist": "Redakto arsyet e mbrojtjes",
        "protect-expiry-options": "1 Orë:1 hour,1 Ditë:1 day,1 Javë:1 week,2 Javë:2 weeks,1 Muaj:1 month,3 Muaj:3 months,6 Muaj:6 months,1 Vjet:1 year,Pa kufi:infinite",
        "restriction-type": "Lejet:",
        "ipaddressorusername": "Adresë IP ose emër përdoruesi",
        "ipbexpiry": "Afati",
        "ipbreason": "Arsyeja:",
-       "ipbreason-dropdown": "*Arsyet më të shpeshta të bllokimit\n** Postimi i informacioneve të rreme\n** Largimi i përmbajtjes së faqes\n** Futja e lidhjeve \"spam\"\n** Futja e informatave pa kuptim në faqe\n** Sjellje arrogante/perverze\n** Përdorimi i më shumë llogarive të përdoruesve\n** Nofkë të papranueshme",
+       "ipbreason-dropdown": "*Arsye të zakonshme të bllokimit\n** Vendosja e të dhënave të rreme\n** Largimi i përmbajtjeve të faqeve\n** Vendosja e lidhjeve spam \n** Vendosja e të dhënave të pakuptimta\n** Sjellje arrogante dhe/ose ngacmuese\n** Përdorimi i më shumë llogarive\n** Nofkë e papranueshme",
        "ipb-hardblock": "Parandalo përdoruesit e kyçur për të redaktuar nga kjo IP adresë",
        "ipbcreateaccount": "Mbroje krijimin e llogarive",
        "ipbemailban": "Pa mundëso dërgimin  e porosive elektronike nga përdoruesit",
        "ipb-blockingself": "Ju jeni duke bllokuar vetëveten ! Jeni te sigurte qe doni te bëni këtë?",
        "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues me \"përdorues të fshehur\" të aktivizuar. Kjo do të shtypur emrin e përdoruesit në të gjitha listat dhe aktivitetet hyrëse. Jeni te sigurte qe doni ta bëni këtë ?",
        "ipb-edit-dropdown": "Redakto arsyet e bllokimit",
-       "ipb-unblock-addr": "Çblloko $1",
+       "ipb-unblock-addr": "Zhblloko $1",
        "ipb-unblock": "Çblloko përdorues dhe IP të bllokuara",
        "ipb-blocklist": "Përdorues dhe IP adresa të bllokuara",
-       "ipb-blocklist-contribs": "Kontributet për $1",
-       "unblockip": "Çblloko përdoruesin",
+       "ipb-blocklist-contribs": "Kontributet për {{GENDER:$1|$1}}",
+       "unblockip": "Zhblloko përdoruesin",
        "unblockiptext": "Përdor formularin e më poshtëm për t'i ridhënë leje shkrimi\nnjë përdoruesi ose IP adreseje të bllokuar.",
        "ipusubmit": "Hiqni këtë bllokim",
-       "unblocked": "[[User:$1|$1]] është çbllokuar",
-       "unblocked-range": "$1 është zhbllokuar",
+       "unblocked": "[[User:$1|$1]] është zhbllokuar.",
+       "unblocked-range": "$1 është zhbllokuar.",
        "unblocked-id": "Bllokimi $1 është hequr",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] është zhbllokuar.",
        "blocklist": "Përdorues i Bllokuar",
        "ipblocklist": "Përdorues i Bllokuar",
        "ipblocklist-legend": "Gjej një përdorues të bllokuar",
        "ipblocklist-empty": "Lista e të bllokimeve është e zbrazët.",
        "ipblocklist-no-results": "Adresa IP ose përdoruesi i kërkuar nuk është i bllokuar.",
        "blocklink": "blloko",
-       "unblocklink": "çblloko",
+       "unblocklink": "zhblloko",
        "change-blocklink": "ndryshoje bllokun",
        "contribslink": "kontribute",
        "emaillink": "dërgo e-mail",
        "blocklog-showsuppresslog": "Ky përdorues ka qenë i bllokuar dhe i fshehur më parë.\nRegjistri i bllokimeve është poshtë për referncë:",
        "blocklogentry": "bllokoi [[$1]] për një kohë prej: $2 $3",
        "reblock-logentry": "ndryshoi parametrat e bllokimit për [[$1]] me një kohë prej $2 $3",
-       "blocklogtext": "Ky është një regjistër bllokimesh dhe çbllokimesh të përdoruesve. IP-të e bllokuara automatikisht nuk janë të dhëna. Shikoni dhe [[Special:BlockList|listën e IP-ve të bllokuara]] për një listë të bllokimeve të tanishme.",
+       "blocklogtext": "Ky është një regjistër i veprimeve bllokuese dhe zhbllokuese të përdoruesit.\n\nAdresat I të bllokuara automatikisht nuk janë të paraqitura. \n\nShikoni dhe [[Special:BlockList|listën e të bllokuarve]] për një listë të bllokimeve dhe ndalimeve vepruese të tanishme.",
        "unblocklogentry": "çbllokoi \"$1\"",
        "block-log-flags-anononly": "vetëm anonimët",
        "block-log-flags-nocreate": "krijimi i llogarive është pamundësuar",
        "ipb_already_blocked": "\"$1\" është i bllokuar",
        "ipb-needreblock": "$1 është i bllokuar.\nDëshironi t'i ndryshoni parametrat?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Bllokim tjetër|Bllokime të tjera}}",
-       "unblock-hideuser": "Ju nuk mund të zhbllokoni këtë përdorues, përderisa nofka e tij është fshehur.",
-       "ipb_cant_unblock": "Gabim: Bllokimi ID $1 nuk u gjet.\nMund të jetë zhbllokuar.",
+       "unblock-hideuser": "Ju nuk mund të zhbllokoni këtë përdorues, përderisa nofka e tij është fshehur.",
+       "ipb_cant_unblock": "Gabim: Bllokimi ID $1 nuk u gjet.\n\nMund të jetë zhbllokuar deri tani.",
        "ipb_blocked_as_range": "Gabim: Adresa IP $1 nuk është bllokuar direkt dhe nuk mund të zhbllokohet.\nAjo është, megjithatë, e bllokuar si pjesë e rangut $2, që nuk mund të zhbllokohet.",
        "ip_range_invalid": "Shtrirje IP gabim.",
        "ip_range_toolarge": "Radhitja e bllokimeve më të mëdha se /$1 nuk lejohet.",
        "unlockbtn": "Çblloko regjistrin",
        "locknoconfirm": "Nuk vendose kryqin tek kutia konfirmuese.",
        "lockdbsuccesssub": "Regjistri u bllokua me sukses",
-       "unlockdbsuccesssub": "Regjistri u çbllokua me sukses",
+       "unlockdbsuccesssub": "Regjistri u zhbllokua me sukses",
        "lockdbsuccesstext": "Regjistri është bllokuar.<br />\nKujtohuni ta [[Special:UnlockDB|çbllokoni]] pasi të keni mbaruar mirëmbajtjen.",
-       "unlockdbsuccesstext": "Regjistri i {{SITENAME}} është çbllokuar.",
+       "unlockdbsuccesstext": "Regjistri i {{SITENAME}} është zhbllokuar.",
        "lockfilenotwritable": "Skeda për bllokimin e regjistrit s'mund të shkruhet.\nShërbyesi i rrjetit duhet të jetë në gjendje të shkruaj këtë skedë për të bllokuar ose çbllokuar regjistrin.",
        "databasenotlocked": "Regjistri nuk është bllokuar.",
        "lockedbyandtime": "(nga {{GENDER:$1|$1}} më $2 në $3)",
        "tooltip-pt-mycontris": "Lista e kontributeve tuaja",
        "tooltip-pt-login": "Identifikimi nuk është i detyrueshëm, megjithatë ne jua rekomandojmë.",
        "tooltip-pt-logout": "Dalje",
-       "tooltip-ca-talk": "Diskutim për faqen përmbajtje",
-       "tooltip-ca-edit": "Ju mund ta redaktoni këtë faqe. Përdorni butonin Trego parapamjen para se të ruani ndryshimet.",
+       "tooltip-pt-createaccount": "Ju rekomandojmë të krijoni një llogari dhe të kyqeni; megjithatë,  nuk është e detyrueshme",
+       "tooltip-ca-talk": "Diskutim për përmbajtjen e faqes",
+       "tooltip-ca-edit": "Redakto këtë faqe",
        "tooltip-ca-addsection": "Fillo një temë të re diskutimi.",
        "tooltip-ca-viewsource": "Kjo faqe është e mbrojtur. Ju mundeni vetëm ta shikoni burimin e tekstit.",
        "tooltip-ca-history": "Versione të mëparshme të artikullit.",
        "tooltip-feed-rss": "Burimi ushqyes \"RSS\" për këtë faqe",
        "tooltip-feed-atom": "Burimi ushqyes \"Atom\" për këtë faqe",
        "tooltip-t-contributions": "Shiko listën e kontributeve për përdoruesin në fjalë",
-       "tooltip-t-emailuser": "Dërgoni një email përdoruesit",
+       "tooltip-t-emailuser": "Dërgoni një email {{GENDER:{{PAGENAME}}|përdoruesit|përdorueses}}",
        "tooltip-t-upload": "Ngarko skeda",
        "tooltip-t-specialpages": "Lista e të gjitha faqeve speciale.",
        "tooltip-t-print": "Version i shtypshëm i kësaj faqeje",
        "spam_reverting": "U kthye tek versioni i fundit që s'ka lidhje tek $1",
        "spam_blanking": "U boshatis sepse të gjitha versionet kanë lidhje tek $1",
        "spam_deleting": "Të gjitha inspektimet përmbanin lidhje në $1, duke fshirë",
-       "simpleantispam-label": "Kontroll anti-spam.\n'''MOS''' e plotësoni këtë!",
+       "simpleantispam-label": "Kontrolli anti-spam.\n<strong>Mos</strong> e plotëso këtë!",
        "pageinfo-title": "Informacion për \" $1 \"",
-       "pageinfo-header-edits": "Redaktimet",
-       "pageinfo-watchers": "Numri i mbikqyrësve",
-       "pageinfo-edits": "Numri i redaktimeve",
-       "pageinfo-authors": "Numri i autorëve të veçantë",
+       "pageinfo-header-edits": "Historiku i redaktimeve",
+       "pageinfo-watchers": "Numri i mbikqyrësve të faqes",
+       "pageinfo-edits": "Numri total i redaktimeve",
+       "pageinfo-authors": "Numri i përgjithshëm i autorëve të veçantë",
+       "pageinfo-toolboxlink": "Informacioni i faqes",
+       "pageinfo-category-total": "Numri i përgjithshëm i anëtarëve",
        "markaspatrolleddiff": "Shënoje si të patrulluar",
        "markaspatrolledtext": "Shënoje këtë artikull të patrulluar",
        "markedaspatrolled": "Shënoje të patrulluar",
        "file-info-size-pages": "$1 × $2 pixel, madhësia e dokumentit: $3 , MIME tipi: $4 , $5 {{PLURAL:$5| faqe | faqet}}",
        "file-nohires": "Nuk ka rezolucion më të madh.",
        "svg-long-desc": "skedë SVG, fillimisht $1 × $2 pixel, madhësia e skedës: $3",
-       "show-big-image": "Rezolucion i plotë",
+       "show-big-image": "Dokument origjinal",
        "show-big-image-preview": "Madhësia e këtij shikimi: $1.",
        "show-big-image-other": "{{PLURAL:$2|Rezolucion tjetër|Rezolucione të tjera}}: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "hours": "{{PLURAL:$1|$1 orë|$1 orë}}",
        "days": "{{PLURAL:$1|$1 ditë|$1 ditë}}",
        "ago": "$1 më parë",
+       "monday-at": "Të hënën në $1",
+       "tuesday-at": "Të martën në $1",
+       "wednesday-at": "Të mërkurën në $1",
+       "thursday-at": "Të enjten në $1",
+       "friday-at": "Të premten në $1",
+       "saturday-at": "Të shtunën në $1",
+       "sunday-at": "Të dielën në $1",
+       "yesterday-at": "Dje në $1",
        "bad_image_list": "Formati është si vijon:\n\nVetëm elementët listë ( rreshtat duhet të fillojnë me * ) merren parasysh.\nLidhja e parë në një rresht duhet të lidhet me një skedë të prishur.\nÇdo lidhje pasuese në rreshtin e njëjtë konsiderohet si përjashtim, p.sh. faqe në të cilat skeda mund të shfaqet në të njëjtin rresht.",
        "metadata": "Metadata",
        "metadata-help": "Kjo skedë përmban hollësira të tjera të cilat mund të jenë shtuar nga kamera ose skaneri dixhital që është përdorur për ta krijuar.\nNë qoftë se skeda është ndryshuar nga gjendja origjinale, disa hollësira mund të mos pasqyrojnë versionin e tanishëm.",
        "exif-compression-3": "CCITT Grupi 3 faks kodimi",
        "exif-compression-4": "CCITT Grupi 4 faks kodimi",
        "exif-copyrighted-true": "E drejtë e autorit",
-       "exif-copyrighted-false": "Sferë publike",
+       "exif-copyrighted-false": "Statusi i së drejtës së autorit nuk u caktua",
        "exif-unknowndate": "E dhënë e pa njohur",
        "exif-orientation-1": "Normale",
        "exif-orientation-2": "E kthyer horizontalisht",
        "autosumm-replace": "Faqja u zëvendësua me '$1'",
        "autoredircomment": "Përcjellim te [[$1]]",
        "autosumm-new": "Krijoi faqen me \"$1\"",
+       "autosumm-newblank": "Krijoi faqe të zbrazët",
        "lag-warn-normal": "Ndryshimet më të reja se $1 {{PLURAL:$1|sekond|sekonda}} mund të mos tregohen në këtë listë.",
        "lag-warn-high": "Për shkak të vonesës së regjistrit ndryshimet më të reja se $1 {{PLURAL:$1|sekond|sekonda}} mund të mos tregohen në këtë listë.",
        "watchlistedit-normal-title": "Redakto listën mbikqyrëse",
        "duplicate-defaultsort": "'''Kujdes:''' Renditja kryesore e çelësit \"$2\" refuzon renditjen e mëparshme kryesore të çelësit \"$1\".",
        "version": "Versioni",
        "version-extensions": "Zgjerime të instaluara",
-       "version-skins": "Pamjet",
+       "version-skins": "Pamjet e instaluara",
        "version-specialpages": "Faqe speciale",
        "version-parserhooks": "Parser goditje",
        "version-variables": "Variabël",
        "version-hook-name": "Emri i goditjes",
        "version-hook-subscribedby": "Abonuar nga",
        "version-version": "($1)",
-       "version-license": "Licensa",
+       "version-license": " Liçenca MediaWiki",
        "version-poweredby-credits": "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "të tjerë",
        "version-license-info": "MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm.\n\nMediaWiki është shpërndarë me shpresën se do të jetë i dobishëm, por PA ASNJË GARANCI; as garancinë e shprehur të SHITJES apo PËRDORIMIT PËR NJË QËLLIM TË CAKTUAR. Shikoni GNU General Public License  për më shumë detaje.\n\nJu duhet të keni marrë [{{SERVER}}{{SCRIPTPATH}}/COPYING një kopje të GNU General Public License] së bashku me këtë program; nëse jo, shkruani tek Free Software Foundation, Inc., 51 Rruga Franklin, Kati i pestë, Boston, MA 02110-1301, ShBA ose [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lexojeni atë online].",
        "tags": "Etiketat e ndryshimeve të pavlefshme",
        "tag-filter": "[[Special:Tags|Etiketa]] filter:",
        "tag-filter-submit": "Filtër",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketat}}]]: $2)",
        "tags-title": "Etiketat",
        "tags-intro": "Kjo faqe liston etiketat që softueri mund t'i shënojë me një redaktim, dhe kuptimin e tyre.",
        "tags-tag": "Emri i etiketës",
        "tags-hitcount-header": "Ndrzshimet e etikuara",
        "tags-edit": "redakto",
        "tags-hitcount": "$1 {{PLURAL:$1|ndryshim|ndryshime}}",
+       "tags-create-reason": "Arsyeja:",
+       "tags-delete-reason": "Arsyeja:",
+       "tags-activate-reason": "Arsyeja:",
+       "tags-deactivate-reason": "Arsyeja:",
+       "tags-edit-reason": "Arsyeja:",
        "comparepages": "Krahasoni faqet",
        "compare-page1": "Faqe 1",
        "compare-page2": "Faqe 2",
        "htmlform-selectorother-other": "Gjitha",
        "sqlite-has-fts": "$1 me mbështetje të kërkimit me teskt të plotë",
        "sqlite-no-fts": "$1 pa mbështetje të kërkimit me teskt të plotë",
-       "logentry-delete-delete": "$1 grisi faqen $3",
-       "logentry-delete-restore": "$1 riktheu faqen $3",
-       "logentry-delete-event": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një ngjarje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
-       "logentry-delete-revision": "$1 ndryshoi dukshmërinë e {{PLURAL:$5|një versioni|$5 versioneve}} në $3: $4",
-       "logentry-delete-event-legacy": "$1 ndryshoi dukshmërinë e ngjarjeve të regjistrit në $3",
-       "logentry-delete-revision-legacy": "$1 ndryshoi dukshmërinë e versioneve në $3",
-       "logentry-suppress-delete": "$1 shtypi faqen $3",
+       "logentry-delete-delete": "$1 {{GENDER:$2|grisi}} faqen $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|riktheu}} faqen $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e {{PLURAL:$5|e një ngjarjeje regjistri|$5 ngjarjeve regjitri}} në $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e {{PLURAL:$5|një rishikimi|$5 rishikimeve}} në faqen $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e ngjarjeve të regjistit në $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|ndryshpi}} dukshmërinë e rishikimeve në faqen $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|shtypi}} faqen $3",
        "logentry-suppress-event": "$1 në mënyrë sekrete ndryshoi dukshmërinë e {{PLURAL:$5|një ngjarje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
        "logentry-suppress-revision": "$1 në mënyrë sekrete ndryshoi dukshmërinë e {{PLURAL:$5|një versioni|$5 versioneve}} në $3: $4",
        "logentry-suppress-event-legacy": "$1 në mënyrë sekrete ndryshoi dukshmërinë e ngjarjeve të regjistrit në $3",
        "revdelete-uname-unhid": "emri i përdoruesit jo i fshehur",
        "revdelete-restricted": "u vendosën kufizime për administruesit",
        "revdelete-unrestricted": "u hoqën kufizimet për administruesit",
-       "logentry-move-move": "$1 zhvendosi faqen $3 te $4",
+       "logentry-block-block": "$1 {{GENDER:$2|bllokoi}} {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|zhbllokoi}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} bllokoi cilësimet për {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bllokoi}} {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} bllokoi cilësimet për {{GENDER:$4|$3}} me një kohë të skadimit $5 $6",
+       "logentry-move-move": "$1 {{GENDER:$2|zhvendosi}} faqen $3 tek $4",
        "logentry-move-move-noredirect": "$1 zhvendosi faqen $3 te $4 pa lënë një përcjellim",
        "logentry-move-move_redir": "$1 zhvendosi faqen $3 te $4 nëpërmjet përcjellimit",
        "logentry-move-move_redir-noredirect": "$1 zhvendosi faqen $3 te $4 nëpërmjet një përcjellimi pa lënë një përcjellim",
        "logentry-patrol-patrol": "$1 shënoi versionin $4 të faqes $3 të patrolluar",
        "logentry-patrol-patrol-auto": "$1 automatikisht shënoi versionin $4 të faqes $3 të patrolluar",
-       "logentry-newusers-newusers": "$1 krijoi një llogari",
-       "logentry-newusers-create": "$1 krijoi një llogari",
-       "logentry-newusers-create2": "$1 krijoi një llogari $3",
-       "logentry-newusers-autocreate": "Llogaria $1 u krijua automatikisht",
+       "logentry-newusers-newusers": "Llogaria e përdoruesit $1 është {{GENDER:$2|krijuar}}",
+       "logentry-newusers-create": "Llogaria e {{GENDER:$2|përdoruesit|përdorueses}} $1 u krijua.",
+       "logentry-newusers-create2": "Llogaria e përdoruesit $3 është {{GENDER:$2|krijuar}} nga $1",
+       "logentry-newusers-autocreate": "Llogaria e {{GENDER:$2|përdoruesit|përdorueses}} $1 u {{GENDER:$2|krijua}} automatikisht",
+       "logentry-rights-rights": "$1 {{GENDER:$2|ndërroi}} anëtarësinë e grupit për $3 nga $4 në $5",
+       "logentry-rights-autopromote": "$1 është {{GENDER:$2|promovuar}} automatikisht nga $4 në $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|ngarkoi}} $3",
        "rightsnone": "(asgjë)",
        "revdelete-summary": "përmbledhja redaktimit",
        "feedback-adding": "Duke shtuar përshtypjen te faqja...",
        "special-characters-group-gujarati": "Guxharati",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "VVVV-MM"
 }
index d828ff5..847ed1a 100644 (file)
@@ -26,7 +26,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Nemo bis",
-                       "Aktron"
+                       "Aktron",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Подвлачење веза:",
        "pool-timeout": "Истек времена чека на закључавање",
        "pool-queuefull": "Ред је пун захтева",
        "pool-errorunknown": "Непозната грешка",
+       "pool-servererror": "Услуга бројача пула није доступна ($1).",
+       "poolcounter-usage-error": "Грешка при употреби: $1",
        "aboutsite": "О пројекту {{SITENAME}}",
        "aboutpage": "Project:О нама",
        "copyright": "Садржај је доступан под лиценцом $1 осим ако је другачије наведено.",
        "databaseerror-query": "Упит: $1",
        "databaseerror-function": "Функција: $1",
        "databaseerror-error": "Грешка: $1",
-       "laggedslavemode": "'''Упозорење:''' страница је можда застарела.",
+       "laggedslavemode": "<strong>Упозорење:</strong> страница је можда застарела.",
        "readonly": "База података је закључана",
        "enterlockreason": "Унесите разлог за закључавање, укључујући и време откључавања",
        "readonlytext": "База података је тренутно закључана, што значи да је није могуће мењати.\n\nРазлог: $1",
        "readonly_lag": "База података је аутоматски закључана да би се секундарни сервери базе података ускладили с главним.",
        "internalerror": "Унутрашња грешка",
        "internalerror_info": "Унутрашња грешка: $1",
+       "internalerror-fatal-exception": "Фатална грешка типа „$1“",
        "filecopyerror": "Не могу да умножим датотеку „$1“ у „$2“.",
        "filerenameerror": "Не могу да преименујем датотеку „$1“ у „$2“.",
        "filedeleteerror": "Не могу да обришем датотеку „$1“.",
        "cannotdelete": "Не могу да обришем страницу или датотеку „$1“.\nВероватно ју је неко други обрисао.",
        "cannotdelete-title": "Не могу да обришем страницу „$1“",
        "delete-hook-aborted": "Брисање је прекинула кука.\nНије дато никакво образложење.",
+       "no-null-revision": "Не могу да направим нову празну верзију за страницу „$1“",
        "badtitle": "Неисправан наслов",
        "badtitletext": "Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.\nМожда садржи знакове који се не могу користити у насловима.",
+       "title-invalid-empty": "Тражено име странице је празно или садржи само назив именског простора.",
+       "title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
+       "title-invalid-interwiki": "Тражени наслов странице садржи унутрашњу вики везу која не може бити кориштена у насловима.",
+       "title-invalid-talk-namespace": "Тражени наслов странице се односи на страницу за разговор која не може постојати.",
        "title-invalid-characters": "Тражени наслов има неважеће карактере: „$1“.",
+       "title-invalid-relative": "Наслов има релативну путању. Релативни наслови страница (./, ../) нису важећи јер ће често бити недоступни у корисничком прегледачу.",
+       "title-invalid-magic-tilde": "Тражени наслов странице садржи неважећи след магичног знака тилда (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Тражени назив странице је предугачак. Не сме бити дужи од $1 {{PLURAL:$1|бајта|бајтова}} у UTF-8 кодирању.",
+       "title-invalid-leading-colon": "Захтевани наслов странице садржи неважећу двотачку на почетку.",
        "perfcached": "Следећи подаци су кеширани и могу бити застарели. Кеш садржи највише {{PLURAL:$1|један резултат|$1 резултата|$1 резултата}}.",
        "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|1=је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
        "querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
        "actionthrottled": "Радња је успорена",
        "actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
        "protectedpagetext": "Ова страница је закључана за измене и друге радње.",
-       "viewsourcetext": "Можете читати и копирати садржај ове странице:",
-       "viewyourtext": "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
+       "viewsourcetext": "Можете читати и копирати садржај ове странице.",
+       "viewyourtext": "Можете да погледате и копирате извор <strong>ваших измена</strong> на овој страници.",
        "protectedinterface": "Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
        "translateinterface": "Да додате или промените преводе за све викије, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
-       "namespaceprotected": "Немате дозволу да уређујете странице у именском простору '''$1'''.",
+       "namespaceprotected": "Немате дозволу да уређујете странице у именском простору <strong>$1</strong>.",
        "customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи личне поставке другог корисника.",
        "customjsprotected": "Немате дозволу да мењате ову страницу јаваскрипта јер садржи личне поставке другог корисника.",
        "mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
        "virus-badscanner": "Неисправна поставка: непознати скенер за вирусе: ''$1''",
        "virus-scanfailed": "неуспешно скенирање (код $1)",
        "virus-unknownscanner": "непознати антивирус:",
-       "logouttext": "'''Одјављени сте.'''\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+       "logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
        "welcomeuser": "Добро дошли, $1!",
        "welcomecreation-msg": "Ваш налог је отворен.\nНе заборавите да промените своја [[Special:Preferences|подешавања]].",
        "yourname": "Корисничко име:",
        "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}",
        "createacct-benefit-body3": "{{PLURAL:$1|активни корисник|активних корисника}}",
        "badretype": "Унете лозинке се не поклапају.",
+       "usernameinprogress": "Налог за ово корисничко име се већ прави, молимо сачекајте.",
        "userexists": "Корисничко име је заузето. Изаберите друго.",
        "loginerror": "Грешка при пријављивању",
        "createacct-error": "Дошло је до грешке при отварању налога",
        "wrongpassword": "Унели сте неисправну лозинку. Покушајте поново.",
        "wrongpasswordempty": "Нисте унели лозинку. Покушајте поново.",
        "passwordtooshort": "Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.",
+       "passwordtoolong": "Лозинке не могу бити дуже од {{PLURAL:$1|$1 знака|$1 знакова}}.",
        "password-name-match": "Лозинка се мора разликовати од корисничког имена.",
        "password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
        "mailmypassword": "Ресетуј лозинку",
        "resetpass-submit-loggedin": "Промени лозинку",
        "resetpass-submit-cancel": "Откажи",
        "resetpass-wrong-oldpass": "Неисправна привремена или текућа лозинка.\nМожда сте већ променили лозинку или сте затражили нову привремену лозинку.",
-       "resetpass-recycled": "Унели сте садашњу лозинку, да би сте ресетовали лозинку морате унети нову.",
+       "resetpass-recycled": "Унели сте садашњу лозинку, да бисте ресетовали лозинку морате унети нову.",
        "resetpass-temp-emailed": "Пријавили сте се са привременим кодом из е-поште.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:",
        "resetpass-temp-password": "Привремена лозинка:",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-validity-soft": "Ваша лозинка није ваљана: $1\n\nМолимо изаберите нову или кликните „{{int:resetpass-submit-cancel}}“ да ресетујете касније.",
        "passwordreset": "Обнављање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на е-пошту.",
-       "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како би сте добили привремену лозинку на е-пошту.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на е-пошту.}}",
        "passwordreset-disabled": "Обнављање лозинке је онемогућено на овом викију.",
        "passwordreset-emaildisabled": "Е-пошта је онемогућена на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "changeemail-submit": "Промени",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "resettokens": "Ресетовање жетона",
+       "resettokens-text": "Можете поново поставити жетоне који ће вам омогућити приступ одређеним приватним подацима повезаним са вашим налогом овде.\n\nТребали бисте то да урадите ако их мимо воље поделите с неким или ако је ваш налог угрожен.",
        "resettokens-no-tokens": "Нема жетона за ресетовање.",
        "resettokens-tokens": "Жетони:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
        "missingcommentheader": "'''Напомена:''' нисте унели наслов овог коментара.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без наслова.",
        "summary-preview": "Преглед описа:",
        "subject-preview": "Преглед теме/наслова:",
+       "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
        "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "userjspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
        "sitecsspreview": "'''Ово је само преглед CSS-а.'''\n'''Страница још није сачувана!'''",
        "sitejspreview": "'''Ово је само преглед јаваскрипта.'''\n'''Страница још није сачувана!'''",
-       "userinvalidcssjstitle": "'''Упозорење:''' не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
+       "userinvalidcssjstitle": "<strong>Упозорење:</strong> не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ажурирано)",
-       "note": "'''Напомена:'''",
+       "note": "<strong>Напомена:</strong>",
        "previewnote": "<strong>Ово је претпреглед.</strong>\nВаше измене још нису сачуване!",
        "continue-editing": "Иди на уређивачки оквир",
        "previewconflict": "Овај преглед осликава како ће текст у текстуалном оквиру изгледати.",
        "yourdiff": "Разлике",
        "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
        "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
+       "editpage-cannot-use-custom-model": "Модел садржаја ове странице се не може променити.",
        "longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
        "readonlywarning": "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.'''\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nАдминистратор који је закључао базу дао је следеће објашњење: $1",
        "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
        "content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[$2]]",
        "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
        "editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
+       "editpage-notsupportedcontentformat-text": "Формат садржаја $1 није подржан за модел садржаја $2.",
        "content-model-wikitext": "викитекст",
        "content-model-text": "чист текст",
        "content-model-javascript": "јаваскрипт",
        "content-model-css": "CSS",
        "content-json-empty-object": "Празан објекат",
+       "content-json-empty-array": "Празан низ",
+       "duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више од једне вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
+       "duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
+       "duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Упозорење:''' ова страница садржи превише позива за рашчлањивање.\n\nТребало би да има мање од $2 {{PLURAL:$2|позив|позива|позива}}, а сада има $1.",
        "expensive-parserfunction-category": "Странице с превише позива за рашчлањивање",
        "post-expand-template-inclusion-warning": "'''Упозорење:''' величина укљученог шаблона је превелика.\nНеки шаблони неће бити укључени.",
        "parser-template-recursion-depth-warning": "Дубина укључивања шаблона је прекорачена ($1)",
        "language-converter-depth-warning": "Прекорачена је граница дубине језичког претварача ($1)",
        "node-count-exceeded-category": "Странице у којима је прекорачен број чворова",
+       "node-count-exceeded-category-desc": "Страница је прекорачила број чворова.",
        "node-count-exceeded-warning": "Страница у којој је прекорачен број чворова",
        "expansion-depth-exceeded-category": "Странице у којима је прекорачена дубина проширења",
+       "expansion-depth-exceeded-category-desc": "Страница је прекорачила највећу дубину проширења.",
        "expansion-depth-exceeded-warning": "Страница у којој је прекорачена дубина проширења",
        "parser-unstrip-loop-warning": "Утврђена је петља",
        "parser-unstrip-recursion-limit": "Прекорачено је ограничење рекурзије ($1)",
        "history-feed-description": "Историја измена ове странице на викију",
        "history-feed-item-nocomment": "$1 у $2",
        "history-feed-empty": "Тражена страница не постоји.\nМогуће да је обрисана с викија или је преименована.\nПокушајте да [[Special:Search|претражите вики]] за сличне странице.",
+       "history-edit-tags": "Уреди ознаке изабраних измена",
        "rev-deleted-comment": "(опис измене уклоњен)",
        "rev-deleted-user": "(корисничко име уклоњено)",
-       "rev-deleted-event": "(детаљи дневника уклоњени)",
+       "rev-deleted-event": "(детаљи уноса уклоњени)",
        "rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
        "rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
+       "rev-suppressed-text-permission": "Измена ове странице је <strong>сакривена</strong>. Више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
        "rev-deleted-text-unhide": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
        "rev-suppressed-text-unhide": "Измена ове странице је '''сакривена'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
        "rev-deleted-text-view": "Измена ове странице је '''обрисана'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-showdeleted": "прикажи",
        "revisiondelete": "Обриши/врати измене",
        "revdelete-nooldid-title": "Нема тражене измене",
-       "revdelete-nooldid-text": "Ð\9dиÑ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð¶ÐµÑ\99енÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83, Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ð¸Ð»Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аваÑ\82е Ð´Ð° Ñ\98е Ñ\81акÑ\80иÑ\98еÑ\82е.",
+       "revdelete-nooldid-text": "Ð\9dиÑ\81Ñ\82е Ð¸Ð·Ð°Ð±Ñ\80али Ð¾Ð´Ñ\80едиÑ\88нÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð½Ð° ÐºÐ¾Ñ\98оÑ\98 Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¸Ð·Ð²Ñ\80Ñ\88и Ð¾Ð²Ð° Ñ\84Ñ\83нкÑ\86иÑ\98а, Ñ\82а Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и, Ð¸Ð»Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аваÑ\82е Ñ\81акÑ\80иÑ\82и Ñ\82Ñ\80енÑ\83Ñ\82нÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83.",
        "revdelete-no-file": "Тражена датотека не постоји.",
        "revdelete-show-file-confirm": "Желите ли да видите обрисану измену датотеке „<nowiki>$1</nowiki>“ од $2; $3?",
        "revdelete-show-file-submit": "Да",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити <strong>само</strong> у следећим случајевима:\n* злонамерни или погрдни подаци\n* неприкладни лични подаци\n*: <em>кућна адреса и број телефона, број кредитне картице, ЈМБГ итд.</em>",
        "revdelete-legend": "Ограничења видљивости",
-       "revdelete-hide-text": "СакÑ\80иÑ\98 Ñ\82екст измене",
+       "revdelete-hide-text": "Текст измене",
        "revdelete-hide-image": "Сакриј садржај датотеке",
-       "revdelete-hide-name": "СакÑ\80иÑ\98 Ñ\86иљ и параметре",
+       "revdelete-hide-name": "Ð¦иљ и параметре",
        "revdelete-hide-comment": "Опис измене",
-       "revdelete-hide-user": "Кориснчко име уредника/ИП адреса",
+       "revdelete-hide-user": "Корисничко име/ИП адреса",
        "revdelete-hide-restricted": "Сакриј податке од администратора и других корисника",
        "revdelete-radio-same": "(не мењај)",
        "revdelete-radio-set": "Сакривено",
        "revdelete-unsuppress": "Уклони ограничења на враћеним изменама",
        "revdelete-log": "Разлог:",
        "revdelete-submit": "Примени на {{PLURAL:$1|изабрану измену|изабране измене}}",
-       "revdelete-success": "'''Видљивост измене је ажурирана.'''",
+       "revdelete-success": "Видљивост измене је ажурирана.",
        "revdelete-failure": "'''Не могу да ажурирам видљивост измене:'''\n$1",
-       "logdelete-success": "'''Видљивост историје је постављена.'''",
+       "logdelete-success": "Постављена је видљивост уноса у дневнику.",
        "logdelete-failure": "'''Не могу да поставим видљивост историје:'''\n$1",
        "revdel-restore": "промени видљивост",
        "pagehist": "Историја странице",
        "search-category": "(категорија $1)",
        "search-file-match": "(подудара се садржај датотеке)",
        "search-suggest": "Да ли сте мислили на: $1",
+       "search-rewritten": "Приказани резултати за $1. Ипак претражи $2.",
        "search-interwiki-caption": "Братски пројекти",
        "search-interwiki-default": "Резултати са $1:",
        "search-interwiki-more": "(више)",
        "rows": "Редова:",
        "columns": "Колона",
        "searchresultshead": "Претрага",
-       "stub-threshold": "Праг за обликовање <a href=\"#\" class=\"stub\">везе као клице</a> (у бајтовима):",
+       "stub-threshold": "Праг за обликовање везе као клице ($1):",
        "stub-threshold-disabled": "Онемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
-       "recentchangesdays-max": "(највише $1 {{PLURAL:$1|дан|дана|дана}})",
+       "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
        "recentchangescount": "Број измена за приказ:",
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
-       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб довод вашег списка надгледања.\nСвако ко зна овај кључ биће у могућности да види ваша надгледања стога немојте га одавати никоме.\nАко је потребно можете га [[Special:ResetTokens|ресетовати]].",
+       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да види Ваша надгледања; стога, кључ немојте одавати никоме. \nАко је потребно, кључ можете [[Special:ResetTokens|ресетовати]].",
        "savedprefs": "Ваша подешавања су сачувана.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
        "yourvariant": "Варијанта језика:",
        "prefs-help-variant": "Жељена варијанта или правопис за приказ страница са садржајем овог викија.",
        "yournick": "Нови потпис:",
-       "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80е Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð·Ð° Ñ\80азговоÑ\80 Ð¿Ð¾Ñ\82пиÑ\88иÑ\82е Ñ\81а ''<nowiki>~~~~</nowiki>''. Ð\9eви Ð·Ð½Ð°ÐºÐ¾Ð²Ð¸ Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80еÑ\82воÑ\80ени Ñ\83 Ð²аш потпис и тренутно време.",
+       "prefs-help-signature": "Ð\9aоменÑ\82аÑ\80е Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð·Ð° Ñ\80азговоÑ\80 Ð¿Ð¾Ñ\82пиÑ\81Ñ\83Ñ\98Ñ\82е Ñ\81а Ñ\87еÑ\82иÑ\80и Ñ\82илде: <nowiki>~~~~</nowiki>. Ð\9eваÑ\98 Ð²Ð¸ÐºÐ¸Ñ\82екÑ\81Ñ\82 Ñ\9bе Ð±Ð¸Ñ\82и Ð¿Ñ\80еÑ\82воÑ\80ен Ñ\83 Ð\92аш потпис и тренутно време.",
        "badsig": "Потпис је неисправан.\nПроверите ознаке HTML.",
        "badsiglength": "Ваш потпис је предугачак.\nНе сме бити дужи од $1 {{PLURAL:$1|знака|знака|знакова}}.",
        "yourgender": "Како желите да се представите?",
        "email-address-validity-invalid": "Унесите исправну е-адресу",
        "userrights": "Управљање корисничким правима",
        "userrights-lookup-user": "Управљање корисничким групама",
-       "userrights-user-editname": "УнеÑ\81иÑ\82е Ðºорисничко име:",
-       "editusergroup": "Ð\9fÑ\80омени ÐºÐ¾Ñ\80иÑ\81ниÑ\87ке Ð³Ñ\80Ñ\83пе",
-       "editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице|корисника}} '''[[User:$1|$1]]''' $2",
+       "userrights-user-editname": "Ð\9aорисничко име:",
+       "editusergroup": "Ð\9fÑ\80еÑ\82Ñ\80ажи",
+       "editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Промена корисничких група",
        "saveusergroups": "Сачувај корисничке групе",
        "userrights-groupsmember": "Члан:",
-       "userrights-groupsmember-auto": "УкÑ\99Ñ\83Ñ\87ени Ñ\87лан Ð¾Ð´:",
+       "userrights-groupsmember-auto": "Ð\9fодÑ\80азÑ\83мевано Ñ\87лан Ð¸:",
        "userrights-groups-help": "Можете променити групе којима овај корисник припада.\n* Означена кућица означава да се корисник налази у тој групи.\n* Неозначена кућица означава да се корисник не налази у тој групи.\n* Звездица означава да не можете уклонити групу ако је додате и обратно.",
        "userrights-reason": "Разлог:",
        "userrights-no-interwiki": "Немате овлашћења да мењате корисничка права на другим викијима.",
        "group-autoconfirmed-member": "{{GENDER:$1|аутоматски потврђен корисник|аутоматски потврђена корисница}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|администратор|администраторка|администратор}}",
-       "group-bureaucrat-member": "{{GENDER:$1|бирократа|бирократкиња|бирократа}}",
+       "group-bureaucrat-member": "{{GENDER:$1|бирократа}}",
        "group-suppress-member": "{{GENDER:$1|ревизор|ревизорка}}",
        "grouppage-user": "{{ns:project}}:Корисници",
        "grouppage-autoconfirmed": "{{ns:project}}:Аутоматски потврђени корисници",
        "right-protect": "промени нивое заштите и уреди странице са преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "уређивање страница под заштитом „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "мењање модела садржаја странице",
        "right-editinterface": "уређивање корисничког окружења",
        "right-editusercssjs": "уређивање туђих CSS и јаваскрипт датотека",
        "right-editusercss": "уређивање туђих CSS датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
        "right-viewmywatchlist": "види сопствени списак надгледања",
+       "right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
        "right-editmyoptions": "уређивање сопствених подешавања",
        "right-sendemail": "слање е-порука другим корисницима",
        "right-passwordreset": "прегледање порука за обнављање лозинке",
        "right-managechangetags": "прављење и/или брисање [[Special:Tags|ознака]] из базе података",
+       "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
+       "right-changetags": "додавање и уклањање разних [[Special:Tags|ознака]] на појединачним изменама и уносима у дневницима",
        "newuserlogpage": "Дневник нових корисника",
        "newuserlogpagetext": "Ово је историја нових корисника.",
        "rightslog": "Дневник корисничких права",
        "action-viewmywatchlist": "преглед вашег списак надгледања",
        "action-viewmyprivateinfo": "прегледање ваших личних података",
        "action-editmyprivateinfo": "уређивање ваших личних података",
+       "action-editcontentmodel": "мењање модела садржаја странице",
        "action-managechangetags": "прављење и/или брисање ознака из базе података",
+       "action-applychangetags": "додавање ознака на ваше измене",
+       "action-changetags": "додавање и уклањање разних ознака на појединачним изменама и уносима у дневницима",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
        "enhancedrc-history": "историја",
        "boteditletter": "б",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|корисник надгледа|корисника надгледају|корисника надгледају}}]",
-       "rc_categories": "Ограничи на категорије (раздвоји с усправном цртом)",
+       "rc_categories": "Ограничи на категорије (раздвоји с усправном цртом):",
        "rc_categories_any": "Све",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|бајт|бајта|бајтова}} после измене",
        "windows-nonascii-filename": "Овај вики не подржава називе датотека с посебним знацима.",
        "fileexists": "Датотека с овим називом већ постоји. Погледајте <strong>[[:$1]]</strong> ако нисте сигурни да ли желите да је промените.\n[[$1|thumb]]",
        "filepageexists": "Страница с описом ове датотеке је већ направљена овде <strong>[[:$1]]</strong>, иако датотека не постоји.\nОпис који сте навели се неће појавити на страници с описом.\nДа би се ваш опис овде нашао, потребно је да га ручно измените.\n[[$1|thumb]]",
-       "fileexists-extension": "Ð\94аÑ\82оÑ\82ека Ñ\81а Ñ\81лиÑ\87ним Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð²ÐµÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и: [[$2|thumb]]\n* Ð\9dазив Ð´Ð°Ñ\82оÑ\82еке ÐºÐ¾Ñ\98Ñ\83 Ñ\88аÑ\99еÑ\82е: <strong>[[:$1]]</strong>\n* Ð\9dазив Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bе Ð´Ð°Ñ\82оÑ\82еке: <strong>[[:$2]]</strong>\nÐ\98забеÑ\80иÑ\82е Ð´Ñ\80Ñ\83гаÑ\87иÑ\98и Ð½Ð°Ð·Ð¸Ð².",
+       "fileexists-extension": "Ð\94аÑ\82оÑ\82ека Ñ\81а Ñ\81лиÑ\87ним Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð²ÐµÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и: [[$2|thumb]]\n* Ð\9dазив Ð´Ð°Ñ\82оÑ\82еке ÐºÐ¾Ñ\98Ñ\83 Ñ\88аÑ\99еÑ\82е: <strong>[[:$1]]</strong>\n* Ð\9dазив Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bе Ð´Ð°Ñ\82оÑ\82еке: <strong>[[:$2]]</strong>\nÐ\94а Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80епознаÑ\82Ñ\99ивиÑ\98е Ð¸Ð¼Ðµ?",
        "fileexists-thumbnail-yes": "Изгледа да је датотека умањено издање слике ''(thumbnail)''.\n[[$1|thumb]]\nПроверите датотеку <strong>[[:$1]]</strong>.\nАко је проверена датотека иста слика оригиналне величине, није потребно слати додатну слику.",
        "file-thumbnail-no": "Датотека почиње са <strong>$1</strong>.\nИзгледа да се ради о умањеној слици ''(thumbnail)''.\nУколико имате ову слику у пуној величини, пошаљите је, а ако немате, промените назив датотеке.",
        "fileexists-forbidden": "Датотека с овим називом већ постоји и не може се заменити.\nАко и даље желите да пошаљете датотеку, вратите се и изаберите други назив.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Датотека с овим називом већ постоји у заједничкој остави.\nВратите се и пошаљите датотеку с другим називом.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Ово је дупликат {{PLURAL:$1|следеће датотеке|следећих датотека}}:",
        "file-deleted-duplicate": "Датотека истоветна овој ([[:$1]]) је претходно обрисана.\nПогледајте историју брисања пре поновног слања.",
+       "file-deleted-duplicate-notitle": "Датотека идентична овој претходно је обрисана и име јој је сакривено.\nТребали бисте питати некога ко може видети податке скривених датотека да прегледа ситуацију пре него што поново отпремите датотеку.",
        "uploadwarning": "Упозорење при отпремању",
        "uploadwarning-text": "Измените опис датотеке и покушајте поново.",
        "savefile": "Сачувај датотеку",
        "uploaddisabledtext": "Отпремање датотека је онемогућено.",
        "php-uploaddisabledtext": "Слање датотека је онемогућено у PHP-у.\nПроверите поставке file_uploads.",
        "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
+       "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
+       "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
+       "uploaded-hostile-svg": "Пронађен небезбедан CSS у стилском елементу постављене SVG датотеке.",
+       "uploaded-event-handler-on-svg": "Није дозвољено постављање атрибута који контролишу догађаје <code>$1=\"$2\"</code> у SVG датотекама.",
+       "uploaded-href-attribute-svg": "href атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> са нелокалном метом (нпр. http://, javascript:, итд) нису дозвољени у SVG датотекама.",
+       "uploaded-href-unsafe-target-svg": "Пронађен href са несигурном метом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
+       "uploaded-animate-svg": "Пронађена „animate“ ознака која можда мења href користећи се „from“ атрибутом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploadscriptednamespace": "Ова SVG датотека садржи погрешан именски простор „$1“",
        "uploadvirus": "Датотека садржи вирус!\nДетаљи: $1",
        "uploadjava": "Датотека је формата ZIP који садржи јава .class елемент.\nСлање јава датотека није дозвољено јер оне могу изазвати заобилажење сигурносних ограничења.",
        "upload-too-many-redirects": "Адреса садржи превише преусмерења",
        "upload-http-error": "Дошло је до HTTP грешке: $1",
        "upload-copy-upload-invalid-domain": "Примерци отпремања нису доступни на овом домену.",
+       "upload-dialog-button-cancel": "Откажи",
+       "upload-dialog-button-done": "Готово",
+       "upload-dialog-button-save": "Сачувај",
+       "upload-dialog-button-upload": "Пошаљи",
+       "upload-dialog-label-select-file": "Изабери датотеку",
+       "upload-dialog-label-infoform-title": "Детаљи",
+       "upload-dialog-label-infoform-name": "Назив",
+       "upload-dialog-label-infoform-description": "Опис",
+       "upload-dialog-label-usage-filename": "Назив датотеке",
        "backend-fail-stream": "Не могу да емитујем датотеку $1.",
        "backend-fail-backup": "Не могу да направим резерву датотеке $1.",
        "backend-fail-notexists": "Датотека $1 не постоји.",
        "unusedimages": "Некоришћене датотеке",
        "wantedcategories": "Тражене категорије",
        "wantedpages": "Тражене странице",
-       "wantedpages-summary": "Списак непостојећих страница са највише веза до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Списак непостојећих страница са највише веза до њих, на овом списку се не налазе странице до којих воде преусмерења. За списак покварених преусмерења погледајте [[{{#special:BrokenRedirects}}|списак покварених преусмерења]].",
        "wantedpages-badtitle": "Неисправан наслов у низу резултата: $1",
        "wantedfiles": "Тражене датотеке",
        "wantedfiletext-cat": "Следеће датотеке се користе, али не постоје. Датотеке из других ризница могу бити наведене иако не постоје. Такве датотеке ће бити <del>поништене</del> са списка. Поред тога, странице које садрже непостојеће датотеке се налазе [[:$1|овде]].",
        "all-logs-page": "Сви јавни дневници",
        "alllogstext": "Скупни приказ свих доступних историја овог викија.\nМожете сузити приказ одабирући врсту историје, корисничког имена или тражене странице.",
        "logempty": "Нема пронађених ставки у историји.",
-       "log-title-wildcard": "тражи наслове који почињу с овим текстом",
-       "showhideselectedlogentries": "Прикажи/сакриј изабране записе",
+       "log-title-wildcard": "Тражи наслове који почињу с овим текстом",
+       "showhideselectedlogentries": "Прикажи/сакриј изабране догађаје",
+       "log-edit-tags": "Уреди ознаке изабраних уноса у дневницима",
        "allpages": "Све странице",
        "nextpage": "Следећа страница ($1)",
        "prevpage": "Претходна страница ($1)",
        "linksearch-pat": "Образац претраге:",
        "linksearch-ns": "Именски простор:",
        "linksearch-ok": "Претражи",
-       "linksearch-text": "Могу се користити џокери попут „*.wikipedia.org“.\nПотребан је највиши домен, као „*.org“.<br />\n{{PLURAL:$2|Подржан протокол|Подржани протоколи}}: <code>$1</code> (задаје http:// ако не наведете протокол).",
+       "linksearch-text": "Могу се користити џокери попут „*.wikipedia.org“.\nПотребан је највиши домен, као „*.org“.<br />\n{{PLURAL:$2|1=Подржан протокол|Подржани протоколи}}: $1 (задаје http:// ако не наведете протокол).",
        "linksearch-line": "$1 веза у $2",
        "linksearch-error": "Џокери се могу појавити само на почетку адресе.",
        "listusersfrom": "Прикажи кориснике почев од:",
        "listgrouprights-addgroup-self": "додавање {{PLURAL:$2|групе|група}} на свој налог: $1",
        "listgrouprights-removegroup-self": "уклањање {{PLURAL:$2|групе|група}} са свог налога: $1",
        "listgrouprights-addgroup-self-all": "Додај све групе на сопствени налог",
-       "listgrouprights-removegroup-self-all": "Уклони све групе са сопственог налога",
+       "listgrouprights-removegroup-self-all": "уклањање свих група са сопственог налога",
        "listgrouprights-namespaceprotection-header": "Ограничења именских простора",
        "listgrouprights-namespaceprotection-namespace": "Именски простор",
        "listgrouprights-namespaceprotection-restrictedto": "Права потребна за уређивање",
        "emailuser": "Пошаљи е-поруку",
        "emailuser-title-target": "Слање е-поруке {{GENDER:$1|кориснику|корисници|кориснику}}",
        "emailuser-title-notarget": "Слање е-поруке кориснику",
-       "emailpage": "Слање е-порука",
        "emailpagetext": "Можете да користите доњи образац да пошаљете е-поруку {{GENDER:$1|овом кориснику|овој корисници}}.\nЕ-адреса коју сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
        "defemailsubject": "{{SITENAME}} — Е-пошта од {{GENDER:$1|корисника|кориснице}} $1",
        "usermaildisabled": "Корисничка е-пошта је онемогућена",
        "emailccsubject": "Копија ваше поруке кориснику $1: $2",
        "emailsent": "Порука је послата",
        "emailsenttext": "Ваша е-порука је послата.",
-       "emailuserfooter": "Ову е-поруку је {{GENDER:|послао|послала|послао}} $1 кориснику $2 путем е-поште с викија {{SITENAME}}.",
+       "emailuserfooter": "Ову е-поруку је послао $1 кориснику $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}.",
        "usermessage-summary": "Слање системске поруке.",
        "usermessage-editor": "Уређивач системских порука",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Морате бити пријављени да бисте гледали и уређивали ставке на вашем списку надгледања.",
        "watchnologin": "Нисте пријављени",
        "addwatch": "Додај на списак надгледања",
-       "addedwatchtext": "Страница „[[:$1]]“ је додата на ваш [[Special:Watchlist|списак надгледања]].\nБудуће измене ове странице и њене странице за разговор биће наведене тамо.",
-       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð²аш списак надгледања.",
+       "addedwatchtext": "Страница „[[:$1]]“ и њена страница за разговор је додата на Ваш [[Special:Watchlist|списак надгледања]].",
+       "addedwatchtext-short": "СÑ\82Ñ\80аниÑ\86а â\80\9e$1â\80\9c Ñ\98е Ð´Ð¾Ð´Ð°Ñ\82а Ð½Ð° Ð\92аш списак надгледања.",
        "removewatch": "Уклони са списка надгледања",
-       "removedwatchtext": "Страница „[[:$1]]“ је уклоњена с вашег [[Special:Watchlist|списка надгледања]].",
+       "removedwatchtext": "Страница „[[:$1]]“ и њена страница за разговор је уклоњена с вашег [[Special:Watchlist|списка надгледања]].",
        "removedwatchtext-short": "Страница „$1“ је уклоњена с вашег списка надгледања.",
        "watch": "Надгледај",
        "watchthispage": "Надгледај ову страницу",
        "watchlist-details": "Имате {{PLURAL:$1|$1 страница|$1 странице|$1 страница}} на вашем списку надгледања, не рачунајући странице за разговор.",
        "wlheader-enotif": "Обавештење е-поруком је омогућено.",
        "wlheader-showupdated": "Странице које су измењене откад сте их последњи пут посетили су '''подебљане'''.",
-       "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње '''$1''' измене|је последњих '''$1''' измена}} у {{PLURAL:$2|претходном сату|претходна '''$2''' сата|претходних '''$2''' сати}}, закључно са $3, $4.",
+       "wlnote": "Испод {{PLURAL:$1|је последња измена|су последње <strong>$1</strong> измене|је последњих <strong>$1</strong> измена}} у {{PLURAL:$2|претходном сату|претходна <strong>$2</strong> сата|претходних <strong>$2</strong> сати}}, закључно са $3, $4.",
        "wlshowlast": "Прикажи последњих $1 сати, $2 дана",
        "watchlist-options": "Поставке списка надгледања",
        "watching": "Надгледање…",
        "enotif_subject_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио је|преместила је}} $2",
        "enotif_subject_restored": "Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио је|вратила је|вратио је}} $2",
        "enotif_subject_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио је|променила је|променио је}} $2",
-       "enotif_body_intro_deleted": "Страницу $1 на {{SITENAME}} {{GENDER:$2|обрисао је|обрисала је|обрисао је}} $2 дана $PAGEEDITDATE. Погледајте $3.",
-       "enotif_body_intro_created": "Страницу $1 на {{SITENAME}} {{GENDER:$2|направио је|направила је|направио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.",
-       "enotif_body_intro_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио је|преместила је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на  $3.",
-       "enotif_body_intro_restored": "Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио је|вратила је|вратио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.",
-       "enotif_body_intro_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио је|променила је|променио је}} $2 дана $PAGEEDITDATE. Тренутна измена налази се на $3.",
+       "enotif_body_intro_deleted": "Страницу $1 на {{SITENAME}} {{GENDER:$2|обрисао|обрисала}} је $2 дана $PAGEEDITDATE Погледајте $3.",
+       "enotif_body_intro_created": "Страницу $1 на {{SITENAME}} {{GENDER:$2|направио|направила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
+       "enotif_body_intro_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио|преместила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на  $3.",
+       "enotif_body_intro_restored": "Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио|вратила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
+       "enotif_body_intro_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио|променила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
        "enotif_lastvisited": "Погледајте $1 за све измене од ваше последње посете.",
        "enotif_lastdiff": "Погледајте $1 да видите ову измену.",
        "enotif_anon_editor": "анониман корисник $1",
        "rollback-success": "Враћене су измене {{GENDER:$1|корисника|кориснице}} $1\nна последњу измену {{GENDER:$2|корисника|кориснице}} $2.",
        "sessionfailure-title": "Сесија је окончана",
        "sessionfailure": "Изгледа да постоји проблем с вашом сесијом;\nова радња је отказана да би се избегла злоупотреба.\nВратите се на претходну страницу, поново је учитајте и покушајте поново.",
+       "changecontentmodel": "Промени модел садржаја странице",
+       "changecontentmodel-legend": "Промени модел садржаја",
+       "changecontentmodel-title-label": "Наслов странице",
+       "changecontentmodel-model-label": "Нови модел садржаја",
+       "changecontentmodel-reason-label": "Разлог:",
+       "changecontentmodel-success-title": "Модел садржаја је промењен",
+       "changecontentmodel-success-text": "Модел садржаја странице [[:$1]] је промењен.",
+       "changecontentmodel-cannot-convert": "Модел садржаја странице [[:$1]] се не може претворити у врсту $2.",
+       "changecontentmodel-nodirectediting": "Модел садржаја $1 не подржава изравно уређивање",
+       "log-name-contentmodel": "Дневник промене модела садржаја",
+       "log-description-contentmodel": "Догађаји који имају везу са моделима садржаја страница",
+       "logentry-contentmodel-change": "$1 је {{GENDER:$2|променио|променила}} модел садржаја странице $3 из „$4“ у „$5“",
+       "logentry-contentmodel-change-revertlink": "врати",
+       "logentry-contentmodel-change-revert": "врати",
        "protectlogpage": "Дневник закључавања",
        "protectlogtext": "Испод је списак заштићених страница.\nПогледајте [[Special:ProtectedPages|списак заштићених страница]] за више детаља.",
        "protectedarticle": "{{GENDER:|је заштитио|је заштитила}} „[[$1]]“",
        "modifiedarticleprotection": "је променио степен заштите за „[[$1]]“",
        "unprotectedarticle": "је скинуо заштиту са странице „[[$1]]“",
-       "movedarticleprotection": "{{GENDER:|је преместио|је преместила|је преместио}} поставке заштите са „[[$2]]“ на „[[$1]]“",
+       "movedarticleprotection": "је преместио поставке заштите са „[[$2]]“ на „[[$1]]“",
        "protect-title": "Степен заштите за „$1“",
        "protect-title-notallowed": "Преглед степена заштите за „$1“",
        "prot_1movedto2": "је преместио [[$1]] на [[$2]]",
        "protect-badnamespace-title": "Незаштитљив именски простор",
        "protect-badnamespace-text": "Странице у овом именском простору се не могу заштитити.",
+       "protect-norestrictiontypes-text": "Ова страница се не може заштитити јер нема доступних врста ограничења.",
        "protect-norestrictiontypes-title": "Незаштитљива страна",
-       "protect-legend": "Ð\9fоÑ\82вÑ\80диÑ\82е Ð·Ð°Ñ\88Ñ\82иÑ\82Ñ\83",
+       "protect-legend": "Ð\9fоÑ\81Ñ\82авке Ð·Ð°Ñ\88Ñ\82иÑ\82е",
        "protectcomment": "Разлог:",
        "protectexpiry": "Истиче:",
        "protect_expiry_invalid": "Време истека је неисправно.",
        "protect-locked-dblock": "Степени заштите се не могу мењати јер је активна база података закључана.\nОво су поставке странице '''$1''':",
        "protect-locked-access": "Немате овлашћења за мењање степена заштите странице.\nОво су тренутне поставке странице '''$1''':",
        "protect-cascadeon": "Ова страница је тренутно заштићена јер се налази на {{PLURAL:$1|страници која има|страницама које имају}} преносиву заштиту.\nМожете да промените степен заштите, али то неће утицати на преносиву заштиту.",
-       "protect-default": "Допуштено свим корисницима",
+       "protect-default": "Допуштено свима",
        "protect-fallback": "Дозвољено само корисницима са дозволом „$1“",
        "protect-level-autoconfirmed": "Допуштено само аутоматски потврђеним корисницима",
        "protect-level-sysop": "Допуштено само администраторима",
        "pagesize": "(бајтови)",
        "restriction-edit": "уређивање",
        "restriction-move": "премештање",
-       "restriction-create": "стварање",
+       "restriction-create": "Прављење",
        "restriction-upload": "слање",
        "restriction-level-sysop": "потпуно заштићено",
        "restriction-level-autoconfirmed": "полузаштићено",
        "restriction-level-all": "сви нивои",
        "undelete": "Приказ обрисаних страница",
-       "undeletepage": "Ð\9fÑ\80иказ и враћање обрисаних страница",
+       "undeletepage": "Ð\9fÑ\80еглед и враћање обрисаних страница",
        "undeletepagetitle": "'''Следећи садржај се састоји од обрисаних измена странице [[:$1|$1]]'''.",
        "viewdeletedpage": "Приказ обрисаних страница",
        "undeletepagetext": "{{PLURAL:$1|Следећа страница је обрисана, али је још у архиви и може бити враћена|Следеће $1 странице су обрисане, али су још у архиви и могу бити враћене|Следећих $1 страница је обрисано, али су још у архиви и могу бити враћене}}.\nАрхива се повремено чисти од оваквих страница.",
        "undelete-fieldset-title": "Враћање измена",
        "undeleteextrahelp": "Да бисте вратили целу историју странице, оставите све кућице неозначене и кликните на дугме '''''{{int:undeletebtn}}'''''.\nАко желите да вратите одређене измене, означите их и кликните на '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|измена је архивирана|измене су архивиране|измена је архивирано}}",
+       "undeleterevisions": "{{PLURAL:$1|Измена}} обрисано: $1",
        "undeletehistory": "Ако вратите страницу, све ревизије ће бити враћене њеној историји.\nАко је у међувремену направљена нова страница с истим називом, враћене измене ће се појавити у њеној ранијој историји.",
        "undeleterevdel": "Враћање неће бити извршено ако је резултат тога делимично брисање последње измене.\nУ таквим случајевима морате искључити или открити најновије обрисане измене.",
        "undeletehistorynoadmin": "Ова страница је обрисана.\nРазлог за брисање се налази испод, заједно с детаљима о кориснику који је изменио ову страницу пре брисања.\nТекст обрисаних измена је доступан само администраторима.",
        "undeleteviewlink": "погледај",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
-       "undeletedrevisions": "{{PLURAL:$1|Ð\98змена Ñ\98е Ð²Ñ\80аÑ\9bена|$1 Ð¸Ð·Ð¼ÐµÐ½Ðµ Ñ\81Ñ\83 Ð²Ñ\80аÑ\9bене|$1 Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\98е Ð²Ñ\80аÑ\9bено}}",
+       "undeletedrevisions": "{{PLURAL:$1|измена Ð²Ñ\80аÑ\9bено}} $1",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
-       "undeletedfiles": "{{PLURAL:$1|Ð\94аÑ\82оÑ\82ека Ñ\98е Ð²Ñ\80аÑ\9bена|$1 Ð´Ð°Ñ\82оÑ\82еке Ñ\81Ñ\83 Ð²Ñ\80аÑ\9bене|$1 Ð´Ð°Ñ\82оÑ\82ека Ñ\98е Ð²Ñ\80аÑ\9bено}}",
+       "undeletedfiles": "{{PLURAL:$1|даÑ\82оÑ\82ека Ð²Ñ\80аÑ\9bено}} $1",
        "cannotundelete": "Враћање није успело:\n$1",
-       "undeletedpage": "'''Страница $1 је враћена'''\n\nПогледајте [[Special:Log/delete|историју брисања]] за записе о скорашњим брисањима и враћањима.",
+       "undeletedpage": "<strong>Страница $1 је враћена</strong>\n\nПогледајте [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
        "undelete-header": "Погледајте [[Special:Log/delete|историјат брисања]] за недавно обрисане странице.",
        "undelete-search-title": "Претрага обрисаних страница",
        "undelete-search-box": "Претражи обрисане странице",
        "sp-contributions-newbies-sub": "За нове кориснике",
        "sp-contributions-newbies-title": "Доприноси нових корисника",
        "sp-contributions-blocklog": "дневник блокирања",
-       "sp-contributions-deleted": "обÑ\80иÑ\81ани ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð´Ð¾Ð¿Ñ\80иноÑ\81и",
+       "sp-contributions-deleted": "обрисани доприноси",
        "sp-contributions-uploads": "отпремања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
        "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",
        "ipbhidename": "Сакриј корисничко име са измена и спискова",
        "ipbwatchuser": "Надгледај корисничке странице и странице за разговор овог корисника",
-       "ipb-disableusertalk": "Ð\97абÑ\80ани Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98е Ñ\81воÑ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð·Ð° Ñ\80азговоÑ\80 Ð´Ð¾Ðº Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан",
+       "ipb-disableusertalk": "Ð\9eнемогÑ\83Ñ\9bи ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98е Ñ\81воÑ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð·Ð° Ñ\80азговоÑ\80",
        "ipb-change-block": "Поново блокирај корисника с овим поставкама",
        "ipb-confirm": "Потврди блокирање",
        "badipaddress": "Неисправна ИП адреса",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] је {{GENDER:$1|блокиран|блокирана|блокиран}}.<br />\nБлокирања можете да погледате [[Special:BlockList|овде]].",
        "ipb-blockingself": "Овом радњом ћете блокирати себе! Јесте ли сигурни да то желите?",
        "ipb-confirmhideuser": "Управо ћете блокирати корисника с укљученом могућношћу „сакриј корисника“. Овим ће корисничко име бити сакривено у свим списковима и извештајима. Желите ли то да урадите?",
+       "ipb-confirmaction": "Ако сте сигурни да желите наставити означите поље „{{int:ipb-confirm}}“ на дну странице.",
        "ipb-edit-dropdown": "Уреди разлоге блокирања",
        "ipb-unblock-addr": "Деблокирај $1",
        "ipb-unblock": "Деблокирај корисничко име или ИП адресу",
        "blocklist-reason": "Разлог",
        "ipblocklist-submit": "Претражи",
        "ipblocklist-localblock": "Локално блокирање",
-       "ipblocklist-otherblocks": "{{PLURAL:$1|Ð\94Ñ\80Ñ\83го Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе|Ð\94Ñ\80Ñ\83га Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа}}",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Друга блокирања}}",
        "infiniteblock": "трајно",
        "expiringblock": "истиче $1 у $2",
        "anononlyblock": "само анонимни",
        "ipb_hide_invalid": "Не могу да потиснем овај налог; има више од {{PLURAL:$1|једне измене|$1 измена}}.",
        "ipb_already_blocked": "„$1“ је већ блокиран.",
        "ipb-needreblock": "$1 је већ блокиран. Желите ли да промените подешавања?",
-       "ipb-otherblocks-header": "{{PLURAL:$1|Ð\94Ñ\80Ñ\83га Ð±Ð»Ð¾ÐºÐ°Ð´Ð°|Ð\94Ñ\80Ñ\83ге Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Друге блокаде}}",
        "unblock-hideuser": "Не можете деблокирати овог корисника јер је његово корисничко име сакривено.",
        "ipb_cant_unblock": "Грешка: блокада $1 не постоји. Можда је корисник деблокиран.",
        "ipb_blocked_as_range": "Грешка: ИП адреса $1 није директно блокирана и не може да се деблокира.\nОна је блокирана као део блокаде $2, која може бити деблокирана.",
        "movereason": "Разлог:",
        "revertmove": "врати",
        "delete_and_move": "Обриши и премести",
-       "delete_and_move_text": "== Потребно брисање ==\n\nОдредишна страница „[[:$1]]“ већ постоји. \nЖелите ли да је обришете да бисте ослободили место за преусмерење?",
+       "delete_and_move_text": "== Потребно брисање ==\n\nОдредишна страница „[[:$1]]“ већ постоји. \nЖелите ли да је обришете да бисте ослободили место за премештање?",
        "delete_and_move_confirm": "Да, обриши страницу",
        "delete_and_move_reason": "Обрисано да се ослободи место за премештање из „[[$1]]“",
        "selfmove": "Изворни и одредишни наслови су истоветни;\nне могу да преместим страницу преко саме себе.",
        "imagetypemismatch": "Екстензија нове датотеке се не поклапа с њеном врстом",
        "imageinvalidfilename": "Циљани назив датотеке је неисправан",
        "fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
-       "move-leave-redirect": "Ð\9dапÑ\80ави преусмерење",
+       "move-leave-redirect": "Ð\9eÑ\81Ñ\82ави преусмерење",
        "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
        "semiprotectedpagemovewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
        "move-over-sharedrepo": "== Датотека постоји ==\n[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "thumbnail_gd-library": "Недовршене поставке графичке библиотеке: недостаје функција $1",
        "thumbnail_image-missing": "Датотека недостаје: $1",
        "import": "Увоз страница",
-       "importinterwiki": "Ð\9cеÑ\92Ñ\83вики Ñ\83воз",
+       "importinterwiki": "Увоз Ð¸Ð· Ð´Ñ\80Ñ\83го Ð²Ð¸ÐºÐ¸Ñ\98а",
        "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].",
        "import-interwiki-sourcewiki": "Изворна вики:",
        "import-interwiki-sourcepage": "Изворна страница:",
        "import-interwiki-history": "Копирај све верзије историје за ову страницу",
        "import-interwiki-templates": "Укључи све шаблоне",
        "import-interwiki-submit": "Увези",
+       "import-mapping-default": "Исто као и изворне странице",
+       "import-mapping-namespace": "Увези у именски простор:",
+       "import-mapping-subpage": "Увези као подстранице следеће странице:",
        "import-upload-filename": "Назив датотеке:",
        "import-comment": "Коментар:",
        "importtext": "Извезите датотеку с изворног викија користећи [[Special:Export|извоз]].\nСачувајте је на рачунар и пошаљите овде.",
        "importcantopen": "Не могу да отворим датотеку за увоз",
        "importbadinterwiki": "Неисправна међувики веза",
        "importsuccess": "Увожење је завршено!",
-       "importnosources": "Ð\9dиÑ\98е Ð¾Ð´Ñ\80еÑ\92ен Ð½Ð¸Ñ\98едан Ð¼ÐµÑ\92Ñ\83вики Ð¸Ð·Ð²Ð¾Ñ\80 Ð·Ð° Ñ\83воз, Ñ\82ако Ð´Ð° Ñ\98е Ð¾Ñ\82пÑ\80емаÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bено.",
+       "importnosources": "Није одређен ниједан извор за увоз, тако да је отпремање историје онемогућено.",
        "importnofile": "Увозна датотека није послата.",
        "importuploaderrorsize": "Не могу да отпремим датотеку за увоз.\nДатотека је већа од дозвољене величине.",
        "importuploaderrorpartial": "Не могу да отпремим датотеку за увоз.\nДатотека је само делимично послата.",
        "tooltip-pt-logout": "Одјавите се",
        "tooltip-pt-createaccount": "Охрабрујемо вас да отворите налог и пријавите се али то није обавезно",
        "tooltip-ca-talk": "Разговор о страници са садржајем",
-       "tooltip-ca-edit": "Ð\9cожеÑ\82е Ð´Ð° Ñ\83Ñ\80еÑ\92Ñ\83Ñ\98еÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83. Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80еÑ\82пÑ\80еглед Ð¿Ñ\80е Ñ\81нимаÑ\9aа",
+       "tooltip-ca-edit": "УÑ\80еди Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
        "tooltip-ca-addsection": "Започните нови одељак",
        "tooltip-ca-viewsource": "Ова страница је закључана. Можете да видите изворни код.",
        "tooltip-ca-history": "Претходне верзије ове странице",
        "spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
        "spam_blanking": "Све измене садрже везе до $1. Чистим",
        "spam_deleting": "Све измене садрже везе до $1. Бришем",
-       "simpleantispam-label": "Ð\90нÑ\82и-Ñ\81пам Ð¿Ñ\80овеÑ\80а. \n<strong>Ð\9dÐ\95</strong> попуњавај ово унутра!",
+       "simpleantispam-label": "Ð\90нÑ\82и-Ñ\81пам Ð¿Ñ\80овеÑ\80а. \n<strong>Ð\9dе</strong> попуњавај ово унутра!",
        "pageinfo-title": "Подаци о „$1“",
        "pageinfo-not-current": "Нажалост, немогуће је прибавити ове податке за старије измене.",
        "pageinfo-header-basic": "Основни подаци",
        "markedaspatrollederrortext": "Морате изабрати измену да бисте је означили као патролирану.",
        "markedaspatrollederror-noautopatrol": "Не можете да означите своје измене као патролиране.",
        "markedaspatrollednotify": "Ова измена на страници „$1“ је означена као патролирана.",
-       "markedaspatrollederrornotify": "Означавање ове странице патролираном није успело.",
+       "markedaspatrollederrornotify": "Означавање ове измене патролираном није успело.",
        "patrol-log-page": "Дневник патролирања",
        "patrol-log-header": "Ово је дневник патролираних измена.",
        "log-show-hide-patrol": "$1 дневник патролирања",
+       "log-show-hide-tag": "$1 дневник ознака",
        "deletedrevision": "Обрисана стара измена $1.",
        "filedeleteerror-short": "Грешка при брисању датотеке: $1",
        "filedeleteerror-long": "Дошло је до грешака при брисању датотеке:\n\n$1",
        "filedelete-archive-read-only": "Сервер не може да пише по складишној фасцикли ($1).",
        "previousdiff": "← Старија измена",
        "nextdiff": "Новија измена →",
-       "mediawarning": "'''Упозорење''': ова врста датотеке може садржати штетан код.\nАко га покренете, ваш рачунар може бити угрожен.",
+       "mediawarning": "<strong>Упозорење:</strong> ова врста датотеке може садржати штетан код.\nАко га покренете, Ваш рачунар може бити угрожен.",
        "imagemaxsize": "Ограничење величине слике:<br />''(на страницама за опис датотека)''",
        "thumbsize": "Величина минијатуре:",
        "widthheight": "$1 × $2",
        "confirmemail_loggedin": "Ваша е-адреса је сада потврђена.",
        "confirmemail_subject": "{{SITENAME}} – потврда е-адресе",
        "confirmemail_body": "Неко, вероватно ви, са ИП адресе $1 је отворио налог „$2“ на викију {{SITENAME}}, наводећи ову е-адресу.\n\nДа потврдите да овај налог стварно припада вама, као и да\nомогућите могућности е-поште, отворите ову везу у прегледачу:\n\n$3\n\nУколико нисте отворили налог, пратите везу\nиспод како бисте прекинули поступак уписа:\n\n$5\n\nОвај потврдни код истиче $6 у $5.",
-       "confirmemail_body_changed": "Неко, вероватно ви, са ИП адресе $1 је променио е-адресу налога „$2“ у ову адресу на викију {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности е-поште, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду е-адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7.",
+       "confirmemail_body_changed": "Неко, вероватно ви, са ИП адресе $1 је променио е-адресу налога „$2“ у ову адресу на викију {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности е-поште, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду е-адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
        "confirmemail_body_set": "Неко, вероватно ви, са ИП адресе $1 \nје променио е-адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали могућности е-поште на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду е-адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
        "confirmemail_invalidated": "Потврда е-поште је отказана",
        "invalidateemail": "Отказивање потврде е-поште",
        "version-libraries": "Инсталиране библиотеке",
        "version-libraries-library": "Библиотека",
        "version-libraries-version": "Верзија",
+       "version-libraries-license": "Лиценца",
+       "version-libraries-description": "Опис",
+       "version-libraries-authors": "Аутори",
        "redirect": "Преусмерење на датотеку, корисника, страницу или измену",
        "redirect-legend": "Преусмери на датотеку или страницу",
        "redirect-submit": "Иди",
        "tags-actions-header": "Радње",
        "tags-active-yes": "Да",
        "tags-active-no": "Не",
+       "tags-source-extension": "Део екстензије",
+       "tags-source-manual": "Ручно је додају корисници и ботови",
        "tags-source-none": "Ван употребе",
        "tags-edit": "уреди",
        "tags-delete": "обриши",
        "tags-hitcount": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "tags-manage-no-permission": "Немате дозволу да мењате ознаке.",
        "tags-create-heading": "Нова ознака",
+       "tags-create-explanation": "По подразумеваним подешавањима нове ознаке моћи ће да користе корисници и ботови.",
        "tags-create-tag-name": "Назив ознаке:",
        "tags-create-reason": "Разлог:",
        "tags-create-submit": "Направи",
        "tags-create-warnings-below": "Правите нову ознаку, желите ли да наставите?",
        "tags-delete-title": "Брисање ознака",
        "tags-delete-explanation-initial": "Бришете ознаку „$1“ из базе података.",
+       "tags-delete-explanation-warning": "Ова радња је <strong>неповратна</strong> и <strong>не може се поништити</strong>, чак ни администратори базе података је не могу поништити. Будите сигурни да је ово ознака коју желите обрисати.",
        "tags-delete-reason": "Разлог:",
        "tags-delete-submit": "Неповратно обриши ову ознаку",
        "tags-delete-not-found": "Ознака „$1“ не постоји.",
        "tags-deactivate-reason": "Разлог:",
        "tags-deactivate-not-allowed": "Није могуће деактивирати ознаку „$1“.",
        "tags-deactivate-submit": "Декативирај",
+       "tags-edit-title": "Уреди ознаке",
        "tags-edit-existing-tags": "Постојеће ознаке:",
        "tags-edit-new-tags": "Нове ознаке:",
        "tags-edit-reason": "Разлог:",
        "htmlform-cloner-create": "Додај још",
        "htmlform-cloner-delete": "Уклони",
        "htmlform-cloner-required": "Бар једна вредност је потребна.",
+       "htmlform-title-not-exists": "[[:$1]] не постоји.",
+       "htmlform-user-not-exists": "<strong>$1</strong> не постоји.",
+       "htmlform-user-not-valid": "<strong>$1</strong> није исправно корисничко име.",
        "sqlite-has-fts": "$1 с подршком претраге целог текста",
        "sqlite-no-fts": "$1 без подршке претраге целог текста",
        "logentry-delete-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} страницу $3",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
-       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
+       "logentry-delete-event": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја}} у дневнику $3: $4",
        "logentry-delete-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=једне измене|$5 измене|$5 измена}} на страници $3: $4",
-       "logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
+       "logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику $3",
        "logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
-       "logentry-suppress-event": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|1=догађаја|$5 догађаја|$5 догађаја}} у дневнику на $3: $4",
+       "logentry-suppress-event": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|догађаја|$5 догађаја}} у дневнику $3: $4",
        "logentry-suppress-revision": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост {{PLURAL:$5|измене|$5 измена}} на страници $3: $4",
-       "logentry-suppress-event-legacy": "$1 је потајно {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
+       "logentry-suppress-event-legacy": "$1 је потајно {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику $3",
        "logentry-suppress-revision-legacy": "$1 је тајно {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
        "revdelete-content-hid": "садржај је сакривен",
        "revdelete-summary-hid": "опис измене је сакривен",
        "logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
        "logentry-newusers-byemail": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3 и лозинка је послата на е-пошту",
        "logentry-newusers-autocreate": "Кориснички налог $1 је аутоматски {{GENDER:$2|отворен}}",
+       "logentry-protect-move_prot": "$1 је {{GENDER:$2|преместио|преместила}} поставке заштите са $4 на $3",
        "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5",
        "logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
        "logentry-rights-autopromote": "$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5",
        "logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
        "logentry-upload-overwrite": "$1 је {{GENDER:$2|послао|послала}} нову верзију $3",
        "logentry-upload-revert": "$1 је {{GENDER:$2|послао|послала}} $3",
-       "log-name-managetags": "Дневник ознака",
-       "log-description-managetags": "Овај дневник садржи списак измена у вези [[Special:Tags|ознака]]. Дневник садржи само радње извршене од стране администратора; уноси за ознаке направљене или обрисане од стране вики софтвера се не налазе у овом дневнику.",
+       "log-name-managetags": "Дневник уређивања ознака",
+       "log-description-managetags": "Овај дневник садржи списак измена у вези [[Special:Tags|ознака]]. Дневник садржи само радње извршене од стране администратора, уноси за ознаке направљене или обрисане од стране вики софтвера се не налазе у овом дневнику.",
        "logentry-managetags-create": "$1 је {{GENDER:$2|направио|направила}} ознаку „$4“",
        "logentry-managetags-delete": "$1 је {{GENDER:$2|обрисао|обрисала}} ознаку „$4“ (уклоњена је из $5 {{PLURAL:$5|измене или дневника|измена и/или дневника}})",
        "logentry-managetags-activate": "$1 је {{GENDER:$2|активирао|активирала}} ознаку „$4“ за употребу од стране корисника и ботова",
        "logentry-managetags-deactivate": "$1 је {{GENDER:$2|деактивирао|деактивирала}} ознаку „$4“ за употребу од стране корисника и ботова",
+       "log-name-tag": "Дневник ознака",
        "rightsnone": "(нема)",
        "revdelete-summary": "опис измене",
        "feedback-adding": "Додајем повратну информацију на страницу…",
        "special-characters-group-telugu": "телугу",
        "special-characters-group-sinhala": "синхалски",
        "special-characters-group-gujarati": "гуџарати",
+       "special-characters-group-devanagari": "деванагари",
        "special-characters-group-thai": "тајландски",
        "special-characters-group-lao": "лаоски",
        "special-characters-group-khmer": "кмерски",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
        "mw-widgets-titleinput-description-redirect": "преусмерава на $1"
 }
index a20d502..939524d 100644 (file)
@@ -17,7 +17,8 @@
                        "Михајло Анђелковић",
                        "לערי ריינהארט",
                        "아라",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Srdjan m"
                ]
        },
        "tog-underline": "Podvlačenje veza:",
        "databaseerror-query": "Upit: $1",
        "databaseerror-function": "Funkcija: $1",
        "databaseerror-error": "Greška: $1",
-       "laggedslavemode": "'''Upozorenje:''' stranica je možda zastarela.",
+       "laggedslavemode": "<strong>Upozorenje:</strong> stranica je možda zastarela.",
        "readonly": "Baza podataka je zaključana",
        "enterlockreason": "Unesite razlog za zaključavanje, uključujući i vreme otključavanja",
        "readonlytext": "Baza podataka je trenutno zaključana, što znači da je nije moguće menjati.\n\nRazlog: $1",
        "delete-hook-aborted": "Brisanje je prekinula kuka.\nNije dato nikakvo obrazloženje.",
        "badtitle": "Neispravan naslov",
        "badtitletext": "Naslov stranice je neispravan, prazan ili je međujezički ili međuviki naslov pogrešno povezan.\nMožda sadrži znakove koji se ne mogu koristiti u naslovima.",
+       "title-invalid-characters": "Traženi naslov ima nevažeće karaktere: „$1“.",
        "perfcached": "Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.",
        "perfcachedts": "Sledeći podaci su keširani i poslednji put su ažurirani $2 u $3. U kešu {{PLURAL:$4|1=je dostupan najviše jedan rezultat|su dostupna najviše $4 rezultata|je dostupno najviše $4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je trenutno onemogućeno.\nPodaci koji se ovde nalaze mogu biti zastareli.",
        "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.",
        "translateinterface": "Da dodate ili promenite prevode za sve vikije, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
        "cascadeprotected": "Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:\n$2",
-       "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru '''$1'''.",
+       "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru <strong>$1</strong>.",
        "customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.",
        "customjsprotected": "Nemate dozvolu da menjate ovu stranicu javaskripta jer sadrži lične postavke drugog korisnika.",
        "mycustomcssprotected": "Nemate dozvolu za menjanje ove CSS stranice.",
        "virus-badscanner": "Neispravna postavka: nepoznati skener za viruse: ''$1''",
        "virus-scanfailed": "neuspešno skeniranje (kod $1)",
        "virus-unknownscanner": "nepoznati antivirus:",
-       "logouttext": "'''Odjavljeni ste.'''\n\nImajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
+       "logouttext": "<strong>Odjavljeni ste.</strong>\n\nImajte na umu da neke stranice mogu nastaviti da se prikazuju kao da ste još prijavljeni, sve dok ne očistite privremenu memoriju svog pregledača.",
        "welcomeuser": "Dobrodošli, $1!",
        "welcomecreation-msg": "Vaš nalog je otvoren.\nNe zaboravite da promenite svoja [[Special:Preferences|podešavanja]].",
        "yourname": "Korisničko ime:",
        "wrongpassword": "Uneli ste neispravnu lozinku. Pokušajte ponovo.",
        "wrongpasswordempty": "Niste uneli lozinku. Pokušajte ponovo.",
        "passwordtooshort": "Lozinka mora imati najmanje {{PLURAL:$1|jedan znak|$1 znaka|$1 znakova}}.",
+       "passwordtoolong": "Lozinke ne mogu biti duže od {{PLURAL:$1|$1 znaka|$1 znakova}}.",
        "password-name-match": "Lozinka se mora razlikovati od korisničkog imena.",
        "password-login-forbidden": "Korišćenje ovog korisničkog imena i lozinke je zabranjeno.",
        "mailmypassword": "Resetuj lozinku",
        "resetpass-submit-loggedin": "Promeni lozinku",
        "resetpass-submit-cancel": "Otkaži",
        "resetpass-wrong-oldpass": "Neispravna privremena ili tekuća lozinka.\nMožda ste već promenili lozinku ili ste zatražili novu privremenu lozinku.",
-       "resetpass-recycled": "Uneli ste sadašnju lozinku, da bi ste resetovali lozinku morate uneti novu.",
+       "resetpass-recycled": "Uneli ste sadašnju lozinku, da biste resetovali lozinku morate uneti novu.",
        "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:",
        "resetpass-temp-password": "Privremena lozinka:",
        "resetpass-abort-generic": "Promenu lozinke je sprečio dodatak.",
        "resetpass-validity-soft": "Vaša lozinka nije valjana: $1\n\nMolimo izaberite novu ili kliknite „{{int:resetpass-submit-cancel}}“ da resetujete kasnije.",
        "passwordreset": "Obnavljanje lozinke",
        "passwordreset-text-one": "Popunite ovaj obrazac da biste dobili privremenu lozinku na e-poštu.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako bi ste dobili privremenu lozinku na e-poštu.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku na e-poštu.}}",
        "passwordreset-disabled": "Obnavljanje lozinke je onemogućeno na ovom vikiju.",
        "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom vikiju.",
        "passwordreset-username": "Korisničko ime:",
        "userjspreview": "'''Ovo je samo pregled javaskripta.'''\n'''Stranica još nije sačuvana!'''",
        "sitecsspreview": "'''Ovo je samo pregled CSS-a.'''\n'''Stranica još nije sačuvana!'''",
        "sitejspreview": "'''Ovo je samo pregled javaskripta.'''\n'''Stranica još nije sačuvana!'''",
-       "userinvalidcssjstitle": "'''Upozorenje:''' ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
+       "userinvalidcssjstitle": "<strong>Upozorenje:</strong> ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ažurirano)",
-       "note": "'''Napomena:'''",
+       "note": "<strong>Napomena:</strong>",
        "previewnote": "<strong>Ovo je pretpregled.</strong>\nVaše izmene još nisu sačuvane!",
        "continue-editing": "Idi na uređivački okvir",
        "previewconflict": "Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.",
        "content-model-text": "čist tekst",
        "content-model-javascript": "javaskript",
        "content-model-css": "CSS",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva [[:$2]] sa više od jedne vrednosti za parametar „$3“. Samo poslednja navedena vrednost će biti korišćena.",
        "expensive-parserfunction-warning": "'''Upozorenje:''' ova stranica sadrži previše poziva za raščlanjivanje.\n\nTrebalo bi da ima manje od $2 {{PLURAL:$2|poziv|poziva|poziva}}, a sada ima $1.",
        "expensive-parserfunction-category": "Stranice s previše poziva za raščlanjivanje",
        "post-expand-template-inclusion-warning": "'''Upozorenje:''' veličina uključenog šablona je prevelika.\nNeki šabloni neće biti uključeni.",
        "history-feed-empty": "Tražena stranica ne postoji.\nMoguće da je obrisana s vikija ili je preimenovana.\nPokušajte da [[Special:Search|pretražite viki]] za slične stranice.",
        "rev-deleted-comment": "(opis izmene uklonjen)",
        "rev-deleted-user": "(korisničko ime uklonjeno)",
-       "rev-deleted-event": "(detalji dnevnika uklonjeni)",
+       "rev-deleted-event": "(detalji unosa uklonjeni)",
        "rev-deleted-user-contribs": "[korisničko ime ili IP adresa je uklonjena – izmena je sakrivena sa spiska doprinosa]",
        "rev-deleted-text-permission": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].",
        "rev-deleted-text-unhide": "Izmena ove stranice je '''obrisana'''.\nDetalje možete videti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} istoriji brisanja].\nIpak možete da [$1 vidite ovu izmenu] ako želite da nastavite.",
        "revdelete-confirm": "Potvrdite da nameravate ovo uraditi, da razumete posledice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "revdelete-suppress-text": "Sakrivanje izmena bi trebalo koristiti <strong>samo</strong> u sledećim slučajevima:\n* zlonamerni ili pogrdni podaci\n* neprikladni lični podaci\n*: <em>kućna adresa i broj telefona, broj kreditne kartice, JMBG itd.</em>",
        "revdelete-legend": "Ograničenja vidljivosti",
-       "revdelete-hide-text": "Sakrij tekst izmene",
+       "revdelete-hide-text": "Tekst izmene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
-       "revdelete-hide-name": "Sakrij cilj i parametre",
+       "revdelete-hide-name": "Cilj i parametre",
        "revdelete-hide-comment": "Opis izmene",
-       "revdelete-hide-user": "Korisnčko ime urednika/IP adresa",
+       "revdelete-hide-user": "Korisničko ime/IP adresa",
        "revdelete-hide-restricted": "Sakrij podatke od administratora i drugih korisnika",
        "revdelete-radio-same": "(ne menjaj)",
        "revdelete-radio-set": "Sakriveno",
        "revdelete-unsuppress": "Ukloni ograničenja na vraćenim izmenama",
        "revdelete-log": "Razlog:",
        "revdelete-submit": "Primeni na {{PLURAL:$1|izabranu izmenu|izabrane izmene}}",
-       "revdelete-success": "'''Vidljivost izmene je ažurirana.'''",
+       "revdelete-success": "Vidljivost izmene je ažurirana.",
        "revdelete-failure": "'''Ne mogu da ažuriram vidljivost izmene:'''\n$1",
-       "logdelete-success": "'''Vidljivost istorije je postavljena.'''",
+       "logdelete-success": "Postavljena je vidljivost unosa u dnevniku.",
        "logdelete-failure": "'''Ne mogu da postavim vidljivost istorije:'''\n$1",
        "revdel-restore": "promeni vidljivost",
        "pagehist": "Istorija stranice",
        "notextmatches": "Nijedan tekst stranice ne odgovara",
        "prevn": "prethodnih {{PLURAL:$1|$1}}",
        "nextn": "sledećih {{PLURAL:$1|$1}}",
+       "prev-page": "prethodna stranica",
+       "next-page": "sledeća stranica",
        "prevn-title": "$1 {{PLURAL:$1|prethodni  rezultat|prethodna rezultata|prethodnih rezultata}}",
        "nextn-title": "$1 {{PLURAL:$1|sledeći rezultat|sledeća rezultata|sledećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata|rezultata}} po stranici",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
        "search-suggest": "Da li ste mislili na: $1",
+       "search-rewritten": "Prikazani rezultati za $1. Ipak pretraži $2.",
        "search-interwiki-caption": "Bratski projekti",
        "search-interwiki-default": "Rezultati sa $1:",
        "search-interwiki-more": "(više)",
        "rows": "Redova:",
        "columns": "Kolona",
        "searchresultshead": "Pretraga",
-       "stub-threshold": "Prag za oblikovanje <a href=\"#\" class=\"stub\">veze kao klice</a> (u bajtovima):",
+       "stub-threshold": "Prag za oblikovanje veze kao klice ($1):",
        "stub-threshold-disabled": "Onemogućeno",
        "recentchangesdays": "Broj dana u skorašnjim izmenama:",
-       "recentchangesdays-max": "(najviše $1 {{PLURAL:$1|dan|dana|dana}})",
+       "recentchangesdays-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "recentchangescount": "Broj izmena za prikaz:",
        "prefs-help-recentchangescount": "Podrazumeva skorašnje izmene, istorije stranica i dnevnike.",
-       "prefs-help-watchlist-token2": "Ovo je tajni ključ za veb dovod vašeg spiska nadgledanja.\nSvako ko zna ovaj ključ biće u mogućnosti da vidi vaša nadgledanja stoga nemojte ga odavati nikome.\nAko je potrebno možete ga [[Special:ResetTokens|resetovati]].",
+       "prefs-help-watchlist-token2": "Ovo je tajni ključ za veb-dovod Vašeg spiska nadgledanja. \nSvako ko zna ovaj ključ biće u mogućnosti da vidi Vaša nadgledanja; stoga, ključ nemojte odavati nikome. \nAko je potrebno, ključ možete [[Special:ResetTokens|resetovati]].",
        "savedprefs": "Vaša podešavanja su sačuvana.",
        "timezonelegend": "Vremenska zona:",
        "localtime": "Lokalno vreme:",
        "yourvariant": "Varijanta jezika:",
        "prefs-help-variant": "Željena varijanta ili pravopis za prikaz stranica sa sadržajem ovog vikija.",
        "yournick": "Novi potpis:",
-       "prefs-help-signature": "Komentare na stranicama za razgovor potpišite sa ''<nowiki>~~~~</nowiki>''. Ovi znakovi će biti pretvoreni u vaš potpis i trenutno vreme.",
+       "prefs-help-signature": "Komentare na stranicama za razgovor potpisujte sa četiri tilde: <nowiki>~~~~</nowiki>. Ovaj vikitekst će biti pretvoren u Vaš potpis i trenutno vreme.",
        "badsig": "Potpis je neispravan.\nProverite oznake HTML.",
        "badsiglength": "Vaš potpis je predugačak.\nNe sme biti duži od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
        "yourgender": "Kako želite da se predstavite?",
        "email-address-validity-invalid": "Unesite ispravnu e-adresu",
        "userrights": "Upravljanje korisničkim pravima",
        "userrights-lookup-user": "Upravljanje korisničkim grupama",
-       "userrights-user-editname": "Unesite korisničko ime:",
-       "editusergroup": "Promeni korisničke grupe",
+       "userrights-user-editname": "Korisničko ime:",
+       "editusergroup": "Pretraži",
        "editinguser": "Menjate korisnička prava {{GENDER:$1|korisnika|korisnice|korisnika}} '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Promena korisničkih grupa",
        "saveusergroups": "Sačuvaj korisničke grupe",
        "userrights-groupsmember": "Član:",
-       "userrights-groupsmember-auto": "Uključeni član od:",
+       "userrights-groupsmember-auto": "Podrazumevano član i:",
        "userrights-groups-help": "Možete promeniti grupe kojima ovaj korisnik pripada.\n* Označena kućica označava da se korisnik nalazi u toj grupi.\n* Neoznačena kućica označava da se korisnik ne nalazi u toj grupi.\n* Zvezdica označava da ne možete ukloniti grupu ako je dodate i obratno.",
        "userrights-reason": "Razlog:",
        "userrights-no-interwiki": "Nemate ovlašćenja da menjate korisnička prava na drugim vikijima.",
        "group-autoconfirmed-member": "{{GENDER:$1|automatski potvrđen korisnik|automatski potvrđena korisnica}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrator|administratorka}}",
-       "group-bureaucrat-member": "{{GENDER:$1|birokrata|birokratkinja}}",
+       "group-bureaucrat-member": "{{GENDER:$1|birokrata}}",
        "group-suppress-member": "{{GENDER:$1|revizor|revizorka}}",
        "grouppage-user": "{{ns:project}}:Korisnici",
        "grouppage-autoconfirmed": "{{ns:project}}:Automatski potvrđeni korisnici",
        "right-protect": "promeni nivoe zaštite i uredi stranice sa prenosivom zaštitom",
        "right-editprotected": "uređivanje stranice pod zaštitom „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "uređivanje stranica pod zaštitom „{{int:protect-level-autoconfirmed}}“",
-       "right-editinterface": "uređivanje korisničkog sučelja",
+       "right-editinterface": "uređivanje korisničkog okruženja",
        "right-editusercssjs": "uređivanje tuđih CSS i javaskript datoteka",
        "right-editusercss": "uređivanje tuđih CSS datoteka",
        "right-edituserjs": "uređivanje tuđih JavaScript datoteka",
        "right-editmyusercss": "uređivanje sopstvenih CSS datoteka",
        "right-editmyuserjs": "uređivanje sopstvenih JavaScript datoteka",
        "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
+       "right-editmywatchlist": "uređivanje sopstvenog spiska nadgledanja; neke preduzete radnje će svejedno dodati stranice na spisak i bez ovog prava",
        "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. adresu e-pošte, pravo ime)",
        "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. adresu e-pošte, pravo ime)",
        "right-editmyoptions": "uređivanje sopstvenih podešavanja",
        "boteditletter": "b",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|korisnik nadgleda|korisnika nadgledaju|korisnika nadgledaju}}]",
-       "rc_categories": "Ograniči na kategorije (razdvoji s uspravnom crtom)",
+       "rc_categories": "Ograniči na kategorije (razdvoji s uspravnom crtom):",
        "rc_categories_any": "Sve",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajta|bajtova}} posle izmene",
        "listfiles-delete": "obriši",
        "listfiles-summary": "Ova posebna stranica prikazuje sve poslate datoteke.",
        "listfiles_search_for": "Naziv datoteke:",
+       "listfiles-userdoesnotexist": "Korisnički nalog „$1“ nije registrovan.",
        "imgfile": "datoteka",
        "listfiles": "Spisak datoteka",
        "listfiles_thumb": "Minijatura",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorija:",
        "randomincategory-legend": "Slučajna stranica u kategoriji",
+       "randomincategory-submit": "Idi",
        "randomredirect": "Slučajno preusmerenje",
        "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1“.",
        "statistics": "Statistike",
        "unusedimages": "Nekorišćene datoteke",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
-       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Spisak nepostojećih stranica sa najviše veza do njih, na ovom spisku se ne nalaze stranice do kojih vode preusmerenja. Za spisak pokvarenih preusmerenja pogledajte [[{{#special:BrokenRedirects}}|spisak pokvarenih preusmerenja]].",
        "wantedpages-badtitle": "Neispravan naslov u nizu rezultata: $1",
        "wantedfiles": "Tražene datoteke",
        "wantedfiletext-cat": "Sledeće datoteke se koriste, ali ne postoje. Datoteke iz drugih riznica mogu biti navedene iako ne postoje. Takve datoteke će biti <del>poništene</del> sa spiska. Pored toga, stranice koje sadrže nepostojeće datoteke se nalaze [[:$1|ovde]].",
        "all-logs-page": "Svi javni dnevnici",
        "alllogstext": "Skupni prikaz svih dostupnih istorija ovog vikija.\nMožete suziti prikaz odabirući vrstu istorije, korisničkog imena ili tražene stranice.",
        "logempty": "Nema pronađenih stavki u istoriji.",
-       "log-title-wildcard": "traži naslove koji počinju s ovim tekstom",
-       "showhideselectedlogentries": "Prikaži/sakrij izabrane zapise",
+       "log-title-wildcard": "Traži naslove koji počinju s ovim tekstom",
+       "showhideselectedlogentries": "Prikaži/sakrij izabrane događaje",
        "allpages": "Sve stranice",
        "nextpage": "Sledeća stranica ($1)",
        "prevpage": "Prethodna stranica ($1)",
        "linksearch-pat": "Obrazac pretrage:",
        "linksearch-ns": "Imenski prostor:",
        "linksearch-ok": "Pretraži",
-       "linksearch-text": "Mogu se koristiti džokeri poput „*.wikipedia.org“.\nPotreban je najviši domen, kao „*.org“.<br />\n{{PLURAL:$2|Podržan protokol|Podržani protokoli}}: <code>$1</code> (zadaje http:// ako ne navedete protokol).",
+       "linksearch-text": "Mogu se koristiti džokeri poput „*.wikipedia.org“.\nPotreban je najviši domen, kao „*.org“.<br />\n{{PLURAL:$2|1=Podržan protokol|Podržani protokoli}}: $1 (zadaje http:// ako ne navedete protokol).",
        "linksearch-line": "$1 veza u $2",
        "linksearch-error": "Džokeri se mogu pojaviti samo na početku adrese.",
        "listusersfrom": "Prikaži korisnike počev od:",
        "listgrouprights-addgroup-self": "dodavanje {{PLURAL:$2|grupe|grupa}} na svoj nalog: $1",
        "listgrouprights-removegroup-self": "uklanjanje {{PLURAL:$2|grupe|grupa}} sa svog naloga: $1",
        "listgrouprights-addgroup-self-all": "Dodaj sve grupe na sopstveni nalog",
-       "listgrouprights-removegroup-self-all": "Ukloni sve grupe sa sopstvenog naloga",
+       "listgrouprights-removegroup-self-all": "uklanjanje svih grupa sa sopstvenog naloga",
        "listgrouprights-namespaceprotection-header": "Ograničenja imenskih prostora",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
        "listgrouprights-namespaceprotection-restrictedto": "Prava potrebna za uređivanje",
        "emailuser": "Pošalji e-poruku",
        "emailuser-title-target": "Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}",
        "emailuser-title-notarget": "Slanje e-poruke korisniku",
-       "emailpage": "Slanje e-poruka",
        "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici}}.\nE-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
        "defemailsubject": "{{SITENAME}} — E-pošta od {{GENDER:$1|korisnika|korisnice}} $1",
        "usermaildisabled": "Korisnička e-pošta je onemogućena",
        "emailccsubject": "Kopija vaše poruke korisniku $1: $2",
        "emailsent": "Poruka je poslata",
        "emailsenttext": "Vaša e-poruka je poslata.",
-       "emailuserfooter": "Ovu e-poruku je {{GENDER:|poslao|poslala|poslao}} $1 korisniku $2 putem e-pošte s vikija {{SITENAME}}.",
+       "emailuserfooter": "Ovu e-poruku je poslao $1 korisniku $2 pomoću „{{int:emailuser}}“ s vikija {{SITENAME}}.",
        "usermessage-summary": "Slanje sistemske poruke.",
        "usermessage-editor": "Uređivač sistemskih poruka",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Morate biti $1 da biste gledali i uređivali stavke na vašem spisku nadgledanja.",
        "watchnologin": "Niste prijavljeni",
        "addwatch": "Dodaj na spisak nadgledanja",
-       "addedwatchtext": "Stranica „[[:$1]]“ je dodata na vaš [[Special:Watchlist|spisak nadgledanja]].\nBuduće izmene ove stranice i njene stranice za razgovor biće navedene tamo.",
-       "addedwatchtext-short": "Stranica „$1“ je dodata na vaš spisak nadgledanja.",
+       "addedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je dodata na Vaš [[Special:Watchlist|spisak nadgledanja]].",
+       "addedwatchtext-short": "Stranica „$1“ je dodata na Vaš spisak nadgledanja.",
        "removewatch": "Ukloni sa spiska nadgledanja",
-       "removedwatchtext": "Stranica „[[:$1]]“ je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].",
+       "removedwatchtext": "Stranica „[[:$1]]“ i njena stranica za razgovor je uklonjena s vašeg [[Special:Watchlist|spiska nadgledanja]].",
        "removedwatchtext-short": "Stranica „$1“ je uklonjena s vašeg spiska nadgledanja.",
        "watch": "Nadgledaj",
        "watchthispage": "Nadgledaj ovu stranicu",
        "watchlist-details": "Imate {{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} na vašem spisku nadgledanja, ne računajući stranice za razgovor.",
        "wlheader-enotif": "Obaveštenje e-porukom je omogućeno.",
        "wlheader-showupdated": "Stranice koje su izmenjene otkad ste ih poslednji put posetili su '''podebljane'''.",
-       "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje '''$1''' izmene|je poslednjih '''$1''' izmena}} u {{PLURAL:$2|prethodnom satu|prethodna '''$2''' sata|prethodnih '''$2''' sati}}, zaključno sa $3, $4.",
+       "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje <strong>$1</strong> izmene|je poslednjih <strong>$1</strong> izmena}} u {{PLURAL:$2|prethodnom satu|prethodna <strong>$2</strong> sata|prethodnih <strong>$2</strong> sati}}, zaključno sa $3, $4.",
        "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana",
        "watchlist-options": "Postavke spiska nadgledanja",
        "watching": "Nadgledanje…",
        "enotif_subject_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio je|premestila je}} $2",
        "enotif_subject_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio je|vratila je}} $2",
        "enotif_subject_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio je|promenila je}} $2",
-       "enotif_body_intro_deleted": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|obrisao je|obrisala je}} $2 dana $PAGEEDITDATE. Pogledajte $3.",
-       "enotif_body_intro_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio je|napravila je|napravio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
-       "enotif_body_intro_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio je|premestila je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na  $3.",
-       "enotif_body_intro_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio je|vratila je|vratio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
-       "enotif_body_intro_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio je|promenila je|promenio je}} $2 dana $PAGEEDITDATE. Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_deleted": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|obrisao|obrisala}} je $2 dana $PAGEEDITDATE Pogledajte $3.",
+       "enotif_body_intro_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio|napravila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio|premestila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na  $3.",
+       "enotif_body_intro_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio|vratila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
+       "enotif_body_intro_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio|promenila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
        "enotif_lastvisited": "Pogledajte $1 za sve izmene od vaše poslednje posete.",
        "enotif_lastdiff": "Pogledajte $1 da vidite ovu izmenu.",
        "enotif_anon_editor": "anoniman korisnik $1",
        "exbeforeblank": "sadržaj pre brisanja je bio: „$1“",
        "delete-confirm": "Brisanje stranice „$1“",
        "delete-legend": "Obriši",
-       "historywarning": "<strong>Upozorenje:</strong> stranica koju želite da obrišete ima istoriju s približno $1 {{PLURAL:$1|izmenom|izmene|izmena}}:",
+       "historywarning": "<strong>Upozorenje:</strong> stranica koju želite da obrišete ima istoriju sa $1 {{PLURAL:$1|izmenom|izmene|izmena}}:",
        "confirmdeletetext": "Upravo ćete obrisati stranicu, uključujući i njenu istoriju.\nPotvrdite svoju nameru, da razumete posledice i da ovo radite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
        "actioncomplete": "Radnja je završena",
        "actionfailed": "Radnja nije uspela",
        "rollback-success": "Vraćene su izmene {{GENDER:$1|korisnika|korisnice}} $1\nna poslednju izmenu {{GENDER:$2|korisnika|korisnice}} $2.",
        "sessionfailure-title": "Sesija je okončana",
        "sessionfailure": "Izgleda da postoji problem s vašom sesijom;\nova radnja je otkazana da bi se izbegla zloupotreba.\nVratite se na prethodnu stranicu, ponovo je učitajte i pokušajte ponovo.",
+       "changecontentmodel": "Promeni model sadržaja stranice",
+       "changecontentmodel-legend": "Promeni model sadržaja",
+       "changecontentmodel-title-label": "Naslov stranice",
+       "changecontentmodel-model-label": "Novi model sadržaja",
+       "changecontentmodel-reason-label": "Razlog:",
+       "changecontentmodel-success-title": "Model sadržaja je promenjen",
+       "changecontentmodel-success-text": "Model sadržaja stranice [[:$1]] je promenjen.",
+       "changecontentmodel-cannot-convert": "Model sadržaja stranice [[:$1]] se ne može pretvoriti u vrstu $2.",
+       "changecontentmodel-nodirectediting": "Model sadržaja $1 ne podržava izravno uređivanje",
+       "log-name-contentmodel": "Dnevnik promene modela sadržaja",
+       "log-description-contentmodel": "Događaji koji imaju vezu sa modelima sadržaja stranica",
+       "logentry-contentmodel-change": "$1 je {{GENDER:$2|promenio|promenila}} model sadržaja stranice $3 iz „$4“ u „$5“",
+       "logentry-contentmodel-change-revertlink": "vrati",
+       "logentry-contentmodel-change-revert": "vrati",
        "protectlogpage": "Dnevnik zaključavanja",
        "protectlogtext": "Ispod je spisak zaštićenih stranica.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za više detalja.",
        "protectedarticle": "{{GENDER:|je zaštitio|je zaštitila}} „[[$1]]“",
        "modifiedarticleprotection": "je promenio stepen zaštite za „[[$1]]“",
        "unprotectedarticle": "je skinuo zaštitu sa stranice „[[$1]]“",
-       "movedarticleprotection": "{{GENDER:|je premestio|je premestila|je premestio}} postavke zaštite sa „[[$2]]“ na „[[$1]]“",
+       "movedarticleprotection": "je premestio postavke zaštite sa „[[$2]]“ na „[[$1]]“",
        "protect-title": "Stepen zaštite za „$1“",
        "protect-title-notallowed": "Pregled stepena zaštite za „$1“",
        "prot_1movedto2": "je premestio [[$1]] na [[$2]]",
        "protect-badnamespace-title": "Nezaštitljiv imenski prostor",
        "protect-badnamespace-text": "Stranice u ovom imenskom prostoru se ne mogu zaštititi.",
+       "protect-norestrictiontypes-text": "Ova stranica se ne može zaštititi jer nema dostupnih vrsta ograničenja.",
        "protect-norestrictiontypes-title": "Nezaštitljiva strana",
-       "protect-legend": "Potvrdite zaštitu",
+       "protect-legend": "Postavke zaštite",
        "protectcomment": "Razlog:",
        "protectexpiry": "Ističe:",
        "protect_expiry_invalid": "Vreme isteka je neispravno.",
        "protect-locked-dblock": "Stepeni zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su postavke stranice '''$1''':",
        "protect-locked-access": "Nemate ovlašćenja za menjanje stepena zaštite stranice.\nOvo su trenutne postavke stranice '''$1''':",
        "protect-cascadeon": "Ova stranica je trenutno zaštićena jer se nalazi na {{PLURAL:$1|stranici koja ima|stranicama koje imaju}} prenosivu zaštitu.\nMožete da promenite stepen zaštite, ali to neće uticati na prenosivu zaštitu.",
-       "protect-default": "Dopušteno svim korisnicima",
+       "protect-default": "Dopušteno svima",
        "protect-fallback": "Dozvoljeno samo korisnicima sa dozvolom „$1“",
        "protect-level-autoconfirmed": "Dopušteno samo automatski potvrđenim korisnicima",
        "protect-level-sysop": "Dopušteno samo administratorima",
        "pagesize": "(bajtovi)",
        "restriction-edit": "uređivanje",
        "restriction-move": "premeštanje",
-       "restriction-create": "stvaranje",
+       "restriction-create": "Pravljenje",
        "restriction-upload": "slanje",
        "restriction-level-sysop": "potpuno zaštićeno",
        "restriction-level-autoconfirmed": "poluzaštićeno",
        "restriction-level-all": "svi nivoi",
        "undelete": "Prikaz obrisanih stranica",
-       "undeletepage": "Prikaz i vraćanje obrisanih stranica",
+       "undeletepage": "Pregled i vraćanje obrisanih stranica",
        "undeletepagetitle": "'''Sledeći sadržaj se sastoji od obrisanih izmena stranice [[:$1|$1]]'''.",
        "viewdeletedpage": "Prikaz obrisanih stranica",
        "undeletepagetext": "{{PLURAL:$1|Sledeća stranica je obrisana, ali je još u arhivi i može biti vraćena|Sledeće $1 stranice su obrisane, ali su još u arhivi i mogu biti vraćene|Sledećih $1 stranica je obrisano, ali su još u arhivi i mogu biti vraćene}}.\nArhiva se povremeno čisti od ovakvih stranica.",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|Izmena je vraćena|$1 izmene su vraćene|$1 izmena je vraćeno}}",
+       "undeletedrevisions": "{{PLURAL:$1|izmena vraćeno}} $1",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
-       "undeletedfiles": "{{PLURAL:$1|Datoteka je vraćena|$1 datoteke su vraćene|$1 datoteka je vraćeno}}",
+       "undeletedfiles": "{{PLURAL:$1|datoteka vraćeno}} $1",
        "cannotundelete": "Vraćanje nije uspelo:\n$1",
-       "undeletedpage": "'''Stranica $1 je vraćena'''\n\nPogledajte [[Special:Log/delete|istoriju brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
+       "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|dnevnik brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
        "undelete-header": "Pogledajte [[Special:Log/delete|istorijat brisanja]] za nedavno obrisane stranice.",
        "undelete-search-title": "Pretraga obrisanih stranica",
        "undelete-search-box": "Pretraži obrisane stranice",
        "sp-contributions-newbies-sub": "Za nove korisnike",
        "sp-contributions-newbies-title": "Doprinosi novih korisnika",
        "sp-contributions-blocklog": "dnevnik blokiranja",
-       "sp-contributions-deleted": "obrisani korisnički doprinosi",
+       "sp-contributions-deleted": "obrisani doprinosi",
        "sp-contributions-uploads": "otpremanja",
        "sp-contributions-logs": "dnevnici",
        "sp-contributions-talk": "razgovor",
        "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 nedelja:1 week,2 nedelje:2 weeks,1 mesec:1 month,3 meseca:3 months,6 meseci:6 months,1 godina:1 year,trajno:infinite",
        "ipbhidename": "Sakrij korisničko ime sa izmena i spiskova",
        "ipbwatchuser": "Nadgledaj korisničke stranice i stranice za razgovor ovog korisnika",
-       "ipb-disableusertalk": "Zabrani ovom korisniku da uređuje svoju stranicu za razgovor dok je blokiran",
+       "ipb-disableusertalk": "Onemogući korisniku da uređuje svoju stranicu za razgovor",
        "ipb-change-block": "Ponovo blokiraj korisnika s ovim postavkama",
        "ipb-confirm": "Potvrdi blokiranje",
        "badipaddress": "Neispravna IP adresa",
        "blocklist-reason": "Razlog",
        "ipblocklist-submit": "Pretraži",
        "ipblocklist-localblock": "Lokalno blokiranje",
-       "ipblocklist-otherblocks": "{{PLURAL:$1|Drugo blokiranje|Druga blokiranja}}",
+       "ipblocklist-otherblocks": "{{PLURAL:$1|Druga blokiranja}}",
        "infiniteblock": "trajno",
        "expiringblock": "ističe $1 u $2",
        "anononlyblock": "samo anonimni",
        "ipb_hide_invalid": "Ne mogu da potisnem ovaj nalog; ima više od {{PLURAL:$1|jedne izmene|$1 izmena}}.",
        "ipb_already_blocked": "„$1“ je već blokiran.",
        "ipb-needreblock": "$1 je već blokiran. Želite li da promenite podešavanja?",
-       "ipb-otherblocks-header": "{{PLURAL:$1|Druga blokada|Druge blokade}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Druge blokade}}",
        "unblock-hideuser": "Ne možete deblokirati ovog korisnika jer je njegovo korisničko ime sakriveno.",
        "ipb_cant_unblock": "Greška: blokada $1 ne postoji. Možda je korisnik deblokiran.",
        "ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može da se deblokira.\nOna je blokirana kao deo blokade $2, koja može biti deblokirana.",
        "movereason": "Razlog:",
        "revertmove": "vrati",
        "delete_and_move": "Obriši i premesti",
-       "delete_and_move_text": "== Potrebno brisanje ==\n\nOdredišna stranica „[[:$1]]“ već postoji. \nŽelite li da je obrišete da biste oslobodili mesto za preusmerenje?",
+       "delete_and_move_text": "== Potrebno brisanje ==\n\nOdredišna stranica „[[:$1]]“ već postoji. \nŽelite li da je obrišete da biste oslobodili mesto za premeštanje?",
        "delete_and_move_confirm": "Da, obriši stranicu",
        "delete_and_move_reason": "Obrisano da se oslobodi mesto za premeštanje iz „[[$1]]“",
        "selfmove": "Izvorni i odredišni naslovi su istovetni;\nne mogu da premestim stranicu preko same sebe.",
        "imagetypemismatch": "Ekstenzija nove datoteke se ne poklapa s njenom vrstom",
        "imageinvalidfilename": "Ciljani naziv datoteke je neispravan",
        "fix-double-redirects": "Ažurirajte sva preusmerenja koja vode do prvobitnog naslova",
-       "move-leave-redirect": "Napravi preusmerenje",
+       "move-leave-redirect": "Ostavi preusmerenje",
        "protectedpagemovewarning": "'''Upozorenje:''' ova stranica je zaštićena, tako da samo korisnici s administratorskim ovlašćenjima mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
        "semiprotectedpagemovewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
        "move-over-sharedrepo": "== Datoteka postoji ==\n[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
        "thumbnail_gd-library": "Nedovršene postavke grafičke biblioteke: nedostaje funkcija $1",
        "thumbnail_image-missing": "Datoteka nedostaje: $1",
        "import": "Uvoz stranica",
-       "importinterwiki": "Međuviki uvoz",
+       "importinterwiki": "Uvoz iz drugo vikija",
        "import-interwiki-text": "Izaberite viki i naslov stranice za uvoz.\nDatumi i imena urednika će biti sačuvani.\nSve radnje pri uvozu s drugih vikija su zabeležene u [[Special:Log/import|dnevniku uvoza]].",
+       "import-interwiki-sourcewiki": "Izvorna viki:",
+       "import-interwiki-sourcepage": "Izvorna stranica:",
        "import-interwiki-history": "Kopiraj sve verzije istorije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi",
+       "import-mapping-namespace": "Uvezi u imenski prostor:",
        "import-upload-filename": "Naziv datoteke:",
        "import-comment": "Komentar:",
        "importtext": "Izvezite datoteku s izvornog vikija koristeći [[Special:Export|izvoz]].\nSačuvajte je na računar i pošaljite ovde.",
        "importcantopen": "Ne mogu da otvorim datoteku za uvoz",
        "importbadinterwiki": "Neispravna međuviki veza",
        "importsuccess": "Uvoženje je završeno!",
-       "importnosources": "Nije određen nijedan međuviki izvor za uvoz, tako da je otpremanje istorije onemogućeno.",
+       "importnosources": "Nije određen nijedan izvor za uvoz, tako da je otpremanje istorije onemogućeno.",
        "importnofile": "Uvozna datoteka nije poslata.",
        "importuploaderrorsize": "Ne mogu da otpremim datoteku za uvoz.\nDatoteka je veća od dozvoljene veličine.",
        "importuploaderrorpartial": "Ne mogu da otpremim datoteku za uvoz.\nDatoteka je samo delimično poslata.",
        "tooltip-pt-logout": "Odjavite se",
        "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se ali to nije obavezno",
        "tooltip-ca-talk": "Razgovor o stranici sa sadržajem",
-       "tooltip-ca-edit": "Možete da uređujete ovu stranicu. Koristite pretpregled pre snimanja",
+       "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Započnite novi odeljak",
        "tooltip-ca-viewsource": "Ova stranica je zaključana. Možete da vidite izvorni kod.",
        "tooltip-ca-history": "Prethodne verzije ove stranice",
        "spam_reverting": "Vraćam na poslednju izmenu koja ne sadrži veze do $1",
        "spam_blanking": "Sve izmene sadrže veze do $1. Čistim",
        "spam_deleting": "Sve izmene sadrže veze do $1. Brišem",
-       "simpleantispam-label": "Anti-spama provera. \n<strong>NE</strong> popunjavaj ovo unutra!",
+       "simpleantispam-label": "Anti-spama provera. \n<strong>Ne</strong> popunjavaj ovo unutra!",
        "pageinfo-title": "Podaci o „$1“",
        "pageinfo-not-current": "Nažalost, nemoguće je pribaviti ove podatke za starije izmene.",
        "pageinfo-header-basic": "Osnovni podaci",
        "markedaspatrollederrortext": "Morate izabrati izmenu da biste je označili kao patroliranu.",
        "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje izmene kao patrolirane.",
        "markedaspatrollednotify": "Ova izmena na stranici „$1“ je označena kao patrolirana.",
-       "markedaspatrollederrornotify": "Označavanje ove stranice patroliranom nije uspelo.",
+       "markedaspatrollederrornotify": "Označavanje ove izmene patroliranom nije uspelo.",
        "patrol-log-page": "Dnevnik patroliranja",
        "patrol-log-header": "Ovo je dnevnik patroliranih izmena.",
        "log-show-hide-patrol": "$1 dnevnik patroliranja",
        "filedelete-archive-read-only": "Server ne može da piše po skladišnoj fascikli ($1).",
        "previousdiff": "← Starija izmena",
        "nextdiff": "Novija izmena →",
-       "mediawarning": "'''Upozorenje''': ova vrsta datoteke može sadržati štetan kod.\nAko ga pokrenete, vaš računar može biti ugrožen.",
+       "mediawarning": "<strong>Upozorenje:</strong> ova vrsta datoteke može sadržati štetan kod.\nAko ga pokrenete, Vaš računar može biti ugrožen.",
        "imagemaxsize": "Ograničenje veličine slike:<br />''(na stranicama za opis datoteka)''",
        "thumbsize": "Veličina minijature:",
        "widthheight": "$1 × $2",
        "confirmemail_loggedin": "Vaša e-adresa je sada potvrđena.",
        "confirmemail_subject": "{{SITENAME}} – potvrda e-adrese",
        "confirmemail_body": "Neko, verovatno vi, sa IP adrese $1 je otvorio nalog „$2“ na vikiju {{SITENAME}}, navodeći ovu e-adresu.\n\nDa potvrdite da ovaj nalog stvarno pripada vama, kao i da\nomogućite mogućnosti e-pošte, otvorite ovu vezu u pregledaču:\n\n$3\n\nUkoliko niste otvorili nalog, pratite vezu\nispod kako biste prekinuli postupak upisa:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $5.",
-       "confirmemail_body_changed": "Neko, verovatno vi, sa IP adrese $1 je promenio e-adresu naloga „$2“ u ovu adresu na vikiju {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti e-pošte, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu e-adrese:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $7.",
+       "confirmemail_body_changed": "Neko, verovatno vi, sa IP adrese $1 je promenio e-adresu naloga „$2“ u ovu adresu na vikiju {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti e-pošte, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu e-adrese:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $7",
        "confirmemail_body_set": "Neko, verovatno vi, sa IP adrese $1 je promenio e-adresu naloga „$2“ u ovu adresu na {{SITENAME}}.\n\nDa bismo potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti e-pošte na {{SITENAME}}, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu e-adrese:\n\n$5\n\nOvaj potvrdni kod ističe $4.",
        "confirmemail_invalidated": "Potvrda e-pošte je otkazana",
        "invalidateemail": "Otkazivanje potvrde e-pošte",
        "tags-deactivate-reason": "Razlog:",
        "tags-deactivate-not-allowed": "Nije moguće deaktivirati oznaku „$1“.",
        "tags-deactivate-submit": "Dekativiraj",
+       "tags-edit-existing-tags": "Postojeće oznake:",
+       "tags-edit-new-tags": "Nove oznake:",
+       "tags-edit-reason": "Razlog:",
        "comparepages": "Upoređivanje stranica",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "htmlform-cloner-create": "Dodaj još",
        "htmlform-cloner-delete": "Ukloni",
        "htmlform-cloner-required": "Bar jedna vrednost je potrebna.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ne postoji.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nije ispravno korisničko ime.",
        "sqlite-has-fts": "$1 s podrškom pretrage celog teksta",
        "sqlite-no-fts": "$1 bez podrške pretrage celog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
        "logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
-       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
+       "logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja}} u dnevniku $3: $4",
        "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=jedne izmene|$5 izmene|$5 izmena}} na stranici $3: $4",
-       "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na $3",
+       "logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku $3",
        "logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
-       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja|$5 događaja}} u dnevniku na $3: $4",
+       "logentry-suppress-event": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|1=događaja|$5 događaja}} u dnevniku $3: $4",
        "logentry-suppress-revision": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmena}} na stranici $3: $4",
-       "logentry-suppress-event-legacy": "$1 је tajno {{GENDER:$2|promenio|promenila}} vidljivost događaj u dnevniku na $3",
+       "logentry-suppress-event-legacy": "$1 је tajno {{GENDER:$2|promenio|promenila}} vidljivost događaj u dnevniku $3",
        "logentry-suppress-revision-legacy": "$1 je tajno {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
        "revdelete-content-hid": "sadržaj je sakriven",
        "revdelete-summary-hid": "opis izmene je sakriven",
        "logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3",
        "logentry-upload-overwrite": "$1 je {{GENDER:$2|poslao|poslala}} novu verziju $3",
        "logentry-upload-revert": "$1 je {{GENDER:$2|poslao|poslala}} $3",
-       "log-name-managetags": "Dnevnik oznaka",
-       "log-description-managetags": "Ovaj dnevnik sadrži spisak izmena u vezi [[Special:Tags|oznaka]]. Dnevnik sadrži samo radnje izvršene od strane administratora; unosi za oznake napravljene ili obrisane od strane viki softvera se ne nalaze u ovom dnevniku.",
+       "log-name-managetags": "Dnevnik uređivanja oznaka",
+       "log-description-managetags": "Ovaj dnevnik sadrži spisak izmena u vezi [[Special:Tags|oznaka]]. Dnevnik sadrži samo radnje izvršene od strane administratora, unosi za oznake napravljene ili obrisane od strane viki softvera se ne nalaze u ovom dnevniku.",
        "logentry-managetags-create": "$1 je {{GENDER:$2|napravio|napravila}} oznaku „$4“",
        "logentry-managetags-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} oznaku „$4“ (uklonjena je iz $5 {{PLURAL:$5|izmene ili dnevnika|izmena i/ili dnevnika}})",
        "logentry-managetags-activate": "$1 je {{GENDER:$2|aktivirao|aktivirala}} oznaku „$4“ za upotrebu od strane korisnika i botova",
        "special-characters-group-telugu": "telugu",
        "special-characters-group-sinhala": "sinhalski",
        "special-characters-group-gujarati": "Gudžarati",
+       "special-characters-group-devanagari": "devanagari",
        "special-characters-group-thai": "tajlandski",
        "special-characters-group-lao": "laoski",
-       "special-characters-group-khmer": "kmerski"
+       "special-characters-group-khmer": "kmerski",
+       "mw-widgets-dateinput-placeholder-day": "GGGG-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
+       "mw-widgets-titleinput-description-new-page": "stranica još uvek ne postoji",
+       "mw-widgets-titleinput-description-redirect": "preusmerava na $1"
 }
index 10024ac..7935127 100644 (file)
        "resetpass-wrong-oldpass": "Uungultich tiedelk of aktuell Paaswoud.\nMuugelkerwiese hääst du dien Paaswoud al mäd Ärfoulch annerd of n näi tiedelk Paaswoud fräiged.",
        "resetpass-temp-password": "Tiedelk Paaswoud:",
        "passwordreset": "Paaswoud touräächsätte",
-       "passwordreset-legend": "Paaswoud touräächsätte",
        "passwordreset-disabled": "Dät Touräächsätten fon Paaswoude wuud in dissen Wiki deaktivierd.",
        "passwordreset-username": "Benutsernoome:",
        "passwordreset-domain": "Domain:",
        "unusedtemplateswlh": "Uur Ferbiendengen",
        "randompage": "Toufällige Siede",
        "randompage-nopages": "Der sunt neen Sieden in {{PLURAL:$2|dän foulgjende Noomensruum|do foulgjende Noomensruume}} äntheelden: „$1“",
+       "randomincategory-submit": "OK",
        "randomredirect": "Toufällige Fäärelaitenge",
        "randomredirect-nopages": "In dän Noomensruum \"$1\" sunt neen Fääreleedengen deer.",
        "statistics": "Statistik",
        "nlinks": "{{PLURAL:$1|1 Ferbiendenge|$1 Ferbiendengen}}",
        "nmembers": "{{PLURAL:$1|1 Iendraach|$1 Iendraage}}",
        "nrevisions": "{{PLURAL:$1|1 Beoarbaideng|$1 Beoarbaidengen}}",
-       "nviews": "{{PLURAL:$1|1 Oufroage|$1 Oufroagen}}",
        "nimagelinks": "Ferwoand ap $1 {{PLURAL:$1|Siede|Sieden}}",
        "ntransclusions": "ferwoand ap $1 {{PLURAL:$1|Siede|Sieden}}",
        "specialpage-empty": "Ju Siede änthaalt aktuell neen Iendraage.",
        "linksearch-pat": "Säikmuster:",
        "linksearch-ns": "Noomensruum:",
        "linksearch-ok": "Säike (012)",
-       "linksearch-text": "Disse Spezioalsiede moaket ju Säike muugelke ätter Sieden, in do bestimde Webferbiendengen äntheelden sunt. Deerbie konnen Ploatshooldere as biespilswiese <code>*.biespiell.de</code> benutsed wäide. Der mout ap minste een Top-Level-Domai, t.B. „*.org“. anroat wäide. <br />Unnerstutsede Protokolle: <code>$1</code> (Disse jädden nit bie ju Säikanfroage anreeke.)",
+       "linksearch-text": "Disse Spezioalsiede moaket ju Säike muugelke ätter Sieden, in do bestimde Webferbiendengen äntheelden sunt. Deerbie konnen Ploatshooldere as biespilswiese <code>*.biespiell.de</code> benutsed wäide. Der mout ap minste een Top-Level-Domai, t.B. „*.org“. anroat wäide. <br />Unnerstutsede Protokolle: $1 (Disse jädden nit bie ju Säikanfroage anreeke.)",
        "linksearch-line": "$1 is ferlinked fon $2",
        "linksearch-error": "Wildcards konnen bloot an dän Ounfang fon ju URL ferwoand wäide.",
        "listusersfrom": "Wies Benutsere fon:",
index 94ca2f1..94d56da 100644 (file)
        "passwordreset": "Setél ulang sandi",
        "passwordreset-text-one": "Eusian formulir ieu pikeun ngirimkeun kecap sandi saheulaanan kana surélék.",
        "passwordreset-text-many": "{{PLURAL:$1|Eusian salassahiji lapang pikeun nampa kecap sandi saheulaanan ngaliwatan ratron.}}",
-       "passwordreset-legend": "Setél ulang sandi",
        "passwordreset-disabled": "Dina ieu wiki, sandi teu bisa disetél ulang.",
        "passwordreset-emaildisabled": "Fitur surélék ditumpurkeun di ieu wiki.",
        "passwordreset-username": "Sandiasma:",
        "resettokens": "Rését token",
        "resettokens-text": "Anjeun bisa ngarését token sangkan bisa muka sababaraha data-data pribadi anu tumali jeung akun anjeun di dieu.\n\nAnjeun kudu ngarését lamun kungsi teu kahaja ngabéjaan anu séjén atawa lamun aya anu nyusup kana akun anjeun.",
        "resettokens-no-tokens": "Taya token pikeun dirését.",
-       "resettokens-legend": "Rését token",
        "resettokens-tokens": "Token:",
        "resettokens-token-label": "$1 (ajén ayeuna: $2)",
        "resettokens-watchlist-token": "Token pikeun asupan raramat (Atom/RSS) [[Special:Watchlist|parobahan kana kaca-kaca anu diponcorong]]",
        "nmembers": "$1 {{PLURAL:$1|kontributor|kontributor}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|révisi|révisi}}",
-       "nviews": "$1 {{PLURAL:$1|témbongan|témbongan}}",
        "nimagelinks": "Dipaké di $1 {{PLURAL:$1|kaca|kaca}}",
        "ntransclusions": "dipaké di $1 {{PLURAL:$1|kaca|kaca}}",
        "specialpage-empty": "Kaca ieu kosong.",
        "linksearch-pat": "Pola sungsi:",
        "linksearch-ns": "Spasi ngaran:",
        "linksearch-ok": "Sungsi",
-       "linksearch-text": "''Wildcard'' sarupaning \"*.wikipedia.org\" bisa dipaké.<br />Protokol nu dirojong: <code>$1</code>",
+       "linksearch-text": "''Wildcard'' sarupaning \"*.wikipedia.org\" bisa dipaké.<br />Protokol nu dirojong: $1",
        "linksearch-line": "$1 ditumbu ti $2",
        "linksearch-error": "''Wildcard'' ngan bisa némbongan dina awal ngaran indung (''host'').",
        "listusersfrom": "Témbongkeun kontributor dimimitian ku:",
index bf11951..9fc552e 100644 (file)
        "actionthrottled": "Åtgärden stoppades",
        "actionthrottledtext": "Som skydd mot spam finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
        "protectedpagetext": "Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.",
-       "viewsourcetext": "Du kan se och kopiera denna sidas källtext:",
-       "viewyourtext": "Du kan se och kopiera källan för '''dina redigeringar''' av denna sida:",
+       "viewsourcetext": "Du kan se och kopiera denna sidas källtext.",
+       "viewyourtext": "Du kan se och kopiera källan för <strong>dina redigeringar</strong> av denna sida.",
        "protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "editinginterface": "<strong>Varning:</strong> Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka användargränssnittets utseende för andra användare på denna wiki.",
        "translateinterface": "För att lägga till eller ändra översättningar för alla wikis, använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
-       "cascadeprotected": "Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med \"kaskaderande skydd\":\n$2",
+       "cascadeprotected": "Den här sidan har skyddats från redigering eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som skrivskyddats med \"kaskaderande\"-inställningen aktiverad:\n$2",
        "namespaceprotected": "Du har inte behörighet att redigera sidor i namnrymden '''$1'''.",
        "customcssprotected": "Du har inte behörighet att redigera denna CSS-sida eftersom den innehåller en annan användares personliga inställningar.",
        "customjsprotected": "Du har inte behörighet att redigera denna JavaScript-sida eftersom den innehåller en annan användares personliga inställningar.",
        "createacct-benefit-body2": "{{PLURAL:$1|sida|sidor}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nylig|nyliga}} bidragsgivare",
        "badretype": "De lösenord du uppgett överensstämmer inte med varandra.",
+       "usernameinprogress": "Kontoskapandet för detta användarnamn är redan i full gång.\nVänligen vänta.",
        "userexists": "Det valda användarnamnet används redan.\nVar god välj ett annat namn.",
        "loginerror": "Inloggningsproblem",
        "createacct-error": "Fel när konto skulle skapas",
        "readonlywarning": "'''VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara dina ändringar just nu.\nDet kan vara klokt att kopiera texten till ett textdokument som sparas på din dator tills vidare.'''\n\nAdministratören som låste databasen gav följande förklaring: $1",
        "protectedpagewarning": "'''Varning: Den här sidan har låsts så att bara användare med administratörsrättigheter kan redigera den.'''\nDen senaste loggposten tillhandahålls nedan som referens:",
        "semiprotectedpagewarning": "'''Observera:''' Denna sida har låsts så att endast registrerade användare kan redigera den.\nDen senaste loggposten tillhandahålls nedan som referens:",
-       "cascadeprotectedwarning": "'''Varning:''' Den här sidan är låst så att bara användare med administratörsrättigheter kan redigera den, eftersom den är inkluderad på följande {{PLURAL:$1|sida|sidor}} som skyddats med kaskaderande skrivskydd:",
+       "cascadeprotectedwarning": "'''Varning:''' Den här sidan har låsts så att bara användare med administratörsrättigheter kan redigera den, eftersom den är inkluderad på följande {{PLURAL:$1|sida|sidor}} som skyddats med kaskaderande skrivskydd:",
        "titleprotectedwarning": "'''Varning: Denna sida har låsts så att [[Special:ListGroupRights|specifika rättigheter]] krävs för att skapa den.'''\nDen senaste loggposten tillhandahålls nedan som referens:",
        "templatesused": "{{PLURAL:$1|Mall|Mallar}} som används på den här sidan:",
        "templatesusedpreview": "{{PLURAL:$1|Mall|Mallar}} som används i denna förhandsgranskning:",
        "search-category": "(kategorin $1)",
        "search-file-match": "(överensstämmer filens innehåll)",
        "search-suggest": "Menade du: $1",
+       "search-rewritten": "Visar resultat för $1. Sök istället efter $2.",
        "search-interwiki-caption": "Systerprojekt",
        "search-interwiki-default": "Resultat från $1:",
        "search-interwiki-more": "(mer)",
        "rows": "Rader:",
        "columns": "Kolumner:",
        "searchresultshead": "Sökning",
-       "stub-threshold": "Gräns för <a href=\"#\" class=\"stub\">stubblänk</a>-formatering (byte):",
+       "stub-threshold": "Gräns för formatering av stubblänk ($1):",
+       "stub-threshold-sample-link": "exempel",
        "stub-threshold-disabled": "Avaktiverat",
        "recentchangesdays": "Antal dygn som skall visas i \"senaste ändringarna\":",
        "recentchangesdays-max": "Maximalt $1 {{PLURAL:$1|dygn}}",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 bevakande {{PLURAL:$1|användare|användare}}]",
-       "rc_categories": "Begränsa till följande kategorier (separera med \"|\")",
-       "rc_categories_any": "Vilken som helst",
+       "rc_categories": "Begränsa till följande kategorier (separera med \"|\"):",
+       "rc_categories_any": "Någon av de valda",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte}} efter ändring",
        "newsectionsummary": "/* $1 */ nytt avsnitt",
        "rc-enhanced-expand": "Visa detaljer",
        "uploaddisabledtext": "Uppladdning av filer är avstängd.",
        "php-uploaddisabledtext": "Filuppladdningar i PHP är avaktiverade. \nKolla inställningarna för file_uploads.",
        "uploadscripted": "Denna fil innehåller HTML eller script som felaktigt kan komma att tolkas av webbläsare.",
+       "upload-scripted-pi-callback": "Kan inte ladda upp en fil som innehåller instruktioner för behandling av XML-stylesheet.",
        "uploaded-script-svg": "Hittade skriptelementet \"$1\" i den uppladdade SVG-filen.",
        "uploaded-hostile-svg": "Hittade osäker CSS i den uppladdade filens stilelement.",
+       "uploaded-event-handler-on-svg": "Att ange event-handler-attribut <code>$1=\"$2\"</code> är inte tillåtet i SVG-filer.",
+       "uploaded-href-attribute-svg": "href-attribut <code>&lt;$1 $2=\"$3\"&gt;</code> med icke-lokala mål (t.ex. http://, javascript:, etc) tillåts inte i SVG filer.",
        "uploaded-href-unsafe-target-svg": "Hittade href till ett osäkert mål <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-animate-svg": "Hittades taggen \"animate\" som kan ändra href med hjälp av attributen \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
+       "uploaded-setting-event-handler-svg": "Att ange event-handler-attribut är blockerat. Hittade <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-setting-href-svg": "Användning av taggen \"set\" för att lägga till attributen \"href\" till överordnade element blockeras.",
+       "uploaded-wrong-setting-svg": "Användning av \"set\"-taggen för att lägga till ett remote-/data-/skriptmål till något attribut är blokerat. Hittade <code>&lt;set to=\"$1\"&gt;</code> i den uppladdade SVG-filen.",
+       "uploaded-setting-handler-svg": "SVG som anger \"handler\"-attributet med remote/data/skript är blockerat. Hittade <code>$1=\"$2\"</code> i den uppladdade SVG-filen.",
+       "uploaded-remote-url-svg": "SVG som anger style-attributet med en fjärr-URL är blockerat. Hittade <code>$1=\"$2\"</code> i den uppladdade SVG-filen.",
        "uploaded-image-filter-svg": "Hittade bildfilter med URL: <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploadscriptednamespace": "Denna SVG-fil innehåller den ogiltiga namnrymden \"$1\".",
        "uploadinvalidxml": "XML-koden i den uppladdade filen kunde inte tolkas.",
        "upload-too-many-redirects": "URL-en innehöll för många omdirigeringar",
        "upload-http-error": "Ett HTTP-fel uppstod: $1",
        "upload-copy-upload-invalid-domain": "Uppladdning av kopior är inte tillgängligt från denna domän.",
+       "upload-dialog-title": "Ladda upp fil",
+       "upload-dialog-error": "Ett fel uppstod",
+       "upload-dialog-warning": "En varning uppstod",
+       "upload-dialog-button-cancel": "Avbryt",
+       "upload-dialog-button-done": "Klar",
+       "upload-dialog-button-save": "Spara",
+       "upload-dialog-button-upload": "Ladda upp",
+       "upload-dialog-label-select-file": "Välj fil",
+       "upload-dialog-label-infoform-title": "Detaljer",
+       "upload-dialog-label-infoform-name": "Namn",
+       "upload-dialog-label-infoform-description": "Beskrivning",
+       "upload-dialog-label-usage-title": "Användning",
+       "upload-dialog-label-usage-filename": "Filnamn",
        "backend-fail-stream": "Kunde inte strömma filen $1.",
        "backend-fail-backup": "Kunde inte säkerhetskopiera filen ''$1''.",
        "backend-fail-notexists": "Filen $1 finns inte.",
        "listusers-creationsort": "Sortera efter datum skapat",
        "listusers-desc": "Sortera i fallande ordning",
        "usereditcount": "$1 {{PLURAL:$1|redigering|redigeringar}}",
-       "usercreated": "{{GENDER:$3|Skapade}} den $1 $2",
+       "usercreated": "{{GENDER:$3|Skapad}} den $1 $2",
        "newpages": "Nya sidor",
        "newpages-username": "Användare:",
        "ancientpages": "Äldsta sidorna",
        "booksources-text": "Nedan följer en lista över länkar till webbplatser som säljer nya och begagnade böcker, och som kanske har ytterligare information om de böcker du söker.",
        "booksources-invalid-isbn": "Det angivna ISBN-numret verkar inte vara giltigt. Kontrollera källan för eventuella fel.",
        "specialloguserlabel": "Utförare:",
-       "speciallogtitlelabel": "Mål (titel eller användare):",
+       "speciallogtitlelabel": "Mål (titel eller {{ns:user}}:användarnamn för användare):",
        "log": "Loggar",
        "all-logs-page": "Alla publika loggar",
        "alllogstext": "Kombinerad visning av alla tillgängliga loggar för {{SITENAME}}.\nDu kan avgränsa sökningen och få färre träffar genom att ange typ av logg, användarnamn (skiftlägeskänsligt), eller berörd sida (också skiftlägeskänsligt).",
        "linksearch-pat": "Sökmönster:",
        "linksearch-ns": "Namnrymd:",
        "linksearch-ok": "Sök",
-       "linksearch-text": "Jokertecken (wildcards) som t.ex. \"*.wikipedia.org\" kan användas.\nDet krävs åtminstone en toppdomän, t.ex. \"*.org\".<br />\n{{PLURAL:$2|Protokollet|Protokollen}} som stöds: <code>$1</code> (sätts till http:// om inget protokoll anges).",
+       "linksearch-text": "Jokertecken (wildcards) som t.ex. \"*.wikipedia.org\" kan användas.\nDet krävs åtminstone en toppdomän, t.ex. \"*.org\".<br />\n{{PLURAL:$2|Protokollet|Protokollen}} som stöds: $1 (sätts till http:// om inget protokoll anges).",
        "linksearch-line": "$1 länkas från $2",
        "linksearch-error": "Jokertecken kan bara användas i början av domännamnet.",
        "listusersfrom": "Visa användare från och med:",
        "emailuser": "Skicka e-post till den här användaren",
        "emailuser-title-target": "Skicka e-post till denna {{GENDER:$1|användare}}",
        "emailuser-title-notarget": "E-postanvändare",
-       "emailpage": "Skicka e-post till användare",
        "emailpagetext": "Du kan använda formuläret nedan för att skicka e-post till den här {{GENDER:$1|användaren}}.\nDen e-postadress du har angivit i [[Special:Preferences|dina användarinställningar]] kommer att visas som \"Från\"-adress i meddelandet, så att mottagaren har möjlighet att svara direkt till dig.",
        "defemailsubject": "{{SITENAME}} e-post från användare \"$1\"",
        "usermaildisabled": "Användar-e-post avaktiverat",
        "emailccsubject": "Kopia av ditt meddelande till $1: $2",
        "emailsent": "E-post har nu skickats",
        "emailsenttext": "Ditt e-postmeddelande har skickats",
-       "emailuserfooter": "Detta e-postmeddelande skickades av $1 till $2 med funktionen \"{{int:emailpage}}\" på {{SITENAME}}.",
+       "emailuserfooter": "Detta e-postmeddelande skickades av $1 till $2 med funktionen \"{{int:emailuser}}\" på {{SITENAME}}.",
        "usermessage-summary": "Lämnar systemmeddelande.",
        "usermessage-editor": "Systemmeddelare",
        "watchlist": "Bevakningslista",
        "watchlistanontext": "Du måste logga in för att se eller redigera din bevakningslista.",
        "watchnologin": "Inte inloggad",
        "addwatch": "Lägg till i bevakningslistan",
-       "addedwatchtext": "Sidan \"[[:$1]]\" har lagts till på din [[Special:Watchlist|bevakningslista]].\nFramtida ändringar av den här sidan och dess diskussionssida kommer att listas där.",
+       "addedwatchtext": "\"[[:$1]]\" har lagts till i din [[Special:Watchlist|bevakningslista]].",
        "addedwatchtext-short": "Sidan \"$1\" har lagts till i din bevakningslista.",
        "removewatch": "Ta bort från bevakningslistan",
-       "removedwatchtext": "Sidan \"[[:$1]]\" har tagits bort från [[Special:Watchlist|din bevakningslista]].",
+       "removedwatchtext": "\"[[:$1]]\" och dess diskussionssida har tagits bort från [[Special:Watchlist|din bevakningslista]].",
        "removedwatchtext-short": "Sidan \"$1\" har tagits bort från din bevakningslista.",
        "watch": "Bevaka",
        "watchthispage": "Bevaka denna sida",
        "changecontentmodel-success-title": "Innehållsmodellen ändrades",
        "changecontentmodel-success-text": "Innehållstypen för [[:$1]] har ändrats.",
        "changecontentmodel-cannot-convert": "Innehållet på [[:$1]] kan inte konverteras till typen $2.",
-       "changecontentmodel-title-cantexist": "Det går inte att ha en sida på $1.",
        "changecontentmodel-nodirectediting": "Innehållsmodellen $1 stöder inte direkt redigering",
        "log-name-contentmodel": "Ändringslogg för innehållsmodellen",
        "log-description-contentmodel": "Händelser som är relaterade till en sidas innehållsmodeller",
        "protect-locked-blocked": "Du kan inte ändra sidors skrivskydd medan du är blockerad.\nHär kan du se gällande skrivskyddsinställninger för sidan '''$1''':",
        "protect-locked-dblock": "Skrivskydd kan inte ändras då databasen är låst.\nNuvarande skrivskyddsinställning för sidan '''$1''' är:",
        "protect-locked-access": "Ditt konto har inte behörighet att ändra skrivskydd på sidor.\nNuvarande skrivskyddsinställning för sidan '''$1''' är:",
-       "protect-cascadeon": "Den här sidan är skrivskyddad eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som har ett kaskaderande skydd.\nÄndringar i skyddet för den här sidan kommer inte påverka det kaskaderande skyddet.",
+       "protect-cascadeon": "Den här sidan är skrivskyddad eftersom den inkluderas på följande {{PLURAL:$1|sida|sidor}} som har ett kaskaderande skydd aktiverat.\nÄndringar i skyddet för den här sidan kommer inte påverka det kaskaderande skyddet.",
        "protect-default": "Tillåt alla användare",
        "protect-fallback": "Kräv \"$1\"-behörighet",
        "protect-level-autoconfirmed": "Blockera nya och oregistrerade användare",
        "undeletepagetext": "Följande {{PLURAL:$1|sida har blivit raderad|$1 sidor har blivit raderade}} men finns fortfarande i arkivet och kan återställas.\nArkivet kan ibland rensas ut.",
        "undelete-fieldset-title": "Återställ sidversioner",
        "undeleteextrahelp": "För att återställa sidans hela historik, lämna alla rutor oifyllda och klicka på '''''{{int:undeletebtn}}'''''.\nFör att göra en selektiv återställning, kryssa i de rutor som hör till de versioner som ska återställas, och klicka på '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|version|versioner}} arkiverade",
+       "undeleterevisions": "$1 {{PLURAL:$1|version|versioner}} raderade",
        "undeletehistory": "Om du återställer sidan kommer alla tidigare versioner att återfinnas i versionshistoriken.\nOm en ny sida med samma namn har skapats sedan sidan raderades, kommer den återskapade historiken automatiskt att återfinnas i den äldre historiken.",
        "undeleterevdel": "Återställningen kan inte utföras om den resulterar i att den senaste versionen är delvis borttagen.\nI sådana fall måste du se till att den senaste raderade versionen inte är ikryssad, eller att den inte är dold.",
        "undeletehistorynoadmin": "Den här sidan har blivit raderad. Anledningen till detta anges i sammanfattningen nedan, tillsammans med uppgifter om de användare som redigerat sidan innan den raderades. Enbart administratörerna har tillgång till den raderade texten.",
        "tooltip-ca-nstab-main": "Visa innehållssidan",
        "tooltip-ca-nstab-user": "Visa användarsidan",
        "tooltip-ca-nstab-media": "Visa mediesidan",
-       "tooltip-ca-nstab-special": "Detta är en specialsida; du kan inte redigera själva sidan",
+       "tooltip-ca-nstab-special": "Detta är en specialsida och kan inte redigeras",
        "tooltip-ca-nstab-project": "Visa projektsidan",
        "tooltip-ca-nstab-image": "Visa filsidan",
        "tooltip-ca-nstab-mediawiki": "Visa systemmeddelandet",
        "spam_reverting": "Återställer till den senaste versionen som inte innehåller länkar till $1",
        "spam_blanking": "Alla versioner innehöll en länk till $1, blankar",
        "spam_deleting": "Alla ändringar innehöll länkar till $1, raderar",
-       "simpleantispam-label": "Anti-spamkontroll.\nFyll '''INTE''' i den här!",
+       "simpleantispam-label": "Anti-spamkontroll.\nFyll <strong>INTE</strong> i den här!",
        "pageinfo-title": "Information om \"$1\"",
        "pageinfo-not-current": "Informationen kan endast visas för den aktuella versionen.",
        "pageinfo-header-basic": "Grundläggande information",
        "pageinfo-robot-index": "Tillåten",
        "pageinfo-robot-noindex": "Inte tillåten",
        "pageinfo-watchers": "Antal användare som bevakar sidan",
+       "pageinfo-visiting-watchers": "Antalet sidbevakare som har besökt senaste ändringar",
        "pageinfo-few-watchers": "Färre än $1 {{PLURAL:$1|bevakare}}",
+       "pageinfo-few-visiting-watchers": "Det kan finnas någon bevakande användare som granskar nyliga redigeringar",
        "pageinfo-redirects-name": "Antal omdirigeringar till denna sida",
        "pageinfo-subpages-name": "Undersidor till denna sida",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringar}}; $3 {{PLURAL:$3|icke-omdirigering|icke-omdirigeringar}})",
        "htmlform-cloner-create": "Lägg till mer",
        "htmlform-cloner-delete": "Ta bort",
        "htmlform-cloner-required": "Det krävs minst ett värde.",
+       "htmlform-title-badnamespace": "[[:$1]] är inte i \"{{ns:$2}}\"-namnrymden.",
+       "htmlform-title-not-creatable": "\"$1\" är inte en sidtitel som kan skapas",
+       "htmlform-title-not-exists": "[[:$1]] finns inte.",
+       "htmlform-user-not-exists": "<strong>$1</strong> finns inte.",
+       "htmlform-user-not-valid": "<strong>$1</strong> är inte ett giltigt användarnamn.",
        "sqlite-has-fts": "$1 med stöd för fulltextsökning",
        "sqlite-no-fts": "$1 utan stöd för fulltextsökning",
        "logentry-delete-delete": "$1 {{GENDER:$2|raderade}} sidan $3",
        "logentry-newusers-create2": "Användarkonto $3 har {{GENDER:$2|skapats}} av $1",
        "logentry-newusers-byemail": "Användarkontot $3 har {{GENDER:$2|skapats}} av $1 och lösenordet skickades via e-post",
        "logentry-newusers-autocreate": "Användarkontot $1 {{GENDER:$2|skapades}} automatiskt",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|flyttade}} skyddsinställningarna från $4 till $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3 från $4 till $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5",
        "special-characters-title-endash": "tankstreck",
        "special-characters-title-emdash": "långt tankstreck",
        "special-characters-title-minus": "minustecken",
+       "mw-widgets-dateinput-no-date": "Inget valt datum",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "sidan existerar inte ännu",
        "mw-widgets-titleinput-description-redirect": "omdirigerar till $1"
 }
index fb258dc..b565ada 100644 (file)
        "passwordreset": "Seti upya neno la siri",
        "passwordreset-text-one": "Jaza fomu hii kupokea neno la siri la muda kupitia barua pepe.",
        "passwordreset-text-many": "{{PLURAL:$1|Jaza katika moja ya mashamba kupokea neno la siri la muda kupitia barua pepe.}}",
-       "passwordreset-legend": "Seti upya neno la siri",
        "passwordreset-disabled": "Kuweka neno la siri jipya kumeshitishwa katika wiki hii.",
        "passwordreset-emaildisabled": "Vipengee vya barua pepe vimelemazwa katika wiki hii.",
        "passwordreset-username": "Jina la mtumiaji:",
        "changeemail-throttled": "Umejaribu mara nyingi sana kuingia.\nTafadhali subiri $1 kabla ya kujaribu tena.",
        "resettokens": "Weka vibazi upya",
        "resettokens-no-tokens": "Hakuna vibazi vya kuseti upya.",
-       "resettokens-legend": "Weka vibazi upya",
        "resettokens-tokens": "Vibazi:",
        "resettokens-token-label": "$1 (current value: $2)",
        "resettokens-done": "Seti vibazi upya.",
        "randomincategory-nopages": "Hakuna kurasa katika [[:Category:$1|$1]] jamii.",
        "randomincategory-category": "Kundi:",
        "randomincategory-legend": "Ukurasa wa bahati katika jamii",
+       "randomincategory-submit": "Enda",
        "randomredirect": "Elekezo la bahati",
        "randomredirect-nopages": "Hakuna maelekezo katika eneo la wiki la \"$1\".",
        "statistics": "Takwimu",
        "nmembers": "{{PLURAL:$1|kitu|vitu}} $1",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|member|wanachama}}",
        "nrevisions": "{{PLURAL:$1|pitio|mapitio}} $1",
-       "nviews": "{{PLURAL:$1|mtazamaji|mitazamaji}} $1",
        "nimagelinks": "Inatumika katika {{PLURAL:$1|ukurasa moja tu|kurasa $1}}",
        "ntransclusions": "inatumika katika {{PLURAL:$1|ukurasa moja tu|kurasa $1}}",
        "specialpage-empty": "Hakuna matokeo katika taarifa hii.",
        "linksearch-pat": "Herufi zitakazotafutwa:",
        "linksearch-ns": "Eneo la wiki:",
        "linksearch-ok": "Tafuta",
-       "linksearch-text": "Alama maalumu za kutafuta kama vile \"*.wikipedia.org\" zinaweza kutumika.<br />\nInahitajika angalau kikoa cha kiwango cha juu, kwa mfano \"*.org\".<br />\nItifaki zinazoungwa mkono: <code>$1</code> (usiongeza hizi unapotafuta).",
+       "linksearch-text": "Alama maalumu za kutafuta kama vile \"*.wikipedia.org\" zinaweza kutumika.<br />\nInahitajika angalau kikoa cha kiwango cha juu, kwa mfano \"*.org\".<br />\nItifaki zinazoungwa mkono: $1 (usiongeza hizi unapotafuta).",
        "linksearch-line": "$2 umeungwa kutoka $1",
        "linksearch-error": "Alama maalumu zinaweza kuonekana mwanzoni mwa URL tu.",
        "listusersfrom": "Onyesha watumiaji kuanzia:",
index 881e620..0cffa90 100644 (file)
        "resetpass-temp-password": "Tymczasowe hasło:",
        "resetpass-abort-generic": "Půmjyńańe hasła uostoła zatrzimane bez rozszyrzyńe.",
        "passwordreset": "Wyczyść hasło",
-       "passwordreset-legend": "Wyczyść hasło",
        "passwordreset-disabled": "No tyj wiki zamkńynto resytowańy hasył.",
        "passwordreset-username": "Mjano używacza:",
        "passwordreset-domain": "Domyna:",
        "nlinks": "$1 {{PLURAL:$1|link|linki|linkůw}}",
        "nmembers": "$1 {{PLURAL:$1|elyment|elymenty|elymentůw}}",
        "nrevisions": "$1 {{PLURAL:$1|wersja|wersje|wersjůw}}",
-       "nviews": "filowano $1 {{PLURAL:$1|roz|rozůw}}",
        "specialpage-empty": "Ta zajta je pusto.",
        "lonelypages": "Poćepńynte zajty",
        "lonelypagestext": "Do zajtůw půńiżyj ńy adresuje żodno inkszo zajta we {{SITENAME}}.",
        "linksearch-pat": "Wzorzec sznupańo",
        "linksearch-ns": "Przestrzyń mjan",
        "linksearch-ok": "Šnupej",
-       "linksearch-text": "Idźe użyć symbola wjeloznacznygo „*”. Lů bajszpila „*.wikipedia.org” spowoduje sznupańy za wszyjstkimi linkůma kere prowadzům ku důmyńy „wikipedia.org” a jeij poddůmyn.<br />\nUobsůgiwane protokoły: <code>$1</code>",
+       "linksearch-text": "Idźe użyć symbola wjeloznacznygo „*”. Lů bajszpila „*.wikipedia.org” spowoduje sznupańy za wszyjstkimi linkůma kere prowadzům ku důmyńy „wikipedia.org” a jeij poddůmyn.<br />\nUobsůgiwane protokoły: $1",
        "linksearch-line": "$1 link na zajće $2",
        "linksearch-error": "Symbola wjeloznacznygo idźe użyć yno na anfangu mjana hosta.",
        "listusersfrom": "Pokaž užytkowńikůw začynojůnc uod:",
index 093635c..be1612f 100644 (file)
@@ -39,7 +39,8 @@
                        "Macofe",
                        "AntanO",
                        "கலைவாணன்",
-                       "Mohammed Ammar"
+                       "Mohammed Ammar",
+                       "Shrikarsan"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "recentchanges-legend-heading": "'''குறியீட்டு விளக்கம்:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|புதிய பக்கங்கள் பட்டியலையும்]] காணவும்)",
        "rcnotefrom": "கீழே காணப்படுவது <strong>$3, $4</strong> இலிருந்து செய்யப்பட்ட (<strong>$1</strong> வரைக் காட்டப்பட்டுள்ளது) {{PLURAL:$5|மாற்றமாகும்.|மாற்றங்களாகும்.}}",
-       "rclistfrom": "$3 $2 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
+       "rclistfrom": "$2, $3 தொடக்கம் செய்யப்பட்ட புதிய மாற்றங்களைக் காட்டவும்",
        "rcshowhideminor": "சிறிய தொகுப்புகளை $1",
        "rcshowhideminor-show": "காட்டு",
        "rcshowhideminor-hide": "மறை",
        "emailuser": "இப் பயனருக்கு மின்னஞ்சல் செய்",
        "emailuser-title-target": "{{GENDER:$1|user}} என்ற பயனருக்கு மின்னஞ்சல் செய்",
        "emailuser-title-notarget": "பயனருக்கு மின்னஞ்சல் செய்",
-       "emailpage": "மின்னஞ்சல் பயனர்",
        "emailpagetext": "நீங்கள் கீழ்வரும் படிவத்தை உபயோகித்து {{GENDER:$1|பயனருக்கு}} மின்னஞ்சல் செய்யலாம்.\n[[Special:Preferences|என் விருப்பத்தேர்வுகளில்]] நீங்கள் கொடுத்துள்ள மின்னஞ்சல் முகவரி மின்னஞ்சலின் \"From\" முகவரியாகக் காட்சி தரும், இதனால் பெறுநர் உங்களுக்கு நேரடியாக பதில் எழுத முடியும்.",
        "defemailsubject": "{{SITENAME}} மின்னஞ்சல் பயனர்  \"$1\"-இடமிருந்து.",
        "usermaildisabled": "பயனரின் மின்னஞ்சல் செயலிழக்கச் செய்யப்பட்டுள்ளது",
        "emailccsubject": "$1 பயனருக்கான உங்கள் மின்னஞ்சலின் நகல்: $2",
        "emailsent": "மின்னஞ்சல் அனுப்பப்பட்டது",
        "emailsenttext": "உங்கள் மின்னஞ்சல் செய்தி அனுப்பப்பட்டது.",
-       "emailuserfooter": "இந்த மின்னஞ்சல் $1ஆல்  $2க்கு   \"{{int:emailpage}}\" செயல்பாடு   மூலம் {{SITENAME}} லிருந்து அனுப்பப்பட்டது.",
+       "emailuserfooter": "இந்த மின்னஞ்சல் $1ஆல்  $2க்கு   \"{{int:emailuser}}\" செயல்பாடு   மூலம் {{SITENAME}} லிருந்து அனுப்பப்பட்டது.",
        "usermessage-summary": "அமைப்பின் தகவலை விட்டுவிடுகிறது.",
        "usermessage-editor": "அமைப்பு தூதன்(messenger).",
        "watchlist": "கவனிப்புப் பட்டியல்",
        "tooltip-pt-logout": "விடுபதிகை",
        "tooltip-pt-createaccount": "நீங்கள் ஒரு பயனர் கணக்கைத் துவங்கி உள்புக வரவேற்கப்படுகிறீர்கள்; எனினும் இது கட்டாயம் அல்ல.",
        "tooltip-ca-talk": "உள்ளடக்கப் பக்கம் தொடர்பான உரையாடல் பக்கம்",
-       "tooltip-ca-edit": "நà¯\80à®\99à¯\8dà®\95ளà¯\8d à®\87பà¯\8dபà®\95à¯\8dà®\95தà¯\8dதà¯\88தà¯\8d à®¤à¯\8aà®\95à¯\81à®\95à¯\8dà®\95 à®®à¯\81à®\9fியà¯\81à®®à¯\8d. \"à®®à¯\81னà¯\8dதà¯\8bà®±à¯\8dறமà¯\8d à®\95ாà®\9fà¯\8dà®\9fà¯\81\" à®ªà¯\8aதà¯\8dதானà¯\88பà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dதிய à®ªà®¿à®©à¯\8dனரà¯\8d à®\89à®\99à¯\8dà®\95ளà¯\8d à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளà¯\88 à®\9aà¯\87மிà®\95à¯\8dà®\95வà¯\81à®®à¯\8d.",
+       "tooltip-ca-edit": "à®\87பà¯\8dபà®\95à¯\8dà®\95தà¯\8dதà¯\88தà¯\8d à®¤à¯\8aà®\95à¯\81",
        "tooltip-ca-addsection": "புதிய பகுதியைத் தொடங்கு",
        "tooltip-ca-viewsource": "இப்பக்கம் காக்கப்பட்டுள்ளது. நீங்கள் இதன் மூலத்தைப் பார்க்கலாம்.",
        "tooltip-ca-history": "இப்பக்கத்தின் பழைய பதிப்புகள்.",
index 397188b..eedd87b 100644 (file)
        "linksearch-pat": "వెతకాల్సిన నమూనా:",
        "linksearch-ns": "పేరుబరి:",
        "linksearch-ok": "వెతుకు",
-       "linksearch-text": "\"*.wikipedia.org\" వంటి వైల్డ్ కార్డులు వాడవచ్చు. కనీసం ఒక్కటైనా టాప్ లెవెల్ డొమెయిన్ ఉండాలి. ఉదా: \"*.org\".<br />ఉపయోగించుకోగల {{PLURAL:$2|ప్రోటోకోల్|ప్రోటోకోళ్లు}}: <code>$1</code> (ఏ ప్రోటోకోలునూ ఇవ్వకపోతే, http:// ను వాడబడుతుంది)",
+       "linksearch-text": "\"*.wikipedia.org\" వంటి వైల్డ్ కార్డులు వాడవచ్చు. కనీసం ఒక్కటైనా టాప్ లెవెల్ డొమెయిన్ ఉండాలి. ఉదా: \"*.org\".<br />ఉపయోగించుకోగల {{PLURAL:$2|ప్రోటోకోల్|ప్రోటోకోళ్లు}}: $1 (ఏ ప్రోటోకోలునూ ఇవ్వకపోతే, http:// ను వాడబడుతుంది)",
        "linksearch-line": "$2 నుండి $1కి లింకు ఉంది",
        "linksearch-error": "హోస్ట్‌నేముకు ముందు మాత్రమే వైల్డ్ కార్డులు వాడవచ్చు.",
        "listusersfrom": "వాడుకరులను ఇక్కడ నుండి చూపించు:",
index e346734..fc2bdc3 100644 (file)
        "resetpass-wrong-oldpass": "Гузарвожаи мувақат ё охир номӯътабар.\nМумкин аст, ки шумо аллакай гузарвожаатонро бо муваффақият тағйир дода бошед ё дархости як гузарвожаи мувақатӣ карда бошед.",
        "resetpass-temp-password": "Гузарвожаи муваққатӣ:",
        "passwordreset": "Тағйири гузарвожа",
-       "passwordreset-legend": "Тағйири гузарвожа",
        "passwordreset-username": "Номи корбарӣ:",
        "passwordreset-domain": "Домана:",
        "passwordreset-email": "Нишонаи почтаи электронӣ:",
        "changeemail-password": "Гузарвожаи Шумо дар {{SITENAME}}:",
        "changeemail-submit": "Ивази email",
        "resettokens-no-tokens": "Ягон нишона барои танзими муҷадад вуҷуд надорад.",
-       "resettokens-legend": "Танзими муҷадади нишона",
        "resettokens-tokens": "Нишонаҳо:",
        "resettokens-done": "Нишонаҳо тазим шуданд.",
        "resettokens-resetbutton": "Нишонаҳои интихобшуда танзим шаванд",
        "randompage": "Саҳифаи тасодуфӣ",
        "randompage-nopages": "Ҳеҷ саҳифае дар ин фазои ном мавҷуд нест.",
        "randomincategory": "Саҳифаи тасодуфӣ дар гурӯҳ",
+       "randomincategory-submit": "Бирав",
        "randomredirect": "Масири тасодуфӣ",
        "randomredirect-nopages": "Ҳеҷ саҳифаи тағйири масире дар ин фазои ном мавҷуд нест.",
        "statistics": "Омор\\Статистика",
        "nlinks": "$1 {{PLURAL:$1|пайванд|пайвандҳо}}",
        "nmembers": "$1 {{PLURAL:$1|узв}}",
        "nrevisions": "$1 {{PLURAL:$1|вироиш|вироиш}}",
-       "nviews": "$1 {{PLURAL:$1|намоиш|намоишҳо}}",
        "specialpage-empty": "Барои ин ҳисобот натиҷае вуҷуд надорад.",
        "lonelypages": "Саҳифаҳои ятим",
        "lonelypagestext": "Ба саҳифаҳои зерин дар дигар саҳифаи {{SITENAME}} пайванд дода нашудааст.",
        "linksearch-pat": "Ҷустуҷӯи нақш:",
        "linksearch-ns": "Фазоином:",
        "linksearch-ok": "Ҷустуҷӯ",
-       "linksearch-text": "Нишонаҳои монанди \"*.wikipedia.org\"-ро метавон истифода кард.<br />Протоколҳои пуштибонишуда: <code>$1</code>",
+       "linksearch-text": "Нишонаҳои монанди \"*.wikipedia.org\"-ро метавон истифода кард.<br />Протоколҳои пуштибонишуда: $1",
        "linksearch-line": "$1 дорои пайванд аз $2 аст",
        "linksearch-error": "Нишонаҳо фақат дар ибтидои номи мизбони интернетӣ метавонанд истифода шаванд.",
        "listusersfrom": "Намоиши корбарон бо шурӯъ аз:",
index 760949e..3ee9ca5 100644 (file)
        "unusedtemplates": "Şablonhoi istifodanaşuda",
        "unusedtemplateswlh": "digar pajvandho",
        "randompage": "Sahifai tasodufī",
+       "randomincategory-submit": "Birav",
        "randomredirect": "Masiri tasodufī",
        "statistics": "Omor\\Statistika",
        "statistics-header-pages": "Sahifai omor",
        "nlinks": "$1 {{PLURAL:$1|pajvand|pajvandho}}",
        "nmembers": "$1 {{PLURAL:$1|uzv}}",
        "nrevisions": "$1 {{PLURAL:$1|viroiş|viroiş}}",
-       "nviews": "$1 {{PLURAL:$1|namoiş|namoişho}}",
        "specialpage-empty": "Baroi in hisobot natiçae vuçud nadorad.",
        "lonelypages": "Sahifahoi jatim",
        "uncategorizedpages": "Sahifahoe, ki ba jagon gurūh doxil nestand",
        "linksearch-pat": "Çustuçūi naqş:",
        "linksearch-ns": "Fazoinom:",
        "linksearch-ok": "Çustuçū",
-       "linksearch-text": "Nişonahoi monandi \"*.wikipedia.org\"-ro metavon istifoda kard.<br />Protokolhoi puştibonişuda: <code>$1</code>",
+       "linksearch-text": "Nişonahoi monandi \"*.wikipedia.org\"-ro metavon istifoda kard.<br />Protokolhoi puştibonişuda: $1",
        "linksearch-line": "$1 doroi pajvand az $2 ast",
        "linksearch-error": "Nişonaho faqat dar ibtidoi nomi mizboni internetī metavonand istifoda şavand.",
        "listusersfrom": "Namoişi korbaron bo şurū' az:",
index d7b5dd4..5d91ea2 100644 (file)
        "actionthrottledtext": "เพื่อเป็นมาตรการป้องกันสแปม คุณจึงถูกจำกัดมิให้กระทำสิ่งนี้ไม่ให้ติดต่อกันหลายครั้งเกินไปในช่วงระยะเวลาสั้น ๆ ซึ่งขณะนี้คุณเลยขีดจำกัดนี้แล้ว \nกรุณารอสักครู่แล้วลองอีกครั้ง",
        "protectedpagetext": "หน้านี้ถูกล็อกเพื่อป้องกันการแก้ไขหรือปฏิบัติการอื่น",
        "viewsourcetext": "คุณสามารถดูและคัดลอกโค้ดของหน้านี้:",
-       "viewyourtext": "à¸\84ุà¸\93สามารà¸\96à¸\94ูà¹\81ละà¸\84ัà¸\94ลอà¸\81à¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9a<strong>à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93</strong>มายัà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89:",
+       "viewyourtext": "à¸\84ุà¸\93สามารà¸\96à¸\94ูà¹\81ละà¸\84ัà¸\94ลอà¸\81à¸\95à¹\89à¸\99à¸\89à¸\9aัà¸\9a<strong>à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¸\82อà¸\87à¸\84ุà¸\93</strong>มาหà¸\99à¹\89าà¸\99ีà¹\89à¹\84à¸\94à¹\89",
        "protectedinterface": "หน้านี้เป็นข้อความส่วนต่อประสานสำหรับซอฟต์แวร์บนวิกินี้ และถูกล็อกเพื่อป้องกันการกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
        "editinginterface": "<strong>คำเตือน:</strong> คุณกำลังแก้ไขหน้าที่ใช้จัดหาข้อความอินเตอร์เฟซให้ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะมีผลต่อสภาพปรากฏของส่วนต่อประสานผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้",
        "translateinterface": "ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [//translatewiki.net/ translatewiki.net] โครงการแปลเป็นภาษาถิ่นของมีเดียวิกิ",
-       "cascadeprotected": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82 à¹\80à¸\9eราะà¸\96ูà¸\81รวมอยูà¹\88à¹\83à¸\99หà¸\99à¹\89าà¸\8bึà¹\88à¸\87à¸\96ูà¸\81ลà¹\87อà¸\81à¹\82à¸\94ยà¹\80à¸\9bิà¸\94à¸\95ัวà¹\80ลือà¸\81 \"à¸\97à¸\9aà¸\97ุà¸\81ลำà¸\94ัà¸\9aà¸\82ัà¹\89à¸\99\":\n$2",
+       "cascadeprotected": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bà¹\89อà¸\87à¸\81ัà¸\99มิà¹\83หà¹\89à¹\81à¸\81à¹\89à¹\84à¸\82 à¹\80à¸\9eราะà¸\96ูà¸\81รวมอยูà¹\88à¹\83à¸\99หà¸\99à¹\89าà¸\95à¹\88อà¹\84à¸\9bà¸\99ีà¹\89à¸\8bึà¹\88à¸\87à¸\96ูà¸\81ลà¹\87อà¸\81à¹\82à¸\94ยà¹\80à¸\9bิà¸\94à¸\95ัวà¹\80ลือà¸\81 \"à¸\95à¹\88อà¹\80รียà¸\87\":\n$2",
        "namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
        "customcssprotected": "คุณไม่มีสิทธิแก้ไขหน้า CSS นี้ เพราะมีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
        "customjsprotected": "คุณไม่มีสิทธิแก้ไขหน้าจาวาสคริปต์นี้ เพราะหน้านี้มีการตั้งค่าส่วนบุคคลของผู้ใช้อื่น",
        "createacct-yourpasswordagain": "ยืนยันรหัสผ่าน",
        "createacct-yourpasswordagain-ph": "กรอกรหัสผ่านอีกครั้ง",
        "remembermypassword": "จำการล็อกอินของฉันบนเบราเซอร์นี้ (นานสุด $1 วัน)",
-       "userlogin-remembermypassword": "ให้ฉันอยู่ในระบบ",
+       "userlogin-remembermypassword": "ให้ฉันอยู่ในระบบต่อ",
        "userlogin-signwithsecure": "ใช้การเชื่อมต่อที่ปลอดภัย",
        "yourdomainname": "โดเมนของคุณ:",
        "password-change-forbidden": "คุณไม่สามารถเปลี่ยนรหัสผ่านบนวิกินี้",
        "userlogin-loggedin": "คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว\nใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง",
        "userlogin-createanother": "สร้างอีกบัญชี",
        "createacct-emailrequired": "ที่อยู่อีเมล",
-       "createacct-emailoptional": "ที่อยู่อีเมล (เลือกไม่ใส่ได้)",
+       "createacct-emailoptional": "à¸\97ีà¹\88อยูà¹\88อีà¹\80มล (à¹\80ลือà¸\81à¹\84มà¹\88à¹\83สà¹\88à¸\81à¹\87à¹\84à¸\94à¹\89)",
        "createacct-email-ph": "กรอกที่อยู่อีเมลของคุณ",
        "createacct-another-email-ph": "กรอกที่อยู่อีเมล",
        "createaccountmail": "ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ",
        "createacct-benefit-body2": "$1 หน้า",
        "createacct-benefit-body3": "$1 ผู้ร่วมเขียนล่าสุด",
        "badretype": "รหัสผ่านที่คุณกรอกไม่ตรง",
+       "usernameinprogress": "การสร้างบัญชีสำหรับชื่อผู้ใช้นี้อยู่ระหว่างดำเนินการแล้ว\nโปรดรอสักครู่",
        "userexists": "ชื่อผู้ใช้ที่กรอกมีผู้ใช้แล้ว \nกรุณาเลือกชื่ออื่น",
        "loginerror": "ล็อกอินผิดพลาด",
        "createacct-error": "การสร้างบัญชีผิดพลาด",
        "newarticle": "(ใหม่)",
        "newarticletext": "คุณตามลิงก์ไปยังหน้าที่ยังไม่มีในขณะนี้\nในการสร้างหน้า เริ่มพิมพ์ในกล่องด้านล่าง (ดูข้อมูลเพิ่มเติมใน[$1 หน้าคำอธิบาย])\nถ้าคุณเข้ามาหน้านี้โดยผิดพลาด ให้กดปุ่ม<strong>ถอยหลัง</strong> (back) ของเบราว์เซอร์",
        "anontalkpagetext": "----\n<em>หน้านี้เป็นหน้าคุยกับผู้ใช้สำหรับผู้ใช้นิรนามซึ่งยังไม่ได้สร้างหรือใช้บัญชี</em>\nดังนั้นเราจึงระบุตัวตนโดยใช้เลขที่อยู่ไอพีแทน\nเลขที่อยู่ไอพีนี้อาจมีผู้ใช้ร่วมกันหลายคน\nถ้าคุณเป็นผู้ใช้นิรนาม และรู้สึกว่าคุณได้รับความเห็นที่ไม่เกี่ยวข้องส่งหาคุณ กรุณา[[Special:UserLogin/signup|สร้างบัญชี]]หรือ[[Special:UserLogin|ล็อกอิน]] เพื่อป้องกันการสับสนกับผู้ใช้นิรนามรายอื่นในอนาคต",
-       "noarticletext": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง] หรือ[{{fullurl:{{FULLPAGENAME}}|action=edit}} แก้ไขหน้านี้]</span>",
+       "noarticletext": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99à¹\84มà¹\88มีà¸\82à¹\89อà¸\84วามà¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89\nà¸\84ุà¸\93สามารà¸\96[[Special:Search/{{PAGENAME}}|à¸\84à¹\89à¸\99หาà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89]]à¹\83à¸\99หà¸\99à¹\89าอืà¹\88à¸\99 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à¸\84à¹\89à¸\99หาà¸\9bูมà¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87] à¸«à¸£à¸·à¸­[{{fullurl:{{FULLPAGENAME}}|action=edit}} à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\99ีà¹\89]</span>",
        "noarticletext-nopermission": "ปัจจุบันไม่มีข้อความในหน้านี้\nคุณสามารถ[[Special:Search/{{PAGENAME}}|ค้นหาชื่อหน้านี้]]ในหน้าอื่น หรือ<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ค้นหาปูมที่เกี่ยวข้อง]</span> แต่คุณไม่มีสิทธิสร้างหน้านี้",
        "missing-revision": "ไม่มีรุ่นปรับปรุง #$1 ของหน้าชื่อ \"{{FULLPAGENAME}}\" \n\nปกติเกิดจากการตามการโยงประวัติเก่าไปยังหน้าที่ถูกลบแล้ว\nดูรายละเอียดได้ที่[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ปูมการลบ]",
        "userpage-userdoesnotexist": "บัญชีผู้ใช้ \"$1\" มิได้ลงทะเบียน \nกรุณาตรวจสอบหากคุณต้องการสร้าง/แก้ไขหน้านี้",
        "readonlywarning": "<strong>คำเตือน: ฐานข้อมูลถูกล็อกเพื่อบำรุงรักษา คุณจึงไม่สามารถบันทึกการเปลี่ยนแปลงของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
        "protectedpagewarning": "<strong>คำเตือน: หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบแก้ไขได้เท่านั้น</strong>\nรายการปูมล่าสุดจัดไว้ด้านล่างเพื่อการอ้างอิง:",
        "semiprotectedpagewarning": "<strong>หมายเหตุ:</strong> หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ลงทะเบียนสามารถแก้ไขเท่านั้น\nรายการปูมล่าสุดได้จัดไว้ด้านล่างนี้เพื่อการอ้างอิง",
-       "cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบเท่านั้น เนื่องจากหน้านี้สืบทอดการล็อกมาจาก{{PLURAL:$1|หน้า|หน้า}}ต่อไปนี้:",
+       "cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบ เนื่องจากหน้านี้รวมอยู่ใน{{PLURAL:$1|หน้า}}ที่ถูกล็อกแบบต่อเรียงต่อไปนี้:",
        "titleprotectedwarning": "<strong>คำเตือน: หน้านี้ได้รับการป้องกัน สร้างได้เฉพาะผู้ใช้ที่มี[[Special:ListGroupRights|สิทธิจำเพาะ]]เท่านั้น</strong>\nรายการปูมล่าสุดถูกแสดงไว้ด้านล่างเพื่อการอ้างอิง",
        "templatesused": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในหน้านี้:",
        "templatesusedpreview": "{{PLURAL:$1|แม่แบบ}}ที่ใช้ในตัวอย่างนี้:",
        "permissionserrorstext": "คุณไม่มีสิทธิทำเช่นนั้น เนื่องจาก{{PLURAL:$1|เหตุผล|เหตุผล}}ต่อไปนี้:",
        "permissionserrorstext-withaction": "คุณไม่มีสิทธิ$2 ด้วย{{PLURAL:$1|เหตุ|เหตุ}}ต่อไปนี้:",
        "recreate-moveddeleted-warn": "<strong>คำเตือน: คุณกำลังสร้างหน้าซึ่งได้ถูกลบไปก่อนหน้านี้แล้วอีกครั้ง</strong>\n\nคุณควรพิจารณาว่าการแก้ไขหน้านี้ต่อไปเหมาะสมหรือไม่\nปูมการลบและเปลี่ยนชื่อหน้านี้จัดไว้ด้านล่างเพื่อความสะดวก:",
-       "moveddeleted-notice": "หน้านี้ถูกลบ\nปูมการลบและเปลี่ยนชื่อของหน้านี้แสดงไว้ด้านล่างเพื่ออ้างอิง",
+       "moveddeleted-notice": "หน้านี้ถูกลบแล้ว\nปูมการลบและเปลี่ยนชื่อของหน้านี้แสดงไว้ด้านล่างเพื่ออ้างอิง",
        "log-fulllog": "ดูปูมแบบเต็ม",
        "edit-hook-aborted": "การแก้ไขถูกฮุกยกเลิก\nไม่ได้ให้คำอธิบาย",
        "edit-gone-missing": "ไม่สามารถปรับหน้าดังกล่าวได้\nดูเหมือนถูกลบแล้ว",
        "history-feed-description": "ประวัติรุ่นปรับปรุงของหน้านี้ในวิกิ",
        "history-feed-item-nocomment": "$1 เมื่อ $2",
        "history-feed-empty": "ไม่มีหน้าที่ต้องการ \nซึ่งอาจถูกลบหรือเปลี่ยนชื่อแล้ว \nลอง[[Special:Search|ค้นวิกินี้]]หาหน้าใหม่ที่เกี่ยวข้อง",
+       "history-edit-tags": "ป้ายระบุการแก้ไขของรุ่นแก้ไขที่เลือก",
        "rev-deleted-comment": "(คำอธิบายอย่างย่อถูกลบออก)",
        "rev-deleted-user": "(ชื่อผู้ใช้ถูกลบออก)",
        "rev-deleted-event": "(รายละเอียดปูมถูกลบ)",
        "searchprofile-advanced": "ขั้นสูง",
        "searchprofile-articles-tooltip": "ค้นหาใน $1",
        "searchprofile-images-tooltip": "ค้นหาไฟล์",
-       "searchprofile-everything-tooltip": "à¸\84à¹\89à¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมหà¸\99à¹\89าอภิà¸\9bราย)",
+       "searchprofile-everything-tooltip": "à¸\84à¹\89à¸\99à¹\80à¸\99ืà¹\89อหาà¸\97ัà¹\89à¸\87หมà¸\94 (รวมหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุย)",
        "searchprofile-advanced-tooltip": "ค้นหาในเนมสเปซที่เลือกเอง",
        "search-result-size": "$1 ($2 คำ)",
        "search-result-category-size": "$1 สมาชิก ($2 หมวดหมู่ย่อย, $3 ไฟล์)",
        "search-category": "(หมวดหมู่ $1)",
        "search-file-match": "(เนื้อหาไฟล์ตรง)",
        "search-suggest": "คุณอาจหมายถึง: $1",
+       "search-rewritten": "กำลังแสดงผลลัพธ์สำหรับ $1 ค้นหา $2 แทน",
        "search-interwiki-caption": "โครงการพี่น้อง",
        "search-interwiki-default": "ผลลัพธ์จาก $1:",
        "search-interwiki-more": "(เพิ่มเติม)",
        "rows": "แถว:",
        "columns": "คอลัมน์:",
        "searchresultshead": "ค้นหา",
-       "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบ <a href=\"#\" class=\"stub\">ลิงก์โครง</a> (ไบต์):",
+       "stub-threshold": "ขีดแบ่งสำหรับการจัดรูปแบบลิงก์โครง ($1):",
+       "stub-threshold-sample-link": "ตัวอย่าง",
        "stub-threshold-disabled": "ปิดใช้งาน",
        "recentchangesdays": "จำนวนวันที่แสดงในปรับปรุงล่าสุด:",
        "recentchangesdays-max": "มากสุด $1 วัน",
        "right-ipblock-exempt": "เลี่ยงการบล็อกเลขที่อยู่ไอพี บล็อกอัตโนมัติ และบล็อกช่วง",
        "right-proxyunbannable": "เลี่ยงการบล็อกอัตโนมัติของพร็อกซี",
        "right-unblockself": "ปลดบล็อกตนเอง",
-       "right-protect": "à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\96à¹\88ายà¸\97อà¸\94",
+       "right-protect": "à¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¹\81ละà¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¸\96ูà¸\81ลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\95à¹\88อà¹\80รียà¸\87",
        "right-editprotected": "แก้ไขหน้าที่ถูกล็อกในฐานะ \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "แก้ไขหน้าที่ถูกล็อกในฐานะ \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า",
        "boteditletter": "บ",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 ผู้ใช้เฝ้าดู]",
-       "rc_categories": "จำกัดเฉพาะหมวดหมู่ (แยกด้วย \"|\")",
-       "rc_categories_any": "à¹\83à¸\94 à¹\86",
+       "rc_categories": "จำกัดเฉพาะหมวดหมู่ (แยกด้วย \"|\"):",
+       "rc_categories_any": "อะà¹\84รà¸\81à¹\87à¹\84à¸\94à¹\89à¸\97ีà¹\88à¹\80ลือà¸\81",
        "rc-change-size-new": "$1 ไบต์หลังปรับปรุง",
        "newsectionsummary": "/* $1 */ หัวข้อใหม่",
        "rc-enhanced-expand": "แสดงรายละเอียด",
        "recentchangeslinked-feed": "ปรับปรุงที่เกี่ยวโยง",
        "recentchangeslinked-toolbox": "การปรับปรุงที่เกี่ยวโยง",
        "recentchangeslinked-title": "การปรับปรุงที่โยงกับ \"$1\"",
-       "recentchangeslinked-summary": "นี่คือรายการเปลี่ยนแปลงล่าสุดของหน้าที่ถูกลิงก์จากหน้าเฉพาะ (หรือไปสมาชิกของหมวดหมู่เฉพาะ)\nหน้าใน[[Special:Watchlist|รายการเฝ้าดู]]แสดงเป็น<strong>ตัวหนา</strong>",
+       "recentchangeslinked-summary": "นี่คือรายการเปลี่ยนแปลงล่าสุดของหน้าที่ถูกลิงก์จากหน้าเฉพาะ (หรือไปสมาชิกของหมวดหมู่เฉพาะ)\nหน้าใน[[Special:Watchlist|รายการเฝ้าดูของคุณ]]แสดงเป็น<strong>ตัวหนา</strong>",
        "recentchangeslinked-page": "ชื่อหน้า:",
        "recentchangeslinked-to": "แสดงการเปลี่ยนแปลงไปหน้าซึ่งโยงไปหน้าที่ระบุแทน",
        "upload": "อัปโหลดไฟล์",
        "upload-too-many-redirects": "ยูอาร์แอลนั้นมีการเปลี่ยนทางมากเกินไป",
        "upload-http-error": "เกิดข้อผิดพลาดเอชทีทีพี: $1",
        "upload-copy-upload-invalid-domain": "ไม่สามารถคัดลอกการอัปโหลดจากโดเมนนี้",
+       "upload-dialog-title": "อัปโหลดไฟล์",
+       "upload-dialog-error": "เกิดข้อผิดพลาด",
+       "upload-dialog-warning": "เกิดคำเตือน",
+       "upload-dialog-button-cancel": "ยกเลิก",
+       "upload-dialog-button-done": "เสร็จสิ้น",
+       "upload-dialog-button-save": "บันทึก",
+       "upload-dialog-button-upload": "อัปโหลด",
+       "upload-dialog-label-select-file": "เลือกไฟล์",
+       "upload-dialog-label-infoform-title": "รายละเอียด",
+       "upload-dialog-label-infoform-name": "ชื่อ",
+       "upload-dialog-label-infoform-description": "คำอธิบาย",
+       "upload-dialog-label-usage-title": "การใช้",
+       "upload-dialog-label-usage-filename": "ชื่อไฟล์",
        "backend-fail-backup": "ไม่สามารถสำรองไฟล์ \"$1\"",
        "backend-fail-notexists": "ไม่มีไฟล์ $1",
        "backend-fail-delete": "ไม่สามารถลบไฟล์ \"$1\"",
        "randomincategory-nopages": "ไม่มีหน้าในหมวดหมู่ [[:Category:$1]]",
        "randomincategory-category": "หมวดหมู่:",
        "randomincategory-legend": "สุ่มหน้าในหมวดหมู่",
+       "randomincategory-submit": "ไป",
        "randomredirect": "สุ่มหน้าเปลี่ยนทาง",
        "randomredirect-nopages": "ไม่มีหน้าเปลี่ยนทางในเนมสเปซ \"$1\"",
        "statistics": "สถิติ",
        "unusedimages": "ไฟล์ไม่ได้ใช้",
        "wantedcategories": "หมวดหมู่ที่ต้องการ",
        "wantedpages": "หน้าที่ต้องการ",
+       "wantedpages-summary": "รายการหน้าที่ไม่มีอยู่ที่มีการโยงมามากที่สุด ยกเว้นหน้าที่มีเฉพาะหน้าเปลี่ยนทางโยงมา สำหรับรายการหน้าที่ไม่มีอยู่ที่มีหน้าเปลี่ยนทางโยงมา ดูที่ [[{{#special:BrokenRedirects}}|รายการหน้าเปลี่ยนทางเสีย]]",
        "wantedpages-badtitle": "ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1",
        "wantedfiles": "ไฟล์ที่ต้องการ",
        "wantedfiletext-cat": "ไฟล์ต่อไปนี้พบใช้แต่ไม่มี ไฟล์จากคลังภายนอกอาจแสดงรายการแม้มีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> นอกจากนั้น หน้าที่ใส่ไฟล์ที่ไม่มีแสดงรายการใน [[:$1]]",
        "protectedpages": "หน้าที่ถูกล็อก",
        "protectedpages-indef": "เฉพาะการล็อกแบบไม่มีกำหนด",
        "protectedpages-summary": "หน้านี้แสดงรายการหน้าที่มีอยู่ซึ่งปัจจุบันถูกล็อก สำหรับรายการชื่อเรื่องที่ถูกป้องกันมิให้สร้าง ดู [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]",
-       "protectedpages-cascade": "à¹\80à¸\89à¸\9eาะà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94",
+       "protectedpages-cascade": "à¹\80à¸\89à¸\9eาะà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\95à¹\88อà¹\80รียà¸\87",
        "protectedpages-noredirect": "ซ่อนการเปลี่ยนทาง",
        "protectedpagesempty": "ขณะนี้ไม่มีหน้าถูกล็อกตามพารามิเตอร์เหล่านี้",
        "protectedpages-timestamp": "ตราเวลา",
        "booksources-text": "ด้านล่างเป็นรายการการเชื่อมโยงไปยังเว็บไซต์อื่นที่ขายหนังสือใหม่และหนังสือใช้แล้ว และอาจมีสารสนเทศเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
        "booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
        "specialloguserlabel": "ผู้ดำเนินการ:",
-       "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือผู้ใช้):",
+       "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือ {{ns:user}}:ชื่อผู้ใช้ สำหรับผู้ใช้):",
        "log": "ปูม",
        "all-logs-page": "ปูมสาธารณะทั้งหมด",
        "alllogstext": "การแสดงผลรวมปูมที่มีทั้งหมดของ {{SITENAME}}\nคุณสามารถค้นหาให้ละเอียดขึ้นโดยเลือกประเภทปูม ชื่อผู้ใช้หรือหน้าที่ต้องการ (ไวต่ออักษรใหญ่เล็ก)",
        "linksearch-pat": "รูปแบบการค้นหา:",
        "linksearch-ns": "เนมสเปซ:",
        "linksearch-ok": "ค้นหา",
-       "linksearch-text": "สามารถใช้ตัวแทนเช่น \"*.wikipedia.org\" ได้\nต้องการโดเมนระดับบนสุดเป็นอย่างน้อย เช่น \"*.org\"<br />\n{{PLURAL:$2|โพรโทคอล}}ที่รองรับ: <code>$1</code> (ค่าโดยปริยายเป็น http:// หากไม่ระบุโพรโทคอล)",
+       "linksearch-text": "สามารถใช้ตัวแทนเช่น \"*.wikipedia.org\" ได้\nต้องการโดเมนระดับบนสุดเป็นอย่างน้อย เช่น \"*.org\"<br />\n{{PLURAL:$2|โพรโทคอล}}ที่รองรับ: $1 (ค่าโดยปริยายเป็น http:// หากไม่ระบุโพรโทคอล)",
        "linksearch-line": "$1 ถูกลิงก์จาก $2",
        "linksearch-error": "อักขระตัวแทนอยู่ได้เฉพาะหน้าชื่อโฮสต์เท่านั้น",
        "listusersfrom": "แสดงผู้ใช้เริ่มจาก:",
        "emailuser": "ส่งอีเมลหาผู้ใช้นี้",
        "emailuser-title-target": "ส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}",
        "emailuser-title-notarget": "อีเมลผู้ใช้",
-       "emailpage": "อีเมลผู้ใช้",
        "emailpagetext": "คุณสามารถใช้แบบด้านล่างส่งอีเมลหา{{GENDER:$1|ผู้ใช้}}นี้\nที่อยู่อีเมลที่คุณกรอกใน[[Special:Preferences|การตั้งค่าส่วนตัวของคุณ]]จะปรากฏเป็นที่อยู่ \"จาก\" ของอีเมล ซึ่งผู้รับสามารถตอบกลับคุณได้โดยตรง",
        "defemailsubject": "อีเมล {{SITENAME}} จากผู้ใช้ \"$1\"",
        "usermaildisabled": "ปิดใช้งานการส่งอีเมลหาผู้ใช้",
        "emailccsubject": "คัดลอกสารของคุณไป $1: $2",
        "emailsent": "ส่งอีเมลแล้ว",
        "emailsenttext": "ส่งสารอีเมลของคุณแล้ว",
-       "emailuserfooter": "ส่งอีเมลจาก $1 ถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
+       "emailuserfooter": "$1 ส่งอีเมลถึง $2 ด้วยฟังก์ชัน \"อีเมลผู้ใช้รายนี้\" ที่ {{SITENAME}}",
        "usermessage-summary": "ฝากสารระบบ",
        "usermessage-editor": "ตัวส่งสารของระบบ",
        "watchlist": "รายการเฝ้าดู",
        "watchlistanontext": "กรุณาล็อกอินเพื่อดูหรือแก้ไขรายการในรายการเฝ้าดูของคุณ",
        "watchnologin": "ยังไม่ได้ล็อกอิน",
        "addwatch": "เพิ่มเข้ารายการเฝ้าดู",
-       "addedwatchtext": "à¹\80à¸\9eิà¹\88มหà¸\99à¹\89า \"[[:$1]]\" à¹\80à¸\82à¹\89า[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว \nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¹\83à¸\99อà¸\99าà¸\84à¸\95à¹\81à¸\81à¹\88หà¸\99à¹\89าà¸\99ีà¹\89หรือหà¸\99à¹\89าà¸\9eูà¸\94à¸\84ุยà¸\97ีà¹\88à¹\80à¸\81ีà¹\88ยวà¸\82à¹\89อà¸\87à¸\88ะà¹\81สà¸\94à¸\87à¹\83à¸\99รายà¸\81ารà¸\94ัà¸\87à¸\81ลà¹\88าว",
+       "addedwatchtext": "à¹\80à¸\9eิà¹\88มหà¸\99à¹\89า \"[[:$1]]\" à¹\81ละหà¸\99à¹\89าอภิà¸\9bรายà¹\80à¸\82à¹\89า[[Special:Watchlist|รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ู]]à¸\82อà¸\87à¸\84ุà¸\93à¹\81ลà¹\89ว",
        "addedwatchtext-short": "เพิ่มหน้า \"$1\" เข้ารายการเฝ้าดูของคุณแล้ว",
        "removewatch": "นำออกจากรายการเฝ้าดู",
-       "removedwatchtext": "à¸\99ำหà¸\99à¹\89า \"[[:$1]]\" ออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]แล้ว",
-       "removedwatchtext-short": "à¸\99ำหน้า \"$1\" ออกจากรายการเฝ้าดูของคุณแล้ว",
+       "removedwatchtext": "ลà¸\9aหà¸\99à¹\89า \"[[:$1]]\" à¹\81ละหà¸\99à¹\89าอภิà¸\9bรายออกจาก[[Special:Watchlist|รายการเฝ้าดูของคุณ]]แล้ว",
+       "removedwatchtext-short": "ลà¸\9aหน้า \"$1\" ออกจากรายการเฝ้าดูของคุณแล้ว",
        "watch": "เฝ้าดู",
        "watchthispage": "เฝ้าดูหน้านี้",
        "unwatch": "เลิกเฝ้าดู",
        "protect-locked-blocked": "ไม่สามารถเปลี่ยนระดับการล็อกหน้าขณะถูกบล็อกได้ \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
        "protect-locked-dblock": "ไม่สามารถเปลี่ยนระดับการล็อกได้เนื่องจากฐานข้อมูลกำลังถูกล็อก \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
        "protect-locked-access": "บัญชีของคุณไม่มีสิทธิเปลี่ยนแปลงระดับการล็อกหน้า \nการตั้งค่าปัจจุบันของหน้า <strong>$1</strong> คือ:",
-       "protect-cascadeon": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\99ืà¹\88อà¸\87à¸\88าà¸\81รวมอยูà¹\88à¹\83à¸\99{{PLURAL:$1|หà¸\99à¹\89า|หà¸\99à¹\89า}}à¸\97ีà¹\88à¹\80à¸\9bิà¸\94à¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94\nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะà¹\84มà¹\88มีà¸\9cลà¸\95à¹\88อà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94",
+       "protect-cascadeon": "à¸\9bัà¸\88à¸\88ุà¸\9aัà¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\9eราะรวมอยูà¹\88à¹\83à¸\99{{PLURAL:$1|หà¸\99à¹\89า}}à¸\97ีà¹\88à¹\80à¸\9bิà¸\94à¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\95à¹\88อà¹\80รียà¸\87\nà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99ระà¸\94ัà¸\9aà¸\81ารลà¹\87อà¸\81à¸\82อà¸\87หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะà¹\84มà¹\88มีà¸\9cลà¸\95à¹\88อà¸\81ารลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\95à¹\88อà¹\80รียà¸\87",
        "protect-default": "อนุญาตผู้ใช้ทั้งหมด",
        "protect-fallback": "อนุญาตเฉพาะผู้ใช้ที่มีสิทธิ \"$1\"",
        "protect-level-autoconfirmed": "อนุญาตเฉพาะผู้ใช้ยืนยันอัตโนมัติ",
        "protect-level-sysop": "อนุญาตเฉพาะผู้ดูแลระบบ",
-       "protect-summary-cascade": "สืà¸\9aà¸\97อà¸\94",
+       "protect-summary-cascade": "à¸\95à¹\88อà¹\80รียà¸\87",
        "protect-expiring": "หมดอายุ $1 (UTC)",
        "protect-expiring-local": "หมดอายุ $1",
        "protect-expiry-indefinite": "ไม่มีกำหนด",
-       "protect-cascade": "ลà¹\87อà¸\81หà¸\99à¹\89าà¸\97ีà¹\88à¹\80à¸\9bà¹\87à¸\99รวมอยูà¹\88à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89 (ลà¹\87อà¸\81à¹\81à¸\9aà¸\9aสืà¸\9aà¸\97อà¸\94)",
+       "protect-cascade": "ลà¹\87อà¸\81หà¸\99à¹\89าà¸\97ีà¹\88รวมอยูà¹\88à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89 (ลà¹\87อà¸\81à¹\81à¸\9aà¸\9aà¸\95à¹\88อà¹\80รียà¸\87)",
        "protect-cantedit": "คุณไม่สามารถเปลี่ยนระดับการล็อกของหน้านี้ เพราะคุณไม่มีสิทธิแก้ไข",
        "protect-othertime": "เวลาอื่น:",
        "protect-othertime-op": "เวลาอื่น",
        "namespace_association": "เนมสเปซที่เกี่ยวข้อง",
        "tooltip-namespace_association": "เลือกกล่องนี้เพื่อรวมเนมสเปซพูดคุยหรือหัวข้อที่เกี่ยวข้องกับเนมสเปซที่เลือกด้วย",
        "blanknamespace": "(หลัก)",
-       "contributions": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88{{GENDER:$1|à¸\9cูà¹\89à¹\83à¸\8aà¹\89}}รายà¸\99ีà¹\89à¹\80à¸\82ียà¸\99",
+       "contributions": "เรื่องที่{{GENDER:$1|ผู้ใช้}}นี้เขียน",
        "contributions-title": "เรื่องที่เขียนโดย $1",
        "mycontris": "เรื่องที่เขียน",
        "contribsub2": "สำหรับ {{GENDER:$3|$1}} ($2)",
        "tooltip-pt-preferences": "การตั้งค่าของคุณ",
        "tooltip-pt-watchlist": "รายการหน้าที่คุณกำลังเฝ้าดูการเปลี่ยนแลปง",
        "tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
-       "tooltip-pt-login": "à¹\84มà¹\88à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87ลà¹\87อà¸\81อิà¸\99 à¹\81à¸\95à¹\88à¹\81à¸\99ะà¸\99ำอยà¹\88าà¸\87ยิà¹\88à¸\87à¹\83หà¹\89ลà¹\87อà¸\81อิà¸\99",
+       "tooltip-pt-login": "สà¸\99ัà¸\9aสà¸\99ุà¸\99à¹\83หà¹\89à¸\84ุà¸\93ลà¹\87อà¸\81อิà¸\99 à¹\81à¸\95à¹\88à¹\84มà¹\88à¸\9aัà¸\87à¸\84ัà¸\9a",
        "tooltip-pt-logout": "ล็อกเอาต์",
        "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
        "tooltip-ca-talk": "อภิปรายเกี่ยวกับหน้าเนื้อหา",
        "tooltip-n-recentchanges": "รายการปรับปรุงล่าสุดในวิกินี้",
        "tooltip-n-randompage": "โหลดหน้าสุ่ม",
        "tooltip-n-help": "อธิบายการใช้งาน",
-       "tooltip-t-whatlinkshere": "รายà¸\81ารà¸\97ุà¸\81หà¸\99à¹\89าวิà¸\81ิที่ลิงก์มาที่นี่",
+       "tooltip-t-whatlinkshere": "รายà¸\81ารหà¸\99à¹\89าวิà¸\81ิà¸\97ุà¸\81หà¸\99à¹\89าที่ลิงก์มาที่นี่",
        "tooltip-t-recentchangeslinked": "รายการปรับปรุงล่าสุดในหน้าที่ลิงก์จากหน้านี้",
        "tooltip-feed-rss": "ฟีดชนิดอาร์เอสเอส (RSS) ของหน้านี้",
        "tooltip-feed-atom": "ฟีดอะตอม (Atom) ของหน้านี้",
        "tooltip-t-upload": "อัปโหลดไฟล์",
        "tooltip-t-specialpages": "รายการหน้าพิเศษทั้งหมด",
        "tooltip-t-print": "รุ่นที่พร้อมพิมพ์ของหน้านี้",
-       "tooltip-t-permalink": "ลิà¸\87à¸\81à¹\8cà¸\96าวรมาà¸\97ีà¹\88à¹\80à¸\89à¸\9eาะรุà¹\88à¸\99à¸\99ีà¹\89à¸\82อà¸\87หà¸\99à¹\89า",
+       "tooltip-t-permalink": "ลิงก์ถาวรมารุ่นนี้ของหน้า",
        "tooltip-ca-nstab-main": "ดูหน้าเนื้อหา",
        "tooltip-ca-nstab-user": "ดูหน้าผู้ใช้",
        "tooltip-ca-nstab-media": "ดูหน้าสื่อ ภาพ เพลง",
-       "tooltip-ca-nstab-special": "หà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¸\9eิà¹\80ศษ à¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\81à¸\81à¹\89à¹\84à¸\82à¹\84à¸\94à¹\89",
+       "tooltip-ca-nstab-special": "หน้านี้เป็นหน้าพิเศษ ไม่สามารถแก้ไขได้",
        "tooltip-ca-nstab-project": "ดูหน้าโครงการ",
        "tooltip-ca-nstab-image": "ดูหน้าภาพไฟล์",
        "tooltip-ca-nstab-mediawiki": "ดูข้อความระบบ",
        "tooltip-minoredit": "ทำเครื่องหมายเป็นการแก้ไขเล็กน้อย",
        "tooltip-save": "บันทึกการแก้ไขของคุณ",
        "tooltip-preview": "แสดงตัวอย่างการเปลี่ยนแปลงของคุณ กรุณาใช้คำสั่งนี้ก่อนบันทึก!",
-       "tooltip-diff": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\81ารต่อข้อความ",
+       "tooltip-diff": "à¹\81สà¸\94à¸\87à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87à¸\97ีà¹\88à¸\84ุà¸\93à¸\97ำต่อข้อความ",
        "tooltip-compareselectedversions": "แสดงความแตกต่างระหว่างสองรุ่นที่เลือกของหน้านี้",
        "tooltip-watch": "เพิ่มหน้านี้เข้ารายการเฝ้าดู",
        "tooltip-watchlistedit-normal-submit": "ลบชื่อเรื่องออก",
        "pageinfo-robot-index": "อนุญาต",
        "pageinfo-robot-noindex": "ไม่อนุญาต",
        "pageinfo-watchers": "จำนวนผู้เฝ้าดูหน้า",
+       "pageinfo-visiting-watchers": "จำนวนผู้เฝ้าดูหน้าที่เยี่ยมชมการแก้ไขล่าสุด",
        "pageinfo-few-watchers": "{{PLURAL:$1|ผู้เฝ้าดู|ผู้เฝ้าดู}}น้อยกว่า $1 คน",
+       "pageinfo-few-visiting-watchers": "อาจมีหรือไม่มีผู้ใช้ที่เยี่ยมชมการแก้ไขล่าสุด",
        "pageinfo-redirects-name": "จำนวนการเปลี่ยนทางมาหน้านี้",
        "pageinfo-subpages-name": "จำนวนหน้าย่อยของหน้านี้",
        "pageinfo-subpages-value": "$1 ($2 หน้าเปลี่ยนทาง; $3 หน้าไม่เปลี่ยนทาง)",
        "pageinfo-redirectsto": "เปลี่ยนทางไป",
        "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
        "pageinfo-contentpage-yes": "ใช่",
-       "pageinfo-protect-cascading": "à¸\81ารลà¹\87อà¸\81à¸\97ีà¹\88สืà¸\9aà¸\97อà¸\94จากหน้านี้",
+       "pageinfo-protect-cascading": "à¸\81ารลà¹\87อà¸\81à¸\97ีà¹\88à¸\95à¹\88อà¹\80รียà¸\87จากหน้านี้",
        "pageinfo-protect-cascading-yes": "ใช่",
-       "pageinfo-protect-cascading-from": "à¸\81ารลà¹\87อà¸\81สืà¸\9aà¸\97อà¸\94จาก",
+       "pageinfo-protect-cascading-from": "à¸\81ารลà¹\87อà¸\81à¸\95à¹\88อà¹\80รียà¸\87จาก",
        "pageinfo-category-info": "สารสนเทศหมวดหมู่",
        "pageinfo-category-total": "จำนวนสมาชิกรวม",
        "pageinfo-category-pages": "จำนวนหน้า",
        "exif-jpegfilecomment": "ความเห็นไฟล์ JPEG",
        "exif-keywords": "คำสำคัญ",
        "exif-objectname": "ชื่อเรื่องสั้น",
-       "exif-headline": "พาดหัวข่าว",
+       "exif-headline": "พาดหัว",
        "exif-contact": "ข้อมูลสำหรับติดต่อ",
        "exif-languagecode": "ภาษา",
        "exif-iimcategory": "หมวดหมู่",
        "watchlistedit-clear-submit": "ล้างรายการเฝ้าดู (เป็นการถาวร!)",
        "watchlistedit-clear-done": "ล้างรายการเฝ้าดูของคุณแล้ว",
        "watchlistedit-clear-removed": "ลบ $1 ชื่อเรื่อง:",
-       "watchlistedit-too-many": "มีหà¸\99à¹\89ามาà¸\81à¹\80à¸\81ิà¸\99à¹\81สà¸\94à¸\87à¸\97ีà¹\88à¸\99ีà¹\88",
+       "watchlistedit-too-many": "มีหà¸\99à¹\89าà¹\81สà¸\94à¸\87à¸\97ีà¹\88à¸\99ีà¹\88มาà¸\81à¹\80à¸\81ิà¸\99",
        "watchlisttools-clear": "ล้างรายการเฝ้าดู",
        "watchlisttools-view": "ดูการเปลี่ยนแปลงที่เกี่ยวข้อง",
        "watchlisttools-edit": "ดูและแก้ไขรายการเฝ้าดู",
        "fileduplicatesearch": "ค้นหาไฟล์ซ้ำซ้อน",
        "fileduplicatesearch-summary": "ค้นหาไฟล์ซ้ำกันตามค่าแฮช",
        "fileduplicatesearch-legend": "ค้นหาไฟล์ที่ซ้ำกัน",
-       "fileduplicatesearch-filename": "ชื่อไฟล์ :",
+       "fileduplicatesearch-filename": "ชื่อไฟล์:",
        "fileduplicatesearch-submit": "ค้นหา",
        "fileduplicatesearch-info": "$1 × $2 พิกเซล<br />ขนาดไฟล์: $3<br />ชนิดของไมม์: $4",
        "fileduplicatesearch-result-1": "ไม่มีไฟล์ที่ซ้ำกับไฟล์ \"$1\"",
        "specialpages-group-changes": "ปรับปรุงล่าสุดและปูม",
        "specialpages-group-media": "รายงานสื่อและการอัปโหลด",
        "specialpages-group-users": "ผู้ใช้และสิทธิ",
-       "specialpages-group-highuse": "หà¸\99à¹\89าà¸\97ีà¹\88มีà¸\81ารà¹\83à¸\8aà¹\89à¸\87าà¸\99สูà¸\87",
+       "specialpages-group-highuse": "หน้าที่มีการใช้สูง",
        "specialpages-group-pages": "รายการหน้า",
        "specialpages-group-pagetools": "เครื่องมือหน้า",
        "specialpages-group-wiki": "ข้อมูลและเครื่องมือ",
        "specialpages-group-spam": "เครื่องมือสแปม",
        "specialpages-group-developer": "เครื่องมือผู้พัฒนา",
        "blankpage": "หน้าว่าง",
-       "intentionallyblankpage": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\97ิà¹\89à¸\87ว่างโดยเจตนา",
+       "intentionallyblankpage": "หà¸\99à¹\89าà¸\99ีà¹\89à¸\96ูà¸\81à¸\9bลà¹\88อยว่างโดยเจตนา",
        "external_image_whitelist": "  #เว้นบรรทัดนี้ไว้จากการแก้ไข<pre>\n#ใส่คำอธิบายปกติ (เฉพาะในส่วนที่อยู่ระหว่างสัญลักษณ์ //) ด้านล่างนี้\n#ซึ่งคำอธิบายดังกล่าวจะถูกจับคู่กับ URL ของรูปถ่ายภายนอก\n#ถ้าตรงกันจะปรากฏเป็นภาพออกมา หรือมิเช่นนั้นจะปรากฏเป็นลิงก์ไปยังรูปภาพนั้น\n#บรรทัดที่ขึ้นต้นด้วย # จะถูกกำหนดเป็นหมายเหตุเพิ่มเติม\n#กรุณาพิมพ์ตัวพิมพ์เล็ก-ใหญ่ตามชื่อไฟล์ให้ตรงกัน\n\n#ใส่ส่วนของคำอธิบายด้านบนของบรรทัดนี้และเว้นบรรทัดนี้จากการแก้ไข</pre>",
        "tags": "ป้ายกำกับการเปลี่ยนแปลง (ที่สามารถใช้ได้)",
        "tag-filter": "ตัวกรอง[[Special:Tags|ป้ายกำกับ]]:",
        "tags-tag": "ชื่อป้ายกำกับ",
        "tags-display-header": "สิ่งที่แสดงในรายการการเปลี่ยนแปลง",
        "tags-description-header": "คำอธิบายความหมายโดยละเอียด",
+       "tags-source-header": "แหล่งที่มา",
        "tags-active-header": "เปิดใช้งานหรือไม่",
        "tags-hitcount-header": "การเปลี่ยนแปลงที่มีป้ายนี้กำกับ",
+       "tags-actions-header": "ปฏิบัติการ",
        "tags-active-yes": "ใช่",
        "tags-active-no": "ไม่",
        "tags-edit": "แก้ไข",
        "htmlform-float-invalid": "ค่าที่คุณกำนหดไม่ใช่ตัวเลข",
        "htmlform-int-toolow": "ค่าที่คุณกำหนดนั้นต่ำกว่าค่าต่ำสุดที่ $1",
        "htmlform-int-toohigh": "ค่าที่คุณกำหนดนั้นเกินกว่าค่าสูงสุดที่ $1",
-       "htmlform-required": "à¸\88ำà¹\80à¸\9bà¹\87à¸\99à¸\95à¹\89อà¸\87à¸\81รอà¸\81à¸\82à¹\89อมูลนี้",
-       "htmlform-submit": "ส่งข้อมูล",
+       "htmlform-required": "à¸\95à¹\89อà¸\87à¸\81รอà¸\81à¸\84à¹\88านี้",
+       "htmlform-submit": "ส่ง",
        "htmlform-reset": "ยกเลิกการเปลื่ยนแปลง",
        "htmlform-selectorother-other": "อื่น ๆ",
        "htmlform-no": "ไม่",
index 9d7ebe9..9e88060 100644 (file)
        "resetpass-wrong-oldpass": "Nädogry wagtlaýyn ýa-da häzirki parol.\nParolyňyzy eýýäm şowlulyk bilen üýtgeden ýa-da täze wagtlaýyn parol talap eden bolmagyňyz ahmal.",
        "resetpass-temp-password": "Wagtlaýyn parol:",
        "passwordreset": "Paroly nol et",
-       "passwordreset-legend": "Paroly nol et",
        "passwordreset-username": "Ulanyjy ady:",
        "passwordreset-domain": "Domen:",
        "passwordreset-emailelement": "Ulanyjy ady: $1\nWagtlaýyn parol: $2",
        "unusedtemplateswlh": "başga çykgytlar",
        "randompage": "Çemgeldik sahypa",
        "randompage-nopages": "Aşakdaky {{PLURAL:$2|at giňişliginde|at giňişliklerinde}} hiç hili sahypa ýok: $1.",
+       "randomincategory-submit": "Git",
        "randomredirect": "Mesaýy gönükdirme",
        "randomredirect-nopages": "\"$1\" at giňişliginde hiç hili gönükdirme ýok.",
        "statistics": "Statistika",
        "nlinks": "$1 {{PLURAL:$1|çykgyt|çykgyt}}",
        "nmembers": "{{PLURAL:$1|agza|agzalar}}",
        "nrevisions": "{{PLURAL:$1|wersiýa|wersiýalar}}",
-       "nviews": "$1 {{PLURAL:$1|synlama|synlama}}",
        "specialpage-empty": "Bu habarnama üçin hiç hili netije ýok.",
        "lonelypages": "Hossarsyz sahypalar",
        "lonelypagestext": "Aşakdaky sahypalara {{SITENAME}} saýtyndaky başga sahypalardan çykgyt berilmändir ýa-da olara atanaklaýyn girizilmändirler.",
        "linksearch-pat": "Gözleg şablony:",
        "linksearch-ns": "At giňişligi:",
        "linksearch-ok": "Gözle",
-       "linksearch-text": "\"*.wikipedia.org\" ýaly çalşyrma simwollar ulanylyp bilner.<br />\nGoldanylýan protokollar: <code>$1</code>",
+       "linksearch-text": "\"*.wikipedia.org\" ýaly çalşyrma simwollar ulanylyp bilner.<br />\nGoldanylýan protokollar: $1",
        "linksearch-line": "$1 sahypasyna $2 sahypasyndan çykgyt berilýär",
        "linksearch-error": "Çalşyrma simwollar diňe hostuň adynyň başlangyjynda peýda bolup bilýär.",
        "listusersfrom": "Şunuň bilen başlaýan ulanyjylary görkez:",
index 5a26f69..5ae0a43 100644 (file)
        "createacct-benefit-heading": "{{SITENAME}} ay nilikha ng mga taong iyong katulad.",
        "createacct-benefit-body1": "{{PLURAL:$1|pagbabago|mga pagbabago}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pahina|mga pahina}}",
-       "createacct-benefit-body3": "kamakailang {{PLURAL:$1|nag-ambag|mga nag-ambag}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|kamakailang taga-ambag|mga kamakailang taga-ambag}}",
        "badretype": "Hindi magkatugma ang ipinasok mong mga password.",
        "userexists": "May gumagamit na ng ipinasok na bansag.\nPumili po ng ibang pangalan.",
        "loginerror": "Kamalian sa paglagda",
        "passwordreset": "Muling pagtatakda ng password",
        "passwordreset-text-one": "Ikumpleto ang form na ito upang makatanggap ng pansamantalang password sa pamamagitan ng email.",
        "passwordreset-text-many": "{{PLURAL:$1|Ipasok sa isa sa mga field upang makatanggap ng isang pansamantalang password sa pamamagitan ng email.}}",
-       "passwordreset-legend": "Itakdang muli ang password",
        "passwordreset-disabled": "Hindi pinagagana sa wiking ito ang muling mga pagtatakda ng password.",
        "passwordreset-emaildisabled": "Hindi pinagana ang email features sa wiking ito.",
        "passwordreset-username": "Pangalan ng tagagamit:",
        "currentrev": "Pangkasalukuyang pagbabago",
        "currentrev-asof": "Pangkasalukuyang pagbabago mula noong $1",
        "revisionasof": "Pagbabago mula noong $1",
-       "revision-info": "Pagbabago mula noong $1 ni $2",
+       "revision-info": "Pagbabago mula noong $1 ni {{GENDER:$6|$2}}$7",
        "previousrevision": "← Lumang pagbabago",
        "nextrevision": "Bagong pagbabago →",
        "currentrevisionlink": "Pangkasalukuyang pagbabago",
        "unusedtemplateswlh": "ibang mga ugnay",
        "randompage": "Pahinang walang-pili",
        "randompage-nopages": "Walang mga pahina sa sumusunod na {{PLURAL:$2|ngalan-espasyo|mga ngalan-espasyo}}: $1.",
+       "randomincategory-submit": "Gawin na",
        "randomredirect": "Pagkargang walang-pili",
        "randomredirect-nopages": "Walang mga pagkarga sa ngalan-espasyong \"$1\".",
        "statistics": "Mga estadistika",
        "nlinks": "$1 {{PLURAL:$1|ugnay|mga ugnay}}",
        "nmembers": "$1 {{PLURAL:$1|kasapi|mga kasapi}}",
        "nrevisions": "$1 {{PLURAL:$1|pagbabago|mga pagbabago}}",
-       "nviews": "$1 {{PLURAL:$1|pagtingin|mga pagtingin}}",
        "nimagelinks": "Ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}",
        "ntransclusions": "ginamit sa $1 {{PLURAL:$1|pahina|mga pahina}}",
        "specialpage-empty": "Walang resulta para sa ulat na ito.",
        "linksearch-pat": "Huwaran ng hanap",
        "linksearch-ns": "Pangalang espasyo",
        "linksearch-ok": "Hanapin",
-       "linksearch-text": "Maaaring gamitin ang mga \"barahang pamalit\" na katulad ng \"*.wikipedia.org\".\nKailangan ng kahit na isang nasasakupang mataas ang kaantasan, halimbawa na ang \"*.org\".<br />\nSinusuportahang mga protokolo: <code>$1</code> (huwag idagdag ang anuman sa mga ito sa paghahanap mo).",
+       "linksearch-text": "Maaaring gamitin ang mga \"barahang pamalit\" na katulad ng \"*.wikipedia.org\".\nKailangan ng kahit na isang nasasakupang mataas ang kaantasan, halimbawa na ang \"*.org\".<br />\nSinusuportahang mga protokolo: $1 (huwag idagdag ang anuman sa mga ito sa paghahanap mo).",
        "linksearch-line": "$1 nakakawing/nakaugnay mula sa $2",
        "linksearch-error": "Lilitaw lamang ang mga \"barahang-pamalit\" (''wildcard'') sa simula ng pangunahin/punong-abalang pangalan.",
        "listusersfrom": "Ipakita ang mga tagagamit na nagsisimula sa:",
        "tooltip-pt-logout": "Umalis sa pagkaka-login",
        "tooltip-pt-createaccount": "Hinihikayat kang lumikha ng kuwenta at lumigda; gayunpaman, hindi ito kinakailangan",
        "tooltip-ca-talk": "Usapan tungkol sa nilalaman ng pahinang ito",
-       "tooltip-ca-edit": "Maaaring baguhin ang pahinang ito. Paki gamit ang buton ng paunang tingin bago itala.",
+       "tooltip-ca-edit": "Baguhin ang pahinang ito",
        "tooltip-ca-addsection": "Magsimula ng bagong seksiyon",
        "tooltip-ca-viewsource": "Nakasanggalang ang pahinang ito.\nMaaari mong tingnan ang batayan nito.",
        "tooltip-ca-history": "Mga nakaraang bersiyon ng pahinang ito.",
        "logentry-patrol-patrol": "Minarkahan ni $1 ang rebisyong $4 ng pahinang $3 bilang napatrolya na",
        "logentry-patrol-patrol-auto": "Kusang minarkahan ni $1 ang rebisyong $4 ng pahinang $3 bilang napatrolya na",
        "logentry-newusers-newusers": "Nilikha ang kuwenta ng tagagamit na $1",
-       "logentry-newusers-create": "{{GENDER:$2|Inilikha}} ang kuwentang $1 ng tagagamit",
+       "logentry-newusers-create": "{{GENDER:$2|Inilikha}} ang account na $1 ng tagagamit",
        "logentry-newusers-create2": "Lumikha si $1 ng isang kuwenta ng tagagamit na $3",
        "logentry-newusers-autocreate": "Automatikong {{GENDER:$2|inilikha}} ang account ng tagagamit na $1",
+       "logentry-upload-upload": "{{GENDER:$2|Ikinarga}} ni $1 ang $3",
        "rightsnone": "(wala)",
        "revdelete-summary": "buod ng pagbabago",
        "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index 8797346..b52f41a 100644 (file)
                        "Nighteagle2000",
                        "Watermelon juice",
                        "Ömer Berkay",
-                       "Demircimehmed"
+                       "Demircimehmed",
+                       "Uğurkent",
+                       "Kincki",
+                       "McAang",
+                       "Captantrips"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "passwordreset": "Parola sıfırlama",
        "passwordreset-text-one": "Parolanızı sıfırlamak için bu formu doldurun.",
        "passwordreset-text-many": "{{PLURAL:$1|E-posta ile geçici bir parola almak için alanlardan birini doldurun.}}",
-       "passwordreset-legend": "Şifreyi sıfırla",
        "passwordreset-disabled": "Parola sıfırlamaları bu wiki üzerinde devre dışı bırakıldı.",
        "passwordreset-emaildisabled": "Bu wiki'deki e-posta özellikleri devre dışı bırakıldı.",
        "passwordreset-username": "Kullanıcı adı:",
        "resettokens": "Anahtarları sıfırla",
        "resettokens-text": "Burada hesabınızla ilişkili bazı özel verilere erişim izin anahtarları sıfırlayabilirsiniz.\n\n\nSiz yanlışlıkla bunları paylaştıysanız veya hesabınızda bir bozulma varsa bunu yapmalısınız.",
        "resettokens-no-tokens": "Sıfırlamak için hiç bir belirteç bulunmuyor.",
-       "resettokens-legend": "Anahtarları sıfırla",
        "resettokens-tokens": "Belirteçler:",
        "resettokens-token-label": "$1 (geçerli değer: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|İzleme listenizdeki sayfa değişiklikleri]] için web beslemeleri (Atom/RSS) anahtarı",
        "upload-too-many-redirects": "URL çok fazla yönlendirme içeriyor",
        "upload-http-error": "Bir HTTP hatası oluştu: $1",
        "upload-copy-upload-invalid-domain": "Kopya yüklemeler bu etki alanında mevcut değil.",
+       "upload-dialog-button-cancel": "İptal",
+       "upload-dialog-button-save": "Kaydet",
+       "upload-dialog-button-upload": "Yükle",
+       "upload-dialog-label-select-file": "Dosya seç",
+       "upload-dialog-label-infoform-title": "Ayrıntılar",
+       "upload-dialog-label-infoform-name": "Ad",
+       "upload-dialog-label-infoform-description": "Açıklama",
+       "upload-dialog-label-usage-title": "Kullanımı",
+       "upload-dialog-label-usage-filename": "Dosya adı",
        "backend-fail-stream": "$1 dosyası okunamadı.",
        "backend-fail-backup": "\"$1\" dosyası yedeklenemedi.",
        "backend-fail-notexists": "$1 dosyası mevcut değil.",
        "randomincategory-nopages": "[[:Category:$1|$1]] kategorisinde hiç sayfa yok.",
        "randomincategory-category": "Kategori:",
        "randomincategory-legend": "Kategoriden rastgele sayfa",
+       "randomincategory-submit": "Git",
        "randomredirect": "Rastgele yönlendirme",
        "randomredirect-nopages": "\"$1\" ad alanında hiç bir yönlendirme yok.",
        "statistics": "İstatistikler",
        "categoriesfrom": "Şununla başlayan kategorileri görüntüle:",
        "special-categories-sort-count": "sayılarına göre sırala",
        "special-categories-sort-abc": "alfabetik olarak sırala",
-       "deletedcontributions": "Silinen kullanıcı katkıları",
-       "deletedcontributions-title": "Silinen kullanıcı katkıları",
+       "deletedcontributions": "Kullanıcının silinen katkıları",
+       "deletedcontributions-title": "Kullanıcının silinen katkıları",
        "sp-deletedcontributions-contribs": "katkılar",
        "linksearch": "Dış bağlantı arama",
        "linksearch-pat": "Motif ara:",
        "linksearch-ns": "Ad alanı:",
        "linksearch-ok": "Ara",
-       "linksearch-text": "\"*.wikipedia.org\" gibi jokerler kullanılabilir.\nEn az bir üst-seviye alan gerekir, örneğin \"*.org\".<br />\nDesteklenen {{PLURAL:$2|iletişim kuralı|iletişim kuralları}}: <code>$1</code> (herhangi bir iletişim kuralı belirtmezseniz http:// otomatik olarak eklenir).",
+       "linksearch-text": "\"*.wikipedia.org\" gibi jokerler kullanılabilir.\nEn az bir üst-seviye alan gerekir, örneğin \"*.org\".<br />\nDesteklenen {{PLURAL:$2|iletişim kuralı|iletişim kuralları}}: $1 (herhangi bir iletişim kuralı belirtmezseniz http:// otomatik olarak eklenir).",
        "linksearch-line": "$1'e $2'den bağlantı verilmiş",
        "linksearch-error": "Jokerler sadece ana makine adının başında görünebilir.",
        "listusersfrom": "Şununla başlayan kullanıcıları görüntüle:",
        "emailuser": "Bu kullanıcıya e-posta gönder",
        "emailuser-title-target": "Bu {{GENDER:$1|kullanıcıya}} e-posta gönder",
        "emailuser-title-notarget": "Kullanıcı e-posta",
-       "emailpage": "Kullanıcıya e-posta gönder",
        "emailpagetext": "Bu {{GENDER:$1|kullanıcıya}} e-posta iletisi göndermek için aşağıdaki formu kullanabilirsiniz.\n[[Special:Preferences|Kullanıcı tercihlerinizde]] girdiğiniz e-posta adresiniz, e-postanın \"From (Kimden)\" adresinde görünecektir, bu yüzden alıcı size doğrudan yanıt verebilecektir.",
        "defemailsubject": "\"$1\" kullanıcısından {{SITENAME}} e-postası",
        "usermaildisabled": "Kullanıcı e-postası devre dışı",
        "emailccsubject": "$1'e gönderdiğiniz mesajın kopyası: $2",
        "emailsent": "E-posta gönderildi",
        "emailsenttext": "E-postanız gönderildi.",
-       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" (\"{{int:emailpage}}\") fonksiyonu ile gönderilmiştir.",
+       "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" (\"{{int:emailuser}}\") fonksiyonu ile gönderilmiştir.",
        "usermessage-summary": "Sistem mesajı bırakın.",
        "usermessage-editor": "Sistem habercisi",
        "watchlist": "İzleme listesi",
        "rollback-success": "$1 tarafından yapılan değişiklikler geri alınarak;\n$2 tarafından değiştirilmiş önceki sürüme geri dönüldü.",
        "sessionfailure-title": "Oturum başarısızlığı",
        "sessionfailure": "Giriş oturumunuzla ilgili bir sorun var gibi görünüyor;\nbu eylem, oturum gaspına karşı önlem olarak iptal edildi.\nLütfen \"geri\" gidin ve geldiğiniz sayfayı yeniden yükleyin, sonra tekrar deneyin.",
+       "changecontentmodel-title-label": "Sayfa başlığı",
+       "changecontentmodel-model-label": "Yeni içerik modeli",
+       "changecontentmodel-reason-label": "Gerekçe:",
+       "changecontentmodel-success-title": "İçerik modeli değiştirildi",
+       "changecontentmodel-success-text": "İçerik türü [[:$1]] olarak değiştirildi.",
+       "logentry-contentmodel-change-revertlink": "Eski haline döndür",
+       "logentry-contentmodel-change-revert": "Eski haline döndür",
        "protectlogpage": "Koruma kayıtları",
        "protectlogtext": "Aşağıdaki, sayfa korumalarına değişikliklerin bir listesidir.\nŞu anda uygulanan sayfa korumaları için [[Special:ProtectedPages|koruma altına alınmış sayfalar listesine]] bakabilirsiniz.",
        "protectedarticle": "\"[[$1]]\" koruma altında alındı",
        "sp-contributions-newbies-sub": "Yeni kullanıcılar için",
        "sp-contributions-newbies-title": "Yeni hesaplar için kullanıcı katkıları",
        "sp-contributions-blocklog": "Engel kaydı",
-       "sp-contributions-suppresslog": "Silinen kullanıcı katkıları",
-       "sp-contributions-deleted": "silinen kullanıcı katkıları",
+       "sp-contributions-suppresslog": "kullanıcının silinen katkıları",
+       "sp-contributions-deleted": "kullanıcının silinen katkıları",
        "sp-contributions-uploads": "yüklenenler",
        "sp-contributions-logs": "kayıtlar",
        "sp-contributions-talk": "mesaj",
        "tooltip-pt-logout": "Sistemden çık",
        "tooltip-pt-createaccount": "Bir hesap oluşturup oturum açmanız tavsiye edilmektedir ancak bu zorunlu değildir",
        "tooltip-ca-talk": "İçerik ile ilgili tartışma",
-       "tooltip-ca-edit": "Bu sayfayı değiştirebilirsiniz. Lütfen kaydetmeden önce önizleme düğmesini kullanın.",
+       "tooltip-ca-edit": "Bu sayfayı düzenleyin",
        "tooltip-ca-addsection": "Yeni bir altbaşlık aç",
        "tooltip-ca-viewsource": "Bu sayfa koruma altında. Sadece kaynağını görebilirsiniz.",
        "tooltip-ca-history": "Bu sayfanın geçmiş sürümleri",
        "tooltip-ca-watch": "Bu sayfayı izleme listenize ekleyin",
        "tooltip-ca-unwatch": "Bu sayfayı izleme listenizden çıkarın",
        "tooltip-search": "{{SITENAME}} içinde ara",
-       "tooltip-search-go": "Eğer varsa, tam bu addaki bir sayfaya git",
+       "tooltip-search-go": "Eğer varsa, aynı isimli sayfaya gidin",
        "tooltip-search-fulltext": "Sayfalarda bu metni ara",
        "tooltip-p-logo": "Ana sayfayı ziyaret edin",
        "tooltip-n-mainpage": "Ana sayfaya git",
        "tooltip-ca-nstab-main": "İçerik sayfasını göster",
        "tooltip-ca-nstab-user": "Kullanıcı sayfasını göster",
        "tooltip-ca-nstab-media": "Medya sayfasını göster",
-       "tooltip-ca-nstab-special": "Bu özel sayfa olduğu için üzerinde değişiklik yapamazsınız.",
+       "tooltip-ca-nstab-special": "Bu bir özel sayfadır ve düzenleme yapılamaz",
        "tooltip-ca-nstab-project": "Proje sayfasını göster",
        "tooltip-ca-nstab-image": "Dosya sayfasını göster",
        "tooltip-ca-nstab-mediawiki": "Sistem mesajını göster",
        "spam_reverting": "$1 ile bağlantı içermeyen son sürüme geri dönülüyor",
        "spam_blanking": "Tüm revizyonlar $1 sayfasına bağlantı içeriyor, boşaltılıyor",
        "spam_deleting": "Tüm revizyonlar $1 sayfasına bağlantı içeriyor, siliniyor",
-       "simpleantispam-label": "Anti-spam denetimi.\nBunu '''doldurMAyın'''!",
+       "simpleantispam-label": "Anti-spam denetimi.\nBunu <strong>doldurmayın</strong>!",
        "pageinfo-title": "Bilgi için \"$1\"",
        "pageinfo-not-current": "Üzgünüz, eski sürümler için bu bilgileri sağlamamız mümkün değildir.",
        "pageinfo-header-basic": "Temel bilgiler",
        "version-libraries": "Yüklü kütüphaneler",
        "version-libraries-library": "Kütüphane",
        "version-libraries-version": "Sürüm",
+       "version-libraries-license": "Lisans",
+       "version-libraries-description": "Açıklama",
+       "version-libraries-authors": "Yazarlar",
        "redirect": "Dosya, kullanıcı, sayfa ya da revizyon kimliği ile yönlendirme",
        "redirect-legend": "Bir dosya veya sayfaya yönlendirme",
        "redirect-summary": "Bu özel sayfa sizi bir dosya (dosya adı verilen), bir sayfa (bir revizyon ya da sayfa ID'si verilen) veya bir kullanıcı sayfasının (sayısal kullanıcı kimliği verilen) adresine yönlendirir. Kullanım: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], ya da  [[{{#Special:Redirect}}/user/101]].",
        "htmlform-cloner-create": "Daha fazla ekle",
        "htmlform-cloner-delete": "Sil",
        "htmlform-cloner-required": "En az bir değer gereklidir.",
+       "htmlform-title-not-creatable": "\"$1\"oluşturulabilir bir sayfa ismi değil.",
+       "htmlform-title-not-exists": "[[:$1]] mevcut değil",
+       "htmlform-user-not-exists": "<strong>$1</strong> mevcut değil.",
+       "htmlform-user-not-valid": "<strong>$1</strong> geçerli bir kullanıcı ismi değildir.",
        "sqlite-has-fts": "$1 tam-metin arama desteği ile",
        "sqlite-no-fts": "$1 tam-metin arama desteği olmaksızın",
        "logentry-delete-delete": "$1 $3 sayfasını {{GENDER:$2|sildi}}",
        "logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
        "logentry-move-move_redir-noredirect": "$1, $3 sayfasını bir yönlendirme üzerine yönlendirme bırakmadan $4 olarak {{GENDER:$2|taşıdı}}",
        "logentry-patrol-patrol": "$1, $3 sayfasının $4 revizyonunu kontrol edildi olarak {{GENDER:$2|işaretledi}}",
-       "logentry-patrol-patrol-auto": "$1, $3 sayfasının $4 sürümümü otomatik olarak {{GENDER:$2|kontrol etti}}",
+       "logentry-patrol-patrol-auto": "$1, $3 sayfasının $4 sürümünü otomatik olarak {{GENDER:$2|kontrol etti}}",
        "logentry-newusers-newusers": "Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}",
        "logentry-newusers-create": "Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}",
        "logentry-newusers-create2": "$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}}",
        "special-characters-group-khmer": "Kmer",
        "special-characters-title-endash": "tire",
        "special-characters-title-emdash": "uzun çizgi",
-       "special-characters-title-minus": "Eksi işareti"
+       "special-characters-title-minus": "Eksi işareti",
+       "mw-widgets-titleinput-description-new-page": "sayfa henüz mevcut değil",
+       "mw-widgets-titleinput-description-redirect": "$1'e yönlendirildi"
 }
index c9b0a5a..fe9ec13 100644 (file)
@@ -22,7 +22,9 @@
                        "Умар",
                        "아라",
                        "Derslek",
-                       "Macofe"
+                       "Macofe",
+                       "Selimcan",
+                       "Исмаил Садуев"
                ]
        },
        "tog-underline": "Сылтамаларның астына сызу:",
        "category-empty": "''Бу төркем әлегә буш.''",
        "hidden-categories": "{{PLURAL:$1|1=Яшерен төркем|Яшерен төркемнәр}}",
        "hidden-category-category": "Яшерен төркемнәр",
-       "category-subcat-count": "{{PLURAL:$2|Бу төркемдә түбәндәге төркемчә генә бар.|$2 төркемчәдән {{PLURAL:$1|$1 төркемчә күрсәтелгән}}.}}",
+       "category-subcat-count": "{{PLURAL:$2|1=Әлеге төркем бары тик бу астөркемне генә үз өченә ала.|Әлеге төркемдә $2 астөркемдән бары тик $1 {{PLURAL:$1|астөркем}} генә күрсәтелгән.}}",
        "category-subcat-count-limited": "Бу төркемдә {{PLURAL:$1|$1 төркемчә}} бар.",
-       "category-article-count": "{{PLURAL:$2|Бу төркемдә бер генә бит бар.|Төркемдәге $2 биттән {{PLURAL:$1|$1 күрсәтелде}}.}}",
+       "category-article-count": "{{PLURAL:$2|1=Әлеге төркемдә бер генә бит бар.|Әлеге төркемнең $2 {{PLURAL:$2|битеннән}} {{PLURAL:$1|$1 бит}} кенә курсәтелгән.}}",
        "category-article-count-limited": "Бу төркемдә {{PLURAL:$1|$1 бит}} бар.",
-       "category-file-count": "{{PLURAL:$2|Бу төркемдә бер генә файл бар.|Төркемдәге $2 файлдан {{PLURAL:$1|$1 күрсәтелде}}.}}",
+       "category-file-count": "{{PLURAL:$2|1=Әлеге төркемдә бер генә файл бар.|Әлеге төркемдә $2 {{PLURAL:$2|файлдан}} {{PLURAL:$1|$1 файл}} гына курсәтелгән.}}",
        "category-file-count-limited": "Бу төркемдә {{PLURAL:$1|$1 файл}} бар.",
        "listingcontinuesabbrev": "дәвамы",
        "index-category": "Индексланган битләр",
        "newwindow": "(яңа тәрәзәдә ачыла)",
        "cancel": "Баш тарту",
        "moredotdotdot": "Дәвамы…",
-       "morenotlisted": "Ð\91аÑ\88ка Ð±ÐµÑ\80ни Ð´Ó\99 Ñ\8eк...",
+       "morenotlisted": "Ð\98Ñ\81емлек Ñ\82Ñ\83лÑ\8b Ñ\82үгел.",
        "mypage": "Бит",
        "mytalk": "Бәхәс бите",
        "anontalk": "Бу IP адресы өчен бәхәс бите",
        "qbfind": "Эзләү",
        "qbbrowse": "Карау",
        "qbedit": "Үзгәртү",
-       "qbpageoptions": "Ð\91Ñ\83 Ð±Ð¸Ñ\82",
+       "qbpageoptions": "Ð\90гÓ\80онан Ñ\82одаÑ\80Ñ\88",
        "qbmyoptions": "Битләрем",
        "faq": "ЕБС",
        "faqpage": "Project:ЕБС",
        "history": "Битнең тарихы",
        "history_short": "Тарих",
        "updatedmarker": "соңгы керүемнән соң яңартылган",
-       "printableversion": "Басма версиясе",
+       "printableversion": "Басма юрама",
        "permalink": "Даими сылтама",
        "print": "Бастыру",
        "view": "Карау",
        "nstab-project": "Проект бите",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Хәбәр",
-       "nstab-template": "Үрнәк",
+       "nstab-template": "Калып",
        "nstab-help": "Ярдәм",
        "nstab-category": "Төркем",
        "nosuchaction": "Мондый гамәл юк",
        "createacct-email-ph": "Электрон почта юлламагызны языгыз",
        "createaccountmail": "электрон почта аша",
        "createaccountreason": "Сәбәп:",
+       "createacct-captcha": "Саклыкны тикшерү",
+       "createacct-imgcaptcha-ph": "Өстә күрсәтелгән текстны кертегез",
        "createacct-submit": "Хисап язмасы төзү",
        "createacct-benefit-heading": "{{SITENAME}} — сезнең шикелле кешеләрнең хезмәте.",
        "createacct-benefit-body1": "{{PLURAL:$1|төзәтмә}}",
        "resetpass-wrong-oldpass": "Ялгыш серсүз.\nСез серсүзегезне үзгәрткән яисә яңа вакытлы серсүз сораткан булырга мөмкинсез.",
        "resetpass-temp-password": "Вакытлы серсүз:",
        "passwordreset": "Серсүзне бетерү",
-       "passwordreset-legend": "Серсүзне яңадан кую",
        "passwordreset-disabled": "Бу викида серсүз бетереп булмый",
        "passwordreset-username": "Кулланучы исеме:",
        "passwordreset-domain": "Домен:",
        "preview": "Алдан карау",
        "showpreview": "Алдан карау",
        "showdiff": "Кертелгән үзгәртүләр",
-       "anoneditwarning": "'''Игътибар''': Сез системага кермәгәнсез. IP адресыгыз бу битнең тарихына язылачак.",
+       "anoneditwarning": "<strong>Игътибар!</strong> Сез сайтта теркәлмәдегез. Әгәрдә сез нинди дә булсә төзәтмәләр  яисә үзгәртүләр кертсәгез, сезне IP-адрес башкаларга да курсәтеләчәк. Сайтка <strong>[$1 керсәгез]</strong> яки <strong>[$2 кулланучы язмасын төзесәгез]</strong>, сез керткән үзгәртүләр яезнен кулланучы язмагызга бәйләнгән була, шулай ук башка мөмкинлекләр дә туачак.",
        "anonpreviewwarning": "''Сез системада теркәлмәдегез.Сезнең тарафтан эшләнгән барлык үзгәртүләр дә сезнең IP-юлламагызны саклауга китерә.''",
        "missingsummary": "'''Искәртү.''' Сез үзгәртүгә кыскача тасвирлау язмадыгыз. Сез «Битне саклау» төймәсенә тагын бер тапкыр бассагыз, үзгәртүләр тасвирламасыз сакланачак.",
        "missingcommenttext": "Аска тасвирлама язуыгыз сорала.",
        "currentrevisionlink": "Хәзерге юрама",
        "cur": "хәзерге",
        "next": "киләсе",
-       "last": "баÑ\8f.",
+       "last": "алдагÑ\8b",
        "page_first": "беренче",
        "page_last": "соңгы",
        "histlegend": "Аңлатмалар: '''({{int:cur}})''' = хәзерге юрамадан аерымлыклар, '''({{int:last}})''' = баягы юрамадан аерымлыклар, '''{{int:minoreditletter}}''' = кече үзгәртүләр.",
        "mergelog": "Берләштерүләр көндәлеге",
        "revertmerge": "Бүлү",
        "history-title": "$1 битенең үзгәртү тарихы",
-       "difference-title": "$1 — юрамалар арасындагы аермалар",
+       "difference-title": "«$1» битенең юрамалары арасындагы аермалар",
        "lineno": "$1 юл:",
        "compareselectedversions": "Сайланган юрамаларны чагыштыру",
        "showhideselectedversions": "Сайланган юрамаларны күрсәтү/яшерү",
        "prevn": "алдагы {{PLURAL:$1|$1}}",
        "nextn": "чираттагы {{PLURAL:$1|$1}}",
        "prevn-title": "Алдагы $1  {{PLURAL:$1|язма}}",
-       "nextn-title": "Киләсе $1 {{PLURAL:$1|язма|язма}}",
+       "nextn-title": "{{PLURAL:$1|Киләсе $1 язма}}",
        "shown-title": "Сәхифәдә $1 {{PLURAL:$1|1=язма|язма}} күрсәтелсен",
        "viewprevnext": "Күрсәтелүе: ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "<strong>Бу вики-проектта «[[:$1]]» исемле бит бар инде</strong>{{PLURAL:$2|0=|Башка эзләү нәтиҗәләрен дә карап ал.}}",
-       "searchmenu-new": "'''«[[:$1]]»  исемле яңа бит ясау'''",
-       "searchprofile-articles": "Төп битләр (мәкаләләр)",
+       "searchmenu-new": "<strong>«Әлеге [[:$1]]» вики-проектта бит ясарга!</strong>\n{{PLURAL:$2|0=|Шулай ук, эзләү ярдәмендә табылган битне карагыз.|Шулай ук, эзләү ярдәмендә табылган битләрне карагыз.}}",
+       "searchprofile-articles": "Төп битләр",
        "searchprofile-images": "Мультимедиа",
        "searchprofile-everything": "Һәркайда",
        "searchprofile-advanced": "Киңәйтелгән",
        "searchrelated": "бәйле",
        "searchall": "барлык",
        "showingresults": "Аста № '''$2''' {{PLURAL:$1|башлап}} '''$1''' {{PLURAL:$1|результат}} күрсәтелгән.",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> нәтиҗәдән <strong>$1</strong>| <strong>$3</strong> нәтиҗәләрдән <strong>$1 — $2</strong>}}",
        "search-nonefound": "Сорауга туры килгән нәтиҗәләр табылмады.",
        "powersearch-legend": "Өстәмә эзләү",
        "powersearch-ns": "исемнәрендә эзләү",
        "badsiglength": "Имзагыз бигрәк озын.\nУл $1 {{PLURAL:$1|хәрефтән}} күбрәк булырга тиеш түгел.",
        "yourgender": "Җенес:",
        "gender-unknown": "билгесез",
-       "gender-male": "Ð\98Ñ\80",
-       "gender-female": "ХаÑ\82Ñ\8bн",
+       "gender-male": "Ð\92ики-биÑ\82лÓ\99Ñ\80не Ð¸Ñ\80-аÑ\82 Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ó\99",
+       "gender-female": "Ð\92ики-биÑ\82лÓ\99Ñ\80не Ñ\85аÑ\82Ñ\8bн-кÑ\8bз Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ó\99",
        "prefs-help-gender": "Мәҗбүри түгел: Ул бары тик кайбер хатларда гына күренәчәк һәм бу мәгълүмат барлык кулланучыларга да билгеле булачак.",
        "email": "Электрон почта",
        "prefs-help-realname": "Чын исемегез (кирәкми): аны күрсәтсәгез, ул битне үзгәртүче күрсәтү өчен файдалаячак.",
        "right-suppressredirect": "Элекке исемнән юнәлтү ясамыйча исемне алмаштыру",
        "right-upload": "файлларны йөкләү",
        "right-reupload": "Булган файллар өстеннән язарга",
+       "right-writeapi": "язма өчен API куллану",
        "right-delete": "битләрне бетерү",
        "right-editinterface": "Кулланучы интерфейсын үзгәртү",
        "newuserlogpage": "Кулланучыларны теркәү көндәлеге",
        "action-createtalk": "бәхәс битен ясарга",
        "action-move": "бу битне күчерерге",
        "nchanges": "$1 {{PLURAL:$1|1=үзгәртү|үзгәртү}}",
+       "enhancedrc-history": "тарих",
        "recentchanges": "Соңгы үзгәртүләр",
        "recentchanges-legend": "Соңгы үзгәртүләр көйләүләре",
        "recentchanges-summary": "Бу биттә {{grammar:genitive|{{SITENAME}}}} проектының соңгы үзгәртүләре күрсәтелә.",
        "recentchanges-label-bot": "Бу үзгәртү бот белән эшләнгән",
        "recentchanges-label-unpatrolled": "Үзгәртүне әлегә тикшермәгәннәр",
        "recentchanges-label-plusminus": "Битнең зурлыгы шуның кадәрле байтка үзгәрде",
+       "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|яңа бит]])",
        "rcnotefrom": "Астарак '''$2''' башлап ('''$1''' кадәр) үзгәртүләр күрсәтелгән.",
        "rclistfrom": "$3 $2 башлап яңа үзгәртүләрне күрсәт",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|күзәтеп тора кулланучы}}]",
        "rc_categories": "Төркемнәрдә генә тора («|» бүлүче)",
        "rc_categories_any": "Һәрбер",
-       "rc-change-size-new": "ТөзÓ\99Ñ\82мÓ\99дÓ\99н Ñ\81оң ÐºÒ¯Ð»Ó\99ме: $1 {{PLURAL:$1|байÑ\82|байÑ\82|байт}}",
+       "rc-change-size-new": "Ð\9aеÑ\80Ñ\82елгÓ\99н Ò¯Ð·Ð³Ó\99Ñ\80еÑ\88лÓ\99Ñ\80 Ð±ÐµÐ»Ó\99н Ð±ÐµÑ\80гÓ\99 Ð·Ñ\83Ñ\80лÑ\8bк: $1 {{PLURAL:$1|байт}}",
        "newsectionsummary": "/* $1 */ яңа бүлек",
        "rc-enhanced-expand": "Ваклыкларны күрсәтү",
        "rc-enhanced-hide": "Ваклыкларны яшерү",
        "listfiles": "Сүрәтләр исемлеге",
        "listfiles_thumb": "Миниатюра",
        "listfiles_date": "Вакыт",
-       "listfiles_name": "Ð\90Ñ\82",
+       "listfiles_name": "Файл Ð¸Ñ\81еме",
        "listfiles_user": "Кулланучы",
        "listfiles_size": "Үлчәм",
        "listfiles_description": "Тасвир",
        "filehist-filesize": "Файлның зурлыгы",
        "filehist-comment": "Искәрмә",
        "imagelinks": "Файлны куллану",
-       "linkstoimage": "Бу файлга әлеге {{PLURAL:$1|1=бит|$1 бит}} сылтый:",
+       "linkstoimage": "{{PLURAL:$1|Киләсе $1 бит|Киләсе $1 битләр|}} әлеге файлга сылтама ясый:",
        "nolinkstoimage": "Бу файлга сылтаган битләр юк.",
        "duplicatesoffile": "{{PLURAL:$1|Әлеге $1 файл }} астагы файлның күчерелмәсе булып тора ([[Special:FileDuplicateSearch/$2|тулырак]]):",
        "sharedupload": "Бу файл $1'дан һәм башка проектларда кулланырга мөмкин.",
        "uploadnewversion-linktext": "Бу файлның яңа юрамасын йөкләү",
        "shared-repo-from": "$1 дән",
        "shared-repo": "гомуми саклагыч",
+       "upload-disallowed-here": "Сез бу файлны яңарта алмыйсыз.",
        "filerevert": "$1 юрамасына кире кайту",
        "filerevert-legend": "Файлның иске юрамасын кире кайтару",
        "filerevert-comment": "Сәбәп:",
        "nopagetitle": "Мондый бит юк",
        "nopagetext": "Күрсәтелгән бит юк.",
        "pager-newer-n": "{{PLURAL:$1|1=1 яңарак|$1 яңарак}}",
-       "pager-older-n": "{{PLURAL:$1|1=1 искерәк|$1 искерәк}}",
+       "pager-older-n": "$1 {{PLURAL:$1|искерәк}}",
        "suppress": "Яшерү",
        "booksources": "Китап чыганаклары",
        "booksources-search-legend": "Китап чыганакларыны эзләү",
        "booksources-search": "Эзләү",
        "booksources-text": "Әлеге биттә күрсәтелгән сылтамалар ярәмендә сезнең кызыксындырган китап буенча өстәмә мәгълүматлар табарга мөмкин. Болар интернет-кибетләр һәм китапханә җыентыгында эзләүче системалар.",
        "booksources-invalid-isbn": "Бирелгән ISBN саны бәлки хаталдыр. Зинһар, бирелгән саннарны яңадан тикшерегез.",
-       "specialloguserlabel": "Ð\9aÑ\83лланучы:",
+       "specialloguserlabel": "Ð\91аÑ\88каÑ\80учы:",
        "speciallogtitlelabel": "Башлам:",
        "log": "Көндәлекләр",
        "all-logs-page": "Барлык көндәлекләр",
        "alllogstext": "{{SITENAME}} сәхифәсенең гомуми көндәлекләре исемлеге.\nСез нәтиҗәләрне көндәлек төре, кулланучы исеме (хәреф зурлыгын истә тотыгыз) яки куззаллаган бит (шулай ук хәреф зурлыгын истә тотыгыз) буенча тәртипкә салырга мөмкин.",
        "logempty": "Кирәкле язмалар көндәлектә юк.",
        "allpages": "Барлык битләр",
-       "nextpage": "Ð\90лдагÑ\8b бит ($1)",
+       "nextpage": "Ð\9aилÓ\99Ñ\81е бит ($1)",
        "prevpage": "Алдагы бит ($1)",
        "allpagesfrom": "Моңа башланучы битләрне чыгару:",
        "allpagesto": "Монда чыгаруны туктату:",
        "emailuser": "Бу кулланучыга хат",
        "emailuser-title-target": "{{GENDER:$1|Кулланучыга}} электрон хат язу",
        "emailuser-title-notarget": "Кулланучыга хат җибәрү",
-       "emailpage": "Кулланучыга хат җибәрү",
        "emailpagetext": "Әлеге форма ярдәмендә {{GENDER:$1|кулланучының}} электрон почта адресына хат җибәрергә мөмкин. Җибәрелгән адрес исемендә Сезнең [[Special:Preferences|көйләнмәләрдә]] күрсәтелгән адресыгыз күрсәтеләчәк, шуның ярдәмендә Сез ул кулланучы белән турыдан-туры сөйләшә аласыз.",
        "defemailsubject": "{{SITENAME}}: хат",
        "noemailtitle": "Электрон почта адресы юк",
        "undelete-show-file-submit": "Әйе",
        "namespace": "Исемнәр мәйданы:",
        "invert": "Киресен сайлау",
+       "tooltip-invert": "Сайланган исемлектәге үзгәргәртүләр күрсәтелмәсен өчен монда тамга куегыз",
        "namespace_association": "Бәйле тирәлек",
        "tooltip-namespace_association": "Сайланган бәйле исемнәр тирәлегенә караган мәкаләләр исемлеген кабызу өчен элеге урынга тамганы куегыз",
        "blanknamespace": "(Төп)",
        "isredirect": "юнәлтү бите",
        "istemplate": "кертүләр",
        "isimage": "файл сылтамасы",
-       "whatlinkshere-prev": "{{PLURAL:$1|1=алдагы|алдагы $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|1=чираттагы|чираттагы $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|1=алдагы}} $1",
+       "whatlinkshere-next": "{{PLURAL:$1|1=киләсе}} $1",
        "whatlinkshere-links": "← сылтамалар",
        "whatlinkshere-hideredirs": "юнәлтүләрне $1",
        "whatlinkshere-hidetrans": "кертүләрне $1",
        "filemissing": "Файл табылмады",
        "thumbnail_error": "Кечкенә сүрәт төзүе хатасы: $1",
        "import": "Битләр кертү",
-       "importinterwiki": "Ð\92икиаÑ\80а кертү",
+       "importinterwiki": "Ð\91аÑ\88ка Ð²Ð¸ÐºÐ¸Ð´Ð°Ð½ кертү",
        "import-interwiki-text": "Викины һәм кертелүче битнең исемен языгыз.\nҮзгәртүләр вакыты һәм аның авторлары сакланачак.\nБөтен викиара күчерүләр [[Special:Log/import|махсус журналда]] сакланачак.",
        "import-interwiki-history": "Бу битнең барлык үзгәртү тарихын күчермәләү",
        "import-interwiki-templates": "Барлык үрнәкләрне кертү",
        "import-comment": "Искәрмә:",
        "importtext": "Зинһар өчен, битне күчерү өчен [[Special:Export|махсус корал]] кулланыгыз. Файлны дискка саклагыз, аннан соң монда йөкләгез.",
        "importstart": "Битләрне импортлау...",
-       "import-revision-count": "$1 {{PLURAL:$1|юрама|юрама|юрама}}",
+       "import-revision-count": "$1 {{PLURAL:$1|юрама}}",
        "importnopages": "Импортлау өчен битләр юк.",
        "importlogpage": "Кертү көндәлеге",
        "tooltip-pt-userpage": "Кулланучы битегез",
        "tooltip-pt-logout": "Чыгу",
        "tooltip-pt-createaccount": "Сезгә аккаунт ясарга һәм системага керергә киңәш итәбез, әмма бу мәҗбүри түгел.",
        "tooltip-ca-talk": "Битнең эчтәлеге турында бәхәс",
-       "tooltip-ca-edit": "Сез Ð±Ñ\83 Ð±Ð¸Ñ\82 Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ó\99 Ð°Ð»Ð°Ñ\81Ñ\8bз. Ð\97инһаÑ\80, Ñ\81аклаганÑ\87Ñ\8b ÐºÐ°Ñ\80ап Ð°Ð»Ñ\83нÑ\8b ÐºÑ\83лланÑ\8bгÑ\8bз.",
+       "tooltip-ca-edit": "Ð\91Ñ\83 Ð±Ð¸Ñ\82не Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82Ò¯",
        "tooltip-ca-addsection": "Яңа бүлек башлау",
        "tooltip-ca-viewsource": "Бу бит үзгәртүдән якланган. Сез аның чыганак текстын гына карый аласыз.",
        "tooltip-ca-history": "Битнең төзәтмәләр исемлеге",
        "tooltip-t-emailuser": "Бу кулланучыга хат җибәрү",
        "tooltip-t-upload": "Файлларны йөкләү",
        "tooltip-t-specialpages": "Барлык махсус битләр исемлеге",
-       "tooltip-t-print": "Бу битнең басма версиясе",
+       "tooltip-t-print": "Бу битнең басма юрамасы",
        "tooltip-t-permalink": "Битнең бу юрамасына даими сылтама",
        "tooltip-ca-nstab-main": "Мәкаләнең эчтәлеге",
        "tooltip-ca-nstab-user": "Кулланучының шәхси бите",
        "tooltip-preferences-save": "Көйләнмәләрегезне саклау",
        "tooltip-summary": "Кыска исемен кертү",
        "common.css": "/*  Монда урнаштырылган CSS башкаларында да урнашачак */",
-       "anonymous": "{{SITENAME}} сайтының аноним {{PLURAL:$1|1=кулланучысы|кулланучылары}}",
+       "anonymous": "{{grammar:genitive|{{SITENAME}}}} {{PLURAL:$1|1=Аноним кулланучысы|Аноним кулланучылары}}",
        "siteuser": "{{SITENAME}} кулланучысы $1",
        "othercontribs": "«$1» эшенә нигезләнә.",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|1=кулланучысы|кулланучылары}} $1",
+       "siteusers": "{{grammar:genitive|{{SITENAME}}}} {{PLURAL:$2|1=кулланучы|кулланучылары}} $1",
        "creditspage": "Рәхмәтләр",
        "spamprotectiontitle": "Спам фильтры",
+       "simpleantispam-label": "Анти-спам тикшерә.\nМоны <strong>ТУТЫРМАГЫЗ!</strong>",
        "pageinfo-toolboxlink": "Бит турында мәгълүмат",
        "markaspatrolledtext": "Бу мәкаләне тикшерелгән дип тамгалау",
        "markedaspatrolled": "Тикшерелгән дип тамгаланды",
        "imagemaxsize": "Рәсемнең зурлыгына чикләүләр:<br />''(тасвирлау бите өчен)''",
        "thumbsize": "Рәсемнең кечерәйтелгән юрамасы өчен:",
        "widthheight": "$1 × $2",
-       "widthheightpage": "$1 × $2, $3{{PLURAL:$1|1=бит|битләр}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|бит|битләр|бит}}",
        "file-info": "файл зурлыгы: $1, MIME-тип: $2",
        "file-info-size": "$1 × $2 нокта, файлның зурлыгы: $3, MIME тибы: $4",
        "file-nohires": "Югары ачыклык белән юрама юк.",
        "svg-long-desc": "SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3",
-       "show-big-image": "Тулы ачыклык",
+       "show-big-image": "Төп файл",
+       "show-big-image-preview": "Алдан карауның зурлыгы: $1.",
+       "show-big-image-other": "{{PLURAL:$2|1=Башка зурлык|Башка зурлыклар}}: $1.",
        "show-big-image-size": "$1 × $2 пиксель",
        "newimages": "Яңа сүрәтләр җыелмасы",
        "newimages-legend": "Фильтр",
        "metadata-fields": "Бу исемлеккә кергән метабирелмәләр кырлары рәсем битендә күрсәтелер, калганнары исә килешү буенча яшерелер.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Киңлек",
        "exif-imagelength": "Биеклек",
+       "exif-orientation": "Кадр куелышы",
+       "exif-xresolution": "Горизонталь зурлык",
+       "exif-yresolution": "Вертикаль зурлык",
+       "exif-datetime": "Файл үзгәртүләр датасы һәм вакыты",
        "exif-imagedescription": "Рәсемнең исеме",
        "exif-make": "Камераның җитештерүчесе",
        "exif-model": "Камераның төре",
        "version-specialpages": "Махсус битләр",
        "version-other": "Башка",
        "version-hook-subscribedby": "Түбәндәгеләргә язылган:",
-       "version-license": "Лицензия",
+       "version-license": "MediaWiki лицензиясе",
        "version-software": "Урнаштырылган программа белән тәэмин ителешне",
        "version-software-product": "Продукт",
        "version-software-version": "Версия",
        "fileduplicatesearch": "Бер үк файлларны эзләү",
        "fileduplicatesearch-submit": "Эзләү",
        "specialpages": "Махсус битләр",
-       "specialpages-note": "* Гади махсус битләр.\n* <strong class=\"mw-specialpagerestricted\">Чикләнелгән махсус битләр.</strong>\n* <span class=\"mw-specialpagecached\">Кешланган махсус битләр.</span>",
+       "specialpages-note": "* Гади махсус битләр.\n* <span class=\"mw-specialpagerestricted\">Чикләнелгән махсус битләр.</span>",
        "specialpages-group-maintenance": "Техник карау хисапнамәсе",
        "specialpages-group-other": "Башка махсус битләр",
-       "specialpages-group-login": "Керү / теркәлү",
+       "specialpages-group-login": "Керү / Теркәлү",
        "specialpages-group-changes": "Соңгы үзгәртүләр",
        "specialpages-group-media": "Йөкләү һәм медиа-файллар хисапнамәсе",
        "specialpages-group-users": "Кулланучылар һәм аларның хокуклары",
        "specialpages-group-highuse": "Еш кулланылучы битләр",
        "specialpages-group-pages": "Битләр исемлеге",
        "specialpages-group-pagetools": "Бит өчен җиһазлар",
-       "specialpages-group-wiki": "Ð\92ики-мәгълүмат һәм җиһазлар",
+       "specialpages-group-wiki": "Ð\9cәгълүмат һәм җиһазлар",
        "specialpages-group-redirects": "Күчерелүче махсус битләр",
        "specialpages-group-spam": "Спамга каршы кораллар",
        "blankpage": "Буш бит",
        "tags": "Гамәлдә булучы үзгәртүләр билгеләре",
        "tag-filter": "[[Special:Tags|Tag]] фильтры:",
        "tag-filter-submit": "Фильтрлау",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Билге|Билгеләр}}]]: $2)",
        "tags-title": "Теглар",
        "tags-intro": "Әлеге сәхифәдә төзәтүләрне билгеләгән, программа тәэмин итә торган теглар исемлеге һәм шул тегларның аңламнары китерелгән.",
        "tags-tag": "Тег исеме",
        "htmlform-submit": "Җибәрү",
        "htmlform-reset": "Үзгәртүләрне кире кайтару",
        "htmlform-selectorother-other": "Башка",
+       "logentry-delete-delete": "$1 $3 битен {{GENDER:$2|бетерә}}",
        "revdelete-content-hid": "эчтәлек яшерелгән",
        "revdelete-summary-hid": "төзәтмәнең тасвирламасы яшерелгән",
        "revdelete-uname-hid": "кулланучының исеме яшерелгән",
        "revdelete-uname-unhid": "кулланучының исеме ачылган",
        "revdelete-restricted": "чикләүләр идарәчеләргә дә кулланыла",
        "revdelete-unrestricted": "чикләүләр идарәчеләр өчен бетерелгән",
-       "logentry-move-move": "$1 {{GENDER:$2|итеп күчерде}} $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-move-move": "$1 $3 сәхифәсен $4 {{GENDER:$2|итеп күчерде}}",
+       "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 санлы версиясен {{GENDER:$2|тикшерде}}",
+       "logentry-patrol-patrol-auto": "$1 $3 мәкаләсенең $4 санлы версиясен автоматик рәвештә {{GENDER:$2|тикшерде}}",
+       "logentry-newusers-newusers": "{{GENDER:$2|Кулланучы}} $1 хисап язмасын төзеде",
+       "logentry-newusers-create": "{{GENDER:$2|Кулланучы}} $1 хисап язмасын төзеде",
        "logentry-newusers-create2": "$1 $3 кулланучы хисап язмасын төзеде",
        "logentry-newusers-autocreate": "Автоматик рәвештә $1 хисап язмасы төзелде.",
        "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
index 34bf7c4..a24fa92 100644 (file)
        "passwordreset": "پارولنى ئەسلىگە قايتۇرماق",
        "passwordreset-text-one": "ۋاقىتلىق پارولنى ئېلخەت ئارقىلىق قوبۇل قىلىش ئۈچۈن بۇ رامكىنى تولدۇرۇڭ.",
        "passwordreset-text-many": "{{PLURAL:$1|ئېلخەت ئارقىلىق ۋاقىتلىق پارول قوبۇل قىلىش ئۈچۈن بۆلەكتىن بىرنى تولدۇرۇڭ.}}",
-       "passwordreset-legend": "پارولنى ئەسلىگە قايتۇر",
        "passwordreset-disabled": "بۇ ۋىكىدا پارولنى ئەسلىگە قايتۇرۇش چەكلەنگەن.",
        "passwordreset-emaildisabled": "بۇ ۋىكىدا ئېلخەت ئىقتىدار چەكلەنگەن.",
        "passwordreset-username": "ئىشلەتكۈچى نامى:",
        "resettokens": "ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك",
        "resettokens-text": "سىز بۇ يەردە سىزنىڭ ھىساۋاتىڭىزگە مۇناسۋەتلىك شەخسى ئۇچۇر مەخپىيەتلىكىنى قايتا كۆرەلەيسىز.\n\nئۇ ئۇچۇرلار ھەمبەھرلىنىپ كەتسە ياكى باشقىلار ئىشلىتۋالغان بولسا، ئۇ ئۇچۇرلارنى ئەسلىگە قايتۇرۇڭ.",
        "resettokens-no-tokens": "قايتا بېكىتىدىغان ھېچقانداق ئاچقۇچلۇق بەلگە يوق.",
-       "resettokens-legend": "ئاچقۇچلۇق بەلگىلەرنى قايتا بېكىتمەك",
        "resettokens-tokens": "ئاچقۇچلۇق بەلگىلەر:",
        "resettokens-token-label": "$1 (نۆۋەتتىكى قىممىتى: $2)",
        "resettokens-watchlist-token": "[[Special:Watchlist|كۆزىتىش تىزىملىكىڭىزدىكى بەتلەر ئۆزگىرىشى]] (Atom/RSS) تور مەنبەسىنىڭ ئاچقۇچلۇق بەلگىسى",
        "randomincategory": "تۈردىكى ئىختىيارى بەت",
        "randomincategory-invalidcategory": "«$1» ئىناۋەتلىك تۈر نامى ئەمەس",
        "randomincategory-nopages": "[[:Category:$1|$1]] تۈرىدە ھىچقانداق بەت يوق.",
+       "randomincategory-submit": "كۆچۈش",
        "randomredirect": "ئىختىيارىي قايتا نىشانلانغان بەت",
        "randomredirect-nopages": "\"$1\" ئات بوشلۇقىدا قايتا نىشانلانغان بەت يوق.",
        "statistics": "ستاتىستىكا",
        "nlinks": "$1 {{PLURAL:$1|ئۇلانما|ئۇلانما}}",
        "nmembers": "$1 {{PLURAL:$1|ئەزا|ئەزا}}",
        "nrevisions": "$1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
-       "nviews": "$1 {{PLURAL:$1|زىيارەت|زىيارەت}}",
        "nimagelinks": "$1 {{PLURAL:$1|بەت|بەت}} تە ئىشلىتىلىدۇ",
        "ntransclusions": "$1 {{PLURAL:$1|بەت|بەت}} تە ئىشلىتىلدى",
        "specialpage-empty": "بۇ دوكلاتنىڭ نەتىجىسى يوق.",
        "linksearch-pat": "ئىزدەش شەكلى:",
        "linksearch-ns": "ئات بوشلۇقى:",
        "linksearch-ok": "ئىزدەش",
-       "linksearch-text": "\"wikipedia.org.*\" غا ئوخشاش ئورتاق بەلگە ئىشلىتىشكە بولىدۇ.\n </br>ئالىي دەرىجىلىك دائىرە بۇلىشى كېرەك، مەسىلەن:\"org.*\".\nقوللايدىغان{{PLURAL:$2| كېلىشىم}}: <code>$1</code>.",
+       "linksearch-text": "\"wikipedia.org.*\" غا ئوخشاش ئورتاق بەلگە ئىشلىتىشكە بولىدۇ.\n </br>ئالىي دەرىجىلىك دائىرە بۇلىشى كېرەك، مەسىلەن:\"org.*\".\nقوللايدىغان{{PLURAL:$2| كېلىشىم}}: $1.",
        "linksearch-line": "$1 بولسا $2 دىن ئۇلانغان",
        "linksearch-error": "ئورتاق بەلگەنى پەقەت ئاساسىي ئاپپارات ئاتىنىڭ باشىدىلا ئىشلەتكىلى بولىدۇ.",
        "listusersfrom": "بېرىلگەن ئىشلەتكۈچى كۆرسىتىش شەرتى:",
index b43794e..8c86f8f 100644 (file)
@@ -60,7 +60,9 @@
                        "Macofe",
                        "Alex Blokha",
                        "Lxlalexlxl",
-                       "Капитан Джон Шепард"
+                       "Капитан Джон Шепард",
+                       "Translatemyname",
+                       "Dars"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
@@ -95,7 +97,7 @@
        "tog-watchlisthideminor": "Приховати незначні редагування у списку спостереження",
        "tog-watchlisthideliu": "Приховати редагування зареєстрованих дописувачів у списку спостереження",
        "tog-watchlisthideanons": "Приховати редагування анонімних користувачів у списку спостереження",
-       "tog-watchlisthidepatrolled": "Приховати відпатрульовані правки у списку спостереження",
+       "tog-watchlisthidepatrolled": "Приховати відпатрульовані редагування у списку спостереження",
        "tog-ccmeonemails": "Надсилати мені копії листів, які я надсилаю іншим користувачам",
        "tog-diffonly": "Не показувати вміст сторінки під різницею версій",
        "tog-showhiddencats": "Показувати приховані категорії",
        "actionthrottled": "Обмеження за швидкістю",
        "actionthrottledtext": "Для боротьби зі спамом встановлено обмеження на повторне застосування цієї дії за короткий час. Ви перевищили це обмеження. Можете спробувати знов за кілька хвилин.",
        "protectedpagetext": "Ця сторінка захищена від редагування та інших дій.",
-       "viewsourcetext": "Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\82а Ñ\81копÑ\96Ñ\8eваÑ\82и Ð¿Ð¾Ñ\87аÑ\82ковий текст цієї сторінки:",
-       "viewyourtext": "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
+       "viewsourcetext": "Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\82а Ñ\81копÑ\96Ñ\8eваÑ\82и Ð²Ð¸Ñ\85Ñ\96дний текст цієї сторінки:",
+       "viewyourtext": "Ви можете переглянути та скопіювати вихідний текст <strong>Ваших редагувань</strong> на цю сторінку.",
        "protectedinterface": "Ця сторінка містить текст інтерфейсу програмного забезпечення цієї Вікі, захищений від небажаного втручання. Щоб додати або змінити переклади для всіх вікі, перейдіть до [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
        "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі.",
        "translateinterface": "Для того, щоб додати чи змінити переклад повідомлень інтерфейсу для всіх вікі-проектів, скористайтеся будь ласка проектом локалізації MediaWiki: [//translatewiki.net/ translatewiki.net].",
-       "cascadeprotected": "Сторінка захищена від змін, оскільки вона належить до {{PLURAL:$1|1=сторінки, для якої|сторінок, для яких}} установлено каскадний захист: $2",
+       "cascadeprotected": "Сторінка захищена від редагувань, оскільки вона включена на {{PLURAL:$1|1=сторінці|сторінках}}, де встановлено каскадний захист: $2",
        "namespaceprotected": "У вас нема дозволу редагувати сторінки в просторі назв «$1».",
        "customcssprotected": "У вас немає дозволу на редагування цієї CSS-сторінки, бо вона містить особисті налаштування іншого користувача.",
        "customjsprotected": "У вас немає дозволу на редагування цієї JavaScript-сторінки, бо вона містить особисті налаштування іншого користувача.",
        "createacct-benefit-body2": "{{PLURAL:$1|сторінка|сторінки|сторінок}}",
        "createacct-benefit-body3": "{{PLURAL:$1|дописувач|дописувачі|дописувачів}} цього місяця",
        "badretype": "Введені паролі не співпадають.",
+       "usernameinprogress": "Створення облікового запису для цього імені користувача уже виконується.\nБудь ласка, зачекайте.",
        "userexists": "Введене ім'я користувача вже існує.\nБудь ласка оберіть інше ім'я.",
        "loginerror": "Помилка при вході до системи",
        "createacct-error": "Помилка створення облікового запису",
        "showpreview": "Попередній перегляд",
        "showdiff": "Показати зміни",
        "blankarticle": "'''Попередження:''' Створена вами сторінка порожня.\nЯкщо Ви знову натиснете «{{int:savearticle}}», сторінку буде створено без вмісту.",
-       "anoneditwarning": "<strong>Увага!</strong> Ð\92и Ð½Ðµ Ð°Ð²Ñ\82оÑ\80изÑ\83валиÑ\81Ñ\8f Ð½Ð° Ñ\81айÑ\82Ñ\96. Ð\92аÑ\88а IP-адÑ\80еÑ\81а Ð±Ñ\83де Ð¿Ñ\83блÑ\96Ñ\87но Ð²Ð¸Ð´Ð¸Ð¼Ð°, Ñ\8fкÑ\89о Ð²Ð¸ Ð±Ñ\83деÑ\82е Ð²Ð½Ð¾Ñ\81иÑ\82и Ð±Ñ\83дÑ\8c\8fкÑ\96 Ð¿Ñ\80авки. Ð¯ÐºÑ\89о Ð²Ð¸ <strong>[$1 Ñ\83вÑ\96йдеÑ\82е]</strong> Ð°Ð±Ð¾ <strong>[$2 Ñ\81Ñ\82воÑ\80иÑ\82е Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81]</strong>, Ð¿Ñ\80авки Ð·Ð°Ð¼Ñ\96Ñ\81Ñ\82Ñ\8c Ñ\86Ñ\8cого Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð¿Ð¾Ð²'Ñ\8fзанÑ\96 Ð· Ð²Ð°Ñ\88им Ñ\96м'Ñ\8fм ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а, Ð° Ñ\82акож Ñ\83 Ð²ас з'являться інші переваги.",
+       "anoneditwarning": "<strong>Увага!</strong> Ð\92и Ð½Ðµ Ð°Ð²Ñ\82оÑ\80изÑ\83валиÑ\81Ñ\8f Ð½Ð° Ñ\81айÑ\82Ñ\96. Ð\92аÑ\88а IP-адÑ\80еÑ\81а Ð±Ñ\83де Ð¿Ñ\83блÑ\96Ñ\87но Ð²Ð¸Ð´Ð¸Ð¼Ð°, Ñ\8fкÑ\89о Ð\92и Ð±Ñ\83деÑ\82е Ð²Ð½Ð¾Ñ\81иÑ\82и Ð±Ñ\83дÑ\8c\8fкÑ\96 Ñ\80едагÑ\83ваннÑ\8f. Ð¯ÐºÑ\89о Ð\92и <strong>[$1 Ñ\83вÑ\96йдеÑ\82е]</strong> Ð°Ð±Ð¾ <strong>[$2 Ñ\81Ñ\82воÑ\80иÑ\82е Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81]</strong>, Ñ\80едагÑ\83ваннÑ\8f Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð½Ð°Ñ\82омÑ\96Ñ\81Ñ\82Ñ\8c Ð¿Ð¾Ð²'Ñ\8fзанÑ\96 Ð· Ð\92аÑ\88им Ñ\96менем ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а, Ð° Ñ\89е Ñ\83 Ð\92ас з'являться інші переваги.",
        "anonpreviewwarning": "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''",
        "missingsummary": "'''Нагадування''': Ви не дали короткого опису змін.\nНатиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.",
        "selfredirect": "<strong>Попередження:</strong> Ви створюєте перенаправлення на цю ж сторінку.\nВи могли вказати невірну цільову сторінку, або ж редагуєте хибну сторінку.\nЯкщо Ви натиснете \"{{int:savearticle}}\" ще раз, перенаправлення буде створено.",
        "blockedtext": "'''Ваш обліковий запис або IP-адреса заблоковані.'''\n\nБлокування виконане адміністратором $1.\nЗазначена наступна причина: ''$2''.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністратору, якщо ви не зареєстровані або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із заблокованих користувачів. Адміністратор ($1), що її заблокував, зазначив наступну причину блокування:\n\n:''$2''\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністраторові, якщо ви не зареєстровані у проекті або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте його у своїх запитах.",
        "blockednoreason": "не вказано причини",
-       "whitelistedittext": "Ви повинні $1 щоб редагувати сторінки.",
+       "whitelistedittext": "Ви повинні $1, щоб редагувати сторінки.",
        "confirmedittext": "Ви повинні підтвердити вашу адресу електронної пошти перед редагуванням сторінок.\nБудь-ласка вкажіть і підтвердіть вашу електронну адресу на [[Special:Preferences|сторінці налаштувань]].",
        "nosuchsectiontitle": "Не вдається знайти розділ",
        "nosuchsectiontext": "Ви намагаєтесь редагувати розділ, якого не існує.\nМожливо, він був перейменований або вилучений, поки ви переглядали сторінку.",
        "session_fail_preview": "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.\nЯкщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову.'''",
        "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, — спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
        "token_suffix_mismatch": "'''Ваше редагування було відхилене, оскільки ваша програма неправильно обробляє знаки пунктуації у вікні редагування. Редагування було скасоване для запобігання спотворенню тексту статті.\nПодібні проблеми можуть виникати при використанні анонімізуючих веб-проксі, що містять помилки.'''",
-       "edit_form_incomplete": "'''Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені ваші правки і спробуйте ще раз.'''",
+       "edit_form_incomplete": "<strong>Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені Ваші редагування і спробуйте ще раз.</strong>",
        "editing": "Редагування $1",
        "creating": "Створення $1",
        "editingsection": "Редагування $1 (розділ)",
        "readonlywarning": "'''Попередження: База даних заблокована на обслуговування, тому, на даний момент, ви не можете записати ваші зміни.\nМожливо, вам варто скопіювати текст у файл на вашому комп'ютері й зберегти його на пізніше.'''\n\nАдміністратор, що заблокував базу даних, залишив наступне пояснення: $1",
        "protectedpagewarning": "'''Попередження: Ця сторінка була захищена від змін так, що тільки користувачі з правами адміністратора можуть її редагувати.'''\nОстанній запис журналу наведений нижче для довідки:",
        "semiprotectedpagewarning": "'''Зауваження:''' Ця сторінка захищена так, що її можуть редагувати тільки зареєстровані користувачі.\nОстанній запис журналу наведений нижче для довідки:",
-       "cascadeprotectedwarning": "'''Попередження:''' Цю сторінку можуть редагувати лише користувачі з групи «Адміністратори», оскільки вона включена {{PLURAL:$1|1=до сторінки, для якої|до наступних сторінок, для яких}} активовано каскадний захист:",
+       "cascadeprotectedwarning": "<strong>Попередження:</strong> Цю сторінку можуть редагувати лише користувачі з правами адміністратора, оскільки вона включена на {{PLURAL:$1|1=сторінці|сторінках}}, де встановлено каскадний захист:",
        "titleprotectedwarning": "'''Попередження. Ця сторінка була захищена так, що для її створення потрібні [[Special:ListGroupRights|особливі права]].'''\nОстанній запис журналу наведений нижче для довідки:",
        "templatesused": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} на цій сторінці:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} у цьому попередньому перегляді:",
        "undo-norev": "Редагування не може бути скасоване, бо його не існує або було вилучено.",
        "undo-nochange": "Схоже, редагування вже було скасовано.",
        "undo-summary": "Скасування редагування № $1 користувача [[Special:Contribs/$2|$2]] ([[User talk:$2|обговорення]])",
-       "undo-summary-username-hidden": "СкаÑ\81Ñ\83ваÑ\82и Ð¿Ñ\80авкÑ\83 $1, виконану прихованим користувачем",
+       "undo-summary-username-hidden": "СкаÑ\81Ñ\83ваÑ\82и Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e $1, виконану прихованим користувачем",
        "cantcreateaccounttitle": "Неможливо створити обліковий запис",
        "cantcreateaccount-text": "Створення облікових записів із цієї IP-адреси ('''$1''') було заблоковане [[User:$3|користувачем $3]].\n\n$3 зазначив таку причину: ''$2''",
        "cantcreateaccount-range-text": "Створення облікового запису із IP-адрес у діапазоні  '''$1''', який включає вашу IP-адресу ('''$4'''), було заблоковано користувачем [[User:$3|$3]].\n\nКористувач $3 вказав як причину ''$2''",
        "revdelete-selected-text": "{{PLURAL:$1|Вибрана редакція|Вибрані редакції}} із [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Вибрана версія файлу|Вибрані версії файлу}} із [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|1=Обраний запис|Обрані записи}} журналу:",
-       "revdelete-text-text": "Видалені версії будуть як і раніше, показані в історії сторінки, але частини їх вмісту будуть недоступні для учасників.",
-       "revdelete-text-file": "Видалені версії файлу будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для учасників.",
-       "logdelete-text": "Ð\92идаленÑ\96 Ð¿Ð¾Ð´Ñ\96Ñ\97 Ð² Ð¶Ñ\83Ñ\80налÑ\96 Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ñ\8fк Ñ\96 Ñ\80анÑ\96Ñ\88е Ð²Ð¸Ð´Ð½Ð¾ Ð² Ð¶Ñ\83Ñ\80налаÑ\85, Ð°Ð»Ðµ Ñ\87аÑ\81Ñ\82ини Ñ\97Ñ\85 Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð»Ñ\8f Ñ\83Ñ\87аÑ\81никÑ\96в.",
+       "revdelete-text-text": "Видалені версії будуть, як і раніше, показані в історії сторінки, але частини їх вмісту будуть недоступні для загалу.",
+       "revdelete-text-file": "Видалені версії файлу будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для загалу.",
+       "logdelete-text": "Ð\86нÑ\84оÑ\80маÑ\86Ñ\96Ñ\8f Ð¿Ñ\80о Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ñ\96 Ð¿Ð¾Ð´Ñ\96Ñ\97 Ð±Ñ\83де, Ñ\8fк Ñ\96 Ñ\80анÑ\96Ñ\88е, Ð²Ð¸Ð´Ð¸Ð¼Ð° Ð² Ð¶Ñ\83Ñ\80налаÑ\85, Ð°Ð»Ðµ Ñ\87аÑ\81Ñ\82ина Ñ\97Ñ\85 Ñ\82екÑ\81Ñ\82Ñ\83 Ð±Ñ\83де Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна Ð´Ð»Ñ\8f Ð·Ð°Ð³Ð°Ð»Ñ\83.",
        "revdelete-text-others": "Інші адміністратори, як і раніше, будуть мати можливість доступу до прихованого вмісту і зможуть відновити його, якщо не встановлено додаткові обмеження.",
        "revdelete-confirm": "Будь ласка, підтвердіть, що ви справді бажаєте це здійснити, що усвідомлюєте наслідки та робите це згідно з [[{{MediaWiki:Policy-url}}|правилами]].",
        "revdelete-suppress-text": "Приховування може відбуватися '''лише''' в таких випадках:\n* Потенційно наклепницькі відомості\n* Недоречна особиста інформація\n*: ''домашні адреси, номери телефонів, номер паспорта тощо.''",
        "showhideselectedversions": "Показати/приховати обрані версії",
        "editundo": "скасувати",
        "diff-empty": "(Немає відмінностей)",
-       "diff-multi-sameuser": "(не {{PLURAL:$1|показано Ð¾Ð´Ð½Ñ\83 Ð¿Ñ\80омÑ\96жнÑ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показано $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ñ\86Ñ\8cого Ñ\83Ñ\87аÑ\81ника)",
-       "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 Ð¿Ñ\80омÑ\96жна Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|показано $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} {{PLURAL:$2|Ñ\89е Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ\83Ñ\87аÑ\81ника|$2 Ñ\83Ñ\87аÑ\81ників}})",
+       "diff-multi-sameuser": "(Ð\9dе {{PLURAL:$1|показано Ð¾Ð´Ð½Ñ\83 Ð¿Ñ\80омÑ\96жнÑ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показано $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ñ\86Ñ\8cого ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а)",
+       "diff-multi-otherusers": "(Ð\9dе {{PLURAL:$1|показана $1 Ð¿Ñ\80омÑ\96жна Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|показано $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} {{PLURAL:$2|Ñ\89е Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а|$2 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ів}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не показана $1 проміжна версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|1=$1 користувачем|$2 користувачами}})",
        "difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версії|$2 версій}} для цього порівняння ($1) не {{PLURAL:$2|1=знайдена|знайдені}}.\n\nІмовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.\nПодробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].",
        "searchresults": "Результати пошуку",
        "search-category": "(категорія $1)",
        "search-file-match": "(збігається із вмістом файлу)",
        "search-suggest": "Можливо, ви мали на увазі: $1",
+       "search-rewritten": "Показуються результати для $1. Шукати натомість $2.",
        "search-interwiki-caption": "Братні проекти",
        "search-interwiki-default": "Результати із $1:",
        "search-interwiki-more": "(більше)",
        "boteditletter": "б",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|користувач спостерігає|користувачі спостерігають|користувачів спостерігають}}]",
-       "rc_categories": "ТÑ\96лÑ\8cки Ð· ÐºÐ°Ñ\82егоÑ\80Ñ\96й (Ñ\80аздÑ\96лÑ\8eваÑ\87 Â«|»)",
-       "rc_categories_any": "Ð\91Ñ\83дÑ\8c\8fкий",
+       "rc_categories": "ТÑ\96лÑ\8cки Ð· ÐºÐ°Ñ\82егоÑ\80Ñ\96й (Ñ\80оздÑ\96лÑ\8eваÑ\87 Â«|»):",
+       "rc_categories_any": "Ð\91Ñ\83дÑ\8c\8fка Ð· Ð¾Ð±Ñ\80аниÑ\85",
        "rc-change-size": "$1",
        "rc-change-size-new": "Розмір після зміни: $1 {{PLURAL:$1|байт|байти|байтів}}",
        "newsectionsummary": "/* $1 */ нова тема",
        "reuploaddesc": "Повернутися до форми завантаження",
        "upload-tryagain": "Зберегти змінений опис файлу",
        "uploadnologin": "Ви не ввійшли в систему",
-       "uploadnologintext": "Ð\92и Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ\96 $1, щоб завантажувати файли.",
+       "uploadnologintext": "Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, $1, щоб завантажувати файли.",
        "upload_directory_missing": "Директорія для завантажень ($1) відсутня і не може бути створена веб-сервером.",
        "upload_directory_read_only": "Веб-сервер не має прав запису в папку ($1), в якій планується зберігати завантажувані файли.",
        "uploaderror": "Помилка завантаження файлу",
        "uploaded-setting-handler-svg": "SVG, який встановлює атрибут «handler» з віддаленою адресою/даними/сценарієм, заблоковано. У завантаженому SVG-файлі знайдено <code>$1=\"$2\"</code>.",
        "uploaded-remote-url-svg": "SVG, який встановлює будь-який атрибут з віддаленим URL, заблоковано. У завантаженому SVG-файлі знайдено <code>$1=\"$2\"</code>.",
        "uploaded-image-filter-svg": "У завантаженому SVG-файлі знайдено фільтр зображення з URL: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
-       "uploadscriptednamespace": "Цей SVG-файл містить недопустимий простір імен \"$1\"",
+       "uploadscriptednamespace": "Цей SVG-файл містить недопустимий простір назв «$1».",
        "uploadinvalidxml": "Не вдалося проаналізувати XML у завантаженому файлі.",
        "uploadvirus": "Файл містить вірус! Див. $1",
        "uploadjava": "Файл є ZIP-архівом, що містить .class-файл Java.\nЗавантаження Java-файлів не дозволене, бо вони можуть використовуватися для обходу системи безпеки.",
        "upload-too-many-redirects": "URL містить надто багато перенаправлень",
        "upload-http-error": "Відбулася помилка HTTP: $1",
        "upload-copy-upload-invalid-domain": "З цього домену завантаження неможливе.",
+       "upload-dialog-title": "Завантажити файл",
+       "upload-dialog-error": "Сталася помилка",
+       "upload-dialog-warning": "З'явилось попередження",
+       "upload-dialog-button-cancel": "Скасувати",
+       "upload-dialog-button-done": "Готово",
+       "upload-dialog-button-save": "Зберегти",
+       "upload-dialog-button-upload": "Завантажити",
+       "upload-dialog-label-select-file": "Обрати файл",
+       "upload-dialog-label-infoform-title": "Деталі",
+       "upload-dialog-label-infoform-name": "Назва",
+       "upload-dialog-label-infoform-description": "Опис",
+       "upload-dialog-label-usage-title": "Використання",
+       "upload-dialog-label-usage-filename": "Назва файлу",
        "backend-fail-stream": "Не вдалося транслювати файл $1.",
        "backend-fail-backup": "Не вдалося створити резервну копію файлу $1.",
        "backend-fail-notexists": "Файл $1 не існує.",
        "filedelete-submit": "Вилучити",
        "filedelete-success": "'''$1''' було вилучено.",
        "filedelete-success-old": "Версія '''[[Media:$1|$1]]''' від $3, $2 була вилучена.",
-       "filedelete-nofile": "Файл '''$1''' не існує.",
+       "filedelete-nofile": "<strong>$1</strong> не існує.",
        "filedelete-nofile-old": "Не існує архівної версії '''$1''' із зазначеними атрибутами.",
        "filedelete-otherreason": "Інша/додаткова причина:",
        "filedelete-reason-otherlist": "Інша причина",
        "randomincategory-nopages": "У [[:Category:$1]] немає сторінок.",
        "randomincategory-category": "Категорія:",
        "randomincategory-legend": "Випадкова сторінка у категорії",
+       "randomincategory-submit": "Перейти",
        "randomredirect": "Випадкове перенаправлення",
        "randomredirect-nopages": "Простір назв «$1» не містить перенаправлень.",
        "statistics": "Статистика",
        "linksearch-pat": "Шаблон для пошуку:",
        "linksearch-ns": "Простір назв:",
        "linksearch-ok": "Знайти",
-       "linksearch-text": "Можна вживати підстановочні символи, наприклад, «*.wikipedia.org».\nНеобхідно зазначити домен, принаймні верхнього рівня, наприклад «*.org».<br />\n{{PLURAL:$2|1=Підтримується протокол|Підтримуються протоколи}}: <code>$1</code> (за замовчуванням http:// , якщо жоден протокол не зазначено).",
+       "linksearch-text": "Можна вживати підстановочні символи, наприклад, «*.wikipedia.org».\nНеобхідно зазначити домен, принаймні верхнього рівня, наприклад «*.org».<br />\n{{PLURAL:$2|1=Підтримується протокол|Підтримуються протоколи}}: $1 (за замовчуванням http:// , якщо жоден протокол не зазначено).",
        "linksearch-line": "Посилання на $1 із $2",
        "linksearch-error": "Підстановочні знаки можуть використовуватися лише на початку адрес.",
        "listusersfrom": "Показати користувачів, починаючи з:",
        "listgrouprights-removegroup-self": "Можливість вилучити зі свого облікового запису {{PLURAL:$2|1=групу|групи}}: $1",
        "listgrouprights-addgroup-self-all": "Може додавати всі групи до свого облікового запису",
        "listgrouprights-removegroup-self-all": "може вилучати всі групи зі свого облікового запису",
-       "listgrouprights-namespaceprotection-header": "Обмеження простору імен",
-       "listgrouprights-namespaceprotection-namespace": "Простір імен",
-       "listgrouprights-namespaceprotection-restrictedto": "Права, що дозволяють учаснику редагувати",
+       "listgrouprights-namespaceprotection-header": "Обмеження простору назв",
+       "listgrouprights-namespaceprotection-namespace": "Простір назв",
+       "listgrouprights-namespaceprotection-restrictedto": "Права, що дозволяють користувачу редагувати",
        "trackingcategories": "Відстежувані категорії",
-       "trackingcategories-summary": "На цій сторінці перераховані відстежують категорії, які заповнюються автоматично програмним забезпеченням MediaWiki. Їх можна перейменувати, змінивши відповідні системні повідомлення в просторі імен {{ns:8}}.",
+       "trackingcategories-summary": "На цій сторінці перераховані відстежують категорії, які заповнюються автоматично програмним забезпеченням MediaWiki. Їх можна перейменувати, змінивши відповідні системні повідомлення в просторі назв {{ns:8}}.",
        "trackingcategories-msg": "Відстежувана категорія",
        "trackingcategories-name": "Ім'я повідомлення",
        "trackingcategories-desc": "Критерій включення в категорію",
        "noindex-category-desc": "Сторінка не індексується пошуковими роботами, тому що на ній є «чарівне слово» <code><nowiki>__NOINDEX__</nowiki></code>, і вона знаходиться в просторі імен, де дозволений цей прапор).",
-       "index-category-desc": "На сторінці є «чарівне слово» <nowiki>__INDEX__</nowiki> (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
+       "index-category-desc": "На сторінці є «чарівне слово» <code><nowiki>__INDEX__</nowiki></code> (і сторінка знаходиться в просторі назв, де дозволений цей прапор), тому вона індексується пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
        "post-expand-template-inclusion-category-desc": "Розмір сторінки стане більший за <code>$wgMaxArticleSize</code> після показу всіх шаблонів, тому деякі з них не були показані повністю.",
        "post-expand-template-argument-category-desc": "Сторінка стане більшою за <code>$wgMaxArticleSize</code> після розкриття аргументу шаблона (що-небудь в потрійних фігурних дужках, наприклад, <code>{{{Foo}}})</code>).",
        "expensive-parserfunction-category-desc": "На сторінці також використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "emailuser": "Надіслати листа",
        "emailuser-title-target": "Надіслати електронного листа {{GENDER:$1|користувачеві|користувачці}}",
        "emailuser-title-notarget": "Надіслати електронного листа користувачеві",
-       "emailpage": "Лист користувачеві",
        "emailpagetext": "Заповнивши наведену нижче форму, можна надіслати повідомлення {{GENDER:$1|цьому користувачу|цій користувачці}}.\nЕлектронна адреса, яку Ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.",
        "defemailsubject": "{{SITENAME}} — електронний лист від користувача «$1»",
        "usermaildisabled": "Електронне листування між користувачами вимкнене",
        "emailccsubject": "Копія вашого повідомлення до $1: $2",
        "emailsent": "Електронне повідомлення надіслано",
        "emailsenttext": "Ваше електронне повідомлення надіслано.",
-       "emailuserfooter": "Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «{{int:emailpage}}» проекту {{SITENAME}}.",
+       "emailuserfooter": "Цей лист був надісланий користувачеві $2 від користувача $1 за допомогою функції «{{int:emailuser}}» проекту {{SITENAME}}.",
        "usermessage-summary": "Залишити системне повідомлення.",
        "usermessage-editor": "Системний вісник",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlistanontext": "Вам необхідно увійти, щоб переглянути чи редагувати список спостереження.",
        "watchnologin": "Ви не ввійшли до системи",
        "addwatch": "Додати до списку спостереження",
-       "addedwatchtext": "Сторінку «[[:$1]]» додано до вашого [[Special:Watchlist|списку спостереження]].\nПодальші редагування цієї сторінки (та пов'язаної з нею сторінки обговорення) відображатимуться в цьому списку.",
+       "addedwatchtext": "«[[:$1]]» та її сторінка обговорення додані до вашого [[Special:Watchlist|списку спостереження]].",
        "addedwatchtext-short": "Сторінка \" $1 \" була додана до вашого списку спостереження.",
        "removewatch": "Видалити зі списку спостереження",
-       "removedwatchtext": "Сторінку «[[:$1]]» вилучено з вашого [[Special:Watchlist|списку спостереження]].",
+       "removedwatchtext": "«[[:$1]]» та її сторінка обговорення вилучені з Вашого [[Special:Watchlist|списку спостереження]].",
        "removedwatchtext-short": "Сторінка \"$1\" була видалена із вашого списку спостереження.",
        "watch": "Спостерігати",
        "watchthispage": "Спостерігати за цією сторінкою",
        "rollback-success": "Відкинуті редагування користувача $1; повернення до версії користувача $2.",
        "sessionfailure-title": "Помилка сеансу",
        "sessionfailure": "Здається, виникли проблеми з поточним сеансом роботи;\nця дія була скасована з метою попередити «захоплення сеансу».\nБудь ласка, натисніть кнопку «Назад» і перезавантажте сторінку, з якої ви прийшли.",
+       "changecontentmodel": "Змінити модель вмісту сторінки",
+       "changecontentmodel-legend": "Змінити модель вмісту",
+       "changecontentmodel-title-label": "Назва сторінки",
+       "changecontentmodel-model-label": "Нова модель вмісту",
+       "changecontentmodel-reason-label": "Причина:",
+       "changecontentmodel-success-title": "Модель вмісту було змінено",
+       "changecontentmodel-success-text": "Тип вмісту сторінки [[:$1]] було змінено.",
+       "changecontentmodel-cannot-convert": "Вміст сторінки [[:$1]] не можна перетворити на вміст типу $2.",
+       "changecontentmodel-nodirectediting": "Модель вмісту $1 не підтримує пряме редагування",
+       "log-name-contentmodel": "Журнал змін моделі вмісту",
+       "log-description-contentmodel": "Події, пов'язані з моделями вмісту сторінки",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|змінив|змінила}} модель вмісту сторінки $3 з «$4» на «$5»",
+       "logentry-contentmodel-change-revertlink": "відкинути",
+       "logentry-contentmodel-change-revert": "відкинути",
        "protectlogpage": "Журнал захисту",
        "protectlogtext": "Нижче наведено список встановлень і зняття захисту зі сторінки.\nВи також можете переглянути [[Special:ProtectedPages|список захищених сторінок]].",
        "protectedarticle": "захист на [[$1]] встановлено",
        "protect-title": "Встановлення захисту для «$1»",
        "protect-title-notallowed": "Перегляд рівню захисту \"$1\"",
        "prot_1movedto2": "«[[$1]]» перейменована на «[[$2]]»",
-       "protect-badnamespace-title": "Ð\91еззаÑ\85иÑ\81ний Ð¿Ñ\80оÑ\81Ñ\82Ñ\96Ñ\80 Ñ\96мен",
-       "protect-badnamespace-text": "Сторінки у просторі імен не можуть бути захищені.",
+       "protect-badnamespace-title": "Ð\9dезаÑ\85иÑ\89Ñ\83ваний Ð¿Ñ\80оÑ\81Ñ\82Ñ\96Ñ\80 Ð½Ð°Ð·Ð²",
+       "protect-badnamespace-text": "Сторінки у цьому просторі назв не можуть бути захищені.",
        "protect-norestrictiontypes-text": "Цю сторінку не може бути захищено, бо немає ніяких типів обмежень.",
        "protect-norestrictiontypes-title": "Сторінка, яку неможливо захистити",
        "protect-legend": "Підтвердження встановлення захисту",
        "protect-locked-blocked": "Ви не можете змінювати рівень захисту сторінки, доки ваш обліковий запис заблокований.\nПоточні установки для сторінки '''$1''':",
        "protect-locked-dblock": "Рівень захисту не може бути зміненим, так як основна база даних тимчасово заблокована.\nПоточні установки для сторінки '''$1''':",
        "protect-locked-access": "У вашого облікового запису недостатньо прав для зміни рівня захисту сторінки.\nПоточні установки для сторінки: '''$1''':",
-       "protect-cascadeon": "Ця сторінка зараз захищена у зв'язку з тим, що вона включена в {{PLURAL:$1/1=зазначену нижче сторінку, для якої|нижченаведені сторінки, для яких}} встановлений каскадний захист. Зміни рівня захисту цієї сторінки не вплине на каскадний захист.",
+       "protect-cascadeon": "Ця сторінка зараз захищена у зв'язку з тим, що вона включена у {{PLURAL:$1|1=сторінку, для якої|сторінки, для яких}} встановлений каскадний захист. \nЗміни рівня захисту цієї сторінки не вплине на каскадний захист.",
        "protect-default": "Дозволити всім користувачам",
        "protect-fallback": "Дозволено тільки користувачам із дозволом «$1»",
        "protect-level-autoconfirmed": "Дозволено тільки автопідтвердженим користувачам",
        "undeletepagetext": "{{PLURAL:$1|1=Сторінка була вилучена, однак вона все ще знаходиться в архіві, тому може бути відновлена|Такі сторінки були вилучені, але вони все ще знаходяться в архіві і тому можуть бути відновлені}}. Архів періодично очищається.",
        "undelete-fieldset-title": "Відновити версії",
        "undeleteextrahelp": "Для повного відновлення історії сторінки залиште всі поля порожніми й натисніть '''''«{{int:undeletebtn}}»'''''. \nДля виконання часткового відновлення помітьте відповідні змінені поля, а потім натисніть '''''«{{int:undeletebtn}}»'''''.",
-       "undeleterevisions": "В архіві $1 {{PLURAL:$1|версія|версії|версій}}",
+       "undeleterevisions": "Вилучено $1 {{PLURAL:$1|версію|версії|версій}}",
        "undeletehistory": "Якщо ви відновите сторінку, всі версії будуть також відновлені, разом з журналом редагувань.\nЯкщо з моменту вилучення була створена нова сторінка з такою самою назвою, відновлені версії будуть зазначені в журналі редагувань перед новими записами, але поточна версія існуючої статті не буде замінена автоматично.",
        "undeleterevdel": "Відновлення не буде здійснене, якщо воно призведе до часткового вилучення останньої версії сторінки або файлу. У подібному випадку Ви повинні зняти позначку або показати останні вилучені версії.",
        "undeletehistorynoadmin": "Стаття вилучена. Причина вилучення та список користувачів, що редагували статтю до вилучення, вказані нижче. Текст вилученої статті можуть переглянути лише адміністратори.",
        "tooltip-invert": "Встановіть цей прапорець, щоб приховати зміни на сторінках, в межах обраного простору імен (і пов'язаних просторів імен, за потреби)",
        "tooltip-whatlinkshere-invert": "Поставте цю галочку, щоб приховати зміни на сторінках із обраного простору назв.",
        "namespace_association": "Пов'язаний простір назв",
-       "tooltip-namespace_association": "Встановіть цей прапорець, щоб додати простір імен обговорень, пов'язаних з обраним простором імен",
+       "tooltip-namespace_association": "Встановіть цей прапорець, щоб додати простір назв обговорень, пов'язаних з обраним простором назв",
        "blanknamespace": "(Основний)",
        "contributions": "Внесок {{GENDER:$1|користувача|користувачки}}",
        "contributions-title": "Внесок користувача $1",
        "import-error-special": "Сторінку «$1» не було імпортовано, оскільки вона належить до особливого простору назв, що не дозволяє створення сторінок.",
        "import-error-invalid": "Сторінку «$1» не було імпортовано, оскільки назва, у яку вона імпортується, неприпустима у цій вікі.",
        "import-error-unserialize": "Версія $2 сторінки «$1» не може бути деструктурованою (десеріалізованою). Отримано повідомлення, що у цій версії використано модель $3 сериалізована як $4.",
-       "import-error-bad-location": "Ð\9fÑ\80авка $2, що використовує модель вмісту $3, не може бути збережена у «$1» цієї вікі, тому що ця модель не підтримується на цій сторінці.",
+       "import-error-bad-location": "Ð\92еÑ\80Ñ\81Ñ\96Ñ\8f $2, що використовує модель вмісту $3, не може бути збережена у «$1» цієї вікі, тому що ця модель не підтримується на цій сторінці.",
        "import-options-wrong": "{{PLURAL:$2|1=Неправильна опція|Неправильні опції}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Вказана некоректна назва кореневої сторінки",
        "import-rootpage-nosubpage": "В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки",
        "tooltip-pt-logout": "Вихід із системи",
        "tooltip-pt-createaccount": "Пропонуємо створити обліковий запис і увійти в систему; однак, це не обов'язково",
        "tooltip-ca-talk": "Обговорення змісту сторінки",
-       "tooltip-ca-edit": "Ð\92и Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\80едагÑ\83ваÑ\82и Ñ\86Ñ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83. Ð\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83йÑ\82е ÐºÐ½Ð¾Ð¿ÐºÑ\83 Ð¿Ð¾Ð¿ÐµÑ\80еднÑ\8cого Ð¿ÐµÑ\80еглÑ\8fдÑ\83 Ð¿ÐµÑ\80ед Ð·Ð±ÐµÑ\80еженнÑ\8fм",
+       "tooltip-ca-edit": "РедагÑ\83ваÑ\82и Ñ\86Ñ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83",
        "tooltip-ca-addsection": "Створити новий розділ",
        "tooltip-ca-viewsource": "Ця сторінка захищена від змін. Ви можете переглянути і скопіювати її вихідний текст.",
        "tooltip-ca-history": "Журнал змін сторінки",
        "spam_reverting": "Відкинути до останньої версії, що не містить посилання на $1",
        "spam_blanking": "Всі версії містять посилання на $1, очистка",
        "spam_deleting": "Все версії, що містили посилання на $1, вилучаються",
-       "simpleantispam-label": "Перевірка на спам.\n'''НЕ''' заповнюйте це!",
+       "simpleantispam-label": "Перевірка на спам.\n<strong>Не</strong> заповнюйте це!",
        "pageinfo-title": "Інформація про «$1»",
        "pageinfo-not-current": "Вибачте, неможливо переглянути цю інформацію для старих версій.",
        "pageinfo-header-basic": "Основна інформація",
        "pageinfo-robot-index": "Індексується",
        "pageinfo-robot-noindex": "Не індексується",
        "pageinfo-watchers": "Кількість спостерігачів",
+       "pageinfo-visiting-watchers": "Кількість спостерігачів сторінки, які відвідали останні редагування",
        "pageinfo-few-watchers": "Менше ніж $1 {{PLURAL:$1|спостерігач|спостерігачі|спостерігачів}}",
+       "pageinfo-few-visiting-watchers": "Користувачі, що спостерігають за сторінкою і бачили останні редагування, можуть бути, а можуть ні",
        "pageinfo-redirects-name": "Число перенаправлень на цю сторінку",
        "pageinfo-subpages-name": "Підсторінки цієї сторінки",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|неперенаправлення|неперенаправлення|неперенаправлень}})",
        "pageinfo-firstuser": "Створив сторінку",
        "pageinfo-firsttime": "Дата створення сторінки",
        "pageinfo-lastuser": "Останній редактор",
-       "pageinfo-lasttime": "Дата останньої правки",
+       "pageinfo-lasttime": "Дата останнього редагування",
        "pageinfo-edits": "Загальна кількість редагувань",
        "pageinfo-authors": "Загальна кількість унікальних авторів",
        "pageinfo-recent-edits": "Кількість поточних редагувань в історії (протягом $1)",
        "version-libraries": "Встановлені бібліотеки",
        "version-libraries-library": "Бібліотека",
        "version-libraries-version": "Версія",
+       "version-libraries-license": "Ліцензія",
+       "version-libraries-description": "Опис",
+       "version-libraries-authors": "Автори",
        "redirect": "Перенаправлення за файлом, користувачем, сторінкою або ID версії",
        "redirect-legend": "Перенаправити на файл чи сторінку",
        "redirect-summary": "Ця спеціальна сторінка перенаправляє на файл (за поданою назвою файлу), сторінку (за поданим ID версії або сторінки) або сторінку користувача (за поданим числовим ID користувача). Використання: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
        "htmlform-cloner-create": "Додати більше",
        "htmlform-cloner-delete": "Вилучити",
        "htmlform-cloner-required": "Необхідно принаймні одне значення.",
+       "htmlform-title-badnamespace": "[[:$1]] не в просторі назв «{{ns:$2}}».",
+       "htmlform-title-not-creatable": "«$1» — назва сторінки, яку не можна створити",
+       "htmlform-title-not-exists": "[[:$1]] не існує.",
+       "htmlform-user-not-exists": "<strong>$1</strong> не існує.",
+       "htmlform-user-not-valid": "<strong>$1</strong> не є дійсним іменем користувача.",
        "sqlite-has-fts": "$1 з підтримкою повнотекстового пошуку",
        "sqlite-no-fts": "$1 без підтримки повнотекстового пошуку",
        "logentry-delete-delete": "$1 {{GENDER:$2|вилучив|вилучила}} сторінку $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $3",
        "logentry-newusers-byemail": "Обліковий запис $3 {{GENDER:$2|користувача|користувачки}} створений {{GENDER:$4|користувачем|користувачкою}} $1 і пароль було надіслано електронною поштою",
        "logentry-newusers-autocreate": "Обліковий запис $1 було {{GENDER:$2|створено}} автоматично",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|переніс|перенесла}} налаштування захисту із $4 до $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3 із $4 на $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3",
        "logentry-rights-autopromote": "$1 було автоматично переведено із $4 в $5",
        "special-characters-title-endash": "коротке тире",
        "special-characters-title-emdash": "довге тире",
        "special-characters-title-minus": "мінус",
+       "mw-widgets-dateinput-no-date": "Дати не вибрано",
+       "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ",
        "mw-widgets-titleinput-description-new-page": "сторінка ще не існує",
        "mw-widgets-titleinput-description-redirect": "перенаправлення на $1"
 }
index 17cfc1a..c2ef7ac 100644 (file)
        "actionthrottled": "Action throttled",
        "actionthrottledtext": "بطورِ ایک ضدسپم تدبیر، آپ کو مختصر وقت میں کئی بار یہ عمل بجا لانے سے محدود کیا گیا، اور آپ یہ حد پار کرچکے ہیں.\nبراہِ کرم، کچھ منٹ بعد کوشش کیجئے.",
        "protectedpagetext": "اس صفحہ کو تدوین سے محفوظ رکھنے کیلیے مقفل کر دیا گیا ہے۔",
-       "viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں:",
-       "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم </strong>اس صفحہ پر:",
+       "viewsourcetext": "آپ صرف مسودہ دیکھ سکتے ہیں اور اسکی نقل اتار سکتے ہیں۔",
+       "viewyourtext": "آپ اس مواد کو دیکھ سکتے ہیں اور اٹھا (کاپی) سکتے ہیں <strong>آپ کی ترامیم</strong> اس صفحہ پر۔",
        "protectedinterface": "یہ صفحہ سوفٹ وئیر کے لیے انٹرفیس متن فراہم کرتا ہے، اور ناجائزاستعمال کے سدِباب کے لیے اِسے مقفل کیا گیا ہے.",
        "editinginterface": "'''انتباہ: ''' آپ ایک ایسا صفحہ تدوین کر رہے ہیں جو سوفٹ ویئر کیلئے انٹرفیس متن فراہم کرتا ہے۔ اس صفحہ میں کی جانے والی ترمیم، دیگر صارفین کے لیے انٹرفیس کو تبدیل کردے گی۔\nبراہِ کرم، ترجمہ کے لیے [//translatewiki.net/wiki/Main_Page?setlang=en '''ٹرانسلیٹ ویکی.نیٹ'''] (میڈیا ویکی دارالترجمہ) استعمال کریں.",
        "translateinterface": "تمام ویکیوں میں تبدیلی یا شامل کرنے کے لیے، اسے استعمال کریں [//translatewiki.net/ translatewiki.net]، میڈیا ویکی دارالترجمہ.",
        "virus-badscanner": "خراب وضعیت: انجان وائرسی مفراس: ''$1''",
        "virus-scanfailed": "تفریس ناکام (رمز $1)",
        "virus-unknownscanner": "انجان ضدوائرس:",
-       "logouttext": "'''اب آپ خارج ہوچکے ہیں'''\n\nآپ گمنام طور پر {{SITENAME}}  کا استعمال جاری رکھ سکتے ہیں، یا دوبارہ اسی نام یا مختلف نام سے <span class='plainlinks'>[$1 دوبارہ داخلِ نوشتہ]</span> بھی ہو سکتے ہیں۔  یہ یاد آوری کرلیجیۓ کہ کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے ، جب تک آپ اپنے متصفح کا ابطن صاف نہ کردیں۔",
+       "logouttext": "<strong>اب آپ خارج ہوچکے ہیں۔</strong>\n\nیاد رکھیں! کچھ صفحات ایسے نظر آتے رہیں گے کہ جیسے ابھی آپ خارج نہیں ہوئے، جب تک آپ اپنے کیشے صاف نہیں کرتے۔",
        "welcomeuser": "خوش آمدید، $1!",
        "yourname": "اسمِ رکنیت",
        "userlogin-yourname": "صارف نام",
        "passwordtooshort": "آپکا منتخب کردہ پارلفظ مختصر ہے. پارلفظ کم از کم {{PLURAL:$1|1 محرف|$1 محارف}} ہونا چاہئے.",
        "password-name-match": "آپکا پارلفظ آپکے اسمِ صارف سے مختلف ہونا چاہئے.",
        "password-login-forbidden": "اس صارف نام یا کلمۂ شناخت (پاسورڈ) کا استعمال ممنوع ہے",
-       "mailmypassword": "Ù\86Û\8cا Ù¾Ø§Ø±Ù\84Ù\81ظ Ø¨Ø±Ù\82Û\8c Ú\88اک Ù\85Û\8cÚº Ø¨Ú¾Û\8cجÙ\88",
+       "mailmypassword": "پاسÙ\88رÚ\88 ØªØ¨Ø¯Û\8cÙ\84 Ú©Ø±Û\8cÚº",
        "passwordremindertitle": "نیا عارضی کلمۂ شناخت برائے {{SITENAME}}",
        "passwordremindertext": "(IP پتہ $1 سے) کسی (یا شاید آپ) نے {{SITENAME}} ($4)\nکیلئے نئی کلمۂ شناخت کیلئے التماس کیا. ایک عارضی کلمۂ شناخت \"$3\"\nبرائے صارف \"$2\" تخلیق کیا گیا ہے. اگر یہ آپ کا ارادہ تھا، تو آپ\nکو چاہئے کہ داخلِ نوشتہ ہونے کے بعد نئے کلمۂ شناخت کا انتخاب کریں.\nآپ کا کلمۂ شناخت {{PLURAL:$5|ایک دِن|$5 دِن}} کے بعد ناکارہ ہوجائے گا.\n\nاگر کسی اَور نے یہ التماس کیا ہے، یا آپ کو اپنا کلمۂ شناخت یاد آگیا ہے،\nاور آپ اسے تبدیل نہیں کرنا چاہتے، تو آپ یہ پیغام نظر انداز کرسکتے ہیں اور\nآپنا پُرانا کلمۂ شناخت کا استعمال جاری رکھ سکتے ہیں.",
        "noemail": "صارف \"$1\" کیلئے کوئی برقی پتہ درج نہیں کیا گیا.",
        "noemailcreate": "صحیح برقی پتہ مہیّا کریں",
        "passwordsent": "ایک نیا کلمۂ شناخت \"$1\" کے نام سے بننے والی برقی ڈاک کے پتے کیلیے بھیج دیا گیا ہے۔\nجب وہ موصول ہو جاۓ تو براہ کرم اسکے ذریعے دوبارہ داخل ہوں۔",
        "blocked-mailpassword": "آپ کا آئی.پی پتہ تدوین سے روک لیا گیا ہے، سو، ناجائز استعمال کو روکنے کیلئے، آپ کے آئی.پی پتہ کو کلمۂ شناخت کی بحالی کا فعل استعمال کرنے کی اِجازت نہیں ہے.",
-       "eauthentsent": "ایک تصدیقی برقی خط نامزد کئے گئے برقی پتہ پر ارسال کردیا گیا ہے.\nآپ کو موصول ہوئے برقی خط میں ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی پتہ آپ کا ہی ہے.",
-       "throttled-mailpassword": "گزشتہ {{PLURAL:$1|گھنٹے|$1 گھنٹوں}} کے دوران پہلے سے ہی پارلفظ کی ایک یادآوری بھیجی جاچکی ہے.\nناجائز استعمال کے سدّباب کیلئے، {{PLURAL:$1|گھنٹہ|$1 گھنٹوں}} کے دوران صرف ایک پارلفظی یادآواری بھیجی جاسکتی ہے.",
+       "eauthentsent": "ایک تصدیقی برقی خط نامزد کیے گئے برقی پتہ پر ارسال کردیا گیا ہے۔\nآپ کو موصول ہوئے برقی خط میں ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی پتہ آپ کا ہی ہے۔",
+       "throttled-mailpassword": "گزشتہ {{PLURAL:$1|گھنٹے|$1 گھنٹوں}} کے دوران پہلے سے ہی پارلفظ (پاسورڈ) کی تبدیلی کے لیے برقی خط بھیجا گيا ہے۔\nناجائز استعمال کے سدّباب کیلئے، {{PLURAL:$1|گھنٹہ|$1 گھنٹوں}} کے دوران صرف ایک برقی خط بھیجا جاسکتا ہے۔",
        "mailerror": "مسلہ دوران ترسیل خط:$1",
        "acct_creation_throttle_hit": "آپکی آئی.پی کے ذریعے اِس ویکی پر آنے والے صارفین نے پچھلے ایک دِن میں {{PLURAL:$1|1 کھاتہ بنایا ہے|$1 کھاتے بنائے ہیں}}، جو کہ مذکورہ وقت میں کافی ہیں.\nلہٰذا، آپکی آئی.پی استعمال کرنے والے صارفین اِس وقت مزید کھاتے نہیں بناسکتے.",
-       "emailauthenticated": "آپکے برقی ڈاک پتہ کی تصدیق تاریخ $2 بوقت $3 بجے کو ہوئی.",
-       "emailnotauthenticated": "آپ کے برقی پتہ کی ابھی تصدیق نہیں ہوئی ہے.\nدرج ذیل میں سے کسی بھی چیز کیلئے آپکے برقی پتہ پر برقی ڈاک ارسال نہیں کیا جائے گا.",
+       "emailauthenticated": "آپکے برقی ڈاک پتہ کی تصدیق تاریخ $2 بوقت $3 بجے کو ہوئی۔",
+       "emailnotauthenticated": "آپ کے برقی پتہ کی ابھی تصدیق نہیں ہوئی ہے۔\nدرج ذیل میں سے کسی بھی چیز کیلئے آپ کے برقی پتہ پر برقی ڈاک ارسال نہیں کی جائے گی۔",
        "noemailprefs": "اِن خصائص کو کام میں لانے کیلئے اپنے ترجیحات میں برقی ڈاک کا پتہ متعین کیجئے.",
        "emailconfirmlink": "اپنے برقی پتہ کی تصدیق کیجئے",
        "invalidemailaddress": "برقی پتہ قبول نہیں کیا جاسکتا کیونکہ یہ غلط شکل میں ہے.\nبراہِ کرم! ایک برقی پتہ صحیح شکل میں درج کیجئے یا جگہ کو خالی چھوڑ دیجئے.",
        "user-mail-no-addy": "برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ",
        "user-mail-no-body": "خالی یا بہت ہی مختصر برقی خط بھیجنے کی کوشش",
        "changepassword": "کلمۂ شناخت تبدیل کریں",
-       "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ متعین کرنا ہوگا:",
+       "resetpass_announce": "آپ ایک برقی ارسال کردہ عارضی رمز (کوڈ) کے ساتھ داخل ہوئے ہیں۔\nداخلِ نوشتہ کے عمل کو مکمل کرنے کیلئے آپ کو یہاں نیا پارلفظ (پاسورڈ) متعین کرنا ہوگا۔",
        "resetpass_header": "کھاتہ کا پارلفظ تبدیل کریں",
        "oldpassword": "پرانا کلمۂ شناخت:",
        "newpassword": "نیا کلمۂ شناخت",
        "retypenew": "نیا کلمۂ شناخت دوبارہ درج کریں:",
        "resetpass_submit": "پارلفظ بناؤ اور داخل ہوجاؤ",
-       "changepassword-success": "آپ کا پارلفظ کامیابی سے تبدیل ہوگیا!\nاَب داخلِ نوشتہ کیا جارہا ہے...",
+       "changepassword-success": "آپ کا پارلفظ کامیابی سے تبدیل ہوگیا!",
        "resetpass_forbidden": "پارلفظ تبدیل نہیں ہوسکتا",
        "resetpass-no-info": "اِس صفحہ تک براہِ راست رسائی کیلئے آپ کو داخلِ نوشتہ ہونا پڑے گا.",
        "resetpass-submit-loggedin": "پارلفظ کی تبدیلی",
        "preview": "نمائش",
        "showpreview": "نمائش",
        "showdiff": "تبدیلیاں دکھاؤ",
-       "anoneditwarning": "آپ {{SITENAME}} میں داخل نہیں ہوۓ لہذا آپکا IP پتہ اس صفحہ کے تاریخچہ ء ترمیم میں محفوظ ہوجاۓ گا۔",
+       "anoneditwarning": "آپ {{SITENAME}} میں داخل نہیں ہوئے لہذا آپکا IP پتہ اس صفحہ کے تاریخچۂ  ترمیم میں محفوظ ہوجائے گا۔",
        "missingsummary": "'''انتباہ:''' آپ نے ترمیمی خلاصہ مہیّا نہیں کیا.\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کی ترمیم بغیر کسی خلاصہ کے محفوظ ہوجائے گی.",
        "missingcommenttext": "براہِ کرم! تبصرہ نیچے درج کیجئے.",
-       "missingcommentheader": "'''انتباہ:''' آپ نے اِس تبصرہ کیلئے عنوان یا شہ سرخی مہیّا نہیں کی.\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کا تبصرہ بغیر کسی عنوان کے محفوظ ہوجائے گا.",
+       "missingcommentheader": "<strong>انتباہ:</strong>  آپ نے اِس تبصرہ کیلئے عنوان یا شہ سرخی مہیّا نہیں کی۔\nاگر آپ نے محفوظ کا بٹن دوبارہ دبایا تو آپ کا تبصرہ بغیر کسی عنوان کے محفوظ ہوجائے گا۔",
        "summary-preview": "نمائش خلاصہ:",
        "subject-preview": "عنوان/شہ سرخی کا پیش منظر:",
        "blockedtitle": "صارف مسدود ہے",
        "mailnologintext": "دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔",
        "emailuser": "صارف کو برقی خط لکھیں",
        "emailuser-title-notarget": "ای میل صارف",
-       "emailpage": "صارف کو برقی خط لکھیں",
        "defemailsubject": "{{SITENAME}} سے برقی خط",
        "noemailtext": "اس صارف نے برقی خط کے لیے پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
        "emailusername": "صارف نام:",
index ad3028e..c295163 100644 (file)
@@ -19,7 +19,7 @@
        "tog-hidepatrolled": "Yangi oʻzgarishlar roʻyxatida tekshirilgan tahrirlarni yashirish",
        "tog-newpageshidepatrolled": "Yangi sahifalar roʻyxatidan tekshirilgan sahifalarni yashirish",
        "tog-extendwatchlist": "Kengaytirilgan kuzatuv roʻyxati: faqat oxirgi paytdagi emas, barcha oʻzgarishlar koʻrsatiladi",
-       "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish (JavaScript orqali)",
+       "tog-usenewrc": "Yangi oʻzgarishlar va kuzatuv roʻyxatidagi sahifalarni guruhlarga boʻlish",
        "tog-numberheadings": "Sarlavhalarni avtomatik raqamlash",
        "tog-showtoolbar": "Tahrirlash asboblarini koʻrsatish",
        "tog-editondblclick": "Sichqonchaning chap tugmasini ikki marta bosib tahrirlashni boshlash",
@@ -38,7 +38,7 @@
        "tog-shownumberswatching": "Sahifani kuzatuv roʻyxatiga olgan foydalanuvchilar sonini koʻrsatish",
        "tog-oldsig": "Joriy imzo:",
        "tog-fancysig": "Imzoni viki-belgi qilib koʻrsatish (avtomatik ishoratsiz)",
-       "tog-uselivepreview": "Tez koʻrib chiqish (JavaScript orqali) (sinovda)",
+       "tog-uselivepreview": "Tez koʻrib chiqish",
        "tog-forceeditsummary": "Qisqa tavsif oynasi toʻldirilmagani haqida ogohlantirish koʻrsatish",
        "tog-watchlisthideown": "Oʻz tahrirlarim kuzatuv roʻyxatimda koʻrsatilmasin",
        "tog-watchlisthidebots": "Botlar qilgan tahrirlar kuzatuv roʻyxatimda koʻrsatilmasin",
        "emailuser": "Foydalanuvchiga maktub",
        "emailuser-title-target": "Ushbu {{GENDER:$1|foydalanuvchi}}ga maktub joʻnatish",
        "emailuser-title-notarget": "Foydalanuvchiga elektron maktub yozish",
-       "emailpage": "Foydalanuvchiga maktub",
        "defemailsubject": "{{SITENAME}} — $1 tomonidan maktub",
        "usermaildisabled": "Foydalanuvchi elektron pochtasi o‘chirilgan",
        "noemailtitle": "Elektron pochta manzili mavjud emas",
        "invert": "Tanlash tartibini almashtirish",
        "namespace_association": "Bogʻliq nomfazo",
        "blanknamespace": "(asosiy)",
-       "contributions": "{{GENDER:$1|Foydalanuvchi}} hissasi",
+       "contributions": "Hissasi",
        "contributions-title": "{{GENDER:$1|Foydalanuvchi}} $1 hissasi",
        "mycontris": "Hissam",
        "contribsub2": "$1 uchun ($2)",
        "sp-contributions-username": "IP-manzil yoki foydalanuvchi nomi:",
        "sp-contributions-toponly": "Faqat oxirgi deb hisoblangan tahrirlarni koʻrsat",
        "sp-contributions-submit": "Qidirish",
-       "whatlinkshere": "Bu sahifaga bog'langan sahifalar",
+       "whatlinkshere": "Bogʻliq sahifalar",
        "whatlinkshere-title": "\"$1\"ga bogʻlangan sahifalar",
        "whatlinkshere-page": "Sahifa:",
        "linkshere": "Quyidagi sahifalar '''[[:$1]]''' sahifasiga bogʻlangan:",
        "tooltip-t-recentchangeslinked": "Bu sahifaga 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-contributions": "Ushbu foydalanuvchi 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",
index 0d4696b..74014ed 100644 (file)
@@ -45,7 +45,7 @@
        "tog-shownumberswatching": "Mostra el numaro de utenti che i ga ła pajina en oservasion",
        "tog-oldsig": "Anteprima de ła firma:",
        "tog-fancysig": "Interpreta i comandi wiki in te la firma (sensa colegamento automatego)",
-       "tog-uselivepreview": "Ativa ƚa funsion \"Live preview\" (sperimentaƚe)",
+       "tog-uselivepreview": "Intaca l'anteprima dal vivo",
        "tog-forceeditsummary": "Chiedi conferma se l'ozeto de ła modifega el xé vodo",
        "tog-watchlisthideown": "Scondi łe me modifeghe ne i oservai spesałi",
        "tog-watchlisthidebots": "Scondi łe modifeghe de i bot ne i oservai spesałi",
        "permalink": "Link parmanente",
        "print": "Stanpa",
        "view": "Varda",
+       "view-foreign": "Varda su $1",
        "edit": "Canbia",
        "create": "Crea",
+       "create-local": "Xonta na descrision local",
        "editthispage": "Canbia sta pagina",
        "create-this-page": "Crea sta pagina",
        "delete": "Scansela",
        "disclaimers": "Avertense",
        "disclaimerpage": "Project:Avertense xenerali",
        "edithelp": "Guida",
+       "helppage-top-gethelp": "Ajuto",
        "mainpage": "Pajina prinsipałe",
        "mainpage-description": "Pajina prinsipałe",
        "policy-url": "Project:Policy",
        "hidetoc": "scondi",
        "collapsible-collapse": "Conprimi",
        "collapsible-expand": "Espandi",
+       "confirmable-confirm": "Sito {{GENDER:$1|seguro|segura}}?",
+       "confirmable-yes": "Sì",
+       "confirmable-no": "No",
        "thisisdeleted": "Varda o ripristina $1?",
        "viewdeleted": "Varda $1?",
        "restorelink": "{{PLURAL:$1|un canbiamento scanselà|$1 canbiamenti scanselà}}",
        "gotaccountlink": "Entra",
        "userlogin-resetlink": "Desmentegà i to dati d'aceso?",
        "userlogin-resetpassword-link": "Te gheto desmentegà ła paroła d'ordine?",
+       "userlogin-helplink2": "Ajuto par 'ndar drento",
        "createacct-emailrequired": "Indirisso e-mail",
        "createacct-emailoptional": "Indiriso e-mail (opsionałe)",
        "createacct-email-ph": "Inserissi el to indirizo de e-mail",
        "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.",
        "pt-login": "Va drento",
+       "pt-login-button": "Va drento",
+       "pt-createaccount": "Crea utensa",
+       "pt-userlogout": "Và fora",
        "php-mail-error-unknown": "Erore sconosudo nte'l funsionamento deła posta ełetronega PHP",
        "user-mail-no-addy": "Te ghe provà spedire un mesajo de posta ełetronega sensa un indiriso.",
        "user-mail-no-body": "Tentà de inviar na e-mail có un testo vodo o masa curto.",
        "resetpass-temp-password": "Password tenporanea:",
        "resetpass-abort-generic": "La modifica de la password la xe sta anulà da un'estension.",
        "passwordreset": "Rinposta ła password",
-       "passwordreset-legend": "Rinposta ła password",
        "passwordreset-disabled": "Ła rinpostasion deła password xe stà dixabiłità so sto projeto wiki.",
        "passwordreset-emaildisabled": "Le funsionalità de posta eletrònega le xe stà disabilità su sta wiki.",
        "passwordreset-username": "Nome utente:",
        "preview": "Anteprima",
        "showpreview": "Varda anteprima",
        "showdiff": "Mostra canbiamenti",
-       "anoneditwarning": "'''Ocio:''' Nò te sì entrà co' un nome utente.\nIn te ła storia de ła pajina restarà el to indiriso IP.",
+       "anoneditwarning": "<strong>Ocio:</strong> Nò te sì entrà co' un nome utente.\nSe te fè calche canbiamento, el to indiriso IP el sarà visibile a tuti.\nSe te <strong>[$1 entri col to nome utente]</strong> o te te <strong>[$2 crei un utente]</strong>, i to contributi i vegnarà assegnà al nome utente che te te sì messo, oltre ad altri vantaji.",
        "anonpreviewwarning": "\"No te ghe eseguio el login. Salvando el to indiriso IP sarà rejistrà ne ła cronołosia de sta voxe.\"",
        "missingsummary": "'''Ocio:''' No te ghè indicà l'ogeto de la modifica. Macando de novo 'Salva la pagina' la modifica la vegnerà con l'ogeto vodo.",
        "missingcommenttext": "Inserissi un comento qua soto.",
        "currentrev": "Ultima version",
        "currentrev-asof": "Ultima version de le $1",
        "revisionasof": "Version de le $1",
-       "revision-info": "Version del $1, autor: $2",
+       "revision-info": "Version del $1 de {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version pi vecia",
        "nextrevision": "Version pì nova →",
        "currentrevisionlink": "Ultima version",
        "showhideselectedversions": "Mostra/scondi version selessionà",
        "editundo": "tira indrìo",
        "diff-empty": "(Nissuna difarensa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} del stesso utente mia mostrà)",
        "diff-multi-manyusers": "({{PLURAL:$1|Una revision intermedia|$1 revision intermedie}} de pi de {{PLURAL:$2|un utente|$2 utenti}} mia mostrà)",
        "difference-missing-revision": "{{PLURAL:$2|Na version|$2 version}} de sta difarensa ($1) {{PLURAL:$2|nó ła xe sta trovà|nó łe xe stae trovae}}.\n\nCuesto se verifega de sołito seguendo un ligamente vecio de un dif a na pàjina scansełà.\nI detaji i pol esar catai inte'l [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de łe scansełasion].",
        "searchresults": "Risultati de la riserca",
        "shown-title": "Fà védar {{PLURAL:$1|un risultato|$1 risultati}} par pagina",
        "viewprevnext": "Varda ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "Su sto sito ghe xe na pagina che se ciama \"[[:$1]]\"",
-       "searchmenu-new": "'''Crèa la pagina \"[[:$1]]\" su sta wiki!'''",
+       "searchmenu-new": "<strong>Crèa la pagina \"[[:$1]]\" su sta wiki!</strong> Varda anca {{PLURAL:$2|0=|la pagina|le pagine}} catà co la riserca.",
        "searchprofile-articles": "Pagine de contenuti",
        "searchprofile-images": "File",
        "searchprofile-everything": "Tuto quanto",
        "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sotocategoria|$2 sotocategorie}}, {{PLURAL:$3|1 file|$3 file}})",
        "search-redirect": "(redirect $1)",
        "search-section": "(sesion $1)",
+       "search-category": "(categoria $1)",
        "search-suggest": "Sercavito forsi: $1",
        "search-interwiki-caption": "Projeti fradei",
        "search-interwiki-default": "Risultati da $1:",
        "searchrelated": "ligà",
        "searchall": "tuti",
        "showingresults": "Qua de soto vien mostrà al massimo {{PLURAL:$1|'''1''' risultato|'''$1''' risultati}} a partir dal nùmaro '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Risultato <strong>$1</strong> de <strong>$3</strong>|Risultati <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "La riserca no la gà catà gnente.",
        "powersearch-legend": "Riserca avansà",
        "powersearch-ns": "Serca ne i namespace:",
        "prefs-timeoffset": "Ore de difarensa",
        "prefs-advancedediting": "Preferense avansade",
        "prefs-editor": "Contributor",
+       "prefs-preview": "Anteprima",
        "prefs-advancedrc": "Preferense avansade",
        "prefs-advancedrendering": "Preferense avansade",
        "prefs-advancedsearchoptions": "Preferense avansade",
        "prefs-advancedwatchlist": "Preferense avansade",
        "prefs-displayrc": "Preferense de visualixassion",
        "prefs-displaywatchlist": "Opzioni de visualixassion",
+       "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Difarense",
        "email-address-validity-valid": "L'indiriso de posta eletronega pararìa vałido",
        "email-address-validity-invalid": "Inserisi un indiriso de posta eletronega vałido",
-       "userrights": "Gestion dei parmessi relativi ai utenti",
+       "userrights": "Gestion dei parmessi dei utenti",
        "userrights-lookup-user": "Gestion de i gruppi utente",
        "userrights-user-editname": "Inserir el nome utente:",
        "editusergroup": "Modifica grupi utente",
        "recentchanges-label-bot": "Sta modifica el la ga fata un bot",
        "recentchanges-label-unpatrolled": "Sta modifica no la xe stà gnancora verificà",
        "recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
+       "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
        "rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
        "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
        "rcshowhidebots-show": "Mostra",
        "rcshowhidebots-hide": "Scondi",
        "rcshowhideliu": "$1 i utenti registrài",
+       "rcshowhideliu-show": "Mostra",
        "rcshowhideliu-hide": "Scondi",
        "rcshowhideanons": "$1 i utenti anonimi",
+       "rcshowhideanons-show": "Mostra",
        "rcshowhideanons-hide": "Scondi",
        "rcshowhidepatr": "$1 łe modifeghe controłae",
+       "rcshowhidepatr-show": "Mostra",
+       "rcshowhidepatr-hide": "Scondi",
        "rcshowhidemine": "$1 i me canbiamenti",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Scondi",
        "upload-too-many-redirects": "In te l'URL ghe jera massa rimandi",
        "upload-http-error": "Se gà verificà un eròr HTTP: $1",
        "upload-copy-upload-invalid-domain": "No xe consentìo cargare copie da sto dominio.",
+       "upload-dialog-title": "Carga un file",
+       "upload-dialog-button-cancel": "Łasa star",
+       "upload-dialog-button-done": "Fato",
+       "upload-dialog-button-save": "Salva",
+       "upload-dialog-button-upload": "Carga",
+       "upload-dialog-label-select-file": "Siegli el file",
+       "upload-dialog-label-infoform-name": "Nome",
+       "upload-dialog-label-infoform-description": "Descrision",
+       "upload-dialog-label-usage-title": "Uso",
+       "upload-dialog-label-usage-filename": "Nome del file",
        "backend-fail-stream": "Inposibiłe traxmetare el file $1.",
        "backend-fail-backup": "Inposibiłe fare el backup del file $1.",
        "backend-fail-notexists": "El file $1 no existe.",
        "license-nopreview": "(Anteprima mìa disponibile)",
        "upload_source_url": " (na URL coreta e acessibile)",
        "upload_source_file": " (un file sul to computer)",
+       "listfiles-delete": "scancela",
        "listfiles-summary": "Sta pajina speciałe ła fa vedare tuti i file caricadi.\nSe l'utente modifega l'ordenamento, vien mostradi soło i file caricadi pi de recente da l'utente.",
        "listfiles_search_for": "Serca file par nome:",
        "imgfile": "file",
        "randomincategory": "Pagina a ocio in te na categoria",
        "randomincategory-invalidcategory": "\"$1\" no'l và mia ben come nome de categoria.",
        "randomincategory-nopages": "No ghe xe mia pagine in [[:Category:$1]].",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-submit": "Và",
        "randomredirect": "Un redirect a caso",
        "randomredirect-nopages": "No ghe xe nissun rimando in tel namespace \"$1\".",
        "statistics": "Statisteghe",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
        "nlinks": "$1 {{PLURAL:$1|colegamento|colegamenti}}",
        "nmembers": "$1 {{PLURAL:$1|elemento|elementi}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|elemento|elementi}}",
        "nrevisions": "$1 {{PLURAL:$1|revision}}",
-       "nviews": "$1 {{PLURAL:$1|visita|visite}}",
        "nimagelinks": "Doparà su $1 {{PLURAL:$1|pagina|pagine}}",
        "ntransclusions": "doparà su $1 {{PLURAL:$1|pagina|pagine}}",
        "specialpage-empty": "Sto raporto no'l contien nissun risultato.",
        "protectedpages-cascade": "Solo protezion ricorsive",
        "protectedpages-noredirect": "Scondi rimandi",
        "protectedpagesempty": "Al momento no ghe xe pagine protete",
+       "protectedpages-timestamp": "Data e ora",
+       "protectedpages-page": "Pàjina",
+       "protectedpages-expiry": "Scade",
+       "protectedpages-reason": "Motivo",
+       "protectedpages-unknown-timestamp": "Sconossùa",
+       "protectedpages-unknown-performer": "Utente sconossùo",
        "protectedtitles": "Titoli proteti",
        "protectedtitlesempty": "Al momento no ghe xe titoli proteti coi parametri specificà.",
        "listusers": "Elenco dei utenti",
        "pager-older-n": "{{PLURAL:$1|quel pi vecio|i $1 pi vèci}}",
        "suppress": "Supervision",
        "querypage-disabled": "Sta pàjina speciałe ła xe dixativà par motivi de prestasion.",
+       "apihelp-no-such-module": "Modulo \"$1\" mia catà.",
        "booksources": "Fonti librarie",
        "booksources-search-legend": "Riserca de fonti librarie",
        "booksources-search": "Serca",
        "linksearch-pat": "Espression de riserca:",
        "linksearch-ns": "Namespace:",
        "linksearch-ok": "Serca",
-       "linksearch-text": "Xe posibiłe doparare metacarateri, come \"*.wikipedia.org\".\nXe nesesario almanco un dominio de primo liveło, tipo \"*.org\".<br />\n{{PLURAL:$2|Protocoło suportà|Protocołi suportai}}: <code>$1</code> (predefinio http:// se nisun protocoło el xe spesifegà).",
+       "linksearch-text": "Xe posibiłe doparare metacarateri, come \"*.wikipedia.org\".\nXe nesesario almanco un dominio de primo liveło, tipo \"*.org\".<br />\n{{PLURAL:$2|Protocoło suportà|Protocołi suportai}}: $1 (predefinio http:// se nisun protocoło el xe spesifegà).",
        "linksearch-line": "$1 presente ne la pagina $2",
        "linksearch-error": "I metacaràteri i pode vegner doparài solo a l'inizio del nome de l'host.",
        "listusersfrom": "Mostra i utenti tacando da:",
        "listgrouprights-removegroup-self": "Pol cavarse da {{PLURAL:$2|un grupo|dei grupi}}: $1",
        "listgrouprights-addgroup-self-all": "Pol xontarse a tuti i grupi",
        "listgrouprights-removegroup-self-all": "Pol cavarse da tuti i grupi",
+       "listgrouprights-namespaceprotection-namespace": "Namespace",
+       "trackingcategories-name": "Nome del messajo",
        "mailnologin": "Nissun indirizo a cui mandarghe el messagio",
        "mailnologintext": "Par inviare messagi e-mail ad altri utenti bisogna [[Special:UserLogin|acedere al sito]] e aver registrà un indirisso vałido ne łe proprie [[Special:Preferences|preferense]].",
        "emailuser": "Scrìveghe a sto utente",
        "emailuser-title-target": "Scrivi na e-mail a {{GENDER:$1|sto|sta}} utente",
        "emailuser-title-notarget": "Scrivi na e-mail a l'utente",
-       "emailpage": "Scrivi na e-mail a l'utente",
        "emailpagetext": "Te podi usar el moduło chi soto par mandare na e-mail a sto {{GENDER:$1|utente}}.\nŁa e-mail che te ghè indicà inte łe [[Special:Preferences|to prefarense]] ła vegnarà fora inte'l canpo \"Da\" de la mail, cusì che'l destinatario el posa rispóndarte diretamente a ti.",
        "defemailsubject": "Mesajo da {{SITENAME}} dal utente \"$1\"",
        "usermaildisabled": "e-mail utente disabiłità",
        "rollback-success": "Anułàe łe modifighe de $1; riportà a ła version de prima de $2.",
        "sessionfailure-title": "Eròr de session",
        "sessionfailure": "Se gà verificà un problema ne la session che identifica l'acesso; el sistema, par precauzion, no'l gà mìa eseguìo el comando che te ghè dato. Torna a la pagina precedente col boton 'Indrìo' del to browser, ricarica la pagina e ripróa da novo.",
+       "changecontentmodel-title-label": "Tìtoło de ła pàjina",
+       "changecontentmodel-reason-label": "Motivo:",
        "protectlogpage": "Protesion",
        "protectlogtext": "De seguito xe elencade łe modifeghe ałe protesion dełe pajine.\nVedi ła [[Special:ProtectedPages|lista dełe pajine protete]] pa l'elenco de łe protesion de pajina atualmente ative.",
        "protectedarticle": "ga proteto \"[[$1]]\"",
        "allmessages-prefix": "Filtra par prefisso:",
        "allmessages-language": "Lengua:",
        "allmessages-filter-submit": "Và",
+       "allmessages-filter-translate": "Tradusi",
        "thumbnail-more": "Ingrandissi",
        "filemissing": "File mancante",
        "thumbnail_error": "Eror ne la creazion de la miniatura: $1",
        "tooltip-pt-mycontris": "Elenco de i to contributi",
        "tooltip-pt-login": "Te consiliemo de registrarte, ma no te ghè da farlo par forsa.",
        "tooltip-pt-logout": "Và fora",
+       "tooltip-pt-createaccount": "Te incorajemo de farte un utente e 'ndar drento co quelo; comunque no te toca farlo pa' forsa.",
        "tooltip-ca-talk": "Discussion sul contenuto de sta pagina",
-       "tooltip-ca-edit": "Te poli canbiar sta pagina. Par piaser dòpara el boton de anteprima, prima de salvar.",
+       "tooltip-ca-edit": "Modifega sta pagina",
        "tooltip-ca-addsection": "Scumisia na nova sesion",
        "tooltip-ca-viewsource": "Sta pagina la xe proteta, ma te poli vardar el so testo",
        "tooltip-ca-history": "Version vece de sta pagina",
        "spam_reverting": "Ripristinà l'ultima version priva de colegamenti a $1",
        "spam_blanking": "Pàxena svodà, tute łe version le contegneva cołegamenti a $1",
        "spam_deleting": "Pàjina scansełà, tute łe version łe contegneva ligamenti a $1",
-       "simpleantispam-label": "Controlo anti spam.\n'''NO STA''' scrivar gnente qua de soto!",
+       "simpleantispam-label": "Controlo anti spam.\n<strong>No stà</strong> scrivar gnente qua drento!",
        "pageinfo-title": "Informasion par \"$1\"",
        "pageinfo-not-current": "Ne disipiaxe, ma xe inposibiłe fornir sta informasion par vecie version.",
        "pageinfo-header-basic": "Informassion de base",
        "pageinfo-article-id": "ID de la pagina",
        "pageinfo-language": "Lengua del contenuto de la pagina",
        "pageinfo-robot-policy": "Stato par i motori de riserca",
-       "pageinfo-robot-index": "Indicizabile",
-       "pageinfo-robot-noindex": "Mia indicizabile",
+       "pageinfo-robot-index": "Parmesso",
+       "pageinfo-robot-noindex": "Vietà",
        "pageinfo-watchers": "Nùmaro de utenti che tien d'ocio sta pagina",
        "pageinfo-few-watchers": "Manco de $1 {{PLURAL:$1|oservador|oservadori}}",
        "pageinfo-redirects-name": "Rimandi verso sta pagina",
        "confirm-watch-top": "Xonto sta pàjina a ła to lista de łe tegnùe d'ocio?",
        "confirm-unwatch-button": "Va ben",
        "confirm-unwatch-top": "Cavo sta pàjina da ła to lista de łe tegnùe d'ocio?",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← la pagina prima",
        "imgmultipagenext": "la pagina dopo →",
        "imgmultigo": "Và",
        "imgmultigoto": "Và a la pagina $1",
        "img-lang-default": "(lengua predefinìa)",
+       "img-lang-go": "Và",
        "ascending_abbrev": "cresc",
        "descending_abbrev": "decresc",
        "table_pager_next": "Pagina sucessiva",
        "watchlistedit-raw-done": "La lista dei osservati speciali la xe stà agiornà.",
        "watchlistedit-raw-added": "Xe stà zontà {{PLURAL:$1|una pagina|$1 pagine}}:",
        "watchlistedit-raw-removed": "Xe stà eliminà {{PLURAL:$1|una pagina|$1 pagine}}:",
+       "watchlistedit-clear-titles": "Pagine:",
        "watchlisttools-view": "Varda i canbiamenti",
        "watchlisttools-edit": "Varda e canbia le pagine tegnùe d'ocio",
        "watchlisttools-raw": "Canbia la lista in formato testo",
        "version-hook-name": "Nome de l'hook",
        "version-hook-subscribedby": "Sotoscrizioni",
        "version-version": "($1)",
+       "version-no-ext-name": "[nissun nome]",
        "version-license": "Licensa MediaWiki",
        "version-ext-license": "Licensa",
        "version-ext-colheader-name": "Estension",
        "version-ext-colheader-version": "Version",
        "version-ext-colheader-license": "Licensa",
        "version-ext-colheader-description": "Descrission",
+       "version-ext-colheader-credits": "Autori",
        "version-license-title": "Licensa par $1",
        "version-poweredby-credits": "Sta wiki la va con '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "altri",
        "version-entrypoints": "URL de aceso",
        "version-entrypoints-header-entrypoint": "Punti de aceso",
        "version-entrypoints-header-url": "URL",
-       "redirect": "Rimando par file, utente, o ID de revision.",
+       "version-libraries": "Librarie instalà",
+       "version-libraries-library": "Libraria",
+       "version-libraries-version": "Version",
+       "version-libraries-license": "Licensa",
+       "version-libraries-description": "Descrision",
+       "version-libraries-authors": "Autori",
+       "redirect": "Rimando par file, utente, pagina o ID de version.",
        "redirect-legend": "Rimandar a un file o na pagina",
        "redirect-summary": "Sta pagina speciale la rimanda a un file (dato el nome del file), a na pagina (dato l'ID de la revision), o a na pagina utente (dato l'ID de l'utente).",
        "redirect-submit": "Và",
        "fileduplicatesearch-result-n": "Ghe xe {{PLURAL:$2|un duplicato conpagno|$2 duplicati conpagni}} al file \"$1\".",
        "fileduplicatesearch-noresults": "Nisun file de nome \"$1\" trovà.",
        "specialpages": "Pagine speciali",
+       "specialpages-note-top": "Legenda",
        "specialpages-note": "* Pàjine speciałi normałi.\n* <span class=\"mw-specialpagerestricted\">Pàjine speciałi a aceso limità.</span>",
        "specialpages-group-maintenance": "Resoconti de manutenzion",
        "specialpages-group-other": "Altre pagine speciali",
        "tags-tag": "Nome del tag",
        "tags-display-header": "Aspetto ne la lista de le modifiche",
        "tags-description-header": "Descrission conpleta del significado",
+       "tags-source-header": "Fonte",
        "tags-active-header": "Ativo?",
        "tags-hitcount-header": "Modifiche che gà dei tag",
+       "tags-actions-header": "Asion",
+       "tags-active-yes": "Sì",
+       "tags-active-no": "No",
        "tags-edit": "modìfega",
+       "tags-delete": "scancela",
+       "tags-activate": "intaca",
+       "tags-deactivate": "destaca",
        "tags-hitcount": "$1 {{PLURAL:$1|modìfega|modìfeghe}}",
+       "tags-create-reason": "Motivo:",
+       "tags-create-submit": "Crea",
+       "tags-delete-reason": "Motivo:",
+       "tags-activate-reason": "Motivo:",
+       "tags-activate-submit": "Intaca",
+       "tags-deactivate-reason": "Motivo:",
+       "tags-edit-existing-tags-none": "''Nissuna''",
+       "tags-edit-new-tags": "Etichete nove:",
+       "tags-edit-add": "Zonta ste etichete:",
+       "tags-edit-remove": "Cava ste etichete:",
+       "tags-edit-remove-all-tags": "(cava tute le etichete)",
+       "tags-edit-reason": "Motivo:",
        "comparepages": "Confronta le pagine",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "logentry-rights-rights": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa de $3 dal grupo $4 al grupo $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|el|la}} ga canbià l'apartenensa a grupi de $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|el|la}} gà cargà $3",
        "rightsnone": "(nissun)",
        "revdelete-summary": "modifica ogeto",
        "feedback-adding": "Inserimento del feedback inte ła pàjina...",
+       "feedback-back": "Indrìo",
        "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
        "feedback-bugnew": "Controło efetuà. Segnała un novo bug",
        "feedback-bugornote": "Se se xe in grado de descrivare el problema tenico riscontrà in maniera precixa, [$1 segnałare el bug]. In alternadiva, se pol doparar el moduło senplifegà cuà soto. El comento inserio el sarà xontà a ła pàjina \"[$3 $2]\", insieme al propio nome utente.",
        "feedback-cancel": "Anuła",
        "feedback-close": "Fato",
+       "feedback-error-title": "Eròr",
        "feedback-error1": "Eror: Da ła API xe rivà un rexultà nó riconosùo",
        "feedback-error2": "Eror: Nó xe sta posibiłe exeguir ła modifega",
        "feedback-error3": "Errore: Nisuna risposta da ła API",
        "feedback-subject": "Ogeto:",
        "feedback-submit": "Manda",
        "feedback-thanks": "Grasie! El to feedback el xe sta publicà a ła pàjina \"[$2 $1]\".",
+       "feedback-thanks-title": "Grassie!",
        "searchsuggest-search": "Serca",
        "searchsuggest-containing": "che contien...",
        "api-error-badaccess-groups": "Nó te si autorixà a cargar documenti so sta wiki.",
        "duration-centuries": "$1 {{PLURAL:$1|secolo|secoli}}",
        "duration-millennia": "$1 {{PLURAL:$1|milenio|mileni}}",
        "rotate-comment": "Imagine girà de $1 {{PLURAL:$1|grado|gradi}} in senso orario",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|secondi}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$1|byte}}",
        "expandtemplates": "Espansion dei template",
        "expand_templates_intro": "Sta pagina speciale la elabora un testo espandendo tuti i template presenti. La calcola inoltre el risultato de le funzion suportàe dal parser come <nowiki>{{</nowiki>#language:...}} e de le variabili de sistema quali <nowiki>{{</nowiki>CURRENTDAY}}, overo in pratica tuto quel che se cata tra dopie parentesi grafe. La funsiona riciamando le oportune funzion del parser de MediaWiki.",
        "expand_templates_title": "Contesto (par {{FULLPAGENAME}} ecc.):",
        "expand_templates_remove_nowiki": "Cava i tag <nowiki> dal risultato",
        "expand_templates_generate_xml": "Mostra àlbaro sintàtico XML",
        "expand_templates_preview": "Anteprima",
+       "pagelang-name": "Pàjina",
+       "pagelang-language": "Lengua",
+       "mediastatistics-header-unknown": "Sconossùo",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-executable": "File eseguibili",
        "special-characters-group-latin": "Latìn",
        "special-characters-group-latinextended": "Latìn estexo",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "lineeta ene",
        "special-characters-title-emdash": "lineeta eme",
-       "special-characters-title-minus": "segno meno"
+       "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-redirect": "rimando a $1"
 }
index b31768e..0d1f70f 100644 (file)
@@ -30,7 +30,8 @@
                        "Dinhxuanduyet",
                        "Macofe",
                        "KhangND",
-                       "Darcy Le"
+                       "Darcy Le",
+                       "Quenhitran"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "view": "Xem",
        "view-foreign": "Xem trên $1",
        "edit": "Sửa đổi",
-       "edit-local": "Sửa đổi miêu tả địa phương",
+       "edit-local": "Sửa miêu tả địa phương",
        "create": "Tạo",
        "create-local": "Thêm miêu tả địa phương",
        "editthispage": "Sửa đổi trang này",
        "actionthrottled": "Thao tác bị giới hạn",
        "actionthrottledtext": "Để nhằm tránh spam, bạn không thể thực hiện thao tác này quá nhiều lần trong một thời gian ngắn.  Xin hãy chờ vài phút trước khi thực hiện lại.",
        "protectedpagetext": "Trang này đã bị khóa không cho sửa đổi hoặc tác động khác.",
-       "viewsourcetext": "Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:",
-       "viewyourtext": "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
+       "viewsourcetext": "Bạn vẫn có thể xem và chép xuống mã nguồn của trang này.",
+       "viewyourtext": "Bạn vẫn có thể xem và chép xuống mã nguồn <strong>các sửa đổi của bạn</strong> tại trang này.",
        "protectedinterface": "Trang này cung cấp một thông điệp trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
        "editinginterface": "<strong>Lưu ý:</strong> Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này.",
        "translateinterface": "Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/?setlang=vi translatewiki.net], dự án bản địa hóa MediaWiki.",
        "createacct-benefit-body2": "{{PLURAL:$1}}trang nội dung",
        "createacct-benefit-body3": "{{PLURAL:$1}}người đóng góp gần đây",
        "badretype": "Hai mật khẩu không khớp.",
+       "usernameinprogress": "Đã tiến hành tạo tài khoản với tên người dùng này.\nXin vui lòng chờ đợi.",
        "userexists": "Tên người dùng được nhập đã có người lấy.\nHãy chọn một tên khác.",
        "loginerror": "Lỗi đăng nhập",
        "createacct-error": "Lỗi mở tài khoản",
        "search-category": "(thể loại $1)",
        "search-file-match": "(khớp nội dung tập tin)",
        "search-suggest": "Có phải bạn muốn tìm: $1",
+       "search-rewritten": "Đang xem các kết quả cho $1. Tìm kiếm cho $2 thay thế.",
        "search-interwiki-caption": "Các dự án liên quan",
        "search-interwiki-default": "Kết quả từ $1:",
        "search-interwiki-more": "(thêm)",
        "prefsnologintext2": "Xin vui lòng đăng nhập để thay đổi tùy chọn.",
        "prefs-skin": "Giao diện",
        "skin-preview": "Xem trước",
-       "datedefault": "Không quan tâm",
+       "datedefault": "Không tùy biến",
        "prefs-labs": "Tính năng phòng thí nghiệm",
        "prefs-user-pages": "Trang cá nhân",
        "prefs-personal": "Thông tin cá nhân",
        "rows": "Số hàng:",
        "columns": "Số cột:",
        "searchresultshead": "Tìm kiếm",
-       "stub-threshold": "Định dạng <a href=\"#\" class=\"stub\">liên kết đến sơ khai</a> cho các trang ngắn hơn (byte):",
+       "stub-threshold": "Định dạng liên kết đến sơ khai ($1) cho các trang ngắn hơn:",
+       "stub-threshold-sample-link": "ví dụ",
        "stub-threshold-disabled": "Tắt",
        "recentchangesdays": "Số ngày hiển thị trong thay đổi gần đây:",
        "recentchangesdays-max": "(tối đa $1 {{PLURAL:$1|ngày|ngày}})",
        "prefs-files": "Tập tin",
        "prefs-custom-css": "sửa CSS",
        "prefs-custom-js": "sửa JS",
-       "prefs-common-css-js": "CSS/JS chung cho mọi giao diện:",
+       "prefs-common-css-js": "CSS/JavaScript chung cho mọi giao diện:",
        "prefs-reset-intro": "Có thể mặc định lại toàn bộ tùy chọn dùng trang này. Điều này không thể hoàn tác.",
        "prefs-emailconfirm-label": "Xác nhận thư điện tử:",
        "youremail": "Thư điện tử:",
        "prefs-info": "Thông tin cơ bản",
        "prefs-i18n": "Quốc tế hóa",
        "prefs-signature": "Chữ ký",
-       "prefs-dateformat": "Kiểu ngày tháng",
-       "prefs-timeoffset": "Chênh giờ",
+       "prefs-dateformat": "Kiểu hiển thị ngày tháng",
+       "prefs-timeoffset": "Chênh lệch giờ",
        "prefs-advancedediting": "Tùy chọn chung",
        "prefs-editor": "Trình soạn",
        "prefs-preview": "Xem trước",
        "minoreditletter": "n",
        "newpageletter": "M",
        "boteditletter": "b",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|người|người}} đang xem]",
-       "rc_categories": "Hạn chế theo thể loại (phân cách bằng “|”)",
-       "rc_categories_any": "Bất kỳ",
+       "number_of_watching_users_pageview": "[$1 người đang xem]",
+       "rc_categories": "Hạn chế theo thể loại (phân cách bằng “|”):",
+       "rc_categories_any": "Bất kỳ được chọn",
        "rc-change-size-new": "$1 byte sau thay đổi",
        "newsectionsummary": "Đề mục mới: /* $1 */",
        "rc-enhanced-expand": "Xem chi tiết",
        "php-uploaddisabledtext": "Việc tải tập tin trong PHP đã bị tắt. Xin hãy kiểm tra lại thiết lập file_uploads.",
        "uploadscripted": "Tập tin này có chứa mã HTML hoặc kịch bản có thể khiến trình duyệt web thông dịch sai.",
        "upload-scripted-pi-callback": "Không thể tải lên một file có chứa lệnh xử lý XML-stylesheet",
+       "uploaded-script-svg": "Tìm thấy phần tử “$1” có khả năng chạy kịch bản trong tập tin SVG được tải lên.",
+       "uploaded-hostile-svg": "Tìm thấy CSS nguy hiểm trong phần tử style của tập tin SVG được tải lên.",
+       "uploaded-event-handler-on-svg": "Không cho phép đặt thuộc tính xử lý sự kiện <code>$1=\"$2\"</code> trong tập tin SVG.",
+       "uploaded-href-attribute-svg": "Không cho phép thuộc tính href <code>&lt;$1 $2=\"$3\"&gt;</code> có đích ngoài máy (ví dụ http://, javascript:, v.v.) trong tập tin SVG.",
+       "uploaded-href-unsafe-target-svg": "Tìm thấy href đến đích nguy hiểm <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
+       "uploaded-animate-svg": "Tìm thấy thẻ “animate” có thể thay đổi href qua thuộc tính “from” <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
+       "uploaded-setting-event-handler-svg": "Đã ngăn cản việc đặt thuộc tính xử lý sự kiện khi tìm thấy <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-setting-href-svg": "Sử dụng tag \"set\" để thêm thuộc tính \"href\" tới thành phần mẹ bị khóa.",
-       "uploaded-image-filter-svg": "Tìm công cụ lọc ảnh với UPL: <Mã>&lt;$1 $2=\"$3\"&gt;</Mã> trong tập tin SVG được tải lên.",
+       "uploaded-wrong-setting-svg": "Đã ngăn cản việc sử dụng thẻ “set” để thêm đích bên ngoài/dữ liệu/kịch bản vào thuộc tính nào đó. Tìm thấy <code>&lt;set to=\"$1\"&gt;</code> trong tập tin SVG được tải lên.",
+       "uploaded-setting-handler-svg": "Đã ngăn cản mã SVG đặt thuộc tính “handler” là từ xa/dữ liệu/kịch bản. Tìm thấy <code>$1=\"$2\"</code> trong tập tin SVG được tải lên.",
+       "uploaded-remote-url-svg": "Đã ngăn cản mã SVG đặt thuộc tính style nào đó là URL ngoài máy. Tìm thấy <code>$1=\"$2\"</code> trong tập tin SVG được tải lên.",
+       "uploaded-image-filter-svg": "Đã phát hiện bộ lọc hình ảnh có URL: <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploadscriptednamespace": "Tập tin SVG này chứa không gian tên “$1” không được cho phép",
        "uploadinvalidxml": "Không thể phân tích mã XML trong tập tin tải lên.",
        "uploadvirus": "Tập tin có virút! Chi tiết: $1",
        "upload-too-many-redirects": "URL có quá nhiều đổi hướng",
        "upload-http-error": "Xảy ra lỗi HTTP: $1",
        "upload-copy-upload-invalid-domain": "Không có sẵn các bản sao tải lên tại tên miền này.",
+       "upload-dialog-title": "Tải tập tin lên",
+       "upload-dialog-error": "Đã xuất hiện lỗi",
+       "upload-dialog-warning": "Đã xuất hiện cảnh báo",
+       "upload-dialog-button-cancel": "Hủy bỏ",
+       "upload-dialog-button-done": "Xong",
+       "upload-dialog-button-save": "Lưu",
+       "upload-dialog-button-upload": "Tải lên",
+       "upload-dialog-label-select-file": "Chọn tập tin",
+       "upload-dialog-label-infoform-title": "Chi tiết",
+       "upload-dialog-label-infoform-name": "Tên",
+       "upload-dialog-label-infoform-description": "Miêu tả",
+       "upload-dialog-label-usage-title": "Sử dụng",
+       "upload-dialog-label-usage-filename": "Tên tập tin",
        "backend-fail-stream": "Không thể gửi luồng tập tin $1.",
        "backend-fail-backup": "Không thể sao lưu tập tin $1.",
        "backend-fail-notexists": "Tập tin $1 không tồn tại.",
        "filehist-comment": "Miêu tả",
        "imagelinks": "Các trang sử dụng tập tin",
        "linkstoimage": "{{PLURAL:$1|Trang|$1 trang}} sau có liên kết đến tập tin này:",
-       "linkstoimage-more": "Có hơn $1 {{PLURAL:$1|trang|trang}} liên kết đến tập tin này.\nDanh sách dưới đây chỉ hiển thị {{PLURAL:$1|liên kết đầu tiên|$1 liên kết đầu tiên}} đến tập tin này.\nCó [[Special:WhatLinksHere/$2|danh sách đầy đủ ở đây]].",
+       "linkstoimage-more": "Có hơn $1 trang liên kết đến tập tin này.\nDanh sách dưới đây chỉ hiển thị {{PLURAL:$1|liên kết|$1 liên kết}} đầu tiên đến tập tin này.\nCó [[Special:WhatLinksHere/$2|danh sách đầy đủ ở đây]].",
        "nolinkstoimage": "Không có trang nào chứa liên kết đến hình.",
        "morelinkstoimage": "Xem [[Special:WhatLinksHere/$1|thêm liên kết]] đến tập tin này.",
        "linkstoimage-redirect": "$1 (tập tin đổi hướng) $2",
        "nlinks": "$1 {{PLURAL:$1|liên kết|liên kết}}",
        "nmembers": "$1 trang",
        "nmemberschanged": "$1 → $2 trang",
-       "nrevisions": "$1 {{PLURAL:$1|phiên bản|phiên bản}}",
+       "nrevisions": "$1 phiên bản",
        "nimagelinks": "Được sử dụng trong $1 trang",
        "ntransclusions": "được sử dụng trong $1 trang",
        "specialpage-empty": "Trang này đang trống.",
        "booksources-text": "Dưới đây là danh sách những trang bán sách mới và cũ, đồng thời có thể có thêm thông tin về những cuốn sách bạn đang tìm:",
        "booksources-invalid-isbn": "ISBN mà bạn cung cấp dường như không đúng; xin hãy kiểm tra lại xem có lỗi gì khi sao chép từ nội dung gốc hay không.",
        "specialloguserlabel": "Người thực hiện:",
-       "speciallogtitlelabel": "Mục tiêu (tiêu đề hoặc người dùng):",
+       "speciallogtitlelabel": "Mục tiêu (tiêu đề hoặc {{ns:user}}:Tên-người-dùng đối với người dùng):",
        "log": "Nhật trình",
        "all-logs-page": "Tất cả các nhật trình công khai",
        "alllogstext": "Hiển thị tất cả các nhật trình đang có của {{SITENAME}} chung với nhau.\nBạn có thể thu hẹp kết quả bằng cách chọn loại nhật trình, tên thành viên (phân biệt chữ hoa-chữ thường), hoặc các trang bị ảnh hưởng (cũng phân biệt chữ hoa-chữ thường).",
        "linksearch-pat": "Mẫu liên kết:",
        "linksearch-ns": "Không gian tên:",
        "linksearch-ok": "Tìm kiếm",
-       "linksearch-text": "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />{{PLURAL:$2|Giao thức|Các giao thức}} này được hỗ trợ: <code>$1</code>; mặc định là <code>http://</code> nếu không định rõ giao thức trong truy vấn.",
+       "linksearch-text": "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />{{PLURAL:$2|Giao thức|Các giao thức}} này được hỗ trợ: $1; mặc định là <code>http://</code> nếu không định rõ giao thức trong truy vấn.",
        "linksearch-line": "$1 được liên kết từ $2",
        "linksearch-error": "Chỉ được sử dụng ký tự đại diện (''wildcard'') vào đầu tên miền (''hostname'').",
        "listusersfrom": "Hiển thị thành viên bắt đầu từ:",
        "emailuser": "Gửi thư cho người này",
        "emailuser-title-target": "{{GENDER:$1}}Gửi thư cho người dùng này",
        "emailuser-title-notarget": "Gửi thư cho người dùng",
-       "emailpage": "Gửi thư",
        "emailpagetext": "{{GENDER:$1}}Mẫu dưới đây sẽ gửi một bức thư điện tử tới người dùng này.\nĐịa chỉ thư điện tử mà bạn đã cung cấp trong [[Special:Preferences|tùy chọn cá nhân của mình]] sẽ xuất hiện trong phần địa chỉ “Người gửi” của bức thư, do đó người nhận sẽ có thể trả lời trực tiếp cho bạn.",
        "defemailsubject": "Thư của người dùng \"$1\" tại {{SITENAME}}",
        "usermaildisabled": "Chức năng gửi thư cho người dùng đã bị tắt.",
        "watchlistanontext": "Xin hãy đăng nhập để xem hay sửa đổi các trang trong danh sách theo dõi của bạn.",
        "watchnologin": "Chưa đăng nhập",
        "addwatch": "Thêm vào danh sách theo dõi",
-       "addedwatchtext": "Trang “[[:$1]]” đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.\nNhững sửa đổi đối với trang này và trang thảo luận của nó sẽ được liệt kê ở đấy.",
+       "addedwatchtext": "“[[:$1]]” cùng trang thảo luận đã vào [[Special:Watchlist|danh sách theo dõi]] của bạn.",
        "addedwatchtext-short": "Trang “$1” đã được thêm vào danh sách theo dõi của bạn.",
        "removewatch": "Gỡ khỏi danh sách theo dõi",
-       "removedwatchtext": "Trang “[[:$1]]” đã được đưa ra khỏi [[Special:Watchlist|danh sách theo dõi]] của bạn.",
+       "removedwatchtext": "“[[:$1]]” cùng trang thảo luận đã được đưa ra khỏi [[Special:Watchlist|danh sách theo dõi]] của bạn.",
        "removedwatchtext-short": "Trang “$1” đã được xóa khỏi danh sách theo dõi của bạn.",
        "watch": "Theo dõi",
        "watchthispage": "Theo dõi trang này",
        "rollback-success": "Đã hủy sửa đổi của $1;\nquay về phiên bản cuối của $2.",
        "sessionfailure-title": "Phiên thất bại",
        "sessionfailure": "Dường như có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy nhấn nút “Back”, tải lại trang đó, rồi thử lại.",
+       "changecontentmodel": "Thay đổi kiểu nội dung của một trang",
+       "changecontentmodel-legend": "Thay đổi kiểu nội dung",
+       "changecontentmodel-title-label": "Tên trang",
+       "changecontentmodel-model-label": "Kiểu nội dung mới",
+       "changecontentmodel-reason-label": "Lý do:",
+       "changecontentmodel-success-title": "Kiểu nội dung đã thay đổi",
+       "changecontentmodel-success-text": "Loại nội dung của [[:$1]] đã được thay đổi.",
+       "changecontentmodel-cannot-convert": "Không thể chuyển đổi nội dung [[:$1]] thành nội dung dưới dạng $2.",
+       "changecontentmodel-nodirectediting": "Mô hình nội dung $1 không hỗ trợ sửa đổi trực tiếp",
+       "log-name-contentmodel": "Nhật trình thay đổi mô hình nội dung",
+       "log-description-contentmodel": "Sự kiện có liên quan đến mô hình nội dung của trang.",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2}}đã thay đổi mô hình nội dung của trang $3 từ “$4” thành “$5”",
+       "logentry-contentmodel-change-revertlink": "lùi lại",
+       "logentry-contentmodel-change-revert": "lùi lại",
        "protectlogpage": "Nhật trình khóa",
        "protectlogtext": "Đây là danh sách các thay đổi mức khóa trang. Xem [[Special:ProtectedPages|danh sách các trang hiện thời đang bị khóa]].",
        "protectedarticle": "đã khóa “[[$1]]”",
        "undeletepagetext": "{{PLURAL:$1|Trang sau|$1 trang sau}} đã bị xóa nhưng vẫn nằm trong kho lưu trữ và có thể phục hồi được. Kho lưu trữ sẽ được xóa định kỳ.",
        "undelete-fieldset-title": "Phục hồi phiên bản",
        "undeleteextrahelp": "Để phục hồi toàn bộ lịch sử trang, hãy để trống các hộp kiểm và bấm nút '''''{{int:undeletebtn}}'''''.\nĐể thực hiện phục hồi có chọn lọc, hãy đánh dấu vào hộp kiểm của các phiên bản muốn phục hồi, rồi bấm nút '''''{{int:undeletebtn}}'''''.\nBấm nút '''''Tẩy trống''''' sẽ tẩy trống ô lý do và tất cả các hộp kiểm.",
-       "undeleterevisions": "$1 {{PLURAL:$1|bản|bản}} đã được lưu",
+       "undeleterevisions": "$1 phiên bản đã bị xóa",
        "undeletehistory": "Nếu bạn phục hồi trang này, tất cả các phiên bản của nó cũng sẽ được phục hồi vào lịch sử của trang.\nNếu một trang mới có cùng tên đã được tạo ra kể từ khi xóa trang này, các phiên bản được khôi phục sẽ xuất hiện trong lịch sử trước.",
        "undeleterevdel": "Việc phục hồi sẽ không được thực hiện nếu nó dẫn đến việc phiên bản trang hoặc tập tin trên cùng bị xóa mất một phần.\nTrong trường hợp đó, bạn phải bỏ đánh dấu hộp kiểm hoặc bỏ ẩn những phiên bản bị xóa mới nhất.",
        "undeletehistorynoadmin": "Trang này đã bị xóa.\nLý do xóa trang được hiển thị dưới đây, cùng với thông tin về những người đã sửa đổi trang này trước khi bị xóa.\nChỉ có bảo quản viên mới xem được văn bản đầy đủ của những phiên bản trang bị xóa.",
        "movepage-page-exists": "Trang $1 đã tồn tại và không thể bị tự động ghi đè.",
        "movepage-page-moved": "Trang $1 đã được di chuyển đến $2.",
        "movepage-page-unmoved": "Trang $1 không thể di chuyển đến $2.",
-       "movepage-max-pages": "Đã có tối đa $1 {{PLURAL:$1|trang|trang}} đã di chuyển và không tự động di chuyển thêm được nữa.",
+       "movepage-max-pages": "Đã có tối đa $1 trang đã di chuyển và không tự động di chuyển thêm được nữa.",
        "movelogpage": "Nhật trình di chuyển",
        "movelogpagetext": "Dưới đây là danh sách các trang đã được di chuyển.",
        "movesubpage": "{{PLURAL:$1|Trang con|Các trang con}}",
        "import-comment": "Lý do:",
        "importtext": "Xin hãy xuất tập tin từ wiki nguồn dùng [[Special:Export|công cụ xuất]].\nLưu nó vào máy tính của bạn rồi tải nó lên đây.",
        "importstart": "Đang nhập các trang…",
-       "import-revision-count": "$1 {{PLURAL:$1|phiên bản|phiên bản}}",
+       "import-revision-count": "$1 phiên bản",
        "importnopages": "Không có trang để nhập vào.",
        "imported-log-entries": "Đã nhập {{PLURAL:$1|mục nhật trình|$1 mục nhật trình}}.",
        "importfailed": "Không nhập được: $1",
        "tooltip-pt-logout": "Đăng xuất",
        "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
        "tooltip-ca-talk": "Thảo luận về trang này",
-       "tooltip-ca-edit": "Bạn có thể sửa được trang này! (Xin vui lòng xem trước trước khi lưu.)",
+       "tooltip-ca-edit": "Chỉnh sửa trang này",
        "tooltip-ca-addsection": "Bắt đầu một đề mục mới",
        "tooltip-ca-viewsource": "Trang này được khóa. Bạn có thể xem mã nguồn.",
        "tooltip-ca-history": "Các phiên bản cũ của trang này",
        "group-bot.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các bot */",
        "group-sysop.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các bảo quản viên */",
        "group-bureaucrat.js": "/* Mã JavaScript tại đây sẽ chỉ được tải cho các hành chính viên */",
-       "anonymous": "{{PLURAL:$1|Người dùng|Người dùng}} vô danh của {{SITENAME}}",
+       "anonymous": "{{PLURAL:$1}}Người dùng vô danh của {{SITENAME}}",
        "siteuser": "thành viên $1 của {{SITENAME}}",
        "anonuser": "người dùng vô danh $1 tại {{SITENAME}}",
        "lastmodifiedatby": "Trang này được $3 cập nhật lần cuối lúc $2 $1.",
        "spam_reverting": "Lùi lại đến phiên bản cuối không chứa liên kết đến $1",
        "spam_blanking": "Tất cả các phiên bản có liên kết đến $1; tẩy trống",
        "spam_deleting": "Tất cả các phiên bản có liên kết đến $1; xóa",
-       "simpleantispam-label": "Hệ thông đang kiểm tra chống spam.\nXin '''ĐỪNG''' điền gì vào!",
+       "simpleantispam-label": "Hệ thông đang kiểm tra chống spam.\nXin <strong>đừng</strong> điền gì vào!",
        "pageinfo-title": "Thông tin về “$1”",
        "pageinfo-not-current": "Rất tiếc, không thể cung cấp các chi tiết này đối với các phiên bản cũ.",
        "pageinfo-header-basic": "Thông tin cơ bản",
        "pageinfo-robot-index": "Cho phép",
        "pageinfo-robot-noindex": "Không cho phép",
        "pageinfo-watchers": "Số người theo dõi trang",
+       "pageinfo-visiting-watchers": "Số người theo dõi trang đã xem sửa đổi gần đây",
        "pageinfo-few-watchers": "Không tới $1 người theo dõi",
+       "pageinfo-few-visiting-watchers": "Có thể có hoặc không có người dùng theo dõi các sửa đổi gần đây",
        "pageinfo-redirects-name": "Số trang đổi hướng đến trang này",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Số trang con của trang này",
        "imagemaxsize": "Giới hạn cỡ hình:<br />''(trên trang miêu tả tập tin)''",
        "thumbsize": "Cỡ hình thu nhỏ:",
        "widthheight": "$1×$2",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|trang|trang}}",
+       "widthheightpage": "$1 × $2, $3 trang",
        "file-info": "kích thước tập tin: $1, kiểu MIME: $2",
        "file-info-size": "$1×$2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4",
        "file-info-size-pages": "$1×$2 điểm ảnh, kích thước tập tin: $3, kiểu MIME: $4, $5 trang",
        "autoredircomment": "Đổi hướng đến [[$1]]",
        "autosumm-new": "Tạo trang mới với nội dung “$1”",
        "autosumm-newblank": "Đã tạo trang trống",
+       "size-bytes": "$1 byte",
        "size-kilobytes": "$1 kB",
-       "bitrate-bits": "$1 bps",
-       "bitrate-kilobits": "$1 kbps",
-       "bitrate-megabits": "$1 Mbps",
-       "bitrate-gigabits": "$1 Gbps",
-       "bitrate-terabits": "$1 Tbps",
-       "bitrate-petabits": "$1 Pbps",
+       "size-pixel": "$1 điểm ảnh",
+       "size-kilopixel": "$1 kP",
+       "bitrate-bits": "$1 bit/s",
+       "bitrate-kilobits": "$1 kbit/s",
+       "bitrate-megabits": "$1 Mbit/s",
+       "bitrate-gigabits": "$1 Gbit/s",
+       "bitrate-terabits": "$1 Tbit/s",
+       "bitrate-petabits": "$1 Pbit/s",
        "bitrate-exabits": "$1 Ebps",
-       "bitrate-zetabits": "$1 Zbps",
-       "bitrate-yottabits": "$1 Ybps",
+       "bitrate-zetabits": "$1 Zbit/s",
+       "bitrate-yottabits": "$1 Ybit/s",
        "lag-warn-normal": "Những thay đổi trong vòng $1 {{PLURAL:||}}giây trở lại đây có thể chưa xuất hiện trong danh sách.",
        "lag-warn-high": "Do độ trễ của máy chủ cơ sở dữ liệu, những thay đổi trong vòng $1 {{PLURAL:$1||}}giây trở lại đây có thể chưa xuất hiện trong danh sách.",
        "watchlistedit-normal-title": "Sửa các trang tôi theo dõi",
        "htmlform-cloner-create": "Tiếp tục thêm",
        "htmlform-cloner-delete": "Loại bỏ",
        "htmlform-cloner-required": "Cần ít nhất một giá trị.",
+       "htmlform-title-badnamespace": "[[:$1]] không phải trong không gian tên “{{ns:$2}}”.",
+       "htmlform-title-not-creatable": "Không cho phép tạo ra trang với tên “$1”",
+       "htmlform-title-not-exists": "[[:$1]] không tồn tại.",
+       "htmlform-user-not-exists": "<strong>$1</strong> không tồn tại.",
+       "htmlform-user-not-valid": "<strong>$1</strong> không phải là tên người dùng.",
        "sqlite-has-fts": "$1 với sự hỗ trợ tìm kiếm toàn văn",
        "sqlite-no-fts": "$1 không có hỗ trợ tìm kiếm toàn văn",
        "logentry-delete-delete": "$1 {{GENDER:$2}}đã xóa trang “$3”",
        "logentry-newusers-create2": "$1 {{GENDER:$2}}đã mở tài khoản người dùng $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2}}đã mở tài khoản người dùng $3 và nhận mật khẩu qua thư điện tử",
        "logentry-newusers-autocreate": "Tài khoản $1 {{GENDER:$2}}đã được mở tự động",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2}}đã chuyển mức khóa từ $4 thành $3",
        "logentry-rights-rights": "$1 {{GENDER:$2}}đã đổi các nhóm bao gồm $3 từ $4 đến $5",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 đã đổi các nhóm bao gồm $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2}}đã được tự động phong cấp từ $4 đến $5",
        "log-description-pagelang": "Nhật trình này ghi các thay đổi ngôn ngữ của các trang.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2}}đã đổi ngôn ngữ của trang $3 từ $4 thành $5.",
        "default-skin-not-found": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nViệc cài đặt của bạn dường như bao gồm {{PLURAL:$4|giao diện|các giao diện}} sau. Xem [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt {{PLURAL:$4|nó|chúng và chọn giao diện mặc định}}.\n\n$2\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Có lẽ bạn đã cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này đã nằm trong tính toán của chúng tôi. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org] bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_từ_Git#Using_Git_to_download_MediaWiki_skins Sử dụng Git để tải về giao diện].\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki.\n\n; Nếu bạn vừa mới nâng cấp MediaWiki:\n: Phiên bản MediaWiki 1.24 trở lên không còn tự động kích hoạt giao diện đã cài đặt (xem [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Hướng dẫn: Tự động dò giao diện]). Bạn có thể dán {{PLURAL:$5|dòng|các dòng}} sau vào <code>LocalSettings.php</code> để kích hoạt {{PLURAL:$5|giao diện|tất cả các giao diện}} đã được cài dặt:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Nếu bạn vừa mới chỉnh sửa <code>LocalSettings.php</code>:\n: Kiểm tra lại tên các giao diện xem có lỗi đánh máy nào không.",
-       "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Sao chép một trong những kho <code>mediawiki/skins/*</code> thông qua git vào trong thư mục <code dir=\"ltr\">skins/</code> của cài đặt MediaWiki của bạn.\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
+       "default-skin-not-found-no-skins": "Đã xảy ra lỗi! Giao diện mặc định của wiki này được định nghĩa trong <code dir=\"ltr\">$wgDefaultSkin</code> là <code>$1</code> nhưng không tồn tại.\n\nKhông có giao diện nào của bạn được kích hoạt.\n\n; Nếu bạn vừa mới cài đặt MediaWiki:\n: Bạn có thể cài đặt nó từ git, hoặc trực tiếp từ mã nguồn bằng cách sử dụng một số phương thức khác. Điều này nằm trong dự kiến. Hãy thử cài đặt một số giao diện từ [https://www.mediawiki.org/wiki/Category:All_skins thư mục giao diện của mediawiki.org], bằng cách:\n:* Tải về [https://www.mediawiki.org/wiki/Special:MyLanguage/Download trình cài đặt dưới dạng gói tar], trong đó có kèm theo một số giao diện và phần mở rộng. Bạn có thể chép nó và dán vào thư mục <code>skins/</code>.\n:* Tải về các gói giao diện nén riêng từ [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git/vi#Using_Git_to_download_MediaWiki_skins Tải về giao diện qua Git].\n: Cách này sẽ không có ảnh hưởng đến kho git của bạn dù bạn là một nhà phát triển MediaWiki. Xin xem [https://www.mediawiki.org/wiki/Manual:Skin_configuration Hướng dẫn: Cấu hình giao diện] để biết thông tin về cách kích hoạt hoặc chọn một trong số chúng làm giao diện mặc định.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (kích hoạt)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''vô hiệu hóa''')",
        "mediastatistics": "Thống kê phương tiện",
        "special-characters-title-endash": "dấu gạch en",
        "special-characters-title-emdash": "dấu gạch em",
        "special-characters-title-minus": "dấu trừ",
+       "mw-widgets-dateinput-no-date": "Không chọn ngày tháng",
+       "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD (năm-tháng-ngày)",
+       "mw-widgets-dateinput-placeholder-month": "YYYY-MM (năm-tháng)",
        "mw-widgets-titleinput-description-new-page": "Trang này chưa tồn tại",
-       "mw-widgets-titleinput-description-redirect": "Đổi hướng đến $4"
+       "mw-widgets-titleinput-description-redirect": "Đổi hướng đến $1"
 }
index 68ddb77..949bef4 100644 (file)
        "resetpass-wrong-oldpass": "Letavöd (laidüpik u nelaidüpik) no lonöföl.\nBa ya evotükol benosekiko letavödi olik, u ya ebegol benosekiko letavödi nelaidüpik nulik.",
        "resetpass-temp-password": "Letavöd nelaidüpik:",
        "passwordreset": "Dönuvälön letavödi",
-       "passwordreset-legend": "Dönuvälön letavödi",
        "passwordreset-username": "Gebananem:",
        "passwordreset-domain": "Domen:",
        "passwordreset-email": "Ladet leäktronik:",
        "nlinks": "{{PLURAL:$1|yüm|yüms}} $1",
        "nmembers": "{{PLURAL:$1|liman|limans}} $1",
        "nrevisions": "{{PLURAL:$1|fomam|fomams}} $1",
-       "nviews": "{{PLURAL:$1|logam|logams}} $1",
        "nimagelinks": "Pageböl in {{PLURAL:$1|pad|pads}} $1",
        "ntransclusions": "pageböl in {{PLURAL:$1|pad|pads}} $1",
        "specialpage-empty": "Pad at vagon.",
        "linksearch-pat": "Sukapated:",
        "linksearch-ns": "Nemaspad:",
        "linksearch-ok": "Suk",
-       "linksearch-text": "WilStelüls kanons pagebön, a.s. „*.wikipedia.org“.<br />\nProtoks pestütöl: <code>$1</code>",
+       "linksearch-text": "WilStelüls kanons pagebön, a.s. „*.wikipedia.org“.<br />\nProtoks pestütöl: $1",
        "linksearch-line": "$1 labon yümi se $2",
        "linksearch-error": "Stelüls kanons pubön te lä prim lotidiananema.",
        "listusersfrom": "Jonolöd gebanis primölo me:",
index 939fbe3..5acfa3e 100644 (file)
        "resetpass-wrong-oldpass": "Li scret timporaire ou do moumint n' est nén valide.\nMotoit ki vos l' avoz ddja candjî ou ridmandé on novea scret timporaire.",
        "resetpass-temp-password": "Sicret timporaire:",
        "passwordreset": "Rifé l' sicret",
-       "passwordreset-legend": "Rifé l' sicret",
        "passwordreset-disabled": "Li rfijhaedje di screts a stî dismetou so ç' wiki ci.",
        "passwordreset-username": "No d' elodjaedje:",
        "passwordreset-domain": "Dominne:",
        "nlinks": "$1 {{PLURAL:$1|loyén|loyéns}}",
        "nmembers": "$1 {{PLURAL:$1|mimbe|mimbes}}",
        "nrevisions": "$1 {{PLURAL:$1|modêye|modêyes}}",
-       "nviews": "léjhowe $1 {{PLURAL:$1|côp|côps}}",
        "nimagelinks": "Eployî so $1 pådje{{PLURAL:$1||s}}",
        "ntransclusions": "eployî so $1 pådje{{PLURAL:$1||s}}",
        "specialpage-empty": "Cisse pådje cial est vude.",
        "linksearch-pat": "Patron pol cweraedje:",
        "linksearch-ns": "Espåce di lomaedje:",
        "linksearch-ok": "Cweri",
-       "linksearch-text": "Des caracteres «djokers» polèt esse eployîs, metans «*.wikipedia.org».\nMins i fåt pol moens on dominne di prumî livea, metans «*.org»<br />\nProtocoles ricnoxhous: <code>$1</code> (nelzès metoz nén dins vosse tchinne di cweraedje).",
+       "linksearch-text": "Des caracteres «djokers» polèt esse eployîs, metans «*.wikipedia.org».\nMins i fåt pol moens on dominne di prumî livea, metans «*.org»<br />\nProtocoles ricnoxhous: $1 (nelzès metoz nén dins vosse tchinne di cweraedje).",
        "linksearch-line": "$1 est loyî a pårti d' $2",
        "linksearch-error": "Les caracteres djokers èn polèt esse eployîs k' a l' atake d' on no d' dominne ou d' lodjoe.",
        "listusersfrom": "Håyner les uzeus a pårti di:",
index c8155da..ca1295a 100644 (file)
@@ -8,7 +8,8 @@
                        "Wiki indio",
                        "לערי ריינהארט",
                        "Kolega2357",
-                       "아라"
+                       "아라",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Bagisa ha ilarom an mga sumpay:",
        "otherlanguages": "Ha iba nga mga yinaknan",
        "redirectedfrom": "(Ginredirekta tikang ha $1)",
        "redirectpagesub": "Redirek nga pakli",
+       "redirectto": "Ig-redirect ngadto ha:",
        "lastmodifiedat": "Ini nga pakli kataposan ginliwat dida han $1, han $2.",
        "viewcount": "Ini nga pakli ginkanhi hin {{PLURAL:$1|makausa|$1 ka beses}}.",
        "protectedpage": "Ginpanalipdan nga pakli",
        "passwordreset": "igreset an tigaman-hit-pagsulod",
        "passwordreset-text-one": "Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.",
        "passwordreset-text-many": "{{PLURAL:$1|Butanga it usa nga mga surodlan basi makakarawat ko hin temporaryo nga tigaman-pansulod pinaagi ha email.}}",
-       "passwordreset-legend": "igreset an tigaman-hit-pagsulod",
        "passwordreset-disabled": "Waray ginpaandar an password reset hini nga wiki.",
        "passwordreset-emaildisabled": "Mga mga higamit ha email in waray pinaandar hini nga wiki.",
        "passwordreset-username": "Agnay hiton gumaramit:",
        "resettokens": "Igrest an mga token",
        "resettokens-text": "Puydi nimo mareset an mga token para makahatag hin pipira nga pribado nga datos nga may pakahisumpay ha imo akawnt dinhi.\nKinahanglan mo ini buhaton kun aksidenti nim nasaro hira ha iba nga tawo o an imo akawnt in nakompromiso.",
        "resettokens-no-tokens": "Waray token nga marereset.",
-       "resettokens-legend": "Igreset an mga token",
        "resettokens-tokens": "Mga token:",
        "resettokens-token-label": "$1 (yana nga balor: $2)",
        "resettokens-watchlist-token": "Token para han web feed (Atom/RSS) han[[Special:Watchlist|mga pagbag-o ha imo pakli han talaan-barantayon]]",
        "preview": "Pahiuna nga pagawas",
        "showpreview": "Pakit-a an pahiuna nga pagawas",
        "showdiff": "Igpakita an mga ginliwat",
-       "anoneditwarning": "'''Pahimatngon:''' Diri ka pa naka log-in.\nAn imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
+       "anoneditwarning": "<strong>Pahimatngon:</strong> Diri ka nakalog-in. An imo IP address in makikit-an han publiko kun magbuhat ka hin mga pagliwat. Kun ikaw in <strong>[$1 maglog-in]</strong> o <strong>[$2 maghimo hin account]</strong>, an imo mga pagliwat in maa-attribute ha imo agnay-hit-gumaramit, upod han pipira pa nga mga benepisyo.",
        "anonpreviewwarning": "''Diri ka naka-log in.  Mahisusurat an imo IP address ngada ha kanan pakli kaagi hit pagliwat kun igtipig nimo.''",
        "missingsummary": "<strong>Pahinumdom:</strong> Waray ka humatag hin halipotay nga masisiring hiton pagliwat. Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
        "missingcommenttext": "Alayon pagbutang hin komento ha ilarom.",
        "prefs-reset-intro": "Puydi nimo ini gamiton nga pakli para makareset han imo mga preperensya nga ginbutang nga daan han sityo. Diri ini puydi mapawaray-buhat.",
        "prefs-emailconfirm-label": "Kompirmasyon han email:",
        "youremail": "E-mail:",
-       "username": "{{HENERO:$1|Agnay hit gumaramit}}:",
+       "username": "{{GENDER:$1|Agnay hit gumaramit}}:",
        "prefs-memberingroups": "{{GENDER:$2|Api}} han {{PLURAL:$1|grupo|mga grupo}}:",
        "prefs-registration": "Oras han pagrehistro:",
        "yourrealname": "Tinuod nga ngaran:",
        "action-userrights": "Igliwat an ngatanan nga mga katungod han gumaramit",
        "action-sendemail": "Padara hin mga e-mail",
        "nchanges": "$1 {{PLURAL:$1|pagbag-o|mga pagbabag-o}}",
+       "enhancedrc-history": "kasaysayan",
        "recentchanges": "Mga kabag-ohan",
        "recentchanges-legend": "Mga pirilion han mga lab-as nga pagbag-o",
        "recentchanges-summary": "Nasubay han pinakalab-as nga pagbag-o ha wiki dinhi nga pakli.",
        "recentchanges-label-minor": "Gutiay ini nga pagliwat",
        "recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
        "recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
+       "recentchanges-label-plusminus": "An kadako han pakli in nabag-o hin ini nga numero nga mga byte",
+       "recentchanges-legend-heading": "'''Leyenda:'''",
        "rcnotefrom": "An ha ubos in mga pagbabag-o tikang han <strong>$2</strong> (kutob ngadto ha <strong>$1</strong> nga ginpakita).",
        "rclistfrom": "Pakit-a an mga ginbag-ohan tikang han $3 $2",
        "rcshowhideminor": "$1 gudti nga mga pagliwat",
+       "rcshowhideminor-show": "Pakit-a",
+       "rcshowhideminor-hide": "Tago-a",
        "rcshowhidebots": "$1 mga bot",
+       "rcshowhidebots-show": "Pakit-a",
+       "rcshowhidebots-hide": "Tago-a",
        "rcshowhideliu": "$1 an mga rehistrado nga gumaramit",
+       "rcshowhideliu-hide": "Tago-a",
        "rcshowhideanons": "$1 waray nagpakilala nga mga gumaramit",
+       "rcshowhideanons-show": "Pakit-a",
+       "rcshowhideanons-hide": "Tago-a",
        "rcshowhidepatr": "$1 mga pinatrolya nga mga paliwat",
        "rcshowhidemine": "$1 akon mga ginliwat",
+       "rcshowhidemine-show": "Pakit-a",
+       "rcshowhidemine-hide": "Tago-a",
        "rclinks": "Igpakita an katapusan nga $1 nga pagbabag-o ha sulod han urhi nga $2 ka mga adlaw<br />$3",
        "diff": "kaibhan",
        "hist": "kaagi",
        "newpageletter": "B",
        "boteditletter": "b",
        "rc_categories_any": "Bisan ano nga",
+       "rc-change-size-new": "$1 {{PLURAL:$1|nga byte|nga mga byte}} kahuman han pagbag-o",
        "newsectionsummary": "/* $1 */ bag-o nga bahin",
        "rc-enhanced-expand": "Igpakita an detalye",
        "rc-enhanced-hide": "Igtago an mga detalye",
        "nlinks": "$1 {{PLURAL:$1|nga sumpay|nga mga sumpay}}",
        "nmembers": "$1 {{PLURAL:$1|nga api|nga mga api}}",
        "nrevisions": "$1 {{PLURAL:$1|nga pagliwat|nga mga pagliwat}}",
-       "nviews": "$1 {{PLURAL:$1|nga pangita|nga mga pangita}}",
        "nimagelinks": "Gingamit ha $1 {{PLURAL:$1|nga pakli|nga mga pakli}}",
        "ntransclusions": "gingamit ha $1 {{PLURAL:$1|nga pakli|nga mga pakli}}",
        "specialpage-empty": "Waray mga resulta para hini nga report.",
        "pager-older-n": "{{PLURAL:$1|durudaan 1|durudaan $1}}",
        "booksources": "Mga libro nga tinikangan",
        "booksources-search-legend": "Pamilnga an mga libro nga gintikangan",
+       "booksources-search": "Bilnga",
        "specialloguserlabel": "Magburuhat:",
        "speciallogtitlelabel": "iiguon (titulo o gumarami):",
        "log": "Mga talaan",
        "emailuser": "Ig-e-mail ini nga gumaramit",
        "emailuser-title-target": "Ig-E-mail ini nga {{HENERO:$1|gumaramit}}",
        "emailuser-title-notarget": "Gumaramit han e-mail",
-       "emailpage": "Gumaramit han e-mail",
        "defemailsubject": "{{SITENAME}} e-mail tikang kan gumaramit na hi \"$1\"",
        "usermaildisabled": "Waray ginpagana an e-mail han gumaramit",
        "usermaildisabledtext": "Diri ka makakapadangat hin e-mail ha iba nga mga gumaramit ha dinhi nga wiki",
        "delete-edit-reasonlist": "Igliwat an mga rason han pagpara",
        "rollback": "Mga libot-pabalik nga pagliwat",
        "rollbacklink": "libot-pabalik",
+       "rollbacklinkcount": "rollback $1 {{PLURAL:$1|ka pagliwat|ka mga pagliwat}}",
        "rollbackfailed": "Diri malinamposon an paglibot-pabalik",
        "revertpage": "Ginpabalik an ginliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|hiruhimangraw]]) ngadto ha urhi nga pagliwat ni [[User:$1|$1]]",
        "sessionfailure-title": "Pakyas an sesyon",
        "tooltip-pt-mycontris": "Talaan han imo mga ámot",
        "tooltip-pt-login": "Gin-aaghat ka nga mag log-in, pero diri ini ginpipirit.",
        "tooltip-pt-logout": "gawas",
+       "tooltip-pt-createaccount": "Ginaag-hat ka nga maghimo hin account ngan maglog-in; pero diri ini mandatorya",
        "tooltip-ca-talk": "Hiruhimangraw mahiunong han sulod nga pakli",
-       "tooltip-ca-edit": "Puydi ka makaliwat hini nga pakli.  Alayon la paggamit han pahiuna nga paggawas nga piridlitan san-o an pagtipig",
+       "tooltip-ca-edit": "Igliwat ini nga pakli",
        "tooltip-ca-addsection": "Pagtikang hin bag-o nga bahin",
        "tooltip-ca-viewsource": "Ini nga pakli in pinaliporan.\nMakikit-an nimo an ginkuhaaan",
        "tooltip-ca-history": "Mga kahadto nga mga pagliwat hini nga pakli",
        "pageinfo-category-subcats": "Ihap han mga ubos-kaarangay",
        "pageinfo-category-files": "Ihap han mga paypay",
        "markaspatrolleddiff": "Igmarka komo ginpatrolya na",
-       "markaspatrolledtext": "Markaha ini nga pakli komo ginpatrolya na",
+       "markaspatrolledtext": "Markaha ini nga pakli nga napatrolyahan na",
        "markedaspatrolled": "Igmarka komo ginpatrolya na",
        "markedaspatrollederror": "Diri nakakamarka komo ginpatrolya na",
        "patrol-log-page": "Talaan han pagpatrolya",
        "exif-imagewidth": "Kahaluag",
        "exif-imagelength": "Kahitaas",
        "exif-ycbcrpositioning": "Pagpoposisyon han Y ngan C",
+       "exif-xresolution": "Resolusyon horizontal",
+       "exif-yresolution": "Resolusyon vertical",
        "exif-referenceblackwhite": "Padis han itom nga busag nga reperensya hin mga balor",
        "exif-datetime": "Pagliwat han petsa ngan oras han paypay",
        "exif-imagedescription": "Titulo han hulagway",
        "exif-model": "Modelo han kamera",
        "exif-software": "Software nga gingamit",
        "exif-artist": "Tag-iya",
+       "exif-exifversion": "Version han Exif",
        "exif-colorspace": "Kolor lat-ang",
+       "exif-datetimeoriginal": "Petsa ngan oras han data generation",
+       "exif-datetimedigitized": "Petsa ngan oras han pag-digitize",
        "exif-subsectime": "Mga bahin-segundo han PetsaOras",
        "exif-exposuretime-format": "$1 seg ($2)",
        "exif-fnumber": "F Numero",
        "htmlform-submit": "Isumite",
        "htmlform-reset": "Igbalik an mga pinamalyuan",
        "htmlform-selectorother-other": "iba",
+       "logentry-delete-delete": "Hi $1 {{GENDER:$2|ginpara}} an pakli nga $3",
        "revdelete-content-hid": "sulod nakatago",
        "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
        "revdelete-uname-hid": "nakatago an agnay-hit-gumaramit",
+       "logentry-move-move": "$1 {{GENDER:$2|ginbalhin}} an pakli nga $3 ngadto ha $4",
        "logentry-newusers-newusers": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create2": "An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1",
        "logentry-newusers-autocreate": "An gumaramit nga akawnt nga $1 in lugaring nga {{GENDER:$2|ginhimo}}",
+       "logentry-upload-upload": "Hi $1 {{GENDER:$2|gin-upload}} an $3",
        "rightsnone": "(waray)",
        "feedback-cancel": "Pasagdi",
        "feedback-close": "Human na.",
index 48db359..a08c972 100644 (file)
        "cancel": "Neenal",
        "moredotdotdot": "Ak yeneen...",
        "mypage": "Samaw xët",
-       "mytalk": "Xëtu waxtaanuwaay",
+       "mytalk": "Waxtaan",
        "anontalk": "Waxtaan ak bii IP",
        "navigation": "Joowiin",
        "and": "&#32;ak",
        "actions": "Jëf",
        "namespaces": "Barabu tur",
        "variants": "Wuute",
+       "navigation-heading": "Njëlul joowiin",
        "errorpagetitle": "Njuumte",
        "returnto": "Dellu ci wii xët $1.",
        "tagline": "Jóge  {{SITENAME}}.",
        "printableversion": "Sumb bu móolu",
        "permalink": "Lëkkalekaay yu sax",
        "print": "Móol",
+       "view": "Xool",
+       "view-foreign": "Xoolee ko ci $1",
        "edit": "Soppi",
        "create": "Sos",
+       "create-local": "Yokk faramfàcceb barab bii",
        "editthispage": "Soppi xët wii",
        "create-this-page": "Sos wii xët",
        "delete": "Far",
        "otherlanguages": "Yeneeni làkk",
        "redirectedfrom": "(Yoonalaat gu jóge $1)",
        "redirectpagesub": "Xëtu yoonalaat",
+       "redirectto": "Jëmalewaat:",
        "lastmodifiedat": "Coppite bu mujj bu xët wii $1 ci $2.<br />",
        "viewcount": "Xët wii nemmeeku nañ ko {{PLURAL:$1|$1 yoon|$1 yoon}}.",
        "protectedpage": "Xët wees aar",
        "policy-url": "Project:àtte",
        "portal": "Buntub askan",
        "portal-url": "Project:Xët wu njëkk",
-       "privacy": "Politigu mbóot",
-       "privacypage": "Project:Xibaar ci say mbóot",
+       "privacy": "Politigu sutura",
+       "privacypage": "Project:Xibaari sutura",
        "badaccess": "Njuumte ci ndigël gi",
        "badaccess-group0": "Amoo ay sañ-sañ yu doy ngir man a def li nga bëgg a def.",
        "badaccess-groups": "Jëf ji ngay jéem a def dañu koo jagleel jëfandikukat yi bokk ci {{PLURAL:$2|mbooloo mu|benn ci mbooloo yi toftal}}: $1.",
        "virus-scanfailed": "Saytu gi dog na (code $1)",
        "logouttext": "Fi mu nekk nii génn nga.'''\n\nMan ngaa wéy di jëfandikoo {{SITENAME}} ci anam buñ la dul xamme walla nga  <span class='plainlinks'>[$1 duggewaat]</span> ak wenn tur wi walla ak weneen.",
        "yourname": "Sa turu jëfandikukat",
+       "userlogin-yourname": "Turu jëfandikukat",
+       "userlogin-yourname-ph": "Duggalal sa turu jëfandikukat",
        "yourpassword": "Sa baatujàll",
+       "userlogin-yourpassword": "Baatujàll",
        "yourpasswordagain": "Bindaatal sa baatujàll",
        "remembermypassword": "Denc sama yëgley dukkukaay ci bii joowukaay (lu ëpp nag $1 {{PLURAL:$1|day|days}})",
        "yourdomainname": "Sa barab",
        "gotaccount": "Sos nga am sàq? '''$1'''.",
        "gotaccountlink": "Dugg",
        "createaccountmail": "Jaare ko ci m-bataaxal",
+       "createacct-captcha": "Caytug kaaraange",
+       "createacct-imgcaptcha-ph": "Duggalal mbind  miy toftal mi ngay gis",
        "badretype": "Baatujàll yi nga bind yemuñu.",
        "userexists": "Turu jëfandikukat bi nga bind am na boroom ba noppi. Tànnal weneen.",
        "loginerror": "Njuumte ci dugg gi",
        "createaccount-text": "Kenn ku sos am sàq ci {{SITENAME}} te tudd $2 ($4).\nBaatujàll bu « $2 » mooy « $3 ». Li gën mooy nga dugg ci teel te soppi baatujàll bi.\n\nJéelaleel bataaxal bii su fekkee ci njuumte nga sosee mii sàq.",
        "login-throttled": "Jéem ngaa dugg ay yoon te jàllul.\n\nNgalla néggandikul ab diir door a jéemaat.",
        "loginlanguagelabel": "Làkk : $1",
+       "pt-login": "Dugg",
+       "pt-createaccount": "Sos am sàq",
+       "pt-userlogout": "Génn",
        "changepassword": "Coppiteg baatujàll bi",
        "resetpass_announce": "Danga dugg ak ab baatujàll bu saxul-dakk, buñ la yónne cib bataaxal. Ngir matal mbindu mi, faaw nga roof ab baatujàll bu bees fii:",
        "resetpass_text": "<!-- Bindal fii -->",
        "preview": "Wonendi",
        "showpreview": "Wonendi",
        "showdiff": "Wone samay soppi",
-       "anoneditwarning": "'''Moytul :''' Duggoo. Sa màkkaanub IP di nañu ko dugal ci jaar-jaaru xët wii.",
+       "anoneditwarning": "<strong>Moytul :</strong> Duggoo. Bépp coppite boo def sa màkkaanub IP lañu koy xaatimee ci jaar-jaaru xët wi, ñépp di ko gis. Waaye soo <strong>[$1 duggee]</strong> walla nga <strong>[$2 sos am sàq]</strong>, say coppite sa tur lañuy àndal ak yeneeni njariñ.",
        "missingsummary": "'''Fattali :''' Defoo ab tënk ci coppite yi nga amal. Soo cuqaate ci «Denc xët wi», say coppite di nañ dugg te duñ am tënk, maanaam duñ xam loo soppi.",
        "missingcommenttext": "Di la sakku nga dugal ab tënk ci suuf, jërëjëf.",
        "missingcommentheader": "'''Fattali :''' Joxoo ab koj say coppite. Soo cuqaate ci «Denc xët wi», di nañ leen dugal te duñ am koj.",
        "newarticletext": "Da ngaa topp ab lëkkalekaay buy jëme ci aw xët wu amagul. ngir sos xët wi léegi, duggalal sa mbind ci boyot bii ci suuf (man ngaa yër [$1 xëtu ndimbal wi] ngir yeneeni xamle). Su fekkee njuumtee la fi indi cuqal ci '''dellu''' bu sa joowukaay.",
        "anontalkpagetext": "---- ''Yaa ngi ci xëtu waxtaanuwaayu ab jëfandikukatu alaxam, bu bindoogul ba fim ne mbaa jëfandikoowul am sàqam.\nKon ngir xàmmee ko fàw nga jëfandikoo màkkaanub IP wam. Te màkkaanub IP jëfandikukat yu bari man nañ koo bokk.\nSu fekkee jëfandikukatu alaxam nga, te nga gis ne dees laa féetale ay kàddu yoo moomul, ngalla [[Special:UserLogin|bindu]] walla [[Special:UserLogin|dugg]] ngir benn jaxase bañatee am ëllëg .''",
        "noarticletext": "Fi mu ne ni amul menn mbind ci xët wii; man ngaa [[Special:Search/{{PAGENAME}}|seet koju xët wi]] ci yeneen xët, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} seet ci xëtu jagleel wi ],\nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} soppi xët wii]</span>.",
-       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan nga [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët,\nwalla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ci yéenekaay yees ko féetaleel]</span>.",
+       "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan ngaa [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët walla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ciy yéenekaayam]</span>. Numu man a deme, amoo sañ-sañu sos wii xët.",
        "userpage-userdoesnotexist": "Mii sàqum jëfandikukat « <nowiki>$1</nowiki> » du bu ku-bindu. Seetal bu baax ndax da ngaa namma sos walla soppi wii xët.",
        "clearyourcache": "'''Karmat :''' Soo dence xët wi ba noppi, faaw nga far nëmbiitu sa joowukaay ngir man a gis say coppite, te nga, su dee '''Mozilla / Firefox / Safari :''' cuq ci ''yeesal'' te bësaale ''shift'', walla nga bës ''Shift-R'' walla ''Ctrl-F5'' (Command-R ci Mac ), su dee '''Konqueror''': cuq ''yeesal'' walla nga bës ''F5''; su dee '''Opera''' faral nëbiit li (''Jumtukaay → Tànneef'') su dee '''Internet Explorer:''' cuq ci ''yeesal te bësaale ''Ctrl''  walla nga bës ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Xelal :''' di la digël nga cuq ci «Wonendi» ngir gis say xobi CSS walla JavaScript yu bees laata nga leen di denc.",
        "shown-title": "Wone $1 {{PLURAL:$1|ngérte|ngérte}} ciw xët",
        "viewprevnext": "Xool ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''wenn xët wu tudd « [[:$1]] » moo am ci bii wiki'''",
-       "searchmenu-new": "'''Sosal xët wii di « [[:$1|$1]] » ci bii wiki !'''",
+       "searchmenu-new": "<strong>Sosal xët wii di « [[:$1|$1]] » ci bii wiki !</strong>\n{{PLURAL:$2|0=|Xoolal itam xët wees gis ak sa ceet gi.|Xoolal itam ngértey ceet gi.}}",
        "searchprofile-articles": "Xëti ëmbiit",
        "searchprofile-images": "Barixibaarukaay",
        "searchprofile-everything": "Lépp",
        "searchrelated": "yeneeni ngérte",
        "searchall": "yépp",
        "showingresults": "Woneg <b>$1</b> {{PLURAL:$1|ngérte|ciy ngérte}} doore ko ci #<b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Ngérte <strong>$1</strong> ci <strong>$3</strong>|Ngérte <strong>$1 - $2</strong> ci <strong>$3</strong>}}",
        "search-nonefound": "Ceet gi jurul dara.",
        "powersearch-legend": "Ceet gu xóot",
        "powersearch-ns": "Seet ci barabi tur yi :",
        "search-external": "Ceet gu biti",
        "searchdisabled": "Ceet gi ci {{SITENAME}} doxul. Ci négandiku doxal gi, man nga seet ci Google. Jàppal ne, xéj-na ëmbiti {{SITENAME}} gi ci bii seetukaay yeesaluñ leen.",
        "preferences": "Tànneef",
-       "mypreferences": "Samay tànneef",
+       "mypreferences": "Tànnéef",
        "prefs-edits": "Limu coppite yi:",
        "prefs-skin": "Melokaan",
        "skin-preview": "Wonendil",
        "action-userrights-interwiki": "soppi aqi jëfandikukat yu jëfandikukat yu beneen wiki",
        "action-siteadmin": "caabi walla caabeedi dàttub njoxe bi",
        "nchanges": "$1 {{PLURAL:$1|coppite|ciy coppite}}",
+       "enhancedrc-history": "jaar-jaar",
        "recentchanges": "Coppite yu mujj",
        "recentchanges-legend": "tànneefi coppite yu mujj",
        "recentchanges-summary": "Toppal ci wii xët coppite yu mujj ci {{SITENAME}}.",
        "recentchanges-label-minor": "Coppite gu néewal la",
        "recentchanges-label-bot": "Coppite bu ab bot def",
        "recentchanges-label-unpatrolled": "Coppite bii kenn fugloogu ko",
-       "recentchanges-legend-newpage": "$1 - xët wu bees",
+       "recentchanges-label-plusminus": "Dayoob xët wi soppeeku na ci lu ni toll ciy byte.",
+       "recentchanges-legend-heading": "'''Piri:'''",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wone itam [[Special:NewPages|limu xët yu bees yi]]) -",
        "rcnotefrom": "Yii ñooy coppite yi dalee '''$2''' (ba '''$1''').",
        "rclistfrom": "Wone coppite yi mujj yi dooree $3 $2",
        "rcshowhideminor": "$1 Coppite yu néewal",
+       "rcshowhideminor-hide": "Nëbb",
        "rcshowhidebots": "$1 bot yi",
-       "rcshowhideliu": "$1 jëfandikukat yu bindu",
+       "rcshowhidebots-show": "Wone",
+       "rcshowhideliu": "$1 jëfandikukat yi bindu",
+       "rcshowhideliu-hide": "Nëbb",
        "rcshowhideanons": "$1 jëfandikukat yu binduwul",
+       "rcshowhideanons-hide": "Nëbb",
        "rcshowhidepatr": "$1 coppite bees fuglu",
        "rcshowhidemine": "$1 samay cëru",
+       "rcshowhidemine-hide": "Nëbb",
        "rclinks": "Wone $1 coppite yi mujj ci $2  fan yi mujj <br />$3.",
        "diff": "wuute",
        "hist": "Jaar",
        "rc_categories": "Digalub wàll yi (xaajale leen ak « \"|\" »)",
        "rc_categories_any": "Yépp",
        "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} ginnaaw coppite gi",
        "newsectionsummary": "/* $1 */ xaaj bu bees",
        "rc-enhanced-expand": "Xool faramfacce yi (laaj na JavaScript)",
        "rc-enhanced-hide": "nëbb faramfacce yi",
        "filewasdeleted": "Dencukaay bu tudd nii yeboon nañ ko fi ba noppi, faraat ko. Saytul $1 laataa nga koy yebaat.",
        "filename-bad-prefix": "Turu dencukaay bi ngay yeb moo ngi tambalee '''\"$1\"''', te muy tur wu nosukaay bi di joxal boppam nataalukaay yi.\nDila ñaan nga tànn tur wuy faramfacce dencukaay bi.",
        "upload-success-subj": "Yeb gi jàll na",
+       "license-header": "Anami Jëfandikoo gi",
        "imgfile": "Dencukaay",
        "listfiles": "Limu dencukaay",
        "listfiles_date": "Taariix",
        "filehist-dimensions": "Dayoo",
        "filehist-filesize": "Dayoo ŋara wi",
        "filehist-comment": "Saraa",
-       "imagelinks": "Xët yi am bii dencukaay",
+       "imagelinks": "Njëfandikug dencukaay bi",
        "linkstoimage": "{{PLURAL:$1|Xët wii ci suuf ëmb na|$1 xët yii ci suuf ëmb nañu}} bii dencukaay:",
        "linkstoimage-more": "Lu ëpp $1 {{PLURAL:$1|xët lëkkale nañu leen|xët lëkkale nañu leen}} ak bii dencukaay.\nLim bii di toftal moo lay won {{PLURAL:$1|xët wi ñu njëkk a|xët yi ñu njëkk a}} lëkkale ak wii.\nAb [[Special:WhatLinksHere/$2|lim bu mat]] jàppandi na.",
        "nolinkstoimage": "Amul wenn xët wu ëmb bii dencukaay.",
        "uploadnewversion-linktext": "Yeb sumb bu bees bu bii dencukaay",
        "shared-repo-from": "$1",
        "shared-repo": "ab dencu bees bokk",
+       "upload-disallowed-here": "Manoo bindaat ci kaw bii dencukaay.",
        "filerevert": "Loppanti $1",
        "filerevert-legend": "Delloowaat dencukaay bi",
        "filerevert-intro": "Yaa ngi waaj a delloowaat dencukaay bii di '''[[Media:$1|$1]]''' ci  [$4 sumb bu $2 ci $3].",
        "nlinks": "$1 {{PLURAL:$1|lëkkalekaay|ciy lëkkalekaay}}",
        "nmembers": "$1 {{PLURAL:$1|xët|ciy xët}} ci biir",
        "nrevisions": "$1 {{PLURAL:$1|sumb|sumb}}",
-       "nviews": "$1 {{PLURAL:$1|nemmeeku|nemmeeku}}",
        "specialpage-empty": "Xët wii amul dara",
        "lonelypages": "Xëti jiriim",
        "lonelypagestext": "Xët yiy toftal amuñuy lëkkalekaay yu ne ci yeneen xët yu leen di ubbi te ëmbuwuñu itam ci benn xëtu {{SITENAME}}.",
        "mailnologin": "Amul benn mákkaan boo man a yónne bataaxal bi",
        "mailnologintext": "Ngir man a yónney bataaxal laaj na nga [[Special:UserLogin|dugg]] te it am ab màkkaanub m-bataaxal bu baax ci say [[Special:Preferences|tànneef]].",
        "emailuser": "Bind bii jëfandikukat",
-       "emailpage": "Yónne ab m-bataaxal bii jëfandikukat",
        "defemailsubject": "M-bataaxalu {{SITENAME}}",
        "noemailtitle": "Amul mákkaanub m-bataaxal",
        "noemailtext": "Bii jëfandikukat joxewul ab màkkaanub m-bataaxal bu baax.",
        "delete-toobig": "Xët wii dafa am jaar-jaar bu bari, bu weesu $1 {{PLURAL:$1|sumb|sumb}}. Farteg yooyule xët dañu koo digal ngir bañ ay jafe-jafe yu mana am ci doxinu {{SITENAME}}.",
        "delete-warning-toobig": "Xët wii dafa am jaar-jaar bu bari, bu weesu $1 {{PLURAL:$1|sumb|sumb}}. Seenug farte man naa jur ag jaxasoo ci dáttub njoxeeb {{SITENAME}} ; def ko ak teey.",
        "rollback": "Loppanti coppite yi",
-       "rollback_short": "Loppanti",
        "rollbacklink": "delloowaat",
        "rollbackfailed": "Loppanti gi antuwul",
        "cantrollback": "Neenal coppite gi manula nekk;\nKi def coppite gi mooy Kenn ki masa cëru ci xët wii.",
        "undelete-show-file-submit": "Waaw",
        "namespace": "Barabu tur :",
        "invert": "Jallarbi fal gi",
+       "tooltip-invert": "Falal bii néeg ngir nëbb coppitey xët yi ci barabu tur bi nga tànn (ak yi mu lonkool su fekkee tànnaale nga leen)",
+       "namespace_association": "Barabu turam",
+       "tooltip-namespace_association": "Falal bii néeg ngir boolewaale ci xëtu waxtaanuwaay walla koju barabu tur bi nga fal",
        "blanknamespace": "(njëkk)",
-       "contributions": "Cëruy bii jëfandikukat",
+       "contributions": "Cëruy bii {{GENDER:$1|jëfandikukat}}",
        "contributions-title": "Cëru yu jëfandikukat bii di $1",
-       "mycontris": "Samay cëru",
+       "mycontris": "Cëru",
        "contribsub2": "Ngir $1 ($2)",
        "nocontribs": "Amul benn coppite bu melokaanoo nii bu ñu gis.",
        "uctop": "(bi mujj)",
        "nolinkshere-ns": "Amul wenn xët wu lëkkalook wii '''[[:$1]]''' ci barabu tur bi nga tànn.",
        "isredirect": "Xëtu jubluwaat",
        "istemplate": "mboole",
-       "isimage": "lëkkalekaayu nataal bi",
+       "isimage": "lëkkalekaayu dencukaay bi",
        "whatlinkshere-prev": "{{PLURAL:$1|wi jiitu|$1 yi jiitu}}",
        "whatlinkshere-next": "{{PLURAL:$1|wi toftal|$1 yi toftal}}",
        "whatlinkshere-links": "← lëkkalekaay",
        "tooltip-pt-mycontris": "Limu say cëru",
        "tooltip-pt-login": "Woo nan la ngir nga xammeku, waaye doonul lu manuta ñakk.",
        "tooltip-pt-logout": "Génn",
+       "tooltip-pt-createaccount": "Dees na la digal nga bindu te dugg, donte doonul lu manul-ñàkk",
        "tooltip-ca-talk": "Waxtaan yi ñeel xët wii",
-       "tooltip-ca-edit": "Man ngaa soppi xët wi. Ngir yàlla wonendil laataa ngay denc.",
+       "tooltip-ca-edit": "Soppi xët wii",
        "tooltip-ca-addsection": "Tambali xaaj bu bees",
        "tooltip-ca-viewsource": "Xët wii dañ koo aar. Waaye man ngaa xool ëmbitam.",
        "tooltip-ca-history": "Sumb yi weesu yu xët wi.",
        "tooltip-upload": "Door yeb gi",
        "tooltip-rollback": "\"Delloowaat\" dafay neenal coppitey cërukat bi mujj ci xët wii ci benn cuq.",
        "tooltip-undo": "\"Neenal\" dafay far coppite yi te ubbi palanteeru coppite bi ci anamug wonendi.\nDafay tax nga man a bind ngirte li ci boyotu tënk bi.",
+       "tooltip-summary": "Def ci ab tënk",
        "common.css": "/* CSS yiñ def fii dañuy am ay njeexit ci col yépp  */",
        "common.js": "/* Bépp JavaScript buñ fi duggal, xët yéppa koy yeb ak jëfandikukat bumu manti doon. */",
        "anonymous": "Benn walla ay jëfandikukat yu binduwul yu {{SITENAME}}",
        "spamprotectiontitle": "Seggukaay lank-spam",
        "spam_reverting": "Loppantib sumb mu mujj mu amul lëkkalekaay buy jëme $1",
        "spam_blanking": "Setal nañ wecc sumb yi amoon lëkkalekaay buy jëme $1",
+       "simpleantispam-label": "Caytu lànk-spam.\n<strong>Bu</strong> fi yokk lenn!",
+       "pageinfo-toolboxlink": "Xibaar ci xëtu wi",
        "previousdiff": "← Coppite yi gën a yàgg",
        "nextdiff": "Coppite yi mujj →",
        "file-info": "Réyaayu file bi : $1, type MIME : $2",
        "file-info-size": "$1 × $2 pixels, réyaayu file bi : $3, type MIME : $4",
        "file-nohires": "Amul kem bu ëpp bii bu jàppandi.",
        "svg-long-desc": "Dencukaay SVG, kem bu jaadu  $1 × $2 pixel, dayoo dencukaay bi: $3",
-       "show-big-image": "Ngandalal nataal gii",
+       "show-big-image": "Dencukaay bi mu bàyyikoo",
+       "show-big-image-preview": "Dayoob bii wonendi: $1.",
+       "show-big-image-size": "$1 × $2 pixel",
        "ilsubmit": "Seet",
        "bydate": "ci diir",
        "bad_image_list": "Limu  cër yi nekk ci rëdd yi tàmbalee * rekk lees di faale.\nLëkkalekaay bu njëkk bu aw rëdd dafa war a nekk bu ab dencukaay bu baaxul.\nLëkkalekaay yiy toftal, ci wenn rëdd wi, dees leen di jàppee nikiy sette, maanaam xët yi dencukaay bi man a feeñ.",
        "metadata-help": "Bii dencukaay dafa ami xibaar yees ci yokk, xéj-na nataalukaay bu waaraame walla waaraamalekaay bees jëfandikoo moo leen ci yokk. Su fekkee soppees na xar-kanamu dencukaay bi, yenn ci fàramfacce ñeel ko manees nañoo bañ a dëppook li am.",
        "metadata-expand": "Wone faramfacce yi",
        "metadata-collapse": "Nëbb faramfacce yi",
-       "metadata-fields": "Tool yi ñu jagleel jégginjoxe yu EXIF yi ñu lim ci wii xët di nañu leen wone ci xëtu nataal wi suñu waññee àlliwa bu jegginjoxe yi.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Tooli jégginjoxe yu nataal yi ñu lim ci bii bataaxal dañ leen di wone ci xëtu faramfàcce wu nataal bi su fekkee dañoo lem àlliwab jégginjoxe bi.\nYeneen tool yi dañ leen di nëbb.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Yaatuwaay",
        "exif-imagelength": "Kawewaay",
+       "exif-orientation": "Jubluwaay",
+       "exif-datetime": "Taariix ak waxtu coppiteg dencukaay bi",
+       "exif-make": "Defarkatu nataalukaay bi",
+       "exif-software": "Jëfekaay bees jëfandikoo",
+       "exif-exifversion": "Sumb bu Exif",
+       "exif-colorspace": "Barabu melo",
        "exif-usercomment": "Kadduy jëfëndikookat bi",
+       "exif-datetimeoriginal": "Taariix ak waxtub njurug njoxe yi",
+       "exif-orientation-1": "Jaadu",
        "exif-componentsconfiguration-0": "Amul",
        "namespacesall": "Yépp",
        "monthsall": "Yépp",
        "watchlisttools-view": "Limu toppte",
        "watchlisttools-edit": "Xool te soppi limu toppte gi",
        "watchlisttools-raw": "Soppi lim gi",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|waxtaan]])",
        "specialpages": "Xëti jagleel",
+       "tag-filter": "Seggee ak [[Special:Tags|Tafaan]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tag}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|moo far}} xët wi $3",
        "revdelete-restricted": "doxalub digal ngir yorkat yi",
        "revdelete-unrestricted": "digal ngir yorkat yi deñ na",
+       "logentry-newusers-create": "Sàqum jëfandikukat $1 sos nañu ko",
        "rightsnone": "(menn)",
-       "revdelete-summary": "soppi tënk gi"
+       "revdelete-summary": "soppi tënk gi",
+       "searchsuggest-search": "Seet"
 }
index 04e30ad..ae6928f 100644 (file)
@@ -18,7 +18,9 @@
                        "LNDDYL",
                        "TheChampionMan1234",
                        "Fitoschido",
-                       "Poiuyt"
+                       "Poiuyt",
+                       "反共复国",
+                       "姑苏小恐龙"
                ]
        },
        "tog-underline": "鏈接下橫線:",
        "tog-showtoolbar": "顯示編傢伙欄",
        "tog-editondblclick": "捺兩記編頁",
        "tog-editsectiononrightclick": "用右捺標題編段",
-       "tog-watchcreations": "畀我建个页搭我传个文件加进我个关注表里去",
-       "tog-watchdefault": "畀我编个页搭文件加进我个关注表里去",
+       "tog-watchcreations": "拿我建个页面搭我传个文件加到我个关注表里去",
+       "tog-watchdefault": "拿我编个页面搭文件加到我个关注表里去",
        "tog-watchmoves": "畀我移个页搭文件加进我个监控列表里去",
        "tog-watchdeletion": "畀我刪脫個頁搭文件加進我個關注表裏",
+       "tog-watchrollback": "拿我执行过回退个页面加到我个关注表里去",
        "tog-minordefault": "默認記全部編都是細個",
        "tog-previewontop": "編寫框頭前顯示先望",
        "tog-previewonfirst": "頭垡編寫顯示先望",
        "view": "望",
        "view-foreign": "登$1上看",
        "edit": "编",
+       "edit-local": "编辑本地说明",
        "create": "建",
        "create-local": "添加本地说明",
        "editthispage": "編箇頁",
        "jumptonavigation": "导航",
        "jumptosearch": "搜寻",
        "view-pool-error": "對弗住,服務器能界超載。\n望箇頁個人忒多哉。\n相勞爾等瑲起再試試相趒箇頁來。\n\n$1",
+       "generic-pool-error": "對弗住,服務器能界超載。\n望箇頁個人忒多哉。\n相勞爾等瑲起再試試相趒箇頁來。",
        "pool-timeout": "等锁过时",
        "pool-queuefull": "池队列满哉",
        "pool-errorunknown": "弗识个错误",
+       "pool-servererror": "池计数器服务现在弗好用($1)",
+       "poolcounter-usage-error": "用法出错:$1",
        "aboutsite": "有关{{SITENAME}}",
        "aboutpage": "Project:关于",
        "copyright": "除非另外声明,内容侪拉$1下底发布。",
        "disclaimers": "免责声明",
        "disclaimerpage": "Project:免责声明",
        "edithelp": "編寫幫助",
+       "helppage-top-gethelp": "帮忙",
        "mainpage": "封面",
        "mainpage-description": "封面",
        "policy-url": "Project:策略",
        "ok": "好",
        "retrievedfrom": "取自“$1”",
        "youhavenewmessages": "你侬有$1($2)。",
+       "youhavenewmessagesfromusers": "侬有来自{{PLURAL:$3|其他用户|$3个用户}}的$1($2)。",
        "newmessageslinkplural": "{{PLURAL:$1|新消息|999=新消息}}",
-       "newmessagesdifflinkplural": "此垡̺{{PLURAL:$1|变化}}",
+       "newmessagesdifflinkplural": "此垡̺{{PLURAL:$1|变化|999=变化}}",
        "youhavenewmessagesmulti": "爾徠$1裏有新信息",
        "editsection": "编辑",
        "editold": "编",
        "toc": "目录",
        "showtoc": "顯示",
        "hidetoc": "囥脫",
+       "collapsible-collapse": "折叠",
+       "collapsible-expand": "展开",
+       "confirmable-confirm": "{{GENDER:$1|侬}}啊确定?",
+       "confirmable-yes": "是",
+       "confirmable-no": "弗是",
        "thisisdeleted": "望要弗復原$1?",
        "viewdeleted": "$1望望相?",
        "restorelink": "$1個刪脫個版本",
        "site-atom-feed": "$1个Atom订阅",
        "page-rss-feed": "“$1”個RSS訂閱",
        "page-atom-feed": "\"$1\" 个Atom订阅",
-       "red-link-title": "$1 (呒有箇页)",
+       "red-link-title": "$1(页面弗存在)",
        "sort-descending": "倒排",
        "sort-ascending": "顺排",
        "nstab-main": "页",
        "readonly_lag": "从数据库服务器垃拉从主服务器上更新,数据库已经拨自动锁定",
        "internalerror": "内部错误",
        "internalerror_info": "内部错误:$1",
+       "internalerror-fatal-exception": "类型“$1”个致命错误",
        "filecopyerror": "弗好拿文件“$1”复制到“$2”。",
        "filerenameerror": "拿文件“$1”重命名为“$2”失败。",
        "filedeleteerror": "弗好删除文件“$1”。",
        "directorycreateerror": "创建目录“$1”失败。",
+       "directoryreadonlyerror": "目录“$1”是只读个。",
+       "directorynotreadableerror": "目录“$1”读弗出来。",
        "filenotfound": "寻弗着文件 \"$1\"。",
        "unexpected": "非正常值:“$1”=“$2”。",
        "formerror": "错误:提交表单失败",
        "badarticleerror": "呒处垃拉箇只页面进行箇只操作。",
        "cannotdelete": "无处删除页面或图像 \"$1\"。\n渠作兴已经拨别人家删除脱哉。",
        "cannotdelete-title": "\"$1\"箇页删弗爻",
+       "delete-hook-aborted": "删除畀钩子取消。\n渠弗曾畀出解释。",
        "no-null-revision": "\"$1\"页呒处建新个修改",
        "badtitle": "坏标题",
        "badtitletext": "所请求页面个标题是无效个、弗存在,跨语言或跨wiki链接个标题错误。渠作兴包含一只或多只弗好用拉标题里向字符。",
+       "title-invalid-empty": "请求个页面标题是空个,或着只包括名字空间个名称。",
+       "title-invalid-utf8": "请求个页面标题包括一只无效个UTF-8序列。",
+       "title-invalid-interwiki": "请求个页面标题包含跨wiki个链接,伊弗好用于标题。",
+       "title-invalid-talk-namespace": "请求个页面标题引用子一只弗好存在个讨论页面。",
+       "title-invalid-characters": "请求个页面标题包括无效字符:“$1”。",
+       "title-invalid-relative": "标题有相对个路径。相关个页面标题(./, ../)呒没效果,因为用户浏览器经常呒没办法到达这些页面。",
+       "title-invalid-magic-tilde": "请求个页面标题包含呒没效果个连续波浪线(<nowiki>~~~</nowiki>)。",
+       "title-invalid-too-long": "请求个页面标题忒长。作为UTF-8编码,它弗好超过$1个{{PLURAL:$1|字节}}。",
+       "title-invalid-leading-colon": "请求个页面标题开头包括一只呒没效果个冒号。",
        "perfcached": "下向是缓存数据,呒数弗是最新个。 A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "下头是缓存数据,阿末一趟更新辰光是$1。缓存里最多有{{PLURAL:$4|$4条结果}}。",
        "querypage-no-updates": "当前禁止对此页面进行更新。箇搭个数据弗好立即刷新。",
        "viewsource": "望源码",
+       "viewsource-title": "望“$1”个源代码",
        "actionthrottled": "动作已压制",
        "actionthrottledtext": "基于反垃圾链接个考量,限制垃拉短时间内多趟重复箇只操作。请过脱几分钟再试试看。",
        "protectedpagetext": "箇页锁牢定,防编搭各许操作。",
-       "viewsourcetext": "侬可以查看搭仔复制箇只页面个源码",
+       "viewsourcetext": "侬可以查看搭仔复制箇只页面个源码",
        "viewyourtext": "你侬好望也好畀'''你侬编个'''复制到箇页:",
        "protectedinterface": "箇页为箇维基个软件提供界面文本,锁牢定防乱用。\n加改全部维基个译文,用[//translatewiki.net/ translatewiki.net],MediaWiki软件个本地化计划。",
        "editinginterface": "<strong>警告:</strong>侬来里编写个页面是畀软件用个界面文本。箇页变化会影响各许人个界面样子。",
+       "translateinterface": "要加入或着更改所有个wiki个翻译,请侬访问MediaWiki本地化项目个网站[//translatewiki.net/ translatewiki.net]。",
        "cascadeprotected": "箇只页面拨保护拉许,因为箇只页面拨下底已经标注“级联保护”个{{PLURAL:$1|一只|多只}}被保护页面包含:\n$2",
        "namespaceprotected": "侬无没编辑'''$1'''名字空间里向页面个权限。",
        "customcssprotected": "箇CSS页你呒处编,箇页有各许用户个私人设置。",
        "invalidtitle-unknownnamespace": "非法个题目头,有弗识个数字$1搭文字$2",
        "exception-nologin": "朆登录",
        "exception-nologin-text": "请登录来访问箇页面或操作。",
+       "exception-nologin-text-manual": "望箇页面或者操作需要侬$1。",
        "virus-badscanner": "设置问题:未知个反病毒扫描器:''$1''",
        "virus-scanfailed": "扫描失败(代码 $1)",
        "virus-unknownscanner": "未知个反病毒扫描器:",
        "createacct-benefit-body2": "{{PLURAL:$1|页}}",
        "createacct-benefit-body3": "此垡 {{PLURAL:$1|出力个人}}",
        "badretype": "倷输入个密码搭倪个档案弗配。",
+       "usernameinprogress": "迭个用户名个账户创建已经勒了进行。请侬等一等。",
        "userexists": "用戶名有人用哉。相勞爾揀別樣名字。",
        "loginerror": "登录错误",
        "createacct-error": "建账号出错",
        "wrongpassword": "密码弗对。请侬再试试看。",
        "wrongpasswordempty": "密码为空,请重试。",
        "passwordtooshort": "密码起码要$1个字符。",
+       "passwordtoolong": "密码弗能超过{{PLURAL:$1|$1个字符}}。",
        "password-name-match": "密码弗好搭户名一样。",
        "password-login-forbidden": "用箇名字搭密码是弗准个。",
        "mailmypassword": "重置密码",
        "createaccount-text": "有人垃拉{{SITENAME}}里向利用侬个邮箱创建仔一只叫 \"$2\" 个新帐户($4),密码是 \"$3\" 。侬应该立即登录并更改密码。\n\n如果箇个账户创建错误个说话,侬可以忽略此信息。",
        "login-throttled": "你侬试登忒多次哉。\n等 $1 再试试凑相。",
        "login-abort-generic": "登录弗成功 - 已终止",
+       "login-migrated-generic": "侬个账号已经畀移脱哉,并且侬个用户名来箇wiki弗再存在。",
        "loginlanguagelabel": "语言:$1",
        "suspicious-userlogout": "侬登出个要求已经拨回头脱,因为渠可能是由已损坏个浏览器或者缓存代理传送个。",
+       "createacct-another-realname-tip": "真实姓名是选填个项目。\n假使侬选择提供伊,伊会得用勒了贡献署名方面高头。",
        "pt-login": "登录",
        "pt-login-button": "登录",
        "pt-createaccount": "建账号",
        "pt-userlogout": "登出",
+       "user-mail-no-addy": "尝试发送邮件而弗附带电子邮件个地址。",
+       "user-mail-no-body": "试图发送空个或者主体短的一点也弗合理个电子邮件",
        "changepassword": "改密码",
        "resetpass_announce": "要完成登录,侬必须设定一只新密码。",
        "resetpass_header": "更改密码",
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "无效个临时或者现有密码。\n侬作兴已经成功拿密码改脱,或者已经请求一个新个临时密码。",
+       "resetpass-recycled": "请重置侬个密码是忒侬当前密码不同个密码。",
        "resetpass-temp-password": "临时密码:",
        "passwordreset": "重置密码",
        "passwordreset-username": "用戶名",
        "loginreqlink": "登录",
        "loginreqpagetext": "侬必须$1再好查看其它页面。",
        "accmailtitle": "密码已发送哉。",
-       "accmailtext": "已经为[[User talk:$1|$1]] 产生只随机密码,并且已经发送到$2。\n\n登录之后,侬可以垃拉 ''[[Special:ChangePassword|箇只页面]]''更改密码。",
+       "accmailtext": "已经为[[User talk:$1|$1]]产生只随机密码,并且已经发送到$2。登录之后,侬可以垃拉<em>[[Special:ChangePassword|箇只页面]]</em>更改密码。",
        "newarticle": "(新)",
        "newarticletext": "倷跟仔链接来着一个还弗勒里个页面。\n要创建该页面呢,就勒下底个框框里向开始写([$1 帮助页面]浪有更加多个信息)。\n要是倷是弗用心到该搭个说话,只要点击倷浏览器个'''返回'''揿钮。",
        "anontalkpagetext": "---- ''箇是一个还弗曾建立账户个匿名用户个讨论页, 箇咾我伲只好用IP地址来搭渠联络。该IP地址可能由几名用户共享。如果侬是一名匿名用户并认为箇只页面高头个评语搭侬弗搭界,请 [[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]来避免垃拉将来搭其他匿名用户混淆。''",
        "revdelete-confirm": "假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
        "revdelete-suppress-text": "'''只有'''出现下头眼情况再应阻止访问:\n* 弗适合个个人信息\n*: ''家庭地址、电话号码、身份证号码等。''",
        "revdelete-legend": "设置可见性之限制",
-       "revdelete-hide-text": "隐藏修订文本",
+       "revdelete-hide-text": "修订文本",
        "revdelete-hide-image": "隐藏文件内容",
-       "revdelete-hide-name": "隐藏动作搭仔目标",
-       "revdelete-hide-comment": "隐藏编辑备注",
-       "revdelete-hide-user": "隐藏编辑者个用户名/IP地址",
+       "revdelete-hide-name": "隐藏目标搭仔参数",
+       "revdelete-hide-comment": "编辑摘要",
+       "revdelete-hide-user": "者个用户名/IP地址",
        "revdelete-hide-restricted": "同时阻止管理员与其他用户查看数据",
        "revdelete-radio-same": "(弗要更改)",
-       "revdelete-radio-set": "",
-       "revdelete-radio-unset": "å\90¦",
+       "revdelete-radio-set": "囥脱",
+       "revdelete-radio-unset": "å\8f¯è§\81",
        "revdelete-suppress": "同时阻止管理员与其他用户查看数据",
        "revdelete-unsuppress": "垃拉已恢复个修订里向移除限制",
        "revdelete-log": "理由:",
        "revdelete-no-change": "警告:于$1 $2之项目已经请求仔可见性设置。",
        "revdelete-concurrent-change": "更改于$1 $2之项目错误:我伲尝试更改渠个设置个辰光,已经拨别人家更改过。请检查纪录。",
        "revdelete-only-restricted": "隐藏$1 $2个项目个辰光发生错误:侬弗好垃拉选择仔另一可见性选项后废止管理员查看该项目。",
-       "revdelete-reason-dropdown": "*常用删除理由\n** 侵犯版权\n** 弗适合个个人资料",
+       "revdelete-reason-dropdown": "*常用删除理由\n** 侵犯版权\n** 弗合适个评论或个人资料\n** 弗合适个用户名\n** 诽谤",
        "revdelete-otherreason": "别个/附加理由:",
        "revdelete-reasonotherlist": "别个理由",
        "revdelete-edit-reasonlist": "编辑删除理由",
        "revdelete-offender": "版本作者:",
        "suppressionlog": "阻止日志",
-       "suppressionlogtext": "下头是只删除搭仔封锁列表,包括对管理员隐藏个内容。\n参看[[Special:IPBlockList|IP封锁名单]]来了解目前有效个禁止搭仔封锁之名单。",
+       "suppressionlogtext": "下头是只删除搭仔封锁列表,包括对管理员囥脱个内容。\n参看[[Special:BlockList|封锁名单]]来了解目前有效个禁止搭仔封锁之名单。",
        "mergehistory": "合并页面历史",
        "mergehistory-header": "箇只页面可以让侬拿来源页面个修订历史合并到新页面里向。\n请确保此次更改能继续保持历史页面个连续性。",
        "mergehistory-box": "合并两只页面个修订历史:",
        "search-section": "(段落 $1)",
        "search-suggest": "你侬是寻:$1",
        "search-interwiki-caption": "姊妹项目",
-       "search-interwiki-default": "$1项结果:",
+       "search-interwiki-default": "来自$1个结果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "相关",
        "searchrelated": "相关",
        "prefs-rc": "近段辰光个改动",
        "prefs-watchlist": "监控列表",
        "prefs-watchlist-days": "勒拉监控列表里向显示个日数:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "最长$1日天",
        "prefs-watchlist-edits": "勒拉扩展个监控列表里向显示个编辑趟数:",
        "prefs-watchlist-edits-max": "顶多:1000",
        "prefs-watchlist-token": "监控列表记认:",
        "prefs-misc": "杂项",
        "prefs-resetpass": "更改密码",
+       "prefs-changeemail": "更改电子邮箱地址",
        "prefs-email": "邮箱选项",
        "prefs-rendering": "外观",
        "saveprefs": "保存",
        "savedprefs": "倷个偏好已经保存哉。",
        "timezonelegend": "时区:",
        "localtime": "当地辰光:",
-       "timezoneuseserverdefault": "使用服务器默认值",
+       "timezoneuseserverdefault": "使用wiki默认值($1)",
        "timezoneuseoffset": "其它(指定时差)",
        "servertime": "服务器辰光:",
        "guesstimezone": "从浏览器填写",
        "timezoneregion-asia": "亚洲",
        "timezoneregion-atlantic": "大西洋",
        "timezoneregion-australia": "澳洲",
+       "timezoneregion-europe": "欧洲",
+       "timezoneregion-indian": "印度洋",
+       "timezoneregion-pacific": "太平洋",
        "allowemail": "接受别个用户个电子邮件",
        "prefs-searchoptions": "搜寻",
        "prefs-namespaces": "名字空间",
        "default": "默认",
        "prefs-files": "文件",
        "youremail": "电子信箱:",
-       "username": "用户名:",
+       "username": "{{GENDER:$1|用户名}}:",
        "yourrealname": "真名字:",
        "yourlanguage": "语言:",
        "yournick": "绰号:",
        "badsig": "无效原始签名;检查 HTML 标签。",
-       "gender-unknown": "æ\88\91å¼\97æ\83³è¬\9b",
+       "gender-unknown": "æ\8f\90å\88°ä¾¬ä¸ªè¾°å\85\89ï¼\8c软件ä¼\9aå°½é\87\8fç\94¨æ\80§å\88«ä¸­ç«\8b个è¯\8dæ±\87",
        "gender-male": "佢写Wiki",
        "gender-female": "\"姖\"写Wiki",
        "email": "电子邮件",
        "prefs-help-email": "电子信由你侬填弗填,转设密码用得着。",
        "prefs-help-email-others": "你侬也好来你侬个用户|讨论页里添加自己个电子信连接畀别人联系你用。\n别人联系你是弗晓得你侬个电子信地址个。",
        "prefs-help-email-required": "需要电子邮件地址。",
+       "prefs-dateformat": "日脚格式",
        "userrights-user-editname": "输入用户名:",
        "group-bot": "机器人",
        "group-sysop": "管理员",
        "group-bureaucrat": "行政员",
        "group-all": "(全)",
-       "group-bot-member": "机器人",
-       "group-sysop-member": "管理员",
-       "group-bureaucrat-member": "行政员",
+       "group-bot-member": "{{GENDER:$1|机器人}}",
+       "group-sysop-member": "{{GENDER:$1|管理员}}",
+       "group-bureaucrat-member": "{{GENDER:$1|行政员}}",
        "grouppage-bot": "{{ns:project}}:机器人",
        "grouppage-sysop": "{{ns:project}}:管理员",
        "grouppage-bureaucrat": "{{ns:project}}:行政员",
        "listgrouprights-members": "(成员列表)",
        "emailuser": "发电子信畀箇个用户",
        "emailuser-title-notarget": "郵箱用戶",
-       "emailpage": "郵箱用戶",
        "emailfrom": "從",
        "emailto": "發畀",
        "emailsubject": "主題",
        "unwatchthispage": "停止监控",
        "notanarticle": "弗是內容頁",
        "watchlist-details": "弗包括讨论页,有 $1 页徕你侬关注表里向。",
+       "wlnote": "下底是{{PLURAL:$2|过去<strong>$2</strong>个钟头}}个{{PLURAL:$1|最后<strong>$1</strong>届更改}},截至$3 $4。",
        "wlshowlast": "显示上 $1 个钟头 $2 日",
        "watchlist-options": "监控列表选项",
        "watching": "监控……",
        "protect-othertime": "各許時間:",
        "protect-othertime-op": "各許時間",
        "protect-otherreason-op": "各許原因",
+       "protect-expiry-options": "1个钟头:1 hour,1天:1 day,1个礼拜:1 week,2个礼拜:2 weeks,1个号头:1 month,3个号头:3 months,6个号头:6 months,1年:1 year,老世:infinite",
        "restriction-type": "权限:",
        "restriction-level": "限制级别:",
        "minimum-size": "最小大細",
        "ipbreason": "理由:",
        "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",
+       "ipboptions": "2个钟头:2 hours,1天:1 day,3天:3 days,1个礼拜:1 week,2个礼拜:2 weeks,1个号头:1 month,3个号头:3 months,6个号头:6 months,1年:1 year,老世:infinite",
        "badipaddress": "无效 IP 地址",
        "ipblocklist": "封脱个用户",
        "infiniteblock": "永远",
        "tooltip-pt-logout": "登出",
        "tooltip-pt-createaccount": "建议你建立一个账号并登录,但必过箇弗是板要个",
        "tooltip-ca-talk": "讨论内容页",
-       "tooltip-ca-edit": "ç®\87页你侬好ç¼\96ã\80\82ä¿\9då­\98ä¹\8bå\89\8dæ\9c\9bæ\9c\9bç\9b¸èµ·ã\80\82",
+       "tooltip-ca-edit": "ç¼\96è¾\91ç®\87页",
        "tooltip-ca-addsection": "开始新段",
        "tooltip-ca-viewsource": "箇页受保护,你好望源代码",
        "tooltip-ca-history": "箇页以早个版本",
        "show-big-image-size": "$1×$2像素",
        "newimages": "新文件陈列室",
        "ilsubmit": "搜寻",
+       "hours": "$1个钟头",
+       "hours-ago": "$1个钟头前",
        "bad_image_list": "格式如下:\n\n只列出项目(线开始* )的审议。\n第一个环节上线必须是一个链接到一个坏文件。\n其后的任何链接在同一行被认为是例外情况,即网页的文件,则可能会发生内部。",
        "variantname-zh-tw": "台湾",
        "metadata": "元数据",
index f341b8c..6050760 100644 (file)
        "hidden-category-category": "ფულირი კატეგორიეფი",
        "category-subcat-count": "{{PLURAL:$2|თე კატეგორიას ოკათჷ ხვალე ათე გიმენკატეგორია.|თე კატეგორიას მოჩამილი რე $1 გიმენკატეგორია $2-შე.}}",
        "category-subcat-count-limited": "ეს კატეგორია მოიცავს შემდეგ $1 ქვეკატეგორიას.",
-       "category-article-count": "{{PLURAL:$2|á\83\90á\83\97á\83\94 á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\90 á\83\98á\83\99á\83\90á\83\97á\83£á\83\90á\83\9cá\83¡ á\83®á\83\95á\83\90á\83\9aá\83\94 á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯ á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¡.|á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯ {{PLURAL:$1|á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90 á\83 á\83\94|$1 á\83®á\83\90á\83¡á\83\98ლეფ რე}} თე კატეგორიას, გვალო $2–შე.}}",
+       "category-article-count": "{{PLURAL:$2|á\83\90á\83\97á\83\94 á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\90 á\83\98á\83\99á\83\90á\83\97á\83£á\83\90á\83\9cá\83¡ á\83®á\83\95á\83\90á\83\9aá\83\94 á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯ á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡.|á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯ {{PLURAL:$1|á\83®á\83\90á\83¡á\83·á\83\9aá\83\90 á\83 á\83\94|$1 á\83®á\83\90á\83¡á\83·ლეფ რე}} თე კატეგორიას, გვალო $2–შე.}}",
        "category-article-count-limited": "შემდეგი {{PLURAL:$1|გვერდი არის|$1 გვერდები არიან}} მოცემულ კატეგორიაში",
        "category-file-count": "{{PLURAL:$2|თე კატეგორიას ხვალე ათე გეჸვენჯი ფაილი რე.|თე კატეგორიას რე გეჸვენჯი $1, ართოიანო $2-შე.}}",
        "category-file-count-limited": "შემდეგი {{PLURAL:$1|ფაილი|$1 ფაილები}} ამ კატეგორიაშია.",
-       "listingcontinuesabbrev": "á\83\92á\83\98ნძარ.",
+       "listingcontinuesabbrev": "á\83\92á\83·ნძარ.",
        "index-category": "ხასჷლეფი ინდექსირაფაშ",
        "noindex-category": "ხასჷლეფი ინდექსირაფაშ უმუშო",
        "broken-file-category": "გვერდები ფაილების არასწორი ბმულებით",
        "about": "-შენი",
        "article": "სტატია",
-       "newwindow": "ინწყუმუ ახალ ოჭკორიეს",
+       "newwindow": "ინწყუმუ ახალ ოჭკორიეს",
        "cancel": "გოუქვაფა",
        "moredotdotdot": "სრულო...",
        "morenotlisted": "ეს არასრული სიაა.",
        "protectthispage": "ხასილაშ თხილუა",
        "unprotect": "დაცვის შეცვლა",
        "unprotectthispage": "შეცვალე ამ გვერდის დაცვის დონე",
-       "newpage": "ახალ ხასჷლა",
+       "newpage": "ახალ ხასჷლა",
        "talkpage": "მოჩამილი ხასჷლაშ სხუნუა",
        "talkpagelinktext": "სხუნუა",
        "specialpage": "გჷშაკერძაფილი ხასჷლა",
        "aboutsite": "{{SITENAME}}-შენი",
        "aboutpage": "Project:შენი",
        "copyright": "დინორე მიწორინაფილი რე $1–იშ ჯოხოთ.",
-       "copyrightpage": "{{ns:project}}:á\83\9dá\83\90á\83\95á\83¢á\83\9dá\83 á\83\94 á\83\90á\83\9aá\83\9dბეფი",
+       "copyrightpage": "{{ns:project}}:á\83¡á\83\90á\83\90á\83\95á\83¢á\83\9dá\83 á\83\94 á\83\9cá\83\94ბეფი",
        "currentevents": "მიმალ მოლინეფი",
        "currentevents-url": "Project:მიმალ მოლინეფი",
        "disclaimers": "გამამინჯალაშ ვარება",
        "delete-hook-aborted": "შესწორება გაუქმებულია გადამჭერით.\nდამატებითი ახსნა არ ჩაწერილა.",
        "no-null-revision": "ვერ მოხერხდა ახალი ნულოვანი ცვლილების შექმნა გვერდისათვის „$1“",
        "badtitle": "ცაგანა დუდჯოხო",
-       "badtitletext": "á\83\9bá\83\9dá\83\97á\83®á\83\98á\83\9a á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83¯á\83\9dá\83®á\83\9d á\83©á\83\98á\83\9aá\83\90á\83\97á\83\98á\83  á\83 á\83\93á\83£, á\83\95á\83\90á\83 á\83\90 á\83©á\83\9dá\83\9aá\83\98á\83\94á\83 , á\83\95á\83\90á\83 á\83\90 á\83®á\83\9dá\83\9aá\83\9d á\83\92á\83\9dá\83®á\83\9dá\83\9aá\83£á\83\93á\83\94á\83¡ á\83©á\83\98á\83\9aá\83\90á\83\97á\83\98á\83 á\83\9d á\83\92á\83\98á\83\9cá\83\9dá\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\98á\83\9a á\83\98á\83\9cá\83¢á\83\94á\83 â\80\93á\83\9cá\83\98á\83\9cá\83\90 á\83\95á\83\90á\83 á\83\90 á\83\98á\83\9cá\83¢á\83\94á\83 â\80\93á\83¬á\83\98á\83\99á\83\98 á\83¯á\83\9dá\83®á\83\9d. \ná\83\97á\83\94á\83\9cá\83\90 á\83¨á\83\98á\83\9aá\83\94á\83\91á\83\94 á\83\98á\83\99á\83\90á\83\97á\83£á\83\90á\83\9cá\83\93á\83\90á\83¡ á\83\90á\83 á\83\97 á\83\95á\83\90á\83 á\83\90 á\83£á\83\9bá\83\9dá\83¡ á\83\97á\83\98á\83¨á\83\9cá\83\94á\83  á\83\9cá\83\98á\83¨á\83\90á\83\9cá\83¡ á\83\9cá\83\90á\83\9bá\83£á\83¨ á\83\92á\83£მორინაფა ჯოხოს ვა შილებე.",
+       "badtitletext": "á\83\9bá\83\9dá\83\97á\83®á\83\98á\83\9a á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83\93á\83£á\83\93á\83¯á\83\9dá\83®á\83\9d á\83©á\83\98á\83\9aá\83\90á\83\97á\83\98á\83  á\83 á\83\93á\83£, á\83\95á\83\90á\83 á\83\90 á\83©á\83\9dá\83\9aá\83\98á\83\94á\83 á\83\98, á\83\95á\83\90á\83 á\83\90 á\83¬á\83·á\83\9bá\83\90á\83 á\83\98á\83\9cá\83£á\83\90á\83\9cá\83\93á\83· á\83©á\83\98á\83\9aá\83\90á\83\97á\83\98á\83 á\83\9d á\83\92á\83\98á\83\9cá\83\9dá\83 á\83ªá\83®á\83£á\83\90á\83¤á\83\98á\83\9a á\83\98á\83\9cá\83¢á\83\94á\83 â\80\93á\83\9cá\83\98á\83\9cá\83\90á\83¡ á\83\95á\83\90á\83 á\83\93á\83\90 á\83\98á\83\9cá\83¢á\83\94á\83 â\80\93á\83\95á\83\98á\83\99á\83\98 á\83¯á\83\9dá\83®á\83\9dá\83¡. \ná\83\97á\83\94á\83\9cá\83\90 á\83¨á\83\98á\83\9aá\83\94á\83\91á\83\94 á\83\98á\83\99á\83\90á\83\97á\83£á\83\90á\83\9cá\83\93á\83\90á\83¡ á\83\90á\83 á\83\97 á\83\95á\83\90á\83 á\83\90 á\83£á\83\9bá\83\9dá\83¡ á\83\97á\83\98á\83¨á\83\9cá\83\94á\83  á\83¨á\83\90á\83\9cá\83¡, á\83\9cá\83\90á\83\9bá\83£á\83¨ á\83\92á\83\98მორინაფა ჯოხოს ვა შილებე.",
        "title-invalid-empty": "მოთხოვნილი გვერდის სათაური ცარიელია ან მხოლოდ სახელთა სივრცის სახელს შეიცავს.",
        "title-invalid-utf8": "მოთხოვნილი გვერდის სათაური არასწორ UTF-8 თანმიმდევრობას შეიცავს.",
        "title-invalid-interwiki": "გვერდის მოთხოვნილი სათაური ენათშორის ბმულს შეიცავს, რომლის სათაურში გამოყენებაც არ შეიძლება.",
        "actionthrottled": "სიჩქარის შეზღუდვა.",
        "actionthrottledtext": "სპამთან ბრძოლასთან დაკავშირებით აკრძალულია შემდეგი მონაცემების მრავალჯერ გამეორება. გთხოვთ გაიმეოროთ იგი მოგვიანებით.",
        "protectedpagetext": "ეს გვერდი დაბლოკილია რედაქტირებისათვის ან სხვა მოქმედებისათვის.",
-       "viewsourcetext": "თქვა შეილებუნა ქოძირათ თე ხასჷლაშ დაჭყაფური ფაილი დო ქუდარსხუათ თიშ მანგი:",
-       "viewyourtext": "á\83\97á\83¥á\83\95á\83\94á\83\9c á\83¨á\83\94á\83\92á\83\98á\83«á\83\9aá\83\98á\83\90á\83\97 á\83\98á\83®á\83\98á\83\9aá\83\9dá\83\97 á\83\93á\83\90 á\83\93á\83\90á\83\90á\83\99á\83\9dá\83\9eá\83\98á\83 á\83\9dá\83\97  '''á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\94á\83\91á\83\98á\83¡''' á\83¡á\83\90á\83¬á\83§á\83\98á\83¡á\83\98 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94:",
+       "viewsourcetext": "თქვა შეილებუნა ქოძირათ თე ხასჷლაშ დაჭყაფური ფაილი დო ქუდარსხუათ თიშ მანგი.",
+       "viewyourtext": "á\83\97á\83¥á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83£á\83\9cá\83\90 á\83¥á\83\9dá\83«á\83\98á\83 á\83\90á\83\97 '''á\83\97á\83¥á\83\95á\83\90á\83\9cá\83\98 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98á\83¨''' á\83\93á\83\90á\83­á\83§á\83\90á\83¤á\83£á\83 á\83\98 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡ á\83\93á\83\9d á\83\92á\83\94á\83­á\83\9dá\83¤á\83\90á\83\97 á\83\97á\83\98á\83¨ á\83\90á\83\9cá\83\92á\83\98.",
        "protectedinterface": "ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.",
        "editinginterface": "<strong>ყურადღება:</strong> თქვენ არედაქტირებთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც.",
        "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკებისლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
        "resetpass-expired": "თქვენს პაროლს ვადა გაუვიდა. გთხოვთ, დააყენოთ ახალი.",
        "resetpass-expired-soft": "თქვენი პაროლის მოქმედების ვადა ამოწურულია და ახლა ის შეცვლილი უნდა იყოს. გთხოვთ, აირჩიეთ ახალი პაროლი ან დააჭირეთ \"{{int:resetpass-submit-cancel}}\", რათა იგი მოგვიანებით შეცვალოთ.",
        "resetpass-validity-soft": "თქვენი პაროლი არაკორექტულია: $1\n\nგთხოვთ, აირჩიეთ ახალი პაროლი ან დააჭირეთ \"{{int:resetpass-submit-cancel}}\", რათა იგი მოგვიანებით ჩამოყაროთ.",
-       "passwordreset": "á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83\90á\83¦á\83\93á\83\92á\83\94á\83\9cა",
+       "passwordreset": "á\83\9eá\83\90á\83 á\83\9dá\83\9aá\83\98á\83¨ á\83\90á\83®á\83\9aá\83¨á\83\9d á\83\94á\83\98á\83\9dá\83\9cá\83¬á\83§á\83£á\83\90á\83\9aა",
        "passwordreset-text-one": "შეავსეთ ეს ფორმა, რათა კვლავ დააყენოთ თქვენი პაროლი.",
        "passwordreset-text-many": "{{PLURAL:$1|ელ.ფოსტაზე დროებითი პაროლის მისაღებად შეავსეთ ერთ-ერთი ველი.}}",
        "passwordreset-disabled": "ამ ვიკიში პაროლის კვლავ დაყენების ფუნქცია გამორთულია.",
        "resettokens-done": "ჟეტონების ჩამოყრა.",
        "resettokens-resetbutton": "არჩეული ჟეტონების ჩამოყრა",
        "bold_sample": "რუმე ტექსტი",
-       "bold_tip": "რუმე ტექსტ",
+       "bold_tip": "რუმე ტექსტ",
        "italic_sample": "ელართელი ტექსტი",
        "italic_tip": "ელართელი ტექსტი",
        "link_sample": "რცხუშ ჯოხო",
        "image_tip": "დინოხუნაფილი ფაილი",
        "media_tip": "ფაილიშ რცხუ",
        "sig_tip": "თქვან ხეშმოჭარა დო ბორჯი",
-       "hr_tip": "á\83°á\83\9dá\83 á\83\98á\83\96á\83\9dá\83\9cá\83¢á\83\90á\83\9aá\83£á\83 á\83\98 á\83¦á\83\9dá\83\96á\83\98 (á\83\95á\83\90á\83\92á\83\98á\83\9bá\83\98á\83 á\83\98á\83\9cá\83£á\83\90á\83\97 á\83\91á\83®á\83¨ირას)",
+       "hr_tip": "á\83°á\83\9dá\83 á\83\98á\83\96á\83\9dá\83\9cá\83¢á\83\90á\83\9aá\83£á\83 á\83\98 á\83¦á\83\9dá\83\96á\83\98 (á\83\95á\83\90á\83\92á\83\98á\83\9bá\83\98á\83 á\83\98á\83\9cá\83£á\83\90á\83\97 á\83¨á\83®ირას)",
        "summary": "რეზიუმე:",
        "subject": "თემა/დუდლანდარი:",
        "minoredit": "თენა რე ჭიჭე რედაქტირაფა",
        "showpreview": "ქაძირე გიწოთოლორაფა",
        "showdiff": "თირაფეფიშ ძირაფა",
        "blankarticle": "გაფრთხილება: გვერდი, რომელსაც ქმნით, ცარიელია. თუკი კვლავ დააჭერთ ღილაკს \"{{int:savearticle}}\", გვერდი შეიქმნება შემცვლელობის გარეშე.",
-       "anoneditwarning": "<strong>á\83\92á\83\90á\83¤á\83 á\83\97á\83®á\83\98á\83\9aá\83\94á\83\91á\83\90:</strong> á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83  á\83®á\83\90á\83 á\83\97 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98. á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83¡á\83\90á\83¯á\83\90á\83 á\83\9dá\83\93 á\83®á\83\98á\83\9aá\83£á\83\9aá\83\98 á\83\98á\83¥á\83\9cá\83\94á\83\91á\83\90, á\83\97á\83£á\83\99á\83\98 á\83\92á\83\90á\83\9cá\83\90á\83®á\83\9dá\83 á\83ªá\83\98á\83\94á\83\9aá\83\94á\83\91á\83\97 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\90á\83¡. á\83\97á\83£ á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\92á\83\90á\83\98á\83\95á\83\9aá\83\98á\83\97 <strong>[$1 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83ªá\83\98á\83\90á\83¡]</strong> á\83\90á\83\9c <strong>[$2 á\83¨á\83\94á\83¥á\83\9bá\83\9cá\83\98á\83\97 á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83¡]</strong>, á\83¡á\83®á\83\95á\83\90 á\83£á\83\9eá\83\98á\83 á\83\90á\83¢á\83\94á\83¡á\83\9dá\83\91á\83\94á\83\91á\83\97á\83\90á\83\9c á\83\94á\83 á\83\97á\83\90á\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\94á\83\91á\83\94á\83\91á\83\98 á\83\93á\83\90á\83£á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\93á\83\94á\83\91á\83\90 á\83\97á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83¡á\83\90á\83®á\83\94á\83\9aს.",
+       "anoneditwarning": "<strong>á\83\92á\83\90á\83\97á\83®á\83\98á\83\9aá\83\94á\83\91á\83\90:</strong> á\83\97á\83¥á\83\95á\83\90 á\83\95á\83\90á\83 á\83\94á\83\97 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83¤á\83\98á\83\9aá\83\98. á\83\97á\83¥á\83\90á\83\9cá\83\98 IP á\83\9bá\83\98á\83\9dá\83¬á\83£á\83 á\83\90á\83¤á\83£ á\83¡á\83\90á\83\90á\83 á\83«á\83\9dá\83\97 á\83\98á\83«á\83\98á\83 á\83\90á\83¤á\83\94á\83\93á\83\90á\83¡ á\83\98á\83¸á\83\98, á\83\97á\83£ á\83\97á\83¥á\83\95á\83\90 á\83¨á\83\94á\83\90á\83¡á\83 á\83£á\83\9aá\83\94á\83\9cá\83\97 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\90á\83¡. á\83\97á\83£ á\83\97á\83¥á\83\95á\83\90 á\83\92á\83\94á\83\9cá\83\99á\83£á\83 á\83\97 <strong>[$1 á\83\90á\83\95á\83¢á\83\9dá\83 á\83\98á\83\96á\83\90á\83ªá\83\98á\83\90á\83¡]</strong> á\83\95á\83\90á\83 á\83\93á\83\90 <strong>[$2 á\83\92á\83\9dá\83\9cá\83¬á\83§á\83£á\83\9cá\83\97 á\83\90á\83\9cá\83\92á\83\90á\83 á\83\98á\83¨á\83\98á\83¡]</strong>, á\83¨á\83®á\83\95á\83\90 á\83\9cá\83\90á\83 á\83¡á\83®á\83£á\83\9cá\83\94á\83¤á\83¬á\83\99á\83·á\83\9bá\83\90 á\83\90á\83 á\83\97á\83\9d, á\83\97á\83¥á\83\95á\83\90á\83\9cá\83\98 á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98 á\83¥á\83\98á\83\9bá\83\98á\83\90á\83 á\83¡á\83®á\83£ á\83\97á\83¥á\83\95á\83\90á\83\9c á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83¯á\83\9dá\83®á\83\9dს.",
        "anonpreviewwarning": "''თქვენ არ შესულხართ სისტემაში. თქვენი IP მისამართი შეინახება გვერდის ისტორიაში. ''",
        "missingsummary": "<strong>ეხსენება:</strong> თქვენ არ მიგითითებიათ რედაქტირების რეზიუმე.\nთუ ისევ დააწკაპუნებთ შენახვაზე, თქვენი რედაქტირება რეზიუმეს გარეშე დამახსოვრდება.",
        "selfredirect": "გაფრთხილება: თქვენ გადამისამართებას იმავე გვერდზე ქმნით. შესაძლოა, თქვენ გადამისამართებისთვის აირჩიეთ არასწორი სამიზნე გვერდი ან არედაქტირებთ არასამიზნე გვერდს. \n\nთუ თქვენ კიდევ ერთხელ დააჭერთ ღილაკს \"{{int:savearticle}}\", გადამისამართება შეიქმნება.",
        "newarticle": "(ახალ)",
        "newarticletext": "თქვა გეჸუნელჷ რეთ ხასჷლაშ რცხის, ნამუთ დიო ვა რე დორცხუაფილი.\nხასჷლაშ დარცხუაფალო გემშეჸონით ტექსტი თუდონ ოჭკორიეშა. (ქოძირით[$1 მოხვარაშ ხასჷლა] უმოს ინფორმაციაშო).\nთე ხასჷლას ჩილათირო მოხვადით–და, ქიგუნჭირით თქვან ბრაუზერიშ კონჭის '''უკახალე'''.\"",
        "anontalkpagetext": "----\n<em>ეს არის ანონიმური მომხმარებლის განხილვის გვერდი, რომელსაც ანგარიში ჯერ არ შეუქმნია ან არ იყენებს მას.</em>\n\nშესაბამისად, ჩვენ მისი ციფრული IP მისამართი უნდა გამოვიყენოთ მისი იდენტიფიცირებისთვის.\n\nამგვარი მისამართი შეიძლება რამდენიმე მომხმარებელმა გამოიყენოს.\n\nთუ თქვენ ანონიმური მომხმარებელი ხართ და თვლით, რომ სხვისთვის გამიზნული მითითება მიიღეთ, გთხოვთ [[Special:UserLogin/signup|შექმენით ანგარიში ან დარეგისტრირდით]] მომავალში გაუგებრობის თავიდან ასაცილებლად.",
-       "noarticletext": "á\83\90á\83¡á\83\94 á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¡ á\83¢á\83\94á\83¥á\83¡á\83¢ á\83\95á\83\90 á\83 á\83\94. \ná\83\97á\83¥á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83£á\83\9cá\83\90 [[Special:Search/{{PAGENAME}}|á\83\92á\83\9dá\83 á\83\90á\83\97 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨ á\83¯á\83\9dá\83®á\83\9d]] á\83¨á\83®á\83\95á\83\90 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83¡,\n<span class=\\\"plainlinks\\\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} á\83\93á\83\9dá\83\92á\83\9dá\83 á\83\90á\83\97 á\83\9bá\83\94á\83®á\83£á\83¯á\83\90á\83¤á\83\98á\83\9a á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\94á\83¤],\ná\83\95á\83\90á\83 á\83\90 [{{fullurl:{{FULLPAGENAME}}|action=edit}} á\83\93á\83\98á\83­á\83§á\83\90á\83\97 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლაშ რედაქტირაფა]</span>.",
+       "noarticletext": "á\83\90á\83¡á\83\94 á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡ á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98 á\83\95á\83\90 á\83 á\83\94. \ná\83\97á\83¥á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83£á\83\9cá\83\90 [[Special:Search/{{PAGENAME}}|á\83\92á\83\9dá\83 á\83\90á\83\97 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83¯á\83\9dá\83®á\83\9d]] á\83¨á\83®á\83\95á\83\90 á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83¡,\n<span class=\\\"plainlinks\\\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} á\83\93á\83\9dá\83\92á\83\9dá\83 á\83\90á\83\97 á\83\9bá\83\94á\83®á\83£á\83¯á\83\90á\83¤á\83\98á\83\9a á\83\9fá\83£á\83 á\83\9cá\83\90á\83\9aá\83\94á\83¤á\83\98],\ná\83\95á\83\90á\83 á\83\90 [{{fullurl:{{FULLPAGENAME}}|action=edit}} á\83\93á\83\98á\83­á\83§á\83\90á\83\97 á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლაშ რედაქტირაფა]</span>.",
        "noarticletext-nopermission": "ათე ხასჷლას ასე ტექსტი ვა რე. თქვა შეილებუნა [[Special:Search/{{PAGENAME}}|დოგორათ თე ხასჷლაშ დუდჯოხო]] შხვა ხასჷლეფს,\nვარდა <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} დოგორათ გინორცხილ ჟურნალეფი]</span>.",
        "missing-revision": "ვერსია $1 გვერდისათვის „{{FULLPAGENAME}}“ არ არსებობს.\n\nეს ჩვეულებრივ ხდება მაშინ, თუ მოძველებული ბმულით გადადიხართ გვერდზე, რომელიც წაიშალა.\nდეტალური ინფორმაცია შესაძლებელია იყოს [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლების ჟურნალში].",
        "userpage-userdoesnotexist": "მახვარებუშ ანგარიში „$1“ ვაარსებენს. დერწმუნით, ნამჷ-და დასურო გოკონა თე ანგარიშიშ დორსხუაფა ვარდა მიშათინუა.",
        "showhideselectedversions": "ჩვენება/დამალვა არჩეული ვერსიებისა",
        "editundo": "გოუქვაფა",
        "diff-empty": "(განსხვავება არ არის)",
-       "diff-multi-sameuser": "({{PLURAL:$1|á\83\94á\83 á\83\97á\83\98 á\83¨á\83£á\83\90á\83\9aá\83\94á\83\93á\83£á\83 á\83\98 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90|$1 á\83¨á\83£á\83\90á\83\9aá\83\94á\83\93á\83£á\83 á\83\98 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98}} á\83\98á\83\9bá\83\90á\83\95á\83\94 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83\9bá\83\98á\83\94á\83  á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\9cá\83\90á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91ი)",
+       "diff-multi-sameuser": "({{PLURAL:$1|á\83\90á\83 á\83\97 á\83¨á\83¥á\83\90á\83¤á\83\9dá\83\9c á\83\97á\83\98á\83 á\83\90á\83¤á\83\90|$1 á\83¨á\83¥á\83\90á\83¤á\83\9dá\83\9c á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83\98}} á\83\99á\83\98á\83\9cá\83\94 á\83\97á\83\98 á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨á\83\94 á\83\95á\83\90á\83 á\83\94 á\83\9cá\83\90á\83«á\83\98á\83 á\83\94á\83¤ი)",
        "diff-multi-otherusers": "(არ არის ნაჩვენები $1 მომხმარებელთა $2 შუალედ ვერსიებში)",
        "diff-multi-manyusers": "({{PLURAL:$2|ერთი მომხმარებლის|$2 მომხმარებლების}} {{PLURAL:$1|ერთი შუალედური ვერსია|$1 შუალედური ვერსიები}}, რომლებიც არ არის ნაჩვენები.)",
        "difference-missing-revision": "{{PLURAL:$2|$2 ვერსია}} ამ შედარებისათვის ($1) {{PLURAL:$2|ვერ მოიძებნა}}.\n\nეს ჩვეულებრივ ხდება მაშინ, თუ ვერსიების შედარების მოძველებული ბმულით გადადიხართ გვერდზე, რომელიც წაიშალა.\nდეტალური ინფორმაცია შესაძლებელია იყოს [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} წაშლების ჟურნალში].",
        "searchprofile-everything": "ირფელი",
        "searchprofile-advanced": "გაუჯგუშებული",
        "searchprofile-articles-tooltip": "დოგორი $1-ს",
-       "searchprofile-images-tooltip": "დოგორ ფაილეფი",
+       "searchprofile-images-tooltip": "დოგორ ფაილეფი",
        "searchprofile-everything-tooltip": "არძო ხასჷლას გორუა (ოსხუნუე ხასჷლეფიშამო)",
-       "searchprofile-advanced-tooltip": "á\83\92á\83\9dá\83 á\83£á\83\90 á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83\92á\83\94á\83\9cá\83­á\83§ილ ჯოხოეფიშ ოფირჩას",
+       "searchprofile-advanced-tooltip": "á\83\92á\83\9dá\83 á\83£á\83\90 á\83\9bá\83\90á\83®á\83\95á\83\90á\83 á\83\94á\83\91á\83£á\83¨ á\83\9bá\83\9dá\83©á\83\90á\83\9bილ ჯოხოეფიშ ოფირჩას",
        "search-result-size": "$1 ({{PLURAL:$2|1 ზიტყვა|$2 ზიტყვა}})",
        "search-result-category-size": "{{PLURAL:$1|1 მაკათური|$1 მაკათური}} ({{PLURAL:$2|1 გიმენკატეგორია|$2 გიმენკატეგორია}}, {{PLURAL:$3|1 ფაილი|$3 ფაილეფი}})",
        "search-redirect": "(გინოწურაფა $1)",
        "right-bot": "ჩაითვალო ავტომატურ პროცესად",
        "right-nominornewtalk": "მცირე რედაქტირებების არ ქონის შემთხვევაში ჩაირთვება ახალ შეტყობინებათა რეჟიმი",
        "right-apihighlimits": "ნაკლები შეზღუდვა API-მოთხოვნებზე",
-       "right-writeapi": "API-á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83§á\83\94á\83\9cá\83\94á\83\91á\83\90 á\83©á\83\90á\83¬á\83\94á\83 á\83\98á\83¡á\83\97á\83\95á\83\98á\83¡",
+       "right-writeapi": "API-á\83¡ á\83\92á\83\98á\83\9bá\83\9dá\83 á\83\98á\83\9cá\83\90á\83¤á\83\90 á\83\93á\83\98á\83\9cá\83\90á\83­á\83\90á\83 á\83\90á\83\9aá\83\9d",
        "right-delete": "ხასილაშ ლასუა",
        "right-bigdelete": "გრძელი ისტორიის გვერდების წაშლა",
        "right-deletelogentry": "ჟურნალის კონკრეტული ჩანაწერების წაშლა და აღდგენა",
        "recentchanges-label-unpatrolled": "თე რედაქტირაფა დიო ხოლო ვა რე პატრულირაფირი",
        "recentchanges-label-plusminus": "თირაფეფიშ ზჷმა ბაიტეფს",
        "recentchanges-legend-heading": "'''ლეგენდა:'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (á\83\98á\83®. á\83\90á\83\92á\83 á\83\94á\83\97á\83\95á\83\94 [[Special:NewPages|á\83\90á\83®á\83\90á\83\9aá\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98á\83¡ á\83¡á\83\98á\83\90]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (á\83\97á\83\90á\83¨á\83\9cá\83\94á\83¨á\83\94 á\83¥á\83\9dá\83«á\83\98á\83 á\83\98á\83\97 [[Special:NewPages|á\83\90á\83®á\83\90á\83\9a á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9aá\83\98]])",
        "rcnotefrom": "ქვემოთ {{PLURAL:$5|ნაჩვენებია ცვლილება|ნაჩვენებია ცვლილებები}} <strong>$3, $4</strong>-დან (ნაჩვენებია არაუმეტეს <strong>$1</strong>).",
        "rclistfrom": "ახალ თირაფეფიშ ძირაფა დოჭყაფილ $3 $2-შე",
        "rcshowhideminor": "$1 ჭიჭე რედაქტირაფეფი",
        "rcshowhidebots": "ბოტეფიშ  $1",
        "rcshowhidebots-show": "ძირაფა",
        "rcshowhidebots-hide": "ტყობინაფა",
-       "rcshowhideliu": "$1 á\83 á\83\94á\83\92á\83\98á\83¡á\83¢á\83 á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\98",
+       "rcshowhideliu": "$1 á\83 á\83\94á\83\92á\83\98á\83¡á\83¢á\83 á\83\98á\83 á\83\90á\83¤á\83\98á\83\9aá\83\98 á\83\9bá\83\9dá\83®á\83\95á\83\90á\83 á\83\94",
        "rcshowhideliu-show": "ძირაფა",
        "rcshowhideliu-hide": "ტყობინაფა",
        "rcshowhideanons": "$1 ანონიმურ მახვარებუეფი",
        "newpageletter": "ახ.",
        "boteditletter": "ბ",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|მომხმარებლის|მომხმარებლის}} კონტროლი]",
-       "rc_categories": "á\83\9bá\83®á\83\9dá\83\9aá\83\9dá\83\93 á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\94á\83\91á\83\98á\83\93á\83\90á\83\9c (á\83\92á\83\90á\83\9cá\83\90á\83ªá\83\90á\83\9aá\83\99á\83\94á\83\95á\83\94á\83\97 \"|\"-á\83\98á\83¡ á\83\9bá\83\98á\83®á\83\94á\83\93á\83\95á\83\98თ)",
-       "rc_categories_any": "á\83\9cá\83\94á\83\91á\83\98á\83¡á\83\9bá\83\98ერი",
+       "rc_categories": "á\83®á\83\95á\83\90á\83\9aá\83\9d á\83\99á\83\90á\83¢á\83\94á\83\92á\83\9dá\83 á\83\98á\83\94á\83¤á\83¨á\83\94 (á\83\92á\83\94á\83\92á\83¨á\83\90á\83 á\83\97á\83\98á\83\97 \"|\"-á\83\98á\83¨ á\83\9bá\83\94á\83¯á\83\98á\83\9cá\83\90თ)",
+       "rc_categories_any": "á\83\90á\83 á\83«á\83\9dá\83\9cერი",
        "rc-change-size-new": "ზჷმა თირუაშ უკული რე: {{PLURAL:$1|ბაიტი|ბაიტი}}",
        "newsectionsummary": "/* $1 */ ახალი სექცია",
        "rc-enhanced-expand": "დეტალების  ჩვენება",
        "rc-enhanced-hide": "დეტალეფიშ ტყობინაფა",
        "rc-old-title": "თავდაპირველად შექმნილი როგორც „$1“",
-       "recentchangeslinked": "აკოხვალამირ თირაფეფ",
+       "recentchangeslinked": "აკოხვალამირ თირაფეფ",
        "recentchangeslinked-feed": "აკოხვალამირ თირაფეფ",
        "recentchangeslinked-toolbox": "აკოხვალამირ თირაფეფი",
        "recentchangeslinked-title": "\"$1\"-შა მებუნაფილ თირაფეფი",
        "upload-too-many-redirects": "URL შეიცავს ძალიან ბევრ გადამისამართებებს",
        "upload-http-error": "მოხდა HTTP შეცდომა: $1",
        "upload-copy-upload-invalid-domain": "ამ დომენში ატვირთვების კოპირება არ არის ხელმისაწვდომი.",
+       "upload-dialog-title": "გეხარგე ფაილეფი",
+       "upload-dialog-error": "ჩილათაქ მოხვადჷ",
+       "upload-dialog-button-cancel": "გოუქვაფა",
+       "upload-dialog-button-done": "ღოლამირჷ რე",
+       "upload-dialog-button-save": "ჩუალა",
+       "upload-dialog-button-upload": "ეხარგუა",
+       "upload-dialog-label-select-file": "გეგშაგორით ფაილი",
+       "upload-dialog-label-infoform-title": "დეტალეფი",
+       "upload-dialog-label-infoform-name": "ჯოხო",
+       "upload-dialog-label-infoform-description": "ეჭარუა",
+       "upload-dialog-label-usage-title": "გიმორინაფა",
+       "upload-dialog-label-usage-filename": "ფაილიშ ჯოხო",
        "backend-fail-stream": "ფაილი $1 ტრანსლირება ვერ მოხერხდა.",
        "backend-fail-backup": "ფაილი $1 სარეზერვო ასლის გაკეთება ვერ მოხერხდა.",
        "backend-fail-notexists": "ფაილი $1 არ არსებობს.",
        "filehist-filesize": "ფაილიშ ზომა",
        "filehist-comment": "კომენტარი",
        "imagelinks": "ფაილი გჷმორინაფილი რე",
-       "linkstoimage": "á\83\92á\83\94á\83§â\80\99á\83\95á\83\94á\83\9cá\83¯á\83\98 {{PLURAL:$1|á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤}} მერცხილ რე თე ფაილშა",
+       "linkstoimage": "á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯á\83\98 {{PLURAL:$1|á\83®á\83\90á\83¡á\83·á\83\9aá\83\90\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98}} მერცხილ რე თე ფაილშა",
        "nolinkstoimage": "ვა რე თე ფაილწკჷმა მერსხილი ხასჷლეფი.",
        "sharedupload": "თე ფაილ რე $1-შე დო შილებე თენა შხვა პროექტეფც ხოლო გიმირინაუფუდასინ",
        "sharedupload-desc-here": "თე ფაილი რე $1-შე დო შილებე გჷმორნაფილქ იჸუას შხვა პროექტეფს. თეშ ეჭარუა [$2 ფაილიშ ეჭარუაშ ხასჷლა] თუდოლე რე მოჩამილი.",
        "apihelp": "API დახმარება",
        "apihelp-no-such-module": "მოდული „$1“ ვერ მოიძებნა.",
        "booksources": "წინგიშ წყუეფი",
-       "booksources-search-legend": "á\83¬á\83\98á\83\92á\83\9cიშ წყუშ გორუა",
+       "booksources-search-legend": "á\83¬á\83\98á\83\9cá\83\92იშ წყუშ გორუა",
        "booksources-search": "გორუა",
        "booksources-text": "ქვემოთ არის ვებ გვერდების ბმულების სია სადაც იყიდება ახალი და ნახმარი წიგნები, და შესაძლოა შეიცავდნენ დამატებით ინფორმაციას წიგნების შესახებ, რომლებსაც ეძებთ:",
        "booksources-invalid-isbn": "თქვენს მიერ მითითებული ISBN, შეცდომას შეიცავს.  შეამოწმეთ, თუ თავდაპირველი წყარო სწორადაა აკრეფილი.",
        "linksearch-pat": "ძიების თარგი:",
        "linksearch-ns": "ჯოხოეფიშ ოფირჩა:",
        "linksearch-ok": "გორუა",
-       "linksearch-text": "შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, \"*.wikipedia.org\".\nუკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად \"*.org\"<br />\nმხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: <code>$1</code> (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)",
+       "linksearch-text": "შესაძლებელია გამოიყენოთ ქვეხაზოვანი სიმბოლოები, მაგალითად, \"*.wikipedia.org\".\nუკიდურეს შემთხვევაში საჭიროა ზედა დონის დომენი, მაგალითად \"*.org\"<br />\nმხარდამჭერი {{PLURAL:$2|პროტოკოლი|პროტოკოლები}}: $1 (სტანდარტულად http:// თუკი პროტოკოლი არ არის მითითებული)",
        "linksearch-line": "$1 მერცხიილი რე $2-შე",
        "linksearch-error": "წარმოდგენილი სიმბოლოების გამოყენება შესაძლებელია მხოლოდ მისამართის დასაწყისში.",
        "listusersfrom": "გეგმარჩქინ ხასილეფ დოჭყაფილ:",
        "watchlist": "ჩქიმ ოკონტროლებულეფიშ ერკებულ",
        "mywatchlist": "ჩქიმ კონტროლიშ ერკებულ",
        "watchlistfor2": "$1 $2-ს",
-       "addedwatchtext": "\"[[:$1]]\" á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¥ á\83\92á\83\94á\83«á\83\98á\83\9cá\83\94á\83\9aá\83¥ á\83\98á\83§â\80\99á\83£ á\83\97á\83¥á\83\95á\83\90á\83\9c [[Special:Watchlist|watchlist]]â\80\93á\83¨á\83\90.\ná\83\97á\83\94 á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨á\83\90 á\83\93á\83\9d á\83\97á\83\94á\83¬á\83\99á\83£á\83\9bá\83\90 á\83\90á\83¡á\83\9dá\83ªá\83\98á\83 á\83\94á\83\91á\83£á\83\9a á\83¡á\83®á\83£á\83\9cá\83£á\83\90á\83¨ á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90á\83¨á\83\90 á\83\9bá\83£á\83\9bá\83\90á\83£á\83\9aá\83\90á\83  á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤ á\83\9bá\83\9dá\83©á\83\90á\83\9bá\83\98á\83\9a á\83\98á\83§â\80\99á\83\98 á\83\97á\83\94á\83¥ á\83\93á\83\9d á\83\97á\83¥á\83\95á\83\90 á\83\92á\83\94á\83\92á\83\94á\83\90á\83\93á\83\95á\83\98á\83\9aá\83\90á\83\9c á\83\97á\83\98á\83¨ á\83\92á\83\98á\83¨á\83\90á\83\92á\83\9dá\83 á\83£á\83\90á\83¥á\83\98á\83\9c, á\83®á\83\90á\83¡á\83\98á\83\9aá\83\90 á\83\92á\83£á\83\9bá\83\9dá\83 á\83©á\83¥á\83\98á\83\9cá\83\93á\83£ '''á\83 á\83£á\83\9bá\83\94á\83\97'''  [[Special:RecentChanges|list of recent changes]]â\80\93á\83¡.\"",
-       "removedwatchtext": "ათე ხასილაქ \"[[:$1]]\" ლასირქ იყ’უ  [[Special:Watchlist|თქვნ კონტროლიშ ერკებულშე]].",
+       "addedwatchtext": "\"[[:$1]]\" á\83\93á\83\9d á\83\97á\83\98á\83¨ á\83\9dá\83¡á\83®á\83£á\83\9cá\83£á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¥ á\83\92á\83\94á\83«á\83\98á\83\9cá\83\94á\83\9aá\83¥ á\83\98á\83¸á\83£ á\83\97á\83¥á\83\95á\83\90á\83\9c [[Special:Watchlist|watchlist]]â\80\93á\83¨á\83\90.",
+       "removedwatchtext": "\"[[:$1]]\" დო თიშ ოსხუნუე ხასჷლაქ ლასირქ იჸუ  [[Special:Watchlist|თქვნ კონტროლიშ ერკებულშე]].",
        "watch": "გაკონტროლი",
        "watchthispage": "თე ხასილაშ კონტროლ",
        "unwatch": "კონტროლიშ გოუქვაფა",
        "restriction-level-all": "ნებისმიერი დონე",
        "undelete": "აჩვენე წაშლილი გვერდები",
        "undeletepage": "იხილეთ და აღადგინეთ წაშლილი გვერდები",
+       "undeleterevisions": "$1 {{PLURAL:$1|ვერსია|ვერსია}} ლასირი რე",
        "undeletebtn": "ახალშო ეკონწყუალა",
        "undeletelink": "ძირაფა/ეკონწყუალა",
        "undeleteviewlink": "ძირაფა",
        "undelete-search-submit": "გორუა",
        "namespace": "ჯოხოეფიშ ოფირჩა:",
        "invert": "არძო, მერჩქინელიშ მოხ",
+       "namespace_association": "ელმაჸვენჯი ჯოხოეფიშ ოფირჩა",
        "blanknamespace": "(დუდ)",
        "contributions": "{{GENDER:$1|მახვარებუშ}} მიშნაღელ თია",
        "contributions-title": "$1-შა მახვარებუშ მიშაღალირ თია",
        "whatlinkshere": "სოვრეშე რე თე ხასჷლა წურაფილი",
        "whatlinkshere-title": "ხასჷლეფი, ნამუთ გინორცხილ რე $1-შა",
        "whatlinkshere-page": "ხასჷლა:",
-       "linkshere": "á\83\92á\83\94á\83§â\80\99á\83\95á\83\94á\83\9cá\83¯ á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤ გინარცხუაფუ '''[[:$1]]'''-ეფს",
+       "linkshere": "á\83\92á\83\94á\83¸á\83\95á\83\94á\83\9cá\83¯ á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98 გინარცხუაფუ '''[[:$1]]'''-ეფს",
        "nolinkshere": "ნამთინ ხასილა ვა რე გინორცხილ '''[[:$1]]'''-შა.",
        "isredirect": "გინოწურაფაშ ხასჷლა",
        "istemplate": "ტრანსკლუზია",
        "isimage": "ფაილიშ რცხი",
-       "whatlinkshere-prev": "{{PLURAL:$1|á\83¬á\83\9dá\83®á\83\9dá\83\9aá\83\94á\83\9c\83¬á\83\9dá\83®á\83\9dá\83\9aá\83\94ნ $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|á\83\99á\83\98á\83\9cá\83\9dá\83®á\83\98á\83\90á\83\9c\83\99á\83\98á\83\9cá\83\9dá\83®á\83\98á\83\90ნ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|უკულიან|უკულიან $1}}",
        "whatlinkshere-links": "← რცხიეფ",
        "whatlinkshere-hideredirs": "გინოწურაფა $1",
        "import-comment": "კომენტარეფი:",
        "importlogpage": "იმპორტიშ ჟურნალ",
        "tooltip-pt-userpage": "თქვანი მახვარებუშ ხასჷლა",
-       "tooltip-pt-mytalk": "თქვანი სხუნუაშ ხასილა",
-       "tooltip-pt-preferences": "ჩქიმ კონფიგურაციეფ",
-       "tooltip-pt-watchlist": "á\83®á\83\90á\83¡á\83\98á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9a, á\83\9cá\83\90á\83\9bá\83£á\83\97á\83£á\83¨ á\83\9bá\83\9dá\83\9cá\83\98á\83¢á\83\9dá\83 á\83\98á\83\9cá\83\92á\83\98á\83¡ á\83\9dá\83 á\83\97á\83£á\83\97 á\83\97á\83\98á\83 á\83\90á\83¤á\83\90á\83¨ á\83\9bá\83\98á\83\96á\83\90á\83\9cით",
-       "tooltip-pt-mycontris": "თქვან მიშნაღელ თიეფიშ ერკებულ",
+       "tooltip-pt-mytalk": "თქვან სხუნუაშ ხასჷლა",
+       "tooltip-pt-preferences": "ჩქიმ კონფიგურაციეფ",
+       "tooltip-pt-watchlist": "á\83®á\83\90á\83¡á\83·á\83\9aá\83\94á\83¤á\83\98á\83¨ á\83\94á\83 á\83\99á\83\94á\83\91á\83£á\83\9a, á\83\9cá\83\90á\83\9bá\83£á\83¨ á\83\9bá\83\9dá\83\9cá\83\98á\83¢á\83\9dá\83 á\83\98á\83\9cá\83\92á\83\98á\83¡ á\83\9dá\83 á\83\97á\83£á\83\97 á\83\97á\83\98á\83 á\83\90á\83¤á\83\90á\83¨ á\83¦á\83\90á\83\9cá\83\99ით",
+       "tooltip-pt-mycontris": "თქვან მიშნაღელ თიეფიშ ერკებულ",
        "tooltip-pt-login": "ჯგირ იჸი გემშურთუ–და, მარა თენა ვა რე უციო",
        "tooltip-pt-logout": "გიშულა",
        "tooltip-pt-createaccount": "ჩქი გიზალუთ, გონწყათ ანგარიში დო გენშართათ სისტემაშა; მარა თენა ვა რე უციო",
        "tooltip-ca-talk": "დინორეშ ხასჷლაშ სხუნუა",
-       "tooltip-ca-edit": "á\83\97á\83¥á\83\95á\83\90 á\83¨á\83\94á\83\98á\83\9aá\83\94á\83\91á\83\9cá\83\90 á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\90. á\83 á\83\97á\83®á\83\98á\83\9cá\83\97, á\83\92á\83\94á\83£á\83\9cá\83­á\83\98á\83 á\83\98á\83\97 á\83\92á\83\98á\83¬á\83\9dá\83\97á\83\9dá\83\9aá\83\9dá\83 á\83\90á\83¤á\83\90á\83¨ á\83\99á\83\9dá\83\9cá\83­á\83\98á\83¡ á\83¡á\83\9dá\83\98á\83¨á\83\90á\83® á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¡ á\83©á\83£á\83\90á\83\9cá\83\93á\83\90á\83\97á\83\98á\83\9c",
+       "tooltip-ca-edit": "á\83\97á\83\94 á\83®á\83\90á\83¡á\83·á\83\9aá\83\90á\83¨ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\90",
        "tooltip-ca-addsection": "ქიდიჭყით ახალ სექცია",
        "tooltip-ca-viewsource": "თე ხასჷლა თხილერი რე. \nშეგილებუნა ძირათ თეშ წყუ.",
        "tooltip-ca-history": "თე ხასჷლაშა მიშაღალირი თირაფეფი",
        "tooltip-t-whatlinkshere": "არძო ვიკი ხასჷლაშ ერკებული, ნამუდგა თაქ იწურუანსინ",
        "tooltip-t-recentchangeslinked": "თე ხასჷლაწკჷმა მერსხილ ხასჷლეფშა ასერდე მიშაღალირი თირაფეფი",
        "tooltip-feed-rss": "მოჩამილი ხასილაშ RSS არხიშ ტრანსლაცია",
-       "tooltip-feed-atom": "á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83\98ლაშ ატომ არხიშ ტრანსლაცია",
+       "tooltip-feed-atom": "á\83\90á\83\97á\83\94 á\83®á\83\90á\83¡á\83·ლაშ ატომ არხიშ ტრანსლაცია",
        "tooltip-t-contributions": "თე მახვარებუშ მიშაღალირ თიაშ ერკებულიშ ძირაფა",
        "tooltip-t-emailuser": "მიდუჯღონით ელ.ფოშტა ათე მახვარებუს",
        "tooltip-t-upload": "გეხარგე ფაილეფი",
        "tooltip-ca-nstab-image": "ფაილიშ ხასჷლაშ ძირაფა",
        "tooltip-ca-nstab-template": "თანგიშ ძირაფა",
        "tooltip-ca-nstab-help": "ქოძირეთ დახვარებაშ გვერდ",
-       "tooltip-ca-nstab-category": "á\83®á\83\90á\83¡á\83\98ლაშ კატეგორიაშ ძირაფა",
+       "tooltip-ca-nstab-category": "á\83®á\83\90á\83¡á\83·ლაშ კატეგორიაშ ძირაფა",
        "tooltip-minoredit": "ქიმიოღანკი, მუჭოთ ჭიჭე რედაქტირაფა [alt-i]",
        "tooltip-save": "თირაფეფიშ ჩუალა",
        "tooltip-preview": "გეგნაჯინით თირაფეფს დო რთხინთ, თაშ ქოღოლათ სოიშახ თირაფეფს ჩუანდათინ! [alt-p]",
        "tooltip-compareselectedversions": "ქოძირით თე ხასილაშ ჟირ გიშაგორილ ვერსიაშ შხვანერობა",
        "tooltip-watch": "თე ხასილაშ გეძინა თქვან ოკონტროლე ერკებულშა [alt-w]",
        "tooltip-rollback": "\"დორთინა\" ათე ხასილაშა ეკონია გინმახანდეშ ნაღოლემ თირაფას(ეფს) გოუქვენს ართ გენჭირათ",
-       "tooltip-undo": "\"á\83\92á\83\9dá\83£á\83¥á\83\95á\83\90á\83¤á\83\90\" á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83  á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83¡ á\83\92á\83\9dá\83£á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\93á\83\9d á\83\92á\83£á\83\97á\83\9bá\83\9dá\83\9cá\83¬á\83§á\83£á\83\9cá\83¡ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\90á\83¨ á\83¤á\83\9dá\83 á\83\9bá\83\90á\83¡ á\83\92á\83\98á\83¬á\83\9dá\83\97á\83\9dá\83\9aá\83\9dá\83 á\83\90á\83¤á\83\90á\83¨ á\83 á\83\94á\83\9fá\83\98á\83\9bá\83¡. á\83\97á\83\94á\83\9cá\83\90 á\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\94á\83\91á\83\9aá\83\9dá\83\91á\83\90á\83¡ á\83\98á\83 á\83«á\83\94á\83\9cá\83¡ á\83 á\83\94á\83\96á\83\98á\83£á\83\9bá\83\94á\83¡ á\83¡á\83\90á\83\9bá\83\90á\83\9cá\83¯á\83\94á\83\9aá\83¥ á\83\98á\83§â\80\99á\83£á\83\90á\83¡ á\83\93á\83\90á\83\99á\83\9dá\83\9cá\83\99á\83 á\83\94á\83¢á\83\94á\83\91á\83£ლქინ.",
+       "tooltip-undo": "\"á\83\92á\83\9dá\83£á\83¥á\83\95á\83\90á\83¤á\83\90\" á\83\9bá\83\98á\83¨á\83\90á\83¦á\83\90á\83\9aá\83\98á\83  á\83\97á\83\98á\83 á\83\90á\83¤á\83\94á\83¤á\83¡ á\83\92á\83\90á\83£á\83¥á\83\95á\83\94á\83\9cá\83¡ á\83\93á\83\9d á\83\92á\83\9dá\83\9cá\83¬á\83§á\83£á\83\9cá\83¡ á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 á\83\90á\83¤á\83\90á\83¨ á\83¤á\83\9dá\83 á\83\9bá\83\90á\83¡ á\83\92á\83\98á\83¬á\83\9dá\83\97á\83\9dá\83\9aá\83\9dá\83 á\83\90á\83¤á\83\90á\83¨ á\83 á\83\94á\83\9fá\83\98á\83\9bá\83¡. á\83\97á\83\94á\83\9cá\83\90 á\83¨á\83\94á\83\9aá\83\94á\83\91á\83£á\83\90á\83¡ á\83\98á\83 á\83«á\83\94á\83\9cá\83¡ á\83 á\83\94á\83\96á\83\98á\83£á\83\9bá\83\94á\83¡ á\83¡á\83\90á\83\9bá\83\90á\83\9cá\83¯á\83\94á\83\9aá\83¥ á\83\98á\83¸á\83£á\83\90á\83¡ á\83\93á\83\9dá\83\99á\83\9dá\83\9cá\83\99á\83 á\83\94á\83¢á\83\90á\83¤á\83\98ლქინ.",
        "tooltip-summary": "კუნტა რეზიუმეშ მიშაჸონაფა",
        "simpleantispam-label": "სპამიშ სააწმარენჯო შემოწმაფა.\nთენა '''ვა''' შეამსათ!",
        "pageinfo-header-basic": "ხასჷლაშ ინფორმაცია",
        "markedaspatrolled": "მონიშნულია როგორც პატრულირებული",
        "previousdiff": "← წოხოლენ თირაფეფი",
        "nextdiff": "უახალაშ თირაფა →",
-       "file-info-size": "$1 × $2 პიქსელ, ფაილიშ ზომა: $3, MIME ტიპ: $4",
+       "file-info-size": "$1 × $2 პიქსელი, ფაილიშ ზჷმა: $3, MIME ტიპი: $4",
        "file-nohires": " უმოს მაღალ გიშაგორანჯალა ვა რე შელებუან.",
-       "svg-long-desc": "SVG ფაილ, ნომინალურო $1 × $2 პიქსელ, ფაილიშ ზიმა: $3",
-       "show-big-image": "á\83 á\83¡á\83£á\83\9aá\83\98 á\83\92á\83\98á\83¨á\83\90á\83\92á\83\9dá\83 á\83\90á\83\9cá\83¯á\83\90á\83\9aá\83\90",
+       "svg-long-desc": "SVG ფაილი, ნომინალურო $1 × $2 პიქსელი, ფაილიშ ზჷმა: $3",
+       "show-big-image": "á\83\9dá\83 á\83\98á\83\92á\83\98á\83\9cá\83\90á\83\9aá\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98",
        "show-big-image-preview": "ზჷმა გიწოთოლორაფაშ ბორჯის: $1.",
        "show-big-image-other": "შხვა {{PLURAL:$2|გოფართაფა|გოფართაფა}}: $1.",
        "show-big-image-size": "$1 × $2 პიქსელი",
index 500a168..d0a661b 100644 (file)
        "title-invalid-interwiki": "דער געזונט ער בלאט־קעפל אנטהאלט אן אינטערוויקי־לינק, וואס מ'קען נישט ניצן אין א קעפל.",
        "title-invalid-talk-namespace": "דער געזוכטער בלאט־קעפל באציט זיך צו א שמועס־בלאט וואס קען נישט עקזעסטירן.",
        "title-invalid-characters": "דער געזוכטער בלאט־קעפל אנטהאלט אומגילטיקע צייכענען: \"$1\".",
+       "title-invalid-relative": "דער טיטל האט א רעלאטיוון שטעג. . רעלאטיווע בלאט טיטלען  (./, ../) זענען אומגילטיג, ווייל אפט זענען זיי אומגרייכבאר דורכן בלעטערער פונעם באניצער.",
+       "title-invalid-magic-tilde": "דער געבעטענער בלאט־טיטל אנטהאלט אן אומגילטיגן מאגישן טילדה־סעקווענץ (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "דיר געבעטענער בלאט־טיטל איז צו לאנג. ער אטר נישט זיין לענגער ווי $1 {{PLURAL:$1|בייט|בייטן}} אין UTF-8 קאדירונג.",
        "title-invalid-leading-colon": "דער געבעטענער בלאט־טיטל הייבט אן מיט אן אומגילטיגן צווייפינטל.",
        "perfcached": "די פאלגנדע דאטן זענען גענומען פונעם 'זאַפאַס' און מעגלעך נישט אקטועל. מאקסימום {{PLURAL:$1|איין רעזולטאט איז|$1 רעזולטאטן זענען}} פאראן אין זאפאס.",
        "perfcachedts": "די פאלגנדע דאטן זענען פונעם זאַפאַס, וואס איז לעצט געווארן דערהײַנטיגט $1. מאקסימום {{PLURAL:$4|איין רעזולטאט איז|$4 רעזולטאטן זענען}} פאראן אין זאפאס",
        "actionthrottled": "די אַקציע איז באַגרענעצט",
        "actionthrottledtext": "אלס מאָסמיטל קעגן ספאַם, זענט איר באַגרענעצט פֿון דורכפֿירן די פעולה צופֿיל מאל אין א קורצער צײַט. ביטע פרובירט נאכאַמאָל אין א פאר מינוט.",
        "protectedpagetext": "דער בלאט איז געשיצט צו פארמיידן רעדאקטירן און אנדערע פעולות.",
-       "viewsourcetext": "איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:",
-       "viewyourtext": "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
+       "viewsourcetext": "איר קענט זען און קאפירן דעם מקור פון דעם בלאַט.",
+       "viewyourtext": "איר קענט באקוקן דעם מקור פון <strong>אייערע רעדאקטירונגען</strong> צו דעם בלאט.",
        "protectedinterface": "דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.\nכדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.",
        "editinginterface": "<strong>ווארענונג:</strong> איר באַאַרבעט א בלאט וואס ווערט געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג.\nענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אנדערע באניצער אויף דער וויקי.",
        "translateinterface": "כדי צו צולייגן איבערזעצונגען פאר אלע וויקיס, זײַט אזוי גוט און ניצט [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזירונג פראיעקט.",
-       "cascadeprotected": "×\93ער ×\91×\9c×\90×\98 ×\90×\99×\96 ×¤×\90רשפ×\90ר×\98 ×¦×\95×\9d ×¢× ×\93ער×\9f ×\95×\95×\99×\91×\90×\9c×\93 ×¢×¨ ×\90×\99×\96 ×\90×\99×\99× ×\92עש×\9c×\90ס×\9f ×\90×\99×\9f ×\90×\99×\99× ×¢ ×¤×\95×\9f ×\93×\99 ×¤×\90×\9c×\92× ×\93×¢ {{PLURAL:$1|×\91×\9c×\90×\98, ×\95×\95×\90ס ×\90×\99×\96\91×\9c×¢×\98ער, ×\95×\95×\90ס ×\96×¢× ×¢×\9f}} ×\91×\90ש×\99צ×\98 ×\9e×\99×\98 ×\93ער ×§×\90סק×\99×\99ד אפציע:\n\n$2",
+       "cascadeprotected": "×\93ער ×\91×\9c×\90×\98 ×\90×\99×\96 ×\92×¢×\95×\95×\90ר×\9f ×\91×\90ש×\99צ×\98 ×¤×\95×\9f ×¨×¢×\93×\90ק×\98×\99ר×\9f ×\95×\95×\99×\91×\90×\9c×\93 ×¢×¨ ×\90×\99×\96 ×\90×\99×\99× ×\92עש×\9c×\90ס×\9f ×\90×\99×\9f {{PLURAL:$1|×\93×¢×\9d ×¤×\90×\9c×\92× ×\93×\9f ×\91×\9c×\90×\98, ×\95×\95×\90ס ×\90×\99×\96\93×\99 ×¤×\90×\9c×\92× ×\93×¢ ×\91×\9c×¢×\98ער, ×\95×\95×\90ס ×\96×¢× ×¢×\9f}} ×\91×\90ש×\99צ×\98 ×\9e×\99×\98 ×\93ער ×§×\90סק×\90ד אפציע:\n\n$2",
        "namespaceprotected": "איר זענט נישט ערלויבט צו רעדאקטירן בלעטער אינעם '''$1''' נאמענטייל.",
        "customcssprotected": "איר האט נישט רשות צו רעדאַקטירן דעם CSS בלאַט, ווײַל ער אַנטהאַלט די פערזענלעכע באַשטימונגען פון אַן אַנדער באַניצער.",
        "customjsprotected": "איר האט נישט רשות צו רעדאַקטירן דעם JavaScript בלאַט, ווײַל ער אַנטהאַלט די פערזענלעכע באַשטימונגען פון אַן אַנדער באַניצער.",
        "readonlywarning": "'''ווארענונג: די דאטנבאזע איז געווארן פארשלאסן פאר אויפהאלטונג, ממילא וועט איר נישט קענען אפהיטן אייערע ענדערונגען אצינד. '''\nאיר קענט קאפירן און ארײַנלייגן דעם טעקסט אריין צו א טעקסט טעקע און דאס דארטן אפהיטן אויף שפעטער.\n\nדער אדמיניסטראטאר וואס האט זי פארשלאסן האט מסביר געווען אזוי: $1",
        "protectedpagewarning": "'''ווארענונג:  דער בלאט איז געווארן פארשפארט אז בלויז באניצערס מיט סיסאפ פריווילעגיעס קענען אים ענדערן.'''\nדי פארגאנגענע לאגבוך באשרײַבונג ווערט געוויזן דא:",
        "semiprotectedpagewarning": "'''באמערקונג:''' דער דאָזיקער בלאַט איז פאַרשפּאַרט, אַזוי אַז בלויז איינגעשריבענע באַניצער קענען אים ענדערן.\nדאָס פאַרגאַנגענע לאָגבוך באַשרייבונג ווערט געוויזן דאָ:",
-       "cascadeprotectedwarning": "'''ווארענונג:''' דער בלאט איז פארשפארט אז בלויז סיסאפן קענען אים ענדערן, וויבאלד ער איז איינגעשלאסן אין {{PLURAL:$1| דעם פאלגנדן בלאט, וואס איז|די פאלגנדע בלעטער, וואס זענען}} קאסקאד באשיצט:",
+       "cascadeprotectedwarning": "<strong>ווארענונג:</strong> דער בלאט איז פארשפארט אז בלויז סיסאפן קענען אים ענדערן, וויבאלד ער איז איינגעשלאסן אין {{PLURAL:$1| דעם פאלגנדן בלאט, וואס איז|די פאלגנדע בלעטער, וואס זענען}} קאסקאד באשיצט:",
        "titleprotectedwarning": "'''אזהרה: דער בלאט איז פֿארשפאַרט טא דארף מען [[Special:ListGroupRights|ספעציפֿישע רעכטן]] צו שאפֿן אים.'''\nדי פֿאַרגאַנגענע לאגבוך באשרײַבונג ווערט געוויזן דאָ:",
        "templatesused": "{{PLURAL:$1|מוסטער|מוסטערן}} באנוצט אויף דעם בלאט:",
        "templatesusedpreview": "{{PLURAL:$1|מוסטער| מוסטערן}}  באַניצט  אין דעם פֿאָראױסקוק:",
        "content-model-css": "CSS",
        "content-json-empty-object": "ליידיגער אביעקט",
        "content-json-empty-array": "ליידיגער אריי",
+       "duplicate-args-warning": "<strong>ווארענונג:</strong> [[:$1]] רופט [[:$2]] מיט מער ווי איין ווערט פארן פאראמעטער \"$3\". נאר דעם לעצטן ווערט וועט מען ניצן.",
        "duplicate-args-category": "בלעטער וואס ניצן געטאפלטע ארגומענטן אין מוסטער רופן",
        "duplicate-args-category-desc": "דער בלאט אנטהאלט מוסטער־אויפרופן וואס ניצן דופליקאטן פון ארגומענטן, ווי למשל <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.\n\nער דארף האבן ווינציגער פון  $2 {{PLURAL:$2|רוף|רופן}}, אבער אצינד {{PLURAL:$1|איז דא $1 רוף|זענען דא $1 רופן}}.",
        "search-category": "(קאטעגאריע $1)",
        "search-file-match": "(פאסט צו טעקע אינהאלט)",
        "search-suggest": "צי האט איר געמיינט: $1",
+       "search-rewritten": "רעזולטאטן וועגן $1 ווערן געוויזן. איר קענט אויך זוכן $2.",
        "search-interwiki-caption": "שוועסטער פראיעקטן",
        "search-interwiki-default": "רעזולטאטן פון $1:",
        "search-interwiki-more": "(נאך)",
        "rows": "שורות:",
        "columns": "עמודים:",
        "searchresultshead": "זוכן",
-       "stub-threshold": "שוועל פֿאַר <a href=\"#\" class=\"stub\">שטומף לינק</a> פֿאָרמאַטירונג (בייטן):",
+       "stub-threshold": "שוועל פֿאַר שטומף לינק פֿאָרמאַטירונג ($1):",
+       "stub-threshold-sample-link": "ביישפיל",
        "stub-threshold-disabled": "אַנולירט",
        "recentchangesdays": "צאל פון טעג צו ווייזן אין די לעצטע ענדערונגן:",
        "recentchangesdays-max": "מאַקסימום $1 {{PLURAL:$1|טאָג|טעג}}",
        "action-editmyprivateinfo": "רעדאקטירן אײַער פריוואטע אינפארמאציע",
        "action-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
        "action-managechangetags": "שאפן און אויסמעקן טאגן פון דער דאטנבאזע",
+       "action-applychangetags": "אנווענדן טאגן צוזאמען מיט אייערע ענדערונגען",
        "nchanges": "{{PLURAL:$1|ענדערונג|$1 ענדערונגען}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|זײַט לעצטן וויזיט}}",
        "enhancedrc-history": "היסטאריע",
        "boteditletter": "ב",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|איין באַניצער פאַסט|$1 באַניצערס פאַסן}} אויף]",
        "rc_categories": "גרענעץ פֿאַר קאַטעגאריעס (אָפשיידן מיט \"|\")",
-       "rc_categories_any": "×\90×\9cע",
+       "rc_categories_any": "×\90×\99×\99נער ×¤×\95×\9f ×\93×\99 ×\92עק×\9c×\99×\91×¢× ע",
        "rc-change-size-new": "$1 {{PLURAL:$1|בייט|בייטן}} נאך דער ענדערונג",
        "newsectionsummary": "/* $1 */ נייע אפטיילונג",
        "rc-enhanced-expand": "צייגן דעטאלן",
        "upload-too-many-redirects": "דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.",
        "upload-http-error": "א HTTP גרײַז האט פאַסירט: $1",
        "upload-copy-upload-invalid-domain": "ארויפלאדן טעקעס פון דעם דאמיין נישט מעגלעך.",
+       "upload-dialog-title": "אַרױפֿלאָדן טעקע",
+       "upload-dialog-error": "א גרײַז האט פאסירט",
+       "upload-dialog-warning": "א ווארענונג האט פאסירט",
+       "upload-dialog-button-cancel": "אַנולירן",
+       "upload-dialog-button-done": "ערליידיקט",
+       "upload-dialog-button-save": "אויפֿהיטן",
+       "upload-dialog-button-upload": "אַרויפֿלאָדן",
+       "upload-dialog-label-select-file": "קלויבן טעקע",
+       "upload-dialog-label-infoform-title": "פרטים",
+       "upload-dialog-label-infoform-name": "נאָמען",
+       "upload-dialog-label-infoform-description": "באַשרײבונג",
+       "upload-dialog-label-usage-title": "באניץ",
+       "upload-dialog-label-usage-filename": "טעקע נאמען",
        "backend-fail-stream": "קען נישט מאכן שטראמען טעקע $1.",
        "backend-fail-notexists": "נישט פֿאראן די טעקע $1.",
        "backend-fail-notsame": "א נישט־אידענטישע טעקע עקזיסטירט שוין ביי \"$1\".",
        "uploadstash-nofiles": "איר האט נישט קיין טעקעס אין זאפאס.",
        "uploadstash-errclear": "אוועקנעמען די טעקעס דורכגעפאלן.",
        "uploadstash-refresh": "דערפֿרישן די רשימה פון טעקעס",
+       "invalid-chunk-offset": "אומגילטיקער סטארטפונקט",
        "img-auth-accessdenied": "צוטריט אָפגעזאָגט",
        "img-auth-notindir": "געשיכטעס שטעג איז נישט אין דער קאנפיגורטער ארויפלאד־דירעקטאריע.",
        "img-auth-badtitle": "קען נישט שאפֿן א גילטיקן טיטל פֿון \"$1\"",
        "booksources-text": "אונטן איז א ליסטע פון סייטס וואס פֿארקויפֿן נייע און גענוצטע ביכער און האבן אויך נאך אינפֿארמאציע וועגן די ביכער וואס איר זוכט:",
        "booksources-invalid-isbn": "דאָס געגעבענע ISBN זעט נישט אויס צו זיין גילטיק; קאנטראלירט פֿאַר גרײַזן בײַם קאפּירן פון דעם ערשטיקן מקור.",
        "specialloguserlabel": "אויספֿירער:",
-       "speciallogtitlelabel": "ציל (טיטל אדער באניצער):",
+       "speciallogtitlelabel": "ציל (טיטל אדער {{ns:user}}:באניצער־נאמען פאר א באניצער):",
        "log": "לאגביכער",
        "all-logs-page": "אלע פובליקע לאגביכער",
        "alllogstext": "קאמבינירטער אויסשטעל פון אלע לאגביכער פון {{SITENAME}} בנמצא.\nמען קען פֿאַרשמעלרן די אויסוואל דורך אויסוויילן א סארט לאג, באַניצער נאמען אדער אנרירנדע בלעטער.",
        "emailuser": "שיקן ע-פאסט צו דעם באַניצער",
        "emailuser-title-target": "שיקן {{GENDER:$1|דעם באניצער|די באניצערין}} ע־פאסט",
        "emailuser-title-notarget": "שיקן א באניצער ע־פאסט",
-       "emailpage": "שיקן ע-פאסט צו באַניצער",
        "emailpagetext": "איר קענט ניצן די פֿארעם אונטן צו שיקן א בליצבריוו צו {{GENDER:$1|דעם דאזיגן באַניצער|דער דאזיגער באַניצערין}}.\nדער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באַניצער פרעפערנעצן]] וועט זיך ווײַזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.",
        "defemailsubject": "ע-פאסט פון באַניצער \"$1\" {{SITENAME}}",
        "usermaildisabled": "באַניצער ע־פאסט אומאַקטיוויזירט",
        "emailccsubject": "קאפיע פון אײַער מעלדונג צו $1: $2",
        "emailsent": "ע-פאסט געשיקט",
        "emailsenttext": "אײַער אי-בריוו איז געשיקט געווארן.",
-       "emailuserfooter": "דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער  \"{{int:emailpage}}\" פֿונקציע בײַ {{SITENAME}}.",
+       "emailuserfooter": "דער בליצבריוו איז געשיקט געווארן דורך$1 צו $2 מיט דער  \"{{int:emailuser}}\" פֿונקציע בײַ {{SITENAME}}.",
        "usermessage-summary": "איבערלאזן סיסטעם אָנזאָג",
        "usermessage-editor": "סיסטעם שליח",
        "usermessage-template": "MediaWiki:באניצער־מעלדונג",
        "watchlistanontext": "ביטע לאגירט ארײַן כדי צו זען אדער ענדערן בלעטער אין אייער אַכטגעבן ליסטע.",
        "watchnologin": "איר זענט נישט אַרײַנלאגירט",
        "addwatch": "צולייגן צו דער אויפֿפאַסונג ליסטע",
-       "addedwatchtext": "דער בלאט \"[[:$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].\n\nווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט.",
+       "addedwatchtext": "\"[[:$1]]\" און זיין רעדן־בלאַט זענען צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].",
        "addedwatchtext-short": "מ'האט צוגעלייגט בלאט \"$1\" צו אײַער אויפפאסן ליסטע.",
        "removewatch": "אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע",
-       "removedwatchtext": "דער בלאַט \"[[:$1]]\" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].",
+       "removedwatchtext": "\"[[:$1]]\" און זיין רעדן־בלאַט זענען אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].",
        "removedwatchtext-short": "מ'האט אראפגענומען בלאט \"$1\" פון אײַער אויפפאסן ליסטע.",
        "watch": "אױפֿפּאַסן",
        "watchthispage": "טוט אױפֿפּאַסן דעם בלאט",
        "protect-text": "איר מעגט זען און ענדערן דעם שוץ ניווא דא פֿארן בלאט '''$1'''.",
        "protect-locked-blocked": "איר קען נישט ענדערן דעם שוץ ניווא בעת ווען איר זענט בלאקירט.\nפֿאלגנד זענען די לויפֿיגע שטעלונגען פֿארן בלאט '''$1''':",
        "protect-locked-access": "אייער קאנטע האט נישט קיין ערלויבניש צו ענדערן בלאט שיצונג ניוואען.\nדא זענען די לויפֿיקע שטעלונגען פֿאַר דעם בלאַט '''$1''':",
-       "protect-cascadeon": "×\93ער ×\91×\9c×\90Ö·×\98 ×\90×\99×\96 ×\92עש×\99צ×\98 ×\90ַצ×\99× ×\93 ×\95×\95ײַ×\9c ×¢×¨ ×\90×\99×\96 ×\90ײַנ×\92עש×\9c×\90ס×\9f ×\90×\99×\9f  {{PLURAL:$1|×\93×¢×\9d ×¤Ö¿×\90×\9c×\92× ×\93×\9f ×\91×\9c×\90Ö·×\98, ×\95×\95×\90ס ×\94×\90×\98\93×\99 ×¤Ö¿×\90×\9c×\92× ×\93×¢ ×\91×\9c×¢×\98ער, ×\95×\95×\90ס ×\94×\90×\91×\9f}} ×§×\90ַסק×\90Ö·×\93×\99ר×\98×¢ ×©×\99צ×\95× ×\92.\n\nענדערונגען צום שיצונג ניווא פונעם בלאַט וועלן נישט ווירקן אויף דער קאַסקאַדירטער שיצונג .",
+       "protect-cascadeon": "×\93ער ×\91×\9c×\90Ö·×\98 ×\90×\99×\96 ×\92עש×\99צ×\98 ×\90ַצ×\99× ×\93 ×\95×\95ײַ×\9c ×¢×¨ ×\90×\99×\96 ×\90ר×\99×\91ער×\92עש×\9c×\90ס×\9f ×\90×\99×\9f  {{PLURAL:$1|×\93×¢×\9d ×¤Ö¿×\90×\9c×\92× ×\93×\9f ×\91×\9c×\90Ö·×\98, ×\95×\95×\90ס ×\94×\90×\98\93×\99 ×¤Ö¿×\90×\9c×\92× ×\93×¢ ×\91×\9c×¢×\98ער, ×\95×\95×\90ס ×\94×\90×\91×\9f}} ×§×\90ַסק×\90Ö·×\93×\99ר×\98×¢ ×©×\99צ×\95× ×\92.\nענדערונגען צום שיצונג ניווא פונעם בלאַט וועלן נישט ווירקן אויף דער קאַסקאַדירטער שיצונג .",
        "protect-default": "אלע באניצער ערלויבט",
        "protect-fallback": "דערלויבן נאר באניצער מיט \"$1\" ערלויבניש",
        "protect-level-autoconfirmed": "לאזן נאר אויטאמאטיש באשטעטיקטע באַניצער",
        "undeletepagetext": "The following {{PLURAL:$1|דער פֿאלגנדער בלאַט איז געווארן אויסגעמעקט אבער קען|די פֿאלגנדע $1  בלעט ער זענען געווארן אויסגעמעקט אבער קענען}} נאך  ווערן צוריקגעשטעלט פֿון אַרכיוו.\nפֿון צײַט צו צײַט רייניגט מען אויס דעם אַרכיוו.",
        "undelete-fieldset-title": "צוריקשטעלן רעוויזיעס",
        "undeleteextrahelp": "צוריקצושטעלן די גאנצע געשיכטע, פונעם בלאט, דרוקט נישט אויף קיין איין ווערסיע, און דרוקט '''''{{int:undeletebtn}}'''''.\nצוריקצושטעלן נאר געוויסע ווערסיעס, קלויבט אויס  די רעוויזיעס וואס איר ווילט, און דרוקט אויף '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|איין ווערסיע|$1 ווערסיעס}} אַרכיווירט",
+       "undeleterevisions": "{{PLURAL:$1|איין ווערסיע|$1 ווערסיעס}} אויסגעמעקט",
        "undeletehistory": "אויב איר שטעלט צוריק דעם בלאַט, וועלן אַלע רעוויזיעס ווערן צוריקגעשטעלט אין דער היסטאריע.\nאויב מען האט באַשאַפֿן א בלאַט מיטן זעלבן נאָמען זײַטן אויסמעקן, וועלן די צוריקגעשטעלטע רעוויזיעס זיך באַווײַזן אין דער פֿריערדיקער היסטאריע.",
        "undeletehistorynoadmin": "דער בלאַט איז געווארן אויסגעמעקט.\n די סיבה פֿאַרן אויסמעקן ווערט געוויזן אין דער רעזומע אונטן, צוזאמען מיט פרטים פון די באַניצער וואס האבן רעדאַקטירט דעם בלאַט פֿאַרן אויסמעקן.\n דער טעקסט פון די אויסגעמעקטע ווערסיעס איז דערגרײַכלעך בלויז צו סיסאפן.",
        "undelete-revision": "אויסגעמעקטע ווערסיע פֿון $1 (פֿון $4, אום $5) פֿון $3:",
        "tooltip-ca-nstab-main": "זעט דעם אינהאַלט בלאַט",
        "tooltip-ca-nstab-user": "זעט דעם באניצער בלאט",
        "tooltip-ca-nstab-media": "קוקט אין דעם מעדיע בלאט",
-       "tooltip-ca-nstab-special": "×\93×\90ס ×\90×\99×\96 ×\90 ×¡×¤×¢×¦×\99×¢×\9cער ×\91×\9c×\90×\98, ×\9e'קע×\9f ×\90×\99×\9d × ×\99ש×\98 ×¢× ×\93×¢רן",
+       "tooltip-ca-nstab-special": "×\93×\90ס ×\90×\99×\96 ×\90 ×¡×¤×¢×¦×\99×¢×\9cער ×\91×\9c×\90×\98, ×\9e'קע×\9f ×\90×\99×\9d × ×\99ש×\98 ×¨×¢×\93×\90ק×\98×\99רן",
        "tooltip-ca-nstab-project": "באקוקט דעם פראיעקט בלאט",
        "tooltip-ca-nstab-image": "באקוקט דעם טעקע בלאט",
        "tooltip-ca-nstab-mediawiki": "באקוקט די סיסטעם מעלדונגען",
        "spam_reverting": "צוריקגעשטעלט צו דער לעצטער ווערסיע אן לינקען צו $1",
        "spam_blanking": "אלע רעוויזיעס האבן לינקען צו $1, אויסליידיקן",
        "spam_deleting": "אלע רעוויזיעס האבן לינקען צו $1, אויסמעקן",
-       "simpleantispam-label": "אנטי־ספאם קאנטראלע.\n'''נישט''' אײַנגעבן קיין אײַנגאב דא!",
+       "simpleantispam-label": "אנטי־ספאם קאנטראלע. \n<strong>נישט</strong> איינגעבן קיין איינגאב דא!",
        "pageinfo-title": "אינפֿאָרמאַציע פֿאַר \"$1\"",
        "pageinfo-not-current": "קען ווייזן אינפארמאציע נאר פאר דער לויפיקער רעוויזיע.",
        "pageinfo-header-basic": "גרונטלעכע אינפֿארמאַציע",
index b849ca4..4f05a3c 100644 (file)
        "resetpass-temp-password": "Ọ̀rọ̀ìpamọ́ fún ìgbà díẹ̀",
        "resetpass-abort-generic": "Ìyípadà ọ̀rọ̀ìpamọ́ ti jẹ́ jíjáwọ́ látọwọ́ àsomọ́ kan.",
        "passwordreset": "Ìtúntò ọ̀rọ̀ìpamọ́",
-       "passwordreset-legend": "Ìtúntò ọ̀rọ̀ìpamọ́",
        "passwordreset-disabled": "Ìdálẹ́kun ìtúntò ọ̀rọ̀ìpamọ́ lórí wiki yìí.",
        "passwordreset-emaildisabled": "Ìdálẹ́kun lílo email lórí wiki yìí.",
        "passwordreset-username": "Orúkọ oníṣe:",
        "nlinks": "{{PLURAL:$1|ìjápọ̀|àwọn ìjápọ̀}} $1",
        "nmembers": "{{PLURAL:$1|ará|àwọn ará}} $1",
        "nrevisions": "{{PLURAL:$1|àtúnyẹ̀wò|àwọn àtúnyẹ̀wò}} $1",
-       "nviews": "{{PLURAL:$1|Ìwò|Àwọn ìwò}} $1",
        "nimagelinks": "Lílò lórí {{PLURAL:$1|ojúewé|àwọn ojúewé}} $1",
        "ntransclusions": "lílò lórí {{PLURAL:$1|ojúewé|àwọn ojúewé}} $1",
        "specialpage-empty": "Kò sí àwọn èsì kankan fún ìjábọ̀ yìí.",
        "linksearch-pat": "Ọ̀nà àwáàrí:",
        "linksearch-ns": "Orúkọàyè:",
        "linksearch-ok": "Ṣàwárí",
-       "linksearch-text": "Àwọn ọ̀rọ̀ àfiwá bíi \"*.wikipedia.org\" le ṣe é lò.\nOrúkọ ibiàyè pọndandan, fún àpẹrẹ \"*.org\".<br />\n{{PLURAL:$2|Prótókólù|Àwọn prótókólù}} tí a ṣàtìlẹ́yìn fún: <code>$1</code> (yíó bẹ̀rẹ̀ pẹ̀lú http:// tí prótókólù kankan kò bá jẹ́ títọ́kasí).",
+       "linksearch-text": "Àwọn ọ̀rọ̀ àfiwá bíi \"*.wikipedia.org\" le ṣe é lò.\nOrúkọ ibiàyè pọndandan, fún àpẹrẹ \"*.org\".<br />\n{{PLURAL:$2|Prótókólù|Àwọn prótókólù}} tí a ṣàtìlẹ́yìn fún: $1 (yíó bẹ̀rẹ̀ pẹ̀lú http:// tí prótókólù kankan kò bá jẹ́ títọ́kasí).",
        "linksearch-line": "$1 jẹ́ jíjápọ̀ láti $2",
        "linksearch-error": "Àwọn ọ̀rọ̀ àfiwá le hàn ní ìbẹ̀rẹ̀ orúkọ ibiìtakùn (hostname) nìkan.",
        "listusersfrom": "Ìfihàn àwọn oníṣe nípa bíbẹ̀rẹ̀ láti:",
index 5d21409..2a0fac2 100644 (file)
@@ -29,7 +29,7 @@
                ]
        },
        "tog-underline": "連結加底線:",
-       "tog-hideminor": "最新更改唔顯示修改",
+       "tog-hideminor": "最新更改唔顯示修改",
        "tog-hidepatrolled": "響最近修改度隱藏巡查過嘅編輯",
        "tog-newpageshidepatrolled": "響新頁清單度隱藏巡查過嘅版",
        "tog-extendwatchlist": "展開監視清單去顯示全部更改,唔係淨係最新嘅",
        "tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
        "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
        "tog-minordefault": "預設全部編輯做小修改",
-       "tog-previewontop": "喺修改欄上顯示預覽",
+       "tog-previewontop": "喺修改欄上顯示預覽",
        "tog-previewonfirst": "第一次修改時顯示預覽",
-       "tog-enotifwatchlistpages": "當響我張監視清單度嘅頁面同檔案有修改時電郵通知我",
-       "tog-enotifusertalkpages": "å\80\8b人ç\95\99è¨\80ç\89\88æ\9c\89ä¿®æ\94¹æ\99\82é\9b»é\83µé\80\9aç\9f¥æ\88\91",
-       "tog-enotifminoredits": "頁面同檔案小修改都要電郵通知我",
+       "tog-enotifwatchlistpages": "喺我張監視清單度嘅頁同檔有修改時,用電郵通知我。",
+       "tog-enotifusertalkpages": "å\96ºå\80\8b人ç\95\99è¨\80ç\89\88æ\9c\89ä¿®æ\94¹æ\99\82ï¼\8cç\94¨é\9b»é\83µé\80\9aç\9f¥æ\88\91ã\80\82",
+       "tog-enotifminoredits": "喺頁面同檔案有細修改時,用電郵通知我。",
        "tog-enotifrevealaddr": "喺電郵通知信上面話畀人聽我嘅電郵地址",
        "tog-shownumberswatching": "顯示有幾多人監視",
        "tog-oldsig": "現有簽名:",
        "tog-forceeditsummary": "我冇入修改註解時通知我",
        "tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
        "tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
-       "tog-watchlisthideminor": "響監視清單度隱藏修改",
+       "tog-watchlisthideminor": "響監視清單度隱藏修改",
        "tog-watchlisthideliu": "響監視清單度隱藏登入用戶",
        "tog-watchlisthideanons": "響監視清單度隱藏匿名用戶",
        "tog-watchlisthidepatrolled": "響監視清單度隱藏巡查過嘅編輯",
-       "tog-ccmeonemails": "當我寄電郵畀其他人嗰陣寄返封副本畀我",
+       "tog-ccmeonemails": "喺我寄電郵畀其他人嗰陣,寄返封副本畀我。",
        "tog-diffonly": "響差異下面唔顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏類",
        "tog-norollbackdiff": "進行反轉之後略過差異",
        "actionthrottled": "動作已壓制",
        "actionthrottledtext": "基於反垃圾嘢嘅考量,你而家響呢段短時間之內限制咗去做呢一個動作,而你已經超過咗個上限。請響幾分鐘之後再試過。",
        "protectedpagetext": "呢一版已經保護咗唔畀改或者做其他動作。",
-       "viewsourcetext": "你可以睇吓或者複製呢一頁嘅原始碼",
-       "viewyourtext": "你可以睇同複製呢版入面<strong>由你改</strong>嘅原碼",
+       "viewsourcetext": "你可以睇吓或者複製呢一頁嘅原始碼",
+       "viewyourtext": "你可以睇同複製呢版入面<strong>由你改</strong>嘅原碼",
        "protectedinterface": "呢一頁提供軟件嘅介面文字,呢一頁已經保護咗以預防濫用。\n要加或者改所有維基站嘅翻譯,請去 [//translatewiki.net/ translatewiki.net]嘅  MediaWiki 本地化項目。",
        "editinginterface": "'''警告''':閣下而家編輯緊嘅係為爾隻軟件提供介面文字嘅版。\n改爾一版會自動改埋爾個維基嘅其他用戶用緊嘅介面嘅文字。",
        "translateinterface": "要加或者改所有維基項目嘅翻譯,請去MediaWiki嘅本地化項目:[//translatewiki.net/ translatewiki.net]。",
        "creating": "開版$1",
        "editingsection": "而家喺度編輯$1 (小節)",
        "editingcomment": "而家喺度編輯$1 (新小節)",
-       "editconflict": "由於編輯衝突,{{GENDER:|你|妳|你}}嘅修改記唔低。{{GENDER:|你|妳|你}}想唔想人手解決呢個衝突?",
+       "editconflict": "ç\94±æ\96¼ç·¨è¼¯è¡\9dçª\81ï¼\8c{{GENDER:|ä½ |妳|ä½ }}å\96º$1å\98\85ä¿®æ\94¹è¨\98å\94\94ä½\8eã\80\82{{GENDER:|ä½ |妳|ä½ }}æ\83³å\94\94æ\83³äººæ\89\8b解決å\91¢å\80\8bè¡\9dçª\81ï¼\9f",
        "explainconflict": "有其他人喺你開始編輯之後已經更改呢一頁。\n喺上面嗰個空間而家現存嘅頁面文字。\n你嘅更改會喺下面嘅文字空間顯示。\n你需要合併你嘅更改到原有嘅文字。\n喺你撳「{{int:savearticle}}」之後,'''只有'''喺上面嘅文字區會被儲存。",
        "yourtext": "你嘅文字",
        "storedversion": "已經儲存咗嘅修訂",
        "yourdiff": "差異",
        "copyrightwarning": "請留意喺{{SITENAME}}度,所有喺呢度嘅貢獻會被考慮到喺$2之下發出(睇$1有更詳細嘅資訊)。如果你係唔想你編輯嘅文字無喇喇咁被分發,咁就唔好喺呢度遞交。\n\n你亦都要同我哋保證啲文字係你自己寫嘅,或者係由公有領域或相似嘅自由資源複製落嚟。\n'''喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品!'''",
        "copyrightwarning2": "請留意喺{{SITENAME}}度,所有嘅貢獻可能會被其他嘅貢獻者編輯、修改,或者刪除。如果你係唔想你編輯嘅文字無喇喇咁被編輯,咁就唔好喺呢度遞交。\n\n你亦都要同我哋保證啲文字係你自己寫嘅,或者係由公有領域或相似嘅自由資源複製落嚟(睇$1有更詳細嘅資訊)。\n'''喺未有任何許可嘅情況之下千祈唔好遞交有版權嘅作品!'''",
+       "editpage-cannot-use-custom-model": "呢頁嘅目錄模型唔改得",
        "longpageerror": "<strong>出錯:你所遞交嘅文字係有 {{PLURAL:$1|1 KB|$1 KB}} 咁長,長過最大嘅 {{PLURAL:$2|1 KB|$2 KB}}。</strong>\n儲唔到你遞交嘅文字。",
        "readonlywarning": "<strong>警告:資料庫已經鎖住咗去做定期保養。而家你唔可以儲起你嘅編輯。</strong>\n\n你可以儲啲文字落一份文字檔先。\n\n管理員嘅解釋: $1",
        "protectedpagewarning": "'''警告:呢版已經受到保護,只有管理員權限嘅用戶先至可以改。'''\n最近嘅日誌響下面提供以便參考:",
        "semiprotectedpagewarning": "'''注意:'''呢一頁已經保護咗,只有已經註冊嘅用戶先至可以改。\n最近嘅日誌響下面提供以便參考:",
-       "cascadeprotectedwarning": "'''è­¦å\91\8aï¼\9a'''å\91¢ä¸\80é \81å·²ç¶\93ä¿\9dè­·å\92\97ï¼\8cå\8fªæ\9c\89管理員權限嘅用戶先至可以改,因為佢係響以下連串保護嘅{{PLURAL:$1|一|幾}}頁度包含咗:",
+       "cascadeprotectedwarning": "'''è­¦å\91\8aï¼\9a'''å\91¢ä¸\80é \81å·²ç¶\93ä¿\9dè­·å\92\97ï¼\8cå\87\88å¾\97管理員權限嘅用戶先至可以改,因為佢係響以下連串保護嘅{{PLURAL:$1|一|幾}}頁度包含咗:",
        "titleprotectedwarning": "'''警告:呢一版已經保護咗,需要一啲[[Special:ListGroupRights|指定權限]]先至可以開到。'''\n最近嘅日誌響下面提供以便參考:",
        "templatesused": "呢版用嘅{{PLURAL:$1|模}}:",
        "templatesusedpreview": "呢一次預覽裏面,用咗下面呢啲{{PLURAL:$1|模|模}}:",
        "postedit-confirmation-saved": "呢版經已儲存咗。",
        "edit-already-exists": "唔可以開一新版。\n佢已經存在。",
        "defaultmessagetext": "預設訊息文字",
+       "content-failed-to-parse": "從$1模型解析到$2目錄時肥佬咗。原因:$3。",
        "invalid-content-data": "無效嘅內容資料",
        "content-not-allowed-here": "「$1」唔可以輸入[[$2]]。",
        "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
        "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
+       "editpage-notsupportedcontentformat-text": "指定嘅目錄類$1同$2唔兼容",
        "content-model-wikitext": "維基文字",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript程式語言",
        "parser-template-loop-warning": "已偵測迴模: [[$1]]",
        "parser-template-recursion-depth-warning": "迴模深度限制超過咗 ($1)",
        "language-converter-depth-warning": "字體變換器深度限制超過咗 ($1)",
+       "node-count-exceeded-category": "有頁面超出咗指定數",
+       "node-count-exceeded-category-desc": "頁數超過最大限制,快啲返去改過。",
+       "node-count-exceeded-warning": "頁面超出指定數",
        "undo-success": "呢個編輯可以取消。請檢查一下個差異去確認呢個係你要去做嘅,跟住儲存下面嘅更改去完成編輯。",
        "undo-failure": "呢個編輯唔能夠取消,由於同途中嘅編輯有衝突。",
        "undo-norev": "呢個編輯唔能夠取消,由於佢唔存在或者刪除咗。",
        "history-feed-description": "響哩個wiki嘅哩一頁嘅修訂歷史",
        "history-feed-item-nocomment": "$1 響 $2",
        "history-feed-empty": "要求嘅頁面並唔存在。\n佢可能響哩個 wiki 度刪除咗或者改咗名。\n試吓[[Special:Search|響哩個wiki度搵]]有關新頁面嘅資料。",
+       "history-edit-tags": "編輯已經揀咗嘅分頁",
        "rev-deleted-comment": "(編輯摘要已經移除咗)",
        "rev-deleted-user": "(用戶名已經移除咗)",
        "rev-deleted-event": "(日誌詳情已經移除咗)",
        "rev-deleted-user-contribs": "[用戶名或IP地址拎走咗 - 響貢獻度隱藏咗編輯]",
        "rev-deleted-text-permission": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
+       "rev-suppressed-text-permission": "呢頁嘅修訂已經'''廢止咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。",
        "rev-deleted-text-unhide": "呢頁嘅修訂已經被'''洗咗'''。\n喺[{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
        "rev-suppressed-text-unhide": "呢頁嘅修訂已經被'''廢止咗'''。\n喺[{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} 廢止日誌]裏面可以搵到更詳細嘅資料。\n如果你想繼續嘅話,可以仍然[$1 睇番呢次修訂]。",
        "rev-deleted-text-view": "呢頁嘅修訂已經'''洗咗'''。\n你可以去睇吓佢;\n喺[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]裏面可以搵到更詳細嘅資料。",
        "rev-showdeleted": "顯示",
        "revisiondelete": "刪除/反刪除修訂",
        "revdelete-nooldid-title": "無效嘅目標修訂",
-       "revdelete-nooldid-text": "講清用邊個修訂去做呢樣嘢、\n所指定嘅修訂唔存在,或者你試緊去隱藏現時嘅修訂。",
+       "revdelete-nooldid-text": "講清用邊個修訂去做呢樣嘢、所指定嘅修訂唔存在或你試緊去隱藏現時嘅修訂。",
        "revdelete-no-file": "指定嘅檔案未存在。",
        "revdelete-show-file-confirm": "你係咪真係想去睇響$2 $3刪咗 \"$1\" 嘅檔案修訂?",
        "revdelete-show-file-submit": "係",
        "prefs-diffs": "差異",
        "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
        "prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
+       "prefs-tabs-navigation-hint": "貼士:可以用鍵盤嘅←或→掣睇一覽內嘅分頁",
        "email-address-validity-valid": "電郵地址睇嚟有效",
        "email-address-validity-invalid": "請打一個有效嘅電郵地址",
        "userrights": "用戶權限管理",
        "userrights-notallowed": "你無權限去加減用戶權限。",
        "userrights-changeable-col": "你可以改嘅組",
        "userrights-unchangeable-col": "你唔可以改嘅組",
+       "userrights-removed-self": "移走自身權限成功,但你冇乜可能入到呢頁。",
        "group": "組:",
        "group-user": "用戶",
        "group-autoconfirmed": "自動確認用戶",
        "right-editusercssjs": "編輯其他用戶嘅CSS同埋JavaScript檔",
        "right-editusercss": "編輯其他用戶嘅CSS檔",
        "right-edituserjs": "編輯其他用戶嘅JavaScript檔",
+       "right-editmyusercss": "編輯戶口嘅CSS文件",
+       "right-editmyuserjs": "編輯戶口嘅JavaScript文件",
+       "right-viewmywatchlist": "睇你自己嘅監視一覽",
+       "right-viewmyprivateinfo": "睇下個人信息(例如電郵或真名)",
+       "right-editmyprivateinfo": "修改個人信息(例如電郵或真名)",
+       "right-editmyoptions": "設定個人參數",
        "right-rollback": "快速反轉上位用戶對某一版嘅編輯",
        "right-markbotedits": "標示反轉編輯做機械人編輯",
        "right-noratelimit": "唔受利用率限制影響",
        "right-siteadmin": "鎖同解鎖資料庫",
        "right-override-export-depth": "倒出包含有五層深連版嘅頁面",
        "right-sendemail": "寄電郵畀其他用戶",
+       "right-passwordreset": "檢查密碼/重設電郵",
+       "right-managechangetags": "從數據庫度開或刪走[[Special:Tags|tags]]",
        "newuserlogpage": "使用者開戶記錄",
        "newuserlogpagetext": "呢個係一個使用者開戶嘅日誌",
        "rightslog": "用戶權限日誌",
        "action-createpage": "開版",
        "action-createtalk": "開討論版",
        "action-createaccount": "開呢個用戶戶口",
+       "action-history": "睇呢頁嘅歷史",
        "action-minoredit": "標示呢個編輯做細嘅",
        "action-move": "搬呢版",
        "action-move-subpages": "搬呢版同埋佢嘅細頁",
        "action-move-rootuserpages": "搬根用戶版",
+       "action-move-categorypages": "搬類頁",
        "action-movefile": "搬呢個檔案",
        "action-upload": "上載呢個檔案",
        "action-reupload": "覆蓋呢個現有嘅檔案",
        "action-viewmywatchlist": "睇監視清單",
        "action-viewmyprivateinfo": "睇你嘅私人資料",
        "action-editmyprivateinfo": "改你嘅私人資料",
+       "action-managechangetags": "從數據庫開或刪走啲符",
        "nchanges": "$1次更改",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|你上次嚟之後}}有 $1 個",
        "enhancedrc-history": "歷史",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1位用戶監視]",
-       "rc_categories": "限定到分類(以\"|\"作分隔)",
-       "rc_categories_any": "任何",
+       "rc_categories": "限定到分類(以\"|\"作分隔)",
+       "rc_categories_any": "任何揀咗嘅",
        "rc-change-size-new": "改完後係$1位元組",
        "newsectionsummary": "/* $1 */ 新小節",
        "rc-enhanced-expand": "顯示細節",
        "uploaddisabledtext": "檔案上載已經停用。",
        "php-uploaddisabledtext": "PHP 檔案上載已經停用。請檢查 file_uploads 設定。",
        "uploadscripted": "呢個檔案包含可能會誤被瀏覽器解釋執行嘅 HTML 或 script 代碼。",
+       "uploadscriptednamespace": "呢個SVG文件可能有“$1”嘅非法字詞響度",
+       "uploadinvalidxml": "分析唔到已經上傳咗嘅XML文件",
        "uploadvirus": "呢個檔案有病毒!\n詳情:$1",
        "uploadjava": "呢個係個ZIP檔案包括Java .class檔案。\n因為保安問題,上傳Java檔案係禁止左嘅。",
        "upload-source": "來源檔案",
        "upload-misc-error-text": "響上載時發生咗未知嘅錯誤。請確認輸入咗嘅URL係可以訪問嘅,之後再試多一次。如果重有問題嘅話,請聯絡一位[[Special:ListUsers/sysop|管理員]]。",
        "upload-too-many-redirects": "個URL有太多跳轉",
        "upload-http-error": "一個HTTP錯誤發生咗: $1",
+       "upload-copy-upload-invalid-domain": "從嗰個域名度冇複製上傳功能",
+       "upload-dialog-title": "上載檔案",
+       "upload-dialog-error": "出錯",
+       "upload-dialog-warning": "警告",
+       "upload-dialog-button-cancel": "取消",
+       "upload-dialog-button-done": "搞掂",
+       "upload-dialog-button-save": "儲存",
+       "upload-dialog-button-upload": "上載",
+       "upload-dialog-label-select-file": "揀檔案",
+       "upload-dialog-label-infoform-title": "細節",
+       "upload-dialog-label-infoform-name": "名",
+       "upload-dialog-label-infoform-description": "描述",
+       "upload-dialog-label-usage-title": "用法",
+       "upload-dialog-label-usage-filename": "文件名",
+       "backend-fail-stream": "傳送唔到檔案「$1」。",
+       "backend-fail-backup": "檔案 \"$1\" 唔備份得。",
        "backend-fail-notexists": "檔案$1唔存在。",
+       "backend-fail-invalidpath": "\"$1\"係冇效嘅儲存命令",
        "backend-fail-delete": "刪唔到檔案「$1」。",
+       "backend-fail-describe": "改唔到$1文件嘅數據",
        "backend-fail-alreadyexists": "檔案「$1」已經喺度。",
        "backend-fail-store": "檔案「$1」存唔到去「$2」。",
        "backend-fail-copy": "檔案「$1」抄唔到去「$2」。",
        "backend-fail-internal": "儲存後臺「$1」唔知點解出錯",
        "backend-fail-contenttype": "確定唔到存喺儲存後臺「$1」嘅內容類型。",
        "lockmanager-notlocked": "唔可以解鎖「$1」;佢都無鎖住到。",
+       "lockmanager-fail-closelock": "閂唔到鎖咗嘅$1文件",
+       "lockmanager-fail-deletelock": "刪唔到鎖咗嘅$1文件",
+       "lockmanager-fail-openlock": "打唔開鎖咗嘅$1文件",
        "zip-file-open-error": "在開啟檔案進行ZIP檢查時出錯。",
        "zip-wrong-format": "呢個唔係一個ZIP檔案。",
        "zip-bad": "呢個係不可讀嘅ZIP檔案。\n因為呢個原因,唔可以進行保安檢查。",
        "uploadstash-badtoken": "進行呢個動作唔成功,或者你嘅編輯資訊已經過咗期。再試吓喇。",
        "uploadstash-errclear": "清除檔案唔成功。",
        "uploadstash-refresh": "更新檔案清單",
+       "invalid-chunk-offset": "非法偏移塊",
        "img-auth-accessdenied": "拒絕通行",
        "img-auth-nopathinfo": "PATH_INFO唔見咗。\n你嘅伺服器重未設定呢個資料。\n佢可能係CGI為本,唔支援img_auth。\n睇吓 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 。",
        "img-auth-notindir": "所請求嘅路徑唔響個已經設定咗嘅上載目錄。",
        "listfiles-delete": "刪除",
        "listfiles-summary": "呢個特別頁顯示全部上載咗嘅檔案。",
        "listfiles_search_for": "搵媒體名:",
+       "listfiles-userdoesnotexist": "用戶「$1」重未註冊。",
        "imgfile": "檔案",
        "listfiles": "檔案清單",
        "listfiles_thumb": "縮圖",
        "sharedupload": "呢個檔案係出自$1,可以喺其他計劃中使用。",
        "sharedupload-desc-there": "呢個檔案係出自$1,可以喺其他計劃中使用。\n更多資訊請睇[$2 檔案描述頁]。",
        "sharedupload-desc-here": "呢個檔案係出自$1,可以喺其他計劃中使用。\n佢響嗰邊嘅[$2 檔案描述頁]響下面度顯示。",
+       "sharedupload-desc-edit": "呢個文件喺$1同其他姊妹計劃度用咗,\n你可能喺佢嘅[$2文件描述頁]度改個描述先至得。",
+       "sharedupload-desc-create": "呢個文件喺$1同其他姊妹計劃度用咗,\n你可能喺佢嘅[$2文件描述頁]度改個描述先至得。",
        "filepage-nofile": "冇同名嘅檔案存在。",
        "filepage-nofile-link": "冇同名嘅檔案存在,但係你可以[$1 上載佢]。",
        "uploadnewversion-linktext": "上載呢個檔案嘅一個新版本",
        "randomincategory-nopages": "[[:Category:$1|$1]]類入面無嘢。",
        "randomincategory-category": "類:",
        "randomincategory-legend": "類入面是但一版",
+       "randomincategory-submit": "搵",
        "randomredirect": "隨便彈",
        "randomredirect-nopages": "響 \"$1\" 空間名度冇一個彈去版。",
        "statistics": "統計",
        "linksearch-pat": "搵嘅形態:",
        "linksearch-ns": "空間名",
        "linksearch-ok": "搵",
-       "linksearch-text": "可以用類似「*.wikipedia.org」嘅萬用字元。\n需要至少一個頂級域名,好似「*.org」。<br />\n支援嘅{{PLURAL:$2|協議}}:<code>$1</code> (預設用 http:// 如果唔指定協議)",
+       "linksearch-text": "可以用類似「*.wikipedia.org」嘅萬用字元。\n需要至少一個頂級域名,好似「*.org」。<br />\n支援嘅{{PLURAL:$2|協議}}:$1 (預設用 http:// 如果唔指定協議)",
        "linksearch-line": "$1 連自 $2",
        "linksearch-error": "萬用字元只可以響主機名嘅開頭度用。",
        "listusersfrom": "顯示由呢個字開始嘅用戶:",
        "trackingcategories": "追蹤類",
        "trackingcategories-msg": "追蹤類",
        "trackingcategories-name": "訊息名",
+       "post-expand-template-inclusion-category-desc": "由於呢篇頁面嘥士喺擴展之前,已經超出咗<code>$wgMaxArticleSize</code>限制,所以好多模都擴展唔到。",
        "trackingcategories-nodesc": "冇解說資料",
        "trackingcategories-disabled": "類停用咗",
        "mailnologin": "冇傳送地址",
        "emailuser": "發電郵畀呢位用戶",
        "emailuser-title-target": "電郵畀呢個{{GENDER:$1|用戶}}",
        "emailuser-title-notarget": "發電郵畀用戶",
-       "emailpage": "發電郵畀用戶",
        "emailpagetext": "你可以用下面嘅表去寄一封電郵畀呢位{{GENDER:$1|用戶}}。\n你喺[[Special:Preferences|你嘅用戶喜好設定]]入面填寫嘅電郵地址會出現喺呢封電郵「由」嘅地址度,方便收件人可以直接回覆你。",
        "defemailsubject": "由用戶「$1」送嘅 {{SITENAME}} 電郵",
        "usermaildisabled": "用戶電郵已停用",
        "emailccsubject": "你畀$1: $2封信嘅副本",
        "emailsent": "電郵已傳送",
        "emailsenttext": "你嘅電郵信息已傳送。",
-       "emailuserfooter": "呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「{{int:emailpage}}」功能發出嘅。",
+       "emailuserfooter": "呢封電郵係由$1寄畀$2經{{SITENAME}}嘅「{{int:emailuser}}」功能發出嘅。",
        "usermessage-summary": "留低系統訊息。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視名單",
        "watchlistanontext": "請先簽到去睇或者改響你監視清單度嘅項目。",
        "watchnologin": "未登入",
        "addwatch": "加到監視清單",
-       "addedwatchtext": "頁面「[[:$1]]」已加入到你嘅[[Special:Watchlist|監視清單]]度。\n呢個頁面以及佢個討論頁以後嘅修改都會列喺嗰度。",
+       "addedwatchtext": "「[[:$1]]」同佢個討論頁已加入到你嘅[[Special:Watchlist|監視清單]]度。",
        "addedwatchtext-short": "「$1」呢一版已經加咗入監視清單。",
        "removewatch": "響監視清單度拎走",
-       "removedwatchtext": "頁面「[[:$1]]」已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
+       "removedwatchtext": "「[[:$1]]」同佢個討論頁已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
        "removedwatchtext-short": "「$1」呢一版已經由監視清單度拎走咗。",
        "watch": "監視",
        "watchthispage": "監視呢頁",
        "delete-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除呢類版嘅動作已經限制咗,以防止響{{SITENAME}}嘅意外擾亂。",
        "delete-warning-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除佢可能會擾亂{{SITENAME}}嘅資料庫操作;響繼續嗰陣請小心。",
        "deleteprotected": "你唔可以刪呢版,因為佢畀人保護咗。",
+       "deleting-backlinks-warning": "'''警告:'''你所鏈到或轉到嘅[[Special:WhatLinksHere/{{FULLPAGENAME}}|其它頁面]]已經俾人話刪。",
        "rollback": "反轉修改",
        "rollbacklink": "反轉",
        "rollbacklinkcount": "反轉 $1 次修改",
+       "rollbacklinkcount-morethan": "反轉超過$1次嘅{{PLURAL:$1|edit|修改}}",
        "rollbackfailed": "反轉唔到",
        "cantrollback": "反轉唔到;上一位貢獻者係唯一修改過呢版嘅人。",
        "alreadyrolled": "無法反轉[[User:$2|$2]]([[User talk:$2|留言]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])對[[:$1]]嘅最後編輯;有人已經修改過或者反轉咗呢個頁面。\n\n上次對呢版嘅編輯係由[[User:$3|$3]]([[User talk:$3|留言]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])做嘅。",
        "rollback-success": "已經反轉由$1所寫嘅編輯;恢復到$2嘅最後修訂。",
        "sessionfailure-title": "會話失敗",
        "sessionfailure": "你嘅登入會話 (session) 好似有啲問題;\n為咗防止會話劫持,呢個操作已經取消。\n請返去之前嗰版,重新載入嗰版然後再試。",
+       "changecontentmodel": "喺頁面內改目錄類",
+       "changecontentmodel-legend": "改目錄類",
+       "changecontentmodel-title-label": "版題",
+       "changecontentmodel-model-label": "開新嘅目錄類",
+       "changecontentmodel-reason-label": "原因:",
+       "changecontentmodel-success-title": "目錄類已經改咗",
+       "changecontentmodel-success-text": "[[:$1]]目錄類已經改變咗",
+       "changecontentmodel-cannot-convert": "唔可以喺[[:$1]]嘅目錄轉成$2嘅類。",
+       "logentry-contentmodel-change-revertlink": "反轉",
+       "logentry-contentmodel-change-revert": "反轉",
        "protectlogpage": "保護日誌",
        "protectlogtext": "下面係一個保護同埋解除保護頁面改動嘅一覽表。\n睇吓[[Special:ProtectedPages|保護頁面一覽]]去搵而家鎖咗嘅頁。",
        "protectedarticle": "已經保護 \"[[$1]]\"",
        "prot_1movedto2": "[[$1]]搬到去[[$2]]",
        "protect-badnamespace-title": "保護唔到嘅空間名",
        "protect-badnamespace-text": "呢個空間名嘅版面保護唔到。",
+       "protect-norestrictiontypes-text": "呢頁因冇乜限制類響度而唔可以保護。",
        "protect-norestrictiontypes-title": "保護唔到嘅頁",
        "protect-legend": "確認保護",
        "protectcomment": "原因:",
        "undeletepagetext": "以下嘅$1個頁面已經刪除,但係重喺檔庫度可以恢復。檔案庫可能會定時清理。",
        "undelete-fieldset-title": "恢復修訂",
        "undeleteextrahelp": "要恢復成個頁面,唔好剔任何嘅核選盒,再撳<strong><em>{{int:undeletebtn}}</em></strong>。\n要恢復已經選擇咗嘅修訂,將要恢復代表有關修訂嘅核選盒剔上,再撳<strong><em>{{int:undeletebtn}}</em></strong>。",
-       "undeleterevisions": "$1å\80\8bä¿®è¨\82é\83½å·²ç¶\93å­\98æª\94",
+       "undeleterevisions": "$1å\80\8bä¿®è¨\82é\83½å·²ç¶\93å\88ªå\92\97",
        "undeletehistory": "如果你恢復呢個頁面,佢嘅所有修改歷史都會恢復返到嗰篇頁面嘅歷史度。如果喺佢刪除之後又新開咗同名嘅頁面,你恢復嘅修改歷史會顯示喺先前歷史度。",
        "undeleterevdel": "如果響最新修訂度部份刪除,噉就反刪除唔到。如果遇到呢種情況,你一定要反選或者反隱藏最新刪除咗嘅修訂。",
        "undeletehistorynoadmin": "呢版刪咗。原因喺下面有講,連同重有刪除之前編輯過呢頁嘅用戶嘅詳細資料。所刪除嘅版本嘅實際內容得管理員可以睇到。",
        "databasenotlocked": "資料庫而家冇鎖到。",
        "move-page": "搬$1",
        "move-page-legend": "搬頁",
-       "movepagetext": "用下面個表改版名,搬埋佢嘅歷史。\n舊標題會變做跳轉。\n你可以自動噉更新指到原先標題嘅跳轉。\n如果你揀咗唔去做嘅話,請務必要檢查吓有冇[[Special:DoubleRedirects|雙重跳轉]]或者[[Special:BrokenRedirects|死跳轉]](嘅情況發生)。\n你有責任確保啲連結依然指去佢哋應該指去嘅地方。\n\n注意如果已經有一個同個新名同名嘅頁,噉呢個頁係搬'''唔到'''嘅,除非嗰個同名嘅頁係空嘅或者佢係一個跳轉頁,兼且要之前冇編輯過(冇編輯歷史)先得。噉即係講萬一你搞錯咗,你可以將呢個頁改返去佢改之前噉,你唔可以覆蓋一個現有嘅頁。\n\n'''警告!'''\n噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改;請你喺行動之前確認你清楚噉做嘅後果。",
+       "movepagetext": "用下面個表改版名,搬埋佢嘅歷史。\n舊標題會變做跳轉。\n你可以自動噉更新指到原先標題嘅跳轉。\n如果你揀咗唔去做嘅話,請務必要檢查吓有冇[[Special:DoubleRedirects|雙重跳轉]]或者[[Special:BrokenRedirects|死跳轉]](嘅情況發生)。\n你有責任確保啲連結依然指去佢哋應該指去嘅地方。\n\n注意如果已經有一個同個新名同名嘅頁,噉呢個頁係搬'''唔到'''嘅,除非嗰個同名嘅頁係空嘅或者佢係一個跳轉頁,兼且要之前冇編輯過(冇編輯歷史)先得。噉即係講萬一你搞錯咗,你可以將呢個頁改返去佢改之前噉,你唔可以覆蓋一個現有嘅頁。\n\n<strong>警告!</strong>\n噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改;請你喺行動之前確認你清楚噉做嘅後果。",
        "movepagetext-noredirectfixer": "用下面個表改版名,搬埋佢嘅歷史。\n舊標題會變做跳轉。\n請肯定檢查清楚[[Special:DoubleRedirects|雙重]]或者[[Special:BrokenRedirects|死跳轉]]。\n你有責任確保啲連結依然指去佢哋應該指去嘅地方。\n\n注意如果已經有一個同個新名同名嘅頁,噉呢個頁係搬'''唔到'''嘅,除非嗰個同名嘅頁係空嘅或者佢係一個跳轉頁,兼且要之前冇編輯過(冇編輯歷史)先得。噉即係講萬一你搞錯咗,你可以將呢個頁改返去佢改之前噉,你唔可以覆蓋一個現有嘅頁。\n\n'''警告!'''\n噉樣對於一個好多人經過嘅頁面嚟講可能係一個好大嘅同埋出人意表嘅修改;請你喺行動之前確認你清楚噉做嘅後果。",
        "movepagetalktext": "相應嘅討論頁會連同佢一齊自動搬過去,'''除非''':\n*新嘅頁面名下面已經有咗一個非空嘅討論頁,又或者\n*你唔剔下面個框。\n\n喺呢啲情況下,需要嘅話你唯有手動搬同合併個頁。",
        "movearticle": "搬頁:",
        "import-interwiki-history": "複製呢一頁所有嘅歷史修訂",
        "import-interwiki-templates": "包含全部嘅模",
        "import-interwiki-submit": "倒入",
+       "import-mapping-default": "輸入默認位置",
        "import-upload-filename": "檔名:",
        "import-comment": "註解:",
        "importtext": "請由原 wiki 嘅[[Special:Export|匯出工具]]匯出成檔案。\n儲存喺你部電腦度,然後再上載到呢度。",
        "pageinfo-protect-cascading-yes": "係",
        "pageinfo-protect-cascading-from": "保護引申來源",
        "pageinfo-category-info": "類資料",
+       "pageinfo-category-total": "成員總數",
        "pageinfo-category-pages": "頁數",
        "pageinfo-category-subcats": "子類數",
        "pageinfo-category-files": "檔案數",
        "friday-at": "$1 禮拜五",
        "saturday-at": "$1 禮拜六",
        "sunday-at": "$1 禮拜日",
+       "yesterday-at": "尋日喺$1",
        "bad_image_list": "請根據下面嘅格式去寫:\n\n只有列示項目(以 * 開頭嘅項目)會考慮。第一個連結一定要連去幅壞檔度。\n之後響同一行嘅連結會考慮做例外,即係個檔可以響邊版度同時顯示。",
        "variantname-zh-hans": "簡體",
        "variantname-zh-hant": "繁體",
        "exif-gpsareainformation": "GPS 地區名",
        "exif-gpsdatestamp": "GPS 日期",
        "exif-gpsdifferential": "GPS 差動修正",
+       "exif-jpegfilecomment": "JPEG文件註",
+       "exif-keywords": "關鍵字",
+       "exif-countrydest": "顯示國家",
+       "exif-countrycodedest": "顯示國家地區碼",
+       "exif-provinceorstatedest": "顯示省份或州份或領域地區",
+       "exif-citydest": "顯示城市",
        "exif-objectname": "短標題",
+       "exif-specialinstructions": "特殊介紹",
        "exif-headline": "標題",
        "exif-source": "來源",
+       "exif-contact": "聯繫信息",
        "exif-languagecode": "語言",
        "exif-iimcategory": "類",
        "exif-label": "標籤",
        "exif-copyrighted": "版權狀態",
        "exif-copyrightowner": "版權人",
+       "exif-pngfilecomment": "PNG文件註",
        "exif-disclaimer": "免責聲明",
+       "exif-giffilecomment": "GIF文件註",
+       "exif-intellectualgenre": "項類",
+       "exif-subjectnewscode": "項碼",
        "exif-compression-1": "未壓過",
        "exif-unknowndate": "未知日期",
        "exif-orientation-1": "正常",
        "exif-dc-date": "日子",
        "exif-dc-publisher": "發佈者",
        "exif-dc-rights": "權",
+       "exif-rating-rejected": "拒絕咗",
+       "exif-isospeedratings-overflow": "超出咗65535嘅限制",
+       "exif-iimcategory-pol": "政治",
+       "exif-iimcategory-spo": "體育",
+       "exif-iimcategory-war": "戰爭,衝突同動蕩",
+       "exif-iimcategory-wea": "天氣",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認電郵地址",
        "autosumm-replace": "用「$1」取代內容",
        "autoredircomment": "跳緊轉呢版到[[$1]]",
        "autosumm-new": "開咗新版「$1」",
+       "autosumm-newblank": "開空頁",
        "lag-warn-normal": "新過$1秒嘅更改可能唔會響呢個表度顯示。",
        "lag-warn-high": "由於資料庫嘅過度延遲,新過$1秒嘅更改可能唔會響呢個表度顯示。",
        "watchlistedit-normal-title": "編輯監視清單",
        "watchlistedit-raw-done": "你嘅監視清單已經更新。",
        "watchlistedit-raw-added": "已經加入咗$1個標題:",
        "watchlistedit-raw-removed": "已經拎走咗$1個標題:",
+       "watchlistedit-clear-title": "已經清空咗監視一覽",
+       "watchlistedit-clear-legend": "清空監視一覽",
        "watchlistedit-clear-titles": "標題:",
+       "watchlisttools-clear": "清空監視一覽",
        "watchlisttools-view": "睇吓有關嘅更改",
        "watchlisttools-edit": "睇吓同埋編輯監視清單",
        "watchlisttools-raw": "編輯原始監視清單",
        "version-software": "裝咗嘅軟件",
        "version-software-product": "產品",
        "version-software-version": "版本",
+       "version-entrypoints-header-entrypoint": "輸入位",
        "version-entrypoints-header-url": "網址",
        "version-libraries-version": "版本",
+       "version-libraries-license": "牌照",
+       "version-libraries-description": "敘述",
+       "version-libraries-authors": "作者",
        "redirect-submit": "去",
        "redirect-value": "值:",
        "redirect-user": "用戶ID",
        "tags-active-no": "唔係",
        "tags-edit": "編輯",
        "tags-delete": "刪除",
+       "tags-activate": "激活",
        "tags-hitcount": "$1次更改",
        "tags-create-reason": "原因:",
        "tags-create-submit": "開",
        "tags-delete-reason": "原因:",
+       "tags-activate-title": "啟用標籤",
        "tags-activate-reason": "原因:",
+       "tags-activate-submit": "啟用",
+       "tags-deactivate-title": "停用標籤",
        "tags-deactivate-reason": "原因:",
+       "tags-deactivate-submit": "停用",
+       "tags-edit-existing-tags-none": "''冇''",
+       "tags-edit-reason": "原因:",
        "comparepages": "比較版",
        "compare-page1": "第1版",
        "compare-page2": "第2版",
        "feedback-cancel": "取消",
        "feedback-close": "搞掂",
        "feedback-error-title": "出錯",
+       "feedback-message": "信息:",
+       "feedback-subject": "主旨:",
        "feedback-submit": "遞交",
        "feedback-thanks-title": "多謝!",
        "searchsuggest-search": "搵嘢",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (可以用)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (唔可以用)",
        "mediastatistics": "媒體統計",
+       "mediastatistics-table-mimetype": "MIME類型",
+       "mediastatistics-table-extensions": "可能嘅格式",
+       "mediastatistics-table-count": "檔案數",
+       "mediastatistics-table-totalbytes": "結合嘥士",
        "mediastatistics-header-unknown": "唔知",
        "mediastatistics-header-bitmap": "點陣圖",
        "mediastatistics-header-drawing": "向量圖",
        "mediastatistics-header-text": "文字",
        "mediastatistics-header-executable": "執行檔",
        "mediastatistics-header-archive": "壓縮格式",
+       "json-error-depth": "超出咗最大嘅堆棧數",
+       "json-error-ctrl-char": "字符引導失敗,因為控制字符出錯。",
        "json-error-syntax": "語法錯咗",
+       "json-error-utf8": "字符引導失敗,因為有非法UTF-8代碼。",
        "headline-anchor-title": "連結到呢一節",
        "special-characters-group-latin": "拉丁文",
        "special-characters-group-latinextended": "Latin擴展左",
        "special-characters-group-khmer": "高棉文",
        "special-characters-title-endash": "短破折號",
        "special-characters-title-emdash": "長破折號",
-       "special-characters-title-minus": "減號"
+       "special-characters-title-minus": "減號",
+       "mw-widgets-titleinput-description-new-page": "冇呢頁",
+       "mw-widgets-titleinput-description-redirect": "跳轉到$1"
 }
index b57a586..7113f38 100644 (file)
@@ -85,7 +85,8 @@
                        "LNDDYL",
                        "Jiang123aa",
                        "Cdz",
-                       "凡人丶"
+                       "凡人丶",
+                       "Nbdd0121"
                ]
        },
        "tog-underline": "链接下划线:",
        "tog-newpageshidepatrolled": "隐藏新页面列表中的已巡查页面",
        "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅是最近的更改",
        "tog-usenewrc": "按页面合并最近更改和监视列表中的更改",
-       "tog-numberheadings": "自动编号标题",
+       "tog-numberheadings": "自动将标题编号",
        "tog-showtoolbar": "显示编辑工具栏",
        "tog-editondblclick": "双击编辑页面",
-       "tog-editsectiononrightclick": "å\8f³å\87»æ®µè\90½æ \87é¢\98å\90¯ç\94¨编辑段落",
+       "tog-editsectiononrightclick": "å\90¯ç\94¨å\8f³å\87»æ®µè\90½æ \87é¢\98编辑段落",
        "tog-watchcreations": "添加我创建的页面和我上传的文件至我的监视列表",
        "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表",
        "tog-watchmoves": "添加我移动的页面和文件至我的监视列表",
        "actionthrottled": "操作被限制",
        "actionthrottledtext": "作为反破坏措施,您被限制在短时间段内执行太多次该操作,并且您已超越此限制。请在数分钟后再试。",
        "protectedpagetext": "该页面已被保护以防止编辑和其他操作。",
-       "viewsourcetext": "您可以查看并复制此页面的源代码:",
-       "viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
+       "viewsourcetext": "您可以查看与复制此页面的源代码。",
+       "viewyourtext": "您可以查看与复制<strong>您对此页面作出编辑后</strong>的源代码。",
        "protectedinterface": "该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
        "editinginterface": "<strong>警告:</strong>您正在编辑用于提供软件的界面文字的页面。改变此页将影响其他在此wiki上其他用户的用户界面外观。",
        "translateinterface": "要加入或更改所有wiki的翻译,请访问MediaWiki本地化项目网站[//translatewiki.net/ translatewiki.net]。",
-       "cascadeprotected": "本页面已经受到保护,不能编辑,因为它包含于以下被“连锁保护”的{{PLURAL:$1|页面}}:\n$2",
+       "cascadeprotected": "本页面已经受到保护,不能编辑,因为它被嵌入于以下被“连锁保护”的{{PLURAL:$1|页面}}:\n$2",
        "namespaceprotected": "您没有权限编辑'''$1'''名字空间内的页面。",
        "customcssprotected": "您没有权限编辑此CSS页面,因为它包含另一位用户的个人设置。",
        "customjsprotected": "您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。",
        "createacct-benefit-body2": "{{PLURAL:$1|页面}}",
        "createacct-benefit-body3": "最近{{PLURAL:$1|贡献者}}",
        "badretype": "您所输入的密码并不相同。",
+       "usernameinprogress": "此用户名的账户创建已在进行中。请等待。",
        "userexists": "用户名已存在。请使用其他名称。",
        "loginerror": "登录错误",
        "createacct-error": "账户创建出错",
        "showdiff": "显示更改",
        "blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
        "anoneditwarning": "<strong>警告:</strong>您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 创建]</strong>一个账户,您的编辑将归属于您的用户名,且将享受其他好处。",
-       "anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
+       "anonpreviewwarning": "<em>您没有登录。保存将您的IP地址记录至此页面的编辑历史中。</em>",
        "missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
        "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。\n您可能指定了错误的重定向目标,或者您正在编辑错误的页面。\n如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。",
        "missingcommenttext": "请在下面输入评论。",
        "loginreqlink": "登录",
        "loginreqpagetext": "您必须$1才能查看其它页面。",
        "accmailtitle": "密码已寄出",
-       "accmailtext": "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在''[[Special:ChangePassword|更改密码]]''页面中修改。",
+       "accmailtext": "为[[User talk:$1|$1]]随机生成的密码已送至$2。登录后可以在<em>[[Special:ChangePassword|更改密码]]</em>页面中修改。",
        "newarticle": "(新页面)",
-       "newarticletext": "你点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果你是错误地到达这里,请点击您的浏览器的<strong>返回</strong>按钮。",
+       "newarticletext": "您点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果您是错误地进入了此页面,请点击您的浏览器的<strong>返回</strong>按钮。",
        "anontalkpagetext": "---- ''这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他或她联络。该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:UserLogin/signup|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。''",
        "noarticletext": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 编辑本页面]。</span>",
        "noarticletext-nopermission": "本页面目前没有内容。你可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但你没有权限创建本页面。",
        "readonlywarning": "<strong>警告:数据库被锁定以进行维护,所以您目前将无法保存您的编辑。</strong>您可能希望将您的文本复制粘贴到一个文本文档并保存它,以便稍后更改。\n\n锁定数据库的管理员有如下解释:$1",
        "protectedpagewarning": "'''警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。'''下面提供最后的日志条目以供参考:",
        "semiprotectedpagewarning": "'''注意:'''本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
-       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它包含于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它被嵌入于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
        "titleprotectedwarning": "'''警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。'''下面提供最后的日志条目以供参考:",
        "templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
        "search-category": "(分类$1)",
        "search-file-match": "(匹配文件内容)",
        "search-suggest": "您是不是要找:$1",
+       "search-rewritten": "显示用于$1的结果。而不是寻找$2。",
        "search-interwiki-caption": "姊妹项目",
        "search-interwiki-default": "来自$1的结果:",
        "search-interwiki-more": "(更多)",
        "rows": "行数:",
        "columns": "列数:",
        "searchresultshead": "搜索",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">短链接</a>格式阈值(字节):",
+       "stub-threshold": "短链接格式阈值($1):",
+       "stub-threshold-sample-link": "样例",
        "stub-threshold-disabled": "停用",
        "recentchangesdays": "最近更改中显示的天数:",
        "recentchangesdays-max": "最多$1天",
        "newpageletter": "新",
        "boteditletter": "机",
        "number_of_watching_users_pageview": "[$1个关注用户]",
-       "rc_categories": "分类限制(用“|”分隔)",
-       "rc_categories_any": "任",
+       "rc_categories": "分类限制(用“|”分隔)",
+       "rc_categories_any": "任何选择的",
        "rc-change-size-new": "更改后有$1字节",
        "newsectionsummary": "/* $1 */ 新段落",
        "rc-enhanced-expand": "显示细节",
        "upload-too-many-redirects": "在网址中有太多重新定向",
        "upload-http-error": "发生HTTP错误:$1",
        "upload-copy-upload-invalid-domain": "不能从该域名上载文件副本。",
+       "upload-dialog-title": "上传文件",
+       "upload-dialog-error": "发生错误",
+       "upload-dialog-warning": "发生一条警告",
+       "upload-dialog-button-cancel": "取消",
+       "upload-dialog-button-done": "完成",
+       "upload-dialog-button-save": "保存",
+       "upload-dialog-button-upload": "上传",
+       "upload-dialog-label-select-file": "选择文件",
+       "upload-dialog-label-infoform-title": "详细信息",
+       "upload-dialog-label-infoform-name": "名称",
+       "upload-dialog-label-infoform-description": "说明",
+       "upload-dialog-label-usage-title": "用法",
+       "upload-dialog-label-usage-filename": "文件名",
        "backend-fail-stream": "无法流传送文件$1。",
        "backend-fail-backup": "无法备份文件$1。",
        "backend-fail-notexists": "条目$1不存在。",
        "filerevert-comment": "原因:",
        "filerevert-defaultcomment": "恢复至$1 $2的版本",
        "filerevert-submit": "恢复",
-       "filerevert-success": "'''[[Media:$1|$1]]'''已经恢复至[$4 $2 $3的版本]。",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong>已经恢复至[$4 $2 $3的版本]。",
        "filerevert-badversion": "文件并无所请求时间戳下的早期本地版本。",
        "filedelete": "删除$1",
        "filedelete-legend": "删除文件",
        "booksources-text": "下面是销售新书和二手书的其他网站的链接的列表,也可能有关于你正在寻找的图书的更多信息:",
        "booksources-invalid-isbn": "提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。",
        "specialloguserlabel": "执行者:",
-       "speciallogtitlelabel": "目标(标题或用户):",
+       "speciallogtitlelabel": "目标(标题,或对于用户使用{{ns:user}}:用户名):",
        "log": "日志",
        "all-logs-page": "所有公开日志",
        "alllogstext": "所有{{SITENAME}}公开日志的联合展示。您可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。",
        "linksearch-pat": "搜索网址:",
        "linksearch-ns": "名字空间:",
        "linksearch-ok": "搜索",
-       "linksearch-text": "可以使用类似“*.wikipedia.org”的通配符。必须至少是顶级域名,例如“*.org”。<br />\n支持的{{PLURAL:$2|协议}}:<code>$1</code>(如果没有设置协议则默认为<nowiki>http://</nowiki>)。",
+       "linksearch-text": "可以使用类似“*.wikipedia.org”的通配符。必须至少是顶级域名,例如“*.org”。<br />\n支持的{{PLURAL:$2|协议}}:$1(如果没有设置协议则默认为http://)。",
        "linksearch-line": "$1 链自 $2",
        "linksearch-error": "通配符仅可在主机名称的开头使用。",
        "listusersfrom": "显示用户开始于:",
        "emailuser": "电邮联系",
        "emailuser-title-target": "电邮联系该{{GENDER:$1|用户}}",
        "emailuser-title-notarget": "电邮联系",
-       "emailpage": "电邮联系",
        "emailpagetext": "你可以使用下面的表格发送电子邮件信息至该{{GENDER:$1|用户}}。你在[[Special:Preferences|系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。",
        "defemailsubject": "来自{{SITENAME}}用户“$1”的电子邮件",
        "usermaildisabled": "用户电子邮件停用",
        "emailccsubject": "您发送给$1的消息的副本:$2",
        "emailsent": "电子邮件已发送",
        "emailsenttext": "您的电子邮件已经发出。",
-       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailpage}}”功能被$1发送至$2的。",
+       "emailuserfooter": "本电子邮件是通过{{SITENAME}}的“{{int:emailuser}}”功能被$1发送至$2的。",
        "usermessage-summary": "留下系统消息。",
        "usermessage-editor": "系统信息编辑器",
        "watchlist": "监视列表",
        "watchlistanontext": "请登录以查看或编辑您的监视列表。",
        "watchnologin": "未登录",
        "addwatch": "添加至监视列表",
-       "addedwatchtext": "已将页面“[[:$1]]”加入您的[[Special:Watchlist|监视列表]]。此后本页面及其讨论页的若有更改将在监视列表中显示。",
+       "addedwatchtext": "“[[:$1]]”及其讨论页已加入至您的[[Special:Watchlist|监视列表]]中。",
        "addedwatchtext-short": "页面“$1”已加入您的监视列表。",
        "removewatch": "从监视列表中删除",
-       "removedwatchtext": "页面“[[:$1]]”已从[[Special:Watchlist|你的监视列表]]中删除。",
+       "removedwatchtext": "“[[:$1]]”及其讨论页已从您的[[Special:Watchlist|监视列表]]中移除。",
        "removedwatchtext-short": "页面“$1”已从您的监视列表移除。",
        "watch": "监视",
        "watchthispage": "监视本页",
        "exbeforeblank": "被清空前的内容为:“$1”",
        "delete-confirm": "删除“$1”",
        "delete-legend": "删除",
-       "historywarning": "<strong>警告</strong>:您将要删除的页面有约$1次修订的历史:",
+       "historywarning": "<strong>警告:</strong>您将要删除的页面有约$1次{{PLURAL:$1|修订}}的历史:",
        "confirmdeletetext": "您即将删除一个页面或图像以及其历史。\n请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失败",
        "changecontentmodel-success-title": "内容模型已更改",
        "changecontentmodel-success-text": "[[:$1]]的内容类型被更改。",
        "changecontentmodel-cannot-convert": "[[:$1]]上的内容不能转换为$2的一个类型。",
-       "changecontentmodel-title-cantexist": "在$1尚不能有一个页面。",
        "changecontentmodel-nodirectediting": "$1内容模型不支持直接编辑",
        "log-name-contentmodel": "内容模型更改日志",
        "log-description-contentmodel": "与一个页面的内容模型相关的活动",
        "protect-locked-blocked": "您不能在被封禁时更改保护级别。以下是页面'''$1'''的当前设置:",
        "protect-locked-dblock": "您不能在数据库锁定时更改保护级别。以下是页面'''$1'''的当前设置:",
        "protect-locked-access": "您的帐户没有足够的权限去更改保护级别。以下是页面'''$1'''的当前设置:",
-       "protect-cascadeon": "该页面目前受到保护,因为它被嵌入了以下启用级联保护的{{PLURAL:$1|页面}}。更改该页面的保护级别不会影响级联保护。",
+       "protect-cascadeon": "此页面目前受到保护,因为它被嵌入了以下启用连锁保护的{{PLURAL:$1|页面}}。更改该页面的保护级别不会影响连锁保护。",
        "protect-default": "允许所有用户",
        "protect-fallback": "仅允许拥有“$1”权限的用户",
        "protect-level-autoconfirmed": "仅允许自动确认用户",
        "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
        "undelete-fieldset-title": "还原版本",
        "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击'''''{{int:undeletebtn}}'''''。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击'''''{{int:undeletebtn}}'''''。",
-       "undeleterevisions": "$1版本存档",
+       "undeleterevisions": "$1个{{PLURAL:$1|修订版本}}已删除",
        "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到版本历史中。如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
        "undeleterevdel": "如果把最新版本部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的版本。",
        "undeletehistorynoadmin": "这个页面已被删除。删除原因显示在下方编辑摘要中,被删除前的所有版本文本连同删除前贡献用户的细节信息只对管理员可见。",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 于$2 $3执行)",
        "move-page": "移动$1",
        "move-page-legend": "移动页面",
-       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其版本历史移动到新页面。同时老的条目将会被重定向到新条目。您可以自动地将重定向更新到原条目。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:即使新条目已经有对应页面,此页面也'''不会'''被移动,除非新页面无任何编辑历史或是重定向页。这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。\n\n'''警告!'''对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
+       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其版本历史移动到新页面。同时老的条目将会被重定向到新条目。您可以自动地将重定向更新到原条目。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:即使新条目已经有对应页面,此页面也<strong>不会</strong>被移动,除非新页面无任何编辑历史或是重定向页。这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。\n\n<strong>警告!</strong>对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
        "movepagetext-noredirectfixer": "用下面的表单来重命名一个页面,并将其版本历史同时移动到新页面。\n老的页面将成为新页面的重定向页。\n请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。\n您应当负责确定所有链接依然会链到指定的页面。\n\n注意如果新页面已经有内容的话,页面将'''不会'''被移动,\n除非新页面无内容或是重定向页,而且没有版本历史。\n这意味着您再必要时可以在移动到新页面后再移回老的页面,\n同时您也无法覆盖现有页面。\n\n'''警告!'''\n对一个经常被访问的页面而言这可能是一个重大与唐突的更改;\n请在行动前先确定您了解其所可能带来的后果。",
        "movepagetalktext": "有关的讨论页将被自动与该页面一起移动,'''除非''':\n*新页面已经有一个包含内容的讨论页,或者\n*您不勾选下面的复选框。\n\n在这些情况下,您在必要时必须手工移动或合并页面。",
        "movearticle": "移动页面:",
        "javascripttest-pagetext-frameworks": "请选择以下的框架之一:$1",
        "javascripttest-pagetext-skins": "选择外观来运行测试:",
        "javascripttest-qunit-intro": "请见mediawiki.org的[$1 测试说明文件]。",
-       "tooltip-pt-userpage": "你的用户页面",
+       "tooltip-pt-userpage": "您的用户页",
        "tooltip-pt-anonuserpage": "你用于编辑的IP地址的用户页面",
        "tooltip-pt-mytalk": "你的讨论页面",
        "tooltip-pt-anontalk": "有关本IP地址的编辑的讨论",
        "tooltip-t-recentchangeslinked": "链自本页的页面的最近更改",
        "tooltip-feed-rss": "本页面的RSS源",
        "tooltip-feed-atom": "本页面的Atom源",
-       "tooltip-t-contributions": "该用户的贡献的列表",
+       "tooltip-t-contributions": "由此用户做出的贡献列表",
        "tooltip-t-emailuser": "给该用户发送电子邮件",
        "tooltip-t-info": "关于此页面的更多信息",
        "tooltip-t-upload": "上传文件",
        "tooltip-ca-nstab-main": "查看内容页面",
        "tooltip-ca-nstab-user": "查看用户页面",
        "tooltip-ca-nstab-media": "查看媒体文件页面",
-       "tooltip-ca-nstab-special": "这是特殊页面,你无法编辑该页",
+       "tooltip-ca-nstab-special": "这是特殊页面,并且它不能被编辑",
        "tooltip-ca-nstab-project": "查看项目页面",
        "tooltip-ca-nstab-image": "查看文件页面",
        "tooltip-ca-nstab-mediawiki": "查看系统消息",
        "tooltip-ca-nstab-category": "查看分类页面",
        "tooltip-minoredit": "标记本编辑为小编辑",
        "tooltip-save": "保存你的更改",
-       "tooltip-preview": "预览您的更改,请在保存前使用此功能!",
+       "tooltip-preview": "预览您的更改。请在保存前使用此功能。",
        "tooltip-diff": "显示您对该文字所做的更改",
        "tooltip-compareselectedversions": "查看该页面两个选定的版本之间的差异。",
        "tooltip-watch": "添加本页面至你的监视列表",
        "pageinfo-robot-index": "允许",
        "pageinfo-robot-noindex": "不允许",
        "pageinfo-watchers": "页面监视者数",
-       "pageinfo-visiting-watchers": "正在访问最近编辑的页面浏览者数量",
+       "pageinfo-visiting-watchers": "访问最近编辑的页面浏览者数量",
        "pageinfo-few-watchers": "少于$1个监视者",
        "pageinfo-few-visiting-watchers": "这里可能有或可能没有观察用户正在访问最近编辑",
        "pageinfo-redirects-name": "至该页面的重定向数",
        "scarytranscludefailed": "[提取$1失败]",
        "scarytranscludefailed-httpstatus": "[模板$1读取失败:HTTP $2]",
        "scarytranscludetoolong": "[URL过长]",
-       "deletedwhileediting": "'''警告''':此页在您开始编辑之后已经被删除!",
+       "deletedwhileediting": "<strong>警告:</strong>此页在您开始编辑之后已经被删除!",
        "confirmrecreate": "在您开始编辑这个页面后,用户[[User:$1|$1]] ([[User talk:$1|讨论]])以下列原因删除了这个页面:\n: ''$2''\n请确认在您重新创建页面前三思。",
        "confirmrecreate-noreason": "用户 [[User:$1|$1]]([[User talk:$1|talk]]) 在您开始编辑之后删除此页面。请确认您确实要重新创建此页面。",
        "recreate": "重新创建",
        "lag-warn-normal": "过去$1秒内的更改未必会在这个列表中显示。",
        "lag-warn-high": "由于数据库的过度延迟,过去$1秒的更改未必会在这个列表中显示。",
        "watchlistedit-normal-title": "编辑监视列表",
-       "watchlistedit-normal-legend": "删除监视列表中的标题",
-       "watchlistedit-normal-explain": "你的监视列表中的标题显示在下方。要删除标题,请勾选它前面选择框并单击“{{int:Watchlistedit-normal-submit}}”。你也可以[[Special:EditWatchlist/raw|编辑原始列表]]。",
-       "watchlistedit-normal-submit": "除标题",
-       "watchlistedit-normal-done": "已从你的监视列表删除$1个标题:",
+       "watchlistedit-normal-legend": "从监视列表移除标题",
+       "watchlistedit-normal-explain": "您的监视列表中的标题显示在下方。要移除标题,请勾选它旁边的复选框,然后点击“{{int:Watchlistedit-normal-submit}}”。您也可以[[Special:EditWatchlist/raw|编辑原始列表]]。",
+       "watchlistedit-normal-submit": "除标题",
+       "watchlistedit-normal-done": "已从您的监视列表移除{{PLURAL:$1|$1个}}标题:",
        "watchlistedit-raw-title": "编辑原始监视列表",
        "watchlistedit-raw-legend": "编辑原始监视列表",
        "watchlistedit-raw-explain": "您的监视列表中的标题在下面显示,并可通过编辑此表以添加或移除标题;每行一个标题。当完成以后,点击“{{int:Watchlistedit-raw-submit}}”。您也可以[[Special:EditWatchlist|使用标准编辑器]]。",
        "watchlisttools-edit": "查看并编辑监视列表",
        "watchlisttools-raw": "编辑原始监视列表",
        "signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|讨论]])",
-       "duplicate-defaultsort": "'''警告:'''默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
+       "duplicate-defaultsort": "<strong>警告:</strong>默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
        "duplicate-displaytitle": "<strong>警告:</strong>显示的标题“$2”重写了此前显示的标题“$1”。",
        "invalid-indicator-name": "<strong>错误:</strong>页面状态指示器的<code>name</code>属性必须不为空。",
        "version": "版本",
        "htmlform-cloner-create": "添加更多",
        "htmlform-cloner-delete": "移除",
        "htmlform-cloner-required": "至少一个值是必需的。",
+       "htmlform-title-badnamespace": "[[:$1]]不在“{{ns:$2}}”名字空间中。",
+       "htmlform-title-not-creatable": "“$1”不是一个可创建的页面标题",
+       "htmlform-title-not-exists": "[[:$1]]不存在",
+       "htmlform-user-not-exists": "<strong>$1</strong>不存在。",
+       "htmlform-user-not-valid": "<strong>$1</strong>不是一个有效的用户名。",
        "sqlite-has-fts": "带全文搜索的版本$1",
        "sqlite-no-fts": "不带全文搜索的版本$1",
        "logentry-delete-delete": "$1{{GENDER:$2|删除}}页面$3",
        "logentry-newusers-create2": "用户账户$3被$1{{GENDER:$2|创建}}",
        "logentry-newusers-byemail": "$1创建用户$3,并且密码已通过电子邮件发送",
        "logentry-newusers-autocreate": "用户账户$1被自动{{GENDER:$2|创建}}",
+       "logentry-protect-move_prot": "$1将保护设置从$4{{GENDER:$2|移动}}到了$3",
        "logentry-rights-rights": "$1{{GENDER:$2|更改}}$3的用户组自$4至$5",
        "logentry-rights-rights-legacy": "$1更改$3的用户组",
        "logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5",
        "special-characters-title-endash": "短划线",
        "special-characters-title-emdash": "长划线",
        "special-characters-title-minus": "减号",
+       "mw-widgets-dateinput-no-date": "没有选定日期",
        "mw-widgets-titleinput-description-new-page": "页面不存在",
        "mw-widgets-titleinput-description-redirect": "重定向至$1"
 }
index 6e435e3..a56e266 100644 (file)
        "pool-servererror": "無法使用程序計數服務 ($1)。",
        "poolcounter-usage-error": "用法錯誤:$1",
        "aboutsite": "關於 {{SITENAME}}",
-       "aboutpage": "Project:About",
+       "aboutpage": "Project:關於",
        "copyright": "除非額外說明,否則本站內容均使用 $1 授權條款。",
        "copyrightpage": "{{ns:project}}:版權",
        "currentevents": "最新動態",
        "currentevents-url": "Project:Current events",
        "disclaimers": "免責聲明",
-       "disclaimerpage": "Project:General disclaimer",
+       "disclaimerpage": "Project:一般免責聲明",
        "edithelp": "編輯説明",
        "helppage-top-gethelp": "説明",
        "mainpage": "首頁",
        "actionthrottledtext": "您在短時間內執行此動作太多次,已超出系統上限,基於反濫用的考量,將限制您的動作。\n請稍後數分鐘後再試。",
        "protectedpagetext": "此頁面已設為保護防止編輯或其他操作。",
        "viewsourcetext": "您可以檢視並複製此頁面的原始碼。",
-       "viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼",
+       "viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼",
        "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
        "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來作為軟體介面使用。\n更改此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
        "translateinterface": "如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
        "createacct-benefit-body2": "$1 頁",
        "createacct-benefit-body3": " 位最近的{{PLURAL:$1|貢獻者}}",
        "badretype": "兩次輸入的密碼並不相同。",
+       "usernameinprogress": "已正在進行此使用者名稱的帳號建立作業。\n請稍候。",
        "userexists": "您所輸入的使用者名稱已存在,請另選一個名稱。",
        "loginerror": "登入錯誤",
        "createacct-error": "帳號建立錯誤",
        "noemailcreate": "您需要提供一個有效的電子郵件地址。",
        "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到郵件後再登入。",
        "blocked-mailpassword": "您的 IP 位址已被封鎖不允許編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
-       "eauthentsent": "已寄出一封確認信到您所設定的電子郵件址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
+       "eauthentsent": "已寄出一封確認信到您所設定的電子郵件址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
        "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
        "mailerror": "傳送電子郵件錯誤:$1",
        "acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
        "creating": "正在建立 $1",
        "editingsection": "正在編輯 $1 (章節)",
        "editingcomment": "正在編輯 $1 (新章節)",
-       "editconflict": "ç\94±æ\96¼ç·¨è¼¯è¡\9dçª\81ï¼\8cç\84¡æ³\95å\84²å­\98ç\9b®å\89\8dç\9a\84è®\8aæ\9b´ã\80\82{{GENDER:|æ\82¨}}æ\98¯å\90¦è¦\81æ\89\8bå\8b\95æ\8e\92é\99¤è¡\9dçª\81ï¼\9f",
+       "editconflict": "編輯è¡\9dçª\81ï¼\9a$1",
        "explainconflict": "在您開始編輯之後已有其他人儲存了此頁面。\n上方的文字框內顯示了目前頁面中的文字內容,\n您所變更的文字內容顯示在下方文字框中。\n您須要將您所變更的文字內容合併到已儲存的文字內容當中。\n若您直接點選 \"{{int:savearticle}}\" <strong>只有</strong> 上方文字框中的內容會被儲存。",
        "yourtext": "您的文字",
        "storedversion": "已儲存修訂",
        "readonlywarning": "<strong>警告:資料庫已被鎖定以進行維護,因此無法儲存您目前所做的編輯動作。</strong>\n您可先複製您的文字並貼上到文字檔案中儲存,稍後再儲存您編輯。\n\n鎖定資料庫的管理員有以下說明:$1",
        "protectedpagewarning": "<strong>警告:本頁已經被保護,只有擁有管理員權限的使用者才可編輯。</strong>\n以下提供最近的日誌以便參考:",
        "semiprotectedpagewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可編輯。\n以下提供最近的日誌以便參考:",
-       "cascadeprotectedwarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可編輯,此頁面被下列頁面引用因此連鎖保護:",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可編輯,此頁面被下列{{PLURAL:$1|頁面|頁面}}引用因此連鎖保護:",
        "titleprotectedwarning": "<strong>警告:本頁面已被保護,需要 [[Special:ListGroupRights|特殊權限]] 方可建立。</strong>\n以下提供最近的日誌以便參考:",
        "templatesused": "此頁面使用了以下{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|模板}}:",
        "undo-summary-username-hidden": "還原隱藏使用者的修訂 $1",
        "cantcreateaccounttitle": "無法建立帳號",
        "cantcreateaccount-text": "來自這個 IP 位址 (<strong>$1</strong>) 建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n $3 封鎖的原因是 <em>$2</em>",
-       "cantcreateaccount-range-text": "來自 IP 位址範圍 '''$1''',包含您的 IP 位 ('''$4''') 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n $3 封鎖的原因是 ''$2''",
+       "cantcreateaccount-range-text": "來自 IP 位址範圍 '''$1''',包含您的 IP 位 ('''$4''') 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n $3 封鎖的原因是 ''$2''",
        "viewpagelogs": "檢視此頁面的日誌",
        "nohistory": "此頁沒有任何的修訂記錄。",
        "currentrev": "最新修訂",
        "search-category": "(分類 $1)",
        "search-file-match": "(符合檔案內容)",
        "search-suggest": "您指的是不是:$1",
+       "search-rewritten": "顯示 $1 的搜尋結果,改搜尋 $2。",
        "search-interwiki-caption": "姐妹專案",
        "search-interwiki-default": "來自 $1 的結果:",
        "search-interwiki-more": "(更多)",
        "rows": "列數:",
        "columns": "欄數:",
        "searchresultshead": "搜尋",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
+       "stub-threshold": "短頁面連結格式門檻值 ($1):",
+       "stub-threshold-sample-link": "樣本",
        "stub-threshold-disabled": "已停用",
        "recentchangesdays": "近期變更顯示的天數:",
        "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "newpageletter": "新",
        "boteditletter": "機",
        "number_of_watching_users_pageview": "[$1 位正在監視的使用者]",
-       "rc_categories": "分類限制 (以 \"|\" 分隔)",
-       "rc_categories_any": "任",
+       "rc_categories": "分類限制 (以 \"|\" 分隔)",
+       "rc_categories_any": "任何選擇的",
        "rc-change-size-new": "變更後為 $1 位元組",
        "newsectionsummary": "/* $1 */ 新章節",
        "rc-enhanced-expand": "顯示詳細資訊",
        "upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
        "upload-http-error": "發生 HTTP 錯誤:$1",
        "upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
+       "upload-dialog-title": "上傳檔案",
+       "upload-dialog-error": "發生錯誤",
+       "upload-dialog-warning": "發生警告",
+       "upload-dialog-button-cancel": "取消",
+       "upload-dialog-button-done": "完成",
+       "upload-dialog-button-save": "儲存",
+       "upload-dialog-button-upload": "上傳",
+       "upload-dialog-label-select-file": "選擇檔案",
+       "upload-dialog-label-infoform-title": "詳細資訊",
+       "upload-dialog-label-infoform-name": "名稱",
+       "upload-dialog-label-infoform-description": "描述",
+       "upload-dialog-label-usage-title": "用法",
+       "upload-dialog-label-usage-filename": "檔案名稱",
        "backend-fail-stream": "無法傳輸檔案 \"$1\"。",
        "backend-fail-backup": "無法備份檔案 \"$1\"。",
        "backend-fail-notexists": "檔案 $1 不存在。",
        "randomincategory-nopages": "[[:Category:$1]] 中沒有任何頁面。",
        "randomincategory-category": "分類:",
        "randomincategory-legend": "隨機分類頁面",
-       "randomincategory-submit": "進入",
+       "randomincategory-submit": "前往",
        "randomredirect": "隨機重新導向",
        "randomredirect-nopages": "在命名空間 \"$1\" 中沒有任何重新導向頁面。",
        "statistics": "統計",
        "nopagetext": "您所指定的目標頁面並不存在。",
        "pager-newer-n": "較新 $1 筆",
        "pager-older-n": "較舊 $1 筆",
-       "suppress": "失職",
+       "suppress": "監督",
        "querypage-disabled": "此特殊頁面因考量效能問題已被停用。",
        "apihelp": "API 說明",
        "apihelp-no-such-module": "查無模組 \"$1\"。",
        "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:",
        "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。",
        "specialloguserlabel": "執行者:",
-       "speciallogtitlelabel": "目標 (標題或使用者):",
+       "speciallogtitlelabel": "ç\9b®æ¨\99 (æ¨\99é¡\8cæ\88\96以 {{ns:user}}:使ç\94¨è\80\85 è¡¨ç¤ºä½¿ç\94¨è\80\85)ï¼\9a",
        "log": "日誌",
        "all-logs-page": "所有公開日誌",
        "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱 (區分大小寫) 或影響的頁面 (區分大小寫)。",
        "linksearch-pat": "搜尋關鍵字:",
        "linksearch-ns": "命名空間:",
        "linksearch-ok": "搜尋",
-       "linksearch-text": "可使用萬用字元如 *.wikipedia.org。\n萬用字元必須使用在最上層網域,例如 *.org 。<br />\n支援的{{PLURAL:$2|通訊協定}}有:<code>$1</code>  (若未指定則預設使用 http:// 通訊協定) 。",
+       "linksearch-text": "可使用萬用字元如 *.wikipedia.org。\n萬用字元必須使用在最上層網域,例如 *.org 。<br />\n支援的{{PLURAL:$2|通訊協定}}有:$1  (若未指定則預設使用 http:// 通訊協定) 。",
        "linksearch-line": "$1 由 $2 所連結",
        "linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
        "listusersfrom": "顯示使用者開始自:",
        "emailuser": "Email 聯絡此使用者",
        "emailuser-title-target": "E-mail 聯絡此{{GENDER:$1|使用者}}",
        "emailuser-title-notarget": "E-mail 聯絡使用者",
-       "emailpage": "E-mail 聯絡使用者",
-       "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
+       "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件地址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
        "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
        "usermaildisabled": "使用者電子郵件已停用",
        "usermaildisabledtext": "您不能傳送電子郵件到本 Wiki 上的其他使用者",
        "emailccsubject": "您寄給 $1 的訊息副本:$2",
        "emailsent": "已寄出電子郵件",
        "emailsenttext": "已寄出您的電子郵件訊息。",
-       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"{{int:emailpage}}\" 功能寄給 $2。",
+       "emailuserfooter": "這封電子郵件是由 $1 透過 {{SITENAME}} 的 \"{{int:emailuser}}\" 功能寄給 $2。",
        "usermessage-summary": "留訊息至系統。",
        "usermessage-editor": "系統訊息",
        "watchlist": "監視清單",
        "watchlistanontext": "請先登入以檢視或修改在監視清單的項目。",
        "watchnologin": "尚未登入",
        "addwatch": "新增至監視清單",
-       "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\"。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
+       "addedwatchtext": "已於[[Special:Watchlist|您的監視清單]]新增頁面 \"[[:$1]]\" 及其討論頁面。\n未來對此頁面及其關聯的對話頁面的變更將會在此清單中列出。",
        "addedwatchtext-short": "已於您的監視清單新增頁面 \"$1\"。",
        "removewatch": "從監視清單中移除",
-       "removedwatchtext": "已於[[Special:Watchlist|您的監視清單]]移除頁面 \"[[:$1]]\"。",
+       "removedwatchtext": "已於[[Special:Watchlist|您的監視清單]]移除頁面 \"[[:$1]]\" 及其討論頁面。",
        "removedwatchtext-short": "已於您的監視清單移除頁面 \"$1\"。",
        "watch": "監視",
        "watchthispage": "監視此頁面",
        "changecontentmodel-success-title": "已變更內容模型",
        "changecontentmodel-success-text": "已變更 [[:$1]] 的內容類型。",
        "changecontentmodel-cannot-convert": "[[:$1]] 的內容無法轉換為 $2 類型。",
-       "changecontentmodel-title-cantexist": "無法於 $1 建立頁面。",
        "changecontentmodel-nodirectediting": "$1 的內容模型不支援直接編輯",
        "log-name-contentmodel": "內容模型變更日誌",
        "log-description-contentmodel": "與頁面內容模型相關的事件",
-       "logentry-contentmodel-change": "$1 已變頁面 $3 的內容模型自 \"$4\" 至 \"$5\"",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|已變更}}頁面 $3 的內容模型自 \"$4\" 至 \"$5\"",
        "logentry-contentmodel-change-revertlink": "還原",
        "logentry-contentmodel-change-revert": "還原",
        "protectlogpage": "保護日誌",
        "undeletepagetext": "下列 {{PLURAL:$1|1 個頁面已刪除|$1 個頁面已刪除}}但尚在封存,仍可還原。\n封存的檔案可能會定時清理。",
        "undelete-fieldset-title": "還原修訂",
        "undeleteextrahelp": "若要還原所有的頁面歷史,請取消勾選所有核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。\n若要還原指定的頁面歷史,請勾選要還原的修訂核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。",
-       "undeleterevisions": "å·²å°\81å­\98 $1 個修訂",
+       "undeleterevisions": "å·²å\88ªé\99¤ $1 個修訂",
        "undeletehistory": "若您還原該頁面,所有的修訂歷史也會一併還原。\n若刪除之後已有使用相同名稱建立的新頁面,還原的修訂歷史會出現在此頁面之前的歷史中。",
        "undeleterevdel": "若最新頁面或檔案修訂被部份刪除,將無法執行取消刪除的動作。\n這種情況您必須取選勾選或取消隱藏已刪除的最新修訂。",
        "undeletehistorynoadmin": "已刪除此頁面。\n以下摘要顯示刪除原因與刪除前所有編輯過此頁面的使用者詳細資料。\n只有管理員可檢視實際被刪除的文字內容。",
        "delete_and_move_text": "== 需要刪除 ==\n目標頁面 \"[[:$1]]\" 已存在。\n您是否要刪除該頁面以完成移動?",
        "delete_and_move_confirm": "是的,刪除該頁面",
        "delete_and_move_reason": "已刪除讓來自 [[$1]] 頁面可移動",
-       "selfmove": "原始標題與目標標題相同,\n無法移動頁面至自己。",
+       "selfmove": "原始標題與目標標題相同,無法移動至自身頁面。",
        "immobile-source-namespace": "無法移動在命名空間 \"$1\" 中的頁面",
        "immobile-target-namespace": "無法移動頁面至命名空間 \"$1\"",
        "immobile-target-namespace-iw": "移動頁面不可使用 Interwiki 連結做為目標。",
        "pageinfo-robot-index": "允許",
        "pageinfo-robot-noindex": "不允許",
        "pageinfo-watchers": "頁面監視者數",
-       "pageinfo-visiting-watchers": "頁面監視者參觀最近編輯數",
+       "pageinfo-visiting-watchers": "最後一次編輯後參觀人數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
        "pageinfo-few-visiting-watchers": "參觀近期編輯的使用者可能為監視使用者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "confirmemail_success": "您的電子郵件已經被確認。您現在可以 [[Special:UserLogin|登入]] 並使用此網站了。",
        "confirmemail_loggedin": "已確認您的電子郵件地址。",
        "confirmemail_subject": "{{SITENAME}} 電子郵件地址確認",
-       "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+       "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1) 已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件地址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
-       "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+       "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_invalidated": "已取消電子郵件地址確認",
        "invalidateemail": "取消電子郵件確認",
        "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
        "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
-       "recreate": "此頁面在您編輯的這段期間已被刪除,請點選 \"$1\" 重新建立頁面。",
+       "recreate": "重新建立",
        "confirm_purge_button": "確定",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
        "confirm-purge-bottom": "清除頁面會清空頁面的快取記錄並強制顯示最近的頁面修訂。",
        "htmlform-cloner-create": "新增更多",
        "htmlform-cloner-delete": "移除",
        "htmlform-cloner-required": "至少必須填寫一筆資料。",
+       "htmlform-title-badnamespace": "[[:$1]] 不在 \"{{ns:$2}}\" 命名空間中。",
+       "htmlform-title-not-creatable": "\"$1\" 並非可用來建立頁面的標題",
+       "htmlform-title-not-exists": "[[:$1]] 並不存在。",
+       "htmlform-user-not-exists": "<strong>$1</strong> 並不存在。",
+       "htmlform-user-not-valid": "<strong>$1</strong> 不是有效的使用者名稱。",
        "sqlite-has-fts": "$1 且支援全文搜索",
        "sqlite-no-fts": "$1 且不支援全文搜索",
        "logentry-delete-delete": "$1 刪除頁面 $3",
        "logentry-newusers-create2": "$1 {{GENDER:$2|已建立}}使用者帳號 $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|已建立}}使用者帳號 $3 並且以電子郵件通知密碼",
        "logentry-newusers-autocreate": "已自動{{GENDER:$2|建立}}使用者帳號 $1",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|已移動}}保護設定從 $4 至 $3",
        "logentry-rights-rights": "$1 {{GENDER:$2|已更改}} $3 的群組成員資格由 $4 成為 $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|已更改}} $3 的群組成員資格",
        "logentry-rights-autopromote": "$1 已自動{{GENDER:$2|提升}}從 $4 成為 $5",
        "api-error-illegal-filename": "不允許使用的檔案名稱。",
        "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
        "api-error-invalid-file-key": "內部錯誤:於暫存儲存庫中查無檔案。",
-       "api-error-missingparam": "內部錯誤:請求缺少參數。",
+       "api-error-missingparam": "內部錯誤:請求缺少參數。",
        "api-error-missingresult": "內部錯誤:無法辨識複製是否成功。",
        "api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
        "api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。",
        "special-characters-title-endash": "短破折號",
        "special-characters-title-emdash": "長破折號",
        "special-characters-title-minus": "減號",
+       "mw-widgets-dateinput-no-date": "未選擇日期",
        "mw-widgets-titleinput-description-new-page": "頁面不存在",
        "mw-widgets-titleinput-description-redirect": "重新導向至 $1"
 }
index 74a4542..8e5704e 100644 (file)
     "lonelypagestext": "以下頁面尚未被這個wiki中的其它頁面連結。",
     "uncategorizedimages": "待分類圖片",
     "unusedimages": "未使用圖片",
-    "popularpages": "熱門頁面",
     "mostimages": "最多連結圖片",
     "prefixindex": "所有頁面之前綴",
     "deadendpagestext": "以下頁面沒有連結到這個wiki中的其它頁面。",
     "sp-contributions-blocklog": "封鎖記錄",
     "sp-contributions-userrights": "使用者權限管理",
     "sp-contributions-username": "IP位址或使用者名稱:",
-    "whatlinkshere-title": "鏈接到$1的頁面",
     "blockip": "封鎖使用者",
     "ipadressorusername": "IP地址或使用者名:",
     "ipbreason-dropdown": "*一般的封鎖理由\n** 屢次增加不實資料\n** 刪除頁面內容\n** 外部連結廣告\n** 在頁面中增加無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 不能接受的使用者名",
index 40627a2..4f7638a 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Peugah_haba_lon' ),
        'Newimages'                 => array( 'Beureukaih_baro' ),
        'Newpages'                  => array( 'On_baro' ),
-       'Popularpages'              => array( 'On_meuceuhu' ),
        'Preferences'               => array( 'Geunalak' ),
        'Prefixindex'               => array( 'Dapeuta_neuaway' ),
        'Protectedpages'            => array( 'On_nyang_geupeulindong' ),
diff --git a/languages/messages/MessagesAdy.php b/languages/messages/MessagesAdy.php
new file mode 100644 (file)
index 0000000..b421a48
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+/** Adyghe (адыгабзэ)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ * @comment falls back to Adyghe (Cyrillic)
+ */
+
+$fallback = 'ady-cyrl';
diff --git a/languages/messages/MessagesAdy_cyrl.php b/languages/messages/MessagesAdy_cyrl.php
new file mode 100644 (file)
index 0000000..1a23937
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+/** Adyghe (адыгабзэ)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$namespaceNames = array(
+       NS_MEDIA            => 'Медиа',
+);
index 7482841..320efa3 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nuwe_beelde', 'Nuwebeelde', 'Nuwe_lêers', 'Nuwelêers' ),
        'Newpages'                  => array( 'Nuwe_bladsye', 'Nuwebladsye' ),
        'PasswordReset'             => array( 'WagwoordHerstel' ),
-       'Popularpages'              => array( 'PopulêreBladsye' ),
        'Preferences'               => array( 'Voorkeure' ),
        'Prefixindex'               => array( 'VoorvoegselIndeks' ),
        'Protectedpages'            => array( 'BeskermdeBladsye' ),
index 588cf34..98b8b66 100644 (file)
@@ -44,7 +44,6 @@ $namespaceGenderAliases = array(
 );
 
 $specialPageAliases = array(
-       'Popularpages'              => array( 'Faqe të famshme' ),
        'Search'                    => array( 'Kërko' ),
 );
 
index 7ec924e..4f84bfb 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'A_mía_descusión', 'A_mía_pachina_de_descusión' ),
        'Newimages'                 => array( 'Nuevos_fichers', 'Nuevas_imáchens', 'Nuevas_imachens', 'Nuebas_imachens' ),
        'Newpages'                  => array( 'Pachinas_nuevas', 'Pachinas_recients', 'Pachinas_nuebas', 'Pachinas_más_nuebas', 'Pachinas_más_rezients', 'Pachinas_rezients' ),
-       'Popularpages'              => array( 'Pachinas_populars', 'Pachinas_más_populars' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Pachinas_por_prefixo', 'Mirar_por_prefixo' ),
        'Protectedpages'            => array( 'Pachinas_protechitas', 'Pachinas_protechidas' ),
index 7817990..5441237 100644 (file)
@@ -373,7 +373,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغة_الصفحة' ),
        'PasswordReset'             => array( 'إعادة_ضبط_كلمة_السر' ),
        'PermanentLink'             => array( 'وصلة_دائمة', 'رابط_دائم' ),
-       'Popularpages'              => array( 'صفحات_مشهورة' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بادئة' ),
        'Protectedpages'            => array( 'صفحات_محمية' ),
index f88650b..c833b02 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
        'Newpages'                  => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
        'PermanentLink'             => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
-       'Popularpages'              => array( 'ܦܐܬܬ̈ܐ_ܡܫܡܗ̈ܐ' ),
        'Preferences'               => array( 'ܨܒܝܢܝܘ̈ܬܐ' ),
        'Protectedpages'            => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
        'Protectedtitles'           => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
index 4d0b3db..e2078ad 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'لغه_الصفحه' ),
        'PasswordReset'             => array( 'ضبط_الباسوورد' ),
        'PermanentLink'             => array( 'وصله_دايمه' ),
-       'Popularpages'              => array( 'صفح_مشهوره' ),
        'Preferences'               => array( 'تفضيلات' ),
        'Prefixindex'               => array( 'فهرس_بدايه' ),
        'Protectedpages'            => array( 'صفح_محميه' ),
index f9f1b5b..e173661 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'পৰৱৰ্তী_পৃষ্ঠা' ),
        'PasswordReset'             => array( 'গুপ্তশব্দ_ঘূৰাই_আনক' ),
        'PermanentLink'             => array( 'স্থায়ী_সংযোগ' ),
-       'Popularpages'              => array( 'জনপ্ৰিয়_পৃষ্ঠাসমূহ' ),
        'Preferences'               => array( 'পচন্দ' ),
        'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
        'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
index ea64271..34b2ba0 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ЦІиял_гьумерал' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Даимаб_ссылка' ),
-       'Popularpages'              => array( 'Машгьурал_гьумерал' ),
        'Preferences'               => array( 'Рекъезабиял' ),
        'Prefixindex'               => array( 'ЦІаразул_бетІералде_бихьизаби' ),
        'Protectedpages'            => array( 'ЦІунарал_гьумерал' ),
index 0892ec9..0c8b1e6 100644 (file)
@@ -62,7 +62,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'JinafaPrilara' ),
        'Newimages'                 => array( 'WarzafEwaveem' ),
        'Newpages'                  => array( 'WarzafBueem' ),
-       'Popularpages'              => array( 'LorupenBueem' ),
        'Preferences'               => array( 'Lodamaceem' ),
        'Protectedpages'            => array( 'NendanBueem' ),
        'Protectedtitles'           => array( 'NendanVergumvelteem' ),
index 9961227..fc6cc12 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** South Azerbaijani (تورکجه)
+/** South Azerbaijani (تۆرکجه)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -8,6 +8,7 @@
  *
  * @author Arjanizary
  * @author E THP
+ * @author Koroğlu
  * @author Mjbmr
  */
 
@@ -15,45 +16,50 @@ $fallback = 'fa';
 $rtl = true;
 
 $namespaceNames = array(
-       NS_MEDIA            => 'Ù\85ئدÛ\8cا',
+       NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'اؤزل',
        NS_TALK             => 'دانیشیق',
-       NS_USER             => 'اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c',
-       NS_USER_TALK        => 'اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c_دانیشیغی',
+       NS_USER             => 'اÛ\8cØ´Ù\84دÙ\86',
+       NS_USER_TALK        => 'اÛ\8cØ´Ù\84دÙ\86_دانیشیغی',
        NS_PROJECT_TALK     => '$1_دانیشیغی',
        NS_FILE             => 'فایل',
        NS_FILE_TALK        => 'فایل_دانیشیغی',
-       NS_MEDIAWIKI        => 'Ù\85ئدÛ\8cاâ\80\8cویکی',
-       NS_MEDIAWIKI_TALK   => 'Ù\85ئدÛ\8cاâ\80\8cویکی_دانیشیغی',
+       NS_MEDIAWIKI        => 'Ù\85دÛ\8cاویکی',
+       NS_MEDIAWIKI_TALK   => 'Ù\85دÛ\8cاویکی_دانیشیغی',
        NS_TEMPLATE         => 'شابلون',
        NS_TEMPLATE_TALK    => 'شابلون_دانیشیغی',
-       NS_HELP             => 'یاردیم',
-       NS_HELP_TALK        => 'یاردیم_دانیشیغی',
+       NS_HELP             => 'کؤمک',
+       NS_HELP_TALK        => 'کؤمک_دانیشیغی',
        NS_CATEGORY         => 'بؤلمه',
        NS_CATEGORY_TALK    => 'بؤلمه_دانیشیغی',
 );
 
+$namespaceAliases = array(
+       'مدیا‌ویکی' => NS_MEDIAWIKI,
+       'مدیا‌ویکی_دانیشیغی' => NS_MEDIAWIKI_TALK,
+);
+
 $specialPageAliases = array(
-       'Activeusers'               => array( 'Ú\86اÙ\84Û\8cØ´Ù\82اÙ\86_اÛ\8cستسÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84ر' ),
+       'Activeusers'               => array( 'Ú\86اÙ\84Û\8cØ´Ù\82اÙ\86_اÛ\8cØ´Ù\84دÙ\86â\80\8cÙ\84ر' ),
        'Allmessages'               => array( 'بوتون_مئساژلار' ),
-       'Allpages'                  => array( 'بوتون_صحیفه‌لر' ),
-       'Ancientpages'              => array( 'اسکی_صحیفه‌لر' ),
+       'Allpages'                  => array( 'بوتون_صفحه‌لر' ),
+       'Ancientpages'              => array( 'اسکی_صفحه‌لر' ),
        'Badtitle'                  => array( 'پیس_آد' ),
-       'Blankpage'                 => array( 'بوش_صحیفه' ),
+       'Blankpage'                 => array( 'بوش_صفحه' ),
        'ChangePassword'            => array( 'رمزی_دَییش' ),
        'CreateAccount'             => array( 'حساب_یارات' ),
        'Mycontributions'           => array( 'چالیشمالاریم' ),
-       'Mypage'                    => array( 'صحیفه‌م' ),
+       'Mypage'                    => array( 'صفحه‌م' ),
        'Mytalk'                    => array( 'دانیشیغیم' ),
        'Myuploads'                 => array( 'یوکله‌دیکلریم' ),
        'Newimages'                 => array( 'یئنی_فایل‌لار' ),
-       'Newpages'                  => array( 'یئنی_صحیفه‌لر' ),
+       'Newpages'                  => array( 'یئنی_صفحه‌لر' ),
        'PasswordReset'             => array( 'رمز_دَییشمه‌' ),
        'Randompage'                => array( 'راست‌گله' ),
        'Recentchanges'             => array( 'سون_دَییشیکلر' ),
        'Search'                    => array( 'آختار' ),
-       'Shortpages'                => array( 'قیسسا_صحیفه‌لر' ),
-       'Specialpages'              => array( 'اؤزل_صحیفه‌لر' ),
+       'Shortpages'                => array( 'قیسسا_صفحه‌لر' ),
+       'Specialpages'              => array( 'اؤزل_صفحه‌لر' ),
        'Statistics'                => array( 'آمار' ),
        'Unusedcategories'          => array( 'ایشلنممیش_بؤلمه‌لر' ),
        'Unusedimages'              => array( 'ایشلنممیش_فایل‌لار' ),
@@ -65,13 +71,13 @@ $specialPageAliases = array(
 );
 
 $magicWords = array(
-       'numberofpages'             => array( '1', 'صحیفه‌لر_ساییسی', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ),
+       'numberofpages'             => array( '1', 'صفحه‌لر_ساییسی', 'تعدادصفحه‌ها', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'مقاله‌لر_ساییسی', 'تعدادمقاله‌ها', 'NUMBEROFARTICLES' ),
        'numberoffiles'             => array( '1', 'قایل‌لار_ساییسی', 'تعدادپرونده‌ها', 'NUMBEROFFILES' ),
-       'numberofusers'             => array( '1', 'اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84ر_ساÛ\8cÛ\8cسÛ\8c', 'تعدادکاربراÙ\86', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'       => array( '1', 'Ú\86اÙ\84Û\8cØ´Ù\82اÙ\86_اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cÙ\84ر', 'کاربراÙ\86â\80\8cÙ\81عاÙ\84', 'کاربراÙ\86\81عاÙ\84', 'NUMBEROFACTIVEUSERS' ),
+       'numberofusers'             => array( '1', 'Û\8cØ´Ù\84دÙ\86â\80\8cÙ\84ر_ساÛ\8cÛ\8cسÛ\8c', 'تعدادکاربراÙ\86', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'Ú\86اÙ\84Û\8cØ´Ù\82اÙ\86_اÛ\8cØ´Ù\84دÙ\86â\80\8cÙ\84ر', 'کاربراÙ\86â\80\8cÙ\81عاÙ\84', 'کاربراÙ\86\81عاÙ\84', 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'             => array( '1', 'دَییشدیرمه_ساییسی', 'تعدادویرایش‌ها', 'NUMBEROFEDITS' ),
-       'pagename'                  => array( '1', 'صحیفه‌نین_آدی', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
+       'pagename'                  => array( '1', 'صفحه‌نین_آدی', 'نام‌صفحه', 'نام_صفحه', 'PAGENAME' ),
        'img_right'                 => array( '1', 'ساغ', 'راست', 'right' ),
        'img_left'                  => array( '1', 'سول', 'چپ', 'left' ),
        'img_none'                  => array( '1', 'هئچ', 'هیچ', 'none' ),
index aaf6c2b..50ed217 100644 (file)
@@ -91,7 +91,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Яңы_биттәр' ),
        'PasswordReset'             => array( 'Паролде_яңыртыу' ),
        'PermanentLink'             => array( 'Даими_һылтанма' ),
-       'Popularpages'              => array( 'Популяр_биттәр' ),
        'Preferences'               => array( 'Көйләүҙәр' ),
        'Protectedpages'            => array( 'Һаҡланған_биттәр' ),
        'Protectedtitles'           => array( 'Һаҡланған_исемдәр' ),
index f5ade22..b32067c 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Southern Balochi (بÙ\84Ù\88Ú\86Û\8c Ù\85کراÙ\86Û\8c)
+/** Southern Balochi (جÙ\87Ù\84سرÛ\8c Ø¨Ù\84Ù\88Ú\86Û\8c)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -97,7 +97,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'منی گپ' ),
        'Newimages'                 => array( 'نوکین عکسان' ),
        'Newpages'                  => array( 'نوکین صفحات' ),
-       'Popularpages'              => array( 'مردمی صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'ایندکس پیشوند' ),
        'Protectedpages'            => array( 'صفحات محافظتی' ),
index 5a2a7a0..2309d79 100644 (file)
@@ -72,7 +72,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Мае_размовы' ),
        'Newimages'                 => array( 'Новыя_файлы' ),
        'Newpages'                  => array( 'Новыя_старонкі' ),
-       'Popularpages'              => array( 'Папулярныя_старонкі' ),
        'Protectedpages'            => array( 'Абароненыя_старонкі' ),
        'Protectedtitles'           => array( 'Забароненыя_старонкі' ),
        'Randompage'                => array( 'Выпадковая_старонка' ),
index 2425817..322255f 100644 (file)
@@ -85,7 +85,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Моята_беседа' ),
        'Newimages'                 => array( 'Нови_файлове' ),
        'Newpages'                  => array( 'Нови_страници' ),
-       'Popularpages'              => array( 'Най-посещавани_страници' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Всички_страници_с_представка', 'Представка' ),
        'Protectedpages'            => array( 'Защитени_страници' ),
index cb52c1a..45a13bf 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Western Balochi (بÙ\84Ù\88Ú\86Û\8c Ø±Ø®Ø´Ø§Ù\86Û\8c)
+/** Western Balochi (رÙ\88Ú\86 Ú©Ù¾ØªÛ\8cÙ\86 Ø¨Ù\84Ù\88Ú\86Û\8c)
  *
  * To improve a translation please visit https://translatewiki.net
  *
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'وّرق_ئی_زبان' ),
        'PasswordReset'             => array( 'چیهرگالی_نادینتین' ),
        'PermanentLink'             => array( 'دایمین_لینک' ),
-       'Popularpages'              => array( 'مشهورین_وّرق_ئان' ),
        'Preferences'               => array( 'تنزیمات' ),
        'Prefixindex'               => array( 'دیمۆندین_نمایگ' ),
        'Protectedpages'            => array( 'قُلپ_بوته_ئین_ورق_ئان' ),
index 07246a4..4cd2022 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Barakas_hanyar' ),
        'Newpages'                  => array( 'Tungkaran_hanyar' ),
        'PermanentLink'             => array( 'Tautan_tatap' ),
-       'Popularpages'              => array( 'Tungkaran_popular' ),
        'Preferences'               => array( 'Kakatujuan' ),
        'Protectedpages'            => array( 'Tungkaran_nang_dilindungi' ),
        'Protectedtitles'           => array( 'Judul_nang_dilindungi' ),
index 66cef9e..040beda 100644 (file)
@@ -71,7 +71,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MaC\'haozeadennoù' ),
        'Newimages'                 => array( 'RestroùNevez', 'SkeudennoùNevez' ),
        'Newpages'                  => array( 'PajennoùNevez' ),
-       'Popularpages'              => array( 'PajennoùPoblek' ),
        'Preferences'               => array( 'Penndibaboù' ),
        'Protectedpages'            => array( 'PajennoùGwarezet' ),
        'Protectedtitles'           => array( 'TitloùGwarezet' ),
index e553b7f..a5f33fe 100644 (file)
@@ -90,7 +90,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojRazgovor' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'NoveStranice' ),
-       'Popularpages'              => array( 'PopularneStranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'IndeksPrefiksa' ),
        'Protectedpages'            => array( 'ZasticeneStranice' ),
index f9a58ca..8ae5e4c 100644 (file)
@@ -60,7 +60,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Минии_хэлэлсэл' ),
        'Myuploads'                 => array( 'Минии_ашаалһан_зүйл' ),
        'Newpages'                  => array( 'Шэнэ_хуудаһан' ),
-       'Popularpages'              => array( 'Оло_уншагдаһан_хуудаһан' ),
        'Protectedpages'            => array( 'Хамгаалалтатай_хуудаһан' ),
        'Protectedtitles'           => array( 'Хамгаалалтатай_гаршаг' ),
        'Recentchanges'             => array( 'Сайтдахи_хубилалтанууд' ),
index 29c9a16..9169f97 100644 (file)
@@ -82,7 +82,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Discussió_personal' ),
        'Newimages'                 => array( 'Imatges_noves', 'Fitxers_nous' ),
        'Newpages'                  => array( 'Pàgines_noves' ),
-       'Popularpages'              => array( 'Pàgines_populars' ),
        'Preferences'               => array( 'Preferències' ),
        'Prefixindex'               => array( 'Cerca_per_prefix' ),
        'Protectedpages'            => array( 'Pàgines_protegides' ),
index 1bc4385..f175246 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新其頁面' ),
        'PasswordReset'             => array( '密碼重置' ),
        'PermanentLink'             => array( '永久鏈接' ),
-       'Popularpages'              => array( '受歡迎其頁面' ),
        'Preferences'               => array( '喜好' ),
        'Prefixindex'               => array( '前綴索引' ),
        'Protectedpages'            => array( '受保護其頁面' ),
index 514ec17..f146a86 100644 (file)
@@ -126,7 +126,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Керла_агӀонаш' ),
        'PasswordReset'             => array( 'Пароль_кхоссар' ),
        'PermanentLink'             => array( 'Гуттарлера_хьажорг' ),
-       'Popularpages'              => array( 'ГӀараяьлла_агӀонаш' ),
        'Preferences'               => array( 'ГӀирсаш' ),
        'Prefixindex'               => array( 'Хьалха_агӀонийн_цӀераш_хӀотто_еза' ),
        'Protectedpages'            => array( 'ГӀаролла_дина_агӀонаш' ),
index 027161f..cdde53a 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'لێدوانەکەم' ),
        'Newimages'                 => array( 'پەڕگە_نوێکان' ),
        'Newpages'                  => array( 'پەڕە_نوێکان' ),
-       'Popularpages'              => array( 'پەڕە_ناودارەکان' ),
        'Preferences'               => array( 'ھەڵبژاردەکان' ),
        'Protectedpages'            => array( 'پەڕە_پارێزراوەکان' ),
        'Protectedtitles'           => array( 'بابەتە_پارێزراوەکان' ),
index b796aca..609629f 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Moje_diskuse' ),
        'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
        'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
-       'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
        'Preferences'               => array( 'Nastavení', 'Nastaveni' ),
        'Protectedpages'            => array( 'Zamčené_stránky', 'Zamcene_stranky' ),
        'Protectedtitles'           => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ),
index 075369e..d2096e9 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Min_diskussionsside' ),
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Indstillinger' ),
        'Prefixindex'               => array( 'Præfiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index c9994e2..b5c1475 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Seitensprache' ),
        'PasswordReset'             => array( 'Passwort_neu_vergeben' ),
        'PermanentLink'             => array( 'Permanenter_Link', 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteste_Seiten' ),
        'Preferences'               => array( 'Einstellungen' ),
        'Prefixindex'               => array( 'Präfixindex' ),
        'Protectedpages'            => array( 'Geschützte_Seiten' ),
index 445aba0..6adf6f1 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Zıwanê_Pele' ),
        'PasswordReset'             => array( 'ParolaPeysereştış' ),
        'PermanentLink'             => array( 'GıreyoDaimi' ),
-       'Popularpages'              => array( 'PelêPopuleri' ),
        'Preferences'               => array( 'Tercihi' ),
        'Prefixindex'               => array( 'VerbendZerrek' ),
        'Protectedpages'            => array( 'PelêKeŞevekiyayiyé' ),
index f291a1d..06b90f3 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mója_diskusija' ),
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_boki' ),
-       'Popularpages'              => array( 'Woblubowane_boki' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Indeks_prefiksow' ),
        'Protectedpages'            => array( 'Šćitane_boki' ),
index 0334344..5f239fb 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ΤαΑρχείαΜου', 'ΤαΑνεβάσματάΜου', 'ΟιΕπιφορτώσειςΜου' ),
        'Newimages'                 => array( 'ΝέαΑρχεία', 'ΝέεςΕικόνες' ),
        'Newpages'                  => array( 'ΝέεςΣελίδες' ),
-       'Popularpages'              => array( 'ΔημοφιλείςΣελίδες' ),
        'Preferences'               => array( 'Προτιμήσεις' ),
        'Prefixindex'               => array( 'ΕυρετήριοΠροθεμάτων' ),
        'Protectedpages'            => array( 'ΠροστατευμένεςΣελίδες' ),
index 57a79bc..4e6f12b 100644 (file)
@@ -644,4 +644,3 @@ $preloadedMessages = array(
        'whatlinkshere',
        'word-separator',
 );
-
index e31710b..958fa6f 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Novaj_paĝoj' ),
        'PasswordReset'             => array( 'Ŝanĝo_de_pasvorto' ),
        'PermanentLink'             => array( 'Daŭra_ligilo' ),
-       'Popularpages'              => array( 'Popularaj_paĝoj' ),
        'Preferences'               => array( 'Preferoj' ),
        'Prefixindex'               => array( 'Indekso_de_prefiksoj' ),
        'Protectedpages'            => array( 'Protektitaj_paĝoj' ),
index 52e363c..dfd97f5 100644 (file)
@@ -99,7 +99,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PáginasNuevas', 'Páginas_nuevas' ),
        'PasswordReset'             => array( 'RestablecerContraseña' ),
        'PermanentLink'             => array( 'EnlacePermanente' ),
-       'Popularpages'              => array( 'PáginasMásVisitadas', 'PáginasPopulares', 'Páginas_más_visitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'PáginasPorPrefijo', 'Páginas_por_prefijo' ),
        'Protectedpages'            => array( 'PáginasProtegidas', 'Páginas_protegidas' ),
index 1aaabd6..b8ef360 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Atribuudiga_leheküljed' ),
        'PasswordReset'             => array( 'Parooli_lähtestamine' ),
        'PermanentLink'             => array( 'Püsilink' ),
-       'Popularpages'              => array( 'Loetumad_leheküljed' ),
        'Preferences'               => array( 'Eelistused' ),
        'Prefixindex'               => array( 'Kõik_pealkirjad_eesliitega' ),
        'Protectedpages'            => array( 'Kaitstud_leheküljed' ),
index dd1cc55..fa359fc 100644 (file)
@@ -105,7 +105,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'زبان_صفحه' ),
        'PasswordReset'             => array( 'بازنشاندن_گذرواژه' ),
        'PermanentLink'             => array( 'پیوند_دائمی' ),
-       'Popularpages'              => array( 'صفحه‌های_محبوب' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'نمایه_پیشوندی' ),
        'Protectedpages'            => array( 'صفحه‌های_محافظت‌شده' ),
index 1219911..fd5db32 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sivun_kieli' ),
        'PasswordReset'             => array( 'Unohtuneen_salasanan_vaihto' ),
        'PermanentLink'             => array( 'Ikilinkki' ),
-       'Popularpages'              => array( 'Suositut_sivut' ),
        'Preferences'               => array( 'Asetukset' ),
        'Prefixindex'               => array( 'Etuliiteluettelo' ),
        'Protectedpages'            => array( 'Suojatut_sivut' ),
index b9e8b54..b64922e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Pages_avec_la_propriété' ),
        'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
        'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
-       'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
        'Preferences'               => array( 'Préférences' ),
        'Prefixindex'               => array( 'Index', 'Préfixes', 'Prefixes' ),
        'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
index 51a0e13..6c25ae9 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Novéls_fichiérs', 'NovélsFichiérs', 'Émâges_novèles', 'ÉmâgesNovèles' ),
        'Newpages'                  => array( 'Pâges_novèles', 'PâgesNovèles' ),
        'PermanentLink'             => array( 'Lim_fixo', 'LimFixo' ),
-       'Popularpages'              => array( 'Pâges_les_ples_consultâs', 'PâgesLesPlesConsultâs' ),
        'Preferences'               => array( 'Prèferences' ),
        'Prefixindex'               => array( 'Endèxe_des_prèfixos', 'EndèxeDesPrèfixos' ),
        'Protectedpages'            => array( 'Pâges_protègiês', 'PâgesProtègiês' ),
index 52fdee8..03ac8e5 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MêsDiscussions' ),
        'Newimages'                 => array( 'GnovisFiguris' ),
        'Newpages'                  => array( 'GnovisPagjinis' ),
-       'Popularpages'              => array( 'PagjinisPopolârs' ),
        'Preferences'               => array( 'Preferencis' ),
        'Prefixindex'               => array( 'Prefìs' ),
        'Protectedpages'            => array( 'PagjinisProtezudis' ),
index e02baf0..473e212 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Myn oerlis' ),
        'Newimages'                 => array( 'Nije ôfbylden', 'Nije ôfbyldings', 'Nije ôfbyldingen', 'List mei nije ôfbylden', 'Nije Ofbylden' ),
        'Newpages'                  => array( 'Nije siden' ),
-       'Popularpages'              => array( 'Populêre siden', 'Grage siden' ),
        'Preferences'               => array( 'Ynstellings', 'Ynsteld' ),
        'Prefixindex'               => array( 'Alle siden neffens foarheaksel' ),
        'Protectedpages'            => array( 'Befeilige siden', 'Skoattele siden' ),
index 390e658..059b8a0 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'SözleşmäkSayfam', 'SözleşmäkYapraım' ),
        'Newimages'                 => array( 'EniDosyeler', 'EniPätretler' ),
        'Newpages'                  => array( 'EniYazılar', 'EniSayfalar', 'EniYapraklar' ),
-       'Popularpages'              => array( 'EnAnılmışSayfalar', 'EnAnılmışYazılar' ),
        'Preferences'               => array( 'Seçimner' ),
        'Prefixindex'               => array( 'Prefiksİndeksi' ),
        'Randompage'                => array( 'Razgele', 'RazgeleYazı', 'RazgeleSayfa', 'RazgeleYaprak' ),
index 8ab5bcc..e00988c 100644 (file)
@@ -113,7 +113,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Páxinas_con_propiedades' ),
        'PasswordReset'             => array( 'Restablecer_o_contrasinal', 'Restablecer_contrasinal' ),
        'PermanentLink'             => array( 'Ligazón_permanente' ),
-       'Popularpages'              => array( 'Páxinas_populares' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Índice_de_prefixos' ),
        'Protectedpages'            => array( 'Páxinas_protexidas' ),
index d165495..52833cb 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Neji_Syte' ),
        'PasswordReset'             => array( 'Passwort_zruggsetze' ),
        'PermanentLink'             => array( 'Permalink' ),
-       'Popularpages'              => array( 'Beliebteschti_Syte' ),
        'Preferences'               => array( 'Ystellige' ),
        'Prefixindex'               => array( 'Vorsilbeverzeichnis' ),
        'Protectedpages'            => array( 'Gschitzti_Syte' ),
index 3fc9f6b..937b50d 100644 (file)
@@ -74,7 +74,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'મારીચર્ચા' ),
        'Newimages'                 => array( 'નવીફાઇલો', 'નવાંચિત્રો' ),
        'Newpages'                  => array( 'નવાપાનાં' ),
-       'Popularpages'              => array( 'લોકપ્રિયપાનાં' ),
        'Preferences'               => array( 'પસંદ' ),
        'Prefixindex'               => array( 'ઉપસર્ગ' ),
        'Protectedpages'            => array( 'સંરક્ષિતપાનાં' ),
index 3d7fc43..e806118 100644 (file)
@@ -108,7 +108,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'שפת_הדף' ),
        'PasswordReset'             => array( 'איפוס_סיסמה' ),
        'PermanentLink'             => array( 'קישור_קבוע' ),
-       'Popularpages'              => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
        'Preferences'               => array( 'העדפות', 'ההעדפות_שלי' ),
        'Prefixindex'               => array( 'דפים_המתחילים_ב' ),
        'Protectedpages'            => array( 'דפים_מוגנים' ),
index 65077c1..6452b00 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index fb8fdb3..e06512b 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nowe_dataje' ),
        'Newpages'                  => array( 'Nowe_strony' ),
        'PermanentLink'             => array( 'Trajny_wotkaz' ),
-       'Popularpages'              => array( 'Najwoblubowaniše_strony' ),
        'Preferences'               => array( 'Nastajenja' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Škitane_strony' ),
index 18e4a2d..d345fab 100644 (file)
@@ -94,7 +94,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PajNouvo' ),
        'PasswordReset'             => array( 'ResètMopas2' ),
        'PermanentLink'             => array( 'LyenPouToutTan' ),
-       'Popularpages'              => array( 'PajPopilè' ),
        'Preferences'               => array( 'Preferans' ),
        'Prefixindex'               => array( 'EndèksPrefiks' ),
        'Protectedpages'            => array( 'PajPwoteje' ),
index 0019a4b..3309314 100644 (file)
@@ -98,7 +98,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Új_fájlok', 'Új_képek', 'Új_képek_galériája' ),
        'Newpages'                  => array( 'Új_lapok' ),
        'PasswordReset'             => array( 'Jelszó_helyreállítása' ),
-       'Popularpages'              => array( 'Népszerű_lapok', 'Népszerű_oldalak' ),
        'Preferences'               => array( 'Beállításaim' ),
        'Prefixindex'               => array( 'Keresés_előtag_szerint' ),
        'Protectedpages'            => array( 'Védett_lapok' ),
index ea23ef0..1b95c78 100644 (file)
@@ -223,7 +223,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Իմքննարկումները' ),
        'Newimages'                 => array( 'Նորպատկերներ' ),
        'Newpages'                  => array( 'Նորէջերը' ),
-       'Popularpages'              => array( 'Հանրաճանաչէջերը' ),
        'Preferences'               => array( 'Նախընտրությունները' ),
        'Prefixindex'               => array( 'Որոնումնախածանցով' ),
        'Randompage'                => array( 'Պատահականէջ' ),
index 0d4fd18..41f9fdf 100644 (file)
@@ -93,7 +93,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Paginas_nove', 'Nove_paginas' ),
        'PasswordReset'             => array( 'Reinitialisar_contrasigno' ),
        'PermanentLink'             => array( 'Ligamine_permanente' ),
-       'Popularpages'              => array( 'Paginas_popular' ),
        'Preferences'               => array( 'Preferentias' ),
        'Prefixindex'               => array( 'Indice_de_prefixos' ),
        'Protectedpages'            => array( 'Paginas_protegite' ),
index 3510931..1fcfa7e 100644 (file)
@@ -252,7 +252,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Halaman_baru', 'HalamanBaru' ),
        'PasswordReset'             => array( 'Reset_sandi', 'ResetSandi' ),
        'PermanentLink'             => array( 'Pranala_permanen' ),
-       'Popularpages'              => array( 'Halaman_populer', 'HalamanPopuler' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'Indeks_awalan', 'IndeksAwalan' ),
        'Protectedpages'            => array( 'Halaman_yang_dilindungi', 'HalamanDilindungi' ),
index 748f82b..699da88 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Nov_págines' ),
        'PasswordReset'             => array( 'Recomensar_parol-clave' ),
        'PermanentLink'             => array( 'Catenun_permanen' ),
-       'Popularpages'              => array( 'Págines_populari' ),
        'Preferences'               => array( 'Preferenties' ),
        'Prefixindex'               => array( 'Index_de_prefixe' ),
        'Protectedpages'            => array( 'Págines_gardat' ),
index effce71..7500a23 100644 (file)
@@ -169,7 +169,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nýjar_myndir' ),
        'Newpages'                  => array( 'Nýjustu_greinar' ),
        'PasswordReset'             => array( 'Endursetja_lykilorð' ),
-       'Popularpages'              => array( 'Vinsælar_síður' ),
        'Preferences'               => array( 'Stillingar' ),
        'Prefixindex'               => array( 'Forskeyti' ),
        'Protectedpages'            => array( 'Verndaðar_síður' ),
index a369d1d..c072a42 100644 (file)
@@ -111,7 +111,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'PagineConProprietà' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index caca23d..ecf64ab 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ページ言語' ),
        'PasswordReset'             => array( 'パスワード再設定', 'パスワードの再設定', 'パスワードのリセット', 'パスワードリセット' ),
        'PermanentLink'             => array( '固定リンク', 'パーマリンク' ),
-       'Popularpages'              => array( '人気ページ' ),
        'Preferences'               => array( '個人設定', 'オプション' ),
        'Prefixindex'               => array( '前方一致ページ一覧', '始点指定ページ一覧' ),
        'Protectedpages'            => array( '保護されているページ' ),
index 598f101..01a2b66 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'ჩემი_ატვირთვები' ),
        'Newimages'                 => array( 'ახალი_ფაილები' ),
        'Newpages'                  => array( 'ახალი_გვერდები' ),
-       'Popularpages'              => array( 'პოპგვერდები' ),
        'Preferences'               => array( 'კონფიგურაცია' ),
        'Protectedpages'            => array( 'დაცული_გვერდები' ),
        'Protectedtitles'           => array( 'დაცული_სათაურები' ),
index 44b7224..af1be4f 100644 (file)
@@ -70,7 +70,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Menin\' sa\'wbetim' ),
        'Newimages'                 => array( 'Taza su\'wretler' ),
        'Newpages'                  => array( 'Taza betler' ),
-       'Popularpages'              => array( 'Ko\'p ko\'rilgen betler' ),
        'Preferences'               => array( 'Sazlawlar' ),
        'Protectedpages'            => array( 'Qorg\'alg\'an betler' ),
        'Randompage'                => array( 'Qa\'legen', 'Qa\'legen bet' ),
index bcc8328..b11e03e 100644 (file)
@@ -6,6 +6,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Rachitrali
  */
 
 $fallback = 'ur';
@@ -14,7 +15,19 @@ $rtl = true;
 $namespaceNames = array(
        NS_MEDIA            => 'میڈیا',
        NS_SPECIAL          => 'خاص',
-       NS_TALK             => 'مشقولگی',
-       NS_USER             => 'ممبار/یوزر',
+       NS_TALK             => 'تبادلۂ_خیال',
+       NS_USER             => 'صارف',
+       NS_USER_TALK        => 'تبادلۂ_خیال_صارف',
+       NS_PROJECT_TALK     => 'تبادلۂ_خیال_$1',
+       NS_FILE             => 'فائل',
+       NS_FILE_TALK        => 'تبادلۂ_خیال_فائل',
+       NS_MEDIAWIKI        => 'میڈیاویکی',
+       NS_MEDIAWIKI_TALK   => 'تبادلۂ_خیال_میڈیاویکی',
+       NS_TEMPLATE         => 'سانچہ',
+       NS_TEMPLATE_TALK    => 'تبادلۂ_خیال_سانچہ',
+       NS_HELP             => 'مدد',
+       NS_HELP_TALK        => 'تبادلۂ_خیال_مدد',
+       NS_CATEGORY         => 'زمرہ',
+       NS_CATEGORY_TALK    => 'تبادلۂ_خیال_زمرہ',
 );
 
index 8749ccb..516da1d 100644 (file)
@@ -348,7 +348,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'تالقىلاۋىم' ),
        'Newimages'                 => array( 'جاڭا_سۋرەتتەر' ),
        'Newpages'                  => array( 'جاڭا_بەتتەر' ),
-       'Popularpages'              => array( 'ەڭ_كوپ_قارالعان_بەتتەر', 'ايگىلى_بەتتەر' ),
        'Preferences'               => array( 'باپتالىمدار', 'باپتاۋ' ),
        'Prefixindex'               => array( 'ٴباستاۋىش_ٴتىزىمى' ),
        'Protectedpages'            => array( 'قورعالعان_بەتتەر' ),
index 680c2ea..01aaab9 100644 (file)
@@ -322,7 +322,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Талқылауым' ),
        'Newimages'                 => array( 'Жаңа_суреттер' ),
        'Newpages'                  => array( 'Жаңа_беттер' ),
-       'Popularpages'              => array( 'Ең_көп_қаралған_беттер', 'Әйгілі_беттер' ),
        'Preferences'               => array( 'Бапталымдар', 'Баптау' ),
        'Prefixindex'               => array( 'Бастауыш_тізімі' ),
        'Protectedpages'            => array( 'Қорғалған_беттер' ),
index b7f8c6f..7a9cbaa 100644 (file)
@@ -316,7 +316,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Talqılawım' ),
        'Newimages'                 => array( 'Jaña_swretter' ),
        'Newpages'                  => array( 'Jaña_better' ),
-       'Popularpages'              => array( 'Eñ_köp_qaralğan_better', 'Äýgili_better' ),
        'Preferences'               => array( 'Baptalımdar', 'Baptaw' ),
        'Prefixindex'               => array( 'Bastawış_tizimi' ),
        'Protectedpages'            => array( 'Qorğalğan_better' ),
index 289e5c2..4c41209 100644 (file)
@@ -147,7 +147,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'ទំព័រថ្មីៗ' ),
        'PasswordReset'             => array( 'កំណត់ពាក្យសំងាត់ឡើងវិញ' ),
        'PermanentLink'             => array( 'តំណភ្ជាប់អចិន្ត្រែយ៍' ),
-       'Popularpages'              => array( 'ទំព័រដែលមានប្រជាប្រិយ' ),
        'Preferences'               => array( 'ចំណង់ចំណូលចិត្ត' ),
        'Prefixindex'               => array( 'លិបិក្រមបុព្វបទ' ),
        'Protectedpages'            => array( 'ទំព័របានការពារ' ),
index d34e249..38265ae 100644 (file)
@@ -35,6 +35,7 @@
  * @author Pi.C.Noizecehx
  * @author Priviet
  * @author PuzzletChung
+ * @author Revi
  * @author TheAlpha for knowledge
  * @author ToePeu
  * @author Yjs5497
@@ -139,7 +140,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '문서언어' ),
        'PasswordReset'             => array( '비밀번호재설정', '비밀번호초기화' ),
        'PermanentLink'             => array( '고유링크', '영구링크' ),
-       'Popularpages'              => array( '인기있는문서' ),
        'Preferences'               => array( '환경설정' ),
        'Prefixindex'               => array( '접두어찾기' ),
        'Protectedpages'            => array( '보호된문서' ),
@@ -339,7 +339,7 @@ $magicWords = array(
        'numberingroup'             => array( '1', '권한별사용자수', '그룹별사용자수', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__넘겨주기고정__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', '보호수준', 'PROTECTIONLEVEL' ),
-       'cascadingsources'          => array( '1', '계단식원본', 'CASCADINGSOURCES' ),
+       'cascadingsources'          => array( '1', '연쇄식원본', '계단식원본', 'CASCADINGSOURCES' ),
        'formatdate'                => array( '0', '날짜형식', 'formatdate', 'dateformat' ),
        'url_path'                  => array( '0', '경로', 'PATH' ),
        'url_wiki'                  => array( '0', '위키', 'WIKI' ),
index 6b62160..659f97f 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Джангы_бетле' ),
        'PasswordReset'             => array( 'Паролну_ийиу' ),
        'PermanentLink'             => array( 'Дайым_джибериу' ),
-       'Popularpages'              => array( 'Популяр_бетле' ),
        'Preferences'               => array( 'Джарашдырыула' ),
        'Protectedpages'            => array( 'Джакъланнган_бетле' ),
        'Protectedtitles'           => array( 'Джакъланнган_атла' ),
index b1c9d3b..11c1a49 100644 (file)
@@ -158,7 +158,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Ming_Klaafsigg', 'Klaaf' ),
        'Newimages'                 => array( 'Neu_Dateie' ),
        'Newpages'                  => array( 'Neu_Atikelle' ),
-       'Popularpages'              => array( 'Miehts_affjeroofe_Sigge' ),
        'Preferences'               => array( 'Ming_Enstellunge', 'Enstellunge' ),
        'Prefixindex'               => array( 'Sigge_met_Aanfang' ),
        'Protectedpages'            => array( 'Siggeschotz' ),
index b093b58..fc4dbd0 100644 (file)
@@ -118,7 +118,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'FolennowNowyth' ),
        'PasswordReset'             => array( 'DassetyaGerTremena' ),
        'PermanentLink'             => array( 'KevrenFast' ),
-       'Popularpages'              => array( 'FolennowGerysDa' ),
        'Preferences'               => array( 'Dewisyansow' ),
        'Prefixindex'               => array( 'MenegvaRagerow' ),
        'Protectedpages'            => array( 'FolennowDifresys' ),
index 9f3d904..8ea1978 100644 (file)
@@ -120,7 +120,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Disputatio_mea' ),
        'Newimages'                 => array( 'Fasciculi_novi', 'Imagines_novae' ),
        'Newpages'                  => array( 'Paginae_novae' ),
-       'Popularpages'              => array( 'Paginae_saepe_monstratae' ),
        'Preferences'               => array( 'Praeferentiae' ),
        'Prefixindex'               => array( 'Praefixa', 'Quaerere_per_praefixa' ),
        'Protectedpages'            => array( 'Paginae_protectae' ),
index cbeb69e..96d11ae 100644 (file)
@@ -129,7 +129,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'HojasMuevas' ),
        'PasswordReset'             => array( 'Meter_á_zero_el_kóddiche' ),
        'PermanentLink'             => array( 'AtamientoPermanente' ),
-       'Popularpages'              => array( 'HojasMásVisitadas' ),
        'Preferences'               => array( 'Preferencias' ),
        'Prefixindex'               => array( 'Fijhrist_de_prefiksos' ),
        'Protectedpages'            => array( 'HojasGuardadas' ),
index 203788c..45cde70 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sprooch_vun_der_Säit' ),
        'PasswordReset'             => array( 'Zrécksetze_vum_Passwuert' ),
        'PermanentLink'             => array( 'Permanente_Link' ),
-       'Popularpages'              => array( 'Beléifst_Säiten' ),
        'Preferences'               => array( 'Astellungen' ),
        'Prefixindex'               => array( 'Indexsich' ),
        'Protectedpages'            => array( 'Protegéiert_Säiten' ),
index 4efd38c..babd32b 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mien_euverlèk' ),
        'Newimages'                 => array( 'Nuuj_plaetjes' ),
        'Newpages'                  => array( 'Nuuj_pagina\'s' ),
-       'Popularpages'              => array( 'Populair_pagina\'s' ),
        'Preferences'               => array( 'Veurkäöre' ),
        'Prefixindex'               => array( 'Alle_artikele' ),
        'Protectedpages'            => array( 'Beveiligde_pagina\'s' ),
index 8cc1a21..b5de509 100644 (file)
@@ -87,7 +87,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mæ Discûscioîn' ),
        'Newimages'                 => array( 'Immaggini reçenti' ),
        'Newpages'                  => array( 'Paggine ciû reçenti' ),
-       'Popularpages'              => array( 'Paggine ciû viscitæ' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefisci' ),
        'Protectedpages'            => array( 'Paggine protezûe' ),
index 94a7a39..8b706d7 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'بألگە_زوٙن' ),
        'PasswordReset'             => array( 'د_نۊ_زئنە_کئردئن_رازینە_گوڤاردئن' ),
        'PermanentLink'             => array( 'ھوم_پئیڤأند_دایئمی' ),
-       'Popularpages'              => array( 'بألگە_یا_حاستئنی' ),
        'Preferences'               => array( 'میزوٙنکاریا' ),
        'Prefixindex'               => array( 'دئماڤأن_سیاأ' ),
        'Protectedpages'            => array( 'بألگە_یا_پور_و_پیم_بیە' ),
index a2ce260..fdaeecd 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mano_aptarimas' ),
        'Newimages'                 => array( 'Nauji_paveikslėliai' ),
        'Newpages'                  => array( 'Naujausi_puslapiai' ),
-       'Popularpages'              => array( 'Populiarūs_puslapiai' ),
        'Preferences'               => array( 'Nustatymai' ),
        'Prefixindex'               => array( 'Prasidedantys' ),
        'Protectedpages'            => array( 'Užrakinti_puslapiai' ),
diff --git a/languages/messages/MessagesLuz.php b/languages/messages/MessagesLuz.php
new file mode 100644 (file)
index 0000000..799836b
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+/** Southern Luri (لئری دوٙمینی)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ */
+
+$fallback = 'fa';
+$rtl = true;
index 7205e6c..6408c4d 100644 (file)
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  */
 
+$linkTrail = '/^([a-zA-ZĀāČčĒēĢģĪīĶķĻļŅņŠšŪūŽž]+)(.*)$/sDu';
+
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Special',
        NS_TALK             => 'Diskusija',
-       NS_USER             => 'Lietotājs',
-       NS_USER_TALK        => 'Lietotāja_diskusija',
+       NS_USER             => 'Dalībnieks',
+       NS_USER_TALK        => 'Dalībnieka_diskusija',
        NS_PROJECT_TALK     => '{{grammar:ģenitīvs|$1}}_diskusija',
        NS_FILE             => 'Attēls',
        NS_FILE_TALK        => 'Attēla_diskusija',
@@ -50,5 +52,92 @@ $namespaceNames = array(
        NS_CATEGORY         => 'Kategorija',
        NS_CATEGORY_TALK    => 'Kategorijas_diskusija',
 );
+
+$namespaceAliases = array(
+       'Lietotājs' => NS_USER,
+       'Lietotāja_diskusija' => NS_USER_TALK,
+);
+
+$wgExtraGenderNamespaces = array(
+       NS_USER => array( 'male' => 'Dalībnieks', 'female' => 'Dalībniece' ),
+       NS_USER_TALK => array( 'male' => 'Dalībnieka_diskusija', 'female' => 'Dalībnieces_diskusija' )
+);
+
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
+/**
+ * A list of date format preference keys, which can be selected in user
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are
+ * supported by the wikitext converter (parser/DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on
+ * $wgAmericanDates
+ */
+$datePreferences = array(
+       'default',
+       'ydm',
+       'mdy',
+       'dmy',
+       'ymd',
+       'ISO 8601',
+);
+
+/**
+ * The date format to use for generated dates in the user interface.
+ * This may be one of the above date preferences, or the special value
+ * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy
+ * if $wgAmericanDates is false.
+ */
+$defaultDateFormat = 'ydm';
+
+/**
+ * Associative array mapping old numeric date formats, which may still be
+ * stored in user preferences, to the new string formats.
+ */
+$datePreferenceMigrationMap = array(
+       'default',
+       'mdy',
+       'dmy',
+       'ymd'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in
+ * Language.php, search for sprintfDate.
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+       'ydm time' => 'H.i',
+       'ydm date' => 'Y". gada" j. F',
+       'ydm monthonly' => 'Y". gada" F',
+       'ydm both' => 'Y". gada" j. F", plkst." H.i',
+       'ydm pretty' => 'j F',
+
+       'mdy time' => 'H:i',
+       'mdy date' => 'F j, Y',
+       'mdy monthonly' => 'F Y',
+       'mdy both' => 'H:i, F j, Y',
+       'mdy pretty' => 'F j',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j F Y',
+       'dmy monthonly' => 'F Y',
+       'dmy both' => 'H:i, j F Y',
+       'dmy pretty' => 'j F',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y F j',
+       'ymd monthonly' => 'Y F',
+       'ymd both' => 'H:i, Y F j',
+       'ymd pretty' => 'F j',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 monthonly' => 'xnY-xnm',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+       'ISO 8601 pretty' => 'xnm-xnd'
+);
index 274b724..874dfb3 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКорхнемазе' ),
        'Newimages'                 => array( 'ОдНяйфне' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'СидестаЛопатне' ),
        'Preferences'               => array( 'Латцематне' ),
        'Prefixindex'               => array( 'ВалынгольксИндекс' ),
        'Protectedpages'            => array( 'АралафЛопат' ),
index 4c962ad..3e4bfd5 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Fitenim-pejy', 'Fitenimpejy' ),
        'PasswordReset'             => array( 'Famerenan-tenimiafina', 'Famerenantenimiafina' ),
        'PermanentLink'             => array( 'Rohy_maharitra', 'RohyMaharitra' ),
-       'Popularpages'              => array( 'Pejy_be_mpitsidika_indrindra' ),
        'Preferences'               => array( 'Safidy' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pejy_voaaro' ),
index 451e373..cbe9a8f 100644 (file)
@@ -116,7 +116,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'LamanJoProperti', 'Laman_jo_properti' ),
        'PasswordReset'             => array( 'TukaSandi', 'Tuka_baliak_sandi' ),
        'PermanentLink'             => array( 'PautanPamanen', 'Pautan_pamanen' ),
-       'Popularpages'              => array( 'LamanPopuler', 'Laman_populer' ),
        'Preferences'               => array( 'Rujuakan' ),
        'Prefixindex'               => array( 'DaptaAwalan' ),
        'Protectedpages'            => array( 'LamanTalinduang', 'Laman_nan_dilinduang' ),
index 9f74d16..3c7b31d 100644 (file)
@@ -159,7 +159,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ЈазикНаСтраницата' ),
        'PasswordReset'             => array( 'ПроменаНаЛозинка' ),
        'PermanentLink'             => array( 'ПостојанаВрска' ),
-       'Popularpages'              => array( 'ПопуларниСтраници' ),
        'Preferences'               => array( 'Нагодувања' ),
        'Prefixindex'               => array( 'ИндексНаПретставки' ),
        'Protectedpages'            => array( 'ЗаштитениСтраници' ),
index d23e47f..4de1f31 100644 (file)
@@ -148,7 +148,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'താളിന്റെഭാഷ' ),
        'PasswordReset'             => array( 'രഹസ്യവാക്ക്‌‌പുനക്രമീകരണം' ),
        'PermanentLink'             => array( 'സ്ഥിരംകണ്ണി' ),
-       'Popularpages'              => array( 'ജനപ്രിയതാളുകൾ' ),
        'Preferences'               => array( 'ക്രമീകരണങ്ങൾ' ),
        'Prefixindex'               => array( 'പൂർവ്വപദസൂചിക' ),
        'Protectedpages'            => array( 'സംരക്ഷിത_താളുകൾ' ),
index 5cdb35f..8c284e4 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'माझ्या_चर्चा' ),
        'Newimages'                 => array( 'नवीन_संचिका', 'नवीन_चित्रे' ),
        'Newpages'                  => array( 'नवीन_पाने' ),
-       'Popularpages'              => array( 'प्रसिद्ध_पाने' ),
        'Preferences'               => array( 'पसंती' ),
        'Prefixindex'               => array( 'उपसर्गसुची' ),
        'Protectedpages'            => array( 'सुरक्षित_पाने' ),
index fb972b0..69d5652 100644 (file)
@@ -170,7 +170,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Bahasa_laman' ),
        'PasswordReset'             => array( 'Tetap_semula_kata_kunci' ),
        'PermanentLink'             => array( 'Pautan_kekal' ),
-       'Popularpages'              => array( 'Laman_popular' ),
        'Preferences'               => array( 'Keutamaan' ),
        'Prefixindex'               => array( 'Indeks_awalan' ),
        'Protectedpages'            => array( 'Laman_dilindungi' ),
index 2529cc9..a043864 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'DiskussjonijietTiegħi' ),
        'Newimages'                 => array( 'StampiĠodda', 'FajlsĠodda' ),
        'Newpages'                  => array( 'PaġniĠodda' ),
-       'Popularpages'              => array( 'PaġniPopolari' ),
        'Preferences'               => array( 'Preferenzi' ),
        'Prefixindex'               => array( 'IndiċiPrefiss' ),
        'Protectedpages'            => array( 'PaġniProtetti' ),
index ac3342b..fe3db11 100644 (file)
@@ -79,7 +79,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'МоньКортамом' ),
        'Newimages'                 => array( 'ОдАртовкст' ),
        'Newpages'                  => array( 'ОдЛопат' ),
-       'Popularpages'              => array( 'ЛисийСовийМартоЛопат' ),
        'Protectedpages'            => array( 'ВанстоньЛопат' ),
        'Protectedtitles'           => array( 'ВанстоньКонякст' ),
        'Randompage'                => array( 'КодамоПонгсьЛопа' ),
index 6f9cf1f..08d3e93 100644 (file)
@@ -160,7 +160,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Sider_med_egenskap' ),
        'PasswordReset'             => array( 'Nullstill_passord' ),
        'PermanentLink'             => array( 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillinger' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Beskyttede_sider' ),
index f87d770..87f460f 100644 (file)
@@ -179,7 +179,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Miene Diskuschoonssiet' ),
        'Newimages'                 => array( 'Nee Datein' ),
        'Newpages'                  => array( 'Nee Sieden' ),
-       'Popularpages'              => array( 'Veel besöchte Sieden' ),
        'Preferences'               => array( 'Instellungen' ),
        'Prefixindex'               => array( 'Sieden de anfangt mit' ),
        'Protectedpages'            => array( 'Schuulte Sieden' ),
index 5e82e82..7625fef 100644 (file)
@@ -278,7 +278,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Ziejen_mit_eigenschap' ),
        'PasswordReset'             => array( 'Wachtwoord_opniej_instellen' ),
        'PermanentLink'             => array( 'Vaste_verwiezing' ),
-       'Popularpages'              => array( 'Populaere_artikels' ),
        'Preferences'               => array( 'Veurkeuren' ),
        'Prefixindex'               => array( 'Veurvoegselindex' ),
        'Protectedpages'            => array( 'Beveiligden_ziejen' ),
index 7d7fa05..27af255 100644 (file)
@@ -335,7 +335,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Paginataal' ),
        'PasswordReset'             => array( 'WachtwoordOpnieuwInstellen' ),
        'PermanentLink'             => array( 'PermanenteVerwijzing' ),
-       'Popularpages'              => array( 'PopulairePaginas', 'PopulairePagina’s', 'PopulairePagina\'s' ),
        'Preferences'               => array( 'Voorkeuren' ),
        'Prefixindex'               => array( 'Voorvoegselindex' ),
        'Protectedpages'            => array( 'BeveiligdePaginas', 'BeveiligdePagina\'s', 'BeschermdePaginas', 'BeschermdePagina’s', 'BeschermdePagina\'s' ),
index 606f720..4cdb3d7 100644 (file)
@@ -274,7 +274,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Nye_filer' ),
        'Newpages'                  => array( 'Nye_sider' ),
        'PermanentLink'             => array( 'Permanent_lenkje', 'Permanent_lenke' ),
-       'Popularpages'              => array( 'Populære_sider' ),
        'Preferences'               => array( 'Innstillingar' ),
        'Prefixindex'               => array( 'Prefiksindeks' ),
        'Protectedpages'            => array( 'Verna_sider' ),
index 64220d8..443cd90 100644 (file)
@@ -106,7 +106,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mas_discussions', 'Masdiscussions' ),
        'Newimages'                 => array( 'Imatges_novèls', 'ImatgesNovèls' ),
        'Newpages'                  => array( 'Paginas_novèlas' ),
-       'Popularpages'              => array( 'Paginas_mai_visitadas', 'Paginas_las_mai_visitadas', 'Paginasmaivisitadas' ),
        'Preferences'               => array( 'Preferéncias' ),
        'Prefixindex'               => array( 'Indèx' ),
        'Protectedpages'            => array( 'Paginas_protegidas' ),
index f3bea17..5df9cdf 100644 (file)
@@ -131,7 +131,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ନୂଆଫାଇଲ' ),
        'Newpages'                  => array( 'ନୂଆପୃଷ୍ଠା' ),
        'PermanentLink'             => array( 'ଚିରକାଳଲିଙ୍କ' ),
-       'Popularpages'              => array( 'ଜଣାଶୁଣାପୃଷ୍ଠା' ),
        'Preferences'               => array( 'ପସନ୍ଦ' ),
        'Prefixindex'               => array( 'ଆଗରେଯୋଡ଼ାହେବାଇଣ୍ଡେକ୍ସ' ),
        'Protectedpages'            => array( 'କିଳାଯାଇଥିବାପୃଷ୍ଠା' ),
index 3c65610..1790209 100644 (file)
@@ -109,7 +109,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'НогФæрстæ' ),
        'PasswordReset'             => array( 'ПарольНогКæнын' ),
        'PermanentLink'             => array( 'УдгасÆрвитæн' ),
-       'Popularpages'              => array( 'АрæхФæрстæ' ),
        'Preferences'               => array( 'Уагæвæрдтæ' ),
        'Prefixindex'               => array( 'РазæфтуантыИндекс' ),
        'Protectedpages'            => array( 'ÆхгæдФæрстæ' ),
index 3e3090c..988e0b0 100644 (file)
@@ -128,7 +128,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'ਸਫ਼ੇ_ਦੀ_ਭਾਸ਼ਾ' ),
        'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
        'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ', 'ਪੱਕੀ_ਕੜੀ' ),
-       'Popularpages'              => array( 'ਮਸ਼ਹੂਰ_ਸਫ਼ੇ' ),
        'Preferences'               => array( 'ਪਸੰਦਾਂ' ),
        'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
        'Protectedpages'            => array( 'ਸੁਰੱਖਿਅਤ_ਸਫ਼ੇ' ),
index 4c82276..8f1fbf4 100644 (file)
@@ -187,7 +187,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Strony_z_własnością' ),
        'PasswordReset'             => array( 'Wyczyść_hasło' ),
        'PermanentLink'             => array( 'Niezmienny_link' ),
-       'Popularpages'              => array( 'Popularne_strony' ),
        'Preferences'               => array( 'Preferencje' ),
        'Prefixindex'               => array( 'Strony_według_prefiksu' ),
        'Protectedpages'            => array( 'Zabezpieczone_strony' ),
index e7f45f1..689fc02 100644 (file)
@@ -19,3 +19,21 @@ $fallback8bitEncoding = 'windows-1256';
 
 $rtl = true;
 
+$namespaceNames = array(
+       NS_MEDIA            => 'میڈیا',
+       NS_SPECIAL          => 'خاص',
+       NS_TALK             => 'گل_بات',
+       NS_USER             => 'ورتنوالا',
+       NS_USER_TALK        => 'ورتن_گل_بات',
+       NS_PROJECT_TALK     => 'ویونت_گل_بات',
+       NS_FILE             => 'فائل',
+       NS_FILE_TALK        => 'فائل_گل_بات',
+       NS_MEDIAWIKI        => 'میڈیا_وکی',
+       NS_MEDIAWIKI_TALK   => 'میڈیاوکی_گل_بات',
+       NS_TEMPLATE         => 'سانچہ',
+       NS_TEMPLATE_TALK    => 'سانچہ_گل_بات',
+       NS_HELP             => 'ہتھونڈائی',
+       NS_HELP_TALK        => 'ہتھونڈائی_گل_بات',
+       NS_CATEGORY         => 'گٹھ',
+       NS_CATEGORY_TALK    => 'گٹھ_گل_بات',
+);
index fbc9419..df393a6 100644 (file)
@@ -64,7 +64,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'زما_خبرې_اترې' ),
        'Newimages'                 => array( 'نوي_انځورونه' ),
        'Newpages'                  => array( 'نوي_مخونه' ),
-       'Popularpages'              => array( 'نامتومخونه' ),
        'Preferences'               => array( 'غوره_توبونه' ),
        'Prefixindex'               => array( 'د_مختاړيو_ليکلړ' ),
        'Protectedpages'            => array( 'ژغورلي_مخونه' ),
index 7a293f6..814a7f4 100644 (file)
@@ -174,7 +174,6 @@ $specialPageAliases = array(
        'PagesWithProp'             => array( 'Propriedades_de_página' ),
        'PasswordReset'             => array( 'Redefinir_autenticação' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_por_prefixo', 'Índice_de_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 8a63470..cc69fd4 100644 (file)
@@ -177,7 +177,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Arquivos_novos', 'Imagens_novas', 'Ficheiros_novos' ),
        'Newpages'                  => array( 'Páginas_novas', 'Artigos_novos' ),
        'PermanentLink'             => array( 'Ligação_permanente', 'Link_permanente' ),
-       'Popularpages'              => array( 'Páginas_populares', 'Artigos_populares' ),
        'Preferences'               => array( 'Preferências' ),
        'Prefixindex'               => array( 'Índice_de_prefixo', 'Índice_por_prefixo' ),
        'Protectedpages'            => array( 'Páginas_protegidas', 'Artigos_protegidos' ),
index 97afe6b..9a3b57e 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'MusuqPanqa' ),
        'PasswordReset'             => array( 'YaykunaRimaKutichina' ),
        'PermanentLink'             => array( 'KakuqTinki' ),
-       'Popularpages'              => array( 'WatukuqsapaPanqa', 'RikuqsapaPanqa', 'QhawaqsapaPanqa' ),
        'Preferences'               => array( 'Allinkachina', 'Allinkachinakuna' ),
        'Prefixindex'               => array( 'QallarinaKaskaSutisuyu' ),
        'Protectedpages'            => array( 'AmachasqaPanqa' ),
index 3d62d43..b13be7b 100644 (file)
@@ -243,7 +243,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'Imagini_noi' ),
        'Newpages'                  => array( 'Pagini_noi' ),
        'PasswordReset'             => array( 'Resetare_parolă' ),
-       'Popularpages'              => array( 'Pagini_populare' ),
        'Preferences'               => array( 'Preferințe' ),
        'Prefixindex'               => array( 'Index' ),
        'Protectedpages'            => array( 'Pagini_protejate' ),
index a74c9db..1c5e371 100644 (file)
@@ -194,7 +194,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новые_страницы' ),
        'PasswordReset'             => array( 'Сброс_пароля' ),
        'PermanentLink'             => array( 'Постоянная_ссылка' ),
-       'Popularpages'              => array( 'Популярные_страницы' ),
        'Preferences'               => array( 'Настройки' ),
        'Prefixindex'               => array( 'Указатель_по_началу_названия' ),
        'Protectedpages'            => array( 'Защищённые_страницы' ),
index cb23741..255ed66 100644 (file)
@@ -100,7 +100,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Новы_сторінкы' ),
        'PasswordReset'             => array( 'Ресет_гесла' ),
        'PermanentLink'             => array( 'Тырвалый_одказ' ),
-       'Popularpages'              => array( 'Популарны_сторінкы' ),
        'Preferences'               => array( 'Наставлїня' ),
        'Protectedpages'            => array( 'Замкнуты_сторінкы' ),
        'Protectedtitles'           => array( 'Замкнуты_назвы' ),
index 9968066..35bc37a 100644 (file)
@@ -46,19 +46,19 @@ $linkPrefixExtension = false;
 
 $namespaceNames = array(
        NS_MEDIA            => 'माध्यमम्',
-       NS_SPECIAL          => 'विशà¥\87षमà¥\8d',
+       NS_SPECIAL          => 'विशà¥\87षà¤\83',
        NS_TALK             => 'सम्भाषणम्',
-       NS_USER             => 'यà¥\8bà¤\9cà¤\95ः',
-       NS_USER_TALK        => 'यà¥\8bà¤\9cà¤\95सम्भाषणम्',
+       NS_USER             => 'सदसà¥\8dयः',
+       NS_USER_TALK        => 'सदसà¥\8dयसम्भाषणम्',
        NS_PROJECT_TALK     => '$1सम्भाषणम्',
-       NS_FILE             => 'à¤\9aितà¥\8dरमà¥\8d',
-       NS_FILE_TALK        => 'à¤\9aितà¥\8dरसम्भाषणम्',
-       NS_MEDIAWIKI        => 'मिडà¥\80याविà¤\95à¥\80',
-       NS_MEDIAWIKI_TALK   => 'मिडियाविà¤\95à¥\80सम्भाषणम्',
+       NS_FILE             => 'सà¤\9eà¥\8dà¤\9aिà¤\95ा',
+       NS_FILE_TALK        => 'सà¤\9eà¥\8dà¤\9aिà¤\95ासम्भाषणम्',
+       NS_MEDIAWIKI        => 'मà¥\80डियाविà¤\95ि',
+       NS_MEDIAWIKI_TALK   => 'मà¥\80डियाविà¤\95िसम्भाषणम्',
        NS_TEMPLATE         => 'फलकम्',
-       NS_TEMPLATE_TALK    => 'फलà¤\95सà¥\8dय_समà¥\8dभाषणमà¥\8d',
-       NS_HELP             => 'सहाय्यम्',
-       NS_HELP_TALK        => 'सहायà¥\8dयसà¥\8dय_सम्भाषणम्',
+       NS_TEMPLATE_TALK    => 'फलकसम्भाषणम्',
+       NS_HELP             => 'साहायà¥\8dयमà¥\8d',
+       NS_HELP_TALK        => 'साहायà¥\8dयसम्भाषणम्',
        NS_CATEGORY         => 'वर्गः',
        NS_CATEGORY_TALK    => 'वर्गसम्भाषणम्',
 );
@@ -66,19 +66,29 @@ $namespaceNames = array(
 $namespaceAliases = array(
        'माध्यम'             => NS_MEDIA,
        'विशेष'              => NS_SPECIAL,
+       'विशेषम्'            => NS_SPECIAL,
        'संभाषणं'            => NS_TALK,
+       'योजकः'              => NS_USER,
        'योजकसंभाषणं'        => NS_USER_TALK,
-       '$1संभाषणं'         => NS_PROJECT_TALK,
+       'योजकसम्भाषणम्'      => NS_USER_TALK,
+       '$1संभाषणं'          => NS_PROJECT_TALK,
        'चित्रं'             => NS_FILE,
+       'चित्रम्'           => NS_FILE,
        'चित्रसंभाषणं'       => NS_FILE_TALK,
-       'मिडियाविकीसंभाषणं' => NS_MEDIAWIKI_TALK,
+       'चित्रसम्भाषणम्'     => NS_FILE_TALK,
+       'मिडीयाविकी'         => NS_MEDIAWIKI,
+       'मिडियाविकीसंभाषणं'  => NS_MEDIAWIKI_TALK,
+       'मिडियाविकीसम्भाषणम्' => NS_MEDIAWIKI_TALK,
        'बिंबधर'             => NS_TEMPLATE,
-       'बिंबधर_संभाषणं'      => NS_TEMPLATE_TALK,
+       'बिंबधर_संभाषणं'     => NS_TEMPLATE_TALK,
+       'फलकस्य_सम्भाषणम्'   => NS_TEMPLATE_TALK,
        'सहाय्य'             => NS_HELP,
+       'सहाय्यम्'           => NS_HELP,
        'सहाय्यसंभाषणं'      => NS_HELP_TALK,
+       'सहाय्यस्य_सम्भाषणम्' => NS_HELP_TALK,
        'उपकारः'             => NS_HELP,
-       'उपकारसंभाषणं'        => NS_HELP_TALK,
-       'वर्गसंभाषणं'         => NS_CATEGORY_TALK,
+       'उपकारसंभाषणं'       => NS_HELP_TALK,
+       'वर्गसंभाषणं'        => NS_CATEGORY_TALK,
 );
 
 $specialPageAliases = array(
@@ -132,7 +142,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'नूतनसंचिका', 'नूतनचित्रानि' ),
        'Newpages'                  => array( 'नूतनपृष्टानि' ),
        'PasswordReset'             => array( 'सङ्केतशब्दपुन:प्रयु्क्ता' ),
-       'Popularpages'              => array( 'लोकप्रियपृष्टानि' ),
        'Preferences'               => array( 'इष्टतमानि' ),
        'Prefixindex'               => array( 'उपसर्गअनुक्रमणी' ),
        'Protectedpages'            => array( 'सुरक्षितपृष्टानि' ),
index 6cc09a9..9016a0b 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PaginePiùRecenti' ),
        'PasswordReset'             => array( 'ReimpostaPassword' ),
        'PermanentLink'             => array( 'LinkPermanente' ),
-       'Popularpages'              => array( 'PaginePiùVisitate' ),
        'Preferences'               => array( 'Preferenze' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtette' ),
index adfc05e..2339c07 100644 (file)
@@ -66,7 +66,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'مون سان ڳالهه' ),
        'Newimages'                 => array( 'نوان عڪس' ),
        'Newpages'                  => array( 'نوان صفحا' ),
-       'Popularpages'              => array( 'مقبول صفحا' ),
        'Preferences'               => array( 'ترجيحات' ),
        'Prefixindex'               => array( 'اڳياڙي ڏسڻي' ),
        'Protectedpages'            => array( 'تحفظيل صفحا' ),
index 4ab9c11..fe98236 100644 (file)
@@ -68,7 +68,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MéDischussioni' ),
        'Newimages'                 => array( 'ImmaginiRizzenti' ),
        'Newpages'                  => array( 'PàginiPiùRizzenti' ),
-       'Popularpages'              => array( 'PàginiPiùVisitaddi' ),
        'Preferences'               => array( 'Prifirènzi' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PàginiPrutiggiddi' ),
diff --git a/languages/messages/MessagesSdh.php b/languages/messages/MessagesSdh.php
new file mode 100644 (file)
index 0000000..7a9b856
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+/** Southern Kurdish (کوردی خوارگ)
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'fa';
+
+$rtl = true;
index 1917f32..66fa2e4 100644 (file)
@@ -80,7 +80,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Mu_ságastallan' ),
        'Newimages'                 => array( 'Ođđa_govat', 'Ođđa_fiillat' ),
        'Newpages'                  => array( 'Ođđa_siiddut' ),
-       'Popularpages'              => array( 'Bivnnuhis_siiddut' ),
        'Preferences'               => array( 'Válljemat', 'Ásahusat' ),
        'Protectedpages'            => array( 'Suodjaluvvon_siiddut' ),
        'Protectedtitles'           => array( 'Suodjaluvvon_bajilčállagat', 'Suodjaluvvon_siidonamat' ),
index f8aa19f..9fb137a 100644 (file)
@@ -76,7 +76,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'Moje_postavljene_datoteke' ),
        'Newimages'                 => array( 'Nove_datoteke', 'Nove_slike' ),
        'Newpages'                  => array( 'Nove_stranice' ),
-       'Popularpages'              => array( 'Popularne_stranice' ),
        'Preferences'               => array( 'Postavke' ),
        'Prefixindex'               => array( 'Prefiks_indeks', 'Stranice_po_prefiksu' ),
        'Protectedpages'            => array( 'Zaštićene_stranice' ),
index 1ac48a0..e13e014 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'මගේ_සාකච්ඡාව' ),
        'Newimages'                 => array( 'නව_ගොනු', 'නව_රූප' ),
        'Newpages'                  => array( 'නව_පිටුව' ),
-       'Popularpages'              => array( 'ජනප්‍රිය_පිටු' ),
        'Preferences'               => array( 'අභිරුචියන්' ),
        'Prefixindex'               => array( 'උපසර්ග_සූචිය' ),
        'Protectedpages'            => array( 'ආරක්‍ෂිත_පිටුව' ),
index 83155da..26d474f 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojaDiskusia' ),
        'Newimages'                 => array( 'NovéSúbory' ),
        'Newpages'                  => array( 'NovéStránky' ),
-       'Popularpages'              => array( 'PopulárneStránky' ),
        'Preferences'               => array( 'Nastavenia' ),
        'Prefixindex'               => array( 'IndexPredpon' ),
        'Protectedpages'            => array( 'ZamknutéStránky' ),
index ea6b569..bc7afb9 100644 (file)
@@ -81,7 +81,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MojPogovor' ),
        'Newimages'                 => array( 'NoveDatoteke', 'NoveSlike' ),
        'Newpages'                  => array( 'NoveStrani' ),
-       'Popularpages'              => array( 'PriljubljeneStrani' ),
        'Preferences'               => array( 'Nastavitve' ),
        'Protectedpages'            => array( 'ZaščiteneStrani' ),
        'Protectedtitles'           => array( 'ZaščiteniNaslovi' ),
index 71180c3..c647010 100644 (file)
@@ -96,7 +96,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'NgarkimeteMia' ),
        'Newimages'                 => array( 'SkedaTëReja' ),
        'Newpages'                  => array( 'FaqeteReja' ),
-       'Popularpages'              => array( 'FaqetëFamshme' ),
        'Preferences'               => array( 'Preferencat' ),
        'Protectedpages'            => array( 'FaqeteMbrojtura' ),
        'Protectedtitles'           => array( 'TitujteMbrojtur' ),
index 0f89cca..a325067 100644 (file)
@@ -143,7 +143,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'НовеДатотеке', 'НовиФајлови', 'НовеСлике' ),
        'Newpages'                  => array( 'НовеСтране' ),
        'PermanentLink'             => array( 'Привремена_веза' ),
-       'Popularpages'              => array( 'Популарне_странице' ),
        'Preferences'               => array( 'Подешавања', 'Поставке' ),
        'Protectedpages'            => array( 'ЗаштићенеСтранице', 'Заштићене_странице' ),
        'Protectedtitles'           => array( 'ЗаштићениНаслови', 'Заштићени_наслови' ),
index 9092e9e..b4643f0 100644 (file)
@@ -88,7 +88,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'ObrolanKuring' ),
        'Newimages'                 => array( 'GambarAnyar' ),
        'Newpages'                  => array( 'KacaAnyar' ),
-       'Popularpages'              => array( 'KacaPayu' ),
        'Preferences'               => array( 'Preferensi' ),
        'Prefixindex'               => array( 'IndeksAwalan' ),
        'Protectedpages'            => array( 'KacaDikonci' ),
index 48e3511..f85659f 100644 (file)
@@ -156,7 +156,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Sidspråk' ),
        'PasswordReset'             => array( 'Återställ_lösenord' ),
        'PermanentLink'             => array( 'Permanent_länk' ),
-       'Popularpages'              => array( 'Populära_sidor' ),
        'Preferences'               => array( 'Inställningar' ),
        'Protectedpages'            => array( 'Skyddade_sidor' ),
        'Protectedtitles'           => array( 'Skyddade_titlar' ),
index c653de3..311b6cc 100644 (file)
@@ -89,7 +89,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'MajadilianoYangu' ),
        'Newimages'                 => array( 'FailiMpya', 'FailimpyazaPicha' ),
        'Newpages'                  => array( 'KurasaMpya' ),
-       'Popularpages'              => array( 'KurasaMaarufu' ),
        'Preferences'               => array( 'Mapendekezo' ),
        'Prefixindex'               => array( 'KurasaKuu' ),
        'Protectedpages'            => array( 'KurasaZilizolindwa' ),
index 5a5e44b..808df08 100644 (file)
@@ -101,7 +101,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'నాచర్చ' ),
        'Newimages'                 => array( 'కొత్తఫైళ్లు', 'కొత్తబొమ్మలు' ),
        'Newpages'                  => array( 'కొత్తపేజీలు' ),
-       'Popularpages'              => array( 'ప్రాచుర్యంపొందినపేజీలు' ),
        'Preferences'               => array( 'అభిరుచులు' ),
        'Protectedpages'            => array( 'సంరక్షితపేజీలు' ),
        'Randompage'                => array( 'యాదృచ్చికపేజీ' ),
index 140073a..99b2ab4 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'หน้าใหม่' ),
        'PasswordReset'             => array( 'ตั้งรหัสผ่านใหม่' ),
        'PermanentLink'             => array( 'ลิงก์ถาวร' ),
-       'Popularpages'              => array( 'หน้าที่ได้รับความนิยม' ),
        'Preferences'               => array( 'การตั้งค่า', 'ตั้งค่า' ),
        'Prefixindex'               => array( 'ดัชนีตามคำขึ้นต้น' ),
        'Protectedpages'            => array( 'หน้าที่ถูกป้องกัน' ),
index 799dc34..c111a02 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Bagong_mga_pahina' ),
        'PasswordReset'             => array( 'Muling_Pagtatakda_ng_Hudyat' ),
        'PermanentLink'             => array( 'Pamalagiang_Kawing' ),
-       'Popularpages'              => array( 'Sikat_na_mga_pahina' ),
        'Preferences'               => array( 'Mga_nais' ),
        'Prefixindex'               => array( 'Talatuntunan_ng_unlapi' ),
        'Protectedpages'            => array( 'Mga_pahinang_nakasanggalang' ),
index 0f61a96..ffd23f7 100644 (file)
@@ -153,7 +153,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'YeniSayfalar' ),
        'PasswordReset'             => array( 'ParolaSıfırlama' ),
        'PermanentLink'             => array( 'KalıcıBağ' ),
-       'Popularpages'              => array( 'PopülerSayfalar' ),
        'Preferences'               => array( 'Tercihler', 'Ayarlar' ),
        'Prefixindex'               => array( 'ÖnekDizini' ),
        'Protectedpages'            => array( 'KorunanSayfalar' ),
index 0487c8f..8a61e33 100644 (file)
@@ -145,7 +145,6 @@ $specialPageAliases = array(
        'Mytalk'                    => array( 'Бәхәсем' ),
        'Newimages'                 => array( 'Яңа_файл' ),
        'Newpages'                  => array( 'Яңа_бит' ),
-       'Popularpages'              => array( 'Популяр_битләр' ),
        'Preferences'               => array( 'Көйләнмәләр' ),
        'Protectedpages'            => array( 'Якланган_битләр' ),
        'Protectedtitles'           => array( 'Якланган_башлыклар' ),
index 2caaefa..4cc1859 100644 (file)
@@ -176,7 +176,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'Нові_сторінки' ),
        'PasswordReset'             => array( 'Скинути_пароль' ),
        'PermanentLink'             => array( 'Постійне_посилання' ),
-       'Popularpages'              => array( 'Популярні_сторінки' ),
        'Preferences'               => array( 'Налаштування' ),
        'Prefixindex'               => array( 'Покажчик_за_початком_назви' ),
        'Protectedpages'            => array( 'Захищені_сторінки' ),
index 81a6d2f..1de001a 100644 (file)
@@ -104,7 +104,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'جدید_املاف', 'جدید_تصاویر' ),
        'Newpages'                  => array( 'جدید_صفحات' ),
        'PermanentLink'             => array( 'مستقل_ربط' ),
-       'Popularpages'              => array( 'مقبول_صفحات' ),
        'Preferences'               => array( 'ترجیحات' ),
        'Prefixindex'               => array( 'اشاریہ_سابقہ' ),
        'Protectedpages'            => array( 'محفوظ_صفحات' ),
index 9242d83..ebfc64a 100644 (file)
@@ -117,7 +117,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( 'PagineNove' ),
        'PasswordReset'             => array( 'ReinpostaPassword' ),
        'PermanentLink'             => array( 'LinkParmanente' ),
-       'Popularpages'              => array( 'PaginePiassèVisità' ),
        'Preferences'               => array( 'Preferense' ),
        'Prefixindex'               => array( 'Prefissi' ),
        'Protectedpages'            => array( 'PagineProtete' ),
index 2724a60..56ee88c 100644 (file)
@@ -125,7 +125,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( 'Ngôn_ngữ_trang' ),
        'PasswordReset'             => array( 'Tái_tạo_mật_khẩu', 'Đặt_lại_mật_khẩu' ),
        'PermanentLink'             => array( 'Liên_kết_thường_trực' ),
-       'Popularpages'              => array( 'Trang_phổ_biến' ),
        'Preferences'               => array( 'Tùy_chọn', 'Tuỳ_chọn' ),
        'Prefixindex'               => array( 'Tiền_tố' ),
        'Protectedpages'            => array( 'Trang_khóa', 'Trang_khoá' ),
index ed61df4..37d7015 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Myuploads'                 => array( 'מיינע_ארויפלאדונגען' ),
        'Newimages'                 => array( 'נייע_בילדער' ),
        'Newpages'                  => array( 'נייע_בלעטער' ),
-       'Popularpages'              => array( 'פאפולערע_בלעטער' ),
        'Preferences'               => array( 'פרעפערענצן' ),
        'Prefixindex'               => array( 'בלעטער_וואס_הייבן_אן_מיט' ),
        'Protectedpages'            => array( 'געשיצטע_בלעטער' ),
index 8c4c93f..e1bb672 100644 (file)
@@ -151,7 +151,6 @@ $specialPageAliases = array(
        'Newpages'                  => array( '新版' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '永久鏈' ),
-       'Popularpages'              => array( '最歡迎頁' ),
        'Preferences'               => array( '喜好設定' ),
        'Prefixindex'               => array( '全部頁嘅前綴' ),
        'Protectedpages'            => array( '保護頁' ),
index 8ee87f0..617dd46 100644 (file)
@@ -144,7 +144,6 @@ $specialPageAliases = array(
        'Newimages'                 => array( '新建文件', '新建檔案' ),
        'Newpages'                  => array( '最新页面', '最新頁面' ),
        'PasswordReset'             => array( '重置密码', '重設密碼' ),
-       'Popularpages'              => array( '热点页面', '熱點頁面' ),
        'Preferences'               => array( '参数设置', '偏好設定', '參數設置' ),
        'Prefixindex'               => array( '前缀索引', '前綴索引', '字首索引' ),
        'Protectedpages'            => array( '已保护页面', '已保護頁面' ),
index 84d4373..57c9a61 100644 (file)
@@ -199,7 +199,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '页面语言' ),
        'PasswordReset'             => array( '重设密码' ),
        'PermanentLink'             => array( '固定链接', '永久链接' ),
-       'Popularpages'              => array( '热点页面' ),
        'Preferences'               => array( '参数设置', '设置' ),
        'Prefixindex'               => array( '前缀索引' ),
        'Protectedpages'            => array( '已保护页面' ),
index 6e5dea1..1f6bcfa 100644 (file)
@@ -183,7 +183,6 @@ $specialPageAliases = array(
        'PageLanguage'              => array( '頁面語言' ),
        'PasswordReset'             => array( '重設密碼' ),
        'PermanentLink'             => array( '靜態連結', '永久連結' ),
-       'Popularpages'              => array( '熱門頁面', '熱點頁面' ),
        'Preferences'               => array( '偏好設定' ),
        'Prefixindex'               => array( '字首索引', '前綴索引' ),
        'Protectedpages'            => array( '受保護頁面', '已保護頁面' ),
index 79f7254..861b364 100644 (file)
@@ -43,6 +43,14 @@ class CreateAndPromote extends Maintenance {
                foreach ( self::$permitRoles as $role ) {
                        $this->addOption( $role, "Add the account to the {$role} group" );
                }
+
+               $this->addOption(
+                       'custom-groups',
+                       'Comma-separated list of groups to add the user to',
+                       false,
+                       true
+               );
+
                $this->addArg( "username", "Username of new user" );
                $this->addArg( "password", "Password to set (not required if --force is used)", false );
        }
@@ -69,8 +77,19 @@ class CreateAndPromote extends Maintenance {
                        $inGroups = $user->getGroups();
                }
 
+               $groups = array_filter( self::$permitRoles, array( $this, 'hasOption' ) );
+               if ( $this->hasOption( 'custom-groups' ) ) {
+                       $customGroupsText = $this->getOption( 'custom-groups' );
+                       if ( $customGroupsText !== '' ) {
+                               $customGroups = explode( ',', $customGroupsText );
+                               foreach ( $customGroups as $customGroup ) {
+                                       $groups[] = trim( $customGroup );
+                               }
+                       }
+               }
+
                $promotions = array_diff(
-                       array_filter( self::$permitRoles, array( $this, 'hasOption' ) ),
+                       $groups,
                        $inGroups
                );
 
index 93507b3..e6321e1 100644 (file)
@@ -97,7 +97,6 @@ class DeleteBatch extends Maintenance {
                        }
 
                        $this->output( $title->getPrefixedText() );
-                       $dbw->begin( __METHOD__ );
                        if ( $title->getNamespace() == NS_FILE ) {
                                $img = wfFindFile( $title, array( 'ignoreRedirect' => true ) );
                                if ( $img && $img->isLocal() && !$img->delete( $reason ) ) {
@@ -106,8 +105,7 @@ class DeleteBatch extends Maintenance {
                        }
                        $page = WikiPage::factory( $title );
                        $error = '';
-                       $success = $page->doDeleteArticle( $reason, false, 0, false, $error, $user );
-                       $dbw->commit( __METHOD__ );
+                       $success = $page->doDeleteArticle( $reason, false, 0, true, $error, $user );
                        if ( $success ) {
                                $this->output( " Deleted!\n" );
                        } else {
index 5aeeb8e..a1c0f61 100644 (file)
@@ -76,10 +76,9 @@ class DeleteDefaultMessages extends Maintenance {
                        $dbw->ping();
                        $title = Title::makeTitle( $row->page_namespace, $row->page_title );
                        $page = WikiPage::factory( $title );
-                       $dbw->begin( __METHOD__ );
                        $error = ''; // Passed by ref
-                       $page->doDeleteArticle( 'No longer required', false, 0, false, $error, $user );
-                       $dbw->commit( __METHOD__ );
+                       // FIXME: Deletion failures should be reported, not silently ignored.
+                       $page->doDeleteArticle( 'No longer required', false, 0, true, $error, $user );
                }
 
                $this->output( "done!\n", 'msg' );
index dbe9698..478e0d7 100644 (file)
@@ -182,14 +182,20 @@ class DeleteEqualMessages extends Maintenance {
                        $this->output( "\n* [[$title]]" );
                        $page = WikiPage::factory( $title );
                        $error = ''; // Passed by ref
-                       $page->doDeleteArticle( 'No longer required', false, 0, false, $error, $user );
+                       $success = $page->doDeleteArticle( 'No longer required', false, 0, true, $error, $user );
+                       if ( !$success ) {
+                               $this->output( " (Failed!)" );
+                       }
                        if ( $result['hasTalk'] && $doDeleteTalk ) {
                                $title = Title::makeTitle( NS_MEDIAWIKI_TALK, $result['title'] );
                                $this->output( "\n* [[$title]]" );
                                $page = WikiPage::factory( $title );
                                $error = ''; // Passed by ref
-                               $page->doDeleteArticle( 'Orphaned talk page of no longer required message',
-                                       false, 0, false, $error, $user );
+                               $success = $page->doDeleteArticle( 'Orphaned talk page of no longer required message',
+                                       false, 0, true, $error, $user );
+                               if ( !$success ) {
+                                       $this->output( " (Failed!)" );
+                               }
                        }
                }
                $this->output( "\n\ndone!\n" );
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 5cf4536..114366b 100644 (file)
@@ -72,6 +72,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/api/',
                        $IP . '/includes/cache/',
                        $IP . '/includes/changes/',
+                       $IP . '/includes/changetags/',
                        $IP . '/includes/clientpool/',
                        $IP . '/includes/content/',
                        $IP . '/includes/context/',
@@ -80,6 +81,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/debug/',
                        $IP . '/includes/deferred/',
                        $IP . '/includes/diff/',
+                       $IP . '/includes/exception/',
                        $IP . '/includes/externalstore/',
                        $IP . '/includes/filebackend/',
                        $IP . '/includes/filerepo/',
@@ -95,6 +97,7 @@ class FindHooks extends Maintenance {
                        $IP . '/includes/media/',
                        $IP . '/includes/page/',
                        $IP . '/includes/parser/',
+                       $IP . '/includes/password/',
                        $IP . '/includes/rcfeed/',
                        $IP . '/includes/resourceloader/',
                        $IP . '/includes/revisiondelete/',
@@ -119,9 +122,9 @@ class FindHooks extends Maintenance {
                }
 
                $potential = array_unique( $potential );
-               $bad = array_unique( $bad );
-               $todo = array_diff( $potential, $documented );
-               $deprecated = array_diff( $documented, $potential );
+               $bad = array_diff( array_unique( $bad ), self::$ignore );
+               $todo = array_diff( $potential, $documented, self::$ignore );
+               $deprecated = array_diff( $documented, $potential, self::$ignore );
 
                // let's show the results:
                $this->printArray( 'Undocumented', $todo );
@@ -130,6 +133,8 @@ class FindHooks extends Maintenance {
 
                if ( count( $todo ) == 0 && count( $deprecated ) == 0 && count( $bad ) == 0 ) {
                        $this->output( "Looks good!\n" );
+               } else {
+                       $this->error( 'The script finished with errors.', 1 );
                }
        }
 
@@ -287,9 +292,7 @@ class FindHooks extends Maintenance {
                }
 
                foreach ( $arr as $v ) {
-                       if ( !in_array( $v, self::$ignore ) ) {
-                               $this->output( "$msg: $v\n" );
-                       }
+                       $this->output( "$msg: $v\n" );
                }
        }
 }
diff --git a/maintenance/fixSlaveDesync.php b/maintenance/fixSlaveDesync.php
deleted file mode 100644 (file)
index a5418ce..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-<?php
-/**
- * Fix erroneous page_latest values due to slave desynchronisation.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Maintenance script that fixes erroneous page_latest values
- * due to slave desynchronisation.
- *
- * @ingroup Maintenance
- */
-class FixSlaveDesync extends Maintenance {
-       /** @var array */
-       private $slaveIndexes;
-
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "";
-       }
-
-       public function getDbType() {
-               return Maintenance::DB_ADMIN;
-       }
-
-       public function execute() {
-               $this->slaveIndexes = array();
-               $serverCount = wfGetLB()->getServerCount();
-               for ( $i = 1; $i < $serverCount; $i++ ) {
-                       if ( wfGetLB()->isNonZeroLoad( $i ) ) {
-                               $this->slaveIndexes[] = $i;
-                       }
-               }
-
-               if ( $this->hasArg() ) {
-                       $this->desyncFixPage( $this->getArg() );
-               } else {
-                       $corrupt = $this->findPageLatestCorruption();
-                       foreach ( $corrupt as $id => $dummy ) {
-                               $this->desyncFixPage( $id );
-                       }
-               }
-       }
-
-       /**
-        * Find all pages that have a corrupted page_latest
-        * @return array
-        */
-       private function findPageLatestCorruption() {
-               $desync = array();
-               $n = 0;
-               $dbw = wfGetDB( DB_MASTER );
-               $masterIDs = array();
-               $res = $dbw->select(
-                       'page',
-                       array( 'page_id', 'page_latest' ),
-                       array( 'page_id<6054123' ),
-                       __METHOD__
-               );
-               $this->output( "Number of pages: " . $res->numRows() . "\n" );
-               foreach ( $res as $row ) {
-                       $masterIDs[$row->page_id] = $row->page_latest;
-                       if ( !( ++$n % 10000 ) ) {
-                               $this->output( "$n\r" );
-                       }
-               }
-               $this->output( "\n" );
-
-               foreach ( $this->slaveIndexes as $i ) {
-                       $db = wfGetDB( $i );
-                       $res = $db->select(
-                               'page',
-                               array( 'page_id', 'page_latest' ),
-                               array( 'page_id<6054123' ),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               if ( isset( $masterIDs[$row->page_id] ) && $masterIDs[$row->page_id] != $row->page_latest ) {
-                                       $desync[$row->page_id] = true;
-                                       $this->output( $row->page_id . "\t" );
-                               }
-                       }
-               }
-               $this->output( "\n" );
-
-               return $desync;
-       }
-
-       /**
-        * Fix a broken page entry
-        * @param int $pageID The page_id to fix
-        */
-       private function desyncFixPage( $pageID ) {
-               # Check for a corrupted page_latest
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
-               $realLatest = $dbw->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ),
-                       __METHOD__, 'FOR UPDATE' );
-               # list( $masterFile, $masterPos ) = $dbw->getMasterPos();
-               $found = false;
-               foreach ( $this->slaveIndexes as $i ) {
-                       $db = wfGetDB( $i );
-                       /*
-                       if ( !$db->masterPosWait( $masterFile, $masterPos, 10 ) ) {
-                               $this->output( "Slave is too lagged, aborting\n" );
-                               $dbw->commit( __METHOD__ );
-                               sleep(10);
-                               return;
-                       }*/
-                       $latest = $db->selectField( 'page', 'page_latest', array( 'page_id' => $pageID ), __METHOD__ );
-                       $max = $db->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ );
-                       if ( $latest != $realLatest && $realLatest < $max ) {
-                               $this->output( "page_latest corrupted in page $pageID, server $i\n" );
-                               $found = true;
-                               break;
-                       }
-               }
-               if ( !$found ) {
-                       $this->output( "page_id $pageID seems fine\n" );
-                       $dbw->commit( __METHOD__ );
-
-                       return;
-               }
-
-               # Find the missing revisions
-               $res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ),
-                       __METHOD__, 'FOR UPDATE' );
-               $masterIDs = array();
-               foreach ( $res as $row ) {
-                       $masterIDs[] = $row->rev_id;
-               }
-
-               $res = $dbw->select( 'revision', array( 'rev_id' ), array( 'rev_page' => $pageID ), __METHOD__ );
-               $slaveIDs = array();
-               foreach ( $res as $row ) {
-                       $slaveIDs[] = $row->rev_id;
-               }
-               if ( count( $masterIDs ) < count( $slaveIDs ) ) {
-                       $missingIDs = array_diff( $slaveIDs, $masterIDs );
-                       if ( count( $missingIDs ) ) {
-                               $this->output( "Found " . count( $missingIDs )
-                                       . " lost in master, copying from slave... " );
-                               $dbFrom = $dbw;
-                               $found = true;
-                               $toMaster = true;
-                       } else {
-                               $found = false;
-                       }
-               } else {
-                       $missingIDs = array_diff( $masterIDs, $slaveIDs );
-                       if ( count( $missingIDs ) ) {
-                               $this->output( "Found " . count( $missingIDs )
-                                       . " missing revision(s), copying from master... " );
-                               $dbFrom = $dbw;
-                               $found = true;
-                               $toMaster = false;
-                       } else {
-                               $found = false;
-                       }
-               }
-
-               if ( $found ) {
-                       foreach ( $missingIDs as $rid ) {
-                               $this->output( "$rid " );
-                               # Revision
-                               $row = $dbFrom->selectRow( 'revision', '*', array( 'rev_id' => $rid ), __METHOD__ );
-                               if ( $toMaster ) {
-                                       $id = $dbw->selectField( 'revision', 'rev_id', array( 'rev_id' => $rid ),
-                                               __METHOD__, 'FOR UPDATE' );
-                                       if ( $id ) {
-                                               $this->output( "Revision already exists\n" );
-                                               $found = false;
-                                               break;
-                                       } else {
-                                               $dbw->insert( 'revision', get_object_vars( $row ), __METHOD__, 'IGNORE' );
-                                       }
-                               } else {
-                                       foreach ( $this->slaveIndexes as $i ) {
-                                               $db = wfGetDB( $i );
-                                               $db->insert( 'revision', get_object_vars( $row ), __METHOD__, 'IGNORE' );
-                                       }
-                               }
-
-                               # Text
-                               $row = $dbFrom->selectRow( 'text', '*', array( 'old_id' => $row->rev_text_id ), __METHOD__ );
-                               if ( $toMaster ) {
-                                       $dbw->insert( 'text', get_object_vars( $row ), __METHOD__, 'IGNORE' );
-                               } else {
-                                       foreach ( $this->slaveIndexes as $i ) {
-                                               $db = wfGetDB( $i );
-                                               $db->insert( 'text', get_object_vars( $row ), __METHOD__, 'IGNORE' );
-                                       }
-                               }
-                       }
-                       $this->output( "done\n" );
-               }
-
-               if ( $found ) {
-                       $this->output( "Fixing page_latest... " );
-                       if ( $toMaster ) {
-                               /*
-                               $dbw->update(
-                                       'page',
-                                       array( 'page_latest' => $realLatest ),
-                                       array( 'page_id' => $pageID ),
-                                       __METHOD__
-                               );
-                               */
-                       } else {
-                               foreach ( $this->slaveIndexes as $i ) {
-                                       $db = wfGetDB( $i );
-                                       $db->update(
-                                               'page',
-                                               array( 'page_latest' => $realLatest ),
-                                               array( 'page_id' => $pageID ),
-                                               __METHOD__
-                                       );
-                               }
-                       }
-                       $this->output( "done\n" );
-               }
-               $dbw->commit( __METHOD__ );
-       }
-}
-
-$maintClass = "FixSlaveDesync";
-require_once RUN_MAINTENANCE_IF_MAIN;
index d5f6834..5838201 100644 (file)
@@ -184,7 +184,7 @@ class GetConfiguration extends Maintenance {
                        }
 
                        return true;
-               } elseif ( is_scalar( $value ) ) {
+               } elseif ( is_scalar( $value ) || $value === null ) {
                        return true;
                }
 
index 91c60c1..4899143 100644 (file)
@@ -46,7 +46,6 @@ s23wiki|http://s23.org/wiki/$1|0|http://s23.org/w/api.php
 seattlewireless|http://seattlewireless.net/$1|0|
 senseislibrary|http://senseis.xmp.net/?$1|0|
 shoutwiki|http://www.shoutwiki.com/wiki/$1|0|http://www.shoutwiki.com/w/api.php
-sourceforge|http://sourceforge.net/$1|0|
 sourcewatch|http://www.sourcewatch.org/index.php?title=$1|0|http://www.sourcewatch.org/api.php
 squeak|http://wiki.squeak.org/squeak/$1|0|
 tejo|http://www.tejo.org/vikio/$1|0|
index 0628773..12352e7 100644 (file)
@@ -48,7 +48,6 @@ REPLACE INTO /*$wgDBprefix*/interwiki (iw_prefix,iw_url,iw_local,iw_api) VALUES
 ('seattlewireless','http://seattlewireless.net/$1',0,''),
 ('senseislibrary','http://senseis.xmp.net/?$1',0,''),
 ('shoutwiki','http://www.shoutwiki.com/wiki/$1',0,'http://www.shoutwiki.com/w/api.php'),
-('sourceforge','http://sourceforge.net/$1',0,''),
 ('sourcewatch','http://www.sourcewatch.org/index.php?title=$1',0,'http://www.sourcewatch.org/api.php'),
 ('squeak','http://wiki.squeak.org/squeak/$1',0,''),
 ('tejo','http://www.tejo.org/vikio/$1',0,''),
index 96c05a1..d142556 100644 (file)
                                        "mw.messagePoster.*",
                                        "mw.notification",
                                        "mw.Notification_",
+                                       "mw.storage",
                                        "mw.user",
                                        "mw.util",
                                        "mw.plugin.*",
-                                       "mw.cookie"
+                                       "mw.cookie",
+                                       "mw.experiments"
                                ]
                        },
                        {
@@ -39,7 +41,7 @@
                        },
                        {
                                "name": "API",
-                               "classes": ["mw.Api*"]
+                               "classes": ["mw.Api*", "mw.ForeignApi*"]
                        },
                        {
                                "name": "Language",
                        {
                                "name": "Interfaces",
                                "classes": [
-                                       "mw.Feedback",
-                                       "mw.Feedback.Dialog"
+                                       "mw.Feedback*",
+                                       "mw.Upload*",
+                                       "mw.ForeignUpload",
+                                       "mw.ForeignStructuredUpload"
                                ]
                        },
                        {
index 39589a0..cc8069d 100644 (file)
@@ -66,7 +66,7 @@ class SeeTag < CommonTag
     <<-EOHTML
       <h3 class="pa">Related</h3>
       <ul>
-      #{ context[@tagname].map { |tag| tag[:doc] }.join("\n") }
+      #{context[@tagname].map { |tag| tag[:doc] }.join("\n")}
       </ul>
     EOHTML
   end
@@ -102,7 +102,7 @@ class ContextTag < CommonTag
   def to_html(context)
     <<-EOHTML
       <h3 class="pa">Context</h3>
-      #{ context[@tagname].last[:doc] }
+      #{context[@tagname].last[:doc]}
     EOHTML
   end
 
index fca839d..2c42364 100644 (file)
                        log( error + '\n' + filePath + ':' + linerNr  );
                };
        </script>
-       <script src="modules/src/startup.js"></script>
        <script>
                function startUp() {
                        mw.config = new mw.Map();
                }
        </script>
        <script src="modules/lib/jquery/jquery.js"></script>
+       <script src="modules/lib/phpjs-sha1/sha1.js"></script>
        <script src="modules/src/mediawiki/mediawiki.js"></script>
        <script src="modules/src/mediawiki/mediawiki.errorLogger.js"></script>
        <script src="modules/src/mediawiki/mediawiki.startUp.js"></script>
index 4bb8369..c901240 100644 (file)
@@ -37,7 +37,6 @@
  * @alternateClassName jqXHR
  */
 
-
 /**
  * @class QUnit
  * @source <http://api.qunitjs.com/>
index d029bf7..52ed81f 100644 (file)
@@ -25,7 +25,8 @@ require_once __DIR__ . '/../Maintenance.php';
 
 /**
  * Generates the normalizer data file for Arabic.
- * For NFC see includes/compat/normal.
+ *
+ * This data file is used after normalizing to NFC.
  *
  * @ingroup MaintenanceLanguage
  */
index 770a98c..cb6ae69 100644 (file)
@@ -25,7 +25,8 @@ require_once __DIR__ . '/../Maintenance.php';
 
 /**
  * Generates the normalizer data file for Malayalam.
- * For NFC see includes/compat/normal.
+ *
+ * This data file is used after normalizing to NFC.
  *
  * @ingroup MaintenanceLanguage
  */
index 7e0270c..5518a88 100644 (file)
@@ -168,6 +168,7 @@ U+080DC胜|U+052DD勝|U+080DC胜|
 U+080E1胡|U+080E1胡|U+09B0D鬍|U+0885A衚|
 U+0810F脏|U+09AD2髒|U+081DF臟|
 U+0814A腊|U+081D8臘|U+0814A腊|
+U+0814C腌|U+09183醃|
 U+081F4致|U+081F4致|U+07DFB緻|
 U+0820D舍|U+0820D舍|U+06368捨|
 U+082B8芸|U+082B8芸|U+08553蕓|
index a3ea91c..3a00bd4 100644 (file)
@@ -32,7 +32,7 @@
 投機份子   投机分子
 一份子      一分子
 水份 水分
-氧份 
+氧份 
 糖份 糖分
 鹽份 盐分
 組份 组分
 乘著名      乘著名
 乘著錄      乘著录
 乘著稱      乘著称
+乘著称      乘著称
 乘著者      乘著者
 乘著述      乘著述
 爭著 争着
 亮著名      亮著名
 亮著錄      亮著录
 亮著稱      亮著称
+亮著称      亮著称
 亮著者      亮著者
 亮著述      亮著述
 仗著 仗着
 低著名      低著名
 低著錄      低著录
 低著稱      低著称
+低著称      低著称
 低著者      低著者
 低著述      低著述
 住著 住着
 住著名      住著名
 住著錄      住著录
 住著稱      住著称
+住著称      住著称
 住著者      住著者
 住著述      住著述
 側著 侧着
 保障著名   保障著名
 保障著錄   保障著录
 保障著稱   保障著称
+保障著称   保障著称
 保障著者   保障著者
 保障著述   保障著述
 信著 信着
 信著名      信著名
 信著錄      信著录
 信著稱      信著称
+信著称      信著称
 信著者      信著者
 信著述      信著述
 候著 候着
 光著名      光著名
 光著錄      光著录
 光著稱      光著称
+光著称      光著称
 光著者      光著者
 光著述      光著述
 關著 关着
 關著稱      关著称
 關著者      关著者
 關著述      关著述
-冀著 冀着
-冀著書      冀著书
-冀著作      冀著作
-冀著名      冀著名
-冀著錄      冀著录
-冀著稱      冀著称
-冀著者      冀著者
-冀著述      冀著述
+希冀著      希冀着
 冒著 冒着
 冒著書      冒著书
 冒著作      冒著作
 刻著名      刻著名
 刻著錄      刻著录
 刻著稱      刻著称
+刻著称      刻著称
 刻著者      刻著者
 刻著述      刻著述
 辦著 办着
 努力著名   努力著名
 努力著錄   努力著录
 努力著稱   努力著称
+努力著称   努力著称
 努力著者   努力著者
 努力著述   努力著述
-努著 努着
-努著書      努著书
-努著作      努著作
-努著名      努著名
-努著錄      努著录
-努著稱      努著称
-努著者      努著者
-努著述      努著述
 印著 印着
 印著書      印著书
 印著作      印著作
 壓著稱      压著称
 壓著者      压著者
 壓著述      压著述
-去著 去着
-去著書      去著书
-去著作      去著作
-去著名      去著名
-去著錄      去著录
-去著稱      去著称
-去著者      去著者
-去著述      去著述
 受著 受着
 受著書      受著书
 受著作      受著作
 味著名      味著名
 味著錄      味著录
 味著稱      味著称
+味著称      味著称
 味著者      味著者
 味著述      味著述
 響著 响着
 圍著稱      围著称
 圍著者      围著者
 圍著述      围著述
-在著 在着
-在著書      在著书
-在著作      在著作
-在著名      在著名
-在著錄      在著录
-在著稱      在著称
-在著者      在著者
-在著述      在著述
+存在著      存在着
 坐著 坐着
 坐著書      坐著书
 坐著作      坐著作
 夾著稱      夹著称
 夾著者      夹著者
 夾著述      夹著述
-孤著 孤着
-孤著書      孤著书
-孤著作      孤著作
-孤著名      孤著名
-孤著錄      孤著录
-孤著稱      孤著称
-孤著者      孤著者
-孤著述      孤著述
 學著 学着
 學著書      学著书
 學著作      学著作
 守著名      守著名
 守著錄      守著录
 守著稱      守著称
+守著称      守著称
 守著者      守著者
 守著述      守著述
 定著 定着
 定著名      定著名
 定著錄      定著录
 定著稱      定著称
+定著称      定著称
 定著者      定著者
 定著述      定著述
 對著 对着
 應著稱      应著称
 應著者      应著者
 應著述      应著述
-康著 康着
-康著書      康著书
-康著作      康著作
-康著名      康著名
-康著錄      康著录
-康著稱      康著称
-康著者      康著者
-康著述      康著述
 開著 开着
 開著書      开著书
 開著作      开著作
 心著名      心著名
 心著錄      心著录
 心著稱      心著称
+心著称      心著称
 心著者      心著者
 心著述      心著述
 忍著 忍着
 忍著稱      忍著称
 忍著者      忍著者
 忍著述      忍著述
-志著 志着
-志著書      志著书
-志著作      志著作
-志著名      志著名
-志著錄      志著录
-志著稱      志著称
-志著者      志著者
-志著述      志著述
+標志著      标志着
 忙著 忙着
 忙著書      忙著书
 忙著作      忙著作
 急著稱      急著称
 急著者      急著者
 急著述      急著述
-性著 性着
-性著書      性著书
-性著作      性著作
-性著名      性著名
-性著錄      性著录
-性著稱      性著称
-性著者      性著者
-性著述      性著述
 戀著 恋着
 戀著書      恋著书
 戀著作      恋著作
 想著名      想著名
 想著錄      想著录
 想著稱      想著称
+想著称      想著称
 想著者      想著者
 想著述      想著述
 戰著 战着
 潤著稱      润著称
 潤著者      润著者
 潤著述      润著述
-涵著 涵着
-涵著書      涵著书
-涵著作      涵著作
-涵著名      涵著名
-涵著錄      涵著录
-涵著稱      涵著称
-涵著者      涵著者
-涵著述      涵著述
+蘊涵著      蕴涵着
 渴著 渴着
 渴著書      渴著书
 渴著作      渴著作
 牽著稱      牵著称
 牽著者      牵著者
 牽著述      牵著述
-獨著 独着
-獨著書      独著书
-獨著作      独著作
-獨著名      独著名
-獨著錄      独著录
-獨著稱      独著称
-獨著者      独著者
-獨著述      独著述
 猜著 猜着
 猜著書      猜着书
 猜著作      猜著作
 盯著稱      盯著称
 盯著者      盯著者
 盯著述      盯著述
-盾著 盾着
-盾著書      盾著书
-盾著作      盾著作
-盾著名      盾著名
-盾著錄      盾著录
-盾著稱      盾著称
-盾著者      盾著者
-盾著述      盾著述
+矛盾著      矛盾着
 看著 看着
 看著書      看着书
 看著作      看著作
 瞧著述      瞧著述
 存著 存着
 存著名      存著名
+存著作      存著作
 劃著 划着
 別著 别着
 刮著 刮着
 美著名      美著名
 美著錄      美著录
 美著稱      美著称
+美著称      美著称
 美著者      美著者
 美著述      美著述
 耀著 耀着
 膠著稱      胶著称
 膠著者      胶著者
 膠著述      胶著述
-藝著 艺着
-藝著書      艺著书
-藝著作      艺著作
-藝著名      艺著名
-藝著錄      艺著录
-藝著稱      艺著称
-藝著者      艺著者
-藝著述      艺著述
 苦著 苦着
 苦著書      苦著书
 苦著作      苦著作
 衣著名      衣著名
 衣著錄      衣著录
 衣著稱      衣著称
+衣著称      衣著称
 衣著者      衣著者
 衣著述      衣著述
 裝著 装着
 語著稱      语著称
 語著者      语著者
 語著述      语著述
-豫著 豫着
-豫著書      豫著书
-豫著作      豫著作
-豫著名      豫著名
-豫著錄      豫著录
-豫著稱      豫著称
-豫著者      豫著者
-豫著述      豫著述
-貞著 贞着
-貞著書      贞著书
-貞著作      贞著作
-貞著名      贞著名
-貞著錄      贞著录
-貞著稱      贞著称
-貞著者      贞著者
-貞著述      贞著述
+猶豫著      犹豫着
+堅貞著      坚贞着
+忠貞著      忠贞着
 走著 走着
 走著書      走著书
 走著作      走著作
 達著稱      达著称
 達著者      达著者
 達著述      达著述
-遠著 远着
-遠著書      远著书
-遠著作      远著作
-遠著名      远著名
-遠著錄      远著录
-遠著稱      远著称
-遠著者      远著者
-遠著述      远著述
 連著 连着
 連著書      连著书
 連著作      连著作
 遇著名      遇著名
 遇著錄      遇著录
 遇著稱      遇著称
+遇著称      遇著称
 遇著者      遇著者
 遇著述      遇著述
 配著 配着
 雅著名      雅著名
 雅著錄      雅著录
 雅著稱      雅著称
+雅著称      雅著称
 雅著者      雅著者
 雅著述      雅著述
 頂著 顶着
 高著名      高著名
 高著錄      高著录
 高著稱      高著称
+高著称      高著称
 高著者      高著者
 高著述      高著述
-髭著 髭着
-髭著書      髭著书
-髭著作      髭著作
-髭著名      髭著名
-髭著錄      髭著录
-髭著稱      髭著称
-髭著者      髭著者
-髭著述      髭著述
 黏著 黏着
 黏著書      黏著书
 黏著作      黏著作
 衝著 冲着
 沖著 冲着
 沖著《      冲著《
+沖著(      冲著(
 沖著。      冲著。
 沖著,      冲著,
+立著 立着
+立著名      立著名
+立著作      立著作
+立著者      立著者
+立著稱      立著称
+立著称      立著称
+立著有      立著有
+立著《      立著《
+立著(      立著(
 繫著 系着
 颳著 刮着
 鬥著 斗着
 分佈著      分布着
 散布著      散布着
 散佈著      散布着
+遍佈著      遍布着
+遍布著      遍布着
 三十六著   三十六着
 走為上著   走为上着
 記憶體      内存
 多明尼加   多米尼加
 頻寬 带宽
 數位相機   数码相机
+數位照相機        数码照相机
 單眼相機   单反相机
 單鏡反光機        单反相机
+桌上型電腦        台式电脑
 韌體 固件
 唯讀 只读
 作業系統   操作系统
@@ -2601,6 +2515,7 @@ IP位址  IP地址
 結他 吉他
 了結他      了结他
 連結他      连结他
+鏈結 链接
 已開發國家        发达国家
 太空飛行員        宇航员
 太空衣      宇航服
index f6a277b..525100e 100644 (file)
@@ -39,7 +39,9 @@
 秀发布      秀發佈
 并发布      並發佈
 分布 分佈
+分布于      分佈於
 宣布 宣佈
+承宣布政   承宣布政
 公布 公佈
 摆布 擺佈
 擺布 擺佈
 屋里 屋裏
 屯里 屯裏
 巷里 巷裏
-市里 市裏
+城市里      城市裏
+都市里      都市裏
+市里的      市裏的
 年代里      年代裏
 年里 年裏
 店里 店裏
 框里 框裏
 碗里 碗裏
 电梯里      電梯裏
+个月里      個月裏
+月裡来      月裏來
+分钟里      分鐘裏
+小时里      小時裏
 苑裡 苑裡
 霄裡 霄裡
 岸裡 岸裡
 動著 動着
 鬥著 鬥着
 斗着 鬥着
-獨著 獨着
 對著 對着
\9b¾è\91\97 盾着
\9f\9bç\9b¾è\91\97      ç\9f\9b盾着
 犯得著      犯得着
 犯不著      犯不着
 福著 福着
 高著 高着
 隔著 隔着
 跟著 跟着
-孤著 孤着
 關著 關着
 管著 管着
 慣著 慣着
 獲著 獲着
 急著 急着
 記著 記着
\86\80è\91\97 冀着
¸\8cå\86\80è\91\97      å¸\8c冀着
 夾著 夾着
 駕著 駕着
 見著 見着
 看得著      看得着
 看不著      看不着
 看著 看着
-康著 康着
 扛著 扛着
 考著 考着
 渴著 渴着
 拿著 拿着
 逆著 逆着
 釀著 釀着
-努著 努着
 趴著 趴着
 跑著 跑着
 陪著 陪着
 騎著 騎着
 牽著 牽着
 求著 求着
-去著 去着
 嚷著 嚷着
 繞著 繞着
 忍著 忍着
 心著 心着
 信著 信着
 行著 行着
-性著 性着
 學著 學着
 尋著 尋着
 循著 循着
 衣著 衣着
 疑著 疑着
 溢著 溢着
-藝著 藝着
 因著 因着
 印著 印着
 應著 應着
 有著 有着
 與著 與着
 語著 語着
-豫著 豫着
-遠著 遠着
+猶豫著      猶豫着
 躍著 躍着
 雜著 雜着
 載著 載着
\9c¨è\91\97 在着
­\98å\9c¨è\91\97      å­\98在着
 紮著 紮着
 展著 展着
 占着 佔着
 找不著      找不着
 照著 照着
 罩著 罩着
-貞著 貞着
+堅貞著      堅貞着
+忠貞著      忠貞着
 枕著 枕着
 爭著 爭着
 掙著 掙着
 轉著 轉着
 裝著 裝着
 追著 追着
-髭著 髭着
 走著 走着
 坐著 坐着
 做著 做着
 含著 含着
-涵著 涵着
+蘊涵著      蘊涵着
 演著 演着
 保障著      保障着
 黏著 黏着
 乘著名      乘著名
 乘著述      乘著述
 乘著稱      乘著稱
+乘著称      乘著稱
 乘著錄      乘著錄
 乘著書      乘著書
 持著作      持著作
 低著名      低著名
 低著述      低著述
 低著稱      低著稱
+低著称      低著稱
 低著錄      低著錄
 低著書      低著書
 點著作      點著作
 定著名      定著名
 定著述      定著述
 定著稱      定著稱
+定著称      定著稱
 定著錄      定著錄
 定著書      定著書
 動著作      動著作
 鬥著稱      鬥著稱
 鬥著錄      鬥著錄
 鬥著書      鬥著書
-獨著作      獨著作
-獨著者      獨著者
-獨著名      獨著名
-獨著述      獨著述
-獨著稱      獨著稱
-獨著錄      獨著錄
-獨著書      獨著書
 對著作      對著作
 對著者      對著者
 對著名      對著名
 對著稱      對著稱
 對著錄      對著錄
 對著書      對著書
-盾著作      盾著作
-盾著者      盾著者
-盾著名      盾著名
-盾著述      盾著述
-盾著稱      盾著稱
-盾著錄      盾著錄
-盾著書      盾著書
 犯不著作   犯不著作
 犯不著者   犯不著者
 犯不著名   犯不著名
 高著名      高著名
 高著述      高著述
 高著稱      高著稱
+高著称      高著稱
 高著錄      高著錄
 高著書      高著書
 隔著作      隔著作
 跟著稱      跟著稱
 跟著錄      跟著錄
 跟著書      跟著書
-孤著作      孤著作
-孤著者      孤著者
-孤著名      孤著名
-孤著述      孤著述
-孤著稱      孤著稱
-孤著錄      孤著錄
-孤著書      孤著書
 關著作      關著作
 關著者      關著者
 關著名      關著名
 光著名      光著名
 光著述      光著述
 光著稱      光著稱
+光著称      光著稱
 光著錄      光著錄
 光著書      光著書
 跪著作      跪著作
 記著稱      記著稱
 記著錄      記著錄
 記著書      記著書
-冀著作      冀著作
-冀著者      冀著者
-冀著名      冀著名
-冀著述      冀著述
-冀著稱      冀著稱
-冀著錄      冀著錄
-冀著書      冀著書
 夾著作      夾著作
 夾著者      夾著者
 夾著名      夾著名
 看著稱      看著稱
 看著錄      看著錄
 看著書      看著書
-康著作      康著作
-康著者      康著者
-康著名      康著名
-康著述      康著述
-康著稱      康著稱
-康著錄      康著錄
-康著書      康著書
 扛著作      扛著作
 扛著者      扛著者
 扛著名      扛著名
 刻著名      刻著名
 刻著述      刻著述
 刻著稱      刻著稱
+刻著称      刻著稱
 刻著錄      刻著錄
 刻著書      刻著書
 空著作      空著作
 努力著名   努力著名
 努力著述   努力著述
 努力著稱   努力著稱
+努力著称   努力著稱
 努力著錄   努力著錄
 努力著書   努力著書
 麗著作      麗著作
 亮著名      亮著名
 亮著述      亮著述
 亮著稱      亮著稱
+亮著称      亮著稱
 亮著錄      亮著錄
 亮著書      亮著書
 臨著作      臨著作
 美著名      美著名
 美著述      美著述
 美著稱      美著稱
+美著称      美著稱
 美著錄      美著錄
 美著書      美著書
 夢著作      夢著作
 釀著稱      釀著稱
 釀著錄      釀著錄
 釀著書      釀著書
-努著作      努著作
-努著者      努著者
-努著名      努著名
-努著述      努著述
-努著稱      努著稱
-努著錄      努著錄
-努著書      努著書
 趴著作      趴著作
 趴著者      趴著者
 趴著名      趴著名
 求著稱      求著稱
 求著錄      求著錄
 求著書      求著書
-去著作      去著作
-去著者      去著者
-去著名      去著名
-去著述      去著述
-去著稱      去著稱
-去著錄      去著錄
-去著書      去著書
 嚷著作      嚷著作
 嚷著者      嚷著者
 嚷著名      嚷著名
 守著名      守著名
 守著述      守著述
 守著稱      守著稱
+守著称      守著稱
 守著錄      守著錄
 守著書      守著書
 受著作      受著作
 味著名      味著名
 味著述      味著述
 味著稱      味著稱
+味著称      味著稱
 味著錄      味著錄
 味著書      味著書
 想著作      想著作
 想著名      想著名
 想著述      想著述
 想著稱      想著稱
+想著称      想著稱
 想著錄      想著錄
 想著書      想著書
 響著作      響著作
 心著名      心著名
 心著述      心著述
 心著稱      心著稱
+心著称      心著稱
 心著錄      心著錄
 心著書      心著書
 信著作      信著作
 信著名      信著名
 信著述      信著述
 信著稱      信著稱
+信著称      信著稱
 信著錄      信著錄
 信著書      信著書
 行著作      行著作
 行著稱      行著稱
 行著錄      行著錄
 行著書      行著書
-性著作      性著作
-性著者      性著者
-性著名      性著名
-性著述      性著述
-性著稱      性著稱
-性著錄      性著錄
-性著書      性著書
 學著作      學著作
 學著者      學著者
 學著名      學著名
 雅著名      雅著名
 雅著述      雅著述
 雅著稱      雅著稱
+雅著称      雅著稱
 雅著錄      雅著錄
 雅著書      雅著書
 沿著作      沿著作
 衣著名      衣著名
 衣著述      衣著述
 衣著稱      衣著稱
+衣著稱      衣著稱
 衣著錄      衣著錄
 衣著書      衣著書
 疑著作      疑著作
 溢著稱      溢著稱
 溢著錄      溢著錄
 溢著書      溢著書
-藝著作      藝著作
-藝著者      藝著者
-藝著名      藝著名
-藝著述      藝著述
-藝著稱      藝著稱
-藝著錄      藝著錄
-藝著書      藝著書
 因著作      因著作
 因著者      因著者
 因著名      因著名
 語著稱      語著稱
 語著錄      語著錄
 語著書      語著書
-豫著作      豫著作
-豫著者      豫著者
-豫著名      豫著名
-豫著述      豫著述
-豫著稱      豫著稱
-豫著錄      豫著錄
-豫著書      豫著書
-遠著作      遠著作
-遠著者      遠著者
-遠著名      遠著名
-遠著述      遠著述
-遠著稱      遠著稱
-遠著錄      遠著錄
-遠著書      遠著書
 躍著作      躍著作
 躍著者      躍著者
 躍著名      躍著名
 載著稱      載著稱
 載著錄      載著錄
 載著書      載著書
-在著作      在著作
-在著者      在著者
-在著名      在著名
-在著述      在著述
-在著稱      在著稱
-在著錄      在著錄
-在著書      在著書
 紮著作      紮著作
 紮著者      紮著者
 紮著名      紮著名
 罩著稱      罩著稱
 罩著錄      罩著錄
 罩著書      罩著書
-貞著作      貞著作
-貞著者      貞著者
-貞著名      貞著名
-貞著述      貞著述
-貞著稱      貞著稱
-貞著錄      貞著錄
-貞著書      貞著書
 枕著作      枕著作
 枕著者      枕著者
 枕著名      枕著名
 制著稱      制著稱
 制著錄      制著錄
 制著書      制著書
-志著作      志著作
-志著者      志著者
-志著名      志著名
-志著述      志著述
-志著稱      志著稱
-志著錄      志著錄
-志著書      志著書
 皺著作      皺著作
 皺著者      皺著者
 皺著名      皺著名
 追著稱      追著稱
 追著錄      追著錄
 追著書      追著書
-髭著作      髭著作
-髭著者      髭著者
-髭著名      髭著名
-髭著述      髭著述
-髭著稱      髭著稱
-髭著錄      髭著錄
-髭著書      髭著書
 走著作      走著作
 走著者      走著者
 走著名      走著名
 含著稱      含著稱
 含著錄      含著錄
 含著書      含著書
-涵著作      涵著作
-涵著者      涵著者
-涵著名      涵著名
-涵著述      涵著述
-涵著稱      涵著稱
-涵著錄      涵著錄
-涵著書      涵著書
 演著作      演著作
 演著者      演著者
 演著名      演著名
 遇著名      遇著名
 遇著述      遇著述
 遇著稱      遇著稱
+遇著称      遇著稱
 遇著錄      遇著錄
 遇著書      遇著書
 殺著作      殺著作
 著甚麽      着甚麽
 存著 存着
 存著名      存著名
+存著作      存著作
 劃著 劃着
 別著 別着
 刮著 刮着
 蓋著稱      蓋著稱
 蓋著作      蓋著作
 覆蓋著      覆蓋着
+立著 立着
+立著名      立著名
+立著作      立著作
+立著者      立著者
+立著稱      立著稱
+立著称      立著稱
+立著有      立著有
+立著《      立著《
+立著(      立著(
 固著 固着
 班固著      班固著
 面包著      面包着
 分佈著      分佈着
 散布著      散佈着
 散佈著      散佈着
+遍佈著      遍佈着
+遍布著      遍佈着
 三十六著   三十六着
 走為上著   走為上着
 鬧著 鬧着
 柯林頓      克林頓
 萨达姆      薩達姆
 贝克汉姆   碧咸
´\9då\85\8bæ¼¢      ç¢§å\92¸
²\9då\85\8bæ¼¢      ç¢§å\92¸
 迈克尔·欧文      米高·奧雲
 卡普里亚蒂        卡佩雅蒂
 马拉特·萨芬      馬拉特·沙芬
@@ -2966,8 +2883,11 @@ IP地址 IP位址
 牛轧 鳥結
 牛軋 鳥結
 數位相機   數碼相機
+數位照相機        数碼照相機
+数字照相机        数碼照相機
 單眼相機   單鏡反光機
 单反相机   單鏡反光機
+台式电脑   桌上型電腦
 形上學      形而上學
 吉尼斯世界纪录  健力士世界紀錄
 吉他 結他
index 61ffc4d..22456a7 100644 (file)
 划着船      划著船
 划着竹筏   划著竹筏
 划着独木舟        划著獨木舟
+着眼于      著眼於
 缺省 預設
 以太网      乙太網
 光盘 光碟
 磁盘 磁碟
 磁道 磁軌
 端口 埠
-算子 運算元
 芯片 晶片
 译码 解碼
 软驱 軟碟機
 数据库      資料庫
 打印机      印表機
 打印機      印表機
-字节 位元組
-字節 位元組
 打印 列印
-攻打印      攻打印
+攻打 攻打 #分詞用
+打印度      打印度
 硬件 硬體
 二极管      二極體
 二極管      二極體
 索贊尼辛   索忍尼辛
 瓦格纳      華格納
 毕加索      畢卡索
-碧å\92¸ è´\9då\85\8bæ¼¢
+碧å\92¸ è²\9då\85\8bæ¼¢
 梅尔·吉布森      梅爾·吉勃遜
 查韦斯      查維茲
 本杰明      班傑明
@@ -645,7 +644,11 @@ IP地址   IP位址
 數碼相機   數位相機
 單鏡反光機        單眼相機
 数码相机   數位相機
+数字照相机        數位照相機
+数码照相机        數位照相機
+數碼照相機        數位照相機
 单反相机   單眼相機
+台式电脑   桌上型電腦
 形而上學   形上學
 形而上学   形上學
 当且仅当   若且唯若
@@ -729,6 +732,8 @@ IP地址    IP位址
 數碼訊號   數位訊號
 移动网络   行動網路
 流動網絡   行動網路
+网络游戏   網路遊戲
+網絡遊戲   網路遊戲
 咪高峰      麥克風
 電單車      機車
 搜索引擎   搜尋引擎
index b825402..13a0b98 100644 (file)
@@ -2,7 +2,7 @@
 “    「
 ‘    『
 ’    』
-’s   ’s
+’s   ’s
 手塚治虫   手塚治虫
 無言不仇   無言不讎
 視如寇仇   視如寇讎
 涂謹申      涂謹申
 涂鴻欽      涂鴻欽
 涂壯勳      涂壯勳
-於姓 於姓
-於氏 於氏
-於夫羅      於夫羅
-於梨華      於梨華
 鄭凱云      鄭凱云
 筑陽 筑陽
 筑後 筑後
@@ -45,7 +41,6 @@
 拜托 拜託
 委托书      委託書
 委托 委託
-於夫罗      於夫羅
 府干預      府干預
 府干擾      府干擾
 頁面 頁面
@@ -74,9 +69,6 @@
 乾象曆      乾象曆
 乾象历      乾象曆
 不好干預   不好干預
-不干預      不干預
-不干擾      不干擾
-不干牠      不干牠
 范文瀾      范文瀾
 機械系      機械系
 頂多 頂多
 于國治      于國治
 于楓 于楓
 黎吉雲      黎吉雲
-于飛島      于飛島
+于飛 于飛
 鄉愿 鄉愿
 愿樸 愿樸
 謹愿 謹愿
 員山庄      員山庄
 昵称 暱稱
 單于 單于
-鮮于樞      鮮于樞
-鳳凰于飛   鳳凰于飛
+鮮于 鮮于
 賦范 賦范
 茅于軾      茅于軾
 陳有后      陳有后
 水里高級商工     水里高級商工
 水里鳳林   水里鳳林
 水里濁水溪        水里濁水溪
+洞里薩      洞里薩
 划不來      划不來
 划來划去   划來划去
 划動 划動
index bc4bff8..b97ca6e 100644 (file)
 乾剝剝
 乾刻版
 乾芻
-幹人
 乾產
 乾喬
 大目乾連
 乾巴
 偎乾
 眼乾
+瀝乾
+白乾兒
 肉絲麵
 薑絲
 反覆
 採區
 採運
 採風
+採血
 官地為寀
 寮寀
 蔘綏
 髮屋
 櫛髮工
 鬒髮
»¤äººé«®æ\8c\87
+人髮指
 爆發指數
 開發
 剪其髮
 鬆喉
 鬆化
 很鬆
+寬鬆鬆
+蓬鬆鬆
+輕鬆鬆
+鬆鬆地
 囉囉囌囌
 囉囌
 骨罈
 鹽打怎麼鹹
 鹹派
 鹹批
+鹹濕
+鹹豬
 錦綉花園
 籲天
 勃鬱
 幹事
 幹什麼
 幹細胞
+樹幹
 口燥唇乾
 舌乾唇焦
 不食乾腊
 乾鍋
 自乾五
 不乾膠
+老白乾
+乾姐
+乾紅葡萄酒
+乾白葡萄酒
 楨幹
 新幹縣
 誰幹的
 的幹將
 幹大事
 對着幹
+怎麼幹
+這麼幹
+幹這
+幹仗
 李連杰
 周杰
 杰倫
 叶韻
 叶音
 叶恭弘
-於1
-於2
-於3
-於4
-於5
-於6
-於7
-於8
-於9
-於0
-於一
-於二
-於三
-於四
-於五
-於六
-於七
-於八
-於九
-於十
-於半
-於1天 #分詞用
-於2天
-於3天
-於4天
-於5天
-於6天
-於7天
-於8天
-於9天
-於一天
-於二天
-於三天
-於四天
-於五天
-於六天
-於七天
-於八天
-於九天
-於十天
-於夫羅
-於梨華
 置於
 散於
 播於
 國於
 敗於
-於一役
 畢於
 畢業於
 寒於
 拘於
 插於
 中於
-於市
-於野
 敏於
 聽於
 短於
 成於
 樊於期
 淡於
-於陸
-於密
-於盡
 禍於
 格於
 猛於
 施於
-於牆
-於物
-於己
-於你
-於我
-於他
-於她
-於它
-於祂
 拒人於
 拒於
 潰於
 相於
 形於
 半於
-於始
-於終
 詢於
 美於
 醜於
 弱於
 差於
 劣於
-於美
-於醜
-於好
-於坏
-於強
-於弱
-於差
-於劣
-於垂
 染指於
-於火
-存十一於千百
 存於
-於勤
 隱於
 藏於
 嚴於
 寬於
-於幕
 給於
-於穆
-於呼哀哉
-於時
-於該
 危於
-於伏
-於何
-於家
-於國
-於潛縣
-於焉
 於徵
 離於
-於畢
 麗於
 下於
 亞於
 屑於
 絕於
 致於
-於行
 遜於
 任教於
 教於
 自於
 來於
 附於
-於人
-於世
 阻於
-於民
-於盲
-於色
 囿於
 直於
 建於
 都於
-於農
-於樂
-於前
 役於
-於心
-於法
-於事
 助於
 害於
 損於
 身於
 足於
 溢於
-於衷
 畏於
 視於
 衷於
 狃於
 疲於
 通於
-於途
 老於
 耿於
-於懷
 服於
 臻於
 匿於
 影相弔
 哀弔
 唁弔
-於水
 安於
 迫於
 罷於
 蹪於
-於敝
-於過
 甚於
 等於
 定於
 利於
 對於
-推舟於陸
-退藏於密
 歸於
 難於
 移禍於
 基於
 急於
 嫁禍於
-借聽於聾
 見於
 鑒於
-謹於心
-求道於盲
 始於
-於藍
 出於
 輕於
-行百里者半於九十
 幸於
 怠於
-詢於芻蕘
 止於
 至於
 拙於
 屬於
 浮於
 在於
-厝薪於火
 易於
 精於
 由於
-於此
-燕巢於幕
-於菟
-於乎
-於戲
-於邑
 補於
 位於
-於今
-於是
-於是乎
-於斯
 寓於
-月離於畢
-月麗於箕
 源於
 且於
 長於
 現於
 較於
-於之
 分布於
-散於
+散於
 優於
 早於
 晚於
 感於
+用於
+處於
+助於
+便於
+戰於
+葬於
+困於
+適於
+苦於
+落於
+取決於
+着眼於
 鬼谷子
 谷子敬
 洪谷子
 西米谷
 世田谷
-山谷道
 聖馬爾谷日
+澀谷區
+開山闢谷
+山谷 #分詞用
+溝谷
+曼谷
 于美人
 緊緻
 曰云
 鬥蛐
 鬥垮
 鬥敗
+鬥戰
 石樑
 木樑
 藏歷史
 賞讚
 讚唄
 點讚
+點個讚
 飛紮
 紮裹
 紮腳
 不占算
 不好干涉
 不好干預
-不干預
-不干涉
-不干休
-不干犯
-不干擾
-不干你
-不干我
-不干他
-不干她
-不干它
-不干事
 不斗膽
 不每只
 不采聲
 好斗篷
 好斗膽
 好斗蓬
+墨斗
 小几
 尸利
 尸祿
 尸臣
 尸鳩
+尸佼
+尸子
+尸羅精舍
+毗婆尸佛
+尸棄佛
 已占卜
 已占算
 并迭
 這裡
 中文裡
 洞裡
+洞里薩
 界裡
 眼睛裡
 百科裡
 網站裡
 行家裡手
 雲裡霧裡
+城市裡
+都市裡
+市裡的
+個月裡
+月裡來
+分鐘裡
+小時裡
 首發
 夸脫
 風采
 有只用
 葉叶琹
 胡子昂
+胡子嬰
 包括
 特别致
 分别致
 韶山沖
 于丹
-于樂
 于冕
-于軍
 于吉
 于堅
 于姓
 于靖
 于勒
 于格
+于飛
 于仁泰
 于會泳
 于偉國
 簡筑翎
 楊雅筑
 彭于晏
-尸羅精舍
 進制
 劉佳怜
 于小惠
 熊杰
 卜云吉
 黎吉雲
-于飛島
 代表
 水無怜奈
 賭后
 舞后
 甄后
 郭后
+高后
+升高後
+提高後
 0年 # 協助分詞
 1年
 2年
 于再清
 茅于軾
 張樂于張徐
-鮮于樞
+鮮于
+朝鮮於
 于寶軒
 于震
 於震前
 於震後
 於震中
 固定制
-毗婆尸佛
-尸棄佛
 划船
 划不來
 划拳
 余力為
 葉叶琴
 幾個
-澀谷區
 併發症
 併發重症
 併發模式
 羅馬曆
 羅馬歷史
 羅馬歷代
+曆數書
 你誇
 誇你
 誇我
 衝着
 確係
 乃係
-開山闢谷
 穀祿
 製衣
 巨製
 花葯
 聚葯雄蕊
 遺蹟
-開山闢谷
 受僱
 僱請
 僱車
 嫩薑
 酸薑
 薑啤
-鹹濕
 騰湧
 草蓆
 竹蓆
 被廢後
 蒸製
 烹製
+醃製
+和製漢
+壓製機
+壓製出
 體徵
 綜合徵
 价川
 梁啓超
 改制成
 王添灯
+腌臢
+風颳
+颳大風
+黃白術
index 18eab85..1f8a6e0 100644 (file)
 麵灰
 麵價
 承製
+樹榦
+白乾
+白干兒
+市裡
+于飛
+髮指
+鬆鬆
+于是
+于七
+于今
+曆數
+發矇
+不幹
+作姦犯科
+游牧民族
+穀道
diff --git a/maintenance/migrateFileRepoLayout.php b/maintenance/migrateFileRepoLayout.php
new file mode 100644 (file)
index 0000000..78587ce
--- /dev/null
@@ -0,0 +1,232 @@
+<?php
+/**
+ * Copy all files in FileRepo to an originals container using SHA1 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
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Copy all files in FileRepo to an originals container using SHA1 paths.
+ *
+ * This script should be run while the repo is still set to the old layout.
+ *
+ * @ingroup Maintenance
+ */
+class MigrateFileRepoLayout extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->mDescription = "Copy files in repo to a different layout.";
+               $this->addOption( 'oldlayout', "Old layout; one of 'name' or 'sha1'", true, true );
+               $this->addOption( 'newlayout', "New layout; one of 'name' or 'sha1'", true, true );
+               $this->addOption( 'since', "Copy only files from after this timestamp", false, true );
+               $this->setBatchSize( 50 );
+       }
+
+       public function execute() {
+               $oldLayout = $this->getOption( 'oldlayout' );
+               if ( !in_array( $oldLayout, array( 'name', 'sha1' ) ) ) {
+                       $this->error( "Invalid old layout.", 1 );
+               }
+               $newLayout = $this->getOption( 'newlayout' );
+               if ( !in_array( $newLayout, array( 'name', 'sha1' ) ) ) {
+                       $this->error( "Invalid new layout.", 1 );
+               }
+               $since = $this->getOption( 'since' );
+
+               $repo = $this->getRepo();
+
+               $be = $repo->getBackend();
+               if ( $be instanceof FileBackendDBRepoWrapper ) {
+                       $be = $be->getInternalBackend(); // avoid path translations for this script
+               }
+
+               $dbw = $repo->getMasterDB();
+
+               $origBase = $be->getContainerStoragePath( "{$repo->getName()}-original" );
+               $startTime = wfTimestampNow();
+
+               // Do current and archived versions...
+               $conds = array();
+               if ( $since ) {
+                       $conds[] = 'img_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $since ) );
+               }
+
+               $batch = array();
+               $lastName = '';
+               do {
+                       $res = $dbw->select( 'image', array( 'img_name', 'img_sha1' ),
+                               array_merge( array( 'img_name > ' . $dbw->addQuotes( $lastName ) ), $conds ),
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name' )
+                       );
+
+                       foreach ( $res as $row ) {
+                               $lastName = $row->img_name;
+                               $sha1 = $row->img_sha1;
+                               if ( !strlen( $sha1 ) ) {
+                                       $this->error( "Image SHA-1 not set for {$row->img_name}." );
+                               } else {
+                                       $file = $repo->newFile( $row->img_name );
+
+                                       if ( $oldLayout === 'sha1' ) {
+                                               $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                                       } else {
+                                               $spath = $file->getPath();
+                                       }
+
+                                       if ( $newLayout === 'sha1' ) {
+                                               $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                                       } else {
+                                               $dpath = $file->getPath();
+                                       }
+
+                                       $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
+                                       if ( !$status->isOK() ) {
+                                               $this->error( print_r( $status->getErrorsArray(), true ) );
+                                       }
+
+                                       $batch[] = array( 'op' => 'copy', 'overwrite' => true,
+                                               'src' => $spath, 'dst' => $dpath, 'img' => $row->img_name );
+                               }
+
+                               foreach ( $file->getHistory() as $ofile ) {
+                                       $sha1 = $ofile->getSha1();
+                                       if ( !strlen( $sha1 ) ) {
+                                               $this->error( "Image SHA-1 not set for {$ofile->getArchiveName()}." );
+                                               continue;
+                                       }
+
+                                       if ( $oldLayout === 'sha1' ) {
+                                               $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                                       } elseif ( $ofile->isDeleted( File::DELETED_FILE ) ) {
+                                               $spath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) .
+                                                       '/' . $repo->getDeletedHashPath( $sha1 ) .
+                                                       $sha1 . '.' . $ofile->getExtension();
+                                       } else {
+                                               $spath = $ofile->getPath();
+                                       }
+
+                                       if ( $newLayout === 'sha1' ) {
+                                               $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                                       } else {
+                                               $dpath = $ofile->getPath();
+                                       }
+
+                                       $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
+                                       if ( !$status->isOK() ) {
+                                               $this->error( print_r( $status->getErrorsArray(), true ) );
+                                       }
+                                       $batch[] = array( 'op' => 'copy', 'overwrite' => true,
+                                               'src' => $spath, 'dst' => $dpath, 'img' => $ofile->getArchiveName() );
+                               }
+
+                               if ( count( $batch ) >= $this->mBatchSize ) {
+                                       $this->runBatch( $batch, $be );
+                                       $batch = array();
+                               }
+                       }
+               } while ( $res->numRows() );
+
+               if ( count( $batch ) ) {
+                       $this->runBatch( $batch, $be );
+               }
+
+               // Do deleted versions...
+               $conds = array();
+               if ( $since ) {
+                       $conds[] = 'fa_deleted_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $since ) );
+               }
+
+               $batch = array();
+               $lastId = 0;
+               do {
+                       $res = $dbw->select( 'filearchive', array( 'fa_storage_key', 'fa_id', 'fa_name' ),
+                               array_merge( array( 'fa_id > ' . $dbw->addQuotes( $lastId ) ), $conds ),
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'fa_id' )
+                       );
+
+                       foreach ( $res as $row ) {
+                               $lastId = $row->fa_id;
+                               $sha1Key = $row->fa_storage_key;
+                               if ( !strlen( $sha1Key ) ) {
+                                       $this->error( "Image SHA-1 not set for file #{$row->fa_id} (deleted)." );
+                                       continue;
+                               }
+                               $sha1 = substr( $sha1Key, 0, strpos( $sha1Key, '.' ) );
+
+                               if ( $oldLayout === 'sha1' ) {
+                                       $spath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                               } else {
+                                       $spath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) .
+                                               '/' . $repo->getDeletedHashPath( $sha1Key ) . $sha1Key;
+                               }
+
+                               if ( $newLayout === 'sha1' ) {
+                                       $dpath = "{$origBase}/{$sha1[0]}/{$sha1[1]}/{$sha1[2]}/{$sha1}";
+                               } else {
+                                       $dpath = $be->getContainerStoragePath( "{$repo->getName()}-deleted" ) .
+                                               '/' . $repo->getDeletedHashPath( $sha1Key ) . $sha1Key;
+                               }
+
+                               $status = $be->prepare( array( 'dir' => dirname( $dpath ) ) );
+                               if ( !$status->isOK() ) {
+                                       $this->error( print_r( $status->getErrorsArray(), true ) );
+                               }
+
+                               $batch[] = array( 'op' => 'copy', 'src' => $spath, 'dst' => $dpath,
+                                       'overwriteSame' => true, 'img' => "(ID {$row->fa_id}) {$row->fa_name}" );
+
+                               if ( count( $batch ) >= $this->mBatchSize ) {
+                                       $this->runBatch( $batch, $be );
+                                       $batch = array();
+                               }
+                       }
+               } while ( $res->numRows() );
+
+               if ( count( $batch ) ) {
+                       $this->runBatch( $batch, $be );
+               }
+
+               $this->output( "Done (started $startTime)\n" );
+       }
+
+       protected function getRepo() {
+               return RepoGroup::singleton()->getLocalRepo();
+       }
+
+       protected function runBatch( array $ops, FileBackend $be ) {
+               $this->output( "Migrating file batch:\n" );
+               foreach ( $ops as $op ) {
+                       $this->output( "\"{$op['img']}\" (dest: {$op['dst']})\n" );
+               }
+
+               $status = $be->doOperations( $ops );
+               if ( !$status->isOK() ) {
+                       $this->output( print_r( $status->getErrorsArray(), true ) );
+               }
+
+               $this->output( "Batch done\n\n" );
+       }
+}
+
+$maintClass = 'MigrateFileRepoLayout';
+require_once RUN_MAINTENANCE_IF_MAIN;
index 96e01fe..088f677 100644 (file)
@@ -39,9 +39,12 @@ class NamespaceConflictChecker extends Maintenance {
         */
        protected $db;
 
-       private $resolvableCount = 0;
+       private $resolvablePages = 0;
        private $totalPages = 0;
 
+       private $resolvableLinks = 0;
+       private $totalLinks = 0;
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "";
@@ -172,7 +175,43 @@ class NamespaceConflictChecker extends Maintenance {
                }
 
                $this->output( "{$this->totalPages} pages to fix, " .
-                       "{$this->resolvableCount} were resolvable.\n" );
+                       "{$this->resolvablePages} were resolvable.\n\n" );
+
+               foreach ( $spaces as $name => $ns ) {
+                       if ( $ns != 0 ) {
+                               // Fix up link destinations for non-interwiki links only.
+                               //
+                               // For example if a page has [[Foo:Bar]] and then a Foo namespace
+                               // is introduced, pagelinks needs to be updated to have
+                               // page_namespace = NS_FOO.
+                               //
+                               // If instead an interwiki prefix was introduced called "Foo",
+                               // the link should instead be moved to the iwlinks table. If a new
+                               // language is introduced called "Foo", or if there is a pagelink
+                               // [[fr:Bar]] when interlanguage magic links are turned on, the
+                               // link would have to be moved to the langlinks table. Let's put
+                               // those cases in the too-hard basket for now. The consequences are
+                               // not especially severe.
+                               //
+                               // @fixme Handle interwiki links, and pagelinks to Category:, File:
+                               // which probably need reparsing.
+
+                               $this->checkLinkTable( 'pagelinks', 'pl', $ns, $name, $options );
+                               $this->checkLinkTable( 'templatelinks', 'tl', $ns, $name, $options );
+
+                               // The redirect table has interwiki links randomly mixed in, we
+                               // need to filter those out. For example [[w:Foo:Bar]] would
+                               // have rd_interwiki=w and rd_namespace=0, which would match the
+                               // query for a conflicting namespace "Foo" if filtering wasn't done.
+                               $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options,
+                                       array( 'rd_interwiki' => null ) );
+                               $this->checkLinkTable( 'redirect', 'rd', $ns, $name, $options,
+                                       array( 'rd_interwiki' => '' ) );
+                       }
+               }
+
+               $this->output( "{$this->totalLinks} links to fix, " .
+                       "{$this->resolvableLinks} were resolvable.\n" );
 
                return $ok;
        }
@@ -215,7 +254,8 @@ class NamespaceConflictChecker extends Maintenance {
 
                        // Find the new title and determine the action to take
 
-                       $newTitle = $this->getDestinationTitle( $ns, $name, $row, $options );
+                       $newTitle = $this->getDestinationTitle( $ns, $name,
+                               $row->page_namespace, $row->page_title, $options );
                        $logStatus = false;
                        if ( !$newTitle ) {
                                $logStatus = 'invalid title';
@@ -271,26 +311,101 @@ class NamespaceConflictChecker extends Maintenance {
                                                $newTitle->getPrefixedDBkey() . " (merge)$dryRunNote\n" );
 
                                        if ( $options['fix'] ) {
-                                               $pageOK = $this->mergePage( $row->page_id, $newTitle );
+                                               $pageOK = $this->mergePage( $row, $newTitle );
                                        }
                                        break;
                        }
 
                        if ( $pageOK ) {
-                               $this->resolvableCount++;
+                               $this->resolvablePages++;
                        } else {
                                $ok = false;
                        }
                }
 
-               // @fixme Also needs to do like self::getTargetList() on the
-               // *_namespace and *_title fields of pagelinks, templatelinks, and
-               // redirects, and schedule a LinksUpdate job or similar for each found
-               // *_from.
-
                return $ok;
        }
 
+       /**
+        * Check and repair the destination fields in a link table
+        * @param string $table The link table name
+        * @param string $fieldPrefix The field prefix in the link table
+        * @param int $ns Destination namespace id
+        * @param string $name
+        * @param array $options Associative array of validated command-line options
+        * @param array $extraConds Extra conditions for the SQL query
+        */
+       private function checkLinkTable( $table, $fieldPrefix, $ns, $name, $options,
+               $extraConds = array()
+       ) {
+               $batchConds = array();
+               $fromField = "{$fieldPrefix}_from";
+               $namespaceField = "{$fieldPrefix}_namespace";
+               $titleField = "{$fieldPrefix}_title";
+               $batchSize = 500;
+               while ( true ) {
+                       $res = $this->db->select(
+                               $table,
+                               array( $fromField, $namespaceField, $titleField ),
+                               array_merge( $batchConds, $extraConds, array(
+                                       $namespaceField => 0,
+                                       $titleField . $this->db->buildLike( "$name:", $this->db->anyString() )
+                               ) ),
+                               __METHOD__,
+                               array(
+                                       'ORDER BY' => array( $titleField, $fromField ),
+                                       'LIMIT' => $batchSize
+                               )
+                       );
+
+                       if ( $res->numRows() == 0 ) {
+                               break;
+                       }
+                       foreach ( $res as $row ) {
+                               $logTitle = "from={$row->$fromField} ns={$row->$namespaceField} " .
+                                       "dbk={$row->$titleField}";
+                               $destTitle = $this->getDestinationTitle( $ns, $name,
+                                       $row->$namespaceField, $row->$titleField, $options );
+                               $this->totalLinks++;
+                               if ( !$destTitle ) {
+                                       $this->output( "$table $logTitle *** INVALID\n" );
+                                       continue;
+                               }
+                               $this->resolvableLinks++;
+                               if ( !$options['fix'] ) {
+                                       $this->output( "$table $logTitle -> " .
+                                               $destTitle->getPrefixedDBkey() . " DRY RUN\n" );
+                                       continue;
+                               }
+
+                               $this->db->update( $table,
+                                       // SET
+                                       array(
+                                               $namespaceField => $destTitle->getNamespace(),
+                                               $titleField => $destTitle->getDBkey()
+                                       ),
+                                       // WHERE
+                                       array(
+                                               $namespaceField => 0,
+                                               $titleField => $row->$titleField,
+                                               $fromField => $row->$fromField
+                                       ),
+                                       __METHOD__
+                               );
+                               $this->output( "$table $logTitle -> " .
+                                       $destTitle->getPrefixedDBkey() . "\n" );
+                       }
+                       $encLastTitle = $this->db->addQuotes( $row->$titleField );
+                       $encLastFrom = $this->db->addQuotes( $row->$fromField );
+
+                       $batchConds = array(
+                               "$titleField > $encLastTitle " .
+                               "OR ($titleField = $encLastTitle AND $fromField > $encLastFrom)" );
+
+                       wfWaitForSlaves();
+               }
+       }
+
        /**
         * Move the given pseudo-namespace, either replacing the colon with a hyphen
         * (useful for pseudo-namespaces that conflict with interwiki links) or move
@@ -338,21 +453,22 @@ class NamespaceConflictChecker extends Maintenance {
        }
 
        /**
-        * Get the preferred destination title for a given target page row.
+        * Get the preferred destination title for a given target page.
         * @param integer $ns The destination namespace ID
         * @param string $name The conflicting prefix
-        * @param stdClass $row
+        * @param integer $sourceNs The source namespace
+        * @param integer $sourceDbk The source DB key (i.e. page_title)
         * @param array $options Associative array of validated command-line options
         * @return Title|false
         */
-       private function getDestinationTitle( $ns, $name, $row, $options ) {
-               $dbk = substr( $row->page_title, strlen( "$name:" ) );
+       private function getDestinationTitle( $ns, $name, $sourceNs, $sourceDbk, $options ) {
+               $dbk = substr( $sourceDbk, strlen( "$name:" ) );
                if ( $ns == 0 ) {
                        // An interwiki; try an alternate encoding with '-' for ':'
                        $dbk = "$name-" . $dbk;
                }
                $destNS = $ns;
-               if ( $row->page_namespace == NS_TALK && MWNamespace::isSubject( $ns ) ) {
+               if ( $sourceNs == NS_TALK && MWNamespace::isSubject( $ns ) ) {
                        // This is an associated talk page moved with the --move-talk feature.
                        $destNS = MWNamespace::getTalk( $destNS );
                }
@@ -392,8 +508,6 @@ class NamespaceConflictChecker extends Maintenance {
        /**
         * Move a page
         *
-        * @fixme Update pl_from_namespace etc.
-        *
         * @param integer $id The page_id
         * @param Title $newTitle The new title
         * @return bool
@@ -409,8 +523,20 @@ class NamespaceConflictChecker extends Maintenance {
                        ),
                        __METHOD__ );
 
-               // @fixme Needs updating the *_from_namespace fields in categorylinks,
-               // pagelinks, templatelinks and imagelinks.
+               // Update *_from_namespace in links tables
+               $fromNamespaceTables = array(
+                       array( 'pagelinks', 'pl' ),
+                       array( 'templatelinks', 'tl' ),
+                       array( 'imagelinks', 'il' ) );
+               foreach ( $fromNamespaceTables as $tableInfo ) {
+                       list( $table, $fieldPrefix ) = $tableInfo;
+                       $this->db->update( $table,
+                               // SET
+                               array( "{$fieldPrefix}_from_namespace" => $newTitle->getNamespace() ),
+                               // WHERE
+                               array( "{$fieldPrefix}_from" => $id ),
+                               __METHOD__ );
+               }
 
                return true;
        }
@@ -444,7 +570,17 @@ class NamespaceConflictChecker extends Maintenance {
         * @param integer $id The page_id
         * @param Title $newTitle The new title
         */
-       private function mergePage( $id, Title $newTitle ) {
+       private function mergePage( $row, Title $newTitle ) {
+               $id = $row->page_id;
+
+               // Construct the WikiPage object we will need later, while the
+               // page_id still exists. Note that this cannot use makeTitleSafe(),
+               // we are deliberately constructing an invalid title.
+               $sourceTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
+               $sourceTitle->resetArticleID( $id );
+               $wikiPage = new WikiPage( $sourceTitle );
+               $wikiPage->loadPageData( 'fromdbmaster' );
+
                $destId = $newTitle->getArticleId();
                $this->db->begin( __METHOD__ );
                $this->db->update( 'revision',
@@ -456,10 +592,18 @@ class NamespaceConflictChecker extends Maintenance {
 
                $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
 
-               // @fixme Need WikiPage::doDeleteUpdates() or similar to avoid orphan
-               // rows in the links tables.
-
+               // Call LinksDeletionUpdate to delete outgoing links from the old title,
+               // and update category counts.
+               //
+               // Calling external code with a fake broken Title is a fairly dubious
+               // idea. It's necessary because it's quite a lot of code to duplicate,
+               // but that also makes it fragile since it would be easy for someone to
+               // accidentally introduce an assumption of title validity to the code we
+               // are calling.
+               $update = new LinksDeletionUpdate( $wikiPage );
+               $update->doUpdate();
                $this->db->commit( __METHOD__ );
+
                return true;
        }
 }
index 7b05cb7..d655965 100644 (file)
@@ -89,11 +89,10 @@ class CLIParser extends Maintenance {
         * @return string Wikitext
         */
        protected function Wikitext() {
-
                $php_stdin = 'php://stdin';
                $input_file = $this->getArg( 0, $php_stdin );
 
-               if ( $input_file === $php_stdin ) {
+               if ( $input_file === $php_stdin && !$this->mQuiet ) {
                        $ctrl = wfIsWindows() ? 'CTRL+Z' : 'CTRL+D';
                        $this->error( basename( __FILE__ )
                                . ": warning: reading wikitext from STDIN. Press $ctrl to parse.\n" );
diff --git a/maintenance/postgres/archives/patch-textsearch_bug66650.sql b/maintenance/postgres/archives/patch-textsearch_bug66650.sql
new file mode 100644 (file)
index 0000000..e4f5681
--- /dev/null
@@ -0,0 +1,5 @@
+UPDATE /*_*/pagecontent SET textvector=to_tsvector(old_text)
+WHERE textvector IS NULL AND old_id IN 
+(SELECT  max(rev_text_id) FROM revision GROUP BY rev_page);
+
+INSERT INTO /*_*/updatelog(ul_key) VALUES ('patch-textsearch_bug66650.sql');
index 7761d0c..b858551 100644 (file)
@@ -27,3 +27,8 @@ INSERT INTO /*_*/updatelog (ul_key, ul_value)
        VALUES( 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null );
 INSERT INTO /*_*/updatelog (ul_key, ul_value)
        VALUES( 'user_properties-up_property-patch-up_property.sql', null );
+
+-- PostgreSQL-specific patches.
+
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'patch-textsearch_bug66650.sql', null );
index 47866dc..f89877e 100644 (file)
@@ -48,14 +48,6 @@ class RebuildLocalisationCache extends Maintenance {
                        false, true );
        }
 
-       public function memoryLimit() {
-               if ( $this->hasOption( 'memory-limit' ) ) {
-                       return parent::memoryLimit();
-               }
-
-               return '1000M';
-       }
-
        public function finalSetup() {
                # This script needs to be run to build the inital l10n cache. But if
                # $wgLanguageCode is not 'en', it won't be able to run because there is
index 5d311ad..06e1449 100644 (file)
@@ -73,7 +73,7 @@ class RefreshLinks extends Maintenance {
        private function doRefreshLinks( $start, $newOnly = false,
                $end = null, $redirectsOnly = false, $oldRedirectsOnly = false
        ) {
-               global $wgParser, $wgUseTidy;
+               global $wgParser;
 
                $reportingInterval = 100;
                $dbr = wfGetDB( DB_SLAVE );
@@ -88,9 +88,6 @@ class RefreshLinks extends Maintenance {
                # Don't generate extension images (e.g. Timeline)
                $wgParser->clearTagHooks();
 
-               # Don't use HTML tidy
-               $wgUseTidy = false;
-
                $what = $redirectsOnly ? "redirects" : "links";
 
                if ( $oldRedirectsOnly ) {
@@ -327,13 +324,14 @@ class RefreshLinks extends Maintenance {
 
                foreach ( $linksTables as $table => $field ) {
                        $this->output( "    $table: 0" );
+                       $tableStart = $start;
                        $counter = 0;
                        do {
                                $ids = $dbr->selectFieldValues(
                                        $table,
                                        $field,
                                        array(
-                                               self::intervalCond( $dbr, $field, $start, $end ),
+                                               self::intervalCond( $dbr, $field, $tableStart, $end ),
                                                "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
                                        ),
                                        __METHOD__,
@@ -343,17 +341,15 @@ class RefreshLinks extends Maintenance {
                                $numIds = count( $ids );
                                if ( $numIds ) {
                                        $counter += $numIds;
-                                       wfWaitForSlaves();
                                        $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
                                        $this->output( ", $counter" );
-                                       $start = $ids[$numIds - 1] + 1;
+                                       $tableStart = $ids[$numIds - 1] + 1;
+                                       wfWaitForSlaves();
                                }
 
-                       } while ( $numIds >= $batchSize && ( $end === null || $start <= $end ) );
+                       } while ( $numIds >= $batchSize && ( $end === null || $tableStart <= $end ) );
 
                        $this->output( " deleted.\n" );
-
-                       wfWaitForSlaves();
                }
        }
 
index a989aef..25a096c 100644 (file)
@@ -34,42 +34,53 @@ require_once __DIR__ . '/Maintenance.php';
  * @ingroup Maintenance
  */
 class ShowJobs extends Maintenance {
+       protected static $stateMethods = array(
+               'unclaimed' => 'getAllQueuedJobs',
+               'delayed'   => 'getAllDelayedJobs',
+               'claimed'   => 'getAllAcquiredJobs',
+               'abandoned' => 'getAllAbandonedJobs',
+       );
+
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Show number of jobs waiting in master database";
                $this->addOption( 'group', 'Show number of jobs per job type' );
-               $this->addOption( 'list',
-                       'Show a list of all jobs in a machine-readable format, instead of statistics' );
+               $this->addOption( 'list', 'Show a list of all jobs instead of counts' );
                $this->addOption( 'type', 'Only show/count jobs of a given type', false, true );
+               $this->addOption( 'status', 'Filter list by state (unclaimed,delayed,claimed,abandoned)' );
+               $this->addOption( 'limit', 'Limit of jobs listed' );
        }
 
        public function execute() {
-               $filterType = $this->getOption( 'type', '' );
+               $typeFilter = $this->getOption( 'type', '' );
+               $stateFilter = $this->getOption( 'status', '' );
+               $stateLimit = (float)$this->getOption( 'limit', INF );
+
                $group = JobQueueGroup::singleton();
+
+               $filteredTypes = $typeFilter
+                       ? array( $typeFilter )
+                       : $group->getQueueTypes();
+               $filteredStates = $stateFilter
+                       ? array_intersect_key( self::$stateMethods, array( $stateFilter => 1 ) )
+                       : self::$stateMethods;
+
                if ( $this->hasOption( 'list' ) ) {
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       $count = 0;
+                       foreach ( $filteredTypes as $type ) {
                                $queue = $group->get( $type );
-                               foreach ( $queue->getAllQueuedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=unclaimed\n" );
-                               }
-                               foreach ( $queue->getAllDelayedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=delayed\n" );
-                               }
-                               foreach ( $queue->getAllAcquiredJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=claimed\n" );
-                               }
-                               foreach ( $queue->getAllAbandonedJobs() as $job ) {
-                                       $this->output( $job->toString() . " status=abandoned\n" );
+                               foreach ( $filteredStates as $state => $method ) {
+                                       foreach ( $queue->$method() as $job ) {
+                                               /** @var Job $job */
+                                               $this->output( $job->toString() . " status=$state\n" );
+                                               if ( ++$count >= $stateLimit ) {
+                                                       return;
+                                               }
+                                       }
                                }
                        }
                } elseif ( $this->hasOption( 'group' ) ) {
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       foreach ( $filteredTypes as $type ) {
                                $queue = $group->get( $type );
                                $delayed = $queue->getDelayedCount();
                                $pending = $queue->getSize();
@@ -86,10 +97,7 @@ class ShowJobs extends Maintenance {
                        }
                } else {
                        $count = 0;
-                       foreach ( $group->getQueueTypes() as $type ) {
-                               if ( $filterType != '' && $type != $filterType ) {
-                                       continue;
-                               }
+                       foreach ( $filteredTypes as $type ) {
                                $count += $group->get( $type )->getSize();
                        }
                        $this->output( "$count\n" );
index 82eae21..a93e51f 100644 (file)
@@ -34,6 +34,7 @@ class MwSql extends Maintenance {
                parent::__construct();
                $this->mDescription = "Send SQL queries to a MediaWiki database. " .
                                "Takes a file name containing SQL as argument or runs interactively.";
+               $this->addOption( 'query', 'Run a single query instead of running interactively', false, true );
                $this->addOption( 'cluster', 'Use an external cluster by name', false, true );
                $this->addOption( 'wikidb', 'The database wiki ID to use if not the current one', false, true );
                $this->addOption( 'slave', 'Use a slave server (either "any" or by name)', false, true );
@@ -89,6 +90,13 @@ class MwSql extends Maintenance {
                        }
                }
 
+               if ( $this->hasOption( 'query' ) ) {
+                       $query = $this->getOption( 'query' );
+                       $this->sqlDoQuery( $db, $query, /* dieOnError */ true );
+                       wfWaitForSlaves();
+                       return;
+               }
+
                $useReadline = function_exists( 'readline_add_history' )
                        && Maintenance::posix_isatty( 0 /*STDIN*/ );
 
@@ -102,6 +110,7 @@ class MwSql extends Maintenance {
                $wholeLine = '';
                $newPrompt = '> ';
                $prompt = $newPrompt;
+               $doDie = !Maintenance::posix_isatty( 0 );
                while ( ( $line = Maintenance::readconsole( $prompt ) ) !== false ) {
                        if ( !$line ) {
                                # User simply pressed return key
@@ -122,19 +131,22 @@ class MwSql extends Maintenance {
                                readline_add_history( $wholeLine . $db->getDelimiter() );
                                readline_write_history( $historyFile );
                        }
-                       try {
-                               $res = $db->query( $wholeLine );
-                               $this->sqlPrintResult( $res, $db );
-                               $prompt = $newPrompt;
-                               $wholeLine = '';
-                       } catch ( DBQueryError $e ) {
-                               $doDie = !Maintenance::posix_isatty( 0 );
-                               $this->error( $e, $doDie );
-                       }
+                       $this->sqlDoQuery( $db, $wholeLine, $doDie );
+                       $prompt = $newPrompt;
+                       $wholeLine = '';
                }
                wfWaitForSlaves();
        }
 
+       protected function sqlDoQuery( $db, $line, $dieOnError ) {
+               try {
+                       $res = $db->query( $line );
+                       $this->sqlPrintResult( $res, $db );
+               } catch ( DBQueryError $e ) {
+                       $this->error( $e, $dieOnError );
+               }
+       }
+
        /**
         * Print the results, callback for $db->sourceStream()
         * @param ResultWrapper $res The results object
index de36d26..aa0c7ea 100644 (file)
@@ -3,7 +3,9 @@
 -- not have to run it by itself unless doing a manual install.
 
 -- This is a shared schema file used for both MySQL and SQLite installs.
-
+--
+-- For more documentation on the database schema, see
+-- https://www.mediawiki.org/wiki/Manual:Database_layout
 --
 -- General notes:
 --
index 17b2039..0e0b304 100644 (file)
        overflow: hidden;
        min-width: 20em;
 }
+
+/* tooltip styles */
+.config-help-field-hint {
+       display: none;
+       margin-left: 2px;
+       margin-bottom: -8px;
+       padding: 0 0 0 15px;
+       /* @embed */
+       background-image: url(images/help-question.gif);
+       background-position: left center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+       font-size: .8em;
+       text-decoration: underline;
+       color: #0645ad;
+}
+
+.config-help-field-hint:hover {
+       /* @embed */
+       background-image: url(images/help-question-hover.gif);
+}
+
+.config-help-field-data {
+       display: block;
+       background-color: #d6f3ff;
+       padding: 5px 8px 4px 8px;
+       border: 1px solid #5dc9f4;
+       margin-left: 20px;
+}
index cf17aef..d2dc213 100644 (file)
@@ -3,7 +3,7 @@
                var $label, labelText;
 
                function syncText() {
-                       var value = $(this).val()
+                       var value = $( this ).val()
                                .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
                                .replace( /&/, '&amp;' )
                                .replace( /__+/g, '_' )
@@ -20,7 +20,7 @@
                                .find( '.mw-help-field-hint' )
                                        .show()
                                        .click( function () {
-                                               $(this)
+                                               $( this )
                                                        .closest( '.mw-help-field-container' )
                                                                .find( '.mw-help-field-data' )
                                                                        .slideToggle( 'fast' );
@@ -29,7 +29,7 @@
                // Show/hide code for DB-specific options
                // FIXME: Do we want slow, fast, or even non-animated (instantaneous) showing/hiding here?
                $( '.dbRadio' ).each( function () {
-                       $( document.getElementById( $(this).attr( 'rel' ) ) ).hide();
+                       $( document.getElementById( $( this ).attr( 'rel' ) ) ).hide();
                } );
                $( document.getElementById( $( '.dbRadio:checked' ).attr( 'rel' ) ) ).show();
                $( '.dbRadio' ).click( function () {
 
                // Show/hide random stuff (email, upload)
                $( '.showHideRadio' ).click( function () {
-                       var $wrapper = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).is( ':checked' ) ) {
+                       var $wrapper = $( '#' + $( this ).attr( 'rel' ) );
+                       if ( $( this ).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
                        } else {
                                $wrapper.hide( 'slow' );
                        }
                } );
                $( '.hideShowRadio' ).click( function () {
-                       var $wrapper = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).is( ':checked' ) ) {
+                       var $wrapper = $( '#' + $( this ).attr( 'rel' ) );
+                       if ( $( this ).is( ':checked' ) ) {
                                $wrapper.hide( 'slow' );
                        } else {
                                $wrapper.show( 'slow' );
@@ -80,9 +80,9 @@
 
                // Enable/disable "other" textboxes
                $( '.enableForOther' ).click( function () {
-                       var $textbox = $( document.getElementById( $(this).attr( 'rel' ) ) );
+                       var $textbox = $( document.getElementById( $( this ).attr( 'rel' ) ) );
                        // FIXME: Ugh, this is ugly
-                       if ( $(this).val() === 'other' ) {
+                       if ( $( this ).val() === 'other' ) {
                                $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
                        } else {
                                $textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
diff --git a/mw-config/images/help-question-hover.gif b/mw-config/images/help-question-hover.gif
new file mode 100644 (file)
index 0000000..515138d
Binary files /dev/null and b/mw-config/images/help-question-hover.gif differ
diff --git a/mw-config/images/help-question.gif b/mw-config/images/help-question.gif
new file mode 100644 (file)
index 0000000..b4fc9c5
Binary files /dev/null and b/mw-config/images/help-question.gif differ
index e28aef4..c00dbed 100644 (file)
@@ -9,11 +9,11 @@
   "devDependencies": {
     "grunt": "0.4.5",
     "grunt-cli": "0.1.13",
-    "grunt-banana-checker": "0.2.2",
+    "grunt-banana-checker": "0.3.0",
     "grunt-contrib-copy": "0.8.0",
-    "grunt-contrib-jshint": "0.11.2",
+    "grunt-contrib-jshint": "0.11.3",
     "grunt-contrib-watch": "0.6.1",
-    "grunt-jscs": "1.8.0",
+    "grunt-jscs": "2.1.0",
     "grunt-jsonlint": "1.0.4",
     "grunt-karma": "0.11.0",
     "karma": "0.12.36",
diff --git a/phpcs.xml b/phpcs.xml
new file mode 100644 (file)
index 0000000..36ad394
--- /dev/null
+++ b/phpcs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<ruleset name="MediaWiki">
+       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki"/>
+       <file>.</file>
+       <arg name="encoding" value="utf8"/>
+       <arg name="extensions" value="php,php5,inc,sample"/>
+       <rule ref="Generic.Files.LineLength">
+               <exclude-pattern>*/languages/messages/Messages*.php</exclude-pattern>
+       </rule>
+       <exclude-pattern>node_modules</exclude-pattern>
+       <exclude-pattern>vendor</exclude-pattern>
+       <exclude-pattern>extensions</exclude-pattern>
+       <exclude-pattern>skins</exclude-pattern>
+</ruleset>
index 182f090..07142a5 100644 (file)
@@ -247,12 +247,44 @@ return array(
        ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/src/jquery/jquery.highlightText.js',
-               'dependencies' => 'mediawiki.RegExp',
+               'dependencies' => array(
+                       'mediawiki.RegExp',
+                       'dom-level2-shim',
+               ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
        'jquery.hoverIntent' => array(
                'scripts' => 'resources/lib/jquery/jquery.hoverIntent.js',
        ),
+       'jquery.i18n' => array(
+               'scripts' => array(
+                       'resources/lib/jquery.i18n/src/jquery.i18n.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.parser.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.emitter.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.language.js',
+                       'resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js',
+               ),
+               'dependencies' => 'mediawiki.libs.pluralruleparser',
+               'languageScripts' => array(
+                       'bs' => 'resources/lib/jquery.i18n/src/languages/bs.js',
+                       'dsb' => 'resources/lib/jquery.i18n/src/languages/dsb.js',
+                       'fi' => 'resources/lib/jquery.i18n/src/languages/fi.js',
+                       'ga' => 'resources/lib/jquery.i18n/src/languages/ga.js',
+                       'he' => 'resources/lib/jquery.i18n/src/languages/he.js',
+                       'hsb' => 'resources/lib/jquery.i18n/src/languages/hsb.js',
+                       'hu' => 'resources/lib/jquery.i18n/src/languages/hu.js',
+                       'hy' => 'resources/lib/jquery.i18n/src/languages/hy.js',
+                       'la' => 'resources/lib/jquery.i18n/src/languages/la.js',
+                       'ml' => 'resources/lib/jquery.i18n/src/languages/ml.js',
+                       'os' => 'resources/lib/jquery.i18n/src/languages/os.js',
+                       'ru' => 'resources/lib/jquery.i18n/src/languages/ru.js',
+                       'sl' => 'resources/lib/jquery.i18n/src/languages/sl.js',
+                       'uk' => 'resources/lib/jquery.i18n/src/languages/uk.js',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'jquery.localize' => array(
                'scripts' => 'resources/src/jquery/jquery.localize.js',
        ),
@@ -309,6 +341,7 @@ return array(
                'styles' => 'resources/src/jquery/jquery.tablesorter.css',
                'messages' => array( 'sort-descending', 'sort-ascending' ),
                'dependencies' => array(
+                       'dom-level2-shim',
                        'mediawiki.RegExp',
                        'mediawiki.language.months',
                ),
@@ -700,7 +733,10 @@ return array(
        /* Moment.js */
 
        'moment' => array(
-               'scripts' => 'resources/lib/moment/moment.js',
+               'scripts' => array(
+                       'resources/lib/moment/moment.js',
+                       'resources/src/moment-local-dmy.js',
+               ),
                'languageScripts' => array(
                        'af' => 'resources/lib/moment/locale/af.js',
                        'ar' => 'resources/lib/moment/locale/ar.js',
@@ -786,12 +822,11 @@ return array(
 
        'mediawiki' => array(
                'class' => 'ResourceLoaderRawFileModule',
-               // Keep maintenance/jsduck/eg-iframe.html in sync
+               // Keep in sync with maintenance/jsduck/eg-iframe.html
                'scripts' => array(
                        'resources/lib/phpjs-sha1/sha1.js',
                        'resources/src/mediawiki/mediawiki.js',
                        'resources/src/mediawiki/mediawiki.errorLogger.js',
-                       'resources/src/mediawiki/mediawiki.startUp.js',
                ),
                'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
                'targets' => array( 'desktop', 'mobile' ),
@@ -812,6 +847,12 @@ return array(
                        'resources/src/mediawiki/mediawiki.template.mustache.js',
                ),
                'targets' => array( 'desktop', 'mobile' ),
+               'dependencies' => 'mediawiki.template',
+       ),
+       'mediawiki.template.regexp' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.template.regexp.js',
+               'targets' => array( 'desktop', 'mobile' ),
+               'dependencies' => 'mediawiki.template',
        ),
        'mediawiki.apipretty' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.apipretty.css',
@@ -853,6 +894,16 @@ return array(
        'mediawiki.api.parse' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.parse.js',
                'dependencies' => 'mediawiki.api',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
+       'mediawiki.api.upload' => array(
+               'scripts' => 'resources/src/mediawiki.api/mediawiki.api.upload.js',
+               'dependencies' => array(
+                       'dom-level2-shim',
+                       'mediawiki.api',
+                       'mediawiki.api.edit',
+                       'json',
+               ),
        ),
        'mediawiki.api.watch' => array(
                'scripts' => 'resources/src/mediawiki.api/mediawiki.api.watch.js',
@@ -924,7 +975,10 @@ return array(
                        'feedback-useragent'
                ),
        ),
-
+       'mediawiki.feedlink' => array(
+               'position' => 'top',
+               'styles' => 'resources/src/mediawiki/mediawiki.feedlink.css',
+       ),
        'mediawiki.filewarning' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.filewarning.js',
                'styles' => 'resources/src/mediawiki/mediawiki.filewarning.less',
@@ -932,7 +986,20 @@ return array(
                        'oojs-ui',
                ),
        ),
-
+       'mediawiki.ForeignApi' => array(
+               'targets' => array( 'desktop', 'mobile' ),
+               'class' => 'ResourceLoaderForeignApiModule',
+               // Additional dependencies generated dynamically
+               'dependencies' => 'mediawiki.ForeignApi.core',
+       ),
+       'mediawiki.ForeignApi.core' => array(
+               'scripts' => 'resources/src/mediawiki.api/mediawiki.ForeignApi.js',
+               'dependencies' => array(
+                       'mediawiki.api',
+                       'oojs',
+               ),
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.helplink' => array(
                'position' => 'top',
                'styles' => array(
@@ -963,6 +1030,10 @@ return array(
                        'colon-separator',
                ),
        ),
+       'mediawiki.htmlform.styles' => array(
+               'styles' => 'resources/src/mediawiki/mediawiki.htmlform.css',
+               'position' => 'top',
+       ),
        'mediawiki.htmlform.ooui.styles' => array(
                'styles' => 'resources/src/mediawiki/mediawiki.htmlform.ooui.css',
                'position' => 'top',
@@ -1046,6 +1117,10 @@ return array(
                'styles' => 'resources/src/mediawiki/mediawiki.sectionAnchor.css',
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.storage' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.storage.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.Title' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Title.js',
                'dependencies' => array(
@@ -1054,6 +1129,49 @@ return array(
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.Upload' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.Upload.js',
+               'dependencies' => array(
+                       'dom-level2-shim',
+                       'mediawiki.api.upload',
+               ),
+       ),
+       'mediawiki.ForeignUpload' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.ForeignUpload.js',
+               'dependencies' => array(
+                       'mediawiki.ForeignApi',
+                       'mediawiki.Upload',
+                       'oojs',
+               ),
+       ),
+       'mediawiki.ForeignStructuredUpload' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js',
+               'dependencies' => array(
+                       'mediawiki.ForeignUpload',
+               ),
+       ),
+       'mediawiki.Upload.Dialog' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.Upload.Dialog.js',
+               'dependencies' => array(
+                       'oojs-ui',
+                       'mediawiki.Upload',
+               ),
+               'messages' => array(
+                       'upload-dialog-title',
+                       'upload-dialog-error',
+                       'upload-dialog-warning',
+                       'upload-dialog-button-cancel',
+                       'upload-dialog-button-done',
+                       'upload-dialog-button-save',
+                       'upload-dialog-button-upload',
+                       'upload-dialog-label-select-file',
+                       'upload-dialog-label-infoform-title',
+                       'upload-dialog-label-infoform-name',
+                       'upload-dialog-label-infoform-description',
+                       'upload-dialog-label-usage-title',
+                       'upload-dialog-label-usage-filename',
+               ),
+       ),
        'mediawiki.toc' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.toc.js',
                'dependencies' => 'mediawiki.cookie',
@@ -1062,6 +1180,10 @@ return array(
        ),
        'mediawiki.Uri' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.Uri.js',
+               'templates' => array(
+                       'strict.regexp' => 'resources/src/mediawiki/mediawiki.Uri.strict.regexp',
+                       'loose.regexp' => 'resources/src/mediawiki/mediawiki.Uri.loose.regexp',
+               ),
                'dependencies' => 'mediawiki.util',
                'targets' => array( 'desktop', 'mobile' ),
        ),
@@ -1103,6 +1225,10 @@ return array(
                'styles' => 'resources/src/mediawiki.toolbar/toolbar.less',
                'position' => 'top',
        ),
+       'mediawiki.experiments' => array(
+               'scripts' => 'resources/src/mediawiki/mediawiki.experiments.js',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
 
        /* MediaWiki Action */
 
@@ -1241,6 +1367,13 @@ return array(
                        'prefs-editing'
                ),
        ),
+       'mediawiki.action.view.filepage' => array(
+               'styles' => array(
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
+               ),
+               'position' => 'top',
+       ),
 
        /* MediaWiki Language */
 
@@ -1335,9 +1468,18 @@ return array(
        'mediawiki.page.gallery' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.gallery.js',
                'dependencies' => array(
+                       'mediawiki.page.gallery.styles',
                        'jquery.throttle-debounce',
                )
        ),
+       'mediawiki.page.gallery.styles' => array(
+               'styles' => array(
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.css',
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
        'mediawiki.page.ready' => array(
                'scripts' => 'resources/src/mediawiki.page/mediawiki.page.ready.js',
                'dependencies' => array(
@@ -1460,7 +1602,14 @@ return array(
        ),
        'mediawiki.special.movePage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.movePage.js',
-               'dependencies' => 'jquery.byteLimit',
+               'dependencies' => array(
+                       'jquery.byteLimit',
+                       'mediawiki.widgets',
+               ),
+       ),
+       'mediawiki.special.movePage.styles' => array(
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
+               'position' => 'top',
        ),
        'mediawiki.special.pageLanguage' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
@@ -1477,10 +1626,12 @@ return array(
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
                        'saveprefs',
+                       'savedprefs',
                ),
                'dependencies' => array(
                        'mediawiki.language',
                        'mediawiki.confirmCloseWindow',
+                       'mediawiki.notification',
                ),
        ),
        'mediawiki.special.recentchanges' => array(
@@ -1546,15 +1697,6 @@ return array(
                        'resources/src/mediawiki.special/mediawiki.special.userlogin.login.css',
                ),
        ),
-       'mediawiki.special.userlogin.common.js' => array(
-               'scripts' => array(
-                       'resources/src/mediawiki.special/mediawiki.special.userlogin.common.js',
-               ),
-               'messages' => array(
-                       'createacct-captcha',
-                       'createacct-imgcaptcha-ph',
-               ),
-       ),
        'mediawiki.special.userlogin.signup.js' => array(
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userlogin.signup.js',
                'messages' => array(
@@ -1614,17 +1756,13 @@ return array(
 
        /* MediaWiki Legacy */
 
-       'mediawiki.legacy.ajax' => array(
-               'scripts' => 'resources/src/mediawiki.legacy/ajax.js',
-               'dependencies' => array(
-                       'mediawiki.util',
-                       'mediawiki.legacy.wikibits',
-               ),
-               'position' => 'top',
-       ),
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
+                       // @todo: Remove mediawiki.page.gallery when cache has cleared
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.print.css' => array( 'media' => 'print' ),
+                       // @todo: Remove mediawiki.action.view.filepage.print.css when cache has cleared
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css' => array( 'media' => 'print' ),
                        'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' )
                ),
        ),
@@ -1637,6 +1775,11 @@ return array(
        'mediawiki.legacy.shared' => array(
                'position' => 'top',
                'styles' => array(
+                       // @todo: Remove when mediawiki.page.gallery in cached html.
+                       'resources/src/mediawiki.page/mediawiki.page.gallery.css',
+                       // @todo: Remove mediawiki.action.view.filepage.css
+                       // and mediawiki.legacy/images/checker.png when cache has cleared
+                       'resources/src/mediawiki.action/mediawiki.action.view.filepage.css',
                        'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' )
                ),
        ),
@@ -1650,6 +1793,7 @@ return array(
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => 'mediawiki.util',
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki UI */
@@ -1733,25 +1877,59 @@ return array(
        'mediawiki.widgets' => array(
                'scripts' => array(
                        'resources/src/mediawiki.widgets/mw.widgets.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js',
                        'resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js',
-                       'resources/src/mediawiki.widgets/mw.widgets.infuse.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
                ),
                'skinStyles' => array(
-                       'default' => 'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css',
+                       'default' => array(
+                               'resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less',
+                               'resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less',
+                               'resources/src/mediawiki.widgets/mw.widgets.TitleInputWidget.css',
+                       ),
                ),
                'dependencies' => array(
-                       'jquery.autoEllipsis',
+                       'oojs-ui',
+                       'mediawiki.widgets.styles',
+                       // DateInputWidget
+                       'moment',
+                       // TitleInputWidget
                        'mediawiki.Title',
                        'mediawiki.api',
-                       'oojs-ui',
+                       'jquery.byteLimit',
+                       // TitleOptionWidget
+                       'jquery.autoEllipsis',
                ),
                'messages' => array(
+                       // DateInputWidget
+                       'mw-widgets-dateinput-no-date',
+                       'mw-widgets-dateinput-placeholder-day',
+                       'mw-widgets-dateinput-placeholder-month',
+                       // NamespaceInputWidget
+                       'blanknamespace',
+                       'namespacesall',
+                       // TitleInputWidget
                        'mw-widgets-titleinput-description-new-page',
                        'mw-widgets-titleinput-description-redirect',
                ),
                'targets' => array( 'desktop', 'mobile' ),
        ),
+       'mediawiki.widgets.styles' => array(
+               'skinStyles' => array(
+                       'default' => array(
+                               'resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css',
+                               'resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css',
+                       ),
+               ),
+               'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
+       ),
 
        /* es5-shim */
        'es5-shim' => array(
index 8320b37..ad905c6 100644 (file)
@@ -27,11 +27,12 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 // WARNING: OOjs-UI is NOT TESTED with older browsers and is likely to break
 // if loaded in browsers that don't support ES5
 return call_user_func( function () {
-       // Core default themes
-       $themes = array( 'default' => 'mediawiki' );
-       $themes += ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' );
-       $modules = array();
+       $themes = ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' );
+       // We only use the theme names for file names, and they are lowercase
+       $themes = array_map( 'strtolower', $themes );
+       $themes['default'] = 'mediawiki';
 
+       $modules = array();
        $modules['oojs-ui'] = array(
                'scripts' => array(
                        'resources/lib/oojs-ui/oojs-ui.js',
@@ -85,6 +86,7 @@ return call_user_func( function () {
                'icons', // oojs-ui.styles.icons
                'indicators', // oojs-ui.styles.indicators
                'textures', // oojs-ui.styles.textures
+               'icons-accessibility', // oojs-ui.styles.icons-accessibility
                'icons-alerts', // oojs-ui.styles.icons-alerts
                'icons-content', // oojs-ui.styles.icons-content
                'icons-editing-advanced', // oojs-ui.styles.icons-editing-advanced
@@ -112,8 +114,9 @@ return call_user_func( function () {
 
                if ( substr( $name, 0, 5 ) === 'icons' ) {
                        $module['selectorWithoutVariant'] = '.oo-ui-icon-{name}, .mw-ui-icon-{name}:before';
-                       $module['selectorWithVariant'] = '.oo-ui-image-{variant} .oo-ui-icon-{name}, 
+                       $module['selectorWithVariant'] = '
                                .oo-ui-image-{variant}.oo-ui-icon-{name}, .mw-ui-icon-{name}-{variant}:before,
+                               /* Hack for Flow, see T110051 */
                                .mw-ui-hovericon:hover .mw-ui-icon-{name}-{variant}-hover:before,
                                .mw-ui-hovericon.mw-ui-icon-{name}-{variant}-hover:hover:before';
                }
diff --git a/resources/lib/jquery.i18n/CREDITS b/resources/lib/jquery.i18n/CREDITS
new file mode 100644 (file)
index 0000000..3a4eb5e
--- /dev/null
@@ -0,0 +1,9 @@
+Credits
+=======
+
+Santhosh Thottingal
+Amir E. Aharoni
+Siebrand Mazeland
+Niklas Laxström
+Neil Kandalgaonkar
+David Chan
diff --git a/resources/lib/jquery.i18n/GPL-LICENSE b/resources/lib/jquery.i18n/GPL-LICENSE
new file mode 100644 (file)
index 0000000..019694a
--- /dev/null
@@ -0,0 +1,342 @@
+== GNU GENERAL PUBLIC LICENSE ==
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+=== Preamble ===
+
+The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and
+modification follow.
+
+== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ==
+
+'''0.''' This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+'''1.''' You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+'''2.''' You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+       '''a)''' You must cause the modified files to carry prominent notices
+       stating that you changed the files and the date of any change.
+
+       '''b)''' You must cause any work that you distribute or publish, that in
+       whole or in part contains or is derived from the Program or any
+       part thereof, to be licensed as a whole at no charge to all third
+       parties under the terms of this License.
+
+       '''c)''' If the modified program normally reads commands interactively
+       when run, you must cause it, when started running for such
+       interactive use in the most ordinary way, to print or display an
+       announcement including an appropriate copyright notice and a
+       notice that there is no warranty (or else, saying that you provide
+       a warranty) and that users may redistribute the program under
+       these conditions, and telling the user how to view a copy of this
+       License.  (Exception: if the Program itself is interactive but
+       does not normally print such an announcement, your work based on
+       the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+'''3.''' You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+       '''a)''' Accompany it with the complete corresponding machine-readable
+       source code, which must be distributed under the terms of Sections
+       1 and 2 above on a medium customarily used for software interchange; or,
+
+       '''b)''' Accompany it with a written offer, valid for at least three
+       years, to give any third party, for a charge no more than your
+       cost of physically performing source distribution, a complete
+       machine-readable copy of the corresponding source code, to be
+       distributed under the terms of Sections 1 and 2 above on a medium
+       customarily used for software interchange; or,
+
+       '''c)''' Accompany it with the information you received as to the offer
+       to distribute corresponding source code.  (This alternative is
+       allowed only for noncommercial distribution and only if you
+       received the program in object code or executable form with such
+       an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+'''4.''' You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+'''5.''' You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+'''6.''' Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+'''7.''' If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+'''8.''' If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+'''9.''' The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+'''10.''' If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+=== NO WARRANTY ===
+
+'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+       '''END OF TERMS AND CONDITIONS'''
+
+== How to Apply These Terms to Your New Programs ==
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+       <one line to give the program's name and a brief idea of what it does.>
+
+       Copyright (C) <year>  <name of author>
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+       Gnomovision version 69, Copyright (C) year name of author
+       Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+       This is free software, and you are welcome to redistribute it
+       under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+       Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+       `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+       <signature of Ty Coon>, 1 April 1989
+
+       Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/resources/lib/jquery.i18n/MIT-LICENSE b/resources/lib/jquery.i18n/MIT-LICENSE
new file mode 100644 (file)
index 0000000..f3a03b7
--- /dev/null
@@ -0,0 +1,21 @@
+Copyright (c) 2012-2013 Santhosh Thottingal and other
+contributors. See CREDITS for a list.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/resources/lib/jquery.i18n/README.md b/resources/lib/jquery.i18n/README.md
new file mode 100644 (file)
index 0000000..da82c2b
--- /dev/null
@@ -0,0 +1,432 @@
+jQuery.i18n
+===========
+
+jQuery.i18n is a jQuery based Javascript internationalization library. It helps you to internationalize your web applications easily.
+
+This is a project by Wikimedia foundation's [Language Engineering team](http://wikimediafoundation.org/wiki/Language_Engineering_team) and used in some of the Wikimedia Foundation projects like Universal Language Selector.
+
+The jquery.i18n library uses a json based localization file format, "banana", which is used as the localization file format for  MediaWiki and other projects.
+
+Features
+========
+* Simple file format - JSON. Easily readable for humans and machines.
+* Author and metadata information is not lost anywhere. There are other file formats using comments to store this.
+* Uses MediaWiki convention for placeholders. Easily readable and proven convention. Example: ```There are $1 cars```
+* Supports plural conversion without using extra messages for all plural forms. Plural rule handling is done using CLDR. Covers a wide range of languages
+* Supports gender. By passing the gender value, you get correct sentences according to gender.
+* Supports grammar forms. jquery.i18n has a basic but extensible grammar conversion support
+* Fallback chains for all languages.
+* Data api- the message key. Example: ```<li data-i18n="message-key"></li>```.
+* Dynamic change of interface language without refreshing a webpage.
+* Nestable grammar, plural, gender support. These constructs can be nested to any arbitrary level for supporting sophisticated message localization
+* Message documentation through special language code ```qqq```
+* Extensible message parser to add or customize magic words in the messages. Example: ```{sitename}``` or ```[[link]]``
+
+
+Quick start
+-----------
+
+```bash
+git clone https://github.com/wikimedia/jquery.i18n.git
+cd jquery.i18n
+git submodule update --init
+```
+
+Testing
+-------
+
+```shell
+npm install
+```
+
+To run tests locally, run `npm test`, and this will run the tests.
+
+Message File Format
+===================
+
+The message files are json formatted. As a convention you can have a folder named i18n inside your source code. For each language or locale, have a file named like languagecode.json.
+
+Example:
+```
+App
+       |--src
+       |--doc
+       |--i18n
+               |--ar.json
+               |--de.json
+               |--en.json
+               |--he.json
+               |--hi.json
+               |--fr.json
+               |--qqq.json
+```
+
+A simple en.json file example is given below
+
+```json
+{
+       "@metadata": {
+               "authors": [
+                       "Alice",
+                       "David",
+                       "Santhosh"
+               ],
+               "last-updated": "2012-09-21",
+               "locale": "en",
+               "message-documentation": "qqq",
+               "AnotherMetadata": "AnotherMedatadataValue"
+       },
+       "appname-title": "Example Application",
+       "appname-sub-title": "An example application with jquery.i18n",
+       "appname-header-introduction": "Introduction",
+       "appname-about": "About this application",
+       "appname-footer": "Footer text"
+}
+```
+
+The json file should be a valid json. The ```@metadata``` holds all kind of data that are not messages. You can store author information, copyright, updated date or anything there.
+
+Messages are key value pairs. It is a good convention to prefix your appname to message keys to make the messages unique. It acts as the namespace for the message keys. It is also a good convention to have the message keys with ```-``` separated words, all in lower case.
+
+If you are curious to see some real jquery.i18n message file from other projects:
+
+- message files of MediaWiki https://github.com/wikimedia/mediawiki-core/tree/master/languages/i18n
+- message files from jquery.uls project https://github.com/wikimedia/jquery.uls/blob/master/i18n
+
+Single message file for all languages
+-------------------------------------
+There are some alternate message file format supported for different use cases. If your application is not big, and want all the translation in a single file, you can have it as shown in the below example:
+
+```json
+{
+       "@metadata": {
+               "authors": [
+                       "Alice",
+                       "David",
+                       "Santhosh"
+               ],
+               "last-updated": "2012-09-21",
+               "locale": "en",
+               "message-documentation": "qqq",
+               "AnotherMetadata": "AnotherMedatadataValue"
+       },
+       "en": {
+               "appname-title": "Example Application",
+               "appname-sub-title": "An example application with jquery.i18n",
+               "appname-header-introduction": "Introduction",
+               "appname-about": "About this application",
+               "appname-footer": "Footer text"
+               },
+       "ml": {
+               "appname-title": "അപ്ലിക്കേഷന്‍ ഉദാഹരണം",
+               "appname-sub-title": "jquery.i18n ഉപയോഗിച്ചുള്ള അപ്ലിക്കേഷന്‍ ഉദാഹരണം",
+               "appname-header-introduction": "ആമുഖം",
+               "appname-about": "ഈ അപ്ലിക്കേഷനെപ്പറ്റി",
+               "appname-footer": "അടിക്കുറിപ്പു്"
+       }
+}
+```
+
+Here the json file contains language code as key value and messagekey-message pairs as the value for all language pairs. You can choose this format or per-language file formats depending on your use case. Per-language files are more convenient for collaboration, version controlling, scalability, etc.
+
+In this approach, it is also possible to give a file name as the value of language code.
+
+```json
+{
+       "@metadata": {
+               "authors": [
+                       "Alice",
+                       "David",
+                       "Santhosh"
+               ],
+               "last-updated": "2012-09-21",
+               "locale": "en",
+               "message-documentation": "qqq",
+               "AnotherMetadata": "AnotherMedatadataValue"
+       },
+       "en": {
+               "appname-title": "Example Application",
+               "appname-sub-title": "An example application with jquery.i18n",
+               "appname-header-introduction": "Introduction",
+               "appname-about": "About this application",
+               "appname-footer": "Footer text"
+               },
+       "ml": "path/to/ml.json"
+}
+```
+
+Translation
+===========
+To translate the jquery.i18n application, depending on the expertise of the translator, there are multiple ways.
+
+* Editing the json files directly - Suitable for translators with technical background. Also suitable if your application is small and you want to work with only a small number of languages
+* Providing a translation interface along with your application: Suitable for proprietary or private applications with significant amount of translators
+* Using open source translation platforms like translatewiki.net. The MediaWiki and jquery.uls from previous examples use translatewiki.net for crowdsourced message translation. Translatewiki.net can update your code repo in regular intervals with updated translations. Highly recommended if your application is opensource and want localized to as many as languages possible with maximum number of translators.
+
+Usage
+=====
+
+## Switching locale
+
+While initializing the `jquery.i18n`, the locale for the page can be given using the `locale` option. For example
+
+```javascript
+$.i18n( {
+    locale: 'he' // Locale is Hebrew
+} );
+```
+
+In case locale option is not given, `jquery.i18n` plugin will use the language attribute given for the html tag. For example
+
+```html
+<html lang="he" dir="rtl">
+```
+
+In this case the locale will be he(Hebrew). If that `lang` attribute is also missing, it will try to use the locale specified by the browser.
+
+It is possible to switch to another locale after plugin is initialized. See below example:
+
+```javascript
+$.i18n({
+    locale: 'he' // Locale is Hebrew
+});
+$.i18n( 'message_hello' ); // This will give the Hebrew translation of message key `message_hello`.
+$.i18n().locale = 'ml'; // Now onwards locale is 'Malayalam'
+$.i18n( 'message_hello' ); // This will give the Malayalam translation of message key `message_hello`.
+```
+
+## Message Loading
+
+JSON formatted messages can be loaded to the plugin using multiple ways.
+
+### Dynamic loading using `load` method.
+
+Following example shows loading messages for two locales- localex, and localey. Here localex and localey are just examples. They should be valid IS0 639 language codes(eg: en, ml, hi, fr, ta etc)
+
+```javascript
+$.i18n().load( {
+       'localex' : {
+               'message-key1' : 'message1' // Message for localex.
+       },
+       'localey' : {
+               'message-key1' : 'message1'
+       }
+} );
+```
+
+If we want to load the messages for a specific locale, it can be done like this:
+
+```javascript
+$.i18n().load({
+    'message-hello': 'Hello World',
+    'message-welcome': 'Welcome'
+}, 'en');
+```
+
+Note the second argument for the `load` method. It should be a valid language code.
+
+It is also possible to refer messages from an external URL. See below example
+
+```javascript
+$.i18n().load( {
+       en: {
+               message_hello: 'Hello World',
+       message_welcome: 'Welcome'
+       },
+       hi: 'i18n/messages-hi.json', // Messages for Hindi
+       de: 'i18n/messages-de.json'
+} );
+```
+
+Messages for a locale can be also loaded in parts. Example
+
+```javascript
+$.i18n().load( {
+       en: {
+               message_hello: 'Hello World',
+       message_welcome: 'Welcome'
+       }
+} );
+
+$.i18n().load( {
+       // This does not remove the previous messages.
+       en: {
+               'message_header' : 'Header',
+               'message_footer' : 'Footer',
+               // This will overwrite message_welcome message
+               'message_welcome' : 'Welcome back'
+       }
+} );
+```
+
+Since it is desirable to render interface messages instantly and not after a delay of loading the message files from a server, make sure that the messages are present at client side before using jQuery.i18n.
+
+The library should expose an API to load an object containing key-value pair of messages. Example: ```$.i18n.load(data)```. This will return a ```jQuery.Promise```.
+
+jquery.i18n plugin
+=========================
+
+The jQuery plugin defines ```$.i18n()``` and ```$.fn.i18n()```
+
+```javascript
+$.i18n( 'message-key-sample1' );
+$.i18n( 'message-key-sample1' );
+$.i18n( 'Found $1 {{plural:$1|result|results}}', 10 ); // Message key itself is message text
+$.i18n( 'Showing $1 out of $2 {{plural:$2|result|results}}', 5,100 );
+$.i18n(' User X updated {{gender|his|her}} profile', 'male' );
+
+$( '#foo' ).i18n(); // to translate the element matching jquery selector based on data-i18n key
+```
+
+Data API
+--------
+
+It is possible to display localized messages without any custom JavaScript. For the HTML tags, add an attribute data-i18n with value as the message key. Example:
+```html
+<li data-i18n="message-key"></li>.
+```
+
+It is also possible to have the above li node with fallback text already in place.
+```html
+<li data-i18n="message-key">Fallback text</li>
+```
+
+The framework will place the localized message corresponding to message-key as the text value of the node. Similar to $('selector').i18n( ... ).
+This will not work for dynamically created elements.
+
+Note that if data-i18n contains html markup, that html will not be used as the element content, instead, the text version will be used. $.fn.i18n is always about replacing text of the element. If you want to change the html of the element, you may want to use: ```$(selector).html($.i18n(messagekey))```
+
+Examples
+========
+
+See http://thottingal.in/projects/js/jquery.i18n/demo/
+
+Message format
+==============
+
+## Placeholders
+
+Messages take parameters. They are represented by $1, $2, $3, … in the message texts, and replaced at run time. Typical parameter values are numbers (Example: "Delete 3 versions?"), or user names (Example: "Page last edited by $1"), page names, links, and so on, or sometimes other messages.
+
+```javascript
+var message = "Welcome, $1";
+$.i18n(message, 'Alice'); // This gives "Welcome, Alice"
+```
+
+
+## Plurals
+
+To make the syntax of sentence correct, plural forms are required. jquery.i18n support plural forms in the message using the syntax `{{PLURAL:$1|pluralform1|pluralform2|...}}`
+
+For example:
+
+```javascript
+var message = "Found $1 {{PLURAL:$1|result|results}}";
+$.i18n(message, 1); // This gives "Found 1 result"
+$.i18n(message, 4); // This gives "Found 4 results"
+```
+Note that {{PLURAL:...}} is not case sensitive. It can be {{plural:...}} too.
+
+In case of English, there are only 2 plural forms, but many languages use more than 2 plural forms. All the plural forms can be given in the above syntax, separated by pipe(|)
+
+## Gender
+Similar to plural, depending on gender of placeholders, mostly user names, the syntax changes dynamically. An example in English is "Alice changed her profile picture" and "Bob changed his profile picture". To support this {{GENDER...}} syntax can be used as show in example
+
+```javascript
+var message = "$1 changed {{GENDER:$2|his|her}} profile picture";
+$.i18n(message, 'Alice', 'female' ); // This gives "Alice changed her profile picture"
+$.i18n(message, 'Bob', 'male' ); // This gives "Bob changed his profile picture"
+```
+
+Note that {{GENDER:...}} is not case sensitive. It can be {{gender:...}} too.
+
+## Grammar
+
+
+```javascript
+$.i18n( { locale: 'fi' } );
+
+var message = "{{grammar:genitive|$1}}";
+
+$.i18n(message, 'talo' ); // This gives "talon"
+
+$.i18n().locale = 'hy'; // Switch to locale Armenian
+$.i18n(message, 'Մաունա'); // This gives "Մաունայի"
+```
+
+## Directionality-safe isolation
+
+To avoid BIDI corruption that looks like "(Foo_(Bar", which happens when a string is inserted into a context with the reverse directionality, you can use `{{bidi:…}}`. Directionality-neutral characters at the edge of the string can get wrongly interpreted by the BIDI algorithm. This would let you embed your substituted string into a new BIDI context, //e.g.//:
+
+   "`Shalom, {{bidi:$1}}, hi!`"
+
+The embedded context's directionality is determined by looking at the argument for `$1`, and then explicitly inserted into the Unicode text, ensuring correct rendering (because then the bidi algorithm "knows" the argument text is a separate context).
+
+
+Fallback
+========
+
+The plugin takes an option 'fallback' with the default value 'en'. The library reuses the fallback data available in MediaWiki for calculating the language fallbacks. Fallbacks are used when a message key is not found in a locale. Example fallbacks: sa->hi->en or tt->tt-cyrl->ru.
+
+See jquery.i18n.fallbacks.js in the source.
+
+Magic word support
+===================
+* For plural, gender and grammar support, MediaWiki template-like syntax - {{...}} will be used.
+* There will be a default implementation for all these in $.i18n.language['default']
+* The plural, gender and grammar methods in ```$.i18n.language[ 'default' ]``` can be overridden or extended in ```$.i18n.language['languageCode']```.
+* Language-specific rules about Gender and Grammar can be written in languages/langXYZ.js files
+* Plural forms will be dynamically calculated using the CLDR plural parser.
+
+Extending the parser
+--------------------
+Following example illustrates extending the parser to support more magic words
+
+```javascript
+$.extend( $.i18n.parser.emitter, {
+       // Handle SITENAME keywords
+       sitename: function () {
+               return 'Wikipedia';
+       },
+       // Handle LINK keywords
+       link: function ( nodes ) {
+               return '<a href="' + nodes[1] + '">' + nodes[0] + '</a>';
+       }
+} );
+```
+
+This will parse the message
+```javascript
+$.i18n( '{{link:{{SITENAME}}|http://en.wikipedia.org}}' );
+```
+
+to
+
+```html
+<a href="http://en.wikipedia.org">Wikipedia</a>
+```
+
+Message documentation
+=====================
+
+The message keys and messages won't give a enough context about the message being translated to the translator. Whenever a developer adds a new message, it is a usual practice to document the message to a file named qqq.json
+with same message key.
+
+Example qqq.json:
+```json
+{
+       "@metadata": {
+               "authors": [
+                       "Developer Name"
+               ]
+       },
+       "appname-title": "Application name. Transliteration is recommended",
+       "appname-sub-title": "Brief explanation of the application",
+       "appname-header-introduction": "Text for the introduction header",
+       "appname-about": "About this application text",
+       "appname-footer": "Footer text"
+}
+
+```
+
+In MediaWiki and its hundreds of extensions, message documentation is a strictly followed practice. There is a grunt task to check whether all messages are documented or not. See https://www.npmjs.org/package/grunt-banana-checker
diff --git a/resources/lib/jquery.i18n/package.json b/resources/lib/jquery.i18n/package.json
new file mode 100644 (file)
index 0000000..0dded29
--- /dev/null
@@ -0,0 +1,47 @@
+{
+  "name": "jquery.i18n",
+  "version": "1.0.3",
+  "description": "jQuery based internationalization library",
+  "homepage": "https://github.com/wikimedia/jquery.i18n",
+  "keywords": [
+    "internationalization",
+    "localization",
+    "i18n",
+    "jquery",
+    "l10n"
+  ],
+  "author": {
+    "name": "Santhosh Thottingal",
+    "email": "santhosh.thottingal@gmail.com"
+  },
+  "contributors": [
+    "Amir Aharoni <amir.aharoni@mail.huji.ac.il>",
+    "Niklas Laxström <nlaxstrom@wikimedia.org>",
+    "Neil Kandalgaonkar <neilk@brevity.org>",
+    "David Chan <david@troi.org>"
+  ],
+  "devDependencies": {
+    "qunit": "0.7.6",
+    "grunt": "0.4.5",
+    "grunt-cli": "0.1.13",
+    "grunt-contrib-jshint": "0.11.2",
+    "grunt-contrib-connect": "0.10.1",
+    "grunt-contrib-qunit": "0.7.0",
+    "grunt-contrib-watch": "0.6.1",
+    "grunt-jscs": "1.8.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/wikimedia/jquery.i18n.git"
+  },
+  "bugs": {
+      "url" : "http://github.com/wikimedia/jquery.i18n/issues"
+  },
+  "engine": {
+    "node": ">=0.8.x"
+  },
+  "license": "(MIT OR GPL-2.0)",
+  "scripts": {
+    "test": "grunt test --verbose"
+  }
+}
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.bidi.js
new file mode 100644 (file)
index 0000000..3a5b625
--- /dev/null
@@ -0,0 +1,88 @@
+/**
+ * BIDI embedding support for jQuery.i18n
+ *
+ * Copyright (C) 2015, David Chan
+ *
+ * This code is dual licensed GPLv2 or later and MIT. You don't have to do
+ * anything special to choose one license or the other and you don't have to
+ * notify anyone which license you are using. You are free to use this code
+ * in commercial projects as long as the copyright header is left intact.
+ * See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function ( $ ) {
+       'use strict';
+       var strongDirRegExp;
+
+       /**
+        * Matches the first strong directionality codepoint:
+        * - in group 1 if it is LTR
+        * - in group 2 if it is RTL
+        * Does not match if there is no strong directionality codepoint.
+        *
+        * Generated by UnicodeJS (see tools/strongDir) from the UCD; see
+        * https://git.wikimedia.org/summary/unicodejs.git .
+        */
+       strongDirRegExp = new RegExp(
+               '(?:' +
+                       '(' +
+                               '[\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u02bb-\u02c1\u02d0\u02d1\u02e0-\u02e4\u02ee\u0370-\u0373\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0482\u048a-\u052f\u0531-\u0556\u0559-\u055f\u0561-\u0587\u0589\u0903-\u0939\u093b\u093d-\u0940\u0949-\u094c\u094e-\u0950\u0958-\u0961\u0964-\u0980\u0982\u0983\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd-\u09c0\u09c7\u09c8\u09cb\u09cc\u09ce\u09d7\u09dc\u09dd\u09df-\u09e1\u09e6-\u09f1\u09f4-\u09fa\u0a03\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a3e-\u0a40\u0a59-\u0a5c\u0a5e\u0a66-\u0a6f\u0a72-\u0a74\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd-\u0ac0\u0ac9\u0acb\u0acc\u0ad0\u0ae0\u0ae1\u0ae6-\u0af0\u0af9\u0b02\u0b03\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0b5c\u0b5d\u0b5f-\u0b61\u0b66-\u0b77\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd0\u0bd7\u0be6-\u0bf2\u0c01-\u0c03\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c41-\u0c44\u0c58-\u0c5a\u0c60\u0c61\u0c66-\u0c6f\u0c7f\u0c82\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd-\u0cc4\u0cc6-\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0cde\u0ce0\u0ce1\u0ce6-\u0cef\u0cf1\u0cf2\u0d02\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d4e\u0d57\u0d5f-\u0d61\u0d66-\u0d75\u0d79-\u0d7f\u0d82\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dcf-\u0dd1\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df4\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e4f-\u0e5b\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0ed0-\u0ed9\u0edc-\u0edf\u0f00-\u0f17\u0f1a-\u0f34\u0f36\u0f38\u0f3e-\u0f47\u0f49-\u0f6c\u0f7f\u0f85\u0f88-\u0f8c\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fce-\u0fda\u1000-\u102c\u1031\u1038\u103b\u103c\u103f-\u1057\u105a-\u105d\u1061-\u1070\u1075-\u1081\u1083\u1084\u1087-\u108c\u108e-\u109c\u109e-\u10c5\u10c7\u10cd\u10d0-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1360-\u137c\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u167f\u1681-\u169a\u16a0-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1735\u1736\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17b6\u17be-\u17c5\u17c7\u17c8\u17d4-\u17da\u17dc\u17e0-\u17e9\u1810-\u1819\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a16\u1a19\u1a1a\u1a1e-\u1a55\u1a57\u1a61\u1a63\u1a64\u1a6d-\u1a72\u1a80-\u1a89\u1a90-\u1a99\u1aa0-\u1aad\u1b04-\u1b33\u1b35\u1b3b\u1b3d-\u1b41\u1b43-\u1b4b\u1b50-\u1b6a\u1b74-\u1b7c\u1b82-\u1ba1\u1ba6\u1ba7\u1baa\u1bae-\u1be5\u1be7\u1bea-\u1bec\u1bee\u1bf2\u1bf3\u1bfc-\u1c2b\u1c34\u1c35\u1c3b-\u1c49\u1c4d-\u1c7f\u1cc0-\u1cc7\u1cd3\u1ce1\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u200e\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u214f\u2160-\u2188\u2336-\u237a\u2395\u249c-\u24e9\u26ac\u2800-\u28ff\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d70\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u302e\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u3190-\u31ba\u31f0-\u321c\u3220-\u324f\u3260-\u327b\u327f-\u32b0\u32c0-\u32cb\u32d0-\u32fe\u3300-\u3376\u337b-\u33dd\u33e0-\u33fe\u3400-\u4db5\u4e00-\u9fd5\ua000-\ua48c\ua4d0-\ua60c\ua610-\ua62b\ua640-\ua66e\ua680-\ua69d\ua6a0-\ua6ef\ua6f2-\ua6f7\ua722-\ua787\ua789-\ua7ad\ua7b0-\ua7b7\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua824\ua827\ua830-\ua837\ua840-\ua873\ua880-\ua8c3\ua8ce-\ua8d9\ua8f2-\ua8fd\ua900-\ua925\ua92e-\ua946\ua952\ua953\ua95f-\ua97c\ua983-\ua9b2\ua9b4\ua9b5\ua9ba\ua9bb\ua9bd-\ua9cd\ua9cf-\ua9d9\ua9de-\ua9e4\ua9e6-\ua9fe\uaa00-\uaa28\uaa2f\uaa30\uaa33\uaa34\uaa40-\uaa42\uaa44-\uaa4b\uaa4d\uaa50-\uaa59\uaa5c-\uaa7b\uaa7d-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaaeb\uaaee-\uaaf5\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab65\uab70-\uabe4\uabe6\uabe7\uabe9-\uabec\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ue000-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b]|\ud800[\udc0d-\udc26]|\ud800[\udc28-\udc3a]|\ud800\udc3c|\ud800\udc3d|\ud800[\udc3f-\udc4d]|\ud800[\udc50-\udc5d]|\ud800[\udc80-\udcfa]|\ud800\udd00|\ud800\udd02|\ud800[\udd07-\udd33]|\ud800[\udd37-\udd3f]|\ud800[\uddd0-\uddfc]|\ud800[\ude80-\ude9c]|\ud800[\udea0-\uded0]|\ud800[\udf00-\udf23]|\ud800[\udf30-\udf4a]|\ud800[\udf50-\udf75]|\ud800[\udf80-\udf9d]|\ud800[\udf9f-\udfc3]|\ud800[\udfc8-\udfd5]|\ud801[\udc00-\udc9d]|\ud801[\udca0-\udca9]|\ud801[\udd00-\udd27]|\ud801[\udd30-\udd63]|\ud801\udd6f|\ud801[\ude00-\udf36]|\ud801[\udf40-\udf55]|\ud801[\udf60-\udf67]|\ud804\udc00|\ud804[\udc02-\udc37]|\ud804[\udc47-\udc4d]|\ud804[\udc66-\udc6f]|\ud804[\udc82-\udcb2]|\ud804\udcb7|\ud804\udcb8|\ud804[\udcbb-\udcc1]|\ud804[\udcd0-\udce8]|\ud804[\udcf0-\udcf9]|\ud804[\udd03-\udd26]|\ud804\udd2c|\ud804[\udd36-\udd43]|\ud804[\udd50-\udd72]|\ud804[\udd74-\udd76]|\ud804[\udd82-\uddb5]|\ud804[\uddbf-\uddc9]|\ud804\uddcd|\ud804[\uddd0-\udddf]|\ud804[\udde1-\uddf4]|\ud804[\ude00-\ude11]|\ud804[\ude13-\ude2e]|\ud804\ude32|\ud804\ude33|\ud804\ude35|\ud804[\ude38-\ude3d]|\ud804[\ude80-\ude86]|\ud804\ude88|\ud804[\ude8a-\ude8d]|\ud804[\ude8f-\ude9d]|\ud804[\ude9f-\udea9]|\ud804[\udeb0-\udede]|\ud804[\udee0-\udee2]|\ud804[\udef0-\udef9]|\ud804\udf02|\ud804\udf03|\ud804[\udf05-\udf0c]|\ud804\udf0f|\ud804\udf10|\ud804[\udf13-\udf28]|\ud804[\udf2a-\udf30]|\ud804\udf32|\ud804\udf33|\ud804[\udf35-\udf39]|\ud804[\udf3d-\udf3f]|\ud804[\udf41-\udf44]|\ud804\udf47|\ud804\udf48|\ud804[\udf4b-\udf4d]|\ud804\udf50|\ud804\udf57|\ud804[\udf5d-\udf63]|\ud805[\udc80-\udcb2]|\ud805\udcb9|\ud805[\udcbb-\udcbe]|\ud805\udcc1|\ud805[\udcc4-\udcc7]|\ud805[\udcd0-\udcd9]|\ud805[\udd80-\uddb1]|\ud805[\uddb8-\uddbb]|\ud805\uddbe|\ud805[\uddc1-\udddb]|\ud805[\ude00-\ude32]|\ud805\ude3b|\ud805\ude3c|\ud805\ude3e|\ud805[\ude41-\ude44]|\ud805[\ude50-\ude59]|\ud805[\ude80-\udeaa]|\ud805\udeac|\ud805\udeae|\ud805\udeaf|\ud805\udeb6|\ud805[\udec0-\udec9]|\ud805[\udf00-\udf19]|\ud805\udf20|\ud805\udf21|\ud805\udf26|\ud805[\udf30-\udf3f]|\ud806[\udca0-\udcf2]|\ud806\udcff|\ud806[\udec0-\udef8]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e]|\ud809[\udc70-\udc74]|\ud809[\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38]|\ud81a[\ude40-\ude5e]|\ud81a[\ude60-\ude69]|\ud81a\ude6e|\ud81a\ude6f|\ud81a[\uded0-\udeed]|\ud81a\udef5|\ud81a[\udf00-\udf2f]|\ud81a[\udf37-\udf45]|\ud81a[\udf50-\udf59]|\ud81a[\udf5b-\udf61]|\ud81a[\udf63-\udf77]|\ud81a[\udf7d-\udf8f]|\ud81b[\udf00-\udf44]|\ud81b[\udf50-\udf7e]|\ud81b[\udf93-\udf9f]|\ud82c\udc00|\ud82c\udc01|\ud82f[\udc00-\udc6a]|\ud82f[\udc70-\udc7c]|\ud82f[\udc80-\udc88]|\ud82f[\udc90-\udc99]|\ud82f\udc9c|\ud82f\udc9f|\ud834[\udc00-\udcf5]|\ud834[\udd00-\udd26]|\ud834[\udd29-\udd66]|\ud834[\udd6a-\udd72]|\ud834\udd83|\ud834\udd84|\ud834[\udd8c-\udda9]|\ud834[\uddae-\udde8]|\ud834[\udf60-\udf71]|\ud835[\udc00-\udc54]|\ud835[\udc56-\udc9c]|\ud835\udc9e|\ud835\udc9f|\ud835\udca2|\ud835\udca5|\ud835\udca6|\ud835[\udca9-\udcac]|\ud835[\udcae-\udcb9]|\ud835\udcbb|\ud835[\udcbd-\udcc3]|\ud835[\udcc5-\udd05]|\ud835[\udd07-\udd0a]|\ud835[\udd0d-\udd14]|\ud835[\udd16-\udd1c]|\ud835[\udd1e-\udd39]|\ud835[\udd3b-\udd3e]|\ud835[\udd40-\udd44]|\ud835\udd46|\ud835[\udd4a-\udd50]|\ud835[\udd52-\udea5]|\ud835[\udea8-\udeda]|\ud835[\udedc-\udf14]|\ud835[\udf16-\udf4e]|\ud835[\udf50-\udf88]|\ud835[\udf8a-\udfc2]|\ud835[\udfc4-\udfcb]|\ud836[\udc00-\uddff]|\ud836[\ude37-\ude3a]|\ud836[\ude6d-\ude74]|\ud836[\ude76-\ude83]|\ud836[\ude85-\ude8b]|\ud83c[\udd10-\udd2e]|\ud83c[\udd30-\udd69]|\ud83c[\udd70-\udd9a]|\ud83c[\udde6-\ude02]|\ud83c[\ude10-\ude3a]|\ud83c[\ude40-\ude48]|\ud83c\ude50|\ud83c\ude51|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6]|\ud869[\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34]|\ud86d[\udf40-\udfff]|\ud86e[\udc00-\udc1d]|\ud86e[\udc20-\udfff]|[\ud86f-\ud872][\udc00-\udfff]|\ud873[\udc00-\udea1]|\ud87e[\udc00-\ude1d]|[\udb80-\udbbe][\udc00-\udfff]|\udbbf[\udc00-\udffd]|[\udbc0-\udbfe][\udc00-\udfff]|\udbff[\udc00-\udffd]' +
+                       ')|(' +
+                               '[\u0590\u05be\u05c0\u05c3\u05c6\u05c8-\u05ff\u07c0-\u07ea\u07f4\u07f5\u07fa-\u0815\u081a\u0824\u0828\u082e-\u0858\u085c-\u089f\u200f\ufb1d\ufb1f-\ufb28\ufb2a-\ufb4f\u0608\u060b\u060d\u061b-\u064a\u066d-\u066f\u0671-\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u0710\u0712-\u072f\u074b-\u07a5\u07b1-\u07bf\u08a0-\u08e2\ufb50-\ufd3d\ufd40-\ufdcf\ufdf0-\ufdfc\ufdfe\ufdff\ufe70-\ufefe]|\ud802[\udc00-\udd1e]|\ud802[\udd20-\ude00]|\ud802\ude04|\ud802[\ude07-\ude0b]|\ud802[\ude10-\ude37]|\ud802[\ude3b-\ude3e]|\ud802[\ude40-\udee4]|\ud802[\udee7-\udf38]|\ud802[\udf40-\udfff]|\ud803[\udc00-\ude5f]|\ud803[\ude7f-\udfff]|\ud83a[\udc00-\udccf]|\ud83a[\udcd7-\udfff]|\ud83b[\udc00-\uddff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\udf00-\udfff]|\ud83b[\ude00-\udeef]|\ud83b[\udef2-\udeff]' +
+                       ')' +
+               ')'
+       );
+
+       /**
+        * Gets directionality of the first strongly directional codepoint
+        *
+        * This is the rule the BIDI algorithm uses to determine the directionality of
+        * paragraphs ( http://unicode.org/reports/tr9/#The_Paragraph_Level ) and
+        * FSI isolates ( http://unicode.org/reports/tr9/#Explicit_Directional_Isolates ).
+        *
+        * TODO: Does not handle BIDI control characters inside the text.
+        * TODO: Does not handle unallocated characters.
+        */
+       function strongDirFromContent( text ) {
+               var m = text.match( strongDirRegExp );
+               if ( !m ) {
+                       return null;
+               }
+               if ( m[2] === undefined ) {
+                       return 'ltr';
+               }
+               return 'rtl';
+       }
+
+       $.extend( $.i18n.parser.emitter, {
+               /**
+                * Wraps argument with unicode control characters for directionality safety
+                *
+                * This solves the problem where directionality-neutral characters at the edge of
+                * the argument string get interpreted with the wrong directionality from the
+                * enclosing context, giving renderings that look corrupted like "(Ben_(WMF".
+                *
+                * The wrapping is LRE...PDF or RLE...PDF, depending on the detected
+                * directionality of the argument string, using the BIDI algorithm's own "First
+                * strong directional codepoint" rule. Essentially, this works round the fact that
+                * there is no embedding equivalent of U+2068 FSI (isolation with heuristic
+                * direction inference). The latter is cleaner but still not widely supported.
+                */
+               bidi: function ( nodes ) {
+                       var dir = strongDirFromContent( nodes[0] );
+                       if ( dir === 'ltr' ) {
+                               // Wrap in LEFT-TO-RIGHT EMBEDDING ... POP DIRECTIONAL FORMATTING
+                               return '\u202A' + nodes[0] + '\u202C';
+                       }
+                       if ( dir === 'rtl' ) {
+                               // Wrap in RIGHT-TO-LEFT EMBEDDING ... POP DIRECTIONAL FORMATTING
+                               return '\u202B' + nodes[0] + '\u202C';
+                       }
+                       // No strong directionality: do not wrap
+                       return nodes[0];
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.emitter.js b/resources/lib/jquery.i18n/src/jquery.i18n.emitter.js
new file mode 100644 (file)
index 0000000..b26f147
--- /dev/null
@@ -0,0 +1,168 @@
+/**
+ * jQuery Internationalization library
+ *
+ * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar
+ *
+ * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
+ * anything special to choose one license or the other and you don't have to
+ * notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       var MessageParserEmitter = function () {
+               this.language = $.i18n.languages[String.locale] || $.i18n.languages['default'];
+       };
+
+       MessageParserEmitter.prototype = {
+               constructor: MessageParserEmitter,
+
+               /**
+                * (We put this method definition here, and not in prototype, to make
+                * sure it's not overwritten by any magic.) Walk entire node structure,
+                * applying replacements and template functions when appropriate
+                *
+                * @param {Mixed} node abstract syntax tree (top node or subnode)
+                * @param {Array} replacements for $1, $2, ... $n
+                * @return {Mixed} single-string node or array of nodes suitable for
+                *  jQuery appending.
+                */
+               emit: function ( node, replacements ) {
+                       var ret, subnodes, operation,
+                               messageParserEmitter = this;
+
+                       switch ( typeof node ) {
+                       case 'string':
+                       case 'number':
+                               ret = node;
+                               break;
+                       case 'object':
+                               // node is an array of nodes
+                               subnodes = $.map( node.slice( 1 ), function ( n ) {
+                                       return messageParserEmitter.emit( n, replacements );
+                               } );
+
+                               operation = node[0].toLowerCase();
+
+                               if ( typeof messageParserEmitter[operation] === 'function' ) {
+                                       ret = messageParserEmitter[operation]( subnodes, replacements );
+                               } else {
+                                       throw new Error( 'unknown operation "' + operation + '"' );
+                               }
+
+                               break;
+                       case 'undefined':
+                               // Parsing the empty string (as an entire expression, or as a
+                               // paramExpression in a template) results in undefined
+                               // Perhaps a more clever parser can detect this, and return the
+                               // empty string? Or is that useful information?
+                               // The logical thing is probably to return the empty string here
+                               // when we encounter undefined.
+                               ret = '';
+                               break;
+                       default:
+                               throw new Error( 'unexpected type in AST: ' + typeof node );
+                       }
+
+                       return ret;
+               },
+
+               /**
+                * Parsing has been applied depth-first we can assume that all nodes
+                * here are single nodes Must return a single node to parents -- a
+                * jQuery with synthetic span However, unwrap any other synthetic spans
+                * in our children and pass them upwards
+                *
+                * @param {Array} nodes Mixed, some single nodes, some arrays of nodes.
+                * @return String
+                */
+               concat: function ( nodes ) {
+                       var result = '';
+
+                       $.each( nodes, function ( i, node ) {
+                               // strings, integers, anything else
+                               result += node;
+                       } );
+
+                       return result;
+               },
+
+               /**
+                * Return escaped replacement of correct index, or string if
+                * unavailable. Note that we expect the parsed parameter to be
+                * zero-based. i.e. $1 should have become [ 0 ]. if the specified
+                * parameter is not found return the same string (e.g. "$99" ->
+                * parameter 98 -> not found -> return "$99" ) TODO throw error if
+                * nodes.length > 1 ?
+                *
+                * @param {Array} nodes One element, integer, n >= 0
+                * @param {Array} replacements for $1, $2, ... $n
+                * @return {string} replacement
+                */
+               replace: function ( nodes, replacements ) {
+                       var index = parseInt( nodes[0], 10 );
+
+                       if ( index < replacements.length ) {
+                               // replacement is not a string, don't touch!
+                               return replacements[index];
+                       } else {
+                               // index not found, fallback to displaying variable
+                               return '$' + ( index + 1 );
+                       }
+               },
+
+               /**
+                * Transform parsed structure into pluralization n.b. The first node may
+                * be a non-integer (for instance, a string representing an Arabic
+                * number). So convert it back with the current language's
+                * convertNumber.
+                *
+                * @param {Array} nodes List [ {String|Number}, {String}, {String} ... ]
+                * @return {String} selected pluralized form according to current
+                *  language.
+                */
+               plural: function ( nodes ) {
+                       var count = parseFloat( this.language.convertNumber( nodes[0], 10 ) ),
+                               forms = nodes.slice( 1 );
+
+                       return forms.length ? this.language.convertPlural( count, forms ) : '';
+               },
+
+               /**
+                * Transform parsed structure into gender Usage
+                * {{gender:gender|masculine|feminine|neutral}}.
+                *
+                * @param {Array} nodes List [ {String}, {String}, {String} , {String} ]
+                * @return {String} selected gender form according to current language
+                */
+               gender: function ( nodes ) {
+                       var gender = nodes[0],
+                               forms = nodes.slice( 1 );
+
+                       return this.language.gender( gender, forms );
+               },
+
+               /**
+                * Transform parsed structure into grammar conversion. Invoked by
+                * putting {{grammar:form|word}} in a message
+                *
+                * @param {Array} nodes List [{Grammar case eg: genitive}, {String word}]
+                * @return {String} selected grammatical form according to current
+                *  language.
+                */
+               grammar: function ( nodes ) {
+                       var form = nodes[0],
+                               word = nodes[1];
+
+                       return word && form && this.language.convertGrammar( word, form );
+               }
+       };
+
+       $.extend( $.i18n.parser.emitter, new MessageParserEmitter() );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js b/resources/lib/jquery.i18n/src/jquery.i18n.fallbacks.js
new file mode 100644 (file)
index 0000000..4584c5f
--- /dev/null
@@ -0,0 +1,186 @@
+/**
+ * jQuery Internationalization library
+ *
+ * Copyright (C) 2012 Santhosh Thottingal
+ *
+ * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to
+ * choose one license or the other and you don't have to notify anyone which license you are using.
+ * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+( function ( $, undefined ) {
+       'use strict';
+
+       $.i18n = $.i18n || {};
+       $.extend( $.i18n.fallbacks, {
+               ab: [ 'ru' ],
+               ace: [ 'id' ],
+               aln: [ 'sq' ],
+               // Not so standard - als is supposed to be Tosk Albanian,
+               // but in Wikipedia it's used for a Germanic language.
+               als: [ 'gsw', 'de' ],
+               an: [ 'es' ],
+               anp: [ 'hi' ],
+               arn: [ 'es' ],
+               arz: [ 'ar' ],
+               av: [ 'ru' ],
+               ay: [ 'es' ],
+               ba: [ 'ru' ],
+               bar: [ 'de' ],
+               'bat-smg': [ 'sgs', 'lt' ],
+               bcc: [ 'fa' ],
+               'be-x-old': [ 'be-tarask' ],
+               bh: [ 'bho' ],
+               bjn: [ 'id' ],
+               bm: [ 'fr' ],
+               bpy: [ 'bn' ],
+               bqi: [ 'fa' ],
+               bug: [ 'id' ],
+               'cbk-zam': [ 'es' ],
+               ce: [ 'ru' ],
+               crh: [ 'crh-latn' ],
+               'crh-cyrl': [ 'ru' ],
+               csb: [ 'pl' ],
+               cv: [ 'ru' ],
+               'de-at': [ 'de' ],
+               'de-ch': [ 'de' ],
+               'de-formal': [ 'de' ],
+               dsb: [ 'de' ],
+               dtp: [ 'ms' ],
+               egl: [ 'it' ],
+               eml: [ 'it' ],
+               ff: [ 'fr' ],
+               fit: [ 'fi' ],
+               'fiu-vro': [ 'vro', 'et' ],
+               frc: [ 'fr' ],
+               frp: [ 'fr' ],
+               frr: [ 'de' ],
+               fur: [ 'it' ],
+               gag: [ 'tr' ],
+               gan: [ 'gan-hant', 'zh-hant', 'zh-hans' ],
+               'gan-hans': [ 'zh-hans' ],
+               'gan-hant': [ 'zh-hant', 'zh-hans' ],
+               gl: [ 'pt' ],
+               glk: [ 'fa' ],
+               gn: [ 'es' ],
+               gsw: [ 'de' ],
+               hif: [ 'hif-latn' ],
+               hsb: [ 'de' ],
+               ht: [ 'fr' ],
+               ii: [ 'zh-cn', 'zh-hans' ],
+               inh: [ 'ru' ],
+               iu: [ 'ike-cans' ],
+               jut: [ 'da' ],
+               jv: [ 'id' ],
+               kaa: [ 'kk-latn', 'kk-cyrl' ],
+               kbd: [ 'kbd-cyrl' ],
+               khw: [ 'ur' ],
+               kiu: [ 'tr' ],
+               kk: [ 'kk-cyrl' ],
+               'kk-arab': [ 'kk-cyrl' ],
+               'kk-latn': [ 'kk-cyrl' ],
+               'kk-cn': [ 'kk-arab', 'kk-cyrl' ],
+               'kk-kz': [ 'kk-cyrl' ],
+               'kk-tr': [ 'kk-latn', 'kk-cyrl' ],
+               kl: [ 'da' ],
+               'ko-kp': [ 'ko' ],
+               koi: [ 'ru' ],
+               krc: [ 'ru' ],
+               ks: [ 'ks-arab' ],
+               ksh: [ 'de' ],
+               ku: [ 'ku-latn' ],
+               'ku-arab': [ 'ckb' ],
+               kv: [ 'ru' ],
+               lad: [ 'es' ],
+               lb: [ 'de' ],
+               lbe: [ 'ru' ],
+               lez: [ 'ru' ],
+               li: [ 'nl' ],
+               lij: [ 'it' ],
+               liv: [ 'et' ],
+               lmo: [ 'it' ],
+               ln: [ 'fr' ],
+               ltg: [ 'lv' ],
+               lzz: [ 'tr' ],
+               mai: [ 'hi' ],
+               'map-bms': [ 'jv', 'id' ],
+               mg: [ 'fr' ],
+               mhr: [ 'ru' ],
+               min: [ 'id' ],
+               mo: [ 'ro' ],
+               mrj: [ 'ru' ],
+               mwl: [ 'pt' ],
+               myv: [ 'ru' ],
+               mzn: [ 'fa' ],
+               nah: [ 'es' ],
+               nap: [ 'it' ],
+               nds: [ 'de' ],
+               'nds-nl': [ 'nl' ],
+               'nl-informal': [ 'nl' ],
+               no: [ 'nb' ],
+               os: [ 'ru' ],
+               pcd: [ 'fr' ],
+               pdc: [ 'de' ],
+               pdt: [ 'de' ],
+               pfl: [ 'de' ],
+               pms: [ 'it' ],
+               pt: [ 'pt-br' ],
+               'pt-br': [ 'pt' ],
+               qu: [ 'es' ],
+               qug: [ 'qu', 'es' ],
+               rgn: [ 'it' ],
+               rmy: [ 'ro' ],
+               'roa-rup': [ 'rup' ],
+               rue: [ 'uk', 'ru' ],
+               ruq: [ 'ruq-latn', 'ro' ],
+               'ruq-cyrl': [ 'mk' ],
+               'ruq-latn': [ 'ro' ],
+               sa: [ 'hi' ],
+               sah: [ 'ru' ],
+               scn: [ 'it' ],
+               sg: [ 'fr' ],
+               sgs: [ 'lt' ],
+               sli: [ 'de' ],
+               sr: [ 'sr-ec' ],
+               srn: [ 'nl' ],
+               stq: [ 'de' ],
+               su: [ 'id' ],
+               szl: [ 'pl' ],
+               tcy: [ 'kn' ],
+               tg: [ 'tg-cyrl' ],
+               tt: [ 'tt-cyrl', 'ru' ],
+               'tt-cyrl': [ 'ru' ],
+               ty: [ 'fr' ],
+               udm: [ 'ru' ],
+               ug: [ 'ug-arab' ],
+               uk: [ 'ru' ],
+               vec: [ 'it' ],
+               vep: [ 'et' ],
+               vls: [ 'nl' ],
+               vmf: [ 'de' ],
+               vot: [ 'fi' ],
+               vro: [ 'et' ],
+               wa: [ 'fr' ],
+               wo: [ 'fr' ],
+               wuu: [ 'zh-hans' ],
+               xal: [ 'ru' ],
+               xmf: [ 'ka' ],
+               yi: [ 'he' ],
+               za: [ 'zh-hans' ],
+               zea: [ 'nl' ],
+               zh: [ 'zh-hans' ],
+               'zh-classical': [ 'lzh' ],
+               'zh-cn': [ 'zh-hans' ],
+               'zh-hant': [ 'zh-hans' ],
+               'zh-hk': [ 'zh-hant', 'zh-hans' ],
+               'zh-min-nan': [ 'nan' ],
+               'zh-mo': [ 'zh-hk', 'zh-hant', 'zh-hans' ],
+               'zh-my': [ 'zh-sg', 'zh-hans' ],
+               'zh-sg': [ 'zh-hans' ],
+               'zh-tw': [ 'zh-hant', 'zh-hans' ],
+               'zh-yue': [ 'yue' ]
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.js b/resources/lib/jquery.i18n/src/jquery.i18n.js
new file mode 100644 (file)
index 0000000..9236e4e
--- /dev/null
@@ -0,0 +1,287 @@
+/**
+ * jQuery Internationalization library
+ *
+ * Copyright (C) 2012 Santhosh Thottingal
+ *
+ * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
+ * anything special to choose one license or the other and you don't have to
+ * notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       var nav, I18N,
+               slice = Array.prototype.slice;
+       /**
+        * @constructor
+        * @param {Object} options
+        */
+       I18N = function ( options ) {
+               // Load defaults
+               this.options = $.extend( {}, I18N.defaults, options );
+
+               this.parser = this.options.parser;
+               this.locale = this.options.locale;
+               this.messageStore = this.options.messageStore;
+               this.languages = {};
+
+               this.init();
+       };
+
+       I18N.prototype = {
+               /**
+                * Initialize by loading locales and setting up
+                * String.prototype.toLocaleString and String.locale.
+                */
+               init: function () {
+                       var i18n = this;
+
+                       // Set locale of String environment
+                       String.locale = i18n.locale;
+
+                       // Override String.localeString method
+                       String.prototype.toLocaleString = function () {
+                               var localeParts, localePartIndex, value, locale, fallbackIndex,
+                                       tryingLocale, message;
+
+                               value = this.valueOf();
+                               locale = i18n.locale;
+                               fallbackIndex = 0;
+
+                               while ( locale ) {
+                                       // Iterate through locales starting at most-specific until
+                                       // localization is found. As in fi-Latn-FI, fi-Latn and fi.
+                                       localeParts = locale.split( '-' );
+                                       localePartIndex = localeParts.length;
+
+                                       do {
+                                               tryingLocale = localeParts.slice( 0, localePartIndex ).join( '-' );
+                                               message = i18n.messageStore.get( tryingLocale, value );
+
+                                               if ( message ) {
+                                                       return message;
+                                               }
+
+                                               localePartIndex--;
+                                       } while ( localePartIndex );
+
+                                       if ( locale === 'en' ) {
+                                               break;
+                                       }
+
+                                       locale = ( $.i18n.fallbacks[i18n.locale] && $.i18n.fallbacks[i18n.locale][fallbackIndex] ) ||
+                                               i18n.options.fallbackLocale;
+                                       $.i18n.log( 'Trying fallback locale for ' + i18n.locale + ': ' + locale );
+
+                                       fallbackIndex++;
+                               }
+
+                               // key not found
+                               return '';
+                       };
+               },
+
+               /*
+                * Destroy the i18n instance.
+                */
+               destroy: function () {
+                       $.removeData( document, 'i18n' );
+               },
+
+               /**
+                * General message loading API This can take a URL string for
+                * the json formatted messages. Example:
+                * <code>load('path/to/all_localizations.json');</code>
+                *
+                * To load a localization file for a locale:
+                * <code>
+                * load('path/to/de-messages.json', 'de' );
+                * </code>
+                *
+                * To load a localization file from a directory:
+                * <code>
+                * load('path/to/i18n/directory', 'de' );
+                * </code>
+                * The above method has the advantage of fallback resolution.
+                * ie, it will automatically load the fallback locales for de.
+                * For most usecases, this is the recommended method.
+                * It is optional to have trailing slash at end.
+                *
+                * A data object containing message key- message translation mappings
+                * can also be passed. Example:
+                * <code>
+                * load( { 'hello' : 'Hello' }, optionalLocale );
+                * </code>
+                *
+                * A source map containing key-value pair of languagename and locations
+                * can also be passed. Example:
+                * <code>
+                * load( {
+                * bn: 'i18n/bn.json',
+                * he: 'i18n/he.json',
+                * en: 'i18n/en.json'
+                * } )
+                * </code>
+                *
+                * If the data argument is null/undefined/false,
+                * all cached messages for the i18n instance will get reset.
+                *
+                * @param {String|Object} source
+                * @param {String} locale Language tag
+                * @returns {jQuery.Promise}
+                */
+               load: function ( source, locale ) {
+                       var fallbackLocales, locIndex, fallbackLocale, sourceMap = {};
+                       if ( !source && !locale ) {
+                               source = 'i18n/' + $.i18n().locale + '.json';
+                               locale = $.i18n().locale;
+                       }
+                       if ( typeof source === 'string' &&
+                               source.split( '.' ).pop() !== 'json'
+                       ) {
+                               // Load specified locale then check for fallbacks when directory is specified in load()
+                               sourceMap[locale] = source + '/' + locale + '.json';
+                               fallbackLocales = ( $.i18n.fallbacks[locale] || [] )
+                                       .concat( this.options.fallbackLocale );
+                               for ( locIndex in fallbackLocales ) {
+                                       fallbackLocale = fallbackLocales[locIndex];
+                                       sourceMap[fallbackLocale] = source + '/' + fallbackLocale + '.json';
+                               }
+                               return this.load( sourceMap );
+                       } else {
+                               return this.messageStore.load( source, locale );
+                       }
+
+               },
+
+               /**
+                * Does parameter and magic word substitution.
+                *
+                * @param {string} key Message key
+                * @param {Array} parameters Message parameters
+                * @return {string}
+                */
+               parse: function ( key, parameters ) {
+                       var message = key.toLocaleString();
+                       // FIXME: This changes the state of the I18N object,
+                       // should probably not change the 'this.parser' but just
+                       // pass it to the parser.
+                       this.parser.language = $.i18n.languages[$.i18n().locale] || $.i18n.languages['default'];
+                       if ( message === '' ) {
+                               message = key;
+                       }
+                       return this.parser.parse( message, parameters );
+               }
+       };
+
+       /**
+        * Process a message from the $.I18N instance
+        * for the current document, stored in jQuery.data(document).
+        *
+        * @param {string} key Key of the message.
+        * @param {string} param1 [param...] Variadic list of parameters for {key}.
+        * @return {string|$.I18N} Parsed message, or if no key was given
+        * the instance of $.I18N is returned.
+        */
+       $.i18n = function ( key, param1 ) {
+               var parameters,
+                       i18n = $.data( document, 'i18n' ),
+                       options = typeof key === 'object' && key;
+
+               // If the locale option for this call is different then the setup so far,
+               // update it automatically. This doesn't just change the context for this
+               // call but for all future call as well.
+               // If there is no i18n setup yet, don't do this. It will be taken care of
+               // by the `new I18N` construction below.
+               // NOTE: It should only change language for this one call.
+               // Then cache instances of I18N somewhere.
+               if ( options && options.locale && i18n && i18n.locale !== options.locale ) {
+                       String.locale = i18n.locale = options.locale;
+               }
+
+               if ( !i18n ) {
+                       i18n = new I18N( options );
+                       $.data( document, 'i18n', i18n );
+               }
+
+               if ( typeof key === 'string' ) {
+                       if ( param1 !== undefined ) {
+                               parameters = slice.call( arguments, 1 );
+                       } else {
+                               parameters = [];
+                       }
+
+                       return i18n.parse( key, parameters );
+               } else {
+                       // FIXME: remove this feature/bug.
+                       return i18n;
+               }
+       };
+
+       $.fn.i18n = function () {
+               var i18n = $.data( document, 'i18n' );
+
+               if ( !i18n ) {
+                       i18n = new I18N();
+                       $.data( document, 'i18n', i18n );
+               }
+               String.locale = i18n.locale;
+               return this.each( function () {
+                       var $this = $( this ),
+                               messageKey = $this.data( 'i18n' );
+
+                       if ( messageKey ) {
+                               $this.text( i18n.parse( messageKey ) );
+                       } else {
+                               $this.find( '[data-i18n]' ).i18n();
+                       }
+               } );
+       };
+
+       String.locale = String.locale || $( 'html' ).attr( 'lang' );
+
+       if ( !String.locale ) {
+               if ( typeof window.navigator !== undefined ) {
+                       nav = window.navigator;
+                       String.locale = nav.language || nav.userLanguage || '';
+               } else {
+                       String.locale = '';
+               }
+       }
+
+       $.i18n.languages = {};
+       $.i18n.messageStore = $.i18n.messageStore || {};
+       $.i18n.parser = {
+               // The default parser only handles variable substitution
+               parse: function ( message, parameters ) {
+                       return message.replace( /\$(\d+)/g, function ( str, match ) {
+                               var index = parseInt( match, 10 ) - 1;
+                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
+                       } );
+               },
+               emitter: {}
+       };
+       $.i18n.fallbacks = {};
+       $.i18n.debug = false;
+       $.i18n.log = function ( /* arguments */ ) {
+               if ( window.console && $.i18n.debug ) {
+                       window.console.log.apply( window.console, arguments );
+               }
+       };
+       /* Static members */
+       I18N.defaults = {
+               locale: String.locale,
+               fallbackLocale: 'en',
+               parser: $.i18n.parser,
+               messageStore: $.i18n.messageStore
+       };
+
+       // Expose constructor
+       $.i18n.constructor = I18N;
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.language.js b/resources/lib/jquery.i18n/src/jquery.i18n.language.js
new file mode 100644 (file)
index 0000000..3ce0a99
--- /dev/null
@@ -0,0 +1,472 @@
+/*global pluralRuleParser */
+( function ( $ ) {
+       'use strict';
+
+       var language = {
+               // CLDR plural rules generated using
+               // libs/CLDRPluralRuleParser/tools/PluralXML2JSON.html
+               pluralRules: {
+                       ak: {
+                               one: 'n = 0..1'
+                       },
+                       am: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       ar: {
+                               zero: 'n = 0',
+                               one: 'n = 1',
+                               two: 'n = 2',
+                               few: 'n % 100 = 3..10',
+                               many: 'n % 100 = 11..99'
+                       },
+                       be: {
+                               one: 'n % 10 = 1 and n % 100 != 11',
+                               few: 'n % 10 = 2..4 and n % 100 != 12..14',
+                               many: 'n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14'
+                       },
+                       bh: {
+                               one: 'n = 0..1'
+                       },
+                       bn: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       br: {
+                               one: 'n % 10 = 1 and n % 100 != 11,71,91',
+                               two: 'n % 10 = 2 and n % 100 != 12,72,92',
+                               few: 'n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99',
+                               many: 'n != 0 and n % 1000000 = 0'
+                       },
+                       bs: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
+                       },
+                       cs: {
+                               one: 'i = 1 and v = 0',
+                               few: 'i = 2..4 and v = 0',
+                               many: 'v != 0'
+                       },
+                       cy: {
+                               zero: 'n = 0',
+                               one: 'n = 1',
+                               two: 'n = 2',
+                               few: 'n = 3',
+                               many: 'n = 6'
+                       },
+                       da: {
+                               one: 'n = 1 or t != 0 and i = 0,1'
+                       },
+                       fa: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       ff: {
+                               one: 'i = 0,1'
+                       },
+                       fil: {
+                               one: 'i = 0..1 and v = 0'
+                       },
+                       fr: {
+                               one: 'i = 0,1'
+                       },
+                       ga: {
+                               one: 'n = 1',
+                               two: 'n = 2',
+                               few: 'n = 3..6',
+                               many: 'n = 7..10'
+                       },
+                       gd: {
+                               one: 'n = 1,11',
+                               two: 'n = 2,12',
+                               few: 'n = 3..10,13..19'
+                       },
+                       gu: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       guw: {
+                               one: 'n = 0..1'
+                       },
+                       gv: {
+                               one: 'n % 10 = 1',
+                               two: 'n % 10 = 2',
+                               few: 'n % 100 = 0,20,40,60'
+                       },
+                       he: {
+                               one: 'i = 1 and v = 0',
+                               two: 'i = 2 and v = 0',
+                               many: 'v = 0 and n != 0..10 and n % 10 = 0'
+                       },
+                       hi: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       hr: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
+                       },
+                       hy: {
+                               one: 'i = 0,1'
+                       },
+                       is: {
+                               one: 't = 0 and i % 10 = 1 and i % 100 != 11 or t != 0'
+                       },
+                       iu: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       iw: {
+                               one: 'i = 1 and v = 0',
+                               two: 'i = 2 and v = 0',
+                               many: 'v = 0 and n != 0..10 and n % 10 = 0'
+                       },
+                       kab: {
+                               one: 'i = 0,1'
+                       },
+                       kn: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       kw: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       lag: {
+                               zero: 'n = 0',
+                               one: 'i = 0,1 and n != 0'
+                       },
+                       ln: {
+                               one: 'n = 0..1'
+                       },
+                       lt: {
+                               one: 'n % 10 = 1 and n % 100 != 11..19',
+                               few: 'n % 10 = 2..9 and n % 100 != 11..19',
+                               many: 'f != 0'
+                       },
+                       lv: {
+                               zero: 'n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19',
+                               one: 'n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1'
+                       },
+                       mg: {
+                               one: 'n = 0..1'
+                       },
+                       mk: {
+                               one: 'v = 0 and i % 10 = 1 or f % 10 = 1'
+                       },
+                       mo: {
+                               one: 'i = 1 and v = 0',
+                               few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'
+                       },
+                       mr: {
+                               one: 'i = 0 or n = 1'
+                       },
+                       mt: {
+                               one: 'n = 1',
+                               few: 'n = 0 or n % 100 = 2..10',
+                               many: 'n % 100 = 11..19'
+                       },
+                       naq: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       nso: {
+                               one: 'n = 0..1'
+                       },
+                       pa: {
+                               one: 'n = 0..1'
+                       },
+                       pl: {
+                               one: 'i = 1 and v = 0',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',
+                               many: 'v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14'
+                       },
+                       pt: {
+                               one: 'i = 1 and v = 0 or i = 0 and t = 1'
+                       },
+                       // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
+                       pt_PT: {
+                               one: 'n = 1 and v = 0'
+                       },
+                       // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
+                       ro: {
+                               one: 'i = 1 and v = 0',
+                               few: 'v != 0 or n = 0 or n != 1 and n % 100 = 1..19'
+                       },
+                       ru: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11',
+                               many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'
+                       },
+                       se: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       sh: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
+                       },
+                       shi: {
+                               one: 'i = 0 or n = 1',
+                               few: 'n = 2..10'
+                       },
+                       si: {
+                               one: 'n = 0,1 or i = 0 and f = 1'
+                       },
+                       sk: {
+                               one: 'i = 1 and v = 0',
+                               few: 'i = 2..4 and v = 0',
+                               many: 'v != 0'
+                       },
+                       sl: {
+                               one: 'v = 0 and i % 100 = 1',
+                               two: 'v = 0 and i % 100 = 2',
+                               few: 'v = 0 and i % 100 = 3..4 or v != 0'
+                       },
+                       sma: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       smi: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       smj: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       smn: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       sms: {
+                               one: 'n = 1',
+                               two: 'n = 2'
+                       },
+                       sr: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14'
+                       },
+                       ti: {
+                               one: 'n = 0..1'
+                       },
+                       tl: {
+                               one: 'i = 0..1 and v = 0'
+                       },
+                       tzm: {
+                               one: 'n = 0..1 or n = 11..99'
+                       },
+                       uk: {
+                               one: 'v = 0 and i % 10 = 1 and i % 100 != 11',
+                               few: 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14',
+                               many: 'v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14'
+                       },
+                       wa: {
+                               one: 'n = 0..1'
+                       },
+                       zu: {
+                               one: 'i = 0 or n = 1'
+                       }
+               },
+
+               /**
+                * Plural form transformations, needed for some languages.
+                *
+                * @param count
+                *            integer Non-localized quantifier
+                * @param forms
+                *            array List of plural forms
+                * @return string Correct form for quantifier in this language
+                */
+               convertPlural: function ( count, forms ) {
+                       var pluralRules,
+                               pluralFormIndex,
+                               index,
+                               explicitPluralPattern = new RegExp( '\\d+=', 'i' ),
+                               formCount,
+                               form;
+
+                       if ( !forms || forms.length === 0 ) {
+                               return '';
+                       }
+
+                       // Handle for Explicit 0= & 1= values
+                       for ( index = 0; index < forms.length; index++ ) {
+                               form = forms[index];
+                               if ( explicitPluralPattern.test( form ) ) {
+                                       formCount = parseInt( form.substring( 0, form.indexOf( '=' ) ), 10 );
+                                       if ( formCount === count ) {
+                                               return ( form.substr( form.indexOf( '=' ) + 1 ) );
+                                       }
+                                       forms[index] = undefined;
+                               }
+                       }
+
+                       forms = $.map( forms, function ( form ) {
+                               if ( form !== undefined ) {
+                                       return form;
+                               }
+                       } );
+
+                       pluralRules = this.pluralRules[$.i18n().locale];
+
+                       if ( !pluralRules ) {
+                               // default fallback.
+                               return ( count === 1 ) ? forms[0] : forms[1];
+                       }
+
+                       pluralFormIndex = this.getPluralForm( count, pluralRules );
+                       pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
+
+                       return forms[pluralFormIndex];
+               },
+
+               /**
+                * For the number, get the plural for index
+                *
+                * @param number
+                * @param pluralRules
+                * @return plural form index
+                */
+               getPluralForm: function ( number, pluralRules ) {
+                       var i,
+                               pluralForms = [ 'zero', 'one', 'two', 'few', 'many', 'other' ],
+                               pluralFormIndex = 0;
+
+                       for ( i = 0; i < pluralForms.length; i++ ) {
+                               if ( pluralRules[pluralForms[i]] ) {
+                                       if ( pluralRuleParser( pluralRules[pluralForms[i]], number ) ) {
+                                               return pluralFormIndex;
+                                       }
+
+                                       pluralFormIndex++;
+                               }
+                       }
+
+                       return pluralFormIndex;
+               },
+
+               /**
+                * Converts a number using digitTransformTable.
+                *
+                * @param {number} num Value to be converted
+                * @param {boolean} integer Convert the return value to an integer
+                */
+               convertNumber: function ( num, integer ) {
+                       var tmp, item, i,
+                               transformTable, numberString, convertedNumber;
+
+                       // Set the target Transform table:
+                       transformTable = this.digitTransformTable( $.i18n().locale );
+                       numberString = String( num );
+                       convertedNumber = '';
+
+                       if ( !transformTable ) {
+                               return num;
+                       }
+
+                       // Check if the restore to Latin number flag is set:
+                       if ( integer ) {
+                               if ( parseFloat( num, 10 ) === num ) {
+                                       return num;
+                               }
+
+                               tmp = [];
+
+                               for ( item in transformTable ) {
+                                       tmp[transformTable[item]] = item;
+                               }
+
+                               transformTable = tmp;
+                       }
+
+                       for ( i = 0; i < numberString.length; i++ ) {
+                               if ( transformTable[numberString[i]] ) {
+                                       convertedNumber += transformTable[numberString[i]];
+                               } else {
+                                       convertedNumber += numberString[i];
+                               }
+                       }
+
+                       return integer ? parseFloat( convertedNumber, 10 ) : convertedNumber;
+               },
+
+               /**
+                * Grammatical transformations, needed for inflected languages.
+                * Invoked by putting {{grammar:form|word}} in a message.
+                * Override this method for languages that need special grammar rules
+                * applied dynamically.
+                *
+                * @param word {String}
+                * @param form {String}
+                * @return {String}
+                */
+               convertGrammar: function ( word, form ) { /*jshint unused: false */
+                       return word;
+               },
+
+               /**
+                * Provides an alternative text depending on specified gender. Usage
+                * {{gender:[gender|user object]|masculine|feminine|neutral}}. If second
+                * or third parameter are not specified, masculine is used.
+                *
+                * These details may be overriden per language.
+                *
+                * @param gender
+                *      string male, female, or anything else for neutral.
+                * @param forms
+                *      array List of gender forms
+                *
+                * @return string
+                */
+               gender: function ( gender, forms ) {
+                       if ( !forms || forms.length === 0 ) {
+                               return '';
+                       }
+
+                       while ( forms.length < 2 ) {
+                               forms.push( forms[forms.length - 1] );
+                       }
+
+                       if ( gender === 'male' ) {
+                               return forms[0];
+                       }
+
+                       if ( gender === 'female' ) {
+                               return forms[1];
+                       }
+
+                       return ( forms.length === 3 ) ? forms[2] : forms[0];
+               },
+
+               /**
+                * Get the digit transform table for the given language
+                * See http://cldr.unicode.org/translation/numbering-systems
+                * @param language
+                * @returns {Array|boolean} List of digits in the passed language or false
+                * representation, or boolean false if there is no information.
+                */
+               digitTransformTable: function ( language ) {
+                       var tables = {
+                               ar: '٠١٢٣٤٥٦٧٨٩',
+                               fa: '۰۱۲۳۴۵۶۷۸۹',
+                               ml: '൦൧൨൩൪൫൬൭൮൯',
+                               kn: '೦೧೨೩೪೫೬೭೮೯',
+                               lo: '໐໑໒໓໔໕໖໗໘໙',
+                               or: '୦୧୨୩୪୫୬୭୮୯',
+                               kh: '០១២៣៤៥៦៧៨៩',
+                               pa: '੦੧੨੩੪੫੬੭੮੯',
+                               gu: '૦૧૨૩૪૫૬૭૮૯',
+                               hi: '०१२३४५६७८९',
+                               my: '၀၁၂၃၄၅၆၇၈၉',
+                               ta: '௦௧௨௩௪௫௬௭௮௯',
+                               te: '౦౧౨౩౪౫౬౭౮౯',
+                               th: '๐๑๒๓๔๕๖๗๘๙', // FIXME use iso 639 codes
+                               bo: '༠༡༢༣༤༥༦༧༨༩' // FIXME use iso 639 codes
+                       };
+
+                       if ( !tables[language] ) {
+                               return false;
+                       }
+
+                       return tables[language].split( '' );
+               }
+       };
+
+       $.extend( $.i18n.languages, {
+               default: language
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js b/resources/lib/jquery.i18n/src/jquery.i18n.messagestore.js
new file mode 100644 (file)
index 0000000..759295c
--- /dev/null
@@ -0,0 +1,125 @@
+/**
+ * jQuery Internationalization library - Message Store
+ *
+ * Copyright (C) 2012 Santhosh Thottingal
+ *
+ * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do anything special to
+ * choose one license or the other and you don't have to notify anyone which license you are using.
+ * You are free to use UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function ( $, window, undefined ) {
+       'use strict';
+
+       var MessageStore = function () {
+               this.messages = {};
+               this.sources = {};
+       };
+
+       /**
+        * See https://github.com/wikimedia/jquery.i18n/wiki/Specification#wiki-Message_File_Loading
+        */
+       MessageStore.prototype = {
+
+               /**
+                * General message loading API This can take a URL string for
+                * the json formatted messages.
+                * <code>load('path/to/all_localizations.json');</code>
+                *
+                * This can also load a localization file for a locale <code>
+                * load( 'path/to/de-messages.json', 'de' );
+                * </code>
+                * A data object containing message key- message translation mappings
+                * can also be passed Eg:
+                * <code>
+                * load( { 'hello' : 'Hello' }, optionalLocale );
+                * </code> If the data argument is
+                * null/undefined/false,
+                * all cached messages for the i18n instance will get reset.
+                *
+                * @param {String|Object} source
+                * @param {String} locale Language tag
+                * @return {jQuery.Promise}
+                */
+               load: function ( source, locale ) {
+                       var key = null,
+                               deferred = null,
+                               deferreds = [],
+                               messageStore = this;
+
+                       if ( typeof source === 'string' ) {
+                               // This is a URL to the messages file.
+                               $.i18n.log( 'Loading messages from: ' + source );
+                               deferred = jsonMessageLoader( source )
+                                       .done( function ( localization ) {
+                                               messageStore.set( locale, localization );
+                                       } );
+
+                               return deferred.promise();
+                       }
+
+                       if ( locale ) {
+                               // source is an key-value pair of messages for given locale
+                               messageStore.set( locale, source );
+
+                               return $.Deferred().resolve();
+                       } else {
+                               // source is a key-value pair of locales and their source
+                               for ( key in source ) {
+                                       if ( Object.prototype.hasOwnProperty.call( source, key ) ) {
+                                               locale = key;
+                                               // No {locale} given, assume data is a group of languages,
+                                               // call this function again for each language.
+                                               deferreds.push( messageStore.load( source[key], locale ) );
+                                       }
+                               }
+                               return $.when.apply( $, deferreds );
+                       }
+
+               },
+
+               /**
+                * Set messages to the given locale.
+                * If locale exists, add messages to the locale.
+                * @param locale
+                * @param messages
+                */
+               set: function ( locale, messages ) {
+                       if ( !this.messages[locale] ) {
+                               this.messages[locale] = messages;
+                       } else {
+                               this.messages[locale] = $.extend( this.messages[locale], messages );
+                       }
+               },
+
+               /**
+                *
+                * @param locale
+                * @param messageKey
+                * @returns {Boolean}
+                */
+               get: function ( locale, messageKey ) {
+                       return this.messages[locale] && this.messages[locale][messageKey];
+               }
+       };
+
+       function jsonMessageLoader( url ) {
+               var deferred = $.Deferred();
+
+               $.getJSON( url )
+                       .done( deferred.resolve )
+                       .fail( function ( jqxhr, settings, exception ) {
+                               $.i18n.log( 'Error in loading messages from ' + url + ' Exception: ' + exception );
+                               // Ignore 404 exception, because we are handling fallabacks explicitly
+                               deferred.resolve();
+                       } );
+
+               return deferred.promise();
+       }
+
+       $.extend( $.i18n.messageStore, new MessageStore() );
+}( jQuery, window ) );
diff --git a/resources/lib/jquery.i18n/src/jquery.i18n.parser.js b/resources/lib/jquery.i18n/src/jquery.i18n.parser.js
new file mode 100644 (file)
index 0000000..3dea284
--- /dev/null
@@ -0,0 +1,309 @@
+/**
+ * jQuery Internationalization library
+ *
+ * Copyright (C) 2011-2013 Santhosh Thottingal, Neil Kandalgaonkar
+ *
+ * jquery.i18n is dual licensed GPLv2 or later and MIT. You don't have to do
+ * anything special to choose one license or the other and you don't have to
+ * notify anyone which license you are using. You are free to use
+ * UniversalLanguageSelector in commercial projects as long as the copyright
+ * header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
+ *
+ * @licence GNU General Public Licence 2.0 or later
+ * @licence MIT License
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       var MessageParser = function ( options ) {
+               this.options = $.extend( {}, $.i18n.parser.defaults, options );
+               this.language = $.i18n.languages[String.locale] || $.i18n.languages['default'];
+               this.emitter = $.i18n.parser.emitter;
+       };
+
+       MessageParser.prototype = {
+
+               constructor: MessageParser,
+
+               simpleParse: function ( message, parameters ) {
+                       return message.replace( /\$(\d+)/g, function ( str, match ) {
+                               var index = parseInt( match, 10 ) - 1;
+
+                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
+                       } );
+               },
+
+               parse: function ( message, replacements ) {
+                       if ( message.indexOf( '{{' ) < 0 ) {
+                               return this.simpleParse( message, replacements );
+                       }
+
+                       this.emitter.language = $.i18n.languages[$.i18n().locale] ||
+                               $.i18n.languages['default'];
+
+                       return this.emitter.emit( this.ast( message ), replacements );
+               },
+
+               ast: function ( message ) {
+                       var pipe, colon, backslash, anyCharacter, dollar, digits, regularLiteral,
+                               regularLiteralWithoutBar, regularLiteralWithoutSpace, escapedOrLiteralWithoutBar,
+                               escapedOrRegularLiteral, templateContents, templateName, openTemplate,
+                               closeTemplate, expression, paramExpression, result,
+                               pos = 0;
+
+                       // Try parsers until one works, if none work return null
+                       function choice( parserSyntax ) {
+                               return function () {
+                                       var i, result;
+
+                                       for ( i = 0; i < parserSyntax.length; i++ ) {
+                                               result = parserSyntax[i]();
+
+                                               if ( result !== null ) {
+                                                       return result;
+                                               }
+                                       }
+
+                                       return null;
+                               };
+                       }
+
+                       // Try several parserSyntax-es in a row.
+                       // All must succeed; otherwise, return null.
+                       // This is the only eager one.
+                       function sequence( parserSyntax ) {
+                               var i, res,
+                                       originalPos = pos,
+                                       result = [];
+
+                               for ( i = 0; i < parserSyntax.length; i++ ) {
+                                       res = parserSyntax[i]();
+
+                                       if ( res === null ) {
+                                               pos = originalPos;
+
+                                               return null;
+                                       }
+
+                                       result.push( res );
+                               }
+
+                               return result;
+                       }
+
+                       // Run the same parser over and over until it fails.
+                       // Must succeed a minimum of n times; otherwise, return null.
+                       function nOrMore( n, p ) {
+                               return function () {
+                                       var originalPos = pos,
+                                               result = [],
+                                               parsed = p();
+
+                                       while ( parsed !== null ) {
+                                               result.push( parsed );
+                                               parsed = p();
+                                       }
+
+                                       if ( result.length < n ) {
+                                               pos = originalPos;
+
+                                               return null;
+                                       }
+
+                                       return result;
+                               };
+                       }
+
+                       // Helpers -- just make parserSyntax out of simpler JS builtin types
+
+                       function makeStringParser( s ) {
+                               var len = s.length;
+
+                               return function () {
+                                       var result = null;
+
+                                       if ( message.substr( pos, len ) === s ) {
+                                               result = s;
+                                               pos += len;
+                                       }
+
+                                       return result;
+                               };
+                       }
+
+                       function makeRegexParser( regex ) {
+                               return function () {
+                                       var matches = message.substr( pos ).match( regex );
+
+                                       if ( matches === null ) {
+                                               return null;
+                                       }
+
+                                       pos += matches[0].length;
+
+                                       return matches[0];
+                               };
+                       }
+
+                       pipe = makeStringParser( '|' );
+                       colon = makeStringParser( ':' );
+                       backslash = makeStringParser( '\\' );
+                       anyCharacter = makeRegexParser( /^./ );
+                       dollar = makeStringParser( '$' );
+                       digits = makeRegexParser( /^\d+/ );
+                       regularLiteral = makeRegexParser( /^[^{}\[\]$\\]/ );
+                       regularLiteralWithoutBar = makeRegexParser( /^[^{}\[\]$\\|]/ );
+                       regularLiteralWithoutSpace = makeRegexParser( /^[^{}\[\]$\s]/ );
+
+                       // There is a general pattern:
+                       // parse a thing;
+                       // if it worked, apply transform,
+                       // otherwise return null.
+                       // But using this as a combinator seems to cause problems
+                       // when combined with nOrMore().
+                       // May be some scoping issue.
+                       function transform( p, fn ) {
+                               return function () {
+                                       var result = p();
+
+                                       return result === null ? null : fn( result );
+                               };
+                       }
+
+                       // Used to define "literals" within template parameters. The pipe
+                       // character is the parameter delimeter, so by default
+                       // it is not a literal in the parameter
+                       function literalWithoutBar() {
+                               var result = nOrMore( 1, escapedOrLiteralWithoutBar )();
+
+                               return result === null ? null : result.join( '' );
+                       }
+
+                       function literal() {
+                               var result = nOrMore( 1, escapedOrRegularLiteral )();
+
+                               return result === null ? null : result.join( '' );
+                       }
+
+                       function escapedLiteral() {
+                               var result = sequence( [ backslash, anyCharacter ] );
+
+                               return result === null ? null : result[1];
+                       }
+
+                       choice( [ escapedLiteral, regularLiteralWithoutSpace ] );
+                       escapedOrLiteralWithoutBar = choice( [ escapedLiteral, regularLiteralWithoutBar ] );
+                       escapedOrRegularLiteral = choice( [ escapedLiteral, regularLiteral ] );
+
+                       function replacement() {
+                               var result = sequence( [ dollar, digits ] );
+
+                               if ( result === null ) {
+                                       return null;
+                               }
+
+                               return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ];
+                       }
+
+                       templateName = transform(
+                               // see $wgLegalTitleChars
+                               // not allowing : due to the need to catch "PLURAL:$1"
+                               makeRegexParser( /^[ !"$&'()*,.\/0-9;=?@A-Z\^_`a-z~\x80-\xFF+\-]+/ ),
+
+                               function ( result ) {
+                                       return result.toString();
+                               }
+                       );
+
+                       function templateParam() {
+                               var expr,
+                                       result = sequence( [ pipe, nOrMore( 0, paramExpression ) ] );
+
+                               if ( result === null ) {
+                                       return null;
+                               }
+
+                               expr = result[1];
+
+                               // use a "CONCAT" operator if there are multiple nodes,
+                               // otherwise return the first node, raw.
+                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
+                       }
+
+                       function templateWithReplacement() {
+                               var result = sequence( [ templateName, colon, replacement ] );
+
+                               return result === null ? null : [ result[0], result[2] ];
+                       }
+
+                       function templateWithOutReplacement() {
+                               var result = sequence( [ templateName, colon, paramExpression ] );
+
+                               return result === null ? null : [ result[0], result[2] ];
+                       }
+
+                       templateContents = choice( [
+                               function () {
+                                       var res = sequence( [
+                                               // templates can have placeholders for dynamic
+                                               // replacement eg: {{PLURAL:$1|one car|$1 cars}}
+                                               // or no placeholders eg:
+                                               // {{GRAMMAR:genitive|{{SITENAME}}}
+                                               choice( [ templateWithReplacement, templateWithOutReplacement ] ),
+                                               nOrMore( 0, templateParam )
+                                       ] );
+
+                                       return res === null ? null : res[0].concat( res[1] );
+                               },
+                               function () {
+                                       var res = sequence( [ templateName, nOrMore( 0, templateParam ) ] );
+
+                                       if ( res === null ) {
+                                               return null;
+                                       }
+
+                                       return [ res[0] ].concat( res[1] );
+                               }
+                       ] );
+
+                       openTemplate = makeStringParser( '{{' );
+                       closeTemplate = makeStringParser( '}}' );
+
+                       function template() {
+                               var result = sequence( [ openTemplate, templateContents, closeTemplate ] );
+
+                               return result === null ? null : result[1];
+                       }
+
+                       expression = choice( [ template, replacement, literal ] );
+                       paramExpression = choice( [ template, replacement, literalWithoutBar ] );
+
+                       function start() {
+                               var result = nOrMore( 0, expression )();
+
+                               if ( result === null ) {
+                                       return null;
+                               }
+
+                               return [ 'CONCAT' ].concat( result );
+                       }
+
+                       result = start();
+
+                       /*
+                        * For success, the pos must have gotten to the end of the input
+                        * and returned a non-null.
+                        * n.b. This is part of language infrastructure, so we do not throw an internationalizable message.
+                        */
+                       if ( result === null || pos !== message.length ) {
+                               throw new Error( 'Parse error at position ' + pos.toString() + ' in input: ' + message );
+                       }
+
+                       return result;
+               }
+
+       };
+
+       $.extend( $.i18n.parser, new MessageParser() );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/bs.js b/resources/lib/jquery.i18n/src/languages/bs.js
new file mode 100644 (file)
index 0000000..5370069
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * Bosnian (bosanski) language functions
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.bs = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'instrumental': // instrumental
+                               word = 's ' + word;
+                               break;
+                       case 'lokativ': // locative
+                               word = 'o ' + word;
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/dsb.js b/resources/lib/jquery.i18n/src/languages/dsb.js
new file mode 100644 (file)
index 0000000..cc069eb
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * Lower Sorbian (Dolnoserbski) language functions
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.dsb = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                               case 'instrumental': // instrumental
+                                       word = 'z ' + word;
+                                       break;
+                               case 'lokatiw': // lokatiw
+                                       word = 'wo ' + word;
+                                       break;
+                       }
+
+                       return word;
+               }
+       } );
+
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/fi.js b/resources/lib/jquery.i18n/src/languages/fi.js
new file mode 100644 (file)
index 0000000..d8e9578
--- /dev/null
@@ -0,0 +1,49 @@
+/**
+ * Finnish (Suomi) language functions
+ *
+ * @author Santhosh Thottingal
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.fi = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       // vowel harmony flag
+                       var aou = word.match( /[aou][^äöy]*$/i ),
+                               origWord = word;
+                       if ( word.match( /wiki$/i ) ) {
+                               aou = false;
+                       }
+
+                       // append i after final consonant
+                       if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) {
+                               word += 'i';
+                       }
+
+                       switch ( form ) {
+                       case 'genitive':
+                               word += 'n';
+                               break;
+                       case 'elative':
+                               word += ( aou ? 'sta' : 'stä' );
+                               break;
+                       case 'partitive':
+                               word += ( aou ? 'a' : 'ä' );
+                               break;
+                       case 'illative':
+                               // Double the last letter and add 'n'
+                               word += word.substr( word.length - 1 ) + 'n';
+                               break;
+                       case 'inessive':
+                               word += ( aou ? 'ssa' : 'ssä' );
+                               break;
+                       default:
+                               word = origWord;
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/ga.js b/resources/lib/jquery.i18n/src/languages/ga.js
new file mode 100644 (file)
index 0000000..1aceab7
--- /dev/null
@@ -0,0 +1,38 @@
+/**
+ * Irish (Gaeilge) language functions
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.ga = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       if ( form === 'ainmlae' ) {
+                               switch ( word ) {
+                               case 'an Domhnach':
+                                       word = 'Dé Domhnaigh';
+                                       break;
+                               case 'an Luan':
+                                       word = 'Dé Luain';
+                                       break;
+                               case 'an Mháirt':
+                                       word = 'Dé Mháirt';
+                                       break;
+                               case 'an Chéadaoin':
+                                       word = 'Dé Chéadaoin';
+                                       break;
+                               case 'an Déardaoin':
+                                       word = 'Déardaoin';
+                                       break;
+                               case 'an Aoine':
+                                       word = 'Dé hAoine';
+                                       break;
+                               case 'an Satharn':
+                                       word = 'Dé Sathairn';
+                                       break;
+                               }
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/he.js b/resources/lib/jquery.i18n/src/languages/he.js
new file mode 100644 (file)
index 0000000..cbbe90b
--- /dev/null
@@ -0,0 +1,31 @@
+/**
+ * Hebrew (עברית) language functions
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.he = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'prefixed':
+                       case 'תחילית': // the same word in Hebrew
+                               // Duplicate prefixed "Waw", but only if it's not already double
+                               if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) {
+                                       word = 'ו' + word;
+                               }
+
+                               // Remove the "He" if prefixed
+                               if ( word.substr( 0, 1 ) === 'ה' ) {
+                                       word = word.substr( 1, word.length );
+                               }
+
+                               // Add a hyphen (maqaf) before numbers and non-Hebrew letters
+                               if ( word.substr( 0, 1 ) < 'א' || word.substr( 0, 1 ) > 'ת' ) {
+                                       word = '־' + word;
+                               }
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/hsb.js b/resources/lib/jquery.i18n/src/languages/hsb.js
new file mode 100644 (file)
index 0000000..957616f
--- /dev/null
@@ -0,0 +1,21 @@
+/**
+ * Upper Sorbian (Hornjoserbsce) language functions
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.hsb = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'instrumental': // instrumental
+                               word = 'z ' + word;
+                               break;
+                       case 'lokatiw': // lokatiw
+                               word = 'wo ' + word;
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/hu.js b/resources/lib/jquery.i18n/src/languages/hu.js
new file mode 100644 (file)
index 0000000..1177b85
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * Hungarian language functions
+ *
+ * @author Santhosh Thottingal
+ */
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.hu = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'rol':
+                               word += 'ról';
+                               break;
+                       case 'ba':
+                               word += 'ba';
+                               break;
+                       case 'k':
+                               word += 'k';
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/hy.js b/resources/lib/jquery.i18n/src/languages/hy.js
new file mode 100644 (file)
index 0000000..9c56899
--- /dev/null
@@ -0,0 +1,25 @@
+/**
+ * Armenian (Հայերեն) language functions
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.hy = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       if ( form === 'genitive' ) { // սեռական հոլով
+                               if ( word.substr( -1 ) === 'ա' ) {
+                                       word = word.substr( 0, word.length - 1 ) + 'այի';
+                               } else if ( word.substr( -1 ) === 'ո' ) {
+                                       word = word.substr( 0, word.length - 1 ) + 'ոյի';
+                               } else if ( word.substr( -4 ) === 'գիրք' ) {
+                                       word = word.substr( 0, word.length - 4 ) + 'գրքի';
+                               } else {
+                                       word = word + 'ի';
+                               }
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/la.js b/resources/lib/jquery.i18n/src/languages/la.js
new file mode 100644 (file)
index 0000000..11c1122
--- /dev/null
@@ -0,0 +1,54 @@
+/**
+ * Latin (lingua Latina) language functions
+ *
+ * @author Santhosh Thottingal
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.la = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'genitive':
+                               // only a few declensions, and even for those mostly the singular only
+                               word = word.replace( /u[ms]$/i, 'i' ); // 2nd declension singular
+                               word = word.replace( /ommunia$/i, 'ommunium' ); // 3rd declension neuter plural (partly)
+                               word = word.replace( /a$/i, 'ae' ); // 1st declension singular
+                               word = word.replace( /libri$/i, 'librorum' ); // 2nd declension plural (partly)
+                               word = word.replace( /nuntii$/i, 'nuntiorum' ); // 2nd declension plural (partly)
+                               word = word.replace( /tio$/i, 'tionis' ); // 3rd declension singular (partly)
+                               word = word.replace( /ns$/i, 'ntis' );
+                               word = word.replace( /as$/i, 'atis' );
+                               word = word.replace( /es$/i, 'ei' ); // 5th declension singular
+                               break;
+                       case 'accusative':
+                               // only a few declensions, and even for those mostly the singular only
+                               word = word.replace( /u[ms]$/i, 'um' ); // 2nd declension singular
+                               word = word.replace( /ommunia$/i, 'am' ); // 3rd declension neuter plural (partly)
+                               word = word.replace( /a$/i, 'ommunia' ); // 1st declension singular
+                               word = word.replace( /libri$/i, 'libros' ); // 2nd declension plural (partly)
+                               word = word.replace( /nuntii$/i, 'nuntios' );// 2nd declension plural (partly)
+                               word = word.replace( /tio$/i, 'tionem' ); // 3rd declension singular (partly)
+                               word = word.replace( /ns$/i, 'ntem' );
+                               word = word.replace( /as$/i, 'atem' );
+                               word = word.replace( /es$/i, 'em' ); // 5th declension singular
+                               break;
+                       case 'ablative':
+                               // only a few declensions, and even for those mostly the singular only
+                               word = word.replace( /u[ms]$/i, 'o' ); // 2nd declension singular
+                               word = word.replace( /ommunia$/i, 'ommunibus' ); // 3rd declension neuter plural (partly)
+                               word = word.replace( /a$/i, 'a' ); // 1st declension singular
+                               word = word.replace( /libri$/i, 'libris' ); // 2nd declension plural (partly)
+                               word = word.replace( /nuntii$/i, 'nuntiis' ); // 2nd declension plural (partly)
+                               word = word.replace( /tio$/i, 'tione' ); // 3rd declension singular (partly)
+                               word = word.replace( /ns$/i, 'nte' );
+                               word = word.replace( /as$/i, 'ate' );
+                               word = word.replace( /es$/i, 'e' ); // 5th declension singular
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/ml.js b/resources/lib/jquery.i18n/src/languages/ml.js
new file mode 100644 (file)
index 0000000..f724b7b
--- /dev/null
@@ -0,0 +1,98 @@
+/**
+ * Malayalam language functions
+ *
+ * @author Santhosh Thottingal
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.ml = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       form = form.toLowerCase();
+                       switch ( form ) {
+                               case 'ഉദ്ദേശിക':
+                               case 'dative':
+                                       if ( word.substr( -1 ) === 'ു' ||
+                                               word.substr( -1 ) === 'ൂ' ||
+                                               word.substr( -1 ) === 'ൗ' ||
+                                               word.substr( -1 ) === 'ൌ'
+                                       ) {
+                                               word += 'വിന്';
+                                       } else if ( word.substr( -1 ) === 'ം' ) {
+                                               word = word.substr( 0, word.length - 1 ) + 'ത്തിന്';
+                                       } else if ( word.substr( -1 ) === 'ൻ' ) {
+                                               // Atomic chillu n. അവൻ -> അവന്
+                                               word = word.substr( 0, word.length - 1 ) + 'ന്';
+                                       } else if ( word.substr( -3 ) === 'ന്\u200d' ) {
+                                               // chillu n. അവൻ -> അവന്
+                                               word = word.substr( 0, word.length - 1 );
+                                       } else if ( word.substr( -1 ) === 'ൾ' || word.substr( -3 ) === 'ള്\u200d' ) {
+                                               word += 'ക്ക്';
+                                       } else if ( word.substr( -1 ) === 'ർ' || word.substr( -3 ) === 'ര്\u200d' ) {
+                                               word += 'ക്ക്';
+                                       } else if ( word.substr( -1 ) === 'ൽ' ) {
+                                               // Atomic chillu ൽ , ഫയൽ -> ഫയലിന്
+                                               word = word.substr( 0, word.length - 1 ) + 'ലിന്';
+                                       } else if ( word.substr( -3 ) === 'ല്\u200d' ) {
+                                               // chillu ല്\u200d , ഫയല്\u200d -> ഫയലിന്
+                                               word = word.substr( 0, word.length - 2 ) + 'ിന്';
+                                       } else if ( word.substr( -2 ) === 'ു്' ) {
+                                               word = word.substr( 0, word.length - 2 ) + 'ിന്';
+                                       } else if ( word.substr( -1 ) === '്' ) {
+                                               word = word.substr( 0, word.length - 1 ) + 'ിന്';
+                                       } else {
+                                               // കാവ്യ -> കാവ്യയ്ക്ക്, ഹരി -> ഹരിയ്ക്ക്, മല -> മലയ്ക്ക്
+                                               word += 'യ്ക്ക്';
+                                       }
+
+                                       break;
+                               case 'സംബന്ധിക':
+                               case 'genitive':
+                                       if ( word.substr( -1 ) === 'ം' ) {
+                                               word = word.substr( 0, word.length - 1 ) + 'ത്തിന്റെ';
+                                       } else if ( word.substr( -2 ) === 'ു്' ) {
+                                               word = word.substr( 0, word.length - 2 ) + 'ിന്റെ';
+                                       } else if ( word.substr( -1 ) === '്' ) {
+                                               word = word.substr( 0, word.length - 1 ) + 'ിന്റെ';
+                                       } else if (  word.substr( -1 ) === 'ു' ||
+                                               word.substr( -1 ) === 'ൂ' ||
+                                               word.substr( -1 ) === 'ൗ' ||
+                                               word.substr( -1 ) === 'ൌ'
+                                       ) {
+                                               word += 'വിന്റെ';
+                                       } else if ( word.substr( -1 ) === 'ൻ' ) {
+                                               // Atomic chillu n. അവൻ -> അവന്റെ
+                                               word = word.substr( 0, word.length - 1 ) + 'ന്റെ';
+                                       } else if ( word.substr( -3 ) === 'ന്\u200d' ) {
+                                               // chillu n. അവൻ -> അവന്റെ
+                                               word = word.substr( 0, word.length - 1 ) + 'റെ';
+                                       } else if ( word.substr( -3 ) === 'ള്\u200d' ) {
+                                               // chillu n. അവൾ -> അവളുടെ
+                                               word = word.substr( 0, word.length - 2 ) + 'ുടെ';
+                                       } else if ( word.substr( -1 ) === 'ൾ' ) {
+                                               // Atomic chillu n. അവള്\u200d -> അവളുടെ
+                                               word = word.substr( 0, word.length - 1 ) + 'ളുടെ';
+                                       } else if ( word.substr( -1 ) === 'ൽ' ) {
+                                               // Atomic l. മുയല്\u200d -> മുയലിന്റെ
+                                               word = word.substr( 0, word.length - 1 ) + 'ലിന്റെ';
+                                       } else if ( word.substr( -3 ) === 'ല്\u200d' ) {
+                                               // chillu l. മുയല്\u200d -> അവളുടെ
+                                               word = word.substr( 0, word.length - 2 ) + 'ിന്റെ';
+                                       } else if ( word.substr( -3 ) === 'ര്\u200d' ) {
+                                               // chillu r. അവര്\u200d -> അവരുടെ
+                                               word = word.substr( 0, word.length - 2 ) + 'ുടെ';
+                                       } else if ( word.substr( -1 ) === 'ർ' ) {
+                                               // Atomic chillu r. അവർ -> അവരുടെ
+                                               word = word.substr( 0, word.length - 1 ) + 'രുടെ';
+                                       } else {
+                                               word += 'യുടെ';
+                                       }
+
+                                       break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/os.js b/resources/lib/jquery.i18n/src/languages/os.js
new file mode 100644 (file)
index 0000000..4744367
--- /dev/null
@@ -0,0 +1,76 @@
+/**
+ * Ossetian (Ирон) language functions
+ *
+ * @author Santhosh Thottingal
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.os = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       var endAllative, jot, hyphen, ending;
+
+                       // Ending for allative case
+                       endAllative = 'мæ';
+                       // Variable for 'j' beetwen vowels
+                       jot = '';
+                       // Variable for "-" for not Ossetic words
+                       hyphen = '';
+                       // Variable for ending
+                       ending = '';
+
+                       if ( word.match( /тæ$/i ) ) {
+                               // Checking if the $word is in plural form
+                               word = word.substring( 0, word.length - 1 );
+                               endAllative = 'æм';
+                       } else if ( word.match( /[аæеёиоыэюя]$/i ) ) {
+                               // Works if word is in singular form.
+                               // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю,
+                               // я.
+                               jot = 'й';
+                       } else if ( word.match( /у$/i ) ) {
+                               // Checking if word ends on 'у'. 'У' can be either consonant 'W' or
+                               // vowel 'U' in cyrillic Ossetic.
+                               // Examples: {{grammar:genitive|аунеу}} = аунеуы,
+                               // {{grammar:genitive|лæппу}} = лæппуйы.
+                               if ( !word.substring( word.length - 2, word.length - 1 )
+                                               .match( /[аæеёиоыэюя]$/i ) ) {
+                                       jot = 'й';
+                               }
+                       } else if ( !word.match( /[бвгджзйклмнопрстфхцчшщьъ]$/i ) ) {
+                               hyphen = '-';
+                       }
+
+                       switch ( form ) {
+                       case 'genitive':
+                               ending = hyphen + jot + 'ы';
+                               break;
+                       case 'dative':
+                               ending = hyphen + jot + 'æн';
+                               break;
+                       case 'allative':
+                               ending = hyphen + endAllative;
+                               break;
+                       case 'ablative':
+                               if ( jot === 'й' ) {
+                                       ending = hyphen + jot + 'æ';
+                               } else {
+                                       ending = hyphen + jot + 'æй';
+                               }
+                               break;
+                       case 'superessive':
+                               ending = hyphen + jot + 'ыл';
+                               break;
+                       case 'equative':
+                               ending = hyphen + jot + 'ау';
+                               break;
+                       case 'comitative':
+                               ending = hyphen + 'имæ';
+                               break;
+                       }
+
+                       return word + ending;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/ru.js b/resources/lib/jquery.i18n/src/languages/ru.js
new file mode 100644 (file)
index 0000000..893b238
--- /dev/null
@@ -0,0 +1,29 @@
+/**
+ * Russian (Русский) language functions
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.ru = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       if ( form === 'genitive' ) { // родительный падеж
+                               if ( word.substr( -1 ) === 'ь' ) {
+                                       word = word.substr( 0, word.length - 1 ) + 'я';
+                               } else if ( word.substr( -2 ) === 'ия' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'ии';
+                               } else if ( word.substr( -2 ) === 'ка' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'ки';
+                               } else if ( word.substr( -2 ) === 'ти' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'тей';
+                               } else if ( word.substr( -2 ) === 'ды' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'дов';
+                               } else if ( word.substr( -3 ) === 'ник' ) {
+                                       word = word.substr( 0, word.length - 3 ) + 'ника';
+                               }
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/sl.js b/resources/lib/jquery.i18n/src/languages/sl.js
new file mode 100644 (file)
index 0000000..a3aafc3
--- /dev/null
@@ -0,0 +1,26 @@
+/**
+ * Slovenian (Slovenščina) language functions
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.sl = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                               // locative
+                               case 'mestnik':
+                                       word = 'o ' + word;
+
+                                       break;
+                               // instrumental
+                               case 'orodnik':
+                                       word = 'z ' + word;
+
+                                       break;
+                       }
+
+                       return word;
+               }
+       } );
+}( jQuery ) );
diff --git a/resources/lib/jquery.i18n/src/languages/uk.js b/resources/lib/jquery.i18n/src/languages/uk.js
new file mode 100644 (file)
index 0000000..8e69efc
--- /dev/null
@@ -0,0 +1,39 @@
+/**
+ * Ukrainian (Українська) language functions
+ */
+
+( function ( $ ) {
+       'use strict';
+
+       $.i18n.languages.uk = $.extend( {}, $.i18n.languages['default'], {
+               convertGrammar: function ( word, form ) {
+                       switch ( form ) {
+                       case 'genitive': // родовий відмінок
+                               if ( word.substr( -1 ) === 'ь' ) {
+                                       word = word.substr( 0, word.length - 1 ) + 'я';
+                               } else if ( word.substr( -2 ) === 'ія' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'ії';
+                               } else if ( word.substr( -2 ) === 'ка' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'ки';
+                               } else if ( word.substr( -2 ) === 'ти' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'тей';
+                               } else if ( word.substr( -2 ) === 'ды' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'дов';
+                               } else if ( word.substr( -3 ) === 'ник' ) {
+                                       word = word.substr( 0, word.length - 3 ) + 'ника';
+                               }
+
+                               break;
+                       case 'accusative': // знахідний відмінок
+                               if ( word.substr( -2 ) === 'ія' ) {
+                                       word = word.substr( 0, word.length - 2 ) + 'ію';
+                               }
+
+                               break;
+                       }
+
+                       return word;
+               }
+       } );
+
+}( jQuery ) );
diff --git a/resources/lib/mustache/LICENSE b/resources/lib/mustache/LICENSE
new file mode 100644 (file)
index 0000000..aa1b831
--- /dev/null
@@ -0,0 +1,10 @@
+The MIT License
+
+Copyright (c) 2009 Chris Wanstrath (Ruby)
+Copyright (c) 2010-2014 Jan Lehnardt (JavaScript)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
index 493920d..610e1ee 100644 (file)
@@ -11,7 +11,8 @@
                        "مشعل الحربي",
                        "ترجمان05",
                        "Abanima",
-                       "محمد أحمد عبد الفتاح"
+                       "محمد أحمد عبد الفتاح",
+                       "Hiba Alshawi"
                ]
        },
        "ooui-outline-control-move-down": "انقل العنصر للأسفل",
@@ -26,6 +27,8 @@
        "ooui-dialog-process-dismiss": "أغلق",
        "ooui-dialog-process-retry": "حاول مرة أخرى",
        "ooui-dialog-process-continue": "استمر",
+       "ooui-selectfile-button-select": "أختر ملف",
        "ooui-selectfile-not-supported": "تحديد الملفات غير مدعوم",
-       "ooui-selectfile-placeholder": "لم يختر أي ملف"
+       "ooui-selectfile-placeholder": "لم يختر أي ملف",
+       "ooui-selectfile-dragdrop-placeholder": "ترك ملف هنا"
 }
index 8098781..61eb384 100644 (file)
@@ -8,9 +8,14 @@
        "ooui-outline-control-move-up": "طلع الشيئ للفوق",
        "ooui-outline-control-remove": "أمحي العنصر",
        "ooui-toolbar-more": "زيادة",
+       "ooui-toolgroup-expand": "زيادة",
+       "ooui-toolgroup-collapse": "قليل",
        "ooui-dialog-message-accept": "مليح",
        "ooui-dialog-message-reject": "رجَع",
        "ooui-dialog-process-error": "حاجه ما خدمتش مليح",
        "ooui-dialog-process-dismiss": "أرفضها",
-       "ooui-dialog-process-retry": "عاود جرب"
+       "ooui-dialog-process-retry": "عاود جرب",
+       "ooui-dialog-process-continue": "واصل",
+       "ooui-selectfile-not-supported": "تحديد الفيشيات ما هوش محدد",
+       "ooui-selectfile-placeholder": "ما اختاريتش حتا ملف"
 }
index ae853dd..c373601 100644 (file)
@@ -1,9 +1,13 @@
 {
        "@metadata": {
                "authors": [
-                       "Gitartha.bordoloi"
+                       "Gitartha.bordoloi",
+                       "Dibya Dutta"
                ]
        },
+       "ooui-outline-control-move-down": "সমল তললৈ স্থানান্তৰ কৰক",
+       "ooui-outline-control-move-up": "সমল ওপৰলৈ স্থানান্তৰ কৰক",
+       "ooui-outline-control-remove": "সমল আঁতৰাওক",
        "ooui-toolbar-more": "অধিক",
        "ooui-toolgroup-expand": "অধিক",
        "ooui-toolgroup-collapse": "কম দেখাওক",
@@ -12,5 +16,7 @@
        "ooui-dialog-process-error": "কিবা ত্ৰুটি হৈছে",
        "ooui-dialog-process-dismiss": "বাতিল",
        "ooui-dialog-process-retry": "পুনৰ চেষ্টা কৰক",
-       "ooui-dialog-process-continue": "অব্যাহত ৰাখক"
+       "ooui-dialog-process-continue": "অব্যাহত ৰাখক",
+       "ooui-selectfile-not-supported": "নথি নিৰ্বাচন সমৰ্থন কৰা নাই",
+       "ooui-selectfile-placeholder": "কোনো নথি নিৰ্বাচিত কৰা হোৱা নাই"
 }
index 87d7688..11761c6 100644 (file)
        "ooui-outline-control-move-up": "Mover arriba l'elementu",
        "ooui-outline-control-remove": "Desaniciar elementu",
        "ooui-toolbar-more": "Más",
+       "ooui-toolgroup-expand": "Más",
+       "ooui-toolgroup-collapse": "Menos",
        "ooui-dialog-message-accept": "Aceutar",
        "ooui-dialog-message-reject": "Encaboxar",
        "ooui-dialog-process-error": "Daqué funcionó mal",
        "ooui-dialog-process-dismiss": "Descartar",
-       "ooui-dialog-process-retry": "Vuelvi a intentalo"
+       "ooui-dialog-process-retry": "Vuelvi a intentalo",
+       "ooui-dialog-process-continue": "Siguir",
+       "ooui-selectfile-button-select": "Seleicionar un ficheru",
+       "ooui-selectfile-not-supported": "Nun hai encontu pa la seleición de ficheros",
+       "ooui-selectfile-placeholder": "Nun se seleicionó nengún ficheru",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar el ficheru equí"
 }
index 4aeb490..3548239 100644 (file)
@@ -5,12 +5,22 @@
                        "Wizardist",
                        "Чаховіч Уладзіслаў",
                        "Zedlik",
-                       "Red Winged Duck"
+                       "Red Winged Duck",
+                       "Renessaince"
                ]
        },
        "ooui-outline-control-move-down": "Перасунуць элемэнт ніжэй",
        "ooui-outline-control-move-up": "Перасунуць элемэнт вышэй",
+       "ooui-outline-control-remove": "Выдаліць пункт",
        "ooui-toolbar-more": "Болей",
        "ooui-toolgroup-expand": "Болей",
-       "ooui-toolgroup-collapse": "Меней"
+       "ooui-toolgroup-collapse": "Меней",
+       "ooui-dialog-message-accept": "Добра",
+       "ooui-dialog-message-reject": "Скасаваць",
+       "ooui-dialog-process-error": "Нешта пайшло ня так",
+       "ooui-dialog-process-dismiss": "Прапусьціць",
+       "ooui-dialog-process-retry": "Паспрабаваць зноў",
+       "ooui-dialog-process-continue": "Працягваць",
+       "ooui-selectfile-not-supported": "Выбар файлу не падтрымліваецца",
+       "ooui-selectfile-placeholder": "Ніводзін файл не абраны"
 }
index fb0f688..7db7547 100644 (file)
@@ -2,9 +2,22 @@
        "@metadata": {
                "authors": [
                        "Чаховіч Уладзіслаў",
-                       "Artificial123"
+                       "Artificial123",
+                       "Goshaproject"
                ]
        },
+       "ooui-outline-control-move-down": "Перамясціць элемент ўніз",
+       "ooui-outline-control-move-up": "Перамясціць элемент уверх",
+       "ooui-outline-control-remove": "Выдаліць элемент",
+       "ooui-toolbar-more": "Яшчэ",
+       "ooui-toolgroup-expand": "Яшчэ",
+       "ooui-toolgroup-collapse": "Менш",
        "ooui-dialog-message-accept": "ОК",
-       "ooui-dialog-message-reject": "Адмяніць"
+       "ooui-dialog-message-reject": "Адмяніць",
+       "ooui-dialog-process-error": "Штось пайшло не так…",
+       "ooui-dialog-process-dismiss": "Прапусціць",
+       "ooui-dialog-process-retry": "Паспрабаваць яшчэ раз",
+       "ooui-dialog-process-continue": "Працягнуць",
+       "ooui-selectfile-not-supported": "Выбраны файл не падтрымліваецца",
+       "ooui-selectfile-placeholder": "Файл не выбраны"
 }
index 02d95b5..dce3593 100644 (file)
@@ -4,9 +4,18 @@
                        "DCLXVI",
                        "Hristofor.mirchev",
                        "පසිඳු කාවින්ද",
-                       "Mitzev"
+                       "Mitzev",
+                       "Aquilax"
                ]
        },
        "ooui-outline-control-remove": "Премахване на обекта",
-       "ooui-toolbar-more": "Още"
+       "ooui-toolbar-more": "Още",
+       "ooui-toolgroup-expand": "Още",
+       "ooui-toolgroup-collapse": "По-малко",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Отказ",
+       "ooui-dialog-process-error": "Нещо се обърка",
+       "ooui-dialog-process-dismiss": "Затвори",
+       "ooui-dialog-process-retry": "Опитайте отново",
+       "ooui-dialog-process-continue": "Продължаване"
 }
index 1cfa6c4..02d57e0 100644 (file)
@@ -8,7 +8,8 @@
                        "Runab",
                        "Sayak Sarkar",
                        "Aftabuzzaman",
-                       "RYasmeen (WMF)"
+                       "RYasmeen (WMF)",
+                       "NahidSultan"
                ]
        },
        "ooui-outline-control-move-down": "আইটেম নিচে স্থানান্তর",
@@ -22,5 +23,9 @@
        "ooui-dialog-process-error": "কিছু একটায় ত্রুটি হয়েছে",
        "ooui-dialog-process-dismiss": "বাতিল করুন",
        "ooui-dialog-process-retry": "আবার চেষ্টা করুন",
-       "ooui-dialog-process-continue": "অগ্রসর হোন"
+       "ooui-dialog-process-continue": "অগ্রসর হোন",
+       "ooui-selectfile-button-select": "একটি ফাইল নির্বাচন করুন",
+       "ooui-selectfile-not-supported": "চিত্র নির্বাচন সমর্থন করছে না।",
+       "ooui-selectfile-placeholder": " কোন চিত্র নির্বাচিত হয়নি।",
+       "ooui-selectfile-dragdrop-placeholder": "এখানে ফাইল ছাড়ুন"
 }
index 130bd8e..d6f61ae 100644 (file)
@@ -1,10 +1,11 @@
 {
        "@metadata": {
                "authors": [
-                       "DzWiki"
+                       "DzWiki",
+                       "Semso98"
                ]
        },
-       "ooui-outline-control-move-down": "Premjesti stavku dole",
+       "ooui-outline-control-move-down": "Premjesti stavku dolje",
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni stavku",
        "ooui-toolbar-more": "Više",
index ce3afa4..33b0ce0 100644 (file)
@@ -10,7 +10,9 @@
                        "Vriullop",
                        "Toniher",
                        "Edustus",
-                       "Davidpar"
+                       "Davidpar",
+                       "Maceleiro",
+                       "Kippelboy"
                ]
        },
        "ooui-outline-control-move-down": "Baixa l'element",
@@ -24,5 +26,8 @@
        "ooui-dialog-process-error": "Alguna cosa no ha funcionat",
        "ooui-dialog-process-dismiss": "Descarta",
        "ooui-dialog-process-retry": "Torneu-ho a provar",
-       "ooui-dialog-process-continue": "Continua"
+       "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-not-supported": "El tipus de fitxer no és compatible",
+       "ooui-selectfile-placeholder": "No s'ha seleccionat cap fitxer",
+       "ooui-selectfile-dragdrop-placeholder": "Deixeu-hi anar el fitxer (o feu clic a navega)"
 }
index 0c66619..d2a998c 100644 (file)
@@ -3,9 +3,18 @@
                "authors": [
                        "Calak",
                        "Muhammed taha",
-                       "Serwan"
+                       "Serwan",
+                       "Pirehelokan"
                ]
        },
+       "ooui-toolbar-more": "زیاتر",
+       "ooui-toolgroup-expand": "زیاتر",
+       "ooui-toolgroup-collapse": "کەمتر",
        "ooui-dialog-message-accept": "باشە",
-       "ooui-dialog-message-reject": "پاشگەزبوونەوە"
+       "ooui-dialog-message-reject": "پاشگەزبوونەوە",
+       "ooui-dialog-process-error": "ھەڵەیەک ڕووی داوە",
+       "ooui-dialog-process-dismiss": "لێگەڕان",
+       "ooui-dialog-process-retry": "دیسان ھەوڵ بدە",
+       "ooui-dialog-process-continue": "درێژە بدە",
+       "ooui-selectfile-placeholder": "ھیچ فایلێک ھەڵنەبژێراوە"
 }
index aa916af..d627de0 100644 (file)
@@ -5,5 +5,6 @@
                ]
        },
        "ooui-toolbar-more": "вѧщє",
-       "ooui-toolgroup-expand": "вѧщє"
+       "ooui-toolgroup-expand": "вѧщє",
+       "ooui-dialog-process-error": "нѣчьто ꙁълѣ сѧ авило"
 }
index 0b847be..30e3efa 100644 (file)
@@ -7,10 +7,13 @@
                        "Laketown",
                        "Palnatoke",
                        "Simeondahl",
-                       "Tehnix"
+                       "Tehnix",
+                       "Macofe"
                ]
        },
        "ooui-outline-control-move-down": "Flyt ned",
        "ooui-outline-control-move-up": "Flyt op",
-       "ooui-toolbar-more": "Mere"
+       "ooui-toolbar-more": "Mere",
+       "ooui-toolgroup-expand": "Mere",
+       "ooui-dialog-process-continue": "Fortsæt"
 }
index d5649b0..b48dfb5 100644 (file)
@@ -25,6 +25,8 @@
        "ooui-dialog-process-dismiss": "Ausblenden",
        "ooui-dialog-process-retry": "Erneut versuchen",
        "ooui-dialog-process-continue": "Fortfahren",
+       "ooui-selectfile-button-select": "Eine Datei auswählen",
        "ooui-selectfile-not-supported": "Die Dateiauswahl wird nicht unterstützt",
-       "ooui-selectfile-placeholder": "Keine Datei ausgewählt"
+       "ooui-selectfile-placeholder": "Keine Datei ausgewählt",
+       "ooui-selectfile-dragdrop-placeholder": "Dateien hier ablegen"
 }
diff --git a/resources/lib/oojs-ui/i18n/dty.json b/resources/lib/oojs-ui/i18n/dty.json
new file mode 100644 (file)
index 0000000..21742b6
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "@metadata": {
+               "authors": [
+                       "जनक राज भट्ट"
+               ]
+       },
+       "ooui-outline-control-move-down": "वस्तुलाई तल साददे",
+       "ooui-outline-control-move-up": "वस्तुलाई मथि साददे",
+       "ooui-outline-control-remove": "वस्तुलाई हटुन्या",
+       "ooui-toolbar-more": "झिक्क",
+       "ooui-toolgroup-expand": "झिक्क",
+       "ooui-toolgroup-collapse": "थोका",
+       "ooui-dialog-message-accept": "हुन्छ",
+       "ooui-dialog-message-reject": "रद्द",
+       "ooui-dialog-process-dismiss": "खारेज गद्दे",
+       "ooui-dialog-process-retry": "दोसरया प्रयास गर",
+       "ooui-dialog-process-continue": "जारी राख्या"
+}
index 6fb7dba..b3c4845 100644 (file)
@@ -8,7 +8,8 @@
                        "Geraki",
                        "Glavkos",
                        "Nikosguard",
-                       "Tifa93"
+                       "Tifa93",
+                       "Stam.nikos"
                ]
        },
        "ooui-outline-control-move-down": "Μετακίνηση στοιχείου προς τα κάτω",
@@ -22,5 +23,8 @@
        "ooui-dialog-process-error": "Κάτι πήγε στραβά",
        "ooui-dialog-process-dismiss": "Απόρριψη",
        "ooui-dialog-process-retry": "Δοκιμάστε ξανά",
-       "ooui-dialog-process-continue": "Συνέχεια"
+       "ooui-dialog-process-continue": "Συνέχεια",
+       "ooui-selectfile-not-supported": "Επιλογή αρχείου δεν υποστηρίζεται",
+       "ooui-selectfile-placeholder": "Κανένα αρχείο δεν είναι επιλεγμένο",
+       "ooui-selectfile-dragdrop-placeholder": "Σύρετε ένα αρχείο εδώ (ή κάντε κλικ για αναζήτηση)"
 }
diff --git a/resources/lib/oojs-ui/i18n/en-ca.json b/resources/lib/oojs-ui/i18n/en-ca.json
new file mode 100644 (file)
index 0000000..218ece2
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Skyllful"
+               ]
+       },
+       "ooui-outline-control-move-down": "Move item down",
+       "ooui-outline-control-move-up": "Move item up",
+       "ooui-outline-control-remove": "Remove item",
+       "ooui-toolbar-more": "More",
+       "ooui-toolgroup-expand": "More",
+       "ooui-toolgroup-collapse": "Less",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Cancel",
+       "ooui-dialog-process-error": "Something went wrong",
+       "ooui-dialog-process-dismiss": "Dismiss",
+       "ooui-dialog-process-retry": "Try again",
+       "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-not-supported": "File(s) not supported",
+       "ooui-selectfile-placeholder": "No file selected",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here (or click to browse your computer)",
+       "ooui-semicolon-separator": ";"
+}
index 9812ec6..7cf2eb1 100644 (file)
@@ -28,7 +28,9 @@
        "ooui-dialog-process-dismiss": "Dismiss",
        "ooui-dialog-process-retry": "Try again",
        "ooui-dialog-process-continue": "Continue",
+       "ooui-selectfile-button-select": "Select a file",
        "ooui-selectfile-not-supported": "File selection is not supported",
        "ooui-selectfile-placeholder": "No file is selected",
+       "ooui-selectfile-dragdrop-placeholder": "Drop file here",
        "ooui-semicolon-separator": "; "
 }
index 0f705ad..2ead5c5 100644 (file)
@@ -4,7 +4,8 @@
                        "Happy5214",
                        "KuboF",
                        "Shirayuki",
-                       "Yekrats"
+                       "Yekrats",
+                       "Kvardek du"
                ]
        },
        "ooui-outline-control-move-down": "Movi eron suben",
@@ -16,6 +17,9 @@
        "ooui-dialog-message-accept": "Bone",
        "ooui-dialog-message-reject": "Nuligi",
        "ooui-dialog-process-error": "Io rompiĝis",
+       "ooui-dialog-process-dismiss": "Elimini",
        "ooui-dialog-process-retry": "Reprovi",
-       "ooui-dialog-process-continue": "Daŭrigi"
+       "ooui-dialog-process-continue": "Daŭrigi",
+       "ooui-selectfile-not-supported": "Dosieroselekto ne estas subtenata.",
+       "ooui-selectfile-placeholder": "Vi ne selektis dosieron"
 }
index e5a8e45..fa11a36 100644 (file)
@@ -30,6 +30,8 @@
        "ooui-dialog-process-dismiss": "Descartar",
        "ooui-dialog-process-retry": "Intentar de nuevo",
        "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-button-select": "Selecciona un archivo",
        "ooui-selectfile-not-supported": "No se admite la selección de archivos",
-       "ooui-selectfile-placeholder": "Ningún archivo seleccionado"
+       "ooui-selectfile-placeholder": "Ningún archivo seleccionado",
+       "ooui-selectfile-dragdrop-placeholder": "Suelta el archivo aquí"
 }
index 6a212b6..59b7ccd 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "Avjoska",
-                       "Pikne"
+                       "Pikne",
+                       "Suwa"
                ]
        },
        "ooui-outline-control-move-down": "Liiguta üksust allapoole",
@@ -16,5 +17,9 @@
        "ooui-dialog-process-error": "Midagi läks valesti",
        "ooui-dialog-process-dismiss": "Hülga",
        "ooui-dialog-process-retry": "Proovi uuesti",
-       "ooui-dialog-process-continue": "Jätka"
+       "ooui-dialog-process-continue": "Jätka",
+       "ooui-selectfile-button-select": "Vali fail",
+       "ooui-selectfile-not-supported": "Faili valiku tugi puudub",
+       "ooui-selectfile-placeholder": "Faili ei ole valitud",
+       "ooui-selectfile-dragdrop-placeholder": "Lohista fail siia"
 }
index fe6e997..e507325 100644 (file)
@@ -20,5 +20,7 @@
        "ooui-dialog-process-dismiss": "Utzi",
        "ooui-dialog-process-retry": "Saiatu berriro",
        "ooui-dialog-process-continue": "Jarraitu",
+       "ooui-selectfile-button-select": "Fitxategi bat aukeratu",
+       "ooui-selectfile-not-supported": "Fitxategi aukeraketa ez da onartzen",
        "ooui-selectfile-placeholder": "Ez da fitxategirik hautatu"
 }
index 62198f4..11bd4b8 100644 (file)
@@ -12,7 +12,9 @@
                        "درفش کاویانی",
                        "Armin1392",
                        "Alirezaaa",
-                       "Leyth"
+                       "Leyth",
+                       "الناز",
+                       "فلورانس"
                ]
        },
        "ooui-outline-control-move-down": "انتقال مورد به پایین",
        "ooui-dialog-message-accept": "تأیید",
        "ooui-dialog-message-reject": "لغو",
        "ooui-dialog-process-error": "مشکلی وجود دارد",
-       "ooui-dialog-process-dismiss": "نپذیرفتن",
-       "ooui-dialog-process-retry": "دوباره امتحان کن",
+       "ooui-dialog-process-dismiss": "رد",
+       "ooui-dialog-process-retry": "دوباره امتحان کنید",
        "ooui-dialog-process-continue": "ادامه",
        "ooui-selectfile-not-supported": "انتخاب پرونده پشتیبانی نمی‌شود",
-       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده‌است"
+       "ooui-selectfile-placeholder": "هیچ پرونده‌ای انتخاب نشده است",
+       "ooui-selectfile-dragdrop-placeholder": "رها کردن فایل در اینجا (و یا کلیک کنید به فهرست)"
 }
index d00254c..bdf015f 100644 (file)
                        "Silvonen",
                        "Skalman",
                        "Stryn",
-                       "VezonThunder"
+                       "VezonThunder",
+                       "Alluk."
                ]
        },
        "ooui-outline-control-move-down": "Siirrä kohdetta alaspäin",
        "ooui-outline-control-move-up": "Siirrä kohdetta ylöspäin",
        "ooui-outline-control-remove": "Poista kohde",
        "ooui-toolbar-more": "Lisää",
-       "ooui-toolgroup-expand": "Enemmän",
-       "ooui-toolgroup-collapse": "Vähemmän",
+       "ooui-toolgroup-expand": "Näytä lisää",
+       "ooui-toolgroup-collapse": "Näytä vähemmän",
        "ooui-dialog-message-accept": "OK",
-       "ooui-dialog-message-reject": "Peruuta",
+       "ooui-dialog-message-reject": "Peru",
        "ooui-dialog-process-error": "Jokin meni pieleen",
        "ooui-dialog-process-dismiss": "Hylkää",
        "ooui-dialog-process-retry": "Yritä uudelleen",
        "ooui-dialog-process-continue": "Jatka",
        "ooui-selectfile-not-supported": "Tiedoston valitsemista ei tueta",
-       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu"
+       "ooui-selectfile-placeholder": "Tiedostoa ei ole valittu",
+       "ooui-selectfile-dragdrop-placeholder": "Pudota tiedosto (tai selaa tiedostoja napsauttamalla)"
 }
index ae671cb..92015a4 100644 (file)
                        "Verdy p",
                        "Wyz",
                        "SnowedEarth",
-                       "Jdforrester"
+                       "Jdforrester",
+                       "Wladek92",
+                       "Harmonia Amanda"
                ]
        },
-       "ooui-outline-control-move-down": "Faire descendre l’élément",
-       "ooui-outline-control-move-up": "Faire monter l’élément",
+       "ooui-outline-control-move-down": "Descendre l’élément",
+       "ooui-outline-control-move-up": "Monter l’élément",
        "ooui-outline-control-remove": "Supprimer l’élément",
        "ooui-toolbar-more": "Plus",
        "ooui-toolgroup-expand": "Plus",
        "ooui-toolgroup-collapse": "Moins",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annuler",
-       "ooui-dialog-process-error": "Quelque chose a mal tourné",
+       "ooui-dialog-process-error": "Quelque chose s'est mal passé",
        "ooui-dialog-process-dismiss": "Rejeter",
-       "ooui-dialog-process-retry": "Réessayez",
+       "ooui-dialog-process-retry": "Réessayer",
        "ooui-dialog-process-continue": "Continuer",
+       "ooui-selectfile-button-select": "Sélectionner un fichier",
        "ooui-selectfile-not-supported": "La sélection de fichier n’est pas prise en charge",
-       "ooui-selectfile-placeholder": "Aucun fichier sélectionné"
+       "ooui-selectfile-placeholder": "Aucun fichier sélectionné",
+       "ooui-selectfile-dragdrop-placeholder": "Déposer le fichier ici"
 }
index 1283c53..4cb2839 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-dialog-process-dismiss": "Agochar",
        "ooui-dialog-process-retry": "Inténteo de novo",
        "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-button-select": "Seleccionar un ficheiro",
        "ooui-selectfile-not-supported": "Non está soportada a selección de ficheiros",
-       "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro"
+       "ooui-selectfile-placeholder": "Non se seleccionou ningún ficheiro",
+       "ooui-selectfile-dragdrop-placeholder": "Solte un ficheiro aquí"
 }
diff --git a/resources/lib/oojs-ui/i18n/glk.json b/resources/lib/oojs-ui/i18n/glk.json
new file mode 100644 (file)
index 0000000..9b15046
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "@metadata": {
+               "authors": [
+                       "V6rg"
+               ]
+       },
+       "ooui-outline-control-move-down": "مأسمکه جابجا بۊکۊن جير",
+       "ooui-outline-control-move-up": "مأسمکه جابجا بۊکۊن جؤر",
+       "ooui-outline-control-remove": "مأسمکه حذفأکۊن",
+       "ooui-toolbar-more": "ويشتر",
+       "ooui-toolgroup-expand": "ويشتر",
+       "ooui-toolgroup-collapse": "کمتر",
+       "ooui-dialog-message-accept": "خؤ",
+       "ooui-dialog-message-reject": "لغو",
+       "ooui-dialog-process-error": "ىک مؤشکلي هنأ",
+       "ooui-dialog-process-dismiss": "وأبدي",
+       "ooui-dialog-process-retry": "هنده حقسأى بۊکۊنين",
+       "ooui-dialog-process-continue": "سره",
+       "ooui-selectfile-button-select": "ىکته فاىله دؤجين بۊکۊنين",
+       "ooui-selectfile-not-supported": "نشأنهىکته فاىله دؤجين گۊدن",
+       "ooui-selectfile-placeholder": "هيچ فاىلي دؤجين نۊبؤ",
+       "ooui-selectfile-dragdrop-placeholder": "فاىله ائره فدي"
+}
index 3f02e19..5c48b9e 100644 (file)
@@ -4,7 +4,8 @@
                        "Ashok modhvadia",
                        "KartikMistry",
                        "The Discoverer",
-                       "NehalDaveND"
+                       "NehalDaveND",
+                       "Dsvyas"
                ]
        },
        "ooui-outline-control-move-down": "વસ્તુ નીચે ખસેડો",
        "ooui-outline-control-remove": "વસ્તુ હટાવો",
        "ooui-toolbar-more": "વધુ",
        "ooui-toolgroup-expand": "વધુ",
+       "ooui-toolgroup-collapse": "ઓછા",
        "ooui-dialog-message-accept": "બરાબર",
        "ooui-dialog-message-reject": "રદ કરો",
        "ooui-dialog-process-error": "કંઇક ગરબડ થઇ",
+       "ooui-dialog-process-dismiss": "વિસર્જન",
        "ooui-dialog-process-retry": "ફરી પ્રયત્ન કરો",
-       "ooui-dialog-process-continue": "ચાલુ રાખો"
+       "ooui-dialog-process-continue": "ચાલુ રાખો",
+       "ooui-selectfile-not-supported": "ફાઇલ પસંદગીની જોગવાઈ નથી",
+       "ooui-selectfile-placeholder": "કોઇ ફાઇલ પસંદ નથી કરાઈ"
 }
index de67665..650d67d 100644 (file)
@@ -27,6 +27,8 @@
        "ooui-dialog-process-dismiss": "לוותר",
        "ooui-dialog-process-retry": "לנסות שוב",
        "ooui-dialog-process-continue": "המשך",
+       "ooui-selectfile-button-select": "נא לבחור קובץ",
        "ooui-selectfile-not-supported": "בחירת קבצים אינה נתמכת",
-       "ooui-selectfile-placeholder": "לא נבחר שום קובץ"
+       "ooui-selectfile-placeholder": "לא נבחר שום קובץ",
+       "ooui-selectfile-dragdrop-placeholder": "נא לשחרר את הקובץ כאן"
 }
index ce86aaa..573096f 100644 (file)
@@ -6,7 +6,8 @@
                        "Rajesh",
                        "Siddhartha Ghai",
                        "Goelujjwal",
-                       "Ankita-ks"
+                       "Ankita-ks",
+                       "Param Mudgal"
                ]
        },
        "ooui-outline-control-move-down": "प्रविष्टि नीचे ले जाएँ",
@@ -20,5 +21,7 @@
        "ooui-dialog-process-error": "कुछ गलत हुअा है",
        "ooui-dialog-process-dismiss": "ख़ारिज करें",
        "ooui-dialog-process-retry": "पुनः प्रयास करें",
-       "ooui-dialog-process-continue": "जारी रखें"
+       "ooui-dialog-process-continue": "जारी रखें",
+       "ooui-selectfile-not-supported": "फ़ाइल का चयन समर्थित नहीं है",
+       "ooui-selectfile-placeholder": "कोई फाइल चुनी नही गई हेै"
 }
diff --git a/resources/lib/oojs-ui/i18n/hu-formal.json b/resources/lib/oojs-ui/i18n/hu-formal.json
new file mode 100644 (file)
index 0000000..34aa0ae
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Misibacsi"
+               ]
+       },
+       "ooui-outline-control-move-down": "Elem mozgatása lefelé",
+       "ooui-outline-control-move-up": "Elem mozgatása felfelé",
+       "ooui-outline-control-remove": "Elem eltávolítása",
+       "ooui-toolbar-more": "Tovább...",
+       "ooui-toolgroup-expand": "Tovább",
+       "ooui-toolgroup-collapse": "Kevesebb",
+       "ooui-dialog-message-accept": "Rendben",
+       "ooui-dialog-message-reject": "Mégse",
+       "ooui-dialog-process-error": "Valami elromlott.",
+       "ooui-dialog-process-dismiss": "Mégse",
+       "ooui-dialog-process-retry": "Próbálja újra",
+       "ooui-dialog-process-continue": "Folytatás",
+       "ooui-selectfile-not-supported": "A fájl kiválasztása nincs támogatva",
+       "ooui-selectfile-placeholder": "Nincs fájl kiválasztva"
+}
index f0fae3c..acd9d3b 100644 (file)
@@ -6,19 +6,22 @@
                        "Misibacsi",
                        "ViDam",
                        "Tacsipacsi",
-                       "Csega"
+                       "Csega",
+                       "Kishajnalka"
                ]
        },
        "ooui-outline-control-move-down": "Elem mozgatása lefelé",
        "ooui-outline-control-move-up": "Elem mozgatása felfelé",
        "ooui-outline-control-remove": "Elem eltávolítása",
-       "ooui-toolbar-more": "Tovább...",
+       "ooui-toolbar-more": "Több",
        "ooui-toolgroup-expand": "Több",
        "ooui-toolgroup-collapse": "Kevesebb",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Mégse",
+       "ooui-dialog-process-error": "Valami elromlott",
        "ooui-dialog-process-dismiss": "Elrejt",
        "ooui-dialog-process-retry": "Próbáld újra",
        "ooui-dialog-process-continue": "Folytatás",
+       "ooui-selectfile-not-supported": "A fájl kiválasztása nincs támogatva",
        "ooui-selectfile-placeholder": "Nincs fájl kiválasztva"
 }
index 2aaf4e4..c2b45a8 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Vacio",
                        "Xelgen",
-                       "Դավիթ Սարոյան"
+                       "Դավիթ Սարոյան",
+                       "Vahe Gharakhanyan"
                ]
        },
        "ooui-outline-control-move-down": "Իջեցնել կետը",
@@ -17,5 +18,7 @@
        "ooui-dialog-process-error": "Ինչ-որ սխալ է տեղի ունեցել",
        "ooui-dialog-process-dismiss": "Փակել",
        "ooui-dialog-process-retry": "Կրկին փորձել",
-       "ooui-dialog-process-continue": "Շարունակել"
+       "ooui-dialog-process-continue": "Շարունակել",
+       "ooui-selectfile-not-supported": "Ֆայլի ընտրությունը չի պաշտպանվում",
+       "ooui-selectfile-placeholder": "Ֆայլն ընտրված չէ"
 }
index bd65e71..400a432 100644 (file)
@@ -22,5 +22,7 @@
        "ooui-dialog-process-error": "Ada yang tidak beres",
        "ooui-dialog-process-dismiss": "Tutup",
        "ooui-dialog-process-retry": "Coba lagi",
-       "ooui-dialog-process-continue": "Lanjutkan"
+       "ooui-dialog-process-continue": "Lanjutkan",
+       "ooui-selectfile-not-supported": "Peilihan berkas tidak didukung",
+       "ooui-selectfile-placeholder": "Tidak ada berkas yang terpilih"
 }
index ec86124..d0df027 100644 (file)
@@ -6,7 +6,8 @@
                        "Penn Station",
                        "Shirayuki",
                        "Takot",
-                       "Los688"
+                       "Los688",
+                       "Sujiniku"
                ]
        },
        "ooui-outline-control-move-down": "項目を下に移動させる",
@@ -20,5 +21,9 @@
        "ooui-dialog-process-error": "エラーが発生しました…",
        "ooui-dialog-process-dismiss": "閉じる",
        "ooui-dialog-process-retry": "もう一度お試しください",
-       "ooui-dialog-process-continue": "続行"
+       "ooui-dialog-process-continue": "続行",
+       "ooui-selectfile-button-select": "ファイルを選択",
+       "ooui-selectfile-not-supported": "ファイルの選択はサポートされていません",
+       "ooui-selectfile-placeholder": "ファイルが選択されていません",
+       "ooui-selectfile-dragdrop-placeholder": "ファイルをここにドロップ"
 }
index 8827af3..677b1c3 100644 (file)
@@ -3,8 +3,22 @@
                "authors": [
                        "Gleki",
                        "NoiX180",
-                       "Pras"
+                       "Pras",
+                       "Jadinegara"
                ]
        },
-       "ooui-outline-control-move-down": "Pindhahaken butir mangandhap"
+       "ooui-outline-control-move-down": "Pindhahaken butir mangandhap",
+       "ooui-outline-control-move-up": "Pindhah kara mêndhuwur",
+       "ooui-outline-control-remove": "Busak kara",
+       "ooui-toolbar-more": "Mênèh",
+       "ooui-toolgroup-expand": "Mênèh",
+       "ooui-toolgroup-collapse": "Suda",
+       "ooui-dialog-message-accept": "Oké",
+       "ooui-dialog-message-reject": "Batal",
+       "ooui-dialog-process-error": "Ana sing klèru",
+       "ooui-dialog-process-dismiss": "Tutup",
+       "ooui-dialog-process-retry": "Jajal manèh",
+       "ooui-dialog-process-continue": "Tutug",
+       "ooui-selectfile-not-supported": "Pilihan bêrkas ora disokong",
+       "ooui-selectfile-placeholder": "Ora ana bêrkas sing kapilih"
 }
index 60ef661..efacb63 100644 (file)
@@ -22,5 +22,8 @@
        "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა",
        "ooui-dialog-process-dismiss": "დამალვა",
        "ooui-dialog-process-retry": "კიდევ სცადეთ",
-       "ooui-dialog-process-continue": "გაგრძელება"
+       "ooui-dialog-process-continue": "გაგრძელება",
+       "ooui-selectfile-not-supported": "ფაილის არჩევა არ არის მხარდაჭერილი",
+       "ooui-selectfile-placeholder": "ფაილი არ არის არჩეული",
+       "ooui-semicolon-separator": ";"
 }
index c0d72c4..e64889f 100644 (file)
@@ -1,11 +1,24 @@
 {
        "@metadata": {
                "authors": [
-                       "Sovichet"
+                       "Sovichet",
+                       "គីមស៊្រុន"
                ]
        },
-       "ooui-outline-control-move-down": "រុញ​ទៅ​ក្រោម",
-       "ooui-outline-control-move-up": "រុញ​ទៅ​លើ",
-       "ooui-outline-control-remove": "ដក​វត្ថុ​ចេញ",
-       "ooui-toolbar-more": "បន្ថែម"
+       "ooui-outline-control-move-down": "រុញ​ធាតុទៅ​ក្រោម",
+       "ooui-outline-control-move-up": "រុញធាតុទៅ​លើ",
+       "ooui-outline-control-remove": "ដកធាតុចេញ",
+       "ooui-toolbar-more": "បន្ថែមទៀត",
+       "ooui-toolgroup-expand": "មើលច្រើន",
+       "ooui-toolgroup-collapse": "មើលតិច",
+       "ooui-dialog-message-accept": "យល់ព្រម",
+       "ooui-dialog-message-reject": "បោះបង់",
+       "ooui-dialog-process-error": "មានបញ្ហាអ្វីមួយ",
+       "ooui-dialog-process-dismiss": "បិទ",
+       "ooui-dialog-process-retry": "ព្យាយាមម្ដងទៀត",
+       "ooui-dialog-process-continue": "បន្ត",
+       "ooui-selectfile-button-select": "ជ្រើសរើសឯកសារ",
+       "ooui-selectfile-not-supported": "ការជ្រើសរើសឯកសារមិនអាចប្រើបានទេ",
+       "ooui-selectfile-placeholder": "គ្មានឯកសារណាមួយត្រូវបានជ្រើសរើស",
+       "ooui-selectfile-dragdrop-placeholder": "ទម្លាក់ឯកសារនៅទីនេះ"
 }
index 196dc2c..bf47f6f 100644 (file)
        },
        "ooui-outline-control-move-down": "항목을 아래로 옮기기",
        "ooui-outline-control-move-up": "항목을 위로 옮기기",
-       "ooui-outline-control-remove": "í\95­ëª© ì§\80ì\9a°ê¸°",
+       "ooui-outline-control-remove": "í\95­ëª© ì \9cê±°",
        "ooui-toolbar-more": "더 보기",
        "ooui-toolgroup-expand": "더 보기",
+       "ooui-toolgroup-collapse": "덜 보기",
        "ooui-dialog-message-accept": "확인",
        "ooui-dialog-message-reject": "취소",
        "ooui-dialog-process-error": "무언가가 잘못되었습니다",
        "ooui-dialog-process-dismiss": "숨기기",
-       "ooui-dialog-process-retry": "다시 시도하세요"
+       "ooui-dialog-process-retry": "다시 시도하세요",
+       "ooui-dialog-process-continue": "계속",
+       "ooui-selectfile-not-supported": "파일 선택은 지원하지 않습니다",
+       "ooui-selectfile-placeholder": "선택한 파일 없음"
 }
index 792b6fc..f99c29f 100644 (file)
@@ -16,6 +16,7 @@
        "ooui-dialog-process-dismiss": "Maach fott, ha_sch jelässe",
        "ooui-dialog-process-retry": "Norr_ens versöhke",
        "ooui-dialog-process-continue": "Wigger maache",
+       "ooui-selectfile-button-select": "Söhg en Dattei uß",
        "ooui-selectfile-not-supported": "Mer ogerschtözze et Datteij_Ußwähle nit.",
        "ooui-selectfile-placeholder": "Kein Dattei es ußjewählt"
 }
diff --git a/resources/lib/oojs-ui/i18n/la.json b/resources/lib/oojs-ui/i18n/la.json
new file mode 100644 (file)
index 0000000..7a9b2d2
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Jdforrester"
+               ]
+       },
+       "ooui-toolbar-more": "Plus",
+       "ooui-toolgroup-expand": "Plus",
+       "ooui-toolgroup-collapse": "Paucior",
+       "ooui-dialog-message-accept": "Assentior",
+       "ooui-dialog-message-reject": "Dimittere",
+       "ooui-dialog-process-dismiss": "Dimittere",
+       "ooui-dialog-process-retry": "Retemptare",
+       "ooui-dialog-process-continue": "Pergere"
+}
index 79bb469..39bc670 100644 (file)
@@ -22,5 +22,7 @@
        "ooui-dialog-process-dismiss": "Verwerfen",
        "ooui-dialog-process-retry": "Nach eng Kéier probéieren",
        "ooui-dialog-process-continue": "Virufueren",
-       "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht"
+       "ooui-selectfile-button-select": "E Fichier eraussichen",
+       "ooui-selectfile-placeholder": "Et ass kee Fichier erausgesicht",
+       "ooui-selectfile-dragdrop-placeholder": "Fichier hei ofleeën"
 }
diff --git a/resources/lib/oojs-ui/i18n/li.json b/resources/lib/oojs-ui/i18n/li.json
new file mode 100644 (file)
index 0000000..f05a957
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Pahles"
+               ]
+       },
+       "ooui-outline-control-move-down": "Item nao ónger verplaatse",
+       "ooui-outline-control-move-up": "Item nao bove verplaetse",
+       "ooui-outline-control-remove": "Item ewegsjaffe",
+       "ooui-toolbar-more": "Mieë",
+       "ooui-toolgroup-expand": "Mieë",
+       "ooui-toolgroup-collapse": "Minder",
+       "ooui-dialog-message-accept": "Ok",
+       "ooui-dialog-message-reject": "Aafbraeke",
+       "ooui-dialog-process-error": "Dao is get misgegange",
+       "ooui-dialog-process-dismiss": "Sjlete",
+       "ooui-dialog-process-retry": "Perbeer obbenuujts",
+       "ooui-dialog-process-continue": "Doorgaon",
+       "ooui-selectfile-not-supported": "Selektie van 'n besjtandj waert neet óngersteund",
+       "ooui-selectfile-placeholder": "Dao is gein besjtandj geselekteerd"
+}
index 4334efb..fbd22d0 100644 (file)
@@ -19,6 +19,8 @@
        "ooui-dialog-process-dismiss": "Paslėpti",
        "ooui-dialog-process-retry": "Bandykite dar kartą",
        "ooui-dialog-process-continue": "Tęsti",
+       "ooui-selectfile-button-select": "Pasirinkti failą",
        "ooui-selectfile-not-supported": "Failų pasirinkimas nepalaikomas",
-       "ooui-selectfile-placeholder": "Nėra pasirinktų failų"
+       "ooui-selectfile-placeholder": "Nėra pasirinktų failų",
+       "ooui-selectfile-dragdrop-placeholder": "Atitempkite failą čia"
 }
index 53e5bf4..46f37fe 100644 (file)
@@ -18,6 +18,8 @@
        "ooui-dialog-process-dismiss": "Тргни",
        "ooui-dialog-process-retry": "Обиди се пак",
        "ooui-dialog-process-continue": "Продолжи",
+       "ooui-selectfile-button-select": "Одберете податотека",
        "ooui-selectfile-not-supported": "Изборот на податотеки не е поддржан",
-       "ooui-selectfile-placeholder": "Немате одбрано податотека"
+       "ooui-selectfile-placeholder": "Немате одбрано податотека",
+       "ooui-selectfile-dragdrop-placeholder": "Тука пуштете ја податотеката"
 }
index 0ce0c3f..326dd14 100644 (file)
@@ -9,5 +9,16 @@
        },
        "ooui-outline-control-move-down": "ഇനം താഴേയ്ക്ക് മാറ്റുക",
        "ooui-outline-control-move-up": "ഇനം മുകളിലേയ്ക്ക് മാറ്റുക",
-       "ooui-toolbar-more": "കൂടുതൽ"
+       "ooui-outline-control-remove": "ഇനം നീക്കംചെയ്യുക",
+       "ooui-toolbar-more": "കൂടുതൽ",
+       "ooui-toolgroup-expand": "കൂടുതൽ",
+       "ooui-toolgroup-collapse": "കുറച്ച്",
+       "ooui-dialog-message-accept": "ശരി",
+       "ooui-dialog-message-reject": "റദ്ദാക്കുക",
+       "ooui-dialog-process-error": "എന്തോ പ്രശ്നമുണ്ടായി",
+       "ooui-dialog-process-dismiss": "ഒഴിവാക്കുക",
+       "ooui-dialog-process-retry": "വീണ്ടും ശ്രമിക്കുക",
+       "ooui-dialog-process-continue": "തുടരുക",
+       "ooui-selectfile-not-supported": "പ്രമാണം തിരഞ്ഞെടുക്കൽ പിന്തുണയ്ക്കുന്നില്ല",
+       "ooui-selectfile-placeholder": "പ്രമാണങ്ങൾ ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല"
 }
index 6bc94f1..15a5de3 100644 (file)
@@ -7,7 +7,8 @@
                        "V.narsikar",
                        "Ydyashad",
                        "संतोष दहिवळ",
-                       "NehalDaveND"
+                       "NehalDaveND",
+                       "Sau6402"
                ]
        },
        "ooui-outline-control-move-down": "घटक (आयटम) खाली सरकवा",
index 2be1122..19ce1c2 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Anakmalaysia",
                        "Aurora",
-                       "Pizza1016"
+                       "Pizza1016",
+                       "Karmadunya9-"
                ]
        },
        "ooui-outline-control-move-down": "Alihkan perkara ke bawah",
@@ -17,5 +18,7 @@
        "ooui-dialog-process-error": "Ada masalah",
        "ooui-dialog-process-dismiss": "Singkir",
        "ooui-dialog-process-retry": "Cuba lagi",
-       "ooui-dialog-process-continue": "Teruskan"
+       "ooui-dialog-process-continue": "Teruskan",
+       "ooui-selectfile-not-supported": "Pilihan fail tidak disokong",
+       "ooui-selectfile-placeholder": "Tiada fail yang dipilih"
 }
index 9c07f41..b7e37b4 100644 (file)
@@ -4,7 +4,8 @@
                        "Chelin",
                        "Chrisportelli",
                        "PiRSquared17",
-                       "C.R."
+                       "C.R.",
+                       "Candalua"
                ]
        },
        "ooui-outline-control-move-down": "Mòve abbascio",
@@ -19,6 +20,8 @@
        "ooui-dialog-process-dismiss": "Passa 'a vacca",
        "ooui-dialog-process-retry": "Prova n'ata vota",
        "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-button-select": "Sceglie nu file",
        "ooui-selectfile-not-supported": "Filtro 'e selezione nun suppurtato",
-       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file"
+       "ooui-selectfile-placeholder": "Nun s'è scigliuto nisciuno file",
+       "ooui-selectfile-dragdrop-placeholder": "Lassa 'o file ccà"
 }
index 9e2d8f2..4efb02a 100644 (file)
@@ -22,5 +22,6 @@
        "ooui-dialog-process-dismiss": "Lukk",
        "ooui-dialog-process-retry": "Prøv igjen",
        "ooui-dialog-process-continue": "Fortsett",
+       "ooui-selectfile-not-supported": "Filvalg er ikke støttet",
        "ooui-selectfile-placeholder": "Ingen fil er valgt"
 }
index 8eba859..515eada 100644 (file)
@@ -32,5 +32,6 @@
        "ooui-dialog-process-dismiss": "Sluiten",
        "ooui-dialog-process-retry": "Opnieuw proberen",
        "ooui-dialog-process-continue": "Doorgaan",
+       "ooui-selectfile-not-supported": "Selectie van een bestand wordt niet ondersteund",
        "ooui-selectfile-placeholder": "Er is geen bestand geselecteerd"
 }
index 4d35b6c..bccd615 100644 (file)
@@ -9,5 +9,12 @@
        "ooui-outline-control-move-up": "Far montar l’element",
        "ooui-outline-control-remove": "Suprimir l’element",
        "ooui-toolbar-more": "Mai",
-       "ooui-dialog-message-reject": "Anullar"
+       "ooui-toolgroup-expand": "Mai",
+       "ooui-toolgroup-collapse": "Mens",
+       "ooui-dialog-message-accept": "D'acòrdi",
+       "ooui-dialog-message-reject": "Anullar",
+       "ooui-dialog-process-dismiss": "Regetar",
+       "ooui-dialog-process-retry": "Ensajatz tornamai",
+       "ooui-dialog-process-continue": "Contunhar",
+       "ooui-selectfile-placeholder": "Cap de fichièr pas seleccionat"
 }
index ecf9597..a61083b 100644 (file)
@@ -16,5 +16,7 @@
        "ooui-dialog-process-error": "Dogoggorri wayii ummameera",
        "ooui-dialog-process-dismiss": "Didi",
        "ooui-dialog-process-retry": "Itti deebi'ii yaali",
-       "ooui-dialog-process-continue": "Itti fufi"
+       "ooui-dialog-process-continue": "Itti fufi",
+       "ooui-selectfile-not-supported": "Faayilii filachuun hin danda'amu.",
+       "ooui-selectfile-placeholder": "Faayiliin wayiiyyuu hin filatamne"
 }
index dde49bf..7d96dcb 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Odisha1",
                        "Psubhashish",
-                       "ଶିତିକଣ୍ଠ ଦାଶ"
+                       "ଶିତିକଣ୍ଠ ଦାଶ",
+                       "Jnanaranjan Sahu"
                ]
        },
        "ooui-outline-control-move-down": "ବସ୍ତୁଟିକୁ ତଳକୁ ଘୁଞ୍ଚାନ୍ତୁ",
@@ -17,5 +18,7 @@
        "ooui-dialog-process-error": "ଅସୁବିଧାଟିଏ ଘଟିଲା",
        "ooui-dialog-process-dismiss": "ଖାରଜ",
        "ooui-dialog-process-retry": "ଆଉ ଥରେ ଚେଷ୍ଟା କରନ୍ତୁ",
-       "ooui-dialog-process-continue": "ଚାଲୁରଖିବେ"
+       "ooui-dialog-process-continue": "ଚାଲୁରଖିବେ",
+       "ooui-selectfile-not-supported": "ଫାଇଲ ବାଛିବା ସୁବିଧା ନାହିଁ",
+       "ooui-selectfile-placeholder": "କୌଣସି ଫାଇଲ ବଛାଯାଇନାହିଁ"
 }
index 3023479..486e87f 100644 (file)
@@ -16,7 +16,8 @@
                        "Jacenty359",
                        "Matik7",
                        "Gloria sah",
-                       "Andrzej aa"
+                       "Andrzej aa",
+                       "The Polish"
                ]
        },
        "ooui-outline-control-move-down": "Przenieś niżej",
@@ -31,5 +32,8 @@
        "ooui-dialog-process-dismiss": "Ukryj",
        "ooui-dialog-process-retry": "Spróbuj ponownie",
        "ooui-dialog-process-continue": "Kontynuuj",
-       "ooui-selectfile-placeholder": "Nie wybrano pliku"
+       "ooui-selectfile-button-select": "Wybierz plik",
+       "ooui-selectfile-not-supported": "Wybór pliku nie jest obsługiwany",
+       "ooui-selectfile-placeholder": "Nie wybrano pliku",
+       "ooui-selectfile-dragdrop-placeholder": "Umieść plik tutaj"
 }
index b8fd3a5..c8b5bc7 100644 (file)
@@ -8,5 +8,16 @@
        },
        "ooui-outline-control-move-down": "Fé calé giù l'element",
        "ooui-outline-control-move-up": "Fé monté l'element",
-       "ooui-toolbar-more": "Ëd pi"
+       "ooui-outline-control-remove": "Gavé j'element",
+       "ooui-toolbar-more": "Ëd pi",
+       "ooui-toolgroup-expand": "Pi",
+       "ooui-toolgroup-collapse": "Men",
+       "ooui-dialog-message-accept": "Va bin",
+       "ooui-dialog-message-reject": "Scancelé",
+       "ooui-dialog-process-error": "Quaicòs a l'é andà mal",
+       "ooui-dialog-process-dismiss": "Stërmé",
+       "ooui-dialog-process-retry": "Preuva torna",
+       "ooui-dialog-process-continue": "Continua",
+       "ooui-selectfile-not-supported": "La selession d'archivi a l'é nen mantnùa",
+       "ooui-selectfile-placeholder": "Gnun archivi selessionà"
 }
index c371bbc..228291a 100644 (file)
@@ -16,6 +16,7 @@
        "ooui-dialog-process-dismiss": "تړل",
        "ooui-dialog-process-retry": "بيا هڅه",
        "ooui-dialog-process-continue": "پرله پورې",
+       "ooui-selectfile-button-select": "يوه دوتنه وټاکئ",
        "ooui-selectfile-not-supported": "د دوتنې د ټاکنې ملاتړ نه دی شوی",
        "ooui-selectfile-placeholder": "کومه دوتنه نه ده ټاکل شوې"
 }
index 94ea089..bcc31e0 100644 (file)
@@ -9,10 +9,23 @@
                        "Jaideraf",
                        "Luckas",
                        "OTAVIO1981",
-                       555
+                       555,
+                       "TheEduGobi",
+                       "TheGabrielZaum"
                ]
        },
        "ooui-outline-control-move-down": "Mover item para baixo",
        "ooui-outline-control-move-up": "Mover item para cima",
-       "ooui-toolbar-more": "Mais"
+       "ooui-outline-control-remove": "Remover item",
+       "ooui-toolbar-more": "Mais",
+       "ooui-toolgroup-expand": "Mais",
+       "ooui-toolgroup-collapse": "Menos",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Cancelar",
+       "ooui-dialog-process-error": "Algo deu errado",
+       "ooui-dialog-process-dismiss": "Dispensar",
+       "ooui-dialog-process-retry": "Tentar novamente",
+       "ooui-dialog-process-continue": "Continuar",
+       "ooui-selectfile-not-supported": "O selecionamento de arquivos não é suportado",
+       "ooui-selectfile-placeholder": "Nenhum arquivo selecionado"
 }
index aab0aed..8379cac 100644 (file)
@@ -26,5 +26,6 @@
        "ooui-dialog-process-retry": "Tentar novamente",
        "ooui-dialog-process-continue": "Continuar",
        "ooui-selectfile-not-supported": "A seleção de ficheiros não é suportada",
-       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado"
+       "ooui-selectfile-placeholder": "Nenhum ficheiro selecionado",
+       "ooui-selectfile-dragdrop-placeholder": "Soltar ficheiro aqui (ou clicar para navegar)"
 }
index bef65ed..cd9c0c2 100644 (file)
@@ -32,7 +32,9 @@
        "ooui-dialog-process-dismiss": "Label for process dialog dismiss error button, visible when describing errors\n{{Identical|Dismiss}}",
        "ooui-dialog-process-retry": "Label for process dialog retry action button, visible when describing recoverable errors\n{{Identical|Try again}}",
        "ooui-dialog-process-continue": "Label for process dialog retry action button, visible when describing only warnings\n{{Identical|Continue}}",
-       "ooui-selectfile-not-supported": "Label for the file selection dialog if file selection is not supported",
-       "ooui-selectfile-placeholder": "Label for the file selection dialog when no file is currently selected",
+       "ooui-selectfile-button-select": "Label for the file selection widget's select file button",
+       "ooui-selectfile-not-supported": "Label for the file selection widget if file selection is not supported",
+       "ooui-selectfile-placeholder": "Label for the file selection widget when no file is currently selected",
+       "ooui-selectfile-dragdrop-placeholder": "Label for the file selection widget's drop target",
        "ooui-semicolon-separator": "{{optional}} Semicolon used as a separator"
 }
index 970a602..69daa18 100644 (file)
@@ -20,6 +20,8 @@
        "ooui-dialog-process-dismiss": "Renunțare",
        "ooui-dialog-process-retry": "Reîncearcă",
        "ooui-dialog-process-continue": "Continuă",
+       "ooui-selectfile-button-select": "Alege un fișier",
        "ooui-selectfile-not-supported": "Selecția de fișiere nu este acceptată",
-       "ooui-selectfile-placeholder": "Niciun fișier selectat"
+       "ooui-selectfile-placeholder": "Niciun fișier selectat",
+       "ooui-selectfile-dragdrop-placeholder": "Trageți fișierul aici"
 }
index 42005fe..73a5a6c 100644 (file)
@@ -16,6 +16,8 @@
        "ooui-dialog-process-dismiss": "Scitte",
        "ooui-dialog-process-retry": "Pruève arrete",
        "ooui-dialog-process-continue": "Condinue",
+       "ooui-selectfile-button-select": "Scacchie 'nu file",
        "ooui-selectfile-not-supported": "'U scacchiamende d'u file non g'è supportate",
-       "ooui-selectfile-placeholder": "Nisciune file scacchiate"
+       "ooui-selectfile-placeholder": "Nisciune file scacchiate",
+       "ooui-selectfile-dragdrop-placeholder": "Scitte 'u file aqquà"
 }
index f5674b3..6c62d36 100644 (file)
@@ -16,7 +16,8 @@
                        "Sunpriat",
                        "Yury Katkov",
                        "Умар",
-                       "Камалист"
+                       "Камалист",
+                       "Meshkov.a"
                ]
        },
        "ooui-outline-control-move-down": "Переместить элемент вниз",
@@ -31,5 +32,8 @@
        "ooui-dialog-process-dismiss": "Закрыть",
        "ooui-dialog-process-retry": "Попробовать ещё раз",
        "ooui-dialog-process-continue": "Продолжить",
-       "ooui-selectfile-not-supported": "Выбор файла не поддерживается"
+       "ooui-selectfile-button-select": "Выберите файл",
+       "ooui-selectfile-not-supported": "Выбор файла не поддерживается",
+       "ooui-selectfile-placeholder": "Не выбран файл",
+       "ooui-selectfile-dragdrop-placeholder": "Перетащите файл сюда"
 }
index 85a94cd..1e1b05d 100644 (file)
@@ -4,5 +4,19 @@
                        "Gazeb",
                        "HalanTul"
                ]
-       }
+       },
+       "ooui-outline-control-move-down": "Аллара түһэрэн биэр",
+       "ooui-outline-control-move-up": "Үөһэ таһааран биэр",
+       "ooui-outline-control-remove": "Сот",
+       "ooui-toolbar-more": "Эбии",
+       "ooui-toolgroup-expand": "Эбии",
+       "ooui-toolgroup-collapse": "Кыччат",
+       "ooui-dialog-message-accept": "Сөп",
+       "ooui-dialog-message-reject": "Салҕаама",
+       "ooui-dialog-process-error": "Туга эрэ сатаммата",
+       "ooui-dialog-process-dismiss": "Сап",
+       "ooui-dialog-process-retry": "Хатылаан көр",
+       "ooui-dialog-process-continue": "Салгыы",
+       "ooui-selectfile-not-supported": "Билэни талыы өйөммөт",
+       "ooui-selectfile-placeholder": "Биир да билэ талыллыбатах"
 }
index 0a26a5c..794d71f 100644 (file)
@@ -1,11 +1,22 @@
 {
        "@metadata": {
                "authors": [
-                       "John Reid"
+                       "John Reid",
+                       "Foxj"
                ]
        },
        "ooui-outline-control-move-down": "Muiv eetem doon",
        "ooui-outline-control-move-up": "Muiv eetem up",
        "ooui-outline-control-remove": "Remuiv eetem",
-       "ooui-toolbar-more": "Mair"
+       "ooui-toolbar-more": "Mair",
+       "ooui-toolgroup-expand": "Mair",
+       "ooui-toolgroup-collapse": "Less",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Cancel",
+       "ooui-dialog-process-error": "Sommit went wrang",
+       "ooui-dialog-process-dismiss": "Close",
+       "ooui-dialog-process-retry": "Hae aniter gae",
+       "ooui-dialog-process-continue": "Conteena",
+       "ooui-selectfile-not-supported": "Cannae pick ony files",
+       "ooui-selectfile-placeholder": "Nae file selectit"
 }
index b40fa04..db6fa3c 100644 (file)
@@ -5,5 +5,17 @@
                ]
        },
        "ooui-outline-control-move-down": "Pomakni stavku dolje",
-       "ooui-outline-control-move-up": "Pomakni stavku gore"
+       "ooui-outline-control-move-up": "Premjesti stavku gore",
+       "ooui-outline-control-remove": "Ukloni stavku",
+       "ooui-toolbar-more": "Više",
+       "ooui-toolgroup-expand": "Više",
+       "ooui-toolgroup-collapse": "Manje",
+       "ooui-dialog-message-accept": "U redu",
+       "ooui-dialog-message-reject": "Otkaži",
+       "ooui-dialog-process-error": "Nešto je pošlo naopako",
+       "ooui-dialog-process-dismiss": "Odbaci",
+       "ooui-dialog-process-retry": "Pokušajte ponovo",
+       "ooui-dialog-process-continue": "Nastavi",
+       "ooui-selectfile-not-supported": "Izbor datoteke nije podržan",
+       "ooui-selectfile-placeholder": "Nijedna datoteka nije odabrana"
 }
index c8246da..fa65888 100644 (file)
@@ -2,11 +2,21 @@
        "@metadata": {
                "authors": [
                        "Mimarik",
-                       "Teslaton"
+                       "Teslaton",
+                       "Kusavica"
                ]
        },
        "ooui-outline-control-move-down": "Posunúť položku nadol",
        "ooui-outline-control-move-up": "Posunúť položku nahor",
        "ooui-outline-control-remove": "Odstrániť položku",
-       "ooui-toolbar-more": "Viac"
+       "ooui-toolbar-more": "Viac",
+       "ooui-toolgroup-expand": "Viac",
+       "ooui-toolgroup-collapse": "Menej",
+       "ooui-dialog-message-accept": "OK",
+       "ooui-dialog-message-reject": "Zrušiť",
+       "ooui-dialog-process-error": "Niečo sa pokazilo",
+       "ooui-dialog-process-dismiss": "Zrušiť",
+       "ooui-dialog-process-retry": "Skúsiť znova",
+       "ooui-dialog-process-continue": "Pokračovať",
+       "ooui-selectfile-placeholder": "Nie je vybraný žiadny súbor"
 }
index a40728a..e113671 100644 (file)
@@ -18,5 +18,7 @@
        "ooui-dialog-process-error": "Nekaj je šlo narobe",
        "ooui-dialog-process-dismiss": "Skrij",
        "ooui-dialog-process-retry": "Poskusi znova",
-       "ooui-dialog-process-continue": "Nadaljuj"
+       "ooui-dialog-process-continue": "Nadaljuj",
+       "ooui-selectfile-not-supported": "Izbira datoteke ni podprta",
+       "ooui-selectfile-placeholder": "Nobena datoteka ni izbrana"
 }
index ec18019..4bf5dac 100644 (file)
@@ -5,15 +5,22 @@
                        "Kushtrim",
                        "Elioqoshi",
                        "GretaDoci",
-                       "Gertakapllani"
+                       "Gertakapllani",
+                       "Techlik"
                ]
        },
        "ooui-outline-control-move-down": "Zhvendose artikullin më poshtë",
        "ooui-outline-control-move-up": "Zhvendose artikullin më lart",
        "ooui-outline-control-remove": "Hiq artikullin",
        "ooui-toolbar-more": "Më tepër...",
+       "ooui-toolgroup-expand": "Më tepër...",
+       "ooui-toolgroup-collapse": "Më pak",
        "ooui-dialog-message-accept": "Në rregull",
        "ooui-dialog-message-reject": "Anullo",
        "ooui-dialog-process-error": "Diçka shkoi keq",
-       "ooui-dialog-process-retry": "Provo përsëri"
+       "ooui-dialog-process-dismiss": "Largoje",
+       "ooui-dialog-process-retry": "Provo përsëri",
+       "ooui-dialog-process-continue": "Vazhdo",
+       "ooui-selectfile-not-supported": "Skedari i përzgjedhur nuk përkrahet",
+       "ooui-selectfile-placeholder": "Nuk është zgjedhur asnjë skedar"
 }
diff --git a/resources/lib/oojs-ui/i18n/su.json b/resources/lib/oojs-ui/i18n/su.json
new file mode 100644 (file)
index 0000000..a8cf762
--- /dev/null
@@ -0,0 +1,21 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Kandar"
+               ]
+       },
+       "ooui-outline-control-move-down": "Pindahkeun ka handap",
+       "ooui-outline-control-move-up": "Pindahkeun ka luhur",
+       "ooui-outline-control-remove": "Hapus",
+       "ooui-toolbar-more": "Lobaan",
+       "ooui-toolgroup-expand": "Lobaan",
+       "ooui-toolgroup-collapse": "Saeutikan",
+       "ooui-dialog-message-accept": "Heug",
+       "ooui-dialog-message-reject": "Bolay",
+       "ooui-dialog-process-error": "Aya nu teu bener",
+       "ooui-dialog-process-dismiss": "Tutup",
+       "ooui-dialog-process-retry": "Cobaan deui",
+       "ooui-dialog-process-continue": "Teruskeun",
+       "ooui-selectfile-not-supported": "Pamilihan berkas teu dirojong",
+       "ooui-selectfile-placeholder": "Taya berkas anu dipilih"
+}
index c2422ba..3ffbc48 100644 (file)
@@ -11,7 +11,8 @@
                        "Sendelbach",
                        "Skalman",
                        "WikiPhoenix",
-                       "Lokal Profil"
+                       "Lokal Profil",
+                       "Warrakkk"
                ]
        },
        "ooui-outline-control-move-down": "Flytta ned objekt",
@@ -26,5 +27,8 @@
        "ooui-dialog-process-dismiss": "Stäng",
        "ooui-dialog-process-retry": "Försök igen",
        "ooui-dialog-process-continue": "Fortsätt",
-       "ooui-selectfile-placeholder": "Ingen fil är vald"
+       "ooui-selectfile-button-select": "Välj en fil",
+       "ooui-selectfile-not-supported": "Filval stöds inte",
+       "ooui-selectfile-placeholder": "Ingen fil är vald",
+       "ooui-selectfile-dragdrop-placeholder": "Släpp filen här"
 }
index 122d4a2..6e7b249 100644 (file)
@@ -5,9 +5,22 @@
                        "Sank",
                        "Shanmugamp7",
                        "மதனாஹரன்",
-                       "ElangoRamanujam"
+                       "ElangoRamanujam",
+                       "Info-farmer"
                ]
        },
+       "ooui-outline-control-move-down": "உருப்படியை கீழிடு",
+       "ooui-outline-control-move-up": "உருப்படியை மேலிடு",
+       "ooui-outline-control-remove": "உருப்படியை நீக்கு",
+       "ooui-toolbar-more": "மேலும்",
        "ooui-toolgroup-expand": "மேலும்",
-       "ooui-dialog-process-continue": "தொடரவும்"
+       "ooui-toolgroup-collapse": "குறைவாக",
+       "ooui-dialog-message-accept": "சரி",
+       "ooui-dialog-message-reject": "கைவிடுக",
+       "ooui-dialog-process-error": "ஏதோ தவறாகியுள்ளது",
+       "ooui-dialog-process-dismiss": "அகற்று",
+       "ooui-dialog-process-retry": "மீண்டும் முயல்க",
+       "ooui-dialog-process-continue": "தொடரவும்",
+       "ooui-selectfile-not-supported": "கோப்புத்தேர்வு ஆதரவாக இல்லை",
+       "ooui-selectfile-placeholder": "எக்கோப்பும் தெரிவாகவில்லை"
 }
index b3a9f24..c0dbd5f 100644 (file)
@@ -2,13 +2,22 @@
        "@metadata": {
                "authors": [
                        "AnakngAraw",
-                       "Sky Harbor"
+                       "Sky Harbor",
+                       "Jewel457"
                ]
        },
        "ooui-outline-control-move-down": "Ilipat ang aytem pababa",
        "ooui-outline-control-move-up": "Ilipat ang aytem pataas",
        "ooui-outline-control-remove": "Tanggalin ang aytem",
        "ooui-toolbar-more": "Marami pa",
+       "ooui-toolgroup-expand": "Maraming iba pa",
+       "ooui-toolgroup-collapse": "Kakaunti",
        "ooui-dialog-message-accept": "Sige",
-       "ooui-dialog-message-reject": "Huwag ituloy"
+       "ooui-dialog-message-reject": "Huwag ituloy",
+       "ooui-dialog-process-error": "May pagkakamali",
+       "ooui-dialog-process-dismiss": "Isa-isantabi",
+       "ooui-dialog-process-retry": "Subuking muli",
+       "ooui-dialog-process-continue": "Magpatuloy",
+       "ooui-selectfile-not-supported": "Ang pagpili ng file ay hindi kinakatigan",
+       "ooui-selectfile-placeholder": "Walang piniling file"
 }
index 0197a4c..a38afbf 100644 (file)
@@ -15,7 +15,9 @@
                        "Tel'et",
                        "Tifinaghes",
                        "Ата",
-                       "Piramidion"
+                       "Piramidion",
+                       "A1",
+                       "Dars"
                ]
        },
        "ooui-outline-control-move-down": "Перемістити елемент униз",
@@ -29,5 +31,9 @@
        "ooui-dialog-process-error": "Щось пішло не так",
        "ooui-dialog-process-dismiss": "Приховати",
        "ooui-dialog-process-retry": "Спробуйте ще раз",
-       "ooui-dialog-process-continue": "Продовжити"
+       "ooui-dialog-process-continue": "Продовжити",
+       "ooui-selectfile-button-select": "Оберіть файл",
+       "ooui-selectfile-not-supported": "Вибір файлу не підтримується",
+       "ooui-selectfile-placeholder": "Жодного файлу не вибрано",
+       "ooui-selectfile-dragdrop-placeholder": "Помістіть файл сюди"
 }
index 4de584b..1ccc67b 100644 (file)
@@ -9,5 +9,9 @@
        "ooui-outline-control-move-down": "Sposta in baso",
        "ooui-outline-control-move-up": "Sposta in sima",
        "ooui-toolbar-more": "Altro",
-       "ooui-dialog-message-accept": "Va ben"
+       "ooui-dialog-message-accept": "Va ben",
+       "ooui-dialog-process-error": "Xe 'ndà storto calcossa",
+       "ooui-dialog-process-dismiss": "Scondi",
+       "ooui-dialog-process-retry": "Proa da novo",
+       "ooui-dialog-process-continue": "Và vanti"
 }
index d5c1e36..ff14801 100644 (file)
@@ -4,19 +4,23 @@
                        "Cheers!",
                        "Jdforrester",
                        "Minh Nguyen",
-                       "Max20091"
+                       "Max20091",
+                       "Anh88"
                ]
        },
        "ooui-outline-control-move-down": "Chuyển mục xuống",
        "ooui-outline-control-move-up": "Chuyển mục lên",
-       "ooui-outline-control-remove": "Xóa khoản",
+       "ooui-outline-control-remove": "Xóa mục",
        "ooui-toolbar-more": "Thêm",
        "ooui-toolgroup-expand": "Mở rộng",
        "ooui-toolgroup-collapse": "Rút gọn",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Hủy bỏ",
-       "ooui-dialog-process-error": "Đã bị trục trặc",
+       "ooui-dialog-process-error": "Có thứ gì đó bị lỗi",
        "ooui-dialog-process-dismiss": "Bỏ qua",
        "ooui-dialog-process-retry": "Thử lại",
-       "ooui-dialog-process-continue": "Tiếp tục"
+       "ooui-dialog-process-continue": "Tiếp tục",
+       "ooui-selectfile-not-supported": "Không hỗ trợ việc chọn tập tin",
+       "ooui-selectfile-placeholder": "Không có tập tin nào được chọn",
+       "ooui-selectfile-dragdrop-placeholder": "Thả tập tin vào đây (hoặc nhấn chuột để duyệt)"
 }
index 7247d93..9934d9d 100644 (file)
                        "Yfdyh000",
                        "Zhangjintao",
                        "乌拉跨氪",
-                       "Great Brightstar"
+                       "Great Brightstar",
+                       "Nbdd0121"
                ]
        },
-       "ooui-outline-control-move-down": "项目下移",
-       "ooui-outline-control-move-up": "项目上移",
+       "ooui-outline-control-move-down": "向下移动一项",
+       "ooui-outline-control-move-up": "向上移动一项",
        "ooui-outline-control-remove": "移除项目",
        "ooui-toolbar-more": "更多",
        "ooui-toolgroup-expand": "更多",
        "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "确定",
        "ooui-dialog-message-reject": "取消",
-       "ooui-dialog-process-error": "发生一些错误",
-       "ooui-dialog-process-dismiss": "解除",
+       "ooui-dialog-process-error": "å\8f\91ç\94\9fäº\86ä¸\80äº\9bé\94\99误",
+       "ooui-dialog-process-dismiss": "关闭",
        "ooui-dialog-process-retry": "重试",
        "ooui-dialog-process-continue": "继续",
+       "ooui-selectfile-button-select": "选择一个文件",
        "ooui-selectfile-not-supported": "文件选择不受支持",
-       "ooui-selectfile-placeholder": "没有选定文件"
+       "ooui-selectfile-placeholder": "没有选定文件",
+       "ooui-selectfile-dragdrop-placeholder": "将文件拖动至此"
 }
index 3f59200..f70efe1 100644 (file)
@@ -30,6 +30,8 @@
        "ooui-dialog-process-dismiss": "關閉",
        "ooui-dialog-process-retry": "再試一次",
        "ooui-dialog-process-continue": "繼續",
+       "ooui-selectfile-button-select": "選擇一個檔案",
        "ooui-selectfile-not-supported": "無法支援所選擇的檔案",
-       "ooui-selectfile-placeholder": "沒有選擇檔案"
+       "ooui-selectfile-placeholder": "未選擇檔案",
+       "ooui-selectfile-dragdrop-placeholder": "拖曳檔案到此處"
 }
index 0c670e1..ede6ea9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.8
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
- * Copyright 2011–2015 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-08T01:31:46Z
+ * Date: 2015-09-08T20:56:08Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
@@ -82,8 +82,6 @@
 .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-buttonElement-frameless {
        display: inline-block;
 }
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-       /*.oo-ui-transition(opacity 200ms);*/
+       /*.oo-ui-transition(opacity @medium-ease);*/
 }
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
        border-radius: 0.3em;
        text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
        border: 1px #c9c9c9 solid;
-       -webkit-transition: border-color 100ms ease-in-out;
-          -moz-transition: border-color 100ms ease-in-out;
-           -ms-transition: border-color 100ms ease-in-out;
-            -o-transition: border-color 100ms ease-in-out;
-               transition: border-color 100ms ease-in-out;
+       -webkit-transition: border-color 100ms ease;
+          -moz-transition: border-color 100ms ease;
+           -ms-transition: border-color 100ms ease;
+            -o-transition: border-color 100ms ease;
+               transition: border-color 100ms ease;
        background: #eeeeee;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
 }
 .oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-iconElement.oo-ui-iconElement-icon {
-       opacity: 0.8;
        background-size: contain;
        background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-iconElement.oo-ui-iconElement-icon {
+       opacity: 0.8;
 }
 .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
 .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
-       opacity: 0.8;
        background-size: contain;
        background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
+       opacity: 0.8;
 }
 .oo-ui-lookupElement > .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
 }
+.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
+}
 .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
        overflow-y: hidden;
 }
 .oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
+.oo-ui-fieldLayout-messages {
+       list-style: none none;
+       margin: 0;
+       padding: 0;
+       margin-top: 0.25em;
+       margin-left: 0.25em;
+}
+.oo-ui-fieldLayout-messages > li {
+       margin: 0;
+       padding: 0;
+}
+.oo-ui-fieldLayout-messages .oo-ui-iconWidget {
+       display: none;
+}
+.oo-ui-fieldLayout-messages .oo-ui-fieldLayout-messages-error {
+       color: #d45353;
+}
+.oo-ui-fieldLayout-messages .oo-ui-labelWidget {
+       padding: 0;
+       line-height: 1.875em;
+       vertical-align: middle;
+}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
 .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
        display: block;
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
        display: inline-block;
 .oo-ui-menuLayout-menu,
 .oo-ui-menuLayout-content {
        position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
+       -webkit-transition: all 200ms ease;
+          -moz-transition: all 200ms ease;
+           -ms-transition: all 200ms ease;
+            -o-transition: all 200ms ease;
+               transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
        height: 18em;
        border-radius: 0.5em;
        box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
 }
+.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed {
+       margin: 1em 0;
+}
 .oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
        display: block;
        position: relative;
 }
+.oo-ui-horizontalLayout > .oo-ui-widget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-horizontalLayout > .oo-ui-layout {
+       display: inline-block;
+}
+.oo-ui-horizontalLayout > .oo-ui-widget {
+       margin-right: 0.5em;
+}
+.oo-ui-horizontalLayout > .oo-ui-widget:last-child {
+       margin-right: 0;
+}
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        z-index: 4;
        margin: 0.375em;
        border-radius: 0.3125em;
        border: 1px solid transparent;
-       -webkit-transition: border-color 300ms ease-in-out;
-          -moz-transition: border-color 300ms ease-in-out;
-           -ms-transition: border-color 300ms ease-in-out;
-            -o-transition: border-color 300ms ease-in-out;
-               transition: border-color 300ms ease-in-out;
+       -webkit-transition: border-color 250ms ease;
+          -moz-transition: border-color 250ms ease;
+           -ms-transition: border-color 250ms ease;
+            -o-transition: border-color 250ms ease;
+               transition: border-color 250ms ease;
 }
 .oo-ui-toolGroup-empty {
        display: none;
 .oo-ui-toolGroup .oo-ui-tool-link {
        text-decoration: none;
 }
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
 .oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
        margin-left: 0;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
        border-left-color: rgba(0, 0, 0, 0.1);
 }
+.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-disabled > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled:hover > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 1;
 }
+.oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-tool-title {
+       color: #cccccc;
+}
 .oo-ui-barToolGroup.oo-ui-widget-disabled > .oo-ui-toolGroup-tools > .oo-ui-tool > .oo-ui-tool-link .oo-ui-iconElement-icon {
        opacity: 0.2;
 }
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
 .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
        cursor: default;
        position: absolute;
        z-index: 4;
 }
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
-       background-repeat: no-repeat;
-       background-position: center center;
-}
 .oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
        display: block;
 }
 .oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button,
 .oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement > .oo-ui-buttonElement-button {
        margin: 0;
-       padding: 1.1953125em 0.3125em;
+       padding: 0 0.3125em;
 }
 .oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
 .oo-ui-toolbar-actions > .oo-ui-buttonElement-frameless:last-child.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin: 0 1em;
+       line-height: 3.40625em;
+       /* 43/12.8 */
 }
 .oo-ui-toolbar-shadow {
        background-image: /* @embed */ url(themes/apex/images/toolbar-shadow.png);
        bottom: -9px;
        height: 9px;
        opacity: 0.5;
-       -webkit-transition: opacity 500ms ease-in-out;
-          -moz-transition: opacity 500ms ease-in-out;
-           -ms-transition: opacity 500ms ease-in-out;
-            -o-transition: opacity 500ms ease-in-out;
-               transition: opacity 500ms ease-in-out;
+       -webkit-transition: opacity 500ms ease;
+          -moz-transition: opacity 500ms ease;
+           -ms-transition: opacity 500ms ease;
+            -o-transition: opacity 500ms ease;
+               transition: opacity 500ms ease;
 }
 .oo-ui-optionWidget {
        position: relative;
 .oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
        position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
 }
 .oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
 .oo-ui-iconWidget {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
        line-height: 2.5em;
        height: 1.875em;
        width: 1.875em;
 .oo-ui-indicatorWidget {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
        line-height: 2.5em;
        height: 0.9375em;
        width: 0.9375em;
        border-radius: 1em;
        box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
        border: 1px #c9c9c9 solid;
-       -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-          -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-           -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-            -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-               transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+       -webkit-transition: left 250ms ease, margin-left 250ms ease;
+          -moz-transition: left 250ms ease, margin-left 250ms ease;
+           -ms-transition: left 250ms ease, margin-left 250ms ease;
+            -o-transition: left 250ms ease, margin-left 250ms ease;
+               transition: left 250ms ease, margin-left 250ms ease;
        background: #eeeeee;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
 .oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
        border-radius: 1em;
        box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-       -webkit-transition: opacity 200ms ease-in-out;
-          -moz-transition: opacity 200ms ease-in-out;
-           -ms-transition: opacity 200ms ease-in-out;
-            -o-transition: opacity 200ms ease-in-out;
-               transition: opacity 200ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
        background: #cde7f4;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
 .oo-ui-progressBarWidget-bar {
        height: 1em;
        border-right: 1px solid #cccccc;
-       -webkit-transition: width 200ms, margin-left 200ms;
-          -moz-transition: width 200ms, margin-left 200ms;
-           -ms-transition: width 200ms, margin-left 200ms;
-            -o-transition: width 200ms, margin-left 200ms;
-               transition: width 200ms, margin-left 200ms;
+       -webkit-transition: width 250ms ease, margin-left 250ms ease;
+          -moz-transition: width 250ms ease, margin-left 250ms ease;
+           -ms-transition: width 250ms ease, margin-left 250ms ease;
+            -o-transition: width 250ms ease, margin-left 250ms ease;
+               transition: width 250ms ease, margin-left 250ms ease;
        background: #cde7f4;
        filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
        background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
            -ms-user-select: none;
                user-select: none;
 }
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
        float: right;
 }
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
        float: left;
        cursor: default;
 }
        border-width: 6px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-           -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-            -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-               transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+       -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+          -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+           -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+            -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+               transition: width 100ms ease, height 100ms ease, left 100ms ease;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
 }
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
        margin: 0.25em;
 }
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
        margin: 0.75em 1em;
 }
 .oo-ui-popupWidget-body-padded {
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
+.oo-ui-textInputWidget input[type="search"] {
+       -webkit-appearance: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-ms-clear {
+       display: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
+       display: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration {
+       display: none;
+}
 .oo-ui-textInputWidget > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
        position: absolute;
        top: 0;
        height: 100%;
-       background-repeat: no-repeat;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: text;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-textInputWidget-type-search > .oo-ui-indicatorElement-indicator {
        cursor: pointer;
 }
 .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
        border: 1px solid #cccccc;
        box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #dddddd;
        border-radius: 0.25em;
-       -webkit-transition: border-color 200ms, box-shadow 200ms;
-          -moz-transition: border-color 200ms, box-shadow 200ms;
-           -ms-transition: border-color 200ms, box-shadow 200ms;
-            -o-transition: border-color 200ms, box-shadow 200ms;
-               transition: border-color 200ms, box-shadow 200ms;
+       -webkit-transition: border-color 250ms ease, box-shadow 250ms ease;
+          -moz-transition: border-color 250ms ease, box-shadow 250ms ease;
+           -ms-transition: border-color 250ms ease, box-shadow 250ms ease;
+            -o-transition: border-color 250ms ease, box-shadow 250ms ease;
+               transition: border-color 250ms ease, box-shadow 250ms ease;
+}
+.oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
+.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
+       background-color: transparent;
 }
 .oo-ui-textInputWidget-decorated input,
 .oo-ui-textInputWidget-decorated textarea {
        color: #dddddd;
        text-shadow: 0 1px 1px #ffffff;
 }
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-       background-color: transparent;
-       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
-}
 .oo-ui-textInputWidget.oo-ui-iconElement input,
 .oo-ui-textInputWidget.oo-ui-iconElement textarea {
        padding-left: 2em;
 .oo-ui-dropdownWidget {
        display: inline-block;
        position: relative;
-       margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
        z-index: 1;
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
-       margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid rgba(0, 0, 0, 0.1);
        border-radius: 0.25em;
-       padding: 0 0.5em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
-       width: 100%;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        text-overflow: ellipsis;
+       left: 0.5em;
+       right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
-       padding-left: 3em;
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       left: 2.75em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
-       padding-right: 3em;
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 5em;
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
-       padding-right: 1em;
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 1em;
+}
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 2em;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 2em;
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
+       border: 1px dashed #aaaaaa;
+       padding: 0.5em 1em;
+       margin-bottom: 0.5em;
+       background: #ffffff;
+       text-align: center;
+       vertical-align: middle;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover,
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop oo-ui-selectfilewidget-droptarget {
+       background-color: #e1f3ff;
+}
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
 }
 .oo-ui-outlineOptionWidget {
        position: relative;
 .oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
        float: left;
        background-position: right center;
-       background-repeat: no-repeat;
 }
 .oo-ui-outlineControlsWidget-items {
        float: left;
        background-color: #ffffff;
        border-color: #dddddd;
 }
+.oo-ui-capsuleMultiSelectWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-capsuleMultiSelectWidget-handle {
+       width: 100%;
+       display: inline-block;
+       position: relative;
+}
+.oo-ui-capsuleMultiSelectWidget-group {
+       display: inline;
+}
+.oo-ui-capsuleMultiSelectWidget > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-capsuleMultiSelectWidget-handle {
+       background: #ffffff;
+       cursor: text;
+       min-height: 2.4em;
+       margin-right: 0.5em;
+       padding: 0.25em 0;
+       border: 1px solid rgba(0, 0, 0, 0.1);
+       border-radius: 0.25em;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-capsuleMultiSelectWidget-handle:last-child {
+       margin-right: 0;
+}
+.oo-ui-capsuleMultiSelectWidget-handle .oo-ui-capsuleMultiSelectWidget-group {
+       margin: 0 0.2em;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator,
+.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon {
+       position: absolute;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > input {
+       border: none;
+       min-width: 1em;
+       max-width: 100%;
+       line-height: 1.675em;
+       margin: 0;
+       padding: 0;
+       font-size: inherit;
+       font-family: inherit;
+       background-color: transparent;
+       color: black;
+       vertical-align: middle;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > input:focus {
+       outline: none;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle {
+       padding-right: 0.9375em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
+       right: 0;
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle {
+       padding-left: 1.875em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon {
+       left: 0;
+       top: 0;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
+}
+.oo-ui-capsuleMultiSelectWidget:hover .oo-ui-capsuleMultiSelectWidget-handle {
+       border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+       cursor: default;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget {
+       border-top-color: #ffffff;
+}
+.oo-ui-capsuleItemWidget {
+       position: relative;
+       display: inline-block;
+       cursor: default;
+       white-space: nowrap;
+       width: auto;
+       max-width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       vertical-align: middle;
+       padding: 0 0.4em;
+       margin: 0 0.1em;
+       height: 1.7em;
+       line-height: 1.7em;
+       background: #eeeeee;
+       filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+       background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+       background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:    -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:      -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+       background-image:         linear-gradient(to bottom, #ffffff 0%, #dddddd 100%);
+       border: 1px solid #cccccc;
+       color: #555555;
+       border-radius: 0.25em;
+}
+.oo-ui-capsuleItemWidget > .oo-ui-iconElement-icon {
+       cursor: pointer;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon {
+       cursor: default;
+}
+.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       display: block;
+       text-overflow: ellipsis;
+       overflow: hidden;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+       padding-right: 1.3375em;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+       position: absolute;
+       right: 0.4em;
+       top: 0;
+       width: 0.9375em;
+       height: 100%;
+       background-repeat: no-repeat;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear {
+       cursor: pointer;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
+       opacity: 0.5;
+       -webkit-transform: translate3d(0, 0, 0);
+       box-shadow: none;
+       color: #333333;
+       background: #eeeeee;
+       border-color: #cccccc;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
        z-index: 1;
        width: 100%;
 }
+.oo-ui-comboBoxWidget > .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: pointer;
+}
 .oo-ui-comboBoxWidget:last-child {
        margin-right: 0;
 }
 .oo-ui-processDialog-content .oo-ui-window-head {
        height: 3.4em;
 }
-.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
-}
 .oo-ui-processDialog-content .oo-ui-window-body {
        top: 3.4em;
        box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
 .oo-ui-windowManager-modal > .oo-ui-dialog {
        background-color: rgba(255, 255, 255, 0.5);
        opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
        top: 1em;
            -ms-transform: scale(0.5);
             -o-transform: scale(0.5);
                transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
+       -webkit-transition: all 250ms ease;
+          -moz-transition: all 250ms ease;
+           -ms-transition: all 250ms ease;
+            -o-transition: all 250ms ease;
+               transition: all 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
        /* Fade window overlay */
index 6a12aa1..83452d0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.8
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
- * Copyright 2011–2015 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-08T01:31:38Z
+ * Date: 2015-09-08T20:55:55Z
  */
 /**
  * @class
index 3153746..87ae9a5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.8
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
- * Copyright 2011–2015 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-08T01:31:46Z
+ * Date: 2015-09-08T20:56:08Z
  */
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
        from {
@@ -82,8 +82,6 @@
 .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-buttonElement-frameless {
        display: inline-block;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #347bff;
+       color: #2962cc;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #347bff;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #00af89;
+       color: #008064;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #00af89;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-       color: #d11d13;
+       color: #8c130d;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       color: #777777;
+       color: #d11d13;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active > .oo-ui-labelElement-label,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin: 0.1em 0;
        padding: 0.2em 0.8em;
        border-radius: 2px;
-       -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-          -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-           -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-            -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-               transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
+       -webkit-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+          -moz-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+           -ms-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+            -o-transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
+               transition: background 100ms ease, color 100ms ease, box-shadow 100ms ease;
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
        box-shadow: inset 0 0 0 1px #1f4999;
        border-color: #1f4999;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #1f4999;
        border-color: #1f4999;
        box-shadow: inset 0 0 0 1px #005946;
        border-color: #005946;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #005946;
        border-color: #005946;
        box-shadow: inset 0 0 0 1px #73100a;
        border-color: #73100a;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #73100a;
        border-color: #73100a;
        box-shadow: inset 0 0 0 1px #ffffff;
        border-color: #347bff;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
        background-color: #1f4999;
        box-shadow: inset 0 0 0 1px #ffffff;
        border-color: #00af89;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
        background-color: #005946;
        box-shadow: inset 0 0 0 1px #ffffff;
        border-color: #d11d13;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
        color: #ffffff;
        background-color: #73100a;
 .oo-ui-iconElement.oo-ui-iconElement-icon {
        background-size: contain;
        background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
 .oo-ui-indicatorElement.oo-ui-indicatorElement-indicator {
        background-size: contain;
        background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-lookupElement > .oo-ui-menuSelectWidget {
        z-index: 1;
        width: 100%;
 }
+.oo-ui-pendingElement-pending {
+       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
+}
 .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
        overflow-y: hidden;
 }
 .oo-ui-fieldLayout-disabled > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
        color: #cccccc;
 }
+.oo-ui-fieldLayout-messages {
+       list-style: none none;
+       margin: 0;
+       padding: 0;
+       margin-top: 0.25em;
+       margin-left: 0.25em;
+}
+.oo-ui-fieldLayout-messages > li {
+       margin: 0;
+       padding: 0;
+       display: table;
+}
+.oo-ui-fieldLayout-messages .oo-ui-iconWidget {
+       display: table-cell;
+       border-right: 0.5em solid transparent;
+}
+.oo-ui-fieldLayout-messages .oo-ui-labelWidget {
+       display: table-cell;
+       padding: 0;
+       line-height: 1.875em;
+       vertical-align: middle;
+}
 .oo-ui-actionFieldLayout-input,
 .oo-ui-actionFieldLayout-button {
        display: table-cell;
 .oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
        display: block;
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
        display: inline-block;
 .oo-ui-menuLayout-menu,
 .oo-ui-menuLayout-content {
        position: absolute;
-       -webkit-transition: all ease-in-out 200ms;
-          -moz-transition: all ease-in-out 200ms;
-           -ms-transition: all ease-in-out 200ms;
-            -o-transition: all ease-in-out 200ms;
-               transition: all ease-in-out 200ms;
+       -webkit-transition: all 200ms ease;
+          -moz-transition: all 200ms ease;
+           -ms-transition: all 200ms ease;
+            -o-transition: all 200ms ease;
+               transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
        height: 18em;
        border-radius: 0.2em;
        box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
 }
+.oo-ui-panelLayout-padded.oo-ui-panelLayout-framed {
+       margin: 1em 0;
+}
 .oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
        display: block;
        position: relative;
 }
+.oo-ui-horizontalLayout > .oo-ui-widget {
+       display: inline-block;
+       vertical-align: middle;
+}
+.oo-ui-horizontalLayout > .oo-ui-layout {
+       display: inline-block;
+}
+.oo-ui-horizontalLayout > .oo-ui-layout,
+.oo-ui-horizontalLayout > .oo-ui-widget {
+       margin-right: 0.5em;
+}
+.oo-ui-horizontalLayout > .oo-ui-layout:last-child,
+.oo-ui-horizontalLayout > .oo-ui-widget:last-child {
+       margin-right: 0;
+}
+.oo-ui-horizontalLayout .oo-ui-fieldLayout {
+       margin-bottom: 0;
+}
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
        z-index: 4;
 .oo-ui-toolGroup .oo-ui-tool-link {
        text-decoration: none;
 }
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
 .oo-ui-toolbar-narrow .oo-ui-toolGroup + .oo-ui-toolGroup {
        margin-left: 0;
 }
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
 .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
        cursor: default;
        position: absolute;
        z-index: 4;
 }
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
-       background-repeat: no-repeat;
-       background-position: center center;
-}
 .oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
        display: block;
 }
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
        padding-left: 0.5em;
-       color: #000000;
+       color: #555555;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel,
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
        background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:         linear-gradient(transparent, transparent), /* @embed */ url("themes/mediawiki/images/icons/check.svg");
        background-image:      -o-linear-gradient(transparent, transparent), url("themes/mediawiki/images/icons/check.png");
+       background-size: contain;
+       background-position: center center;
+       background-repeat: no-repeat;
 }
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
        background-color: #eeeeee;
        border: 0;
        border-radius: 0;
        margin: 0;
-       padding: 1.0546875em 0.3125em;
+       padding: 0 0.3125em;
 }
 .oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        margin: 0 1em;
-       line-height: inherit;
+       line-height: 3.125em;
+       /* 40/12.8 */
 }
 .oo-ui-optionWidget {
        position: relative;
 .oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
        position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
 }
 .oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
 .oo-ui-iconWidget {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
        line-height: 2.5em;
        height: 1.875em;
        width: 1.875em;
 .oo-ui-indicatorWidget {
        display: inline-block;
        vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
        line-height: 2.5em;
        height: 0.9375em;
        width: 0.9375em;
             -o-transform: translateZ(0px);
                transform: translateZ(0px);
        height: 2em;
-       width: 4em;
+       width: 3.5em;
        border-radius: 1em;
-       border: 1px #dddddd solid;
+       border: 1px #555555 solid;
+       background: #ffffff;
+       -webkit-transition: background-color 100ms ease;
+          -moz-transition: background-color 100ms ease;
+           -ms-transition: background-color 100ms ease;
+            -o-transition: background-color 100ms ease;
+               transition: background-color 100ms ease;
        margin-right: 0.5em;
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
        margin-right: 0;
 }
 .oo-ui-toggleSwitchWidget-grip {
-       top: 0.25em;
-       left: 0.25em;
-       width: 1.5em;
-       height: 1.5em;
+       top: 0.5em;
+       left: 0.5em;
+       width: 1em;
+       height: 1em;
        margin-top: -1px;
        border-radius: 1em;
-       border: 1px #dddddd solid;
-       background-color: #f7f7f7;
-       -webkit-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-          -moz-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-           -ms-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-            -o-transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
-               transition: left 0.1s ease-in-out, margin-left 0.1s ease-in-out;
+       background: #555555;
+       -webkit-transition: left 100ms ease, margin-left 100ms ease;
+          -moz-transition: left 100ms ease, margin-left 100ms ease;
+           -ms-transition: left 100ms ease, margin-left 100ms ease;
+            -o-transition: left 100ms ease, margin-left 100ms ease;
+               transition: left 100ms ease, margin-left 100ms ease;
 }
 .oo-ui-toggleSwitchWidget-glow {
-       border-radius: 1em;
-       background-color: #f7f7f7;
-       -webkit-transition: background-color 0.1s ease-in-out;
-          -moz-transition: background-color 0.1s ease-in-out;
-           -ms-transition: background-color 0.1s ease-in-out;
-            -o-transition: background-color 0.1s ease-in-out;
-               transition: background-color 0.1s ease-in-out;
+       display: none;
 }
 .oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-       left: 2.25em;
+       left: 2em;
        margin-left: -2px;
 }
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       display: block;
-}
 .oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-       left: 0.25em;
+       left: 0.5em;
        margin-left: 0;
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
-       border: 1px #cccccc solid;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on {
+       background: #347bff;
+       border-color: #347bff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+       background: #ffffff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus {
+       outline: none;
+       border-color: #347bff;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:focus.oo-ui-toggleWidget-on {
+       border-color: #ffffff;
+       box-shadow: 0 0 0 1px #347bff;
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
-       border-color: #aaaaaa;
+       border-color: #2962cc;
+       box-shadow: 0 0 0 1px #2962cc;
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
-       background-color: #ffffff;
-       border-color: #aaaaaa;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on {
+       background: #2962cc;
+       border-color: #2962cc;
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-       background-color: #d0d0d0;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+       background: #ffffff;
 }
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-       background-color: #ffffff;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+       background: #dddddd;
+       border-color: #dddddd;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled .oo-ui-toggleSwitchWidget-grip {
+       background: #ffffff;
 }
 .oo-ui-progressBarWidget {
        max-width: 50em;
 .oo-ui-progressBarWidget.oo-ui-widget-disabled {
        opacity: 0.6;
 }
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
 .oo-ui-popupWidget {
        position: absolute;
        /* @noflip */
            -ms-user-select: none;
                user-select: none;
 }
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
        float: right;
 }
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
        float: left;
        cursor: default;
 }
        border-width: 9px;
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
-       -webkit-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-          -moz-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-           -ms-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-            -o-transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
-               transition: width 0.1s ease-in-out, height 0.1s ease-in-out, left 0.1s ease-in-out;
+       -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+          -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+           -ms-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+            -o-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+               transition: width 100ms ease, height 100ms ease, left 100ms ease;
 }
 .oo-ui-popupWidget-head {
        height: 2.5em;
 }
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
        margin: 0.25em;
 }
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
        margin: 0.75em 1em;
 }
 .oo-ui-popupWidget-body-padded {
 }
 .oo-ui-checkboxInputWidget input[type="checkbox"] + span {
        cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
 .oo-ui-radioInputWidget input[type="radio"] + span {
        cursor: pointer;
-       -webkit-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-          -moz-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-           -ms-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-            -o-transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
-               transition: background-size 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+       -webkit-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+          -moz-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+           -ms-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+            -o-transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
+               transition: background-size 200ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
+.oo-ui-textInputWidget input[type="search"] {
+       -webkit-appearance: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-ms-clear {
+       display: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-ms-reveal {
+       display: none;
+}
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-decoration,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-cancel-button,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-button,
+.oo-ui-textInputWidget input[type="search"]::-webkit-search-results-decoration {
+       display: none;
+}
 .oo-ui-textInputWidget > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator,
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
        position: absolute;
        top: 0;
        height: 100%;
-       background-repeat: no-repeat;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
           -moz-user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: text;
+}
+.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-textInputWidget-type-search > .oo-ui-indicatorElement-indicator {
        cursor: pointer;
 }
 .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
        border: solid 1px #cccccc;
        box-shadow: inset 0 0 0 0 #347bff;
        border-radius: 0.1em;
-       -webkit-transition: box-shadow 0.1s ease-in-out;
-          -moz-transition: box-shadow 0.1s ease-in-out;
-           -ms-transition: box-shadow 0.1s ease-in-out;
-            -o-transition: box-shadow 0.1s ease-in-out;
-               transition: box-shadow 0.1s ease-in-out;
+       -webkit-transition: box-shadow 100ms ease;
+          -moz-transition: box-shadow 100ms ease;
+           -ms-transition: box-shadow 100ms ease;
+            -o-transition: box-shadow 100ms ease;
+               transition: box-shadow 100ms ease;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
 }
+.oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
+.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
+       background-color: transparent;
+}
 .oo-ui-textInputWidget-decorated input,
 .oo-ui-textInputWidget-decorated textarea {
        padding-left: 2em;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-       -webkit-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-          -moz-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-           -ms-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-            -o-transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
-               transition: border 0.2s cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 0.2s cubic-bezier(0.39, 0.575, 0.565, 1);
+       -webkit-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+          -moz-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+           -ms-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+            -o-transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+               transition: border 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
        color: #dddddd;
        text-shadow: 0 1px 1px #ffffff;
 }
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-       background-color: transparent;
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
 .oo-ui-textInputWidget.oo-ui-iconElement input,
 .oo-ui-textInputWidget.oo-ui-iconElement textarea {
        padding-left: 2.75em;
 .oo-ui-dropdownWidget {
        display: inline-block;
        position: relative;
-       margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        background: #ffffff;
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
        position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
 }
 .oo-ui-dropdownWidget > .oo-ui-menuSelectWidget {
        z-index: 1;
 }
 .oo-ui-selectFileWidget {
        display: inline-block;
-       position: relative;
        vertical-align: middle;
-       margin: 0.25em 0;
        width: 100%;
        max-width: 50em;
        margin-right: 0.5em;
 }
-.oo-ui-selectFileWidget-handle {
-       width: 100%;
-       display: inline-block;
-       cursor: pointer;
-       overflow: hidden;
-       -webkit-touch-callout: none;
-       -webkit-user-select: none;
-          -moz-user-select: none;
-           -ms-user-select: none;
-               user-select: none;
-       -webkit-box-sizing: border-box;
-          -moz-box-sizing: border-box;
-               box-sizing: border-box;
+.oo-ui-selectFileWidget-selectButton {
+       display: table-cell;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       position: relative;
+       overflow: hidden;
 }
-.oo-ui-selectFileWidget-handle > input[type="file"] {
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button > input[type="file"] {
        position: absolute;
        margin: 0;
        top: 0;
        opacity: 0;
        z-index: 1;
        cursor: pointer;
+       /* Push the button part of the native control out of view, as it changes the cursor */
+       padding-top: 100px;
+}
+.oo-ui-selectFileWidget-selectButton.oo-ui-widget-disabled > .oo-ui-buttonElement-button > input[type="file"] {
+       display: none;
+}
+.oo-ui-selectFileWidget-info {
+       width: 100%;
+       display: table-cell;
+       vertical-align: middle;
+       position: relative;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
+       position: absolute;
+       top: 0;
+       bottom: 0;
+       left: 0;
+       right: 0;
+       text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+       position: absolute;
+}
+.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
        z-index: 2;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget-dropTarget {
        cursor: default;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > input[type="file"],
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle > input[type="file"] {
-       display: none;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget {
+       cursor: pointer;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-clearButton,
 .oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-clearButton {
 .oo-ui-selectFileWidget:last-child {
        margin-right: 0;
 }
-.oo-ui-selectFileWidget-handle {
-       height: 2.5em;
+.oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
+       margin: 0 0 0 0.5em;
+}
+.oo-ui-selectFileWidget-info {
+       height: 2.4em;
        border: 1px solid #cccccc;
        border-radius: 0.1em;
-       padding: 0 1em;
-       background: #ffffff;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        right: 0;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        left: 0.25em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-label {
-       line-height: 2.5em;
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       line-height: 2.3em;
        margin: 0;
-       display: inline-block;
        overflow: hidden;
-       width: 100%;
        white-space: nowrap;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        text-overflow: ellipsis;
+       left: 1em;
+       right: 1em;
 }
-.oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        top: 0;
        width: 0.9375em;
        height: 0.9375em;
        margin: 0.775em;
 }
-.oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
        top: 0;
        width: 1.875em;
        height: 1.875em;
        margin: 0.3em;
 }
-.oo-ui-selectFileWidget:hover .oo-ui-selectFileWidget-handle {
-       border-color: #aaaaaa;
-}
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
        color: #cccccc;
        text-shadow: 0 1px 1px #ffffff;
        border-color: #dddddd;
        background-color: #f3f3f3;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-handle > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
        opacity: 0.2;
 }
 .oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-label {
        color: #cccccc;
 }
-.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-handle {
-       padding-left: 3em;
+.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       left: 2.75em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle {
-       padding-right: 3em;
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 3em;
 }
-.oo-ui-selectFileWidget .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 0;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 5em;
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 5em;
 }
-.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
        right: 2em;
 }
-.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-handle {
-       padding-right: 1em;
+.oo-ui-selectFileWidget-empty .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 1em;
+}
+.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
+.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
+       right: 2em;
+}
+.oo-ui-selectFileWidget-dropTarget {
+       line-height: 3.5em;
+       border: 1px dashed #cccccc;
+       padding: 0.5em 1em;
+       margin-bottom: 0.5em;
+       background: #ffffff;
+       text-align: center;
+       vertical-align: middle;
 }
-.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle,
-.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-handle {
-       padding-right: 2em;
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled .oo-ui-selectFileWidget-dropTarget:hover {
+       background-color: #eeeeee;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
+       background: rgba(52, 123, 255, 0.1);
+}
+.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-dropTarget {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
 }
 .oo-ui-outlineOptionWidget {
        position: relative;
 .oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
        float: left;
        background-position: right center;
-       background-repeat: no-repeat;
 }
 .oo-ui-outlineControlsWidget-items {
        float: left;
        background-color: #ffffff;
        color: #333333;
 }
+.oo-ui-capsuleMultiSelectWidget {
+       display: inline-block;
+       position: relative;
+       width: 100%;
+       max-width: 50em;
+}
+.oo-ui-capsuleMultiSelectWidget-handle {
+       width: 100%;
+       display: inline-block;
+       position: relative;
+}
+.oo-ui-capsuleMultiSelectWidget-group {
+       display: inline;
+}
+.oo-ui-capsuleMultiSelectWidget > .oo-ui-menuSelectWidget {
+       z-index: 1;
+       width: 100%;
+}
+.oo-ui-capsuleMultiSelectWidget-handle {
+       background: #ffffff;
+       cursor: text;
+       min-height: 2.4em;
+       margin-right: 0.5em;
+       padding: 0.25em 0;
+       border: 1px solid #cccccc;
+       border-radius: 0.1em;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+}
+.oo-ui-capsuleMultiSelectWidget-handle:last-child {
+       margin-right: 0;
+}
+.oo-ui-capsuleMultiSelectWidget-handle .oo-ui-capsuleMultiSelectWidget-group {
+       margin: 0 0.2em;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator,
+.oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon {
+       position: absolute;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > input {
+       border: none;
+       min-width: 1em;
+       max-width: 100%;
+       line-height: 1.675em;
+       margin: 0;
+       padding: 0;
+       font-size: inherit;
+       font-family: inherit;
+       background-color: transparent;
+       color: black;
+       vertical-align: middle;
+}
+.oo-ui-capsuleMultiSelectWidget-handle > input:focus {
+       outline: none;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle {
+       padding-right: 0.9375em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
+       right: 0;
+       top: 0;
+       width: 0.9375em;
+       height: 0.9375em;
+       margin: 0.775em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle {
+       padding-left: 1.875em;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-iconElement .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon {
+       left: 0;
+       top: 0;
+       width: 1.875em;
+       height: 1.875em;
+       margin: 0.3em;
+}
+.oo-ui-capsuleMultiSelectWidget:hover .oo-ui-capsuleMultiSelectWidget-handle {
+       border-color: #aaaaaa;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+       cursor: default;
+}
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-capsuleMultiSelectWidget.oo-ui-widget-disabled .oo-ui-capsuleMultiSelectWidget-handle > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
+.oo-ui-capsuleMultiSelectWidget .oo-ui-selectWidget {
+       border-top-color: #ffffff;
+}
+.oo-ui-capsuleItemWidget {
+       position: relative;
+       display: inline-block;
+       cursor: default;
+       white-space: nowrap;
+       width: auto;
+       max-width: 100%;
+       -webkit-box-sizing: border-box;
+          -moz-box-sizing: border-box;
+               box-sizing: border-box;
+       vertical-align: middle;
+       padding: 0 0.4em;
+       margin: 0 0.1em;
+       height: 1.7em;
+       line-height: 1.7em;
+       background-color: #eeeeee;
+       border: 1px solid #cccccc;
+       color: #555555;
+       border-radius: 0.1em;
+}
+.oo-ui-capsuleItemWidget > .oo-ui-iconElement-icon {
+       cursor: pointer;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-iconElement-icon {
+       cursor: default;
+}
+.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+       display: block;
+       text-overflow: ellipsis;
+       overflow: hidden;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-labelElement-label {
+       padding-right: 1.3375em;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicatorElement-indicator {
+       position: absolute;
+       right: 0.4em;
+       top: 0;
+       width: 0.9375em;
+       height: 100%;
+       background-repeat: no-repeat;
+}
+.oo-ui-capsuleItemWidget.oo-ui-indicatorElement > .oo-ui-indicator-clear {
+       cursor: pointer;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
+       color: #cccccc;
+       text-shadow: 0 1px 1px #ffffff;
+       border-color: #dddddd;
+       background-color: #f3f3f3;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-indicatorElement-indicator {
+       opacity: 0.2;
+}
 .oo-ui-comboBoxWidget {
        display: inline-block;
        position: relative;
        z-index: 1;
        width: 100%;
 }
+.oo-ui-comboBoxWidget > .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
+       cursor: pointer;
+}
 .oo-ui-comboBoxWidget:last-child {
        margin-right: 0;
 }
 .oo-ui-processDialog-content .oo-ui-window-head {
        height: 3.4em;
 }
-.oo-ui-processDialog-content .oo-ui-window-head.oo-ui-pendingElement-pending {
-       background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
 .oo-ui-processDialog-content .oo-ui-window-body {
        top: 3.4em;
        outline: 1px solid rgba(0, 0, 0, 0.2);
 .oo-ui-windowManager-modal > .oo-ui-dialog {
        background-color: rgba(255, 255, 255, 0.5);
        opacity: 0;
-       -webkit-transition: opacity 250ms ease-in-out;
-          -moz-transition: opacity 250ms ease-in-out;
-           -ms-transition: opacity 250ms ease-in-out;
-            -o-transition: opacity 250ms ease-in-out;
-               transition: opacity 250ms ease-in-out;
+       -webkit-transition: opacity 250ms ease;
+          -moz-transition: opacity 250ms ease;
+           -ms-transition: opacity 250ms ease;
+            -o-transition: opacity 250ms ease;
+               transition: opacity 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
        top: 1em;
            -ms-transform: scale(0.5);
             -o-transform: scale(0.5);
                transform: scale(0.5);
-       -webkit-transition: all 250ms ease-in-out;
-          -moz-transition: all 250ms ease-in-out;
-           -ms-transition: all 250ms ease-in-out;
-            -o-transition: all 250ms ease-in-out;
-               transition: all 250ms ease-in-out;
+       -webkit-transition: all 250ms ease;
+          -moz-transition: all 250ms ease;
+           -ms-transition: all 250ms ease;
+            -o-transition: all 250ms ease;
+               transition: all 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
        /* Fade window overlay */
index 48de83f..a291570 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.8
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
- * Copyright 2011–2015 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-08T01:31:38Z
+ * Date: 2015-09-08T20:55:55Z
  */
 /**
  * @class
index b67289b..81677ed 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.11.8
+ * OOjs UI v0.12.8
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
- * Copyright 2011–2015 OOjs Team and other contributors.
+ * Copyright 2011–2015 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-07-08T01:31:38Z
+ * Date: 2015-09-08T20:55:55Z
  */
 ( function ( OO ) {
 
@@ -64,10 +64,10 @@ OO.ui.generateElementId = function () {
  * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
  *
  * @param {jQuery} element Element to test
- * @return {Boolean} [description]
+ * @return {boolean}
  */
 OO.ui.isFocusableElement = function ( $element ) {
-       var node = $element[0],
+       var node = $element[ 0 ],
                nodeName = node.nodeName.toLowerCase(),
                // Check if the element have tabindex set
                isInElementGroup = /^(input|select|textarea|button|object)$/.test( nodeName ),
@@ -84,11 +84,12 @@ OO.ui.isFocusableElement = function ( $element ) {
                        !$element.parents().addBack().filter( function () {
                                return $.css( this, 'visibility' ) === 'hidden';
                        } ).length
-               );
+               ),
+               isTabOk = isNaN( $element.attr( 'tabindex' ) ) || +$element.attr( 'tabindex' ) >= 0;
 
        return (
                ( isInElementGroup ? !node.disabled : isOtherElement ) &&
-               isVisible
+               isVisible && isTabOk
        );
 };
 
@@ -197,6 +198,38 @@ OO.ui.debounce = function ( func, wait, immediate ) {
        };
 };
 
+/**
+ * Proxy for `node.addEventListener( eventName, handler, true )`, if the browser supports it.
+ * Otherwise falls back to non-capturing event listeners.
+ *
+ * @param {HTMLElement} node
+ * @param {string} eventName
+ * @param {Function} handler
+ */
+OO.ui.addCaptureEventListener = function ( node, eventName, handler ) {
+       if ( node.addEventListener ) {
+               node.addEventListener( eventName, handler, true );
+       } else {
+               node.attachEvent( 'on' + eventName, handler );
+       }
+};
+
+/**
+ * Proxy for `node.removeEventListener( eventName, handler, true )`, if the browser supports it.
+ * Otherwise falls back to non-capturing event listeners.
+ *
+ * @param {HTMLElement} node
+ * @param {string} eventName
+ * @param {Function} handler
+ */
+OO.ui.removeCaptureEventListener = function ( node, eventName, handler ) {
+       if ( node.addEventListener ) {
+               node.removeEventListener( eventName, handler, true );
+       } else {
+               node.detachEvent( 'on' + eventName, handler );
+       }
+};
+
 /**
  * Reconstitute a JavaScript object corresponding to a widget created by
  * the PHP implementation.
@@ -246,10 +279,14 @@ OO.ui.infuse = function ( idOrNode ) {
                'ooui-dialog-process-retry': 'Try again',
                // Label for process dialog retry action button, visible when describing only warnings
                'ooui-dialog-process-continue': 'Continue',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget's select file button
+               'ooui-selectfile-button-select': 'Select a file',
+               // Label for the file selection widget if file selection is not supported
                'ooui-selectfile-not-supported': 'File selection is not supported',
-               // Default placeholder for file selection widgets
+               // Label for the file selection widget when no file is currently selected
                'ooui-selectfile-placeholder': 'No file is selected',
+               // Label for the file selection widget's drop target
+               'ooui-selectfile-dragdrop-placeholder': 'Drop file here',
                // Semicolon separator
                'ooui-semicolon-separator': '; '
        };
@@ -318,6 +355,34 @@ OO.ui.infuse = function ( idOrNode ) {
                return msg;
        };
 
+       /**
+        * @param {string} url
+        * @return {boolean}
+        */
+       OO.ui.isSafeUrl = function ( url ) {
+               var protocol,
+                       // Keep in sync with php/Tag.php
+                       whitelist = [
+                               'bitcoin:', 'ftp:', 'ftps:', 'geo:', 'git:', 'gopher:', 'http:', 'https:', 'irc:', 'ircs:',
+                               'magnet:', 'mailto:', 'mms:', 'news:', 'nntp:', 'redis:', 'sftp:', 'sip:', 'sips:', 'sms:', 'ssh:',
+                               'svn:', 'tel:', 'telnet:', 'urn:', 'worldwind:', 'xmpp:'
+                       ];
+
+               if ( url.indexOf( ':' ) === -1 ) {
+                       // No protocol, safe
+                       return true;
+               }
+
+               protocol = url.split( ':', 1 )[ 0 ] + ':';
+               if ( !protocol.match( /^([A-za-z0-9\+\.\-])+:/ ) ) {
+                       // Not a valid protocol, safe
+                       return true;
+               }
+
+               // Safe if in the whitelist
+               return whitelist.indexOf( protocol ) !== -1;
+       };
+
 } )();
 
 /*!
@@ -1008,8 +1073,7 @@ OO.ui.Element = function OoUiElement( config ) {
        this.$element = config.$element ||
                $( document.createElement( this.getTagName() ) );
        this.elementGroup = null;
-       this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
-       this.updateThemeClassesPending = false;
+       this.debouncedUpdateThemeClassesHandler = OO.ui.debounce( this.debouncedUpdateThemeClasses );
 
        // Initialization
        if ( Array.isArray( config.classes ) ) {
@@ -1076,7 +1140,7 @@ OO.ui.Element.static.tagName = 'div';
  *   DOM node.
  */
 OO.ui.Element.static.infuse = function ( idOrNode ) {
-       var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, true );
+       var obj = OO.ui.Element.static.unsafeInfuse( idOrNode, false );
        // Verify that the type matches up.
        // FIXME: uncomment after T89721 is fixed (see T90929)
        /*
@@ -1092,12 +1156,14 @@ OO.ui.Element.static.infuse = function ( idOrNode ) {
  * extra property so that only the top-level invocation touches the DOM.
  * @private
  * @param {string|HTMLElement|jQuery} idOrNode
- * @param {boolean} top True only for top-level invocation.
+ * @param {jQuery.Promise|boolean} domPromise A promise that will be resolved
+ *     when the top-level widget of this infusion is inserted into DOM,
+ *     replacing the original node; or false for top-level invocation.
  * @return {OO.ui.Element}
  */
-OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
+OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
        // look for a cached result of a previous infusion.
-       var id, $elem, data, cls, obj;
+       var id, $elem, data, cls, parts, parent, obj, top, state;
        if ( typeof idOrNode === 'string' ) {
                id = idOrNode;
                $elem = $( document.getElementById( id ) );
@@ -1105,7 +1171,10 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
                $elem = $( idOrNode );
                id = $elem.attr( 'id' );
        }
-       data = $elem.data( 'ooui-infused' );
+       if ( !$elem.length ) {
+               throw new Error( 'Widget not found: ' + id );
+       }
+       data = $elem.data( 'ooui-infused' ) || $elem[ 0 ].oouiInfused;
        if ( data ) {
                // cached!
                if ( data === true ) {
@@ -1113,9 +1182,6 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
                }
                return data;
        }
-       if ( !$elem.length ) {
-               throw new Error( 'Widget not found: ' + id );
-       }
        data = $elem.attr( 'data-ooui' );
        if ( !data ) {
                throw new Error( 'No infusion data found: ' + id );
@@ -1132,16 +1198,43 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
                // Special case: this is a raw Tag; wrap existing node, don't rebuild.
                return new OO.ui.Element( { $element: $elem } );
        }
-       cls = OO.ui[data._];
-       if ( !cls ) {
-               throw new Error( 'Unknown widget type: ' + id );
+       parts = data._.split( '.' );
+       cls = OO.getProp.apply( OO, [ window ].concat( parts ) );
+       if ( cls === undefined ) {
+               // The PHP output might be old and not including the "OO.ui" prefix
+               // TODO: Remove this back-compat after next major release
+               cls = OO.getProp.apply( OO, [ OO.ui ].concat( parts ) );
+               if ( cls === undefined ) {
+                       throw new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );
+               }
+       }
+
+       // Verify that we're creating an OO.ui.Element instance
+       parent = cls.parent;
+
+       while ( parent !== undefined ) {
+               if ( parent === OO.ui.Element ) {
+                       // Safe
+                       break;
+               }
+
+               parent = parent.parent;
+       }
+
+       if ( parent !== OO.ui.Element ) {
+               throw new Error( 'Unknown widget type: id: ' + id + ', class: ' + data._ );
+       }
+
+       if ( domPromise === false ) {
+               top = $.Deferred();
+               domPromise = top.promise();
        }
        $elem.data( 'ooui-infused', true ); // prevent loops
        data.id = id; // implicit
        data = OO.copy( data, null, function deserialize( value ) {
                if ( OO.isPlainObject( value ) ) {
                        if ( value.tag ) {
-                               return OO.ui.Element.static.unsafeInfuse( value.tag, false );
+                               return OO.ui.Element.static.unsafeInfuse( value.tag, domPromise );
                        }
                        if ( value.html ) {
                                return new OO.ui.HtmlSnippet( value.html );
@@ -1150,13 +1243,22 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, top ) {
        } );
        // jscs:disable requireCapitalizedConstructors
        obj = new cls( data ); // rebuild widget
+       // pick up dynamic state, like focus, value of form inputs, scroll position, etc.
+       state = obj.gatherPreInfuseState( $elem );
        // now replace old DOM with this new DOM.
        if ( top ) {
                $elem.replaceWith( obj.$element );
+               // This element is now gone from the DOM, but if anyone is holding a reference to it,
+               // let's allow them to OO.ui.infuse() it and do what they expect (T105828).
+               // Do not use jQuery.data(), as using it on detached nodes leaks memory in 1.x line by design.
+               $elem[ 0 ].oouiInfused = obj;
+               top.resolve();
        }
        obj.$element.data( 'ooui-infused', obj );
        // set the 'data-ooui' attribute so we can identify infused widgets
        obj.$element.attr( 'data-ooui', '' );
+       // restore dynamic state after the new element is inserted into DOM
+       domPromise.done( obj.restorePreInfuseState.bind( obj, state ) );
        return obj;
 };
 
@@ -1213,6 +1315,8 @@ OO.ui.Element.static.getDocument = function ( obj ) {
  */
 OO.ui.Element.static.getWindow = function ( obj ) {
        var doc = this.getDocument( obj );
+       // Support: IE 8
+       // Standard Document.defaultView is IE9+
        return doc.parentWindow || doc.defaultView;
 };
 
@@ -1328,9 +1432,13 @@ OO.ui.Element.static.getRelativePosition = function ( $element, $anchor ) {
  */
 OO.ui.Element.static.getBorders = function ( el ) {
        var doc = el.ownerDocument,
+               // Support: IE 8
+               // Standard Document.defaultView is IE9+
                win = doc.parentWindow || doc.defaultView,
                style = win && win.getComputedStyle ?
                        win.getComputedStyle( el, null ) :
+                       // Support: IE 8
+                       // Standard getComputedStyle() is IE9+
                        el.currentStyle,
                $el = $( el ),
                top = parseFloat( style ? style.borderTopWidth : $el.css( 'borderTopWidth' ) ) || 0,
@@ -1356,6 +1464,8 @@ OO.ui.Element.static.getBorders = function ( el ) {
 OO.ui.Element.static.getDimensions = function ( el ) {
        var $el, $win,
                doc = el.ownerDocument || el.document,
+               // Support: IE 8
+               // Standard Document.defaultView is IE9+
                win = doc.parentWindow || doc.defaultView;
 
        if ( win === el || el === doc.documentElement ) {
@@ -1472,16 +1582,18 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension )
  * @param {Function} [config.complete] Function to call when scrolling completes
  */
 OO.ui.Element.static.scrollIntoView = function ( el, config ) {
+       var rel, anim, callback, sc, $sc, eld, scd, $win;
+
        // Configuration initialization
        config = config || {};
 
-       var rel, anim = {},
-               callback = typeof config.complete === 'function' && config.complete,
-               sc = this.getClosestScrollableContainer( el, config.direction ),
-               $sc = $( sc ),
-               eld = this.getDimensions( el ),
-               scd = this.getDimensions( sc ),
-               $win = $( this.getWindow( el ) );
+       anim = {};
+       callback = typeof config.complete === 'function' && config.complete;
+       sc = this.getClosestScrollableContainer( el, config.direction );
+       $sc = $( sc );
+       eld = this.getDimensions( el );
+       scd = this.getDimensions( sc );
+       $win = $( this.getWindow( el ) );
 
        // Compute the distances between the edges of el and the edges of the scroll viewport
        if ( $sc.is( 'html, body' ) ) {
@@ -1642,18 +1754,16 @@ OO.ui.Element.prototype.supports = function ( methods ) {
  *   guaranteeing that theme updates do not occur within an element's constructor
  */
 OO.ui.Element.prototype.updateThemeClasses = function () {
-       if ( !this.updateThemeClassesPending ) {
-               this.updateThemeClassesPending = true;
-               setTimeout( this.debouncedUpdateThemeClassesHandler );
-       }
+       this.debouncedUpdateThemeClassesHandler();
 };
 
 /**
  * @private
+ * @localdoc This method is called directly from the QUnit tests instead of #updateThemeClasses, to
+ *   make them synchronous.
  */
 OO.ui.Element.prototype.debouncedUpdateThemeClasses = function () {
        OO.ui.theme.updateElementClasses( this );
-       this.updateThemeClassesPending = false;
 };
 
 /**
@@ -1730,12 +1840,41 @@ OO.ui.Element.prototype.scrollElementIntoView = function ( config ) {
        return OO.ui.Element.static.scrollIntoView( this.$element[ 0 ], config );
 };
 
+/**
+ * Gather the dynamic state (focus, value of form inputs, scroll position, etc.) of a HTML DOM node
+ * (and its children) that represent an Element of the same type and configuration as the current
+ * one, generated by the PHP implementation.
+ *
+ * This method is called just before `node` is detached from the DOM. The return value of this
+ * function will be passed to #restorePreInfuseState after this widget's #$element is inserted into
+ * DOM to replace `node`.
+ *
+ * @protected
+ * @param {HTMLElement} node
+ * @return {Object}
+ */
+OO.ui.Element.prototype.gatherPreInfuseState = function () {
+       return {};
+};
+
+/**
+ * Restore the pre-infusion dynamic state for this widget.
+ *
+ * This method is called after #$element has been inserted into DOM. The parameter is the return
+ * value of #gatherPreInfuseState.
+ *
+ * @protected
+ * @param {Object} state
+ */
+OO.ui.Element.prototype.restorePreInfuseState = function () {
+};
+
 /**
  * Layouts are containers for elements and are used to arrange other widgets of arbitrary type in a way
  * that is centrally controlled and can be updated dynamically. Layouts can be, and usually are, combined.
  * See {@link OO.ui.FieldsetLayout FieldsetLayout}, {@link OO.ui.FieldLayout FieldLayout}, {@link OO.ui.FormLayout FormLayout},
  * {@link OO.ui.PanelLayout PanelLayout}, {@link OO.ui.StackLayout StackLayout}, {@link OO.ui.PageLayout PageLayout},
- * and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.
+ * {@link OO.ui.HorizontalLayout HorizontalLayout}, and {@link OO.ui.BookletLayout BookletLayout} for more information and examples.
  *
  * @abstract
  * @class
@@ -2067,7 +2206,27 @@ OO.ui.Window.prototype.getManager = function () {
  * @return {string} Symbolic name of the size: `small`, `medium`, `large`, `larger`, `full`
  */
 OO.ui.Window.prototype.getSize = function () {
-       return this.size;
+       var viewport = OO.ui.Element.static.getDimensions( this.getElementWindow() ),
+               sizes = this.manager.constructor.static.sizes,
+               size = this.size;
+
+       if ( !sizes[ size ] ) {
+               size = this.manager.constructor.static.defaultSize;
+       }
+       if ( size !== 'full' && viewport.rect.right - viewport.rect.left < sizes[ size ].width ) {
+               size = 'full';
+       }
+
+       return size;
+};
+
+/**
+ * Get the size properties associated with the current window size
+ *
+ * @return {Object} Size properties
+ */
+OO.ui.Window.prototype.getSizeProperties = function () {
+       return this.manager.constructor.static.sizes[ this.getSize() ];
 };
 
 /**
@@ -2153,7 +2312,7 @@ OO.ui.Window.prototype.getBodyHeight = function () {
  * @return {string} Directionality: `'ltr'` or `'rtl'`
  */
 OO.ui.Window.prototype.getDir = function () {
-       return this.dir;
+       return OO.ui.Element.static.getDir( this.$content ) || 'ltr';
 };
 
 /**
@@ -2348,7 +2507,6 @@ OO.ui.Window.prototype.initialize = function () {
        this.$head = $( '<div>' );
        this.$body = $( '<div>' );
        this.$foot = $( '<div>' );
-       this.dir = OO.ui.Element.static.getDir( this.$content ) || 'ltr';
        this.$document = $( this.getElementDocument() );
 
        // Events
@@ -2562,7 +2720,7 @@ OO.ui.Dialog = function OoUiDialog( config ) {
        this.actions = new OO.ui.ActionSet();
        this.attachedActions = [];
        this.currentAction = null;
-       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
+       this.onDialogKeyDownHandler = this.onDialogKeyDown.bind( this );
 
        // Events
        this.actions.connect( this, {
@@ -2645,7 +2803,7 @@ OO.ui.Dialog.static.escapable = true;
  * @private
  * @param {jQuery.Event} e Key down event
  */
-OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
+OO.ui.Dialog.prototype.onDialogKeyDown = function ( e ) {
        if ( e.which === OO.ui.Keys.ESCAPE ) {
                this.close();
                e.preventDefault();
@@ -2742,7 +2900,7 @@ OO.ui.Dialog.prototype.getSetupProcess = function ( data ) {
                        this.actions.add( this.getActionWidgets( actions ) );
 
                        if ( this.constructor.static.escapable ) {
-                               this.$document.on( 'keydown', this.onDocumentKeyDownHandler );
+                               this.$element.on( 'keydown', this.onDialogKeyDownHandler );
                        }
                }, this );
 };
@@ -2755,7 +2913,7 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
        return OO.ui.Dialog.parent.prototype.getTeardownProcess.call( this, data )
                .first( function () {
                        if ( this.constructor.static.escapable ) {
-                               this.$document.off( 'keydown', this.onDocumentKeyDownHandler );
+                               this.$element.off( 'keydown', this.onDialogKeyDownHandler );
                        }
 
                        this.actions.clear();
@@ -2767,10 +2925,12 @@ OO.ui.Dialog.prototype.getTeardownProcess = function ( data ) {
  * @inheritdoc
  */
 OO.ui.Dialog.prototype.initialize = function () {
+       var titleId;
+
        // Parent method
        OO.ui.Dialog.parent.prototype.initialize.call( this );
 
-       var titleId = OO.ui.generateElementId();
+       titleId = OO.ui.generateElementId();
 
        // Properties
        this.title = new OO.ui.LabelWidget( {
@@ -3396,25 +3556,18 @@ OO.ui.WindowManager.prototype.clearWindows = function () {
  * @chainable
  */
 OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
+       var isFullscreen;
+
        // Bypass for non-current, and thus invisible, windows
        if ( win !== this.currentWindow ) {
                return;
        }
 
-       var viewport = OO.ui.Element.static.getDimensions( win.getElementWindow() ),
-               sizes = this.constructor.static.sizes,
-               size = win.getSize();
-
-       if ( !sizes[ size ] ) {
-               size = this.constructor.static.defaultSize;
-       }
-       if ( size !== 'full' && viewport.rect.right - viewport.rect.left < sizes[ size ].width ) {
-               size = 'full';
-       }
+       isFullscreen = win.getSize() === 'full';
 
-       this.$element.toggleClass( 'oo-ui-windowManager-fullscreen', size === 'full' );
-       this.$element.toggleClass( 'oo-ui-windowManager-floating', size !== 'full' );
-       win.setDimensions( sizes[ size ] );
+       this.$element.toggleClass( 'oo-ui-windowManager-fullscreen', isFullscreen );
+       this.$element.toggleClass( 'oo-ui-windowManager-floating', !isFullscreen );
+       win.setDimensions( win.getSizeProperties() );
 
        this.emit( 'resize', win );
 
@@ -3429,14 +3582,14 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
  * @chainable
  */
 OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
-       on = on === undefined ? !!this.globalEvents : !!on;
-
        var scrollWidth, bodyMargin,
                $body = $( this.getElementDocument().body ),
                // We could have multiple window managers open so only modify
                // the body css at the bottom of the stack
                stackDepth = $body.data( 'windowManagerGlobalEvents' ) || 0 ;
 
+       on = on === undefined ? !!this.globalEvents : !!on;
+
        if ( on ) {
                if ( !this.globalEvents ) {
                        $( this.getElementWindow() ).on( {
@@ -3949,11 +4102,11 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
  * @constructor
  */
 OO.ui.ToolGroupFactory = function OoUiToolGroupFactory() {
+       var i, l, defaultClasses;
        // Parent constructor
        OO.Factory.call( this );
 
-       var i, l,
-               defaultClasses = this.constructor.static.getDefaultClasses();
+       defaultClasses = this.constructor.static.getDefaultClasses();
 
        // Register default toolgroups
        for ( i = 0, l = defaultClasses.length; i < l; i++ ) {
@@ -4022,9 +4175,17 @@ OO.ui.Theme.prototype.getElementClasses = function ( /* element */ ) {
  * @return {Object.<string,string[]>} Categorized class names with `on` and `off` lists
  */
 OO.ui.Theme.prototype.updateElementClasses = function ( element ) {
-       var classes = this.getElementClasses( element );
+       var $elements = $( [] ),
+               classes = this.getElementClasses( element );
+
+       if ( element.$icon ) {
+               $elements = $elements.add( element.$icon );
+       }
+       if ( element.$indicator ) {
+               $elements = $elements.add( element.$indicator );
+       }
 
-       element.$element
+       $elements
                .removeClass( classes.off.join( ' ' ) )
                .addClass( classes.on.join( ' ' ) );
 };
@@ -4139,7 +4300,8 @@ OO.ui.mixin.TabIndexedElement.prototype.updateTabIndex = function () {
                        // Do not index over disabled elements
                        this.$tabIndexed.attr( {
                                tabindex: this.isDisabled() ? -1 : this.tabIndex,
-                               // ChromeVox and NVDA do not seem to inherit this from parent elements
+                               // Support: ChromeVox and NVDA
+                               // These do not seem to inherit aria-disabled from parent elements
                                'aria-disabled': this.isDisabled().toString()
                        } );
                } else {
@@ -4182,7 +4344,6 @@ OO.ui.mixin.TabIndexedElement.prototype.getTabIndex = function () {
  * @cfg {jQuery} [$button] The button element created by the class.
  *  If this configuration is omitted, the button element will use a generated `<a>`.
  * @cfg {boolean} [framed=true] Render the button with a frame
- * @cfg {string} [accessKey] Button's access key
  */
 OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Configuration initialization
@@ -4191,7 +4352,6 @@ OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Properties
        this.$button = null;
        this.framed = null;
-       this.accessKey = null;
        this.active = false;
        this.onMouseUpHandler = this.onMouseUp.bind( this );
        this.onMouseDownHandler = this.onMouseDown.bind( this );
@@ -4203,7 +4363,6 @@ OO.ui.mixin.ButtonElement = function OoUiMixinButtonElement( config ) {
        // Initialization
        this.$element.addClass( 'oo-ui-buttonElement' );
        this.toggleFramed( config.framed === undefined || config.framed );
-       this.setAccessKey( config.accessKey );
        this.setButtonElement( config.$button || $( '<a>' ) );
 };
 
@@ -4261,7 +4420,7 @@ OO.ui.mixin.ButtonElement.prototype.setButtonElement = function ( $button ) {
 
        this.$button = $button
                .addClass( 'oo-ui-buttonElement-button' )
-               .attr( { role: 'button', accesskey: this.accessKey } )
+               .attr( { role: 'button' } )
                .on( {
                        mousedown: this.onMouseDownHandler,
                        keydown: this.onKeyDownHandler,
@@ -4283,7 +4442,7 @@ OO.ui.mixin.ButtonElement.prototype.onMouseDown = function ( e ) {
        this.$element.addClass( 'oo-ui-buttonElement-pressed' );
        // Run the mouseup handler no matter where the mouse is when the button is let go, so we can
        // reliably remove the pressed class
-       this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementDocument(), 'mouseup', this.onMouseUpHandler );
        // Prevent change of focus unless specifically configured otherwise
        if ( this.constructor.static.cancelButtonMouseDownEvents ) {
                return false;
@@ -4302,7 +4461,7 @@ OO.ui.mixin.ButtonElement.prototype.onMouseUp = function ( e ) {
        }
        this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
        // Stop listening for mouseup, since we only needed this once
-       this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mouseup', this.onMouseUpHandler );
 };
 
 /**
@@ -4333,7 +4492,7 @@ OO.ui.mixin.ButtonElement.prototype.onKeyDown = function ( e ) {
        this.$element.addClass( 'oo-ui-buttonElement-pressed' );
        // Run the keyup handler no matter where the key is when the button is let go, so we can
        // reliably remove the pressed class
-       this.getElementDocument().addEventListener( 'keyup', this.onKeyUpHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementDocument(), 'keyup', this.onKeyUpHandler );
 };
 
 /**
@@ -4348,7 +4507,7 @@ OO.ui.mixin.ButtonElement.prototype.onKeyUp = function ( e ) {
        }
        this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
        // Stop listening for keyup, since we only needed this once
-       this.getElementDocument().removeEventListener( 'keyup', this.onKeyUpHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'keyup', this.onKeyUpHandler );
 };
 
 /**
@@ -4394,29 +4553,6 @@ OO.ui.mixin.ButtonElement.prototype.toggleFramed = function ( framed ) {
        return this;
 };
 
-/**
- * Set the button's access key.
- *
- * @param {string} accessKey Button's access key, use empty string to remove
- * @chainable
- */
-OO.ui.mixin.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
-       accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
-
-       if ( this.accessKey !== accessKey ) {
-               if ( this.$button ) {
-                       if ( accessKey !== null ) {
-                               this.$button.attr( 'accesskey', accessKey );
-                       } else {
-                               this.$button.removeAttr( 'accesskey' );
-                       }
-               }
-               this.accessKey = accessKey;
-       }
-
-       return this;
-};
-
 /**
  * Set the button to its 'active' state.
  *
@@ -4578,7 +4714,7 @@ OO.ui.mixin.GroupElement.prototype.aggregate = function ( events ) {
                                item = this.items[ i ];
                                if ( item.connect && item.disconnect ) {
                                        remove = {};
-                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
                                        item.disconnect( this, remove );
                                }
                        }
@@ -4621,7 +4757,7 @@ OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {
                item = items[ i ];
 
                // Check if item exists then remove it first, effectively "moving" it
-               currentIndex = $.inArray( item, this.items );
+               currentIndex = this.items.indexOf( item );
                if ( currentIndex >= 0 ) {
                        this.removeItems( [ item ] );
                        // Adjust index to compensate for removal
@@ -4670,7 +4806,7 @@ OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {
        // Remove specific items
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[ i ];
-               index = $.inArray( item, this.items );
+               index = this.items.indexOf( item );
                if ( index !== -1 ) {
                        if (
                                item.connect && item.disconnect &&
@@ -4794,13 +4930,13 @@ OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
        // Define drop effect
        dataTransfer.dropEffect = 'none';
        dataTransfer.effectAllowed = 'move';
+       // Support: Firefox
        // We must set up a dataTransfer data property or Firefox seems to
        // ignore the fact the element is draggable.
        try {
                dataTransfer.setData( 'application-x/OOjs-UI-draggable', this.getIndex() );
        } catch ( err ) {
-               // The above is only for firefox. No need to set a catch clause
-               // if it fails, move on.
+               // The above is only for Firefox. Move on if it fails.
        }
        // Add dragging class
        this.$element.addClass( 'oo-ui-draggableElement-dragging' );
@@ -4908,8 +5044,8 @@ OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( con
                itemDragEnd: 'onItemDragEnd'
        } );
        this.$element.on( {
-               dragover: $.proxy( this.onDragOver, this ),
-               dragleave: $.proxy( this.onDragLeave, this )
+               dragover: this.onDragOver.bind( this ),
+               dragleave: this.onDragLeave.bind( this )
        } );
 
        // Initialize
@@ -5239,6 +5375,8 @@ OO.ui.mixin.IconElement.prototype.setIconElement = function ( $icon ) {
        if ( this.iconTitle !== null ) {
                this.$icon.attr( 'title', this.iconTitle );
        }
+
+       this.updateThemeClasses();
 };
 
 /**
@@ -5408,6 +5546,8 @@ OO.ui.mixin.IndicatorElement.prototype.setIndicatorElement = function ( $indicat
        if ( this.indicatorTitle !== null ) {
                this.$indicator.attr( 'title', this.indicatorTitle );
        }
+
+       this.updateThemeClasses();
 };
 
 /**
@@ -5639,7 +5779,7 @@ OO.ui.mixin.LabelElement.prototype.setLabelContent = function ( label ) {
 };
 
 /**
- * LookupElement is a mixin that creates a {@link OO.ui.TextInputMenuSelectWidget menu} of suggested values for
+ * LookupElement is a mixin that creates a {@link OO.ui.FloatingMenuSelectWidget menu} of suggested values for
  * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types
  * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen
  * from the lookup menu, that value becomes the value of the input field.
@@ -5668,10 +5808,10 @@ OO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {
 
        // Properties
        this.$overlay = config.$overlay || this.$element;
-       this.lookupMenu = new OO.ui.TextInputMenuSelectWidget( this, {
+       this.lookupMenu = new OO.ui.FloatingMenuSelectWidget( {
                widget: this,
                input: this,
-               $container: config.$container
+               $container: config.$container || this.$element
        } );
 
        this.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;
@@ -5782,7 +5922,7 @@ OO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {
  * Get lookup menu.
  *
  * @private
- * @return {OO.ui.TextInputMenuSelectWidget}
+ * @return {OO.ui.FloatingMenuSelectWidget}
  */
 OO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {
        return this.lookupMenu;
@@ -5838,7 +5978,7 @@ OO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {
        var widget = this,
                value = this.getValue();
 
-       if ( this.lookupsDisabled ) {
+       if ( this.lookupsDisabled || this.isReadOnly() ) {
                return;
        }
 
@@ -5991,6 +6131,27 @@ OO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = function () {
        return [];
 };
 
+/**
+ * Set the read-only state of the widget.
+ *
+ * This will also disable/enable the lookups functionality.
+ *
+ * @param {boolean} readOnly Make input read-only
+ * @chainable
+ */
+OO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {
+       // Parent method
+       // Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget
+       OO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );
+
+       // During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor
+       if ( this.isReadOnly() && this.lookupMenu ) {
+               this.closeLookupMenu();
+       }
+
+       return this;
+};
+
 /**
  * PopupElement is mixed into other classes to generate a {@link OO.ui.PopupWidget popup widget}.
  * A popup is a container for content. It is overlaid and positioned absolutely. By default, each
@@ -6130,7 +6291,8 @@ OO.ui.mixin.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
  * @return {boolean} The flag is set
  */
 OO.ui.mixin.FlaggedElement.prototype.hasFlag = function ( flag ) {
-       return flag in this.flags;
+       // This may be called before the constructor, thus before this.flags is set
+       return this.flags && ( flag in this.flags );
 };
 
 /**
@@ -6139,7 +6301,8 @@ OO.ui.mixin.FlaggedElement.prototype.hasFlag = function ( flag ) {
  * @return {string[]} Flag names
  */
 OO.ui.mixin.FlaggedElement.prototype.getFlags = function () {
-       return Object.keys( this.flags );
+       // This may be called before the constructor, thus before this.flags is set
+       return Object.keys( this.flags || {} );
 };
 
 /**
@@ -6352,12 +6515,21 @@ OO.ui.mixin.TitledElement.prototype.getTitle = function () {
  * {@link OO.ui.mixin.ClippableElement#clip} to make sure it's still
  * clipping correctly.
  *
+ * The dimensions of #$clippableContainer will be compared to the boundaries of the
+ * nearest scrollable container. If #$clippableContainer is too tall and/or too wide,
+ * then #$clippable will be given a fixed reduced height and/or width and will be made
+ * scrollable. By default, #$clippable and #$clippableContainer are the same element,
+ * but you can build a static footer by setting #$clippableContainer to an element that contains
+ * #$clippable and the footer.
+ *
  * @abstract
  * @class
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
+ * @cfg {jQuery} [$clippable] Node to clip, assigned to #$clippable, omit to use #$element
+ * @cfg {jQuery} [$clippableContainer] Node to keep visible, assigned to #$clippableContainer,
+ *   omit to use #$clippable
  */
 OO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {
        // Configuration initialization
@@ -6365,18 +6537,22 @@ OO.ui.mixin.ClippableElement = function OoUiMixinClippableElement( config ) {
 
        // Properties
        this.$clippable = null;
+       this.$clippableContainer = null;
        this.clipping = false;
        this.clippedHorizontally = false;
        this.clippedVertically = false;
-       this.$clippableContainer = null;
+       this.$clippableScrollableContainer = null;
        this.$clippableScroller = null;
        this.$clippableWindow = null;
        this.idealWidth = null;
        this.idealHeight = null;
-       this.onClippableContainerScrollHandler = this.clip.bind( this );
+       this.onClippableScrollHandler = this.clip.bind( this );
        this.onClippableWindowResizeHandler = this.clip.bind( this );
 
        // Initialization
+       if ( config.$clippableContainer ) {
+               this.setClippableContainer( config.$clippableContainer );
+       }
        this.setClippableElement( config.$clippable || this.$element );
 };
 
@@ -6400,6 +6576,23 @@ OO.ui.mixin.ClippableElement.prototype.setClippableElement = function ( $clippab
        this.clip();
 };
 
+/**
+ * Set clippable container.
+ *
+ * This is the container that will be measured when deciding whether to clip. When clipping,
+ * #$clippable will be resized in order to keep the clippable container fully visible.
+ *
+ * If the clippable container is unset, #$clippable will be used.
+ *
+ * @param {jQuery|null} $clippableContainer Container to keep visible, or null to unset
+ */
+OO.ui.mixin.ClippableElement.prototype.setClippableContainer = function ( $clippableContainer ) {
+       this.$clippableContainer = $clippableContainer;
+       if ( this.$clippable ) {
+               this.clip();
+       }
+};
+
 /**
  * Toggle clipping.
  *
@@ -6414,13 +6607,13 @@ OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
        if ( this.clipping !== clipping ) {
                this.clipping = clipping;
                if ( clipping ) {
-                       this.$clippableContainer = $( this.getClosestScrollableElementContainer() );
+                       this.$clippableScrollableContainer = $( this.getClosestScrollableElementContainer() );
                        // If the clippable container is the root, we have to listen to scroll events and check
                        // jQuery.scrollTop on the window because of browser inconsistencies
-                       this.$clippableScroller = this.$clippableContainer.is( 'html, body' ) ?
-                               $( OO.ui.Element.static.getWindow( this.$clippableContainer ) ) :
-                               this.$clippableContainer;
-                       this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScroller = this.$clippableScrollableContainer.is( 'html, body' ) ?
+                               $( OO.ui.Element.static.getWindow( this.$clippableScrollableContainer ) ) :
+                               this.$clippableScrollableContainer;
+                       this.$clippableScroller.on( 'scroll', this.onClippableScrollHandler );
                        this.$clippableWindow = $( this.getElementWindow() )
                                .on( 'resize', this.onClippableWindowResizeHandler );
                        // Initial clip after visible
@@ -6429,8 +6622,8 @@ OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
                        this.$clippable.css( { width: '', height: '', overflowX: '', overflowY: '' } );
                        OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
 
-                       this.$clippableContainer = null;
-                       this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+                       this.$clippableScrollableContainer = null;
+                       this.$clippableScroller.off( 'scroll', this.onClippableScrollHandler );
                        this.$clippableScroller = null;
                        this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
                        this.$clippableWindow = null;
@@ -6503,43 +6696,55 @@ OO.ui.mixin.ClippableElement.prototype.setIdealSize = function ( width, height )
  * @chainable
  */
 OO.ui.mixin.ClippableElement.prototype.clip = function () {
+       var $container, extraHeight, extraWidth, ccOffset,
+               $scrollableContainer, scOffset, scHeight, scWidth,
+               ccWidth, scrollerIsWindow, scrollTop, scrollLeft,
+               desiredWidth, desiredHeight, allotedWidth, allotedHeight,
+               naturalWidth, naturalHeight, clipWidth, clipHeight,
+               buffer = 7; // Chosen by fair dice roll
+
        if ( !this.clipping ) {
-               // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+               // this.$clippableScrollableContainer and this.$clippableWindow are null, so the below will fail
                return this;
        }
 
-       var buffer = 7, // Chosen by fair dice roll
-               cOffset = this.$clippable.offset(),
-               $container = this.$clippableContainer.is( 'html, body' ) ?
-                       this.$clippableWindow : this.$clippableContainer,
-               ccOffset = $container.offset() || { top: 0, left: 0 },
-               ccHeight = $container.innerHeight() - buffer,
-               ccWidth = $container.innerWidth() - buffer,
-               cWidth = this.$clippable.outerWidth() + buffer,
-               scrollTop = this.$clippableScroller[0] === this.$clippableWindow[0] ? this.$clippableScroller.scrollTop() : 0,
-               scrollLeft = this.$clippableScroller.scrollLeft(),
-               desiredWidth = cOffset.left < 0 ?
-                       cWidth + cOffset.left :
-                       ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
-               desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
-               naturalWidth = this.$clippable.prop( 'scrollWidth' ),
-               naturalHeight = this.$clippable.prop( 'scrollHeight' ),
-               clipWidth = desiredWidth < naturalWidth,
-               clipHeight = desiredHeight < naturalHeight;
+       $container = this.$clippableContainer || this.$clippable;
+       extraHeight = $container.outerHeight() - this.$clippable.outerHeight();
+       extraWidth = $container.outerWidth() - this.$clippable.outerWidth();
+       ccOffset = $container.offset();
+       $scrollableContainer = this.$clippableScrollableContainer.is( 'html, body' ) ?
+               this.$clippableWindow : this.$clippableScrollableContainer;
+       scOffset = $scrollableContainer.offset() || { top: 0, left: 0 };
+       scHeight = $scrollableContainer.innerHeight() - buffer;
+       scWidth = $scrollableContainer.innerWidth() - buffer;
+       ccWidth = $container.outerWidth() + buffer;
+       scrollerIsWindow = this.$clippableScroller[ 0 ] === this.$clippableWindow[ 0 ];
+       scrollTop = scrollerIsWindow ? this.$clippableScroller.scrollTop() : 0;
+       scrollLeft = scrollerIsWindow ? this.$clippableScroller.scrollLeft() : 0;
+       desiredWidth = ccOffset.left < 0 ?
+               ccWidth + ccOffset.left :
+               ( scOffset.left + scrollLeft + scWidth ) - ccOffset.left;
+       desiredHeight = ( scOffset.top + scrollTop + scHeight ) - ccOffset.top;
+       allotedWidth = desiredWidth - extraWidth;
+       allotedHeight = desiredHeight - extraHeight;
+       naturalWidth = this.$clippable.prop( 'scrollWidth' );
+       naturalHeight = this.$clippable.prop( 'scrollHeight' );
+       clipWidth = allotedWidth < naturalWidth;
+       clipHeight = allotedHeight < naturalHeight;
 
        if ( clipWidth ) {
-               this.$clippable.css( { overflowX: 'scroll', width: desiredWidth } );
+               this.$clippable.css( { overflowX: 'scroll', width: Math.max( 0, allotedWidth ) } );
        } else {
-               this.$clippable.css( { width: this.idealWidth || '', overflowX: '' } );
+               this.$clippable.css( { width: this.idealWidth ? this.idealWidth - extraWidth : '', overflowX: '' } );
        }
        if ( clipHeight ) {
-               this.$clippable.css( { overflowY: 'scroll', height: desiredHeight } );
+               this.$clippable.css( { overflowY: 'scroll', height: Math.max( 0, allotedHeight ) } );
        } else {
-               this.$clippable.css( { height: this.idealHeight || '', overflowY: '' } );
+               this.$clippable.css( { height: this.idealHeight ? this.idealHeight - extraHeight : '', overflowY: '' } );
        }
 
        // If we stopped clipping in at least one of the dimensions
-       if ( !clipWidth || !clipHeight ) {
+       if ( ( this.clippedHorizontally && !clipWidth ) || ( this.clippedVertically && !clipHeight ) ) {
                OO.ui.Element.static.reconsiderScrollbars( this.$clippable[ 0 ] );
        }
 
@@ -6549,6 +6754,113 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
        return this;
 };
 
+/**
+ * AccessKeyedElement is mixed into other classes to provide an `accesskey` attribute.
+ * Accesskeys allow an user to go to a specific element by using
+ * a shortcut combination of a browser specific keys + the key
+ * set to the field.
+ *
+ *     @example
+ *     // AccessKeyedElement provides an 'accesskey' attribute to the
+ *     // ButtonWidget class
+ *     var button = new OO.ui.ButtonWidget( {
+ *         label: 'Button with Accesskey',
+ *         accessKey: 'k'
+ *     } );
+ *     $( 'body' ).append( button.$element );
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$accessKeyed] The element to which the `accesskey` attribute is applied.
+ *  If this config is omitted, the accesskey functionality is applied to $element, the
+ *  element created by the class.
+ * @cfg {string|Function} [accessKey] The key or a function that returns the key. If
+ *  this config is omitted, no accesskey will be added.
+ */
+OO.ui.mixin.AccessKeyedElement = function OoUiMixinAccessKeyedElement( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Properties
+       this.$accessKeyed = null;
+       this.accessKey = null;
+
+       // Initialization
+       this.setAccessKey( config.accessKey || null );
+       this.setAccessKeyedElement( config.$accessKeyed || this.$element );
+};
+
+/* Setup */
+
+OO.initClass( OO.ui.mixin.AccessKeyedElement );
+
+/* Static Properties */
+
+/**
+ * The access key, a function that returns a key, or `null` for no accesskey.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null}
+ */
+OO.ui.mixin.AccessKeyedElement.static.accessKey = null;
+
+/* Methods */
+
+/**
+ * Set the accesskeyed element.
+ *
+ * This method is used to retarget a AccessKeyedElement mixin so that its functionality applies to the specified element.
+ * If an element is already set, the mixin's effect on that element is removed before the new element is set up.
+ *
+ * @param {jQuery} $accessKeyed Element that should use the 'accesskeyes' functionality
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.setAccessKeyedElement = function ( $accessKeyed ) {
+       if ( this.$accessKeyed ) {
+               this.$accessKeyed.removeAttr( 'accesskey' );
+       }
+
+       this.$accessKeyed = $accessKeyed;
+       if ( this.accessKey ) {
+               this.$accessKeyed.attr( 'accesskey', this.accessKey );
+       }
+};
+
+/**
+ * Set accesskey.
+ *
+ * @param {string|Function|null} accesskey Key, a function that returns a key, or `null` for no accesskey
+ * @chainable
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.setAccessKey = function ( accessKey ) {
+       accessKey = typeof accessKey === 'string' ? OO.ui.resolveMsg( accessKey ) : null;
+
+       if ( this.accessKey !== accessKey ) {
+               if ( this.$accessKeyed ) {
+                       if ( accessKey !== null ) {
+                               this.$accessKeyed.attr( 'accesskey', accessKey );
+                       } else {
+                               this.$accessKeyed.removeAttr( 'accesskey' );
+                       }
+               }
+               this.accessKey = accessKey;
+       }
+
+       return this;
+};
+
+/**
+ * Get accesskey.
+ *
+ * @return {string} accessKey string
+ */
+OO.ui.mixin.AccessKeyedElement.prototype.getAccessKey = function () {
+       return this.accessKey;
+};
+
 /**
  * Tools, together with {@link OO.ui.ToolGroup toolgroups}, constitute {@link OO.ui.Toolbar toolbars}.
  * Each tool is configured with a static name, title, and icon and is customized with the command to carry
@@ -7247,10 +7559,12 @@ OO.ui.Toolbar.prototype.onWindowResize = function () {
  * This must be called after it is attached to a visible document and before doing anything else.
  */
 OO.ui.Toolbar.prototype.initialize = function () {
-       this.initialized = true;
-       this.narrowThreshold = this.$group.width() + this.$actions.width();
-       $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
-       this.onWindowResize();
+       if ( !this.initialized ) {
+               this.initialized = true;
+               this.narrowThreshold = this.$group.width() + this.$actions.width();
+               $( this.getElementWindow() ).on( 'resize', this.onWindowResizeHandler );
+               this.onWindowResize();
+       }
 };
 
 /**
@@ -7543,8 +7857,8 @@ OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
                this.pressed = this.getTargetTool( e );
                if ( this.pressed ) {
                        this.pressed.setActive( true );
-                       this.getElementDocument().addEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
-                       this.getElementDocument().addEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+                       OO.ui.addCaptureEventListener( this.getElementDocument(), 'mouseup', this.onCapturedMouseKeyUpHandler );
+                       OO.ui.addCaptureEventListener( this.getElementDocument(), 'keyup', this.onCapturedMouseKeyUpHandler );
                }
                return false;
        }
@@ -7557,8 +7871,8 @@ OO.ui.ToolGroup.prototype.onMouseKeyDown = function ( e ) {
  * @param {Event} e Mouse up or key up event
  */
 OO.ui.ToolGroup.prototype.onCapturedMouseKeyUp = function ( e ) {
-       this.getElementDocument().removeEventListener( 'mouseup', this.onCapturedMouseKeyUpHandler, true );
-       this.getElementDocument().removeEventListener( 'keyup', this.onCapturedMouseKeyUpHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mouseup', this.onCapturedMouseKeyUpHandler );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'keyup', this.onCapturedMouseKeyUpHandler );
        // onMouseKeyUp may be called a second time, depending on where the mouse is when the button is
        // released, but since `this.pressed` will no longer be true, the second call will be ignored.
        this.onMouseKeyUp( e );
@@ -7786,7 +8100,7 @@ OO.ui.MessageDialog = function OoUiMessageDialog( config ) {
        this.$element.addClass( 'oo-ui-messageDialog' );
 };
 
-/* Inheritance */
+/* Setup */
 
 OO.inheritClass( OO.ui.MessageDialog, OO.ui.Dialog );
 
@@ -7927,6 +8241,26 @@ OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
                }, this );
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.getReadyProcess = function ( data ) {
+       data = data || {};
+
+       // Parent method
+       return OO.ui.MessageDialog.parent.prototype.getReadyProcess.call( this, data )
+               .next( function () {
+                       // Focus the primary action button
+                       var actions = this.actions.get();
+                       actions = actions.filter( function ( action ) {
+                               return action.getFlags().indexOf( 'primary' ) > -1;
+                       } );
+                       if ( actions.length > 0 ) {
+                               actions[ 0 ].$button.focus();
+                       }
+               }, this );
+};
+
 /**
  * @inheritdoc
  */
@@ -8006,6 +8340,7 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
 
        special = this.actions.getSpecial();
        others = this.actions.getOthers();
+
        if ( special.safe ) {
                this.$actions.append( special.safe.$element );
                special.safe.toggleFramed( false );
@@ -8124,6 +8459,9 @@ OO.ui.ProcessDialog = function OoUiProcessDialog( config ) {
        // Parent constructor
        OO.ui.ProcessDialog.parent.call( this, config );
 
+       // Properties
+       this.fitOnOpen = false;
+
        // Initialization
        this.$element.addClass( 'oo-ui-processDialog' );
 };
@@ -8265,6 +8603,16 @@ OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
                } );
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.ProcessDialog.prototype.setDimensions = function () {
+       // Parent method
+       OO.ui.ProcessDialog.parent.prototype.setDimensions.apply( this, arguments );
+
+       this.fitLabel();
+};
+
 /**
  * Fit label between actions.
  *
@@ -8272,15 +8620,31 @@ OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
  * @chainable
  */
 OO.ui.ProcessDialog.prototype.fitLabel = function () {
-       var safeWidth, primaryWidth, biggerWidth, labelWidth, navigationWidth, leftWidth, rightWidth;
+       var safeWidth, primaryWidth, biggerWidth, labelWidth, navigationWidth, leftWidth, rightWidth,
+               size = this.getSizeProperties();
+
+       if ( typeof size.width !== 'number' ) {
+               if ( this.isOpened() ) {
+                       navigationWidth = this.$head.width() - 20;
+               } else if ( this.isOpening() ) {
+                       if ( !this.fitOnOpen ) {
+                               // Size is relative and the dialog isn't open yet, so wait.
+                               this.manager.opening.done( this.fitLabel.bind( this ) );
+                               this.fitOnOpen = true;
+                       }
+                       return;
+               } else {
+                       return;
+               }
+       } else {
+               navigationWidth = size.width - 20;
+       }
 
        safeWidth = this.$safeActions.is( ':visible' ) ? this.$safeActions.width() : 0;
        primaryWidth = this.$primaryActions.is( ':visible' ) ? this.$primaryActions.width() : 0;
        biggerWidth = Math.max( safeWidth, primaryWidth );
 
        labelWidth = this.title.$element.width();
-       // Is there a better way to calculate this?
-       navigationWidth = OO.ui.WindowManager.static.sizes[ this.getSize() ].width - 20;
 
        if ( 2 * biggerWidth + labelWidth < navigationWidth ) {
                // We have enough space to center the label
@@ -8332,14 +8696,14 @@ OO.ui.ProcessDialog.prototype.showErrors = function ( errors ) {
        }
        this.$errorItems = $( items );
        if ( recoverable ) {
-               abilities[this.currentAction] = true;
+               abilities[ this.currentAction ] = true;
                // Copy the flags from the first matching action
                actions = this.actions.get( { actions: this.currentAction } );
                if ( actions.length ) {
-                       this.retryButton.clearFlags().setFlags( actions[0].getFlags() );
+                       this.retryButton.clearFlags().setFlags( actions[ 0 ].getFlags() );
                }
        } else {
-               abilities[this.currentAction] = false;
+               abilities[ this.currentAction ] = false;
                this.actions.setAbilities( abilities );
        }
        if ( warning ) {
@@ -8374,6 +8738,7 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
                .first( function () {
                        // Make sure to hide errors
                        this.hideErrors();
+                       this.fitOnOpen = false;
                }, this );
 };
 
@@ -8400,22 +8765,37 @@ OO.ui.ProcessDialog.prototype.getTeardownProcess = function ( data ) {
  * @class
  * @extends OO.ui.Layout
  * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.TitledElement
  *
  * @constructor
  * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {Object} [config] Configuration options
  * @cfg {string} [align='left'] Alignment of the label: 'left', 'right', 'top' or 'inline'
- * @cfg {string} [help] Help text. When help text is specified, a help icon will appear
- *  in the upper-right corner of the rendered field.
+ * @cfg {Array} [errors] Error messages about the widget, which will be displayed below the widget.
+ *  The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @cfg {Array} [notices] Notices about the widget, which will be displayed below the widget.
+ *  The array may contain strings or OO.ui.HtmlSnippet instances.
+ * @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a "help" icon will appear
+ *  in the upper-right corner of the rendered field; clicking it will display the text in a popup.
+ *  For important messages, you are advised to use `notices`, as they are always shown.
+ *
+ * @throws {Error} An error is thrown if no widget is specified
  */
 OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
+       var hasInputWidget, div, i;
+
        // Allow passing positional parameters inside the config object
        if ( OO.isPlainObject( fieldWidget ) && config === undefined ) {
                config = fieldWidget;
                fieldWidget = config.fieldWidget;
        }
 
-       var hasInputWidget = fieldWidget.constructor.static.supportsSimpleLabel;
+       // Make sure we have required constructor arguments
+       if ( fieldWidget === undefined ) {
+               throw new Error( 'Widget not found' );
+       }
+
+       hasInputWidget = fieldWidget.constructor.static.supportsSimpleLabel;
 
        // Configuration initialization
        config = $.extend( { align: 'left' }, config );
@@ -8425,10 +8805,14 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
 
        // Mixin constructors
        OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
 
        // Properties
        this.fieldWidget = fieldWidget;
+       this.errors = config.errors || [];
+       this.notices = config.notices || [];
        this.$field = $( '<div>' );
+       this.$messages = $( '<ul>' );
        this.$body = $( '<' + ( hasInputWidget ? 'label' : 'div' ) + '>' );
        this.align = null;
        if ( config.help ) {
@@ -8438,10 +8822,14 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
                        icon: 'info'
                } );
 
+               div = $( '<div>' );
+               if ( config.help instanceof OO.ui.HtmlSnippet ) {
+                       div.html( config.help.toString() );
+               } else {
+                       div.text( config.help );
+               }
                this.popupButtonWidget.getPopup().$body.append(
-                       $( '<div>' )
-                               .text( config.help )
-                               .addClass( 'oo-ui-fieldLayout-help-content' )
+                       div.addClass( 'oo-ui-fieldLayout-help-content' )
                );
                this.$help = this.popupButtonWidget.$element;
        } else {
@@ -8458,12 +8846,23 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
        this.$element
                .addClass( 'oo-ui-fieldLayout' )
                .append( this.$help, this.$body );
+       if ( this.errors.length || this.notices.length ) {
+               this.$element.append( this.$messages );
+       }
        this.$body.addClass( 'oo-ui-fieldLayout-body' );
+       this.$messages.addClass( 'oo-ui-fieldLayout-messages' );
        this.$field
                .addClass( 'oo-ui-fieldLayout-field' )
                .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
                .append( this.fieldWidget.$element );
 
+       for ( i = 0; i < this.notices.length; i++ ) {
+               this.$messages.append( this.makeMessage( 'notice', this.notices[ i ] ) );
+       }
+       for ( i = 0; i < this.errors.length; i++ ) {
+               this.$messages.append( this.makeMessage( 'error', this.errors[ i ] ) );
+       }
+
        this.setAlignment( config.align );
 };
 
@@ -8471,6 +8870,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
 
 OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
 OO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.mixin.TitledElement );
 
 /* Methods */
 
@@ -8505,8 +8905,30 @@ OO.ui.FieldLayout.prototype.getField = function () {
 };
 
 /**
- * Set the field alignment mode.
- *
+ * @param {string} kind 'error' or 'notice'
+ * @param {string|OO.ui.HtmlSnippet} text
+ * @return {jQuery}
+ */
+OO.ui.FieldLayout.prototype.makeMessage = function ( kind, text ) {
+       var $listItem, $icon, message;
+       $listItem = $( '<li>' );
+       if ( kind === 'error' ) {
+               $icon = new OO.ui.IconWidget( { icon: 'alert', flags: [ 'warning' ] } ).$element;
+       } else if ( kind === 'notice' ) {
+               $icon = new OO.ui.IconWidget( { icon: 'info' } ).$element;
+       } else {
+               $icon = '';
+       }
+       message = new OO.ui.LabelWidget( { label: text } );
+       $listItem
+               .append( $icon, message.$element )
+               .addClass( 'oo-ui-fieldLayout-messages-' + kind );
+       return $listItem;
+};
+
+/**
+ * Set the field alignment mode.
+ *
  * @private
  * @param {string} value Alignment mode, either 'left', 'right', 'top' or 'inline'
  * @chainable
@@ -8779,6 +9201,11 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Events
        this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
 
+       // Make sure the action is safe
+       if ( config.action !== undefined && !OO.ui.isSafeUrl( config.action ) ) {
+               throw new Error( 'Potentially unsafe action provided: ' + config.action );
+       }
+
        // Initialization
        this.$element
                .addClass( 'oo-ui-formLayout' )
@@ -9209,7 +9636,7 @@ OO.ui.BookletLayout.prototype.focusFirstFocusable = function () {
                }
                // Find all potentially focusable elements in the item
                // and check if they are focusable
-               items[i].$element
+               items[ i ].$element
                        .find( 'input, select, textarea, button, object' )
                        /* jshint loopfunc:true */
                        .each( checkAndFocus );
@@ -9280,7 +9707,7 @@ OO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {
 OO.ui.BookletLayout.prototype.getClosestPage = function ( page ) {
        var next, prev, level,
                pages = this.stackLayout.getItems(),
-               index = $.inArray( page, pages );
+               index = pages.indexOf( page );
 
        if ( index !== -1 ) {
                next = pages[ index + 1 ];
@@ -9380,7 +9807,7 @@ OO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {
 
                if ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {
                        // Correct the insertion index
-                       currentIndex = $.inArray( this.pages[ name ], stackLayoutPages );
+                       currentIndex = stackLayoutPages.indexOf( this.pages[ name ] );
                        if ( currentIndex !== -1 && currentIndex + 1 < index ) {
                                index--;
                        }
@@ -9729,7 +10156,7 @@ OO.ui.IndexLayout.prototype.focusFirstFocusable = function () {
                }
                // Find all potentially focusable elements in the item
                // and check if they are focusable
-               items[i].$element
+               items[ i ].$element
                        .find( 'input, select, textarea, button, object' )
                        .each( checkAndFocus );
        }
@@ -9756,7 +10183,7 @@ OO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {
 OO.ui.IndexLayout.prototype.getClosestCard = function ( card ) {
        var next, prev, level,
                cards = this.stackLayout.getItems(),
-               index = $.inArray( card, cards );
+               index = cards.indexOf( card );
 
        if ( index !== -1 ) {
                next = cards[ index + 1 ];
@@ -9841,7 +10268,7 @@ OO.ui.IndexLayout.prototype.addCards = function ( cards, index ) {
 
                if ( Object.prototype.hasOwnProperty.call( this.cards, name ) ) {
                        // Correct the insertion index
-                       currentIndex = $.inArray( this.cards[ name ], stackLayoutCards );
+                       currentIndex = stackLayoutCards.indexOf( this.cards[ name ] );
                        if ( currentIndex !== -1 && currentIndex + 1 < index ) {
                                index--;
                        }
@@ -10450,7 +10877,7 @@ OO.ui.StackLayout.prototype.removeItems = function ( items ) {
        // Mixin method
        OO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );
 
-       if ( $.inArray( this.currentItem, items ) !== -1 ) {
+       if ( items.indexOf( this.currentItem ) !== -1 ) {
                if ( this.items.length ) {
                        this.setItem( this.items[ 0 ] );
                } else {
@@ -10490,7 +10917,7 @@ OO.ui.StackLayout.prototype.setItem = function ( item ) {
        if ( item !== this.currentItem ) {
                this.updateHiddenState( this.items, item );
 
-               if ( $.inArray( item, this.items ) !== -1 ) {
+               if ( this.items.indexOf( item ) !== -1 ) {
                        this.currentItem = item;
                        this.emit( 'set', item );
                } else {
@@ -10526,6 +10953,53 @@ OO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem )
        }
 };
 
+/**
+ * HorizontalLayout arranges its contents in a single line (using `display: inline-block` for its
+ * items), with small margins between them. Convenient when you need to put a number of block-level
+ * widgets on a single line next to each other.
+ *
+ * Note that inline elements, such as OO.ui.ButtonWidgets, do not need this wrapper.
+ *
+ *     @example
+ *     // HorizontalLayout with a text input and a label
+ *     var layout = new OO.ui.HorizontalLayout( {
+ *       items: [
+ *         new OO.ui.LabelWidget( { label: 'Label' } ),
+ *         new OO.ui.TextInputWidget( { value: 'Text' } )
+ *       ]
+ *     } );
+ *     $( 'body' ).append( layout.$element );
+ *
+ * @class
+ * @extends OO.ui.Layout
+ * @mixins OO.ui.mixin.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {OO.ui.Widget[]|OO.ui.Layout[]} [items] Widgets or other layouts to add to the layout.
+ */
+OO.ui.HorizontalLayout = function OoUiHorizontalLayout( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.HorizontalLayout.parent.call( this, config );
+
+       // Mixin constructors
+       OO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-horizontalLayout' );
+       if ( Array.isArray( config.items ) ) {
+               this.addItems( config.items );
+       }
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.HorizontalLayout, OO.ui.Layout );
+OO.mixinClass( OO.ui.HorizontalLayout, OO.ui.mixin.GroupElement );
+
 /**
  * BarToolGroups are one of three types of {@link OO.ui.ToolGroup toolgroups} that are used to
  * create {@link OO.ui.Toolbar toolbars} (the other types of groups are {@link OO.ui.MenuToolGroup MenuToolGroup}
@@ -10814,13 +11288,15 @@ OO.ui.PopupToolGroup.prototype.onHandleMouseKeyDown = function ( e ) {
  * deactivation.
  */
 OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
+       var containerWidth, containerLeft;
        value = !!value;
        if ( this.active !== value ) {
                this.active = value;
                if ( value ) {
-                       this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
-                       this.getElementDocument().addEventListener( 'keyup', this.onBlurHandler, true );
+                       OO.ui.addCaptureEventListener( this.getElementDocument(), 'mouseup', this.onBlurHandler );
+                       OO.ui.addCaptureEventListener( this.getElementDocument(), 'keyup', this.onBlurHandler );
 
+                       this.$clippable.css( 'left', '' );
                        // Try anchoring the popup to the left first
                        this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
                        this.toggleClipping( true );
@@ -10832,9 +11308,22 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
                                        .addClass( 'oo-ui-popupToolGroup-right' );
                                this.toggleClipping( true );
                        }
+                       if ( this.isClippedHorizontally() ) {
+                               // Anchoring to the right also caused the popup to clip, so just make it fill the container
+                               containerWidth = this.$clippableContainer.width();
+                               containerLeft = this.$clippableContainer.offset().left;
+
+                               this.toggleClipping( false );
+                               this.$element.removeClass( 'oo-ui-popupToolGroup-right' );
+
+                               this.$clippable.css( {
+                                       left: -( this.$element.offset().left - containerLeft ),
+                                       width: containerWidth
+                               } );
+                       }
                } else {
-                       this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
-                       this.getElementDocument().removeEventListener( 'keyup', this.onBlurHandler, true );
+                       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mouseup', this.onBlurHandler );
+                       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'keyup', this.onBlurHandler );
                        this.$element.removeClass(
                                'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left  oo-ui-popupToolGroup-right'
                        );
@@ -10998,8 +11487,9 @@ OO.ui.ListToolGroup.prototype.populate = function () {
 };
 
 OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+       var ExpandCollapseTool;
        if ( this.expandCollapseTool === undefined ) {
-               var ExpandCollapseTool = function () {
+               ExpandCollapseTool = function () {
                        ExpandCollapseTool.parent.apply( this, arguments );
                };
 
@@ -11620,8 +12110,8 @@ OO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {
        var ability;
 
        for ( ability in this.abilities ) {
-               if ( abilities[ability] !== undefined ) {
-                       this.abilities[ability] = !!abilities[ability];
+               if ( abilities[ ability ] !== undefined ) {
+                       this.abilities[ ability ] = !!abilities[ ability ];
                }
        }
 
@@ -11816,6 +12306,7 @@ OO.mixinClass( OO.ui.ButtonGroupWidget, OO.ui.mixin.GroupElement );
  * @mixins OO.ui.mixin.TitledElement
  * @mixins OO.ui.mixin.FlaggedElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.AccessKeyedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -11838,6 +12329,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
        OO.ui.mixin.FlaggedElement.call( this, config );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$button } ) );
 
        // Properties
        this.href = null;
@@ -11867,6 +12359,7 @@ OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.LabelElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TitledElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.FlaggedElement );
 OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.mixin.AccessKeyedElement );
 
 /* Methods */
 
@@ -11928,6 +12421,12 @@ OO.ui.ButtonWidget.prototype.getNoFollow = function () {
  */
 OO.ui.ButtonWidget.prototype.setHref = function ( href ) {
        href = typeof href === 'string' ? href : null;
+       if ( href !== null ) {
+               if ( !OO.ui.isSafeUrl( href ) ) {
+                       throw new Error( 'Potentially unsafe href provided: ' + href );
+               }
+
+       }
 
        if ( href !== this.href ) {
                this.href = href;
@@ -12348,6 +12847,676 @@ OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
        this.$button.attr( 'aria-pressed', this.value.toString() );
 };
 
+/**
+ * CapsuleMultiSelectWidgets are something like a {@link OO.ui.ComboBoxWidget combo box widget}
+ * that allows for selecting multiple values.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example: A CapsuleMultiSelectWidget.
+ *     var capsule = new OO.ui.CapsuleMultiSelectWidget( {
+ *         label: 'CapsuleMultiSelectWidget',
+ *         selected: [ 'Option 1', 'Option 3' ],
+ *         menu: {
+ *             items: [
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 1',
+ *                     label: 'Option One'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 2',
+ *                     label: 'Option Two'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 3',
+ *                     label: 'Option Three'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 4',
+ *                     label: 'Option Four'
+ *                 } ),
+ *                 new OO.ui.MenuOptionWidget( {
+ *                     data: 'Option 5',
+ *                     label: 'Option Five'
+ *                 } )
+ *             ]
+ *         }
+ *     } );
+ *     $( 'body' ).append( capsule.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.GroupElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if not present in the menu.
+ * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.
+ * @cfg {Object} [popup] Configuration options to pass to the {@link OO.ui.PopupWidget popup widget}.
+ *  If specified, this popup will be shown instead of the menu (but the menu
+ *  will still be used for item labels and allowArbitrary=false). The widgets
+ *  in the popup should use this.addItemsFromData() or this.addItems() as necessary.
+ * @cfg {jQuery} [$overlay] Render the menu or popup into a separate layer.
+ *  This configuration is useful in cases where the expanded menu is larger than
+ *  its containing `<div>`. The specified overlay layer is usually on top of
+ *  the containing `<div>` and has a larger area. By default, the menu uses
+ *  relative positioning.
+ */
+OO.ui.CapsuleMultiSelectWidget = function OoUiCapsuleMultiSelectWidget( config ) {
+       var $tabFocus;
+
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.CapsuleMultiSelectWidget.parent.call( this, config );
+
+       // Properties (must be set before mixin constructor calls)
+       this.$input = config.popup ? null : $( '<input>' );
+       this.$handle = $( '<div>' );
+
+       // Mixin constructors
+       OO.ui.mixin.GroupElement.call( this, config );
+       if ( config.popup ) {
+               config.popup = $.extend( {}, config.popup, {
+                       align: 'forwards',
+                       anchor: false
+               } );
+               OO.ui.mixin.PopupElement.call( this, config );
+               $tabFocus = $( '<span>' );
+               OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: $tabFocus } ) );
+       } else {
+               this.popup = null;
+               $tabFocus = null;
+               OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+       }
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+
+       // Properties
+       this.allowArbitrary = !!config.allowArbitrary;
+       this.$overlay = config.$overlay || this.$element;
+       this.menu = new OO.ui.FloatingMenuSelectWidget( $.extend(
+               {
+                       widget: this,
+                       $input: this.$input,
+                       $container: this.$element,
+                       filterFromInput: true,
+                       disabled: this.isDisabled()
+               },
+               config.menu
+       ) );
+
+       // Events
+       if ( this.popup ) {
+               $tabFocus.on( {
+                       focus: this.onFocusForPopup.bind( this )
+               } );
+               this.popup.$element.on( 'focusout', this.onPopupFocusOut.bind( this ) );
+               if ( this.popup.$autoCloseIgnore ) {
+                       this.popup.$autoCloseIgnore.on( 'focusout', this.onPopupFocusOut.bind( this ) );
+               }
+               this.popup.connect( this, {
+                       toggle: function ( visible ) {
+                               $tabFocus.toggle( !visible );
+                       }
+               } );
+       } else {
+               this.$input.on( {
+                       focus: this.onInputFocus.bind( this ),
+                       blur: this.onInputBlur.bind( this ),
+                       'propertychange change click mouseup keydown keyup input cut paste select': this.onInputChange.bind( this ),
+                       keydown: this.onKeyDown.bind( this ),
+                       keypress: this.onKeyPress.bind( this )
+               } );
+       }
+       this.menu.connect( this, {
+               choose: 'onMenuChoose',
+               add: 'onMenuItemsChange',
+               remove: 'onMenuItemsChange'
+       } );
+       this.$handle.on( {
+               click: this.onClick.bind( this )
+       } );
+
+       // Initialization
+       if ( this.$input ) {
+               this.$input.prop( 'disabled', this.isDisabled() );
+               this.$input.attr( {
+                       role: 'combobox',
+                       'aria-autocomplete': 'list'
+               } );
+               this.$input.width( '1em' );
+       }
+       if ( config.data ) {
+               this.setItemsFromData( config.data );
+       }
+       this.$group.addClass( 'oo-ui-capsuleMultiSelectWidget-group' );
+       this.$handle.addClass( 'oo-ui-capsuleMultiSelectWidget-handle' )
+               .append( this.$indicator, this.$icon, this.$group );
+       this.$element.addClass( 'oo-ui-capsuleMultiSelectWidget' )
+               .append( this.$handle );
+       if ( this.popup ) {
+               this.$handle.append( $tabFocus );
+               this.$overlay.append( this.popup.$element );
+       } else {
+               this.$handle.append( this.$input );
+               this.$overlay.append( this.menu.$element );
+       }
+       this.onMenuItemsChange();
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.GroupElement );
+OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.PopupElement );
+OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.CapsuleMultiSelectWidget, OO.ui.mixin.IconElement );
+
+/* Events */
+
+/**
+ * @event change
+ *
+ * A change event is emitted when the set of selected items changes.
+ *
+ * @param {Mixed[]} datas Data of the now-selected items
+ */
+
+/* Methods */
+
+/**
+ * Get the data of the items in the capsule
+ * @return {Mixed[]}
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.getItemsData = function () {
+       return $.map( this.getItems(), function ( e ) { return e.data; } );
+};
+
+/**
+ * Set the items in the capsule by providing data
+ * @chainable
+ * @param {Mixed[]} datas
+ * @return {OO.ui.CapsuleMultiSelectWidget}
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.setItemsFromData = function ( datas ) {
+       var widget = this,
+               menu = this.menu,
+               items = this.getItems();
+
+       $.each( datas, function ( i, data ) {
+               var j, label,
+                       item = menu.getItemFromData( data );
+
+               if ( item ) {
+                       label = item.label;
+               } else if ( widget.allowArbitrary ) {
+                       label = String( data );
+               } else {
+                       return;
+               }
+
+               item = null;
+               for ( j = 0; j < items.length; j++ ) {
+                       if ( items[ j ].data === data && items[ j ].label === label ) {
+                               item = items[ j ];
+                               items.splice( j, 1 );
+                               break;
+                       }
+               }
+               if ( !item ) {
+                       item = new OO.ui.CapsuleItemWidget( { data: data, label: label } );
+               }
+               widget.addItems( [ item ], i );
+       } );
+
+       if ( items.length ) {
+               widget.removeItems( items );
+       }
+
+       return this;
+};
+
+/**
+ * Add items to the capsule by providing their data
+ * @chainable
+ * @param {Mixed[]} datas
+ * @return {OO.ui.CapsuleMultiSelectWidget}
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.addItemsFromData = function ( datas ) {
+       var widget = this,
+               menu = this.menu,
+               items = [];
+
+       $.each( datas, function ( i, data ) {
+               var item;
+
+               if ( !widget.getItemFromData( data ) ) {
+                       item = menu.getItemFromData( data );
+                       if ( item ) {
+                               items.push( new OO.ui.CapsuleItemWidget( { data: data, label: item.label } ) );
+                       } else if ( widget.allowArbitrary ) {
+                               items.push( new OO.ui.CapsuleItemWidget( { data: data, label: String( data ) } ) );
+                       }
+               }
+       } );
+
+       if ( items.length ) {
+               this.addItems( items );
+       }
+
+       return this;
+};
+
+/**
+ * Remove items by data
+ * @chainable
+ * @param {Mixed[]} datas
+ * @return {OO.ui.CapsuleMultiSelectWidget}
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.removeItemsFromData = function ( datas ) {
+       var widget = this,
+               items = [];
+
+       $.each( datas, function ( i, data ) {
+               var item = widget.getItemFromData( data );
+               if ( item ) {
+                       items.push( item );
+               }
+       } );
+
+       if ( items.length ) {
+               this.removeItems( items );
+       }
+
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.addItems = function ( items ) {
+       var same, i, l,
+               oldItems = this.items.slice();
+
+       OO.ui.mixin.GroupElement.prototype.addItems.call( this, items );
+
+       if ( this.items.length !== oldItems.length ) {
+               same = false;
+       } else {
+               same = true;
+               for ( i = 0, l = oldItems.length; same && i < l; i++ ) {
+                       same = same && this.items[ i ] === oldItems[ i ];
+               }
+       }
+       if ( !same ) {
+               this.emit( 'change', this.getItemsData() );
+       }
+
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.removeItems = function ( items ) {
+       var same, i, l,
+               oldItems = this.items.slice();
+
+       OO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );
+
+       if ( this.items.length !== oldItems.length ) {
+               same = false;
+       } else {
+               same = true;
+               for ( i = 0, l = oldItems.length; same && i < l; i++ ) {
+                       same = same && this.items[ i ] === oldItems[ i ];
+               }
+       }
+       if ( !same ) {
+               this.emit( 'change', this.getItemsData() );
+       }
+
+       return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.clearItems = function () {
+       if ( this.items.length ) {
+               OO.ui.mixin.GroupElement.prototype.clearItems.call( this );
+               this.emit( 'change', this.getItemsData() );
+       }
+       return this;
+};
+
+/**
+ * Get the capsule widget's menu.
+ * @return {OO.ui.MenuSelectWidget} Menu widget
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.getMenu = function () {
+       return this.menu;
+};
+
+/**
+ * Handle focus events
+ *
+ * @private
+ * @param {jQuery.Event} event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onInputFocus = function () {
+       if ( !this.isDisabled() ) {
+               this.menu.toggle( true );
+       }
+};
+
+/**
+ * Handle blur events
+ *
+ * @private
+ * @param {jQuery.Event} event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onInputBlur = function () {
+       this.clearInput();
+};
+
+/**
+ * Handle focus events
+ *
+ * @private
+ * @param {jQuery.Event} event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onFocusForPopup = function () {
+       if ( !this.isDisabled() ) {
+               this.popup.setSize( this.$handle.width() );
+               this.popup.toggle( true );
+               this.popup.$element.find( '*' )
+                       .filter( function () { return OO.ui.isFocusableElement( $( this ), true ); } )
+                       .first()
+                       .focus();
+       }
+};
+
+/**
+ * Handles popup focus out events.
+ *
+ * @private
+ * @param {Event} e Focus out event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onPopupFocusOut = function () {
+       var widget = this.popup;
+
+       setTimeout( function () {
+               if (
+                       widget.isVisible() &&
+                       !OO.ui.contains( widget.$element[ 0 ], document.activeElement, true ) &&
+                       ( !widget.$autoCloseIgnore || !widget.$autoCloseIgnore.has( document.activeElement ).length )
+               ) {
+                       widget.toggle( false );
+               }
+       } );
+};
+
+/**
+ * Handle mouse click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse click event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onClick = function ( e ) {
+       if ( e.which === 1 ) {
+               this.focus();
+               return false;
+       }
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onKeyPress = function ( e ) {
+       var item;
+
+       if ( !this.isDisabled() ) {
+               if ( e.which === OO.ui.Keys.ESCAPE ) {
+                       this.clearInput();
+                       return false;
+               }
+
+               if ( !this.popup ) {
+                       this.menu.toggle( true );
+                       if ( e.which === OO.ui.Keys.ENTER ) {
+                               item = this.menu.getItemFromLabel( this.$input.val(), true );
+                               if ( item ) {
+                                       this.addItemsFromData( [ item.data ] );
+                                       this.clearInput();
+                               } else if ( this.allowArbitrary && this.$input.val().trim() !== '' ) {
+                                       this.addItemsFromData( [ this.$input.val() ] );
+                                       this.clearInput();
+                               }
+                               return false;
+                       }
+
+                       // Make sure the input gets resized.
+                       setTimeout( this.onInputChange.bind( this ), 0 );
+               }
+       }
+};
+
+/**
+ * Handle key down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onKeyDown = function ( e ) {
+       if ( !this.isDisabled() ) {
+               // 'keypress' event is not triggered for Backspace
+               if ( e.keyCode === OO.ui.Keys.BACKSPACE && this.$input.val() === '' ) {
+                       if ( this.items.length ) {
+                               this.removeItems( this.items.slice( -1 ) );
+                       }
+                       return false;
+               }
+       }
+};
+
+/**
+ * Handle input change events.
+ *
+ * @private
+ * @param {jQuery.Event} e Event of some sort
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onInputChange = function () {
+       if ( !this.isDisabled() ) {
+               this.$input.width( this.$input.val().length + 'em' );
+       }
+};
+
+/**
+ * Handle menu choose events.
+ *
+ * @private
+ * @param {OO.ui.OptionWidget} item Chosen item
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onMenuChoose = function ( item ) {
+       if ( item && item.isVisible() ) {
+               this.addItemsFromData( [ item.getData() ] );
+               this.clearInput();
+       }
+};
+
+/**
+ * Handle menu item change events.
+ *
+ * @private
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.onMenuItemsChange = function () {
+       this.setItemsFromData( this.getItemsData() );
+       this.$element.toggleClass( 'oo-ui-capsuleMultiSelectWidget-empty', this.menu.isEmpty() );
+};
+
+/**
+ * Clear the input field
+ * @private
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.clearInput = function () {
+       if ( this.$input ) {
+               this.$input.val( '' );
+               this.$input.width( '1em' );
+       }
+       if ( this.popup ) {
+               this.popup.toggle( false );
+       }
+       this.menu.toggle( false );
+       this.menu.selectItem();
+       this.menu.highlightItem();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.setDisabled = function ( disabled ) {
+       var i, len;
+
+       // Parent method
+       OO.ui.CapsuleMultiSelectWidget.parent.prototype.setDisabled.call( this, disabled );
+
+       if ( this.$input ) {
+               this.$input.prop( 'disabled', this.isDisabled() );
+       }
+       if ( this.menu ) {
+               this.menu.setDisabled( this.isDisabled() );
+       }
+       if ( this.popup ) {
+               this.popup.setDisabled( this.isDisabled() );
+       }
+
+       if ( this.items ) {
+               for ( i = 0, len = this.items.length; i < len; i++ ) {
+                       this.items[ i ].updateDisabled();
+               }
+       }
+
+       return this;
+};
+
+/**
+ * Focus the widget
+ * @chainable
+ * @return {OO.ui.CapsuleMultiSelectWidget}
+ */
+OO.ui.CapsuleMultiSelectWidget.prototype.focus = function () {
+       if ( !this.isDisabled() ) {
+               if ( this.popup ) {
+                       this.popup.setSize( this.$handle.width() );
+                       this.popup.toggle( true );
+                       this.popup.$element.find( '*' )
+                               .filter( function () { return OO.ui.isFocusableElement( $( this ), true ); } )
+                               .first()
+                               .focus();
+               } else {
+                       this.menu.toggle( true );
+                       this.$input.focus();
+               }
+       }
+       return this;
+};
+
+/**
+ * CapsuleItemWidgets are used within a {@link OO.ui.CapsuleMultiSelectWidget
+ * CapsuleMultiSelectWidget} to display the selected items.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.ItemWidget
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ */
+OO.ui.CapsuleItemWidget = function OoUiCapsuleItemWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.CapsuleItemWidget.parent.call( this, config );
+
+       // Properties (must be set before mixin constructor calls)
+       this.$indicator = $( '<span>' );
+
+       // Mixin constructors
+       OO.ui.mixin.ItemWidget.call( this );
+       OO.ui.mixin.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$indicator, indicator: 'clear' } ) );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$indicator } ) );
+
+       // Events
+       this.$indicator.on( {
+               keydown: this.onCloseKeyDown.bind( this ),
+               click: this.onCloseClick.bind( this )
+       } );
+       this.$element.on( 'click', false );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-capsuleItemWidget' )
+               .append( this.$indicator, this.$label );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.CapsuleItemWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.ItemWidget );
+OO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.FlaggedElement );
+OO.mixinClass( OO.ui.CapsuleItemWidget, OO.ui.mixin.TabIndexedElement );
+
+/* Methods */
+
+/**
+ * Handle close icon clicks
+ * @param {jQuery.Event} event
+ */
+OO.ui.CapsuleItemWidget.prototype.onCloseClick = function () {
+       var element = this.getElementGroup();
+
+       if ( !this.isDisabled() && element && $.isFunction( element.removeItems ) ) {
+               element.removeItems( [ this ] );
+               element.focus();
+       }
+};
+
+/**
+ * Handle close keyboard events
+ * @param {jQuery.Event} event Key down event
+ */
+OO.ui.CapsuleItemWidget.prototype.onCloseKeyDown = function ( e ) {
+       if ( !this.isDisabled() && $.isFunction( this.getElementGroup().removeItems ) ) {
+               switch ( e.which ) {
+                       case OO.ui.Keys.ENTER:
+                       case OO.ui.Keys.BACKSPACE:
+                       case OO.ui.Keys.SPACE:
+                               this.getElementGroup().removeItems( [ this ] );
+                               return false;
+               }
+       }
+};
+
 /**
  * DropdownWidgets are not menus themselves, rather they contain a menu of options created with
  * OO.ui.MenuOptionWidget. The DropdownWidget takes care of opening and displaying the menu so that
@@ -12394,7 +13563,10 @@ OO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {Object} [menu] Configuration options to pass to menu widget
+ * @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.FloatingMenuSelectWidget menu select widget}
+ * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where
+ *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the
+ *  containing `<div>` and has a larger area. By default, the menu uses relative positioning.
  */
 OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
        // Configuration initialization
@@ -12405,6 +13577,7 @@ OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
 
        // Properties (must be set before TabIndexedElement constructor call)
        this.$handle = this.$( '<span>' );
+       this.$overlay = config.$overlay || this.$element;
 
        // Mixin constructors
        OO.ui.mixin.IconElement.call( this, config );
@@ -12414,7 +13587,10 @@ OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
        // Properties
-       this.menu = new OO.ui.MenuSelectWidget( $.extend( { widget: this }, config.menu ) );
+       this.menu = new OO.ui.FloatingMenuSelectWidget( $.extend( {
+               widget: this,
+               $container: this.$element
+       }, config.menu ) );
 
        // Events
        this.$handle.on( {
@@ -12429,7 +13605,8 @@ OO.ui.DropdownWidget = function OoUiDropdownWidget( config ) {
                .append( this.$icon, this.$label, this.$indicator );
        this.$element
                .addClass( 'oo-ui-dropdownWidget' )
-               .append( this.$handle, this.menu.$element );
+               .append( this.$handle );
+       this.$overlay.append( this.menu.$element );
 };
 
 /* Setup */
@@ -12523,7 +13700,6 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @mixins OO.ui.mixin.IndicatorElement
  * @mixins OO.ui.mixin.PendingElement
  * @mixins OO.ui.mixin.LabelElement
- * @mixins OO.ui.mixin.TabIndexedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -12531,32 +13707,40 @@ OO.ui.DropdownWidget.prototype.onKeyPress = function ( e ) {
  * @cfg {string} [placeholder] Text to display when no file is selected.
  * @cfg {string} [notsupported] Text to display when file support is missing in the browser.
  * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.
+ * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.
+ * @cfg {boolean} [dragDropUI=false] Deprecated alias for showDropTarget
  */
 OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        var dragHandler;
 
+       // TODO: Remove in next release
+       if ( config && config.dragDropUI ) {
+               config.showDropTarget = true;
+       }
+
        // Configuration initialization
        config = $.extend( {
                accept: null,
                placeholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),
                notsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),
-               droppable: true
+               droppable: true,
+               showDropTarget: false
        }, config );
 
        // Parent constructor
        OO.ui.SelectFileWidget.parent.call( this, config );
 
-       // Properties (must be set before TabIndexedElement constructor call)
-       this.$handle = $( '<span>' );
-
        // Mixin constructors
        OO.ui.mixin.IconElement.call( this, config );
        OO.ui.mixin.IndicatorElement.call( this, config );
-       OO.ui.mixin.PendingElement.call( this, config );
-       OO.ui.mixin.LabelElement.call( this, $.extend( config, { autoFitLabel: true } ) );
-       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
+       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );
+       OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, { autoFitLabel: true } ) );
+
+       // Properties
+       this.$info = $( '<span>' );
 
        // Properties
+       this.showDropTarget = config.showDropTarget;
        this.isSupported = this.constructor.static.isSupported();
        this.currentFile = null;
        if ( Array.isArray( config.accept ) ) {
@@ -12568,6 +13752,12 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.notsupported = config.notsupported;
        this.onFileSelectedHandler = this.onFileSelected.bind( this );
 
+       this.selectButton = new OO.ui.ButtonWidget( {
+               classes: [ 'oo-ui-selectFileWidget-selectButton' ],
+               label: 'Select a file',
+               disabled: this.disabled || !this.isSupported
+       } );
+
        this.clearButton = new OO.ui.ButtonWidget( {
                classes: [ 'oo-ui-selectFileWidget-clearButton' ],
                framed: false,
@@ -12576,7 +13766,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
 
        // Events
-       this.$handle.on( {
+       this.selectButton.$button.on( {
                keypress: this.onKeyPress.bind( this )
        } );
        this.clearButton.connect( this, {
@@ -12584,7 +13774,7 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        } );
        if ( config.droppable ) {
                dragHandler = this.onDragEnterOrOver.bind( this );
-               this.$handle.on( {
+               this.$element.on( {
                        dragenter: dragHandler,
                        dragover: dragHandler,
                        dragleave: this.onDragLeave.bind( this ),
@@ -12596,14 +13786,20 @@ OO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {
        this.addInput();
        this.updateUI();
        this.$label.addClass( 'oo-ui-selectFileWidget-label' );
-       this.$handle
-               .addClass( 'oo-ui-selectFileWidget-handle' )
+       this.$info
+               .addClass( 'oo-ui-selectFileWidget-info' )
                .append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );
        this.$element
                .addClass( 'oo-ui-selectFileWidget' )
-               .append( this.$handle );
-       if ( config.droppable ) {
-               this.$element.addClass( 'oo-ui-selectFileWidget-droppable' );
+               .append( this.$info, this.selectButton.$element );
+       if ( config.droppable && config.showDropTarget ) {
+               this.$dropTarget = $( '<div>' )
+                       .addClass( 'oo-ui-selectFileWidget-dropTarget' )
+                       .text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )
+                       .on( {
+                               click: this.onDropTargetClick.bind( this )
+                       } );
+               this.$element.prepend( this.$dropTarget );
        }
 };
 
@@ -12614,9 +13810,8 @@ OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );
 OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );
-OO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.TabIndexedElement );
 
-/* Static properties */
+/* Static Properties */
 
 /**
  * Check if this widget is supported
@@ -12628,7 +13823,7 @@ OO.ui.SelectFileWidget.static.isSupported = function () {
        var $input;
        if ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {
                $input = $( '<input type="file">' );
-               OO.ui.SelectFileWidget.static.isSupportedCache = $input[0].files !== undefined;
+               OO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;
        }
        return OO.ui.SelectFileWidget.static.isSupportedCache;
 };
@@ -12679,14 +13874,17 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
                this.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );
                this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
                this.setLabel( this.notsupported );
-       } else if ( this.currentFile ) {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.currentFile.name +
-                       ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
-               );
        } else {
-               this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
-               this.setLabel( this.placeholder );
+               this.$element.addClass( 'oo-ui-selectFileWidget-supported' );
+               if ( this.currentFile ) {
+                       this.$element.removeClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.currentFile.name +
+                               ( this.currentFile.type !== '' ? OO.ui.msg( 'ooui-semicolon-separator' ) + this.currentFile.type : '' )
+                       );
+               } else {
+                       this.$element.addClass( 'oo-ui-selectFileWidget-empty' );
+                       this.setLabel( this.placeholder );
+               }
        }
 
        if ( this.$input ) {
@@ -12695,7 +13893,7 @@ OO.ui.SelectFileWidget.prototype.updateUI = function () {
 };
 
 /**
- * Add the input to the handle
+ * Add the input to the widget
  *
  * @private
  */
@@ -12718,31 +13916,30 @@ OO.ui.SelectFileWidget.prototype.addInput = function () {
        if ( this.accept ) {
                this.$input.attr( 'accept', this.accept.join( ', ' ) );
        }
-       this.$handle.append( this.$input );
+       this.selectButton.$button.append( this.$input );
 };
 
 /**
  * Determine if we should accept this file
  *
  * @private
- * @param {File} file
+ * @param {string} File MIME type
  * @return {boolean}
  */
-OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
-       var i, mime, mimeTest;
+OO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {
+       var i, mimeTest;
 
-       if ( !this.accept || file.type === '' ) {
+       if ( !this.accept || !mimeType ) {
                return true;
        }
 
-       mime = file.type;
        for ( i = 0; i < this.accept.length; i++ ) {
-               mimeTest = this.accept[i];
-               if ( mimeTest === mime ) {
+               mimeTest = this.accept[ i ];
+               if ( mimeTest === mimeType ) {
                        return true;
                } else if ( mimeTest.substr( -2 ) === '/*' ) {
                        mimeTest = mimeTest.substr( 0, mimeTest.length - 1 );
-                       if ( mime.substr( 0, mimeTest.length ) === mimeTest ) {
+                       if ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {
                                return true;
                        }
                }
@@ -12758,13 +13955,10 @@ OO.ui.SelectFileWidget.prototype.isFileAcceptable = function ( file ) {
  * @param {jQuery.Event} e
  */
 OO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {
-       var file = null;
+       var file = OO.getProp( e.target, 'files', 0 ) || null;
 
-       if ( e.target.files && e.target.files[0] ) {
-               file = e.target.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
 
        this.setValue( file );
@@ -12796,6 +13990,19 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
        }
 };
 
+/**
+ * Handle drop target click events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ */
+OO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {
+       if ( this.isSupported && !this.isDisabled() && this.$input ) {
+               this.$input.click();
+               return false;
+       }
+};
+
 /**
  * Handle drag enter and over events
  *
@@ -12803,7 +14010,8 @@ OO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {
  * @param {jQuery.Event} e Drag event
  */
 OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
-       var file = null,
+       var itemOrFile,
+               droppableFile = false,
                dt = e.originalEvent.dataTransfer;
 
        e.preventDefault();
@@ -12815,21 +14023,23 @@ OO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {
                return false;
        }
 
-       if ( dt && dt.files && dt.files[0] ) {
-               file = dt.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
+       // DataTransferItem and File both have a type property, but in Chrome files
+       // have no information at this point.
+       itemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );
+       if ( itemOrFile ) {
+               if ( this.isAllowedType( itemOrFile.type ) ) {
+                       droppableFile = true;
                }
-       } else if ( dt && dt.types && $.inArray( 'Files', dt.types ) ) {
-               // We know we have files so set 'file' to something truthy, we just
-               // can't know any details about them.
-               // * https://bugzilla.mozilla.org/show_bug.cgi?id=640534
-               file = 'Files exist, but details are unknown';
+       // dt.types is Array-like, but not an Array
+       } else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {
+               // File information is not available at this point for security so just assume
+               // it is acceptable for now.
+               // https://bugzilla.mozilla.org/show_bug.cgi?id=640534
+               droppableFile = true;
        }
-       if ( file ) {
-               this.$element.addClass( 'oo-ui-selectFileWidget-canDrop' );
-       } else {
-               this.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );
+
+       this.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );
+       if ( !droppableFile ) {
                dt.dropEffect = 'none';
        }
 
@@ -12864,11 +14074,9 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
                return false;
        }
 
-       if ( dt && dt.files && dt.files[0] ) {
-               file = dt.files[0];
-               if ( !this.isFileAcceptable( file ) ) {
-                       file = null;
-               }
+       file = OO.getProp( dt, 'files', 0 );
+       if ( file && !this.isAllowedType( file.type ) ) {
+               file = null;
        }
        if ( file ) {
                this.setValue( file );
@@ -12880,10 +14088,13 @@ OO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {
 /**
  * @inheritdoc
  */
-OO.ui.SelectFileWidget.prototype.setDisabled = function ( state ) {
-       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, state );
+OO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {
+       OO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );
+       if ( this.selectButton ) {
+               this.selectButton.setDisabled( disabled );
+       }
        if ( this.clearButton ) {
-               this.clearButton.setDisabled( state );
+               this.clearButton.setDisabled( disabled );
        }
        return this;
 };
@@ -13009,11 +14220,14 @@ OO.ui.IndicatorWidget.static.tagName = 'span';
  * @extends OO.ui.Widget
  * @mixins OO.ui.mixin.FlaggedElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.AccessKeyedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [name=''] The value of the input’s HTML `name` attribute.
  * @cfg {string} [value=''] The value of the input.
+ * @cfg {string} [accessKey=''] The access key of the input.
  * @cfg {Function} [inputFilter] The name of an input filter function. Input filters modify the value of an input
  *  before it is accepted.
  */
@@ -13032,16 +14246,22 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        // Mixin constructors
        OO.ui.mixin.FlaggedElement.call( this, config );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$input } ) );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+       OO.ui.mixin.AccessKeyedElement.call( this, $.extend( {}, config, { $accessKeyed: this.$input } ) );
 
        // Events
        this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
 
        // Initialization
        this.$input
+               .addClass( 'oo-ui-inputWidget-input' )
                .attr( 'name', config.name )
                .prop( 'disabled', this.isDisabled() );
-       this.$element.addClass( 'oo-ui-inputWidget' ).append( this.$input, $( '<span>' ) );
+       this.$element
+               .addClass( 'oo-ui-inputWidget' )
+               .append( this.$input );
        this.setValue( config.value );
+       this.setAccessKey( config.accessKey );
 };
 
 /* Setup */
@@ -13049,6 +14269,8 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
 OO.inheritClass( OO.ui.InputWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.FlaggedElement );
 OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.InputWidget, OO.ui.mixin.AccessKeyedElement );
 
 /* Static Properties */
 
@@ -13142,6 +14364,30 @@ OO.ui.InputWidget.prototype.setValue = function ( value ) {
        return this;
 };
 
+/**
+ * Set the input's access key.
+ * FIXME: This is the same code as in OO.ui.mixin.ButtonElement, maybe find a better place for it?
+ *
+ * @param {string} accessKey Input's access key, use empty string to remove
+ * @chainable
+ */
+OO.ui.InputWidget.prototype.setAccessKey = function ( accessKey ) {
+       accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
+
+       if ( this.accessKey !== accessKey ) {
+               if ( this.$input ) {
+                       if ( accessKey !== null ) {
+                               this.$input.attr( 'accesskey', accessKey );
+                       } else {
+                               this.$input.removeAttr( 'accesskey' );
+                       }
+               }
+               this.accessKey = accessKey;
+       }
+
+       return this;
+};
+
 /**
  * Clean up incoming value.
  *
@@ -13208,6 +14454,32 @@ OO.ui.InputWidget.prototype.blur = function () {
        return this;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.prototype.gatherPreInfuseState = function ( node ) {
+       var
+               state = OO.ui.InputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
+               $input = state.$input || $( node ).find( '.oo-ui-inputWidget-input' );
+       state.value = $input.val();
+       // Might be better in TabIndexedElement, but it's awkward to do there because mixins are awkward
+       state.focus = $input.is( ':focus' );
+       return state;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.InputWidget.prototype.restorePreInfuseState = function ( state ) {
+       OO.ui.InputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+       if ( state.value !== undefined && state.value !== this.getValue() ) {
+               this.setValue( state.value );
+       }
+       if ( state.focus ) {
+               this.focus();
+       }
+};
+
 /**
  * ButtonInputWidget is used to submit HTML forms and is intended to be used within
  * a OO.ui.FormLayout. If you do not need the button to work with HTML forms, you probably
@@ -13275,6 +14547,14 @@ OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.LabelElement );
 OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.mixin.TitledElement );
 
+/* Static Properties */
+
+/**
+ * Disable generating `<label>` elements for buttons. One would very rarely need additional label
+ * for a button, and it's already a big clickable target, and it causes unexpected rendering.
+ */
+OO.ui.ButtonInputWidget.static.supportsSimpleLabel = false;
+
 /* Methods */
 
 /**
@@ -13381,7 +14661,10 @@ OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
        OO.ui.CheckboxInputWidget.parent.call( this, config );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-checkboxInputWidget' );
+       this.$element
+               .addClass( 'oo-ui-checkboxInputWidget' )
+               // Required for pretty styling in MediaWiki theme
+               .append( $( '<span>' ) );
        this.setSelected( config.selected !== undefined ? config.selected : false );
 };
 
@@ -13443,6 +14726,28 @@ OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
        return this.selected;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.prototype.gatherPreInfuseState = function ( node ) {
+       var
+               state = OO.ui.CheckboxInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
+               $input = $( node ).find( '.oo-ui-inputWidget-input' );
+       state.$input = $input; // shortcut for performance, used in InputWidget
+       state.checked = $input.prop( 'checked' );
+       return state;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.CheckboxInputWidget.prototype.restorePreInfuseState = function ( state ) {
+       OO.ui.CheckboxInputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+       if ( state.checked !== undefined && state.checked !== this.isSelected() ) {
+               this.setSelected( state.checked );
+       }
+};
+
 /**
  * DropdownInputWidget is a {@link OO.ui.DropdownWidget DropdownWidget} intended to be used
  * within a HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value
@@ -13470,21 +14775,26 @@ OO.ui.CheckboxInputWidget.prototype.isSelected = function () {
  *
  * @class
  * @extends OO.ui.InputWidget
+ * @mixins OO.ui.mixin.TitledElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ * @cfg {Object} [dropdown] Configuration options for {@link OO.ui.DropdownWidget DropdownWidget}
  */
 OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
        // Configuration initialization
        config = config || {};
 
        // Properties (must be done before parent constructor which calls #setDisabled)
-       this.dropdownWidget = new OO.ui.DropdownWidget();
+       this.dropdownWidget = new OO.ui.DropdownWidget( config.dropdown );
 
        // Parent constructor
        OO.ui.DropdownInputWidget.parent.call( this, config );
 
+       // Mixin constructors
+       OO.ui.mixin.TitledElement.call( this, config );
+
        // Events
        this.dropdownWidget.getMenu().connect( this, { select: 'onMenuSelect' } );
 
@@ -13498,6 +14808,7 @@ OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.DropdownInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.DropdownInputWidget, OO.ui.mixin.TitledElement );
 
 /* Methods */
 
@@ -13639,7 +14950,10 @@ OO.ui.RadioInputWidget = function OoUiRadioInputWidget( config ) {
        OO.ui.RadioInputWidget.parent.call( this, config );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-radioInputWidget' );
+       this.$element
+               .addClass( 'oo-ui-radioInputWidget' )
+               // Required for pretty styling in MediaWiki theme
+               .append( $( '<span>' ) );
        this.setSelected( config.selected !== undefined ? config.selected : false );
 };
 
@@ -13685,6 +14999,28 @@ OO.ui.RadioInputWidget.prototype.isSelected = function () {
        return this.$input.prop( 'checked' );
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioInputWidget.prototype.gatherPreInfuseState = function ( node ) {
+       var
+               state = OO.ui.RadioInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
+               $input = $( node ).find( '.oo-ui-inputWidget-input' );
+       state.$input = $input; // shortcut for performance, used in InputWidget
+       state.checked = $input.prop( 'checked' );
+       return state;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioInputWidget.prototype.restorePreInfuseState = function ( state ) {
+       OO.ui.RadioInputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+       if ( state.checked !== undefined && state.checked !== this.isSelected() ) {
+               this.setSelected( state.checked );
+       }
+};
+
 /**
  * RadioSelectInputWidget is a {@link OO.ui.RadioSelectWidget RadioSelectWidget} intended to be used
  * within a HTML form, such as a OO.ui.FormLayout. The selected value is synchronized with the value
@@ -13816,6 +15152,15 @@ OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
        return this;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.RadioSelectInputWidget.prototype.gatherPreInfuseState = function ( node ) {
+       var state = OO.ui.RadioSelectInputWidget.parent.prototype.gatherPreInfuseState.call( this, node );
+       state.value = $( node ).find( '.oo-ui-radioInputWidget .oo-ui-inputWidget-input:checked' ).val();
+       return state;
+};
+
 /**
  * TextInputWidgets, like HTML text inputs, can be configured with options that customize the
  * size of the field as well as its presentation. In addition, these widgets can be configured
@@ -13846,6 +15191,11 @@ OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
  * @param {Object} [config] Configuration options
  * @cfg {string} [type='text'] The value of the HTML `type` attribute: 'text', 'password', 'search',
  *  'email' or 'url'. Ignored if `multiline` is true.
+ *
+ *  Some values of `type` result in additional behaviors:
+ *
+ *  - `search`: implies `icon: 'search'` and `indicator: 'clear'`; when clicked, the indicator
+ *    empties the text field
  * @cfg {string} [placeholder] Placeholder text
  * @cfg {boolean} [autofocus=false] Use an HTML `autofocus` attribute to
  *  instruct the browser to focus this widget.
@@ -13860,7 +15210,7 @@ OO.ui.RadioSelectInputWidget.prototype.setOptions = function ( options ) {
  *  Defaults to the maximum of `10` and `2 * rows`, or `10` if `rows` isn't provided.
  * @cfg {string} [labelPosition='after'] The position of the inline label relative to that of
  *  the value or placeholder text: `'before'` or `'after'`
- * @cfg {boolean} [required=false] Mark the field as required
+ * @cfg {boolean} [required=false] Mark the field as required. Implies `indicator: 'required'`.
  * @cfg {boolean} [autocomplete=true] Should the browser support autocomplete for this field
  * @cfg {RegExp|Function|string} [validate] Validation pattern: when string, a symbolic name of a
  *  pattern defined by the class: 'non-empty' (the value cannot be an empty string) or 'integer'
@@ -13874,6 +15224,17 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
                type: 'text',
                labelPosition: 'after'
        }, config );
+       if ( config.type === 'search' ) {
+               if ( config.icon === undefined ) {
+                       config.icon = 'search';
+               }
+               // indicator: 'clear' is set dynamically later, depending on value
+       }
+       if ( config.required ) {
+               if ( config.indicator === undefined ) {
+                       config.indicator = 'required';
+               }
+       }
 
        // Parent constructor
        OO.ui.TextInputWidget.parent.call( this, config );
@@ -13881,10 +15242,11 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        // Mixin constructors
        OO.ui.mixin.IconElement.call( this, config );
        OO.ui.mixin.IndicatorElement.call( this, config );
-       OO.ui.mixin.PendingElement.call( this, config );
+       OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$input } ) );
        OO.ui.mixin.LabelElement.call( this, config );
 
        // Properties
+       this.type = this.getSaneType( config );
        this.readOnly = false;
        this.multiline = !!config.multiline;
        this.autosize = !!config.autosize;
@@ -13915,13 +15277,17 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
        this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
        this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
        this.on( 'labelChange', this.updatePosition.bind( this ) );
-       this.connect( this, { change: 'onChange' } );
+       this.connect( this, {
+               change: 'onChange',
+               disable: 'onDisable'
+       } );
 
        // Initialization
        this.$element
-               .addClass( 'oo-ui-textInputWidget' )
+               .addClass( 'oo-ui-textInputWidget oo-ui-textInputWidget-type-' + this.type )
                .append( this.$icon, this.$indicator );
        this.setReadOnly( !!config.readOnly );
+       this.updateSearchIndicator();
        if ( config.placeholder ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
@@ -13954,7 +15320,7 @@ OO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.PendingElement );
 OO.mixinClass( OO.ui.TextInputWidget, OO.ui.mixin.LabelElement );
 
-/* Static properties */
+/* Static Properties */
 
 OO.ui.TextInputWidget.static.validationPatterns = {
        'non-empty': /.+/,
@@ -13996,6 +15362,10 @@ OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
  */
 OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
        if ( e.which === 1 ) {
+               if ( this.type === 'search' ) {
+                       // Clear the text field
+                       this.setValue( '' );
+               }
                this.$input[ 0 ].focus();
                return false;
        }
@@ -14044,10 +15414,21 @@ OO.ui.TextInputWidget.prototype.onElementAttach = function () {
  * @private
  */
 OO.ui.TextInputWidget.prototype.onChange = function () {
+       this.updateSearchIndicator();
        this.setValidityFlag();
        this.adjustSize();
 };
 
+/**
+ * Handle disable events.
+ *
+ * @param {boolean} disabled Element is disabled
+ * @private
+ */
+OO.ui.TextInputWidget.prototype.onDisable = function () {
+       this.updateSearchIndicator();
+};
+
 /**
  * Check if the input is {@link #readOnly read-only}.
  *
@@ -14066,6 +15447,7 @@ OO.ui.TextInputWidget.prototype.isReadOnly = function () {
 OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
        this.readOnly = !!state;
        this.$input.prop( 'readOnly', this.readOnly );
+       this.updateSearchIndicator();
        return this;
 };
 
@@ -14095,7 +15477,7 @@ OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
                }
 
                // Find topmost node in the tree
-               topmostNode = this.$element[0];
+               topmostNode = this.$element[ 0 ];
                while ( topmostNode.parentNode ) {
                        topmostNode = topmostNode.parentNode;
                }
@@ -14129,7 +15511,7 @@ OO.ui.TextInputWidget.prototype.installParentChangeDetector = function () {
                };
 
                // Create a fake parent and observe it
-               fakeParentNode = $( '<div>' ).append( this.$element )[0];
+               fakeParentNode = $( '<div>' ).append( topmostNode )[ 0 ];
                mutationObserver.observe( fakeParentNode, { childList: true } );
        } else {
                // Using the DOMNodeInsertedIntoDocument event is much nicer and less magical, and works for
@@ -14196,10 +15578,23 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
  * @protected
  */
 OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
+       return config.multiline ?
+               $( '<textarea>' ) :
+               $( '<input type="' + this.getSaneType( config ) + '" />' );
+};
+
+/**
+ * Get sanitized value for 'type' for given config.
+ *
+ * @param {Object} config Configuration options
+ * @return {string|null}
+ * @private
+ */
+OO.ui.TextInputWidget.prototype.getSaneType = function ( config ) {
        var type = [ 'text', 'password', 'search', 'email', 'url' ].indexOf( config.type ) !== -1 ?
                config.type :
                'text';
-       return config.multiline ? $( '<textarea>' ) : $( '<input type="' + type + '" />' );
+       return config.multiline ? 'multiline' : type;
 };
 
 /**
@@ -14230,6 +15625,23 @@ OO.ui.TextInputWidget.prototype.select = function () {
        return this;
 };
 
+/**
+ * Focus the input and move the cursor to the end.
+ */
+OO.ui.TextInputWidget.prototype.moveCursorToEnd = function () {
+       var textRange,
+               element = this.$input[ 0 ];
+       this.focus();
+       if ( element.selectionStart !== undefined ) {
+               element.selectionStart = element.selectionEnd = element.value.length;
+       } else if ( element.createTextRange ) {
+               // IE 8 and below
+               textRange = element.createTextRange();
+               textRange.collapse( false );
+               textRange.select();
+       }
+};
+
 /**
  * Set the validation pattern.
  *
@@ -14267,7 +15679,11 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
        if ( isValid !== undefined ) {
                setFlag( isValid );
        } else {
-               this.isValid().done( setFlag );
+               this.getValidity().then( function () {
+                       setFlag( true );
+               }, function () {
+                       setFlag( false );
+               } );
        }
 };
 
@@ -14277,11 +15693,14 @@ OO.ui.TextInputWidget.prototype.setValidityFlag = function ( isValid ) {
  * This method returns a promise that resolves with a boolean `true` if the current value is
  * considered valid according to the supplied {@link #validate validation pattern}.
  *
+ * @deprecated
  * @return {jQuery.Promise} A promise that resolves to a boolean `true` if the value is valid.
  */
 OO.ui.TextInputWidget.prototype.isValid = function () {
+       var result;
+
        if ( this.validate instanceof Function ) {
-               var result = this.validate( this.getValue() );
+               result = this.validate( this.getValue() );
                if ( $.isFunction( result.promise ) ) {
                        return result.promise();
                } else {
@@ -14292,6 +15711,50 @@ OO.ui.TextInputWidget.prototype.isValid = function () {
        }
 };
 
+/**
+ * Get the validity of current value.
+ *
+ * This method returns a promise that resolves if the value is valid and rejects if
+ * it isn't. Uses the {@link #validate validation pattern}  to check for validity.
+ *
+ * @return {jQuery.Promise} A promise that resolves if the value is valid, rejects if not.
+ */
+OO.ui.TextInputWidget.prototype.getValidity = function () {
+       var result, promise;
+
+       function rejectOrResolve( valid ) {
+               if ( valid ) {
+                       return $.Deferred().resolve().promise();
+               } else {
+                       return $.Deferred().reject().promise();
+               }
+       }
+
+       if ( this.validate instanceof Function ) {
+               result = this.validate( this.getValue() );
+
+               if ( $.isFunction( result.promise ) ) {
+                       promise = $.Deferred();
+
+                       result.then( function ( valid ) {
+                               if ( valid ) {
+                                       promise.resolve();
+                               } else {
+                                       promise.reject();
+                               }
+                       }, function () {
+                               promise.reject();
+                       } );
+
+                       return promise.promise();
+               } else {
+                       return rejectOrResolve( result );
+               }
+       } else {
+               return rejectOrResolve( this.getValue().match( this.validate ) );
+       }
+};
+
 /**
  * Set the position of the inline label relative to that of the value: `‘before’` or `‘after’`.
  *
@@ -14318,7 +15781,6 @@ OO.ui.TextInputWidget.prototype.setPosition =
  * This method is called by #setLabelPosition, and can also be called on its own if
  * something causes the label to be mispositioned.
  *
- *
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.updatePosition = function () {
@@ -14328,13 +15790,25 @@ OO.ui.TextInputWidget.prototype.updatePosition = function () {
                .toggleClass( 'oo-ui-textInputWidget-labelPosition-after', !!this.label && after )
                .toggleClass( 'oo-ui-textInputWidget-labelPosition-before', !!this.label && !after );
 
-       if ( this.label ) {
-               this.positionLabel();
-       }
+       this.positionLabel();
 
        return this;
 };
 
+/**
+ * Update the 'clear' indicator displayed on type: 'search' text fields, hiding it when the field is
+ * already empty or when it's not editable.
+ */
+OO.ui.TextInputWidget.prototype.updateSearchIndicator = function () {
+       if ( this.type === 'search' ) {
+               if ( this.getValue() === '' || this.isDisabled() || this.isReadOnly() ) {
+                       this.setIndicator( null );
+               } else {
+                       this.setIndicator( 'clear' );
+               }
+       }
+};
+
 /**
  * Position the label by setting the correct padding on the input.
  *
@@ -14342,6 +15816,7 @@ OO.ui.TextInputWidget.prototype.updatePosition = function () {
  * @chainable
  */
 OO.ui.TextInputWidget.prototype.positionLabel = function () {
+       var after, rtl, property;
        // Clear old values
        this.$input
                // Clear old values if present
@@ -14357,15 +15832,39 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
                return;
        }
 
-       var after = this.labelPosition === 'after',
-               rtl = this.$element.css( 'direction' ) === 'rtl',
-               property = after === rtl ? 'padding-left' : 'padding-right';
+       after = this.labelPosition === 'after';
+       rtl = this.$element.css( 'direction' ) === 'rtl';
+       property = after === rtl ? 'padding-left' : 'padding-right';
 
        this.$input.css( property, this.$label.outerWidth( true ) );
 
        return this;
 };
 
+/**
+ * @inheritdoc
+ */
+OO.ui.TextInputWidget.prototype.gatherPreInfuseState = function ( node ) {
+       var
+               state = OO.ui.TextInputWidget.parent.prototype.gatherPreInfuseState.call( this, node ),
+               $input = $( node ).find( '.oo-ui-inputWidget-input' );
+       state.$input = $input; // shortcut for performance, used in InputWidget
+       if ( this.multiline ) {
+               state.scrollTop = $input.scrollTop();
+       }
+       return state;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TextInputWidget.prototype.restorePreInfuseState = function ( state ) {
+       OO.ui.TextInputWidget.parent.prototype.restorePreInfuseState.call( this, state );
+       if ( state.scrollTop !== undefined ) {
+               this.$input.scrollTop( state.scrollTop );
+       }
+};
+
 /**
  * ComboBoxWidgets combine a {@link OO.ui.TextInputWidget text input} (where a value
  * can be entered manually) and a {@link OO.ui.MenuSelectWidget menu of options} (from which
@@ -14418,7 +15917,7 @@ OO.ui.TextInputWidget.prototype.positionLabel = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.MenuSelectWidget menu select widget}.
+ * @cfg {Object} [menu] Configuration options to pass to the {@link OO.ui.FloatingMenuSelectWidget menu select widget}.
  * @cfg {Object} [input] Configuration options to pass to the {@link OO.ui.TextInputWidget text input widget}.
  * @cfg {jQuery} [$overlay] Render the menu into a separate layer. This configuration is useful in cases where
  *  the expanded menu is larger than its containing `<div>`. The specified overlay layer is usually on top of the
@@ -14451,10 +15950,11 @@ OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
                role: 'combobox',
                'aria-autocomplete': 'list'
        } );
-       this.menu = new OO.ui.TextInputMenuSelectWidget( this.input, $.extend(
+       this.menu = new OO.ui.FloatingMenuSelectWidget( $.extend(
                {
                        widget: this,
                        input: this.input,
+                       $container: this.input.$element,
                        disabled: this.isDisabled()
                },
                config.menu
@@ -14490,7 +15990,7 @@ OO.mixinClass( OO.ui.ComboBoxWidget, OO.ui.mixin.TabIndexedElement );
 
 /**
  * Get the combobox's menu.
- * @return {OO.ui.TextInputMenuSelectWidget} Menu widget
+ * @return {OO.ui.FloatingMenuSelectWidget} Menu widget
  */
 OO.ui.ComboBoxWidget.prototype.getMenu = function () {
        return this.menu;
@@ -14757,7 +16257,7 @@ OO.ui.OptionWidget.static.scrollIntoViewOnSelect = false;
  * @return {boolean} Item is selectable
  */
 OO.ui.OptionWidget.prototype.isSelectable = function () {
-       return this.constructor.static.selectable && !this.isDisabled();
+       return this.constructor.static.selectable && !this.isDisabled() && this.isVisible();
 };
 
 /**
@@ -14768,7 +16268,7 @@ OO.ui.OptionWidget.prototype.isSelectable = function () {
  * @return {boolean} Item is highlightable
  */
 OO.ui.OptionWidget.prototype.isHighlightable = function () {
-       return this.constructor.static.highlightable && !this.isDisabled();
+       return this.constructor.static.highlightable && !this.isDisabled() && this.isVisible();
 };
 
 /**
@@ -14778,7 +16278,7 @@ OO.ui.OptionWidget.prototype.isHighlightable = function () {
  * @return {boolean} Item is pressable
  */
 OO.ui.OptionWidget.prototype.isPressable = function () {
-       return this.constructor.static.pressable && !this.isDisabled();
+       return this.constructor.static.pressable && !this.isDisabled() && this.isVisible();
 };
 
 /**
@@ -14937,20 +16437,25 @@ OO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );
  * @extends OO.ui.DecoratedOptionWidget
  * @mixins OO.ui.mixin.ButtonElement
  * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.TitledElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  */
 OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
        // Configuration initialization
-       config = $.extend( { tabIndex: -1 }, config );
+       config = config || {};
 
        // Parent constructor
        OO.ui.ButtonOptionWidget.parent.call( this, config );
 
        // Mixin constructors
        OO.ui.mixin.ButtonElement.call( this, config );
-       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );
+       OO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
+       OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, {
+               $tabIndexed: this.$button,
+               tabIndex: -1
+       } ) );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonOptionWidget' );
@@ -14962,6 +16467,7 @@ OO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {
 
 OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );
 OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TabIndexedElement );
 
 /* Static Properties */
@@ -15013,8 +16519,13 @@ OO.ui.RadioOptionWidget = function OoUiRadioOptionWidget( config ) {
        this.radio.$input.on( 'focus', this.onInputFocus.bind( this ) );
 
        // Initialization
+       // Remove implicit role, we're handling it ourselves
+       this.radio.$input.attr( 'role', 'presentation' );
        this.$element
                .addClass( 'oo-ui-radioOptionWidget' )
+               .attr( 'role', 'radio' )
+               .attr( 'aria-checked', 'false' )
+               .removeAttr( 'aria-selected' )
                .prepend( this.radio.$element );
 };
 
@@ -15050,6 +16561,9 @@ OO.ui.RadioOptionWidget.prototype.setSelected = function ( state ) {
        OO.ui.RadioOptionWidget.parent.prototype.setSelected.call( this, state );
 
        this.radio.setSelected( state );
+       this.$element
+               .attr( 'aria-checked', state.toString() )
+               .removeAttr( 'aria-selected' );
 
        return this;
 };
@@ -15358,6 +16872,7 @@ OO.ui.TabOptionWidget.static.highlightable = false;
  *  [3]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Popups#containerExample
  * @cfg {number} [containerPadding=10] Padding between the popup and its container, specified as a number of pixels.
  * @cfg {jQuery} [$content] Content to append to the popup's body
+ * @cfg {jQuery} [$footer] Content to append to the popup's footer
  * @cfg {boolean} [autoClose=false] Automatically close the popup when it loses focus.
  * @cfg {jQuery} [$autoCloseIgnore] Elements that will not close the popup when clicked.
  *  This config option is only relevant if #autoClose is set to `true`. See the [OOjs UI docs on MediaWiki][2]
@@ -15376,14 +16891,18 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
 
        // Properties (must be set before ClippableElement constructor call)
        this.$body = $( '<div>' );
+       this.$popup = $( '<div>' );
 
        // Mixin constructors
        OO.ui.mixin.LabelElement.call( this, config );
-       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$body } ) );
+       OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, {
+               $clippable: this.$body,
+               $clippableContainer: this.$popup
+       } ) );
 
        // Properties
-       this.$popup = $( '<div>' );
        this.$head = $( '<div>' );
+       this.$footer = $( '<div>' );
        this.$anchor = $( '<div>' );
        // If undefined, will be computed lazily in updateDimensions()
        this.$container = config.$container;
@@ -15409,12 +16928,16 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.$head
                .addClass( 'oo-ui-popupWidget-head' )
                .append( this.$label, this.closeButton.$element );
+       this.$footer.addClass( 'oo-ui-popupWidget-footer' );
        if ( !config.head ) {
                this.$head.addClass( 'oo-ui-element-hidden' );
        }
+       if ( !config.$footer ) {
+               this.$footer.addClass( 'oo-ui-element-hidden' );
+       }
        this.$popup
                .addClass( 'oo-ui-popupWidget-popup' )
-               .append( this.$head, this.$body );
+               .append( this.$head, this.$body, this.$footer );
        this.$element
                .addClass( 'oo-ui-popupWidget' )
                .append( this.$popup, this.$anchor );
@@ -15422,6 +16945,9 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        if ( config.$content instanceof jQuery ) {
                this.$body.append( config.$content );
        }
+       if ( config.$footer instanceof jQuery ) {
+               this.$footer.append( config.$footer );
+       }
        if ( config.padded ) {
                this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
        }
@@ -15464,7 +16990,7 @@ OO.ui.PopupWidget.prototype.onMouseDown = function ( e ) {
  */
 OO.ui.PopupWidget.prototype.bindMouseDownListener = function () {
        // Capture clicks outside popup
-       this.getElementWindow().addEventListener( 'mousedown', this.onMouseDownHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementWindow(), 'mousedown', this.onMouseDownHandler );
 };
 
 /**
@@ -15484,7 +17010,7 @@ OO.ui.PopupWidget.prototype.onCloseButtonClick = function () {
  * @private
  */
 OO.ui.PopupWidget.prototype.unbindMouseDownListener = function () {
-       this.getElementWindow().removeEventListener( 'mousedown', this.onMouseDownHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementWindow(), 'mousedown', this.onMouseDownHandler );
 };
 
 /**
@@ -15510,7 +17036,7 @@ OO.ui.PopupWidget.prototype.onDocumentKeyDown = function ( e ) {
  * @private
  */
 OO.ui.PopupWidget.prototype.bindKeyDownListener = function () {
-       this.getElementWindow().addEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementWindow(), 'keydown', this.onDocumentKeyDownHandler );
 };
 
 /**
@@ -15519,7 +17045,7 @@ OO.ui.PopupWidget.prototype.bindKeyDownListener = function () {
  * @private
  */
 OO.ui.PopupWidget.prototype.unbindKeyDownListener = function () {
-       this.getElementWindow().removeEventListener( 'keydown', this.onDocumentKeyDownHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementWindow(), 'keydown', this.onDocumentKeyDownHandler );
 };
 
 /**
@@ -15553,9 +17079,10 @@ OO.ui.PopupWidget.prototype.hasAnchor = function () {
  * @inheritdoc
  */
 OO.ui.PopupWidget.prototype.toggle = function ( show ) {
+       var change;
        show = show === undefined ? !this.isVisible() : !!show;
 
-       var change = show !== this.isVisible();
+       change = show !== this.isVisible();
 
        // Parent method
        OO.ui.PopupWidget.parent.prototype.toggle.call( this, show );
@@ -15813,7 +17340,7 @@ OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
 
 /**
  * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,
- * and a {@link OO.ui.TextInputMenuSelectWidget menu} of search results, which is displayed beneath the query
+ * and a menu of search results, which is displayed beneath the query
  * field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.
  * Users can choose an item from the menu or type a query into the text field to search for a matching result item.
  * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.
@@ -15853,10 +17380,6 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
                change: 'onQueryChange',
                enter: 'onQueryEnter'
        } );
-       this.results.connect( this, {
-               highlight: 'onResultsHighlight',
-               select: 'onResultsSelect'
-       } );
        this.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );
 
        // Initialization
@@ -15875,28 +17398,6 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
 
 OO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );
 
-/* Events */
-
-/**
- * A 'highlight' event is emitted when an item is highlighted. The highlight indicates which
- * item will be selected. When a user mouses over a menu item, it is highlighted. If a search
- * string is typed into the query field instead, the first menu item that matches the query
- * will be highlighted.
-
- * @event highlight
- * @deprecated Connect straight to getResults() events instead
- * @param {Object|null} item Item data or null if no item is highlighted
- */
-
-/**
- * A 'select' event is emitted when an item is selected. A menu item is selected when it is clicked,
- * or when a user types a search query, a menu result is highlighted, and the user presses enter.
- *
- * @event select
- * @deprecated Connect straight to getResults() events instead
- * @param {Object|null} item Item data or null if no item is selected
- */
-
 /* Methods */
 
 /**
@@ -15936,38 +17437,14 @@ OO.ui.SearchWidget.prototype.onQueryChange = function () {
 /**
  * Handle select widget enter key events.
  *
- * Selects highlighted item.
+ * Chooses highlighted item.
  *
  * @private
  * @param {string} value New value
  */
 OO.ui.SearchWidget.prototype.onQueryEnter = function () {
        // Reset
-       this.results.selectItem( this.results.getHighlightedItem() );
-};
-
-/**
- * Handle select widget highlight events.
- *
- * @private
- * @deprecated Connect straight to getResults() events instead
- * @param {OO.ui.OptionWidget} item Highlighted item
- * @fires highlight
- */
-OO.ui.SearchWidget.prototype.onResultsHighlight = function ( item ) {
-       this.emit( 'highlight', item ? item.getData() : null );
-};
-
-/**
- * Handle select widget select events.
- *
- * @private
- * @deprecated Connect straight to getResults() events instead
- * @param {OO.ui.OptionWidget} item Selected item
- * @fires select
- */
-OO.ui.SearchWidget.prototype.onResultsSelect = function ( item ) {
-       this.emit( 'select', item ? item.getData() : null );
+       this.results.chooseItem( this.results.getHighlightedItem() );
 };
 
 /**
@@ -16022,7 +17499,7 @@ OO.ui.SearchWidget.prototype.getResults = function () {
  * @abstract
  * @class
  * @extends OO.ui.Widget
- * @mixins OO.ui.mixin.GroupElement
+ * @mixins OO.ui.mixin.GroupWidget
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -16151,15 +17628,15 @@ OO.ui.SelectWidget.prototype.onMouseDown = function ( e ) {
                if ( item && item.isSelectable() ) {
                        this.pressItem( item );
                        this.selecting = item;
-                       this.getElementDocument().addEventListener(
+                       OO.ui.addCaptureEventListener(
+                               this.getElementDocument(),
                                'mouseup',
-                               this.onMouseUpHandler,
-                               true
+                               this.onMouseUpHandler
                        );
-                       this.getElementDocument().addEventListener(
+                       OO.ui.addCaptureEventListener(
+                               this.getElementDocument(),
                                'mousemove',
-                               this.onMouseMoveHandler,
-                               true
+                               this.onMouseMoveHandler
                        );
                }
        }
@@ -16188,16 +17665,10 @@ OO.ui.SelectWidget.prototype.onMouseUp = function ( e ) {
                this.selecting = null;
        }
 
-       this.getElementDocument().removeEventListener(
-               'mouseup',
-               this.onMouseUpHandler,
-               true
-       );
-       this.getElementDocument().removeEventListener(
-               'mousemove',
-               this.onMouseMoveHandler,
-               true
-       );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mouseup',
+               this.onMouseUpHandler );
+       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mousemove',
+               this.onMouseMoveHandler );
 
        return false;
 };
@@ -16317,7 +17788,7 @@ OO.ui.SelectWidget.prototype.onKeyDown = function ( e ) {
  * @protected
  */
 OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
-       this.getElementWindow().addEventListener( 'keydown', this.onKeyDownHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementWindow(), 'keydown', this.onKeyDownHandler );
 };
 
 /**
@@ -16326,7 +17797,7 @@ OO.ui.SelectWidget.prototype.bindKeyDownListener = function () {
  * @protected
  */
 OO.ui.SelectWidget.prototype.unbindKeyDownListener = function () {
-       this.getElementWindow().removeEventListener( 'keydown', this.onKeyDownHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementWindow(), 'keydown', this.onKeyDownHandler );
 };
 
 /**
@@ -16381,7 +17852,7 @@ OO.ui.SelectWidget.prototype.onKeyPress = function ( e ) {
                this.keyPressBuffer += c;
        }
 
-       filter = this.getItemMatcher( this.keyPressBuffer );
+       filter = this.getItemMatcher( this.keyPressBuffer, false );
        if ( !item || !filter( item ) ) {
                item = this.getRelativeSelectableItem( item, 1, filter );
        }
@@ -16402,15 +17873,21 @@ OO.ui.SelectWidget.prototype.onKeyPress = function ( e ) {
  *
  * @protected
  * @param {string} s String to match against items
+ * @param {boolean} [exact=false] Only accept exact matches
  * @return {Function} function ( OO.ui.OptionItem ) => boolean
  */
-OO.ui.SelectWidget.prototype.getItemMatcher = function ( s ) {
+OO.ui.SelectWidget.prototype.getItemMatcher = function ( s, exact ) {
        var re;
 
        if ( s.normalize ) {
                s = s.normalize();
        }
-       re = new RegExp( '^\\s*' + s.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' ).replace( /\s+/g, '\\s+' ), 'i' );
+       s = exact ? s.trim() : s.replace( /^\s+/, '' );
+       re = '^\\s*' + s.replace( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' ).replace( /\s+/g, '\\s+' );
+       if ( exact ) {
+               re += '\\s*$';
+       }
+       re = new RegExp( re, 'i' );
        return function ( item ) {
                var l = item.getLabel();
                if ( typeof l !== 'string' ) {
@@ -16429,7 +17906,7 @@ OO.ui.SelectWidget.prototype.getItemMatcher = function ( s ) {
  * @protected
  */
 OO.ui.SelectWidget.prototype.bindKeyPressListener = function () {
-       this.getElementWindow().addEventListener( 'keypress', this.onKeyPressHandler, true );
+       OO.ui.addCaptureEventListener( this.getElementWindow(), 'keypress', this.onKeyPressHandler );
 };
 
 /**
@@ -16441,7 +17918,7 @@ OO.ui.SelectWidget.prototype.bindKeyPressListener = function () {
  * @protected
  */
 OO.ui.SelectWidget.prototype.unbindKeyPressListener = function () {
-       this.getElementWindow().removeEventListener( 'keypress', this.onKeyPressHandler, true );
+       OO.ui.removeCaptureEventListener( this.getElementWindow(), 'keypress', this.onKeyPressHandler );
        this.clearKeyPressBuffer();
 };
 
@@ -16547,6 +18024,62 @@ OO.ui.SelectWidget.prototype.highlightItem = function ( item ) {
        return this;
 };
 
+/**
+ * Fetch an item by its label.
+ *
+ * @param {string} label Label of the item to select.
+ * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches
+ * @return {OO.ui.Element|null} Item with equivalent label, `null` if none exists
+ */
+OO.ui.SelectWidget.prototype.getItemFromLabel = function ( label, prefix ) {
+       var i, item, found,
+               len = this.items.length,
+               filter = this.getItemMatcher( label, true );
+
+       for ( i = 0; i < len; i++ ) {
+               item = this.items[ i ];
+               if ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {
+                       return item;
+               }
+       }
+
+       if ( prefix ) {
+               found = null;
+               filter = this.getItemMatcher( label, false );
+               for ( i = 0; i < len; i++ ) {
+                       item = this.items[ i ];
+                       if ( item instanceof OO.ui.OptionWidget && item.isSelectable() && filter( item ) ) {
+                               if ( found ) {
+                                       return null;
+                               }
+                               found = item;
+                       }
+               }
+               if ( found ) {
+                       return found;
+               }
+       }
+
+       return null;
+};
+
+/**
+ * Programmatically select an option by its label. If the item does not exist,
+ * all options will be deselected.
+ *
+ * @param {string} [label] Label of the item to select.
+ * @param {boolean} [prefix=false] Allow a prefix match, if only a single item matches
+ * @fires select
+ * @chainable
+ */
+OO.ui.SelectWidget.prototype.selectItemByLabel = function ( label, prefix ) {
+       var itemFromLabel = this.getItemFromLabel( label, !!prefix );
+       if ( label === undefined || !itemFromLabel ) {
+               return this.selectItem();
+       }
+       return this.selectItem( itemFromLabel );
+};
+
 /**
  * Programmatically select an option by its data. If the `data` parameter is omitted,
  * or if the item does not exist, all options will be deselected.
@@ -16661,7 +18194,7 @@ OO.ui.SelectWidget.prototype.getRelativeSelectableItem = function ( item, direct
        }
 
        if ( item instanceof OO.ui.OptionWidget ) {
-               currentIndex = $.inArray( item, this.items );
+               currentIndex = this.items.indexOf( item );
                nextIndex = ( currentIndex + increase + len ) % len;
        } else {
                // If no item is selected and moving forward, start at the beginning.
@@ -16884,7 +18417,9 @@ OO.ui.RadioSelectWidget = function OoUiRadioSelectWidget( config ) {
        } );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-radioSelectWidget' );
+       this.$element
+               .addClass( 'oo-ui-radioSelectWidget' )
+               .attr( 'role', 'radiogroup' );
 };
 
 /* Setup */
@@ -16922,11 +18457,14 @@ OO.mixinClass( OO.ui.RadioSelectWidget, OO.ui.mixin.TabIndexedElement );
  * @cfg {OO.ui.TextInputWidget} [input] Text input used to implement option highlighting for menu items that match
  *  the text the user types. This config is used by {@link OO.ui.ComboBoxWidget ComboBoxWidget}
  *  and {@link OO.ui.mixin.LookupElement LookupElement}
+ * @cfg {jQuery} [$input] Text input used to implement option highlighting for menu items that match
+ *  the text the user types. This config is used by {@link OO.ui.CapsuleMultiSelectWidget CapsuleMultiSelectWidget}
  * @cfg {OO.ui.Widget} [widget] Widget associated with the menu's active state. If the user clicks the mouse
  *  anywhere on the page outside of this widget, the menu is hidden. For example, if there is a button
  *  that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks
  *  that button, unless the button (or its parent widget) is passed in here.
  * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ * @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input
  */
 OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        // Configuration initialization
@@ -16941,9 +18479,11 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        // Properties
        this.newItems = null;
        this.autoHide = config.autoHide === undefined || !!config.autoHide;
-       this.$input = config.input ? config.input.$input : null;
+       this.filterFromInput = !!config.filterFromInput;
+       this.$input = config.$input ? config.$input : config.input ? config.input.$input : null;
        this.$widget = config.widget ? config.widget.$element : null;
        this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
+       this.onInputEditHandler = OO.ui.debounce( this.updateItemVisibility.bind( this ), 100 );
 
        // Initialization
        this.$element
@@ -17013,6 +18553,27 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
        }
 };
 
+/**
+ * Update menu item visibility after input changes.
+ * @protected
+ */
+OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
+       var i, item,
+               len = this.items.length,
+               showAll = !this.isVisible(),
+               filter = showAll ? null : this.getItemMatcher( this.$input.val() );
+
+       for ( i = 0; i < len; i++ ) {
+               item = this.items[ i ];
+               if ( item instanceof OO.ui.OptionWidget ) {
+                       item.toggle( showAll || filter( item ) );
+               }
+       }
+
+       // Reevaluate clipping
+       this.clip();
+};
+
 /**
  * @inheritdoc
  */
@@ -17039,7 +18600,11 @@ OO.ui.MenuSelectWidget.prototype.unbindKeyDownListener = function () {
  * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.bindKeyPressListener = function () {
-       if ( !this.$input ) {
+       if ( this.$input ) {
+               if ( this.filterFromInput ) {
+                       this.$input.on( 'keydown mouseup cut paste change input select', this.onInputEditHandler );
+               }
+       } else {
                OO.ui.MenuSelectWidget.parent.prototype.bindKeyPressListener.call( this );
        }
 };
@@ -17049,7 +18614,10 @@ OO.ui.MenuSelectWidget.prototype.bindKeyPressListener = function () {
  */
 OO.ui.MenuSelectWidget.prototype.unbindKeyPressListener = function () {
        if ( this.$input ) {
-               this.clearKeyPressBuffer();
+               if ( this.filterFromInput ) {
+                       this.$input.off( 'keydown mouseup cut paste change input select', this.onInputEditHandler );
+                       this.updateItemVisibility();
+               }
        } else {
                OO.ui.MenuSelectWidget.parent.prototype.unbindKeyPressListener.call( this );
        }
@@ -17131,10 +18699,10 @@ OO.ui.MenuSelectWidget.prototype.clearItems = function () {
  * @inheritdoc
  */
 OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
-       visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
+       var i, len, change;
 
-       var i, len,
-               change = visible !== this.isVisible();
+       visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
+       change = visible !== this.isVisible();
 
        // Parent method
        OO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );
@@ -17154,16 +18722,12 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
 
                        // Auto-hide
                        if ( this.autoHide ) {
-                               this.getElementDocument().addEventListener(
-                                       'mousedown', this.onDocumentMouseDownHandler, true
-                               );
+                               OO.ui.addCaptureEventListener( this.getElementDocument(), 'mousedown', this.onDocumentMouseDownHandler );
                        }
                } else {
                        this.unbindKeyDownListener();
                        this.unbindKeyPressListener();
-                       this.getElementDocument().removeEventListener(
-                               'mousedown', this.onDocumentMouseDownHandler, true
-                       );
+                       OO.ui.removeCaptureEventListener( this.getElementDocument(), 'mousedown', this.onDocumentMouseDownHandler );
                        this.toggleClipping( false );
                }
        }
@@ -17172,21 +18736,27 @@ OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
 };
 
 /**
- * TextInputMenuSelectWidget is a menu that is specially designed to be positioned beneath
- * a {@link OO.ui.TextInputWidget text input} field. The menu's position is automatically
- * calculated and maintained when the menu is toggled or the window is resized.
+ * FloatingMenuSelectWidget is a menu that will stick under a specified
+ * container, even when it is inserted elsewhere in the document (for example,
+ * in a OO.ui.Window's $overlay). This is sometimes necessary to prevent the
+ * menu from being clipped too aggresively.
+ *
+ * The menu's position is automatically calculated and maintained when the menu
+ * is toggled or the window is resized.
+ *
  * See OO.ui.ComboBoxWidget for an example of a widget that uses this class.
  *
  * @class
  * @extends OO.ui.MenuSelectWidget
  *
  * @constructor
- * @param {OO.ui.TextInputWidget} inputWidget Text input widget to provide menu for
+ * @param {OO.ui.Widget} [inputWidget] Widget to provide the menu for.
+ *   Deprecated, omit this parameter and specify `$container` instead.
  * @param {Object} [config] Configuration options
- * @cfg {jQuery} [$container=input.$element] Element to render menu under
+ * @cfg {jQuery} [$container=inputWidget.$element] Element to render menu under
  */
-OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputWidget, config ) {
-       // Allow passing positional parameters inside the config object
+OO.ui.FloatingMenuSelectWidget = function OoUiFloatingMenuSelectWidget( inputWidget, config ) {
+       // Allow 'inputWidget' parameter and config for backwards compatibility
        if ( OO.isPlainObject( inputWidget ) && config === undefined ) {
                config = inputWidget;
                inputWidget = config.inputWidget;
@@ -17196,20 +18766,25 @@ OO.ui.TextInputMenuSelectWidget = function OoUiTextInputMenuSelectWidget( inputW
        config = config || {};
 
        // Parent constructor
-       OO.ui.TextInputMenuSelectWidget.parent.call( this, config );
+       OO.ui.FloatingMenuSelectWidget.parent.call( this, config );
 
        // Properties
-       this.inputWidget = inputWidget;
+       this.inputWidget = inputWidget; // For backwards compatibility
        this.$container = config.$container || this.inputWidget.$element;
        this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Initialization
+       this.$element.addClass( 'oo-ui-floatingMenuSelectWidget' );
+       // For backwards compatibility
        this.$element.addClass( 'oo-ui-textInputMenuSelectWidget' );
 };
 
 /* Setup */
 
-OO.inheritClass( OO.ui.TextInputMenuSelectWidget, OO.ui.MenuSelectWidget );
+OO.inheritClass( OO.ui.FloatingMenuSelectWidget, OO.ui.MenuSelectWidget );
+
+// For backwards compatibility
+OO.ui.TextInputMenuSelectWidget = OO.ui.FloatingMenuSelectWidget;
 
 /* Methods */
 
@@ -17219,17 +18794,18 @@ OO.inheritClass( OO.ui.TextInputMenuSelectWidget, OO.ui.MenuSelectWidget );
  * @private
  * @param {jQuery.Event} e Window resize event
  */
-OO.ui.TextInputMenuSelectWidget.prototype.onWindowResize = function () {
+OO.ui.FloatingMenuSelectWidget.prototype.onWindowResize = function () {
        this.position();
 };
 
 /**
  * @inheritdoc
  */
-OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
+OO.ui.FloatingMenuSelectWidget.prototype.toggle = function ( visible ) {
+       var change;
        visible = visible === undefined ? !this.isVisible() : !!visible;
 
-       var change = visible !== this.isVisible();
+       change = visible !== this.isVisible();
 
        if ( change && visible ) {
                // Make sure the width is set before the parent method runs.
@@ -17239,7 +18815,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
        }
 
        // Parent method
-       OO.ui.TextInputMenuSelectWidget.parent.prototype.toggle.call( this, visible );
+       OO.ui.FloatingMenuSelectWidget.parent.prototype.toggle.call( this, visible );
 
        if ( change ) {
                if ( this.isVisible() ) {
@@ -17259,7 +18835,7 @@ OO.ui.TextInputMenuSelectWidget.prototype.toggle = function ( visible ) {
  * @private
  * @chainable
  */
-OO.ui.TextInputMenuSelectWidget.prototype.position = function () {
+OO.ui.FloatingMenuSelectWidget.prototype.position = function () {
        var $container = this.$container,
                pos = OO.ui.Element.static.getRelativePosition( $container, this.$element.offsetParent() );
 
index 8fdc505..f7b3862 100644 (file)
@@ -5,6 +5,10 @@
                "alignCentre": { "file": "images/icons/align-center.svg" },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
+               "calendar": { "file": {
+                       "ltr": "images/icons/calendar-ltr.svg",
+                       "rtl": "images/icons/calendar-rtl.svg"
+               } },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
index 65fbc21..4fb736c 100644 (file)
@@ -23,7 +23,7 @@
                        "lang": {
                                "ar": "images/icons/bold-arab-ain.svg",
                                "be": "images/icons/bold-cyrl-te.svg",
-                               "cs,en,he,ml,pl": "images/icons/bold-b.svg",
+                               "cs,en,he,ml,pl,sco": "images/icons/bold-b.svg",
                                "da,de,hu,ksh,nn,no,sv": "images/icons/bold-f.svg",
                                "es,gl,pt": "images/icons/bold-n.svg",
                                "eu,fi": "images/icons/bold-l.svg",
@@ -40,7 +40,7 @@
                        "default": "images/icons/italic-a.svg",
                        "lang": {
                                        "ar": "images/icons/italic-arab-meem.svg",
-                                       "cs,en,fr,he,ml,pl,pt": "images/icons/italic-i.svg",
+                                       "cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
                                        "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
                                        "es,gl,it,nl": "images/icons/italic-c.svg",
                                        "eu": "images/icons/italic-e.svg",
index 9372363..92791d6 100644 (file)
@@ -2,12 +2,12 @@
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
        "images": {
-               "circle": { "file": "images/icons/circle.svg" },
                "add": { "file": "images/icons/add.svg" },
                "advanced": { "file": "images/icons/advanced.svg" },
-               "cancel": { "file": "images/icons/cancel.svg" },
                "alert": { "file": "images/icons/alert.svg" },
+               "cancel": { "file": "images/icons/cancel.svg" },
                "check": { "file": "images/icons/check.svg" },
+               "circle": { "file": "images/icons/circle.svg" },
                "close": { "file": "images/icons/close.svg" },
                "code": { "file": "images/icons/code.svg" },
                "collapse": { "file": "images/icons/collapse.svg" },
@@ -28,6 +28,7 @@
                        "ltr": "images/icons/move-ltr.svg",
                        "rtl": "images/icons/move-rtl.svg"
                } },
+               "notice": { "file": "images/icons/notice.svg" },
                "picture": { "file": "images/icons/picture.svg" },
                "previous": { "file": {
                        "ltr": "images/icons/move-rtl.svg",
index 9732802..3709f21 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
index 5b72d10..8d96876 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="settings">
-        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.805-1.28-1.51-2.087-2.086l-1.925 1.558c-.488-.28-1.015-.5-1.57-.648l-.26-2.463C12.996 3.053 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685c-.804.576-1.51 1.28-2.085 2.086l1.558 1.925c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.994.13 1.476l2.464.26c.15.555.367 1.08.648 1.57l-1.558 1.923c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.078.97.13 1.475.13s.994-.052 1.476-.13l.26-2.464c.555-.15 1.08-.367 1.57-.648l1.923 1.558c.805-.576 1.51-1.28 2.086-2.087l-1.558-1.925c.28-.488.5-1.015.648-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
+        <path id="gear" d="M20.87 13.476c.078-.482.13-.972.13-1.476s-.052-.994-.13-1.476l-2.464-.26c-.15-.555-.367-1.08-.648-1.57l1.558-1.923c-.576-.802-1.28-1.51-2.087-2.083L15.3 6.245c-.488-.28-1.015-.5-1.57-.648l-.26-2.463C12.996 3.054 12.506 3 12 3s-.994.052-1.476.13l-.26 2.464c-.554.15-1.08.367-1.57.648L6.772 4.685c-.804.576-1.51 1.28-2.085 2.086L6.245 8.7c-.28.488-.5 1.015-.648 1.57l-2.463.26c-.08.48-.132.97-.132 1.475s.052.995.13 1.477l2.464.26c.15.554.367 1.08.648 1.57l-1.558 1.92c.576.805 1.28 1.51 2.087 2.086l1.925-1.558c.488.28 1.015.5 1.57.648l.26 2.463c.48.075.97.13 1.475.13s.994-.055 1.476-.13l.26-2.467c.552-.15 1.08-.367 1.57-.648l1.92 1.558c.805-.576 1.51-1.28 2.086-2.087L17.758 15.3c.28-.487.5-1.014.647-1.57l2.463-.26zM12 15.998c-2.21 0-3.998-1.79-3.998-3.998S9.792 8.002 12 8.002s3.998 1.79 3.998 3.998-1.79 3.998-3.998 3.998z"/>
     </g>
 </svg>
index e98a14a..98e94fb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/alert.png and b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png differ
index 42a4bf6..8b601d5 100644 (file)
@@ -3,6 +3,6 @@
     <g id="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
         <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.496l7.52-13.026m0-2.474c-.544 0-1.088.357-1.5 1.07L2.532 18.403c-.825 1.43-.15 2.598 1.5 2.598H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.573c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
     </g>
 </svg>
index 3737ef8..114ce31 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png differ
index ba80ed0..1c2abb7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="arched-arrow-ltr">
-        <path id="arrow" d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.886.046-6.523 4.244-6.523 4.244s2.753-2.64 6.925-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.474 2.32 6.782-.01z"/>
+        <path id="arrow" d="M19.925 14.937l-2.39-6.9-1.48 2.328c-.965-.845-2.7-1.85-5.514-1.823-4.883.046-6.52 4.244-6.52 4.244s2.753-2.64 6.925-1.95c1.73.287 3.007 1.207 3.675 1.792l-1.475 2.32 6.782-.01z"/>
     </g>
 </svg>
index c2addd8..e9dce68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-ain.png differ
index ad6b3e4..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.126-.25.344-.664.65l-.09.067c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.698.006-1.354.567-2.573 1.685-3.658v-.044l-.606-.55c-.15-.18-.223-.39-.223-.63 0-.49.24-1.11.717-1.862.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.325.48-.03.552-1.064.22-.842-.327-1.527-.05-2.054.828l.015.074 1.123.865.052.006c1.404-.498 2.418-.74 3.043-.726-.058.117-.14.362-.243.733-.103.357-.204.684-.303.982l-.126.374-.384.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index ed491f3..46d579b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-arab-dad.png differ
index 27108e2..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.472 0-.983.205-1.533.616l-.506.38.007.024c1.084.066 1.934.1 2.55.1h.314c.568-.022.993-.065 1.277-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.295c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.064.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.68-.6 1.282-.902 1.807-.902.384.004.85.195 1.395.572.55.377.884.696 1 .958.063.15.094.386.094.71 0 .695-.11 1.228-.332 1.597-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.726.937-1.787 1.405-3.184 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index 718accb..5e16e38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-armn-to.png differ
index b55042a..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.275.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.217.176.394.29.53.12.135.248.23.384.29.14.05.276.076.406.076m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.347.49.737.64 1.17.15.432.226 1.093.226 1.61h1.354v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.814-.845 1.116-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.104-1.182.32-1.64c.212-.46.496-.685.85-.977.354-.297.76-.513 1.22-.648.457-.14.934-.21 1.43-.21h1.13c-.01-.49-.04-1.043-.24-1.36-.2-.323-.454-.58-.767-.766-.312-.193-.598-.332-.984-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 5c6f8c0..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.393-.255-1.065-.397-2.017-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index cfe0009..41e562b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-cyrl-zhe.png differ
index d26bdf6..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.118-.337.303-.452.552-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.276-.383.537-.738.78.44.157.8.466 1.084.927.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.275-.268-.622-.392-1.04-.222-.76-.39-1.266-.505-1.52-.11-.255-.26-.444-.45-.57-.187-.124-.493-.186-.918-.186L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index ceb792b..cc4be63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/apex/images/icons/bold-g.png differ
index dd6e27a..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.258-2.282.77-3.222.514-.94 1.266-1.66 2.256-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.824.603 1.353 1.436 1.59 2.502l-2.36.435c-.166-.57-.48-1.018-.94-1.346-.454-.333-1.023-.5-1.708-.5-1.038 0-1.864.325-2.48.974-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.492-.286.503-.195 1.332-.57 1.69-.845v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png
new file mode 100644 (file)
index 0000000..8b3ed72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-ltr.svg
new file mode 100644 (file)
index 0000000..121180e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png
new file mode 100644 (file)
index 0000000..8ec5023
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/calendar-rtl.svg
new file mode 100644 (file)
index 0000000..9b736bf
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+</svg>
index 00c8051..5d0bbd9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022C8.145 5.022 5.02 8.146 5.02 12c0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
+        <path id="circle-with-strike" d="M12 5.022c-3.855 0-6.98 3.124-6.98 6.978 0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
     </g>
 </svg>
index e924c44..f36e52c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/apex/images/icons/case-sensitive.png differ
index 3f0a3a5..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.657 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.082.92-.368.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.418-.418-.627-1.012-.627-1.784 0-.808.282-1.403.845-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.183-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.023 0 1.588.223 2.133.668.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.804.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .585.336.877 1.008.877.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 02c9bd8..d455904 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="check">
-        <path d="M7.105 13.473l1.422-1.423 1.9 1.902L15.238 7l1.658 1.148L10.635 17z"/>
+        <path d="M7.105 13.473l1.422-1.423 1.9 1.902L15.237 7l1.66 1.148L10.634 17z"/>
     </g>
 </svg>
index 4eedfbc..86dc8b3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/close.png and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
index f05a965..d058d65 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="close">
-        <path id="x" d="M18.717 6.697l-1.414-1.414L12 10.586 6.697 5.283 5.283 6.697 10.586 12l-5.303 5.303 1.414 1.414L12 13.414l5.303 5.303 1.414-1.414L13.414 12z"/>
+        <path id="cross" d="M17.717 7.697l-1.414-1.414L12 10.586 7.697 6.283 6.283 7.697 10.586 12l-4.303 4.303 1.414 1.414L12 13.414l4.303 4.303 1.414-1.414L13.414 12z"/>
     </g>
 </svg>
index ee58c9a..6e678e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/code.png and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
index 6e32d78..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.476.808-.585C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.304.238.758.238 1.485v1.862c0 .62.145.848.312 1.062.166.22.48.406.936.406L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 7e37682..1b1cb76 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="Layer_2">
         <g id="g184">
-            <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+            <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
         </g>
     </g>
 </svg>
index 0b4751d..84a6816 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="Layer_2">
         <g id="g184">
-            <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+            <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z" id="path186"/>
         </g>
     </g>
 </svg>
index 10927e1..4b59b2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-ltr.png differ
index e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index 7a3454e..2978654 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/external-link-rtl.png differ
index 60e6a0c..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.368 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index 4625881..9f418b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-ltr.png differ
index e97230c..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.374c.19.19.534.153.78-.094s.315-.59.126-.78l-2.374-2.376-.188-.094c.403-.566.656-1.282.656-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.802 1.843-1.814 1.843-1.01 0-1.844-.832-1.844-1.844s.832-1.814 1.844-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index ed8eea0..b63eb84 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/find-rtl.png differ
index ca03754..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.374c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78l2.374-2.376.188-.094c-.403-.566-.656-1.282-.656-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.802 1.843 1.814 1.843 1.01 0 1.844-.832 1.844-1.844s-.832-1.814-1.844-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index e5eb877..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.477 4.438 9.915 9.916 9.915 5.477 0 9.915-4.438 9.915-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index bf4f537..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.477-4.438 9.915-9.916 9.915-5.477 0-9.915-4.438-9.915-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index e9bbf95..0e177ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/history.png and b/resources/lib/oojs-ui/themes/apex/images/icons/history.png differ
index 019e558..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9L1.25 18.94h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.464 3.62-8.083 8.084-8.083 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.618 8.084-8.082 8.084-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index 3147340..6cff2ff 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="info">
         <path id="circled-i" d="M11.5 17C8.462 17 6 14.536 6 11.5 6 8.463 8.462 6 11.5 6c3.036 0 5.5 2.462 5.5 5.5 0 3.036-2.464 5.5-5.5 5.5zm0-12C7.91 5 5 7.91 5 11.5S7.91 18 11.5 18s6.5-2.91 6.5-6.5S15.09 5 11.5 5zm.5 5v4h1v1h-3v-1h1v-3h-1v-1zm-1-2h1v1h-1z"/>
     </g>
index f94928b..9f603ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-keheh-jeem.png differ
index 1c4aeb7..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.773.712-.874 1.125-.064.263-.035.572.063.78.188.406.538.575.843.814l.094-.124.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.563-.173.937-.14.29-.495.593-.886.906-1.314-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.356.026-.767.24-1.03.72-.246.447-.434.838-.656 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.232.205-.51.402-.72.563-.3.26-.702.687-.906 1-.403.614-.694 1.083-.875 1.78-.18.69.003 1.34.468 1.75.426.376.846.52 1.28.563.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.168-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.248.38.438.47.26.12.507.154.69.155 1.42.01 2.86 0 4.28 0 .247 0 .452-.163.594-.375.14-.208.25-.48.344-.844.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .376.286.75.556 1.095.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.094-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index a963197..03493be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-arab-meem.png differ
index 7b2670f..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.423-.638.698-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.01-.24-.054-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index e4f1bda..b5e55cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-armn-sha.png differ
index 67283c8..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.325 1.67-2.624-1.165c-.125-.058-.27-.103-.432-.134-.164-.04-.356-.058-.576-.058-.583 0-1.137.095-1.663.284-.525.19-1 .46-1.426.812-.42.35-.777.78-1.072 1.283-.294.505-.504 1.075-.63 1.71-.242 1.256-.152 2.21.268 2.87.426.65 1.19.977 2.294.977.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.025-1.214 1.424-.488.394-1.053.7-1.694.922-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index 1ba8613..f46dea5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-c.png differ
index 0ef7345..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.398 15.85 7 14.618 7 13.013c0-2.09.606-3.818 1.817-5.185C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.418-1.05-.626-1.78-.626-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.775 0 1.474-.26 2.1-.784.626-.522 1.08-1.26 1.366-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index 39b09a2..4ace3f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-d.png differ
index 6ac99ab..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.852 0 1.504.063 1.954.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.337-1.102.588-1.794.752-.526.126-1.172.188-1.94.188H7m1.86-1.36h1.866c.842 0 1.59-.078 2.245-.236.41-.098.757-.243 1.047-.434.38-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.246-.687.37-1.467.37-2.34 0-.97-.167-1.716-.5-2.235-.333-.524-.756-.87-1.27-1.04-.382-.126-.975-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index 72df8bb..f385149 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74L8.86 16.64H16.3L16.018 18H7"/>
+        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
     </g>
 </svg>
index 3ab33f2..7f9da2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-geor-kan.png differ
index a1a93dc..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.614c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.308 0 2.102-.723 2.384-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.928-.546-1.39-1.638-1.39h-1.117l.248-1.26h1.118c1.202-.005 1.908-.552 2.118-1.64.04-.182.058-.356.058-.522 0-1.143-.9-1.714-2.697-1.714L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index aafa618..4a7b1fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/apex/images/icons/italic-s.png differ
index 56e457b..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.657.302.86.207.195.733.407 1.58.634l.937.232c1.06.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.317-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.068-.28-1.8-.6-2.19-.962-.388-.367-.582-.878-.582-1.534 0-1.152.442-2.094 1.325-2.828.888-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index ebd11a2..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/language.png and b/resources/lib/oojs-ui/themes/apex/images/icons/language.png differ
index 549c303..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.966-.15 1.646-.333 2.038-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.244-.3-.363-.68-.363-1.132 0-.603.136-1.146.407-1.63.24-.452.603-.89 1.086-1.312.272-.24.725-.528 1.36-.86 0-.27.03-.8.09-1.585-.515.03-.922.045-1.223.045-.393 0-.71-.015-.95-.045l-.047-1.04c.725.09 1.494.134 2.31.134 0-.15.075-.738.227-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.242-.03.543-.075.906-.136.362-.06.573-.09.634-.09s.648-.15 1.766-.453l.046 1.04c-.967.244-2.145.44-3.532.592-.062.662-.092 1.085-.092 1.265.663-.15 1.284-.225 1.857-.225zm-2.672 3.893c-.06-.48-.135-1.252-.226-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.362 1.63-1.087zm.772-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index f1ac1e3..23c9539 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="link">
-        <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.097 0 1.988.917 1.988 2.017z"/>
+        <path id="right" d="M19.188 12c0 1.1-.89 2.016-1.988 2.016L13.005 14c.538 1.09.963 2 1.997 2h3C19.658 16 21 13.657 21 12s-1.342-4-2.998-4h-3c-1.034 0-1.46.91-1.998 2l4.195-.016c1.094 0 1.985.917 1.985 2.017z"/>
         <path id="center" d="M8 12c0 .535.42 1 .938 1h6.11c.517 0 .937-.465.937-1 0-.534-.42-1-.938-1h-6.11C8.42 11 8 11.466 8 12z"/>
         <path id="left" d="M4.816 12c0-1.1.89-2.016 1.988-2.016L11 10c-.54-1.09-.964-2-1.998-2h-3c-1.656 0-2.998 2.343-2.998 4s1.342 4 2.998 4h3c1.034 0 1.46-.91 1.998-2l-4.195.016c-1.098 0-1.99-.917-1.99-2.017z"/>
     </g>
index a7b7ae8..85baad2 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="lock">
         <path d="M12 6c-2.21 0-4 1.79-4 4v1H7v7h10v-7h-1v-1c0-2.21-1.79-4-4-4zm0 2c1.105 0 2 .895 2 2v1h-4v-1c0-1.105.895-2 2-2z"/>
index dbce05e..7aab217 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png differ
index 00583b4..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.413-6.715 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/notice.png b/resources/lib/oojs-ui/themes/apex/images/icons/notice.png
new file mode 100644 (file)
index 0000000..7d27f8e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/notice.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/notice.svg b/resources/lib/oojs-ui/themes/apex/images/icons/notice.svg
new file mode 100644 (file)
index 0000000..9334b50
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
+    <g id="alert">
+        <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
+    </g>
+</svg>
index 68bb9d7..00ace19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/apex/images/icons/regular-expression.png differ
index e9594a1..844013d 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312H4.766c-.574-.635-1.012-1.376-1.313-2.223-.3-.847-.45-1.758-.45-2.732"/>
+        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.477-1.992.14 1.307 1.74-1.33.71-.914-1.834-.802 1.822-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.138.61-.24-2.156h1.535"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.846-.737 1.584-1.307 2.21h-1.453c.527-.686.936-1.455 1.225-2.306.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.653 1.012 1.413 1.313 2.28.3.86.45 1.783.45 2.765"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index 39d3ab8..d6e3e8e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/search.png and b/resources/lib/oojs-ui/themes/apex/images/icons/search.png differ
index e683c01..137150b 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="search">
-        <path id="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.564 8 10.645 8c-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.543.143.79-.104s.293-.6.104-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.993-2.213 2.214-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.992 2.213-2.213 2.213z"/>
+        <path id="search" d="M16.02 15.96l-2.373-2.375-.17-.1c.404-.565.644-1.26.644-2.008C14.12 9.557 12.567 8 10.648 8 8.727 8 7.17 9.557 7.17 11.478c0 1.92 1.556 3.477 3.477 3.477.75 0 1.442-.24 2.01-.643l.098.17 2.375 2.373c.19.19.542.143.79-.104s.292-.6.103-.79zm-5.376-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.996-2.213 2.217-2.213 1.222 0 2.213.992 2.213 2.213 0 1.222-.993 2.213-2.214 2.213z"/>
     </g>
 </svg>
index 9a75454..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.483-.485 1.45-.487 1.933-.002.544.546.546 1.536.546 1.55V5H3.997z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 7ec6263..3799767 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0, 0, 24, 24">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="settings">
         <path id="gear" d="M3 4h3v2H3zm9 0h9v2h-9zM8 3h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1H8c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1zm-5 8h9v2H3zm15 0h3v2h-3zm-4-1h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1zM3 18h6v2H3zm12 0h6v2h-6zm-4-1h2c.552 0 1 .448 1 1v2c0 .552-.448 1-1 1h-2c-.552 0-1-.448-1-1v-2c0-.552.448-1 1-1z"/>
     </g>
index 2f38ecc..7f65881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/apex/images/icons/specialCharacter.png differ
index c2ffd48..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.127.513-.19 1.08-.19 1.7 0 .512.057 1 .173 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.604.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.508.407.893.92 1.155 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.378.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.403-.053.532-1.354h.605v3h-5l.247-3.036c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.946.183-1.46 0-.618-.064-1.185-.192-1.698-.128-.52-.348-.962-.66-1.327-.31-.372-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index 6408d01..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.476 0-.968-.074-1.468-.24-.502-.166-1.03-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 15de70b..3bfbd0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/tag.png and b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png differ
index 8e517bf..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index d9ff340..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.286 3zm-3.11-5L14.5 9.6l.323 3.4h-2.633z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 6f3da1e..f443f84 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="unLock">
         <path d="M8 6c-2.21 0-4 1.79-4 4v1h2v-1c0-1.105.895-2 2-2s2 .895 2 2v1H9v7h10v-7h-7v-1c0-2.21-1.79-4-4-4z"/>
index 96305a6..1aabf8b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="unLock">
         <path d="M15 6c2.21 0 4 1.79 4 4v1h-2v-1c0-1.105-.895-2-2-2s-2 .895-2 2v1h1v7H4v-7h7v-1c0-2.21 1.79-4 4-4z"/>
index 81713bd..f4add0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/apex/images/icons/underline-a.png differ
index ea7350b..1ddae10 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623l1.495-4.38 1.51 4.38h-3z"/>
+        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index d07129f..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.652-1.666.98-2.98.98-1.32 0-2.32-.326-2.996-.98C8.336 14.37 8 13.403 8 12.124V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index c4f7998..e0f13e6 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="ltr">
         <path id="arrow" d="M3 9V2l6 3.5z"/>
index b49613e..c88c364 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="rtl">
         <path id="arrow" d="M3 5.5L9 9V2z"/>
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png b/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png
new file mode 100644 (file)
index 0000000..5db444c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg b/resources/lib/oojs-ui/themes/apex/images/indicators/clear.svg
new file mode 100644 (file)
index 0000000..3c010c1
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="clear">
+        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
+    </g>
+</svg>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index cc1f377..2718a9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-ltr.png differ
index 9b49c4b..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.644l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zM4.99 7.204c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.212 2.212-2.212 1.222 0 2.213.992 2.213 2.213 0 1.223-.992 2.214-2.213 2.214z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index 5564b42..b7a8d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/apex/images/indicators/search-rtl.png differ
index 3847af2..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.644l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.212-2.212-2.212-1.222 0-2.213.992-2.213 2.213 0 1.223.992 2.214 2.213 2.214z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
     <g id="transparency">
         <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
         <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
index 0a9d1d2..9a9afa8 100644 (file)
@@ -3,6 +3,7 @@
        "intro": "@import '../../../../src/styles/common';",
        "images": {
                "alert": { "file": "images/indicators/alert.svg" },
+               "clear": { "file": "images/indicators/clear.svg" },
                "up": { "file": "images/indicators/arrow-up.svg" },
                "down": { "file": "images/indicators/arrow-down.svg" },
                "next": { "file": {
diff --git a/resources/lib/oojs-ui/themes/mediawiki/icons-accessibility.json b/resources/lib/oojs-ui/themes/mediawiki/icons-accessibility.json
new file mode 100644 (file)
index 0000000..ee1d0a5
--- /dev/null
@@ -0,0 +1,19 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "bright": { "file": "images/icons/bright.svg" },
+               "halfBright": { "file": "images/icons/halfBright.svg" },
+               "notBright": { "file": "images/icons/notBright.svg" },
+               "moon": { "file": "images/icons/moon.svg" },
+               "largerText": { "file": {
+                       "ltr": "images/icons/largerText-ltr.svg",
+                       "rtl": "images/icons/largerText-rtl.svg"
+               } },
+               "smallerText": { "file": {
+                       "ltr": "images/icons/smallerText-ltr.svg",
+                       "rtl": "images/icons/smallerText-rtl.svg"
+               } },
+               "visionSimulator": { "file": "images/icons/visionSimulator.svg" }
+       }
+}
index 0e1a8a1..ef368c2 100644 (file)
                "alignCentre": { "file": "images/icons/align-center.svg" },
                "alignLeft": { "file": "images/icons/align-float-left.svg" },
                "alignRight": { "file": "images/icons/align-float-right.svg" },
+               "calendar": { "file": {
+                       "ltr": "images/icons/calendar-ltr.svg",
+                       "rtl": "images/icons/calendar-rtl.svg"
+               } },
                "find": { "file": {
                        "ltr": "images/icons/find-ltr.svg",
                        "rtl": "images/icons/find-rtl.svg"
index 03aeb51..48af33a 100644 (file)
@@ -29,7 +29,7 @@
                        "lang": {
                                "ar": "images/icons/bold-arab-ain.svg",
                                "be": "images/icons/bold-cyrl-te.svg",
-                               "cs,en,he,ml,pl": "images/icons/bold-b.svg",
+                               "cs,en,he,ml,pl,sco": "images/icons/bold-b.svg",
                                "da,de,hu,ksh,nn,no,sv": "images/icons/bold-f.svg",
                                "es,gl,pt": "images/icons/bold-n.svg",
                                "eu,fi": "images/icons/bold-l.svg",
@@ -46,7 +46,7 @@
                        "default": "images/icons/italic-a.svg",
                        "lang": {
                                        "ar": "images/icons/italic-arab-meem.svg",
-                                       "cs,en,fr,he,ml,pl,pt": "images/icons/italic-i.svg",
+                                       "cs,en,fr,he,ml,pl,pt,sco": "images/icons/italic-i.svg",
                                        "be,da,de,fi,ky,nn,no,os,sv,ru": "images/icons/italic-k.svg",
                                        "es,gl,it,nl": "images/icons/italic-c.svg",
                                        "eu": "images/icons/italic-e.svg",
index ae6b09d..c507284 100644 (file)
@@ -37,7 +37,6 @@
                "viewDetails": { "file": {
                        "ltr": "images/icons/viewDetails-ltr.svg",
                        "rtl": "images/icons/viewDetails-rtl.svg"
-               } },
-               "visionSimulator": { "file": "images/icons/visionSimulator.svg" }
+               } }
        }
 }
index a311de0..a79b329 100644 (file)
@@ -1,6 +1,6 @@
 {
        "selectorWithoutVariant": ".oo-ui-icon-{name}",
-       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-icon-{name}, .oo-ui-image-{variant}.oo-ui-icon-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-icon-{name}",
        "intro": "@import '../../../../src/styles/common';",
        "variants": {
                "invert": {
@@ -50,6 +50,7 @@
                        "ltr": "images/icons/move-ltr.svg",
                        "rtl": "images/icons/move-rtl.svg"
                } },
+               "notice": { "file": "images/icons/notice.svg" },
                "picture": { "file": "images/icons/picture.svg" },
                "previous": { "file": {
                        "ltr": "images/icons/move-rtl.svg",
index 74cf62b..ba0b477 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
index 855b7b8..7813622 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-.995c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.098.9-.297 1.4-.595l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </svg>
index c486b98..c2a2e5e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
index cdf07b2..a68158d 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087 1.5-.995c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.098.9-.297 1.4-.595l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
+    <path d="M20 13.44v-2.88l-1.8-.3c-.1-.397-.3-.794-.6-1.39l1.1-1.49-2.1-2.088-1.5 1.093c-.5-.298-1-.497-1.4-.596L13.5 4h-2.9l-.3 1.79c-.5.098-.9.297-1.4.595L7.4 5.292 5.3 7.38l1 1.49c-.3.496-.4.894-.6 1.39l-1.7.2v2.882l1.8.298c.1.497.3.894.6 1.39l-1 1.492 2.1 2.087L9 17.61c.4.2.9.397 1.4.596l.3 1.79h3l.3-1.79c.5-.1.9-.298 1.4-.596l1.5 1.093L19 16.62l-1.1-1.49c.3-.496.5-.993.6-1.39l1.5-.3zm-8 1.492c-1.7 0-3-1.292-3-2.982 0-1.69 1.3-2.98 3-2.98s3 1.29 3 2.98-1.3 2.982-3 2.982z"/>
 </svg>
index 5440113..6071d88 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png differ
index d743519..55621b9 100644 (file)
@@ -3,6 +3,6 @@
     <g id="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
         <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.496l7.52-13.026m0-2.474c-.544 0-1.088.357-1.5 1.07L2.532 18.403c-.825 1.43-.15 2.598 1.5 2.598H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.573c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
     </g>
 </svg>
index fcf98c5..82bcd06 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-warning.png differ
index 1daa91f..bdf0ac2 100644 (file)
@@ -3,6 +3,6 @@
     <g id="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
         <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.496l7.52-13.026m0-2.474c-.544 0-1.088.357-1.5 1.07L2.532 18.403c-.825 1.43-.15 2.598 1.5 2.598H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.573c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
     </g>
 </svg>
index e98a14a..98e94fb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png differ
index 42a4bf6..8b601d5 100644 (file)
@@ -3,6 +3,6 @@
     <g id="alert">
         <path id="point" d="M11 16h2v2h-2z"/>
         <path id="stroke" d="M13.516 10h-3L11 15h2z"/>
-        <path id="triangle" d="M12.017 5.974L19.537 19H4.496l7.52-13.026m0-2.474c-.544 0-1.088.357-1.5 1.07L2.532 18.403c-.825 1.43-.15 2.598 1.5 2.598H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.573c-.413-.715-.956-1.072-1.5-1.072z"/>
+        <path id="triangle" d="M12.017 5.974L19.537 19H4.497l7.52-13.026m0-2.474c-.545 0-1.09.357-1.5 1.07L2.53 18.403C1.705 19.833 2.38 21 4.03 21H20c1.65 0 2.325-1.17 1.5-2.6L13.517 4.575c-.413-.715-.956-1.072-1.5-1.072z"/>
     </g>
 </svg>
index 37b57fe..327e1dd 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
index 5b29c98..df95976 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z" id="path3034"/>
 </svg>
index 7d2113f..649cd14 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
index 20835d2..9abef4f 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-472.8 494.7l6.3 5.7-6.3 5.7v-3.8h-1.3c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M13.3 6.3l6.3 5.7-6.3 5.7v-3.8H12c-3.2 0-6.3 1.3-7.6 3.8 0-4.7 2.8-7.6 7.9-7.6h.9V6.3z" id="path3034"/>
 </svg>
index a50b306..f04017c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
index 6f69940..d957f70 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z" id="path3034"/>
 </svg>
index ed69a01..d591768 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
index e919d37..6ec2fcc 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <path d="M-476.3 494.7l-6.3 5.7 6.3 5.7v-3.8h1.3c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9v-3.8z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M10.7 6.3L4.4 12l6.3 5.7v-3.8H12c3.2 0 6.3 1.3 7.6 3.8 0-4.7-2.8-7.6-7.9-7.6h-.9V6.3z" id="path3034"/>
 </svg>
index d46c11a..30d7d20 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain-invert.png differ
index da076ed..e1a7c67 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.126-.25.344-.664.65l-.09.067c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.698.006-1.354.567-2.573 1.685-3.658v-.044l-.606-.55c-.15-.18-.223-.39-.223-.63 0-.49.24-1.11.717-1.862.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.325.48-.03.552-1.064.22-.842-.327-1.527-.05-2.054.828l.015.074 1.123.865.052.006c1.404-.498 2.418-.74 3.043-.726-.058.117-.14.362-.243.733-.103.357-.204.684-.303.982l-.126.374-.384.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index c2addd8..e9dce68 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-ain.png differ
index ad6b3e4..23ed091 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-ain">
-        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.126-.25.344-.664.65l-.09.067c-1.235.93-2.422 1.393-3.56 1.393-1.142 0-2.045-.33-2.71-.99-.65-.66-.975-1.56-.975-2.698.006-1.354.567-2.573 1.685-3.658v-.044l-.606-.55c-.15-.18-.223-.39-.223-.63 0-.49.24-1.11.717-1.862.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.325.48-.03.552-1.064.22-.842-.327-1.527-.05-2.054.828l.015.074 1.123.865.052.006c1.404-.498 2.418-.74 3.043-.726-.058.117-.14.362-.243.733-.103.357-.204.684-.303.982l-.126.374-.384.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
+        <path id="arab-ain" d="M9.337 13.616c0 1.35 1.386 2.1 4.16 2.258l2.186-.03.318.045c-.03.123-.25.34-.66.65l-.09.064c-1.236.93-2.423 1.393-3.56 1.393-1.143 0-2.046-.33-2.71-.99-.65-.66-.976-1.56-.976-2.7.006-1.353.567-2.572 1.685-3.657v-.043l-.607-.55c-.15-.18-.222-.39-.222-.63 0-.49.24-1.11.718-1.863.65-1.046 1.303-1.566 1.958-1.56.886.004 1.618.42 2.194 1.245.324.48-.03.55-1.065.22-.842-.33-1.527-.05-2.054.826l.016.074 1.123.866.05.005c1.404-.496 2.418-.74 3.043-.724-.058.116-.14.36-.243.732-.105.357-.206.684-.305.982l-.126.373-.386.05c-1.743.24-2.992.716-3.745 1.43-.464.463-.698.972-.703 1.524"/>
     </g>
 </svg>
index eb0121d..9eb593b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad-invert.png differ
index 6493657..8b75d71 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.472 0-.983.205-1.533.616l-.506.38.007.024c1.084.066 1.934.1 2.55.1h.314c.568-.022.993-.065 1.277-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.295c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.064.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.68-.6 1.282-.902 1.807-.902.384.004.85.195 1.395.572.55.377.884.696 1 .958.063.15.094.386.094.71 0 .695-.11 1.228-.332 1.597-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.726.937-1.787 1.405-3.184 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index ed491f3..46d579b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-arab-dad.png differ
index 27108e2..7e6769d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-arab-dad">
-        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.472 0-.983.205-1.533.616l-.506.38.007.024c1.084.066 1.934.1 2.55.1h.314c.568-.022.993-.065 1.277-.132-.067-.17-.275-.36-.625-.566h-.006m-6.803 3.295c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.064.05c.496-.008.942-.17 1.338-.485v-.006l1.732-1.53c.68-.6 1.282-.902 1.807-.902.384.004.85.195 1.395.572.55.377.884.696 1 .958.063.15.094.386.094.71 0 .695-.11 1.228-.332 1.597-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.144.43c-.254.67-.463 1.112-.625 1.323-.726.937-1.787 1.405-3.184 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
+        <path id="arab-dad" d="M16.41 8.232l-1.675-.665L15.43 6l1.687.64-.707 1.592m.775 3.078c-.51-.286-1-.427-1.476-.423-.475 0-.986.205-1.536.616l-.506.38.006.024c1.084.066 1.934.1 2.55.1h.314c.57-.022.994-.065 1.278-.132-.067-.17-.275-.36-.625-.566h-.005M10.382 14.6c-.017-.904-.33-1.87-.938-2.898l1.294-1.73.118.15c.267.336.504.924.713 1.766l.065.05c.496-.007.942-.17 1.338-.484v-.006l1.732-1.53c.68-.6 1.282-.9 1.807-.9.384.003.85.194 1.395.57.55.378.884.697 1 .96.063.15.094.385.094.71 0 .694-.11 1.227-.33 1.596-.192.31-.473.555-.844.734-.438.208-1.55.312-3.333.312-.8 0-1.794-.02-2.982-.062l-.143.43c-.254.67-.463 1.112-.625 1.323-.725.937-1.786 1.405-3.183 1.405C5.85 16.99 5 16.076 5 14.256c.003-.94.278-1.814.824-2.618.15-.216.298-.367.444-.454.225-.133.288-.09.188.124-.396.862-.596 1.548-.6 2.058.008 1.177.752 1.768 2.232 1.772 1.038-.004 1.803-.182 2.295-.535"/>
     </g>
 </svg>
index 4dcdaa2..03a7931 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to-invert.png differ
index 6396571..0176bb2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.275.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.217.176.394.29.53.12.135.248.23.384.29.14.05.276.076.406.076m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.347.49.737.64 1.17.15.432.226 1.093.226 1.61h1.354v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.814-.845 1.116-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.104-1.182.32-1.64c.212-.46.496-.685.85-.977.354-.297.76-.513 1.22-.648.457-.14.934-.21 1.43-.21h1.13c-.01-.49-.04-1.043-.24-1.36-.2-.323-.454-.58-.767-.766-.312-.193-.598-.332-.984-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 718accb..5e16e38 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-armn-to.png differ
index b55042a..7471d1a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-armn-to">
-        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.275.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.217.176.394.29.53.12.135.248.23.384.29.14.05.276.076.406.076m-2.97-7.84c-.37.082-.695.247-.976.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.347.49.737.64 1.17.15.432.226 1.093.226 1.61h1.354v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.814-.845 1.116-.35.302-.834.53-1.297.687-.464.15-.953.226-1.47.226-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.313-.626-.703-.835-1.172-.203-.473-.304-1.028-.304-1.663s.104-1.182.32-1.64c.212-.46.496-.685.85-.977.354-.297.76-.513 1.22-.648.457-.14.934-.21 1.43-.21h1.13c-.01-.49-.04-1.043-.24-1.36-.2-.323-.454-.58-.767-.766-.312-.193-.598-.332-.984-.426-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.102z"/>
+        <path id="armn-to" d="M13.86 16.257c.124 0 .254-.026.39-.078.135-.06.257-.15.367-.278.114-.13.205-.302.273-.516.073-.214.11-.48.11-.798V13h-1.14c-.14 0-.284.026-.43.078-.14.047-.27.133-.383.258-.11.125-.2.294-.274.508-.067.213-.1.487-.1.82 0 .34.035.47.108.695.08.214.18.39.29.53.12.132.25.23.387.29.14.05.276.073.406.073m-2.97-7.84c-.37.082-.694.247-.975.45-.28.198-.505.47-.672.813-.16.342-.242.78-.242 1.31V18H6v-7.188c0-.776.15-1.455.453-2.04.302-.587.714-1.077 1.234-1.467.52-.39 1.13-.685 1.83-.883.697-.198 1.44-.297 2.225-.297.526 0 1.04.044 1.54.133.504.088.98.22 1.43.398.447.172.858.388 1.233.65.375.26.698.564.97.913.275.344.49.734.64 1.17.15.43.226 1.09.226 1.61h1.357v2.04H17.78v1.6c0 .58-.103 1.09-.31 1.54-.21.44-.49.81-.845 1.113-.35.302-.834.53-1.297.687-.464.15-.953.227-1.47.227-.51 0-.996-.08-1.46-.235-.464-.156-.87-.39-1.22-.703-.348-.315-.626-.705-.835-1.174-.203-.473-.304-1.028-.304-1.663s.1-1.182.32-1.64c.21-.46.493-.685.85-.977.35-.297.76-.513 1.22-.648.454-.14.93-.21 1.43-.21h1.13c-.01-.49-.04-1.044-.24-1.36-.2-.324-.457-.58-.77-.767-.31-.192-.598-.33-.984-.425-.375-.09-.578-.094-1.1-.094-.52 0-.64.02-1.01.103z"/>
     </g>
 </svg>
index 92aff6d..396215d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.393-.255-1.065-.397-2.017-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index 5c6f8c0..383ef32 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-be">
-        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.393-.255-1.065-.397-2.017-.397H10v3"/>
+        <path id="cyrl-be" d="M7 6h9v2h-6v3h2.65c.892 0 1.632.11 2.22.327.587.218 1.087.622 1.5 1.21.42.59.63 1.188.63 1.98 0 .812-.21 1.397-.63 1.976-.418.578-.897.974-1.436 1.187-.533.213-1.295.32-2.286.32h-5.65m4.768-2c.75 0 1.28-.05 1.584-.12.305-.077.57-.247.792-.51.23-.26.343-.472.343-.854 0-.557-.2-.868-.596-1.12-.396-.255-1.068-.397-2.02-.397H10v3"/>
     </g>
 </svg>
index b9154e5..e9cc60f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe-invert.png differ
index 98f4b55..3d7523a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.118-.337.303-.452.552-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.276-.383.537-.738.78.44.157.8.466 1.084.927.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.275-.268-.622-.392-1.04-.222-.76-.39-1.266-.505-1.52-.11-.255-.26-.444-.45-.57-.187-.124-.493-.186-.918-.186L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index cfe0009..41e562b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-cyrl-zhe.png differ
index d26bdf6..e349905 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-cyrl-zhe">
-        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.118-.337.303-.452.552-.115.25-.286.762-.512 1.537-.12.41-.25.755-.392 1.032-.137.276-.383.537-.738.78.44.157.8.466 1.084.927.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.275-.268-.622-.392-1.04-.222-.76-.39-1.266-.505-1.52-.11-.255-.26-.444-.45-.57-.187-.124-.493-.186-.918-.186L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
+        <path id="cyrl-zhe" d="M13 6v5.154c.328-.033.537-.18.705-.447.168-.266.4-.873.698-1.82.39-1.242.79-2.034 1.197-2.375.403-.336 1.075-.504 2.014-.504L18 6v1.78l-.386-.008c-.4 0-.69.062-.878.187-.186.115-.337.3-.452.55-.115.25-.286.76-.512 1.536-.12.41-.25.755-.392 1.032-.137.275-.383.536-.738.78.44.156.8.465 1.084.926.288.454.603 1.102.944 1.942L18 18h-2.314l-1.17-3.08-.113-.253-.24-.56c-.247-.57-.45-.933-.61-1.09-.16-.157-.318-.236-.553-.236V18h-2v-5.22c-.226 0-.382.077-.546.23-.164.15-.368.517-.612 1.097l-.246.56-.113.253L8.313 18H6l1.33-3.267c.327-.808.635-1.447.923-1.92.293-.476.663-.793 1.11-.95-.355-.244-.603-.5-.745-.772-.137-.272-.268-.62-.392-1.04-.222-.76-.39-1.263-.505-1.52-.11-.252-.26-.44-.45-.57-.184-.12-.49-.183-.915-.183L6 7.782v-1.78l.386.008c.953 0 1.63.17 2.034.512.4.347.79 1.136 1.177 2.366.3.954.534 1.564.698 1.83.168.26.377.405.705.438V6.002"/>
     </g>
 </svg>
index 37fd2b3..5dc39ee 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g-invert.png differ
index 0efd55a..88733e0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.258-2.282.77-3.222.514-.94 1.266-1.66 2.256-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.824.603 1.353 1.436 1.59 2.502l-2.36.435c-.166-.57-.48-1.018-.94-1.346-.454-.333-1.023-.5-1.708-.5-1.038 0-1.864.325-2.48.974-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.492-.286.503-.195 1.332-.57 1.69-.845v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
index ceb792b..cc4be63 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bold-g.png differ
index dd6e27a..05b46e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="bold-g">
-        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.258-2.282.77-3.222.514-.94 1.266-1.66 2.256-2.16.754-.386 1.693-.58 2.816-.58 1.46 0 2.6.304 3.418.91.824.603 1.353 1.436 1.59 2.502l-2.36.435c-.166-.57-.48-1.018-.94-1.346-.454-.333-1.023-.5-1.708-.5-1.038 0-1.864.325-2.48.974-.61.65-.914 1.612-.914 2.89 0 1.376.31 2.41.93 3.102.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.492-.286.503-.195 1.332-.57 1.69-.845v-.867"/>
+        <path id="g" d="M12 14v-2h5v4.203c-.497.475-1.22.894-2.166 1.26-.94.358-1.896.537-2.864.537-1.23 0-2.303-.253-3.217-.76-.915-.512-1.602-1.24-2.062-2.185-.46-.95-.69-1.982-.69-3.095 0-1.208.26-2.282.77-3.222.517-.94 1.27-1.66 2.26-2.16.753-.386 1.692-.58 2.815-.58 1.46 0 2.6.304 3.418.91.825.603 1.354 1.436 1.59 2.502l-2.36.435c-.165-.57-.48-1.018-.94-1.346-.453-.336-1.022-.5-1.707-.5-1.038 0-1.864.322-2.48.97-.61.65-.914 1.613-.914 2.89 0 1.377.31 2.41.93 3.103.62.686 1.434 1.03 2.44 1.03.497 0 .995-.096 1.49-.286.505-.196 1.334-.57 1.69-.846v-.866"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png
new file mode 100644 (file)
index 0000000..3e9e2f1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/bright.svg
new file mode 100644 (file)
index 0000000..2717b5a
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9-.3.3-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8z"/>
+    <g>
+        <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+    </g>
+    <path d="M12 8c1.7 0 3 1.3 3 3s-1.3 3-3 3-3-1.3-3-3 1.3-3 3-3m0-1c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png
new file mode 100644 (file)
index 0000000..330a53d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr-invert.svg
new file mode 100644 (file)
index 0000000..5eef30c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png
new file mode 100644 (file)
index 0000000..8b3ed72
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-ltr.svg
new file mode 100644 (file)
index 0000000..121180e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4 5v10c0 1.7 1.3 3 3 3h14V8c0-1.7-1.3-3-3-3H4zm2 1c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zm4 0c.552 0 1 .448 1 1s-.448 1-1 1-1-.448-1-1 .448-1 1-1zM5 9h3v2H5V9zm4 0h3v2H9V9zm4 0h3v2h-3V9zm4 0h3v2h-3V9zM5 12h3v2H5v-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2zM5 15h3v2H7c-1.195 0-2-.805-2-2zm4 0h3v2H9v-2zm4 0h3v2h-3v-2zm4 0h3v2h-3v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png
new file mode 100644 (file)
index 0000000..2f9c5ba
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl-invert.svg
new file mode 100644 (file)
index 0000000..f7202a9
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png
new file mode 100644 (file)
index 0000000..8ec5023
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/calendar-rtl.svg
new file mode 100644 (file)
index 0000000..9b736bf
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M21 5v10c0 1.7-1.3 3-3 3H4V8c0-1.7 1.3-3 3-3h14zm-2 1c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-4 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zM7 6c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm13 3h-3v2h3V9zm-4 0h-3v2h3V9zm-4 0H9v2h3V9zM8 9H5v2h3V9zm12 3h-3v2h3v-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2zm12 3h-3v2h1c1.195 0 2-.805 2-2zm-4 0h-3v2h3v-2zm-4 0H9v2h3v-2zm-4 0H5v2h3v-2z"/>
+</svg>
index 0858177..44cb3ff 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022C8.145 5.022 5.02 8.146 5.02 12c0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
+        <path id="circle-with-strike" d="M12 5.022c-3.855 0-6.98 3.124-6.98 6.978 0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
     </g>
 </svg>
index 00c8051..5d0bbd9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="cancel">
-        <path id="circle-with-strike" d="M12 5.022C8.145 5.022 5.02 8.146 5.02 12c0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
+        <path id="circle-with-strike" d="M12 5.022c-3.855 0-6.98 3.124-6.98 6.978 0 3.853 3.124 6.978 6.977 6.978s6.978-3.125 6.978-6.978c0-3.854-3.125-6.978-6.98-6.978zM6.885 12c0-1.092.572-3.25.93-2.93l7.113 7.114c.487.525-1.838.93-2.93.93-2.826 0-5.114-2.29-5.114-5.114zm9.298 2.93L9.07 7.815c-.445-.483 1.837-.93 2.93-.93 2.826 0 5.114 2.288 5.114 5.113 0 1.092-.364 3.542-.93 2.93z"/>
     </g>
 </svg>
index b6dd780..212e16d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive-invert.png differ
index d100b44..a90feeb 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.657 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.082.92-.368.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.418-.418-.627-1.012-.627-1.784 0-.808.282-1.403.845-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.183-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.023 0 1.588.223 2.133.668.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.804.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .585.336.877 1.008.877.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index e924c44..f36e52c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/case-sensitive.png differ
index 3f0a3a5..2f0e406 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.657 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
-        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.082.92-.368.167-.85.25-1.444.25-.564 0-.955-.208-1.377-.625-.418-.418-.627-1.012-.627-1.784 0-.808.282-1.403.845-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.183-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.023 0 1.588.223 2.133.668.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.804.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .585.336.877 1.008.877.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
+        <path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.654 7H7.533zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
+        <path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.443.25-.564 0-.955-.208-1.377-.625-.42-.418-.628-1.012-.628-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.395-1.158-1.186-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.665.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .582.336.874 1.008.874.48 0 .865-.138 1.152-.415.29-.277.436-.645.436-1.103v-.627"/>
     </g>
 </svg>
index 6d8abc3..32d5ae8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr-invert.png differ
index 89c5e25..cd7ce21 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M18.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index ea65697..b05cc97 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-ltr.png differ
index 4dfa16a..1427670 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M18.4 8.1c.8-.8.8-2 0-2.8L12 11.8 6.4 6.2 5 7.6l5.6 5.6-5 5c-.8.8-.8 2 0 2.8l6.4-6.4 5.6 5.6 1.4-1.4-5.6-5.6 5-5.1z"/>
+    <g id="close">
+        <path id="cross" d="M17.4 9.1c.8-.8.8-2 0-2.8L12 11.8 7.4 7.2 6 8.6l4.6 4.6-4 4c-.8.8-.8 2 0 2.8l5.4-5.4 4.6 4.6 1.4-1.4-4.6-4.6z"/>
+    </g>
 </svg>
index 004a518..731baf9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl-invert.png differ
index d20fff1..ee8a82d 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 1cb898d..3752520 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-rtl.png differ
index 3666a34..6e0ca93 100644 (file)
@@ -1,4 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5.6 8.1c-.8-.8-.8-2 0-2.8l6.4 6.5 5.6-5.6L19 7.6l-5.6 5.6 5 5c.8.8.8 2 0 2.8L12 14.6l-5.6 5.6L5 18.8l5.6-5.6-5-5.1z" id="path140"/>
+    <g id="close">
+        <path id="cross" d="M6.6 9.1c-.8-.8-.8-2 0-2.8l5.4 5.5 4.6-4.6L18 8.6l-4.6 4.6 4 4c.8.8.8 2 0 2.8L12 14.6l-4.6 4.6L6 17.8l4.6-4.6z"/>
+    </g>
 </svg>
index 23c5983..97e0c2c 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
index a816be8..d62d230 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.476.808-.585C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.304.238.758.238 1.485v1.862c0 .62.145.848.312 1.062.166.22.48.406.936.406L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index ee58c9a..6e678e2 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
index 6e32d78..d3893b0 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
     <g id="code">
-        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.476.808-.585C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.304.238.758.238 1.485v1.862c0 .62.145.848.312 1.062.166.22.48.406.936.406L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
+        <path id="left-bracket" d="M4 12v-1h1c1 0 1 0 1-1V7.614c0-.514.024-.896.073-1.142.054-.252.14-.463.257-.633.204-.28.473-.48.808-.588C7.473 5.14 8.01 5 8.973 5H10v1h-.752c-.457 0-.77.19-.936.408C8.145 6.623 8 6.853 8 7.476v1.857c0 .73-.04 1.18-.244 1.493-.2.307-.562.53-1.09.667.535.155.9.385 1.096.688.2.307.238.76.238 1.488v1.862c0 .62.145.847.312 1.06.166.22.48.407.936.407L10 17v1H8.973c-.963 0-1.5-.133-1.835-.248-.335-.11-.604-.307-.808-.59-.118-.166-.203-.375-.257-.626-.05-.253-.073-.636-.073-1.15V13c0-1 0-1-1-1H4z"/>
         <use transform="matrix(-1 0 0 1 24 0)" id="right-bracket" width="24" height="24" xlink:href="#left-bracket"/>
     </g>
 </svg>
index 30d1021..774d15a 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="Layer_2">
         <g id="g184">
-            <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+            <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
         </g>
     </g>
 </svg>
index 7e37682..1b1cb76 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="Layer_2">
         <g id="g184">
-            <path d="M21 4v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-1.5 0h-3v-1s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zm-6.5 5.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9v-1.8l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
+            <path d="M21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-1.5 0h-3V3s0-1.5 1.5-1.5c1.48.06 1.5 1.5 1.5 1.5zM13 9.6l-6.8 6.9c-.3-.3-.7-.6-1-.8 1.4-1.4 5-5 7.8-7.9V6l-9 9-1 5 5-1 8-8h-3z" id="path186"/>
         </g>
     </g>
 </svg>
index 0e975b5..2908444 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="Layer_2">
         <g id="g184">
-            <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+            <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z" id="path186"/>
         </g>
     </g>
 </svg>
index 0b4751d..84a6816 100644 (file)
@@ -2,7 +2,7 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="Layer_2">
         <g id="g184">
-            <path d="M4 4v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm1.5 0h3v-1s0-1.5-1.5-1.5c-1.48.06-1.5 1.5-1.5 1.5zm6.5 5.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9v-1.8l9 9 1 5-5-1-8-8h3z" id="path186"/>
+            <path d="M4 4V3s0-3 3-3 3 3 3 3v1h1v6H3V4zm1.5 0h3V3s0-1.5-1.5-1.5C5.52 1.56 5.5 3 5.5 3zM12 9.6l6.8 6.9c.3-.3.7-.6 1-.8-1.4-1.4-5-5-7.8-7.9V6l9 9 1 5-5-1-8-8h3z" id="path186"/>
         </g>
     </g>
 </svg>
index 3be50ba..eec3102 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr-invert.png differ
index 99ded02..0526f75 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index 10927e1..4b59b2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-ltr.png differ
index e836361..1d7980d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M2 2h3v1H3v6h6V7h1v3H2z"/>
-        <path id="arrow" d="M6.21 2H10v3.79L8.58 4.367 6.446 6.5 5.5 5.553 7.632 3.42z"/>
+        <path id="box" d="M4 4h6v2H6v12h12v-4h2v6H4z"/>
+        <path id="arrow" d="M12.42 4H20v7.58l-2.84-2.846L12.892 13 11 11.106l4.264-4.266z"/>
     </g>
 </svg>
index eaeaf6e..bf0ef13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl-invert.png differ
index fa3ffe0..d747aa6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.368 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index 7a3454e..2978654 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/external-link-rtl.png differ
index 60e6a0c..7e25d03 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="external">
-        <path id="box" d="M7 3h2v6H3V7H2v3h8V2H7z"/>
-        <path id="arrow" d="M2 5.79l1.42-1.422L5.554 6.5l.947-.947L4.368 3.42 5.788 2H2z"/>
+        <path id="box" d="M20 4h-6v2h4v12H6v-4H4v6h16z"/>
+        <path id="arrow" d="M11.58 4H4v7.58l2.84-2.846L11.108 13 13 11.106 8.736 6.84z"/>
     </g>
 </svg>
index 77778d8..010b224 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr-invert.png differ
index 4951ac6..5764ee6 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.374c.19.19.534.153.78-.094s.315-.59.126-.78l-2.374-2.376-.188-.094c.403-.566.656-1.282.656-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.802 1.843-1.814 1.843-1.01 0-1.844-.832-1.844-1.844s.832-1.814 1.844-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index 4625881..9f418b8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-ltr.png differ
index e97230c..67e6943 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.374c.19.19.534.153.78-.094s.315-.59.126-.78l-2.374-2.376-.188-.094c.403-.566.656-1.282.656-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.802 1.843-1.814 1.843-1.01 0-1.844-.832-1.844-1.844s.832-1.814 1.844-1.814z"/>
+        <path id="magnifying-glass" d="M13.656 11c-1.92 0-3.5 1.548-3.5 3.47 0 1.92 1.58 3.5 3.5 3.5.75 0 1.432-.253 2-.657l.094.156 2.375 2.37c.19.19.534.154.78-.093s.315-.59.126-.78l-2.37-2.377-.188-.093c.402-.567.655-1.283.655-2.03 0-1.92-1.55-3.47-3.47-3.47zm0 1.656c1.01 0 1.813.8 1.813 1.813 0 1.01-.805 1.84-1.817 1.84-1.01 0-1.844-.83-1.844-1.844s.832-1.814 1.844-1.814z"/>
         <path id="text" d="M6 5v2h10V5H6zm0 3v2h11V8H6zm0 3v2h3.53c.284-.797.787-1.486 1.44-2H6zm0 3v2h3.53c-.177-.48-.28-.99-.28-1.53 0-.16.046-.315.063-.47H6z"/>
     </g>
 </svg>
index d67357b..4a70b13 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl-invert.png differ
index 51b3d40..6854553 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.374c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78l2.374-2.376.188-.094c-.403-.566-.656-1.282-.656-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.802 1.843 1.814 1.843 1.01 0 1.844-.832 1.844-1.844s-.832-1.814-1.844-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
index ed8eea0..b63eb84 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/find-rtl.png differ
index ca03754..962165d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="find">
-        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.374c-.19.19-.534.153-.78-.094s-.315-.59-.126-.78l2.374-2.376.188-.094c-.403-.566-.656-1.282-.656-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.802 1.843 1.814 1.843 1.01 0 1.844-.832 1.844-1.844s-.832-1.814-1.844-1.814z"/>
+        <path id="magnifying-glass" d="M11.344 11c1.92 0 3.5 1.548 3.5 3.47 0 1.92-1.58 3.5-3.5 3.5-.75 0-1.432-.253-2-.657l-.094.156-2.375 2.37c-.19.19-.534.154-.78-.093s-.315-.59-.126-.78l2.37-2.377.188-.093c-.402-.567-.655-1.283-.655-2.03 0-1.92 1.55-3.47 3.47-3.47zm0 1.656c-1.01 0-1.813.8-1.813 1.813 0 1.01.805 1.84 1.817 1.84 1.01 0 1.844-.83 1.844-1.844s-.832-1.814-1.844-1.814z"/>
         <path id="text" d="M19 5v2H9V5zm0 3v2H8V8zm0 3v2h-3.53c-.284-.797-.787-1.486-1.44-2zm0 3v2h-3.53c.177-.48.28-.99.28-1.53 0-.16-.046-.315-.063-.47z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png
new file mode 100644 (file)
index 0000000..9332bea
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/halfBright.svg
new file mode 100644 (file)
index 0000000..fff92e7
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M11.4 5.4V2.2c.3 0 .6.1.9.4.3.3.4.5.4.8v2h-1.3zm-5.2-.5c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4-.3-.3-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9.3-.3.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8 0-.3.1-.6.3-.8zM12 7c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm-3 4c0-1.7 1.3-3 3-3v6c-1.7 0-3-1.3-3-3z"/>
+</svg>
index ccd9e96..fdefd97 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.477 4.438 9.915 9.916 9.915 5.477 0 9.915-4.438 9.915-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index e5eb877..825435d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.477 4.438 9.915 9.916 9.915 5.477 0 9.915-4.438 9.915-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c-5.477 0-9.915 4.438-9.915 9.916 0 5.48 4.438 9.918 9.916 9.918 5.48 0 9.918-4.438 9.918-9.914 0-5.477-4.438-9.915-9.914-9.915zm.002 18c-4.465 0-8.084-3.62-8.084-8.083 0-4.465 3.62-8.084 8.084-8.084 4.464 0 8.083 3.62 8.083 8.084 0 4.464-3.62 8.083-8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M11.766 6.688c-2.5 0-3.22 2.188-3.22 2.188l1.412.854s.298-.79.9-1.23c.517-.374 1.626-.624 2.22.126.7.885-.17 1.587-1.078 2.72C11.047 12.53 11 15 11 15h1.97s.134-2.318 1.04-3.38c.603-.708 1.443-1.34 1.443-2.495s-1.187-2.437-3.687-2.437z"/>
             <path id="bottom" d="M11 16h2v2h-2z"/>
index 0b02d6b..b369813 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.477-4.438 9.915-9.916 9.915-5.477 0-9.915-4.438-9.915-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index bf4f537..0d8052f 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="help">
-        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.477-4.438 9.915-9.916 9.915-5.477 0-9.915-4.438-9.915-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
+        <path id="circle" d="M12 2.085c5.477 0 9.915 4.438 9.915 9.916 0 5.48-4.438 9.918-9.916 9.918-5.48 0-9.918-4.438-9.918-9.914 0-5.477 4.438-9.915 9.914-9.915zm-.002 18c4.465 0 8.084-3.62 8.084-8.083 0-4.465-3.62-8.084-8.084-8.084-4.464 0-8.083 3.62-8.083 8.084 0 4.464 3.62 8.083 8.083 8.083z"/>
         <g id="question-mark">
             <path id="top" d="M12.234 6.688c2.5 0 3.22 2.188 3.22 2.188l-1.412.854s-.298-.79-.9-1.23c-.517-.374-1.626-.624-2.22.126-.7.885.17 1.587 1.078 2.72C12.953 12.53 13 15 13 15h-1.97s-.134-2.318-1.04-3.38c-.603-.708-1.443-1.34-1.443-2.495 0-1.156 1.187-2.437 3.687-2.437z"/>
             <path id="bottom" d="M13 16h-2v2h2z"/>
index a38092d..ea5a18e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history-invert.png differ
index 2a1db00..31287cd 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9L1.25 18.94h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.464 3.62-8.083 8.084-8.083 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.618 8.084-8.082 8.084-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index e9bbf95..0e177ab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/history.png differ
index 019e558..10d1b81 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="history">
         <path id="clock-hands" d="M17.26 15.076s-2.385-1.935-4.005-3.062c.72-2.397 1.702-6.56 1.702-6.56s-4.35 5.364-4.877 6.7c-.463 1.168 1.46 2.21 2.346 1.678 1.9.55 4.834 1.244 4.834 1.244z"/>
-        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9L1.25 18.94h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.464 3.62-8.083 8.084-8.083 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.618 8.084-8.082 8.084-1.145 0-2.228-.247-3.213-.678l-.833 1.634c1.235.557 2.602.874 4.045.874C17.563 21.914 22 17.476 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
+        <path id="arrow" d="M12.086 2.085C6.608 2.085 2.17 6.523 2.17 12c0 1.784.476 3.455 1.3 4.9l-2.22 2.04h5.688v-5.22L4.87 15.616c-.55-1.088-.866-2.312-.866-3.615 0-4.46 3.62-8.08 8.084-8.08 4.464 0 8.083 3.62 8.083 8.084 0 4.465-3.615 8.084-8.08 8.084-1.144 0-2.23-.247-3.212-.678l-.833 1.633c1.235.557 2.602.874 4.045.874C17.562 21.914 22 17.477 22 12c0-5.477-4.438-9.915-9.914-9.915z"/>
     </g>
 </svg>
index bfdcb1c..10d770a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M19.5 4h-3v-1s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zm1.5 0v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-8 7v-6h-11v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
+    <path d="M19.5 4h-3V3s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-8 7V5H2v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
 </svg>
index 8cec9f5..b41ff43 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M19.5 4h-3v-1s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zm1.5 0v-1s0-3-3-3-3 3-3 3v1h-1v6h8v-6zm-8 7v-6h-11v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
+    <path d="M19.5 4h-3V3s0-1.5 1.5-1.5c1.5.06 1.5 1.5 1.5 1.5zM21 4V3s0-3-3-3-3 3-3 3v1h-1v6h8V4zm-8 7V5H2v15h20v-9zm-9 7l4-5 2-1 4 4 2-2 4 4z" id="path304"/>
 </svg>
index 5136ef5..c821cd1 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M4.5 4h3v-1s0-1.5-1.5-1.5c-1.5.06-1.5 1.5-1.5 1.5zm-1.5 0v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm8 7v-6h11v15h-20v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
+    <path d="M4.5 4h3V3s0-1.5-1.5-1.5C4.5 1.56 4.5 3 4.5 3zM3 4V3s0-3 3-3 3 3 3 3v1h1v6H2V4zm8 7V5h11v15H2v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
 </svg>
index 6bb78f7..29004d4 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M4.5 4h3v-1s0-1.5-1.5-1.5c-1.5.06-1.5 1.5-1.5 1.5zm-1.5 0v-1s0-3 3-3 3 3 3 3v1h1v6h-8v-6zm8 7v-6h11v15h-20v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
+    <path d="M4.5 4h3V3s0-1.5-1.5-1.5C4.5 1.56 4.5 3 4.5 3zM3 4V3s0-3 3-3 3 3 3 3v1h1v6H2V4zm8 7V5h11v15H2v-9zm9 7l-4-5-2-1-4 4-2-2-4 4z" id="path304"/>
 </svg>
index 28f2b17..d899142 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem-invert.png differ
index 6e9a2ec..b359c47 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.773.712-.874 1.125-.064.263-.035.572.063.78.188.406.538.575.843.814l.094-.124.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.563-.173.937-.14.29-.495.593-.886.906-1.314-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.356.026-.767.24-1.03.72-.246.447-.434.838-.656 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.232.205-.51.402-.72.563-.3.26-.702.687-.906 1-.403.614-.694 1.083-.875 1.78-.18.69.003 1.34.468 1.75.426.376.846.52 1.28.563.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.168-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.248.38.438.47.26.12.507.154.69.155 1.42.01 2.86 0 4.28 0 .247 0 .452-.163.594-.375.14-.208.25-.48.344-.844.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .376.286.75.556 1.095.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.094-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index f94928b..9f603ea 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-keheh-jeem.png differ
index 1c4aeb7..99980c0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-keheh-jeem">
-        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.773.712-.874 1.125-.064.263-.035.572.063.78.188.406.538.575.843.814l.094-.124.53.625c.14.165.344.514.47.94.137.462.08.724 0 1.124H11.22c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.563-.173.937-.14.29-.495.593-.886.906-1.314-.98.037-1.878.015-2.688-.094-.346-.047-.698-.186-1.094-.156-.356.026-.767.24-1.03.72-.246.447-.434.838-.656 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.232.205-.51.402-.72.563-.3.26-.702.687-.906 1-.403.614-.694 1.083-.875 1.78-.18.69.003 1.34.468 1.75.426.376.846.52 1.28.563.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.384-1.47-.594-.27-.283-.306-.64-.155-1.22.036-.14.097-.322.25-.53.168-.228.364-.435.594-.656.45-.436 1.01-.737 1.46-.938-.044.205-.106.442-.054.687.05.23.248.38.438.47.26.12.507.154.69.155 1.42.01 2.86 0 4.28 0 .247 0 .452-.163.594-.375.14-.208.25-.48.344-.844.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.443-.673-.83-1-1.22 1.258-.814 2.717-1.238 3.97-1.687.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .376.286.75.556 1.095.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.094-.843z"/>
+        <path id="arab-keheh-jeem" d="M18.125 5.844c-1.695.555-3.297 1.162-4.594 1.938-.49.3-.77.712-.87 1.125-.065.263-.036.572.062.78.19.406.54.575.844.814l.094-.12.53.624c.14.165.344.514.47.94.137.462.08.724 0 1.124h-3.44c-.34 0-.593.007-.767-.02-.34-.053-.256-.208-.234-.34.33-.127.56-.173.934-.14.29-.495.593-.886.906-1.314-.98.037-1.877.015-2.687-.094-.346-.048-.698-.187-1.094-.157-.358.026-.77.24-1.03.72-.248.447-.436.838-.658 1.28l.75-.47c.23-.14.484-.226.72-.218.156.005.274.054.405.094-.233.203-.51.4-.72.56-.3.26-.703.69-.907 1-.402.616-.693 1.085-.874 1.78-.18.69.003 1.34.468 1.75.426.378.846.52 1.28.565.65.065 1.206.093 2-.188.658-.23 1.022-.553 1.5-.97-.882.11-1.816.09-2.53.032-.87-.07-1.268-.385-1.47-.595-.27-.283-.306-.64-.155-1.22.035-.14.096-.322.25-.53.17-.228.363-.435.593-.656.45-.437 1.01-.738 1.46-.94-.044.206-.106.443-.054.688.05.23.25.38.44.47.26.12.505.153.69.154 1.42.01 2.86 0 4.28 0 .245 0 .45-.163.592-.375.14-.21.25-.48.344-.845.13-.5.094-1.062-.094-1.625-.182-.543-.418-1.01-.72-1.406-.334-.442-.673-.83-1-1.22 1.258-.813 2.717-1.237 3.97-1.686.12-.452.224-.926.313-1.313zm-9.47 8.438c-.26.394-.583.69-.874 1 .38.286.75.556 1.098.813.335-.303.626-.674.875-.97-.39-.267-.77-.587-1.093-.843z"/>
     </g>
 </svg>
index 864e6e2..960653e 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem-invert.png differ
index 31b9be1..a0f9c0c 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.423-.638.698-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.01-.24-.054-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index a963197..03493be 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-arab-meem.png differ
index 7b2670f..a9c7def 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-arab-meem">
-        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.423-.638.698-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.638-.183 1.765-.293l.065-.128c.007-.11-.01-.24-.054-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.294 0-.915.268-1.864.805-.36.208-.376.125-.05-.247 1.557-1.71 2.707-2.566 3.45-2.566.382 0 .67.13.862.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
+        <path id="arab-meem" d="M16 9.73l-.93 2.19h-4.663c-.48 0-.857.12-1.135.366l-.06.11c-.185 2.016-.503 3.558-.956 4.627-.272.64-.633 1.252-1.082 1.833-.177.226-.22.186-.126-.12l.142-.503.17-.67.234-.87.002-.008.202-1.045.258-1.41.353-1.907c.19-.312.42-.638.695-.98.276-.342.59-.706.94-1.09.13-.092.697-.18 1.705-.266 1.05-.086 1.64-.183 1.766-.293l.065-.128c.01-.11-.01-.24-.052-.394-.044-.153-.12-.327-.232-.522-.22-.428-.438-.64-.654-.64-.293 0-.914.268-1.863.805-.36.208-.377.125-.05-.247 1.556-1.71 2.706-2.566 3.45-2.566.38 0 .67.13.86.394.135.195.25.6.344 1.21l.203 1.2c.105.586.24.895.408.925"/>
     </g>
 </svg>
index ce7b445..7f6d412 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha-invert.png differ
index 4f3621e..fd60619 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.325 1.67-2.624-1.165c-.125-.058-.27-.103-.432-.134-.164-.04-.356-.058-.576-.058-.583 0-1.137.095-1.663.284-.525.19-1 .46-1.426.812-.42.35-.777.78-1.072 1.283-.294.505-.504 1.075-.63 1.71-.242 1.256-.152 2.21.268 2.87.426.65 1.19.977 2.294.977.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.025-1.214 1.424-.488.394-1.053.7-1.694.922-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index e4f1bda..b5e55cc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-armn-sha.png differ
index 67283c8..a653a27 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-armn-sha">
-        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.325 1.67-2.624-1.165c-.125-.058-.27-.103-.432-.134-.164-.04-.356-.058-.576-.058-.583 0-1.137.095-1.663.284-.525.19-1 .46-1.426.812-.42.35-.777.78-1.072 1.283-.294.505-.504 1.075-.63 1.71-.242 1.256-.152 2.21.268 2.87.426.65 1.19.977 2.294.977.55 0 1.045-.08 1.48-.237.437-.156.815-.377 1.136-.66.326-.29.59-.633.796-1.033.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.025-1.214 1.424-.488.394-1.053.7-1.694.922-.643.215-1.344.323-2.106.323-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.273.66-1.835.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
+        <path id="armn-sha" d="M11.564 7.678c-.268-.13-.578-.22-.93-.268-.35-.047-.75-.07-1.197-.07h-1.11L8.587 6h1.723c.558 0 1.042.032 1.45.095.416.063.794.173 1.136.33l4.483 2.033-.328 1.67-2.624-1.165c-.126-.058-.27-.103-.433-.134-.164-.04-.356-.06-.576-.06-.583 0-1.137.094-1.663.283-.526.19-1 .46-1.427.812-.42.35-.776.78-1.07 1.283-.294.504-.504 1.074-.63 1.71-.24 1.255-.15 2.21.27 2.87.424.65 1.19.976 2.292.976.55 0 1.045-.08 1.48-.237.437-.157.815-.378 1.136-.66.325-.29.59-.634.795-1.034.21-.4.362-.84.457-1.323l.11-.56h1.6l-.12.59c-.13.674-.356 1.288-.676 1.845-.32.55-.725 1.024-1.214 1.423-.488.395-1.053.7-1.694.923-.643.216-1.344.324-2.106.324-.767 0-1.434-.114-2-.34-.568-.226-1.025-.554-1.372-.985-.347-.436-.573-.97-.678-1.607-.105-.637-.078-1.364.08-2.184.125-.66.346-1.274.66-1.836.316-.568.697-1.067 1.144-1.497.445-.436.944-.794 1.496-1.072.55-.283 1.13-.474 1.733-.574l-.466-.23"/>
     </g>
 </svg>
index a458be9..a2a2c82 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c-invert.png differ
index 8c51971..f2850c4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.398 15.85 7 14.618 7 13.013c0-2.09.606-3.818 1.817-5.185C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.418-1.05-.626-1.78-.626-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.775 0 1.474-.26 2.1-.784.626-.522 1.08-1.26 1.366-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index 1ba8613..f46dea5 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-c.png differ
index 0ef7345..0a0d110 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-c">
-        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.398 15.85 7 14.618 7 13.013c0-2.09.606-3.818 1.817-5.185C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.418-1.05-.626-1.78-.626-1.368 0-2.475.63-3.32 1.892-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.775 0 1.474-.26 2.1-.784.626-.522 1.08-1.26 1.366-2.216"/>
+        <path id="c" d="M15.008 13.718l1.48.214c-.467 1.34-1.15 2.354-2.045 3.04-.896.686-1.9 1.03-3.015 1.03-1.36 0-2.438-.43-3.237-1.29C7.4 15.85 7 14.618 7 13.012c0-2.09.606-3.817 1.817-5.184C9.897 6.61 11.237 6 12.84 6c1.186 0 2.145.33 2.878.99.738.66 1.165 1.546 1.282 2.66l-1.397.135c-.148-.84-.453-1.464-.916-1.876-.458-.42-1.05-.63-1.78-.63-1.368 0-2.475.63-3.32 1.893-.733 1.087-1.1 2.377-1.1 3.87 0 1.194.283 2.104.848 2.732.565.628 1.3.942 2.206.942.778 0 1.477-.26 2.1-.785.63-.522 1.08-1.26 1.37-2.216"/>
     </g>
 </svg>
index 093545c..33a41cb 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d-invert.png differ
index 63c2c9d..8ca4218 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.852 0 1.504.063 1.954.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.337-1.102.588-1.794.752-.526.126-1.172.188-1.94.188H7m1.86-1.36h1.866c.842 0 1.59-.078 2.245-.236.41-.098.757-.243 1.047-.434.38-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.246-.687.37-1.467.37-2.34 0-.97-.167-1.716-.5-2.235-.333-.524-.756-.87-1.27-1.04-.382-.126-.975-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index 39b09a2..4ace3f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-d.png differ
index 6ac99ab..feadca0 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-d">
-        <path id="d" d="M7 18L9.462 6h3.557c.852 0 1.504.063 1.954.188.644.17 1.194.472 1.65.91.456.43.8.97 1.03 1.62.23.65.346 1.378.346 2.186 0 .966-.145 1.847-.435 2.644-.284.79-.66 1.49-1.127 2.095-.46.6-.947 1.072-1.456 1.416-.504.337-1.102.588-1.794.752-.526.126-1.172.188-1.94.188H7m1.86-1.36h1.866c.842 0 1.59-.078 2.245-.236.41-.098.757-.243 1.047-.434.38-.246.727-.57 1.038-.974.408-.535.732-1.143.974-1.825.246-.687.37-1.467.37-2.34 0-.97-.167-1.716-.5-2.235-.333-.524-.756-.87-1.27-1.04-.382-.126-.975-.188-1.78-.188H11L9.095 16.64"/>
+        <path id="d" d="M7 18L9.462 6h3.557c.85 0 1.5.063 1.95.188.645.17 1.195.472 1.65.91.457.43.8.97 1.03 1.62.23.65.347 1.378.347 2.186 0 .966-.146 1.847-.436 2.644-.283.79-.66 1.49-1.126 2.095-.46.6-.947 1.072-1.456 1.416-.504.334-1.1.585-1.794.75-.526.125-1.172.19-1.94.19H7m1.86-1.36h1.866c.842 0 1.59-.08 2.245-.24.41-.097.76-.242 1.05-.433.38-.247.727-.57 1.038-.975.408-.535.732-1.143.974-1.825.247-.687.37-1.467.37-2.34 0-.97-.166-1.716-.5-2.235-.332-.524-.755-.87-1.27-1.04-.38-.126-.974-.188-1.78-.188H11L9.095 16.64"/>
     </g>
 </svg>
index 9d11112..f6c18e5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74L8.86 16.64H16.3L16.018 18H7"/>
+        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
     </g>
 </svg>
index 72df8bb..f385149 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-e">
-        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74L8.86 16.64H16.3L16.018 18H7"/>
+        <path id="e" d="M7 18L9.474 6H18l-.282 1.367H10.77L10.02 11h6.09l-.28 1.367H9.74l-.88 4.273h7.44L16.018 18H7"/>
     </g>
 </svg>
index 61ae2cc..68e90a9 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan-invert.png differ
index 256a8eb..8669961 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.614c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.308 0 2.102-.723 2.384-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.928-.546-1.39-1.638-1.39h-1.117l.248-1.26h1.118c1.202-.005 1.908-.552 2.118-1.64.04-.182.058-.356.058-.522 0-1.143-.9-1.714-2.697-1.714L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index 3ab33f2..7f9da2a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-geor-kan.png differ
index a1a93dc..65670ef 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-geor-kan">
-        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.614c-.055.26-.083.497-.083.712 0 .972.52 1.458 1.564 1.458 1.308 0 2.102-.723 2.384-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.928-.546-1.39-1.638-1.39h-1.117l.248-1.26h1.118c1.202-.005 1.908-.552 2.118-1.64.04-.182.058-.356.058-.522 0-1.143-.9-1.714-2.697-1.714L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
+        <path id="geor-kan" d="M15.057 14.663C14.617 16.888 13.223 18 10.88 18 8.96 18 8 17.213 8 15.64c0-.298.036-.624.108-.977.083-.43.245-.836.488-1.217l1.24.605-.206.617c-.055.26-.083.497-.083.712 0 .97.52 1.457 1.564 1.457 1.31 0 2.105-.723 2.387-2.17l.058-.33c.044-.222.066-.426.066-.614 0-.927-.546-1.39-1.64-1.39h-1.115l.248-1.26h1.118c1.203-.004 1.91-.55 2.12-1.64.04-.18.057-.355.057-.52 0-1.144-.9-1.715-2.697-1.715L11.94 6C14.646 6 16 6.877 16 8.627c0 .248-.027.516-.082.803-.204 1.092-1.05 1.824-2.54 2.194l-.033.166c1.23.2 1.845.823 1.845 1.872 0 .21-.025.433-.074.67l-.058.332"/>
     </g>
 </svg>
index a9a5e49..954bfbf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s-invert.png differ
index d5557d1..9515299 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.657.302.86.207.195.733.407 1.58.634l.937.232c1.06.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.317-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.068-.28-1.8-.6-2.19-.962-.388-.367-.582-.878-.582-1.534 0-1.152.442-2.094 1.325-2.828.888-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index aafa618..4a7b1fc 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/italic-s.png differ
index 56e457b..615e5f2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="italic-s">
-        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.657.302.86.207.195.733.407 1.58.634l.937.232c1.06.274 1.795.622 2.208 1.046.413.418.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.302-1.867-.55l.317-1.61c.573.355 1.147.624 1.72.805.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.464-.12-.815-.356-1.053-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.068-.28-1.8-.6-2.19-.962-.388-.367-.582-.878-.582-1.534 0-1.152.442-2.094 1.325-2.828.888-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.098 1.085.245 1.627.442"/>
+        <path id="s" d="M16.474 6.59l-.302 1.525c-.522-.28-1.04-.488-1.557-.628-.51-.145-1.007-.217-1.487-.217-.935 0-1.68.204-2.23.612-.554.408-.83.95-.83 1.627 0 .37.1.654.302.86.207.192.733.404 1.58.63l.937.233c1.06.274 1.795.622 2.208 1.046.413.42.62 1.007.62 1.766 0 1.167-.46 2.117-1.38 2.85-.913.734-2.12 1.1-3.617 1.1-.615 0-1.232-.06-1.852-.185-.62-.12-1.242-.3-1.867-.55l.314-1.61c.573.356 1.147.625 1.72.806.578.18 1.154.27 1.728.27.976 0 1.76-.216 2.347-.65.59-.434.883-1 .883-1.697 0-.465-.12-.816-.356-1.054-.233-.243-.737-.462-1.512-.658l-.937-.24c-1.07-.28-1.8-.6-2.19-.964-.39-.367-.584-.878-.584-1.534 0-1.152.442-2.094 1.325-2.828.89-.74 2.043-1.108 3.463-1.108.553 0 1.1.05 1.642.147.542.1 1.085.246 1.627.443"/>
     </g>
 </svg>
index fc0917e..ad816df 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language-invert.png differ
index 96a39e2..abc618e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.966-.15 1.646-.333 2.038-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.244-.3-.363-.68-.363-1.132 0-.603.136-1.146.407-1.63.24-.452.603-.89 1.086-1.312.272-.24.725-.528 1.36-.86 0-.27.03-.8.09-1.585-.515.03-.922.045-1.223.045-.393 0-.71-.015-.95-.045l-.047-1.04c.725.09 1.494.134 2.31.134 0-.15.075-.738.227-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.242-.03.543-.075.906-.136.362-.06.573-.09.634-.09s.648-.15 1.766-.453l.046 1.04c-.967.244-2.145.44-3.532.592-.062.662-.092 1.085-.092 1.265.663-.15 1.284-.225 1.857-.225zm-2.672 3.893c-.06-.48-.135-1.252-.226-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.362 1.63-1.087zm.772-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
index ebd11a2..b4f0875 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/language.png differ
index 549c303..956aba1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="language">
-        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.966-.15 1.646-.333 2.038-.545.454-.21.785-.48.998-.813.21-.303.314-.663.314-1.087 0-.482-.136-.905-.407-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.042.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.244-.3-.363-.68-.363-1.132 0-.603.136-1.146.407-1.63.24-.452.603-.89 1.086-1.312.272-.24.725-.528 1.36-.86 0-.27.03-.8.09-1.585-.515.03-.922.045-1.223.045-.393 0-.71-.015-.95-.045l-.047-1.04c.725.09 1.494.134 2.31.134 0-.15.075-.738.227-1.766l1.177.184c-.15.542-.256 1.04-.316 1.493.242-.03.543-.075.906-.136.362-.06.573-.09.634-.09s.648-.15 1.766-.453l.046 1.04c-.967.244-2.145.44-3.532.592-.062.662-.092 1.085-.092 1.265.663-.15 1.284-.225 1.857-.225zm-2.672 3.893c-.06-.48-.135-1.252-.226-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.195.137.316.137.364 0 .908-.362 1.63-1.087zm.772-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
+        <path id="japanese" d="M17.533 9.81l.27-.59 1.042.407-.18.363c.66.27 1.1.468 1.312.59.33.21.618.513.86.904.21.393.316.846.316 1.358 0 .786-.302 1.48-.905 2.083-.604.634-1.66 1.057-3.17 1.268-.12-.36-.257-.68-.407-.95.97-.15 1.65-.333 2.04-.545.455-.21.786-.48 1-.813.21-.303.313-.663.313-1.087 0-.482-.135-.905-.406-1.27-.33-.33-.8-.588-1.402-.77-.332.635-.648 1.118-.95 1.45-.242.332-.694.906-1.358 1.72.09.394.18.71.272.952l-1.043.362-.09-.498c-.424.36-.802.617-1.134.77-.36.15-.664.226-.905.226-.303 0-.574-.136-.814-.407-.243-.3-.362-.68-.362-1.132 0-.6.137-1.143.408-1.63.24-.45.603-.89 1.086-1.31.273-.24.726-.53 1.36-.86 0-.27.03-.8.09-1.584-.514.03-.92.045-1.222.045-.393 0-.71-.015-.95-.045l-.047-1.04c.726.09 1.495.134 2.31.134 0-.15.076-.74.228-1.767l1.177.184c-.15.542-.256 1.04-.316 1.493.24-.03.542-.077.905-.138.36-.06.573-.09.634-.09s.647-.15 1.765-.453l.045 1.04c-.966.242-2.144.44-3.53.59-.063.662-.093 1.085-.093 1.265.664-.15 1.285-.225 1.858-.225zm-2.672 3.893c-.06-.48-.132-1.252-.223-2.31-.573.424-1.04.86-1.403 1.313-.302.423-.45.875-.45 1.358 0 .24.043.438.135.588.09.092.194.137.315.137.364 0 .908-.365 1.63-1.09zm.775-2.763c0 .483.03 1.088.09 1.81.604-.904 1.057-1.598 1.36-2.08-.575.06-1.06.15-1.45.27z"/>
         <path id="english" d="M9.497 15.98h1.85L8.265 7.033h-1.85l-3.08 8.95h1.85L5.74 14h3.21l.547 1.98zm-3.49-3.376L7.34 8.822l1.343 3.782H6.008z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png
new file mode 100644 (file)
index 0000000..79a2824
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-ltr.svg
new file mode 100644 (file)
index 0000000..166ce47
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g>
+        <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png
new file mode 100644 (file)
index 0000000..79a2824
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/largerText-rtl.svg
new file mode 100644 (file)
index 0000000..166ce47
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g>
+        <path d="M20.8 20h-8.1v-.8c.4 0 .8-.1 1.3-.2s.8-.2.8-.4v-.2c0-.1 0-.2-.1-.3L13.4 15H8.3c-.1.3-.2.6-.4 1-.1.4-.3.7-.4 1-.1.4-.2.7-.2.8v.4c0 .2.2.4.5.6.3.2.9.3 1.7.3v.9H3.4v-.8c.2 0 .5-.1.8-.1.3-.1.5-.1.7-.2.3-.2.5-.4.7-.6.2-.3.4-.6.5-.9.8-2 1.6-3.9 2.4-5.9.8-2 1.7-4.1 2.7-6.5h2.1c1.4 3.3 2.4 6 3.2 7.9.8 1.9 1.4 3.6 2 4.8l.3.6c.1.2.3.3.6.5.2.1.4.2.7.3.3.1.5.1.7.1v.8zM13 14l-2.1-5.3L8.8 14H13z"/>
+    </g>
+</svg>
index ed0006c..ca5beaf 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr-invert.png differ
index 7b545ca..9cf9d28 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-471.2 493.6c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="g3097">
+        <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z" id="path3099"/>
     </g>
 </svg>
index 3db2467..25980e6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-ltr.png differ
index 0d3c186..dd3df73 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-471.2 493.6c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="g3097">
+        <path d="M15.387 4.33c-2.1 0-3.6 1.9-5.1 3.3.2 0 .5-.1.8-.1.5 0 1 .1 1.5.3.8-.8 1.6-1.7 2.8-1.7.6 0 1.3.3 1.8.7 1 1 1 2.6 0 3.6l-2.6 2.6c-.4.4-1.2.7-1.8.7-1.4 0-2.1-.9-2.6-2l-1.3 1.3c.8 1.5 2 2.6 3.8 2.6 1.2 0 2.3-.5 3-1.3l2.6-2.6c.9-.9 1.5-2 1.5-3.3-.2-2.2-2.2-4.1-4.4-4.1zm-4.3 12.1l-.9.9c-.4.4-1.2.7-1.8.7-.6 0-1.3-.3-1.8-.7-1-1-1-2.7 0-3.6l2.6-2.6c.4-.4 1.2-.7 1.8-.7 1.4 0 2.1 1 2.6 2l1.3-1.3c-.8-1.5-2-2.6-3.8-2.6-1.2 0-2.3.5-3 1.3l-2.6 2.6c-1.7 1.7-1.7 4.4 0 6 1.6 1.6 4.4 1.7 5.9 0l1.9-1.9c-.3.1-.6.1-.9.1-.5 0-.9 0-1.3-.2z" id="path3099"/>
     </g>
 </svg>
index 934cb4e..6e17f59 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
     <g id="g390">
-        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+        <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z" id="path392"/>
     </g>
 </svg>
index 7aed0f6..fd9359a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g390">
-        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+        <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z" id="path392"/>
     </g>
 </svg>
index 5945492..80d3ace 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g390">
-        <path d="M15 8s0-3-2.5-3-2.5 3-2.5 3v1h5zm2 0v1h2v10h-10c-1.7 0-3-1.3-3-3v-7h2v-1s0-5 4.5-5 4.5 5 4.5 5z" id="path392"/>
+        <path d="M15 8s0-3-2.5-3S10 8 10 8v1h5zm2 0v1h2v10H9c-1.7 0-3-1.3-3-3V9h2V8s0-5 4.5-5S17 8 17 8z" id="path392"/>
     </g>
 </svg>
index 64c2324..9e88270 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
     <g id="g390">
-        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+        <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z" id="path392"/>
     </g>
 </svg>
index 63cb2eb..bcb3f4f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="g390">
-        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+        <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z" id="path392"/>
     </g>
 </svg>
index 0591f66..21881e9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="g390">
-        <path d="M10 8s0-3 2.5-3 2.5 3 2.5 3v1h-5zm-2 0v1h-2v10h10c1.7 0 3-1.3 3-3v-7h-2v-1s0-5-4.5-5-4.5 5-4.5 5z" id="path392"/>
+        <path d="M10 8s0-3 2.5-3S15 8 15 8v1h-5zM8 8v1H6v10h10c1.7 0 3-1.3 3-3V9h-2V8s0-5-4.5-5S8 8 8 8z" id="path392"/>
     </g>
 </svg>
index 0246e4d..72bbf34 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
index 59885e9..3bda245 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
index de7b1d2..45daeab 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
index 9ef19fe..b84ab86 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="menu">
-        <path id="lines" d="M-481 505h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1h-12c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1h-12c-.6 0-1 .4-1 1z"/>
+        <path id="lines" d="M6 15.5h12c.6 0 1 .4 1 1v1c0 .6-.4 1-1 1H6c-.6 0-1-.4-1-1v-1c0-.6.4-1 1-1zm-1-4v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1zm0-5v1c0 .6.4 1 1 1h12c.6 0 1-.4 1-1v-1c0-.6-.4-1-1-1H6c-.6 0-1 .4-1 1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png
new file mode 100644 (file)
index 0000000..98df69c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/moon.svg
new file mode 100644 (file)
index 0000000..45b0050
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M19.1 17.5c-3.3 1.4-7.1-.2-8.5-3.5-1.4-3.3.2-7.1 3.5-8.5.2-.1.5-.2.7-.3-1.6-.4-3.2-.3-4.8.4C6 7.3 4 12 5.7 16c1.7 4.1 6.4 6 10.5 4.3 1.7-.7 3-1.9 3.8-3.4-.3.3-.6.4-.9.6z"/>
+</svg>
index e97d37b..db69b5a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png differ
index f8eadf9..9c859e4 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.413-6.715 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
index dbce05e..7aab217 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png differ
index 00583b4..35b6375 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="move-rtl">
-        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.414-1.413-6.715 6.716L13.65 19.2z"/>
+        <path id="arrow" d="M15.065 17.786l-5.302-5.303 5.302-5.302-1.415-1.41-6.714 6.717L13.65 19.2z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png
new file mode 100644 (file)
index 0000000..37145c7
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notBright.svg
new file mode 100644 (file)
index 0000000..dedbc2d
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png
new file mode 100644 (file)
index 0000000..ce1a278
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice-invert.svg
new file mode 100644 (file)
index 0000000..386ccc2
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116"><style>* { fill: #FFFFFF }</style>
+    <g id="alert">
+        <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png
new file mode 100644 (file)
index 0000000..7d27f8e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/notice.svg
new file mode 100644 (file)
index 0000000..9334b50
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" id="svg3116">
+    <g id="alert">
+        <path d="M12 18c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zm-1-5h2V8h-2zm0 3h2v-2h-2z" id="path3119"/>
+    </g>
+</svg>
index dbde6ed..472bb4f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr-invert.png differ
index e514672..9304bdb 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 5f14322..72c7e3d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-ltr.png differ
index c2925ca..4885f43 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
-    <g>
-        <path d="M-468.9 498.1c.2-.1.5-.2.6-.5s.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5s.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z"/>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="g3226">
+        <path d="M18.1 8.65c.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.7c-1 .2-1.5.2-2.6.6-.7.4-1.2.9-1.7 1.4-.5.5-1.9 2.6-1.9 5.8v3.1h4.7c.9 0 1.6-.7 1.6-1.6v-4.7h-3.1s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.1zm-11.2-.1c-.5.5-1.9 2.9-1.9 6v2.9h4.7c.9 0 1.6-.7 1.6-1.6v-4.7H8.2s.1-.7.6-1.4c.5-.5 1-.9 1.6-1.2.2-.1.5-.2.6-.5.1-.3.2-.5.2-.9v-.6c-1 .2-1.5.2-2.6.6-.6.4-1.2.9-1.7 1.4z" id="path3228"/>
     </g>
 </svg>
index 0b7d107..47fd687 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl-invert.png differ
index be46adf..f5dcce5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z"/>
     </g>
 </svg>
index e5039fc..2b4c8d7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/quotes-rtl.png differ
index dd7bfb1..91fe300 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-487 489 24 24">
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g>
-        <path d="M-479.5 499.3c.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7v-3.1c0-3.1-1.5-5.2-1.9-5.8-.5-.5-1-1-1.7-1.4-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6 0 1.1.4 1.6 1zm7.8-2.7c-1.1-.5-1.6-.5-2.6-.6v.8c0 .3.1.6.2.9s.4.4.6.5c.6.2 1.2.6 1.6 1.2.5.7.6 1.4.6 1.4h-3.1v4.7c0 .9.7 1.6 1.6 1.6h4.7V504c0-3.1-1.5-5.4-1.9-6-.4-.5-1-1-1.7-1.4z"/>
+        <path d="M5.9 8.65c-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.7c1 .2 1.5.2 2.6.6.7.4 1.2.9 1.7 1.4.5.5 1.9 2.6 1.9 5.8v3.1H6.6c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.1zm11.2-.1c.5.5 1.9 2.9 1.9 6v2.9h-4.7c-.9 0-1.6-.7-1.6-1.6v-4.7h3.1s-.1-.7-.6-1.4c-.5-.5-1-.9-1.6-1.2-.2-.1-.5-.2-.6-.5-.1-.3-.2-.5-.2-.9v-.6c1 .2 1.5.2 2.6.6.6.4 1.2.9 1.7 1.4z"/>
     </g>
 </svg>
index 215cea5..21b4d79 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression-invert.png differ
index 59e863b..5d2ff77 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312H4.766c-.574-.635-1.012-1.376-1.313-2.223-.3-.847-.45-1.758-.45-2.732"/>
+        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.477-1.992.14 1.307 1.74-1.33.71-.914-1.834-.802 1.822-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.138.61-.24-2.156h1.535"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.846-.737 1.584-1.307 2.21h-1.453c.527-.686.936-1.455 1.225-2.306.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.653 1.012 1.413 1.313 2.28.3.86.45 1.783.45 2.765"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index 68bb9d7..00ace19 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/regular-expression.png differ
index e9594a1..844013d 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="regular-expression">
-        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312H4.766c-.574-.635-1.012-1.376-1.313-2.223-.3-.847-.45-1.758-.45-2.732"/>
+        <path id="left-bracket" d="M3 12.045c0-.99.15-1.915.45-2.777.306-.862.743-1.618 1.314-2.268H6.23c-.552.72-.968 1.512-1.25 2.374-.28.862-.42 1.75-.42 2.66 0 .915.142 1.8.427 2.654.29.85.7 1.622 1.23 2.312h-1.45c-.575-.635-1.013-1.376-1.314-2.223-.3-.847-.45-1.758-.45-2.732"/>
         <path id="dot" d="M10 16c0 .552-.448 1-1 1s-1-.448-1-1 .448-1 1-1 1 .448 1 1z"/>
-        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.477-1.992.14 1.307 1.74-1.33.71-.914-1.834-.802 1.822-1.383-.697 1.295-1.74-1.98-.152.23-1.465 2.138.61-.24-2.156h1.535"/>
-        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.846-.737 1.584-1.307 2.21h-1.453c.527-.686.936-1.455 1.225-2.306.29-.855.434-1.74.434-2.66 0-.91-.14-1.797-.422-2.66-.28-.862-.697-1.654-1.248-2.374h1.465c.574.653 1.012 1.413 1.313 2.28.3.86.45 1.783.45 2.765"/>
+        <path id="star" d="M14.25 7.013l-.24 2.156 2.187-.61.193 1.474-1.992.14 1.307 1.74-1.33.71-.914-1.834-.8 1.823-1.382-.697 1.295-1.74-1.98-.152.23-1.465 2.14.61-.24-2.158h1.534"/>
+        <path id="right-bracket" d="M21 12.045c0 .982-.152 1.896-.457 2.744-.3.843-.737 1.58-1.307 2.21h-1.453c.527-.69.936-1.458 1.225-2.31.29-.854.434-1.74.434-2.66 0-.91-.14-1.796-.422-2.66-.28-.86-.697-1.653-1.248-2.373h1.465c.574.652 1.012 1.412 1.313 2.28.3.86.45 1.782.45 2.764"/>
     </g>
 </svg>
index 092200a..8660556 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.483-.485 1.45-.487 1.933-.002.544.546.546 1.536.546 1.55V5H3.997z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
index 9a75454..e064672 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="secure">
-        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.483-.485 1.45-.487 1.933-.002.544.546.546 1.536.546 1.55V5H3.997z"/>
+        <path id="lock" d="M8 5h.02v-.997c0-.057.003-1.41-.833-2.255-.434-.438-.998-.66-1.68-.66s-1.244.222-1.677.66c-.837.846-.833 2.198-.832 2.25V5H3c-.553 0-1 .447-1 1v3c0 .553.447 1 1 1h5c.553 0 1-.447 1-1V6c0-.553-.447-1-1-1zM3.998 5V3.993c0-.01.005-1 .543-1.543.486-.485 1.45-.487 1.936-.002.544.546.546 1.536.546 1.55V5H3.998z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png
new file mode 100644 (file)
index 0000000..63551b4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-ltr.svg
new file mode 100644 (file)
index 0000000..b3d2e94
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g>
+        <path d="M17.6 20h-5.4v-.5c.2 0 .5-.1.9-.1.3-.1.5-.2.5-.3V19s0-.1-.1-.2l-.8-2H9.3c-.1.2-.2.4-.3.7-.1.3-.2.5-.2.7-.1.3-.1.4-.2.6v.2c0 .1.1.3.3.4.2.1.6.2 1.1.2v.4H6v-.5c.2 0 .3 0 .5-.1.2 0 .3-.1.5-.2s.4-.2.5-.4l.3-.6c.5-1.3 1.1-2.6 1.6-3.9.5-1.3 1.1-2.7 1.8-4.3h1.4c.9 2.2 1.6 4 2.1 5.3.5 1.3 1 2.4 1.3 3.2.1.1.1.3.2.4.1.1.2.2.4.3.1.1.3.1.5.2s.3.1.5.1v.5zm-5.2-4L11 12.4 9.6 16h2.8z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png
new file mode 100644 (file)
index 0000000..a245556
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/smallerText-rtl.svg
new file mode 100644 (file)
index 0000000..34d46bc
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g>
+        <path d="M6 19.5c.1 0 .3 0 .5-.1s.3-.1.5-.2.3-.2.4-.3c.1-.1.2-.2.2-.4.4-.9.8-1.9 1.3-3.2.5-1.3 1.2-3.1 2.1-5.3h1.4c.7 1.6 1.2 3 1.8 4.3.5 1.3 1.1 2.6 1.6 3.9l.3.6c.1.2.3.3.5.4.1.1.3.1.5.2.2 0 .4.1.5.1v.5h-4v-.5c.5 0 .9-.1 1.1-.2.2-.1.3-.2.3-.4v-.2c0-.1-.1-.3-.2-.6-.1-.2-.2-.4-.2-.7-.1-.3-.2-.5-.3-.7h-3.4l-.8 2c0 .1-.1.1-.1.2v.1c0 .1.2.2.5.3.3.1.6.1.9.1v.6H6v-.5zm8-3.5l-1.4-3.6-1.4 3.6H14z"/>
+    </g>
+</svg>
index 17df47a..008efd0 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter-invert.png differ
index e88f51b..5f3d914 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.127.513-.19 1.08-.19 1.7 0 .512.057 1 .173 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.604.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.508.407.893.92 1.155 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.378.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.403-.053.532-1.354h.605v3h-5l.247-3.036c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.946.183-1.46 0-.618-.064-1.185-.192-1.698-.128-.52-.348-.962-.66-1.327-.31-.372-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index 2f38ecc..7f65881 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/specialCharacter.png differ
index c2ffd48..dbf6ed5 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="special-character">
-        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.127.513-.19 1.08-.19 1.7 0 .512.057 1 .173 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.604.044.75.035.457.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.508.407.893.92 1.155 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.378.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.092.894h.66l.447-.01.75-.034.606-.044.403-.053.532-1.354h.605v3h-5l.247-3.036c1.066-.11 1.337-.696 2.002-1.363.263-.36.452-.77.568-1.23.122-.46.183-.946.183-1.46 0-.618-.064-1.185-.192-1.698-.128-.52-.348-.962-.66-1.327-.31-.372-.73-.66-1.255-.867-.525-.206-1.1-.31-1.894-.31"/>
+        <path id="omega" d="M12 6.708c-.794 0-1.368.103-1.894.31-.525.207-.944.496-1.255.867-.31.366-.53.808-.66 1.327-.124.513-.19 1.08-.19 1.7 0 .512.06 1 .176 1.46.122.46.31.87.568 1.23.63.862 1.156 1.138 2.012 1.362L11 18H6v-3h.604l.53 1.353.395.053.6.044.75.035.458.01H10l-.09-.895c-.63-.094-.812-.268-1.337-.522-.525-.26-.98-.59-1.365-.99-.38-.402-.675-.868-.89-1.4-.213-.536-.32-1.13-.32-1.778 0-.82.13-1.537.394-2.15.27-.62.656-1.133 1.163-1.54.507-.407 1.133-.71 1.878-.912.745-.206 1.6-.31 2.565-.31.96 0 1.81.103 2.556.31.75.2 1.38.504 1.887.912.51.407.896.92 1.158 1.54.27.614.403 1.33.403 2.15 0 .65-.107 1.242-.32 1.78-.215.53-.514.996-.9 1.397-.38.4-.83.732-1.355.99-.525.255-.707.43-1.336.523l-.093.894h.66l.447-.01.75-.034.606-.044.4-.053.533-1.354H18v3h-5l.246-3.04c1.066-.11 1.337-.695 2.002-1.362.263-.36.452-.77.568-1.23.122-.46.183-.947.183-1.46 0-.62-.067-1.186-.195-1.7-.128-.52-.348-.96-.66-1.326-.31-.372-.73-.66-1.255-.867-.524-.206-1.1-.31-1.893-.31"/>
     </g>
 </svg>
index d4cea6e..fd1c16d 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.476 0-.968-.074-1.468-.24-.502-.166-1.03-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 6408d01..46092a6 100644 (file)
@@ -2,6 +2,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="strikethrough-s">
         <path id="strikethrough" d="M6 12h12v1H6v-1z"/>
-        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.476 0-.968-.074-1.468-.24-.502-.166-1.03-.417-1.562-.75l-.375-.238v2.158l.156.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.716-.148-1.204-.352-1.406-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.375.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
+        <path id="s" d="M12.094 6c-1.133 0-2.076.287-2.75.9-.67.613-1 1.49-1 2.52 0 .89.22 1.602.72 2.13.497.528 1.278.91 2.31 1.14l.813.182v-.03c.656.147 1.128.375 1.375.63.252.256.375.607.375 1.11 0 .573-.172.97-.53 1.26-.36.29-.895.45-1.626.45-.473 0-.965-.074-1.465-.24-.502-.166-1.03-.417-1.562-.75l-.374-.238v2.158l.155.062c.58.237 1.144.417 1.69.54.548.12 1.07.18 1.56.18 1.287 0 2.298-.293 3-.9.71-.605 1.063-1.486 1.063-2.608 0-.943-.256-1.726-.78-2.312-.522-.592-1.306-1-2.345-1.23l-.812-.18c-.715-.148-1.203-.352-1.405-.54-.205-.202-.312-.484-.312-.934 0-.533.162-.9.5-1.17.342-.27.836-.42 1.53-.42.396 0 .82.052 1.25.18.434.128.91.334 1.407.6l.374.18V6.63s-1.188-.383-1.688-.48c-.5-.097-.984-.15-1.468-.15z"/>
     </g>
 </svg>
index 6067a84..24e7133 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-constructive.png differ
index d53e332..aab025e 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #00AF89 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 6c6099e..d8571fe 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-destructive.png differ
index 710a19a..1fe8f5a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 80c5e8c..1d59c50 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png differ
index d42ac07..394e431 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 7b4e2f9..b2c39f7 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-progressive.png differ
index 49dde93..0f140c3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #347BFF }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 844cc18..1049e15 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-warning.png differ
index 3fe96f5..ed26598 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FF5D00 }</style>
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index 15de70b..3bfbd0b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png differ
index 8e517bf..5265e04 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="tag">
-        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.388-.707-1.156-.707-1.706V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.708.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.576 1.515.576 2.094 0 .576-.578.576-1.517 0-2.095-.58-.576-1.518-.577-2.094 0z"/>
+        <path d="M18.748 11.717c.39.39.39 1.025 0 1.414l-4.95 4.95c-.388.39-1.024.39-1.413 0l-6.01-6.01c-.39-.385-.707-1.153-.707-1.703V6c0-.55.45-1 1-1h4.363c.55 0 1.32.318 1.71.707l6.01 6.01zM8.104 7.457c-.58.575-.578 1.513 0 2.092.577.573 1.515.573 2.094 0 .576-.58.576-1.52 0-2.098-.58-.576-1.518-.577-2.094 0z"/>
     </g>
 </svg>
index baf5c14..0367cfe 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.286 3zm-3.11-5L14.5 9.6l.323 3.4h-2.633z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index d9ff340..466672e 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="text-style">
-        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.286 3zm-3.11-5L14.5 9.6l.323 3.4h-2.633z"/>
+        <path id="a" d="M15.296 18h2.79l-1.14-12h-2.79L6 18h2.79l2.038-3h4.183l.29 3zm-3.11-5L14.5 9.6l.323 3.4H12.19z"/>
         <path id="underline" d="M6 19h12v1H6v-1z"/>
     </g>
 </svg>
index 97fcdc4..9629e8f 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
-    <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z" id="path726"/>
 </svg>
index b496a06..ef4247a 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z" id="path726"/>
 </svg>
index 66c024a..cf12ece 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M12 9v-2s0-5-4.5-5-4.5 5-4.5 5h2s0-3 2.5-3 2.5 3 2.5 3v2h-3v7c0 1.7 1.3 3 3 3h10v-10z" id="path726"/>
+    <path d="M12 9V7s0-5-4.5-5S3 7 3 7h2s0-3 2.5-3S10 7 10 7v2H7v7c0 1.7 1.3 3 3 3h10V9z" id="path726"/>
 </svg>
index a52f0fe..73e0db1 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #D11D13 }</style>
-    <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z" id="path726"/>
 </svg>
index 814af1d..ce5f164 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z" id="path726"/>
 </svg>
index 07cecbf..0004535 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M11 9v-2s0-5 4.5-5 4.5 5 4.5 5h-2s0-3-2.5-3-2.5 3-2.5 3v2h3v7c0 1.7-1.3 3-3 3h-10v-10z" id="path726"/>
+    <path d="M11 9V7s0-5 4.5-5S20 7 20 7h-2s0-3-2.5-3S13 7 13 7v2h3v7c0 1.7-1.3 3-3 3H3V9z" id="path726"/>
 </svg>
index 00913f7..b12856d 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a-invert.png differ
index 4ee0553..3581c57 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623l1.495-4.38 1.51 4.38h-3z"/>
+        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 81713bd..f4add0a 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/underline-a.png differ
index ea7350b..1ddae10 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-a">
-        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623l1.495-4.38 1.51 4.38h-3z"/>
+        <path id="a" d="M14.424 16H16.5L13.037 6H10.96L7.5 16h2.077l.627-2h3.604l.616 2zm-3.92-3.623L12 7.997l1.51 4.38h-3z"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index 5f841f9..c998822 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.652-1.666.98-2.98.98-1.32 0-2.32-.326-2.996-.98C8.336 14.37 8 13.403 8 12.124V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
index d07129f..f5aaf5d 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <g id="underline-u">
-        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.652-1.666.98-2.98.98-1.32 0-2.32-.326-2.996-.98C8.336 14.37 8 13.403 8 12.124V6"/>
+        <path id="u" d="M8 6h2v5.96c-.104 1.706.695 2 2 2.04 1.777.062 2.002-.88 2-2.04V6h2v6.123c0 1.28-.338 2.245-1.016 2.898-.672.655-1.666.98-2.98.98-1.32 0-2.32-.323-2.996-.98C8.336 14.37 8 13.406 8 12.127V6"/>
         <path id="underline" d="M7 17h10v1H7v-1z"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png
deleted file mode 100644 (file)
index 118e468..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/visionSimulator-invert.svg
deleted file mode 100644 (file)
index ae0d94e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #FFFFFF }</style>
-    <path d="M0 10v8h2.3c.3.6 1 1 1.7 1h4c1.5 0 2.7-.8 3-2h2c.3 1.2 1.5 2 3 2h4c.7 0 1.4 0 1.7-1H24v-8zm10 6c0 1-.4 2-2 2H4c-.6 0-1-.4-1-1v-3c0-.6.4-1 1-1h5c.6 0 1 .4 1 1zm11 1c0 .6-.4 1-1 1h-4c-1.6 0-2-1-2-2v-2c0-.6.4-1 1-1h5c.6 0 1 .4 1 1z"/>
-</svg>
index 3207aaf..0d17c02 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index cddc0db..868bcc9 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="alert">
         <path d="M6 12c-3.314 0-6-2.686-6-6s2.686-6 6-6 6 2.686 6 6-2.686 6-6 6zM5 7h2V2H5zm0 3h2V8H5z"/>
index f18841d..fcb50d6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
index 6330d97..7567b5d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 15ec586..034fe2b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
index d8979ae..f5c76f3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="down">
-        <path id="arrow" d="M883.3 341H116.7L500 724.3 883.3 341"/>
+        <path id="arrow" d="M1 4h10L6 9 1 4"/>
     </g>
 </svg>
index 476dbcc..63384fa 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index d824ff1..059372d 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="ltr">
-        <path id="arrow" d="M-489 496v10l5-5-5-5"/>
+        <path id="arrow" d="M4 1v10l5-5-5-5"/>
     </g>
 </svg>
index 276052b..a9e9ce3 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index 88ad88b..c6498e8 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="rtl">
-        <path id="arrow" d="M-485 506v-10l-5 5 5 5"/>
+        <path id="arrow" d="M8 11V1L3 6l5 5"/>
     </g>
 </svg>
index e33ba06..2d11d4f 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12"><style>* { fill: #FFFFFF }</style>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
index 0640cc3..5eada07 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="-493 495 12 12">
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="up">
-        <path id="arrow" d="M-492 503h10l-5-5-5 5"/>
+        <path id="arrow" d="M1 8h10L6 3 1 8"/>
     </g>
 </svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png
new file mode 100644 (file)
index 0000000..d68353b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear-invert.svg
new file mode 100644 (file)
index 0000000..5b03054
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
+    <g id="clear">
+        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png
new file mode 100644 (file)
index 0000000..5db444c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/clear.svg
new file mode 100644 (file)
index 0000000..3c010c1
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+    <g id="clear">
+        <path id="circle-with-cross" d="M6 0C2.7 0 0 2.7 0 6s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zM3.5 2.5L6 5l2.5-2.5 1 1L7 6l2.5 2.5-1 1L6 7 3.5 9.5l-1-1L5 6 2.5 3.5z"/>
+    </g>
+</svg>
index 0d2e79a..4068699 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index 051ed5f..d1e0cba 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="required">
         <path d="M5 1h2v10H5zm4.83 1.634l1 1.732-8.66 5-1-1.732zM1.17 4.366l1-1.732 8.66 5-1 1.732z"/>
index b04b92a..68fcab8 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr-invert.png differ
index 2348e8e..cf4de68 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.644l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zM4.99 7.204c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.212 2.212-2.212 1.222 0 2.213.992 2.213 2.213 0 1.223-.992 2.214-2.213 2.214z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index cc1f377..2718a9b 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-ltr.png differ
index 9b49c4b..9b3c199 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.644l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zM4.99 7.204c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.212 2.212-2.212 1.222 0 2.213.992 2.213 2.213 0 1.223-.992 2.214-2.213 2.214z"/>
+        <path id="path3051" d="M10.37 9.474L7.994 7.1l-.17-.1c.404-.566.644-1.26.644-2.01-.002-1.92-1.56-3.476-3.478-3.476-1.92 0-3.478 1.557-3.478 3.478 0 1.92 1.557 3.477 3.478 3.477.75 0 1.442-.24 2.01-.647l.098.17 2.375 2.373c.19.188.543.142.79-.105s.293-.6.104-.79zm-5.38-2.27c-1.22 0-2.213-.99-2.213-2.213 0-1.22.99-2.21 2.212-2.21 1.22 0 2.21.99 2.21 2.214s-.99 2.213-2.21 2.213z"/>
     </g>
 </svg>
index acabbbd..c8ebef4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl-invert.png differ
index d57b976..41fe9bd 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><style>* { fill: #FFFFFF }</style>
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.644l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.212-2.212-2.212-1.222 0-2.213.992-2.213 2.213 0 1.223.992 2.214 2.213 2.214z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index 5564b42..b7a8d22 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/search-rtl.png differ
index 3847af2..3201301 100644 (file)
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
     <g id="search">
-        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.644l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.212-2.212-2.212-1.222 0-2.213.992-2.213 2.213 0 1.223.992 2.214 2.213 2.214z"/>
+        <path id="path3051" d="M1.63 9.474L4.006 7.1l.17-.1c-.404-.566-.644-1.26-.644-2.01.002-1.92 1.56-3.476 3.478-3.476 1.92 0 3.478 1.557 3.478 3.478 0 1.92-1.557 3.477-3.478 3.477-.75 0-1.442-.24-2.01-.647l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27c1.22 0 2.213-.99 2.213-2.213 0-1.22-.99-2.21-2.21-2.21S4.8 3.77 4.8 4.995 5.79 7.207 7.01 7.207z"/>
     </g>
 </svg>
index e413e75..cadec2a 100644 (file)
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0, 0, 16, 16">
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
     <g id="transparency">
         <path d="M0 0h8v8H0zm8 8h8v8H8z" fill="#ccc"/>
         <path d="M8 0h8v8H8zM0 8h8v8H0z" fill="#fff"/>
index d83e57e..5a83258 100644 (file)
@@ -1,6 +1,6 @@
 {
        "selectorWithoutVariant": ".oo-ui-indicator-{name}",
-       "selectorWithVariant": ".oo-ui-image-{variant} .oo-ui-indicator-{name}, .oo-ui-image-{variant}.oo-ui-indicator-{name}",
+       "selectorWithVariant": ".oo-ui-image-{variant}.oo-ui-indicator-{name}",
        "intro": "@import '../../../../src/styles/common';",
        "variants": {
                "invert": {
@@ -10,6 +10,7 @@
        },
        "images": {
                "alert": { "file": "images/indicators/alert.svg" },
+               "clear": { "file": "images/indicators/clear.svg" },
                "up": { "file": "images/indicators/arrow-up.svg" },
                "down": { "file": "images/indicators/arrow-down.svg" },
                "next": { "file": {
index d87183e..9395ecf 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.1.7 optimised for jQuery
+ * OOjs v1.1.9 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2015 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2015-04-29T01:13:49Z
+ * Date: 2015-08-25T21:35:29Z
  */
 ( function ( global ) {
 
@@ -22,7 +22,21 @@ var
        oo = {},
        // Optimisation: Local reference to Object.prototype.hasOwnProperty
        hasOwn = oo.hasOwnProperty,
-       toString = oo.toString;
+       toString = oo.toString,
+       // Object.create() is impossible to fully polyfill, so don't require it
+       createObject = Object.create || ( function () {
+               // Reusable constructor function
+               function Empty() {}
+               return function ( prototype, properties ) {
+                       var obj;
+                       Empty.prototype = prototype;
+                       obj = new Empty();
+                       if ( properties && hasOwn.call( properties, 'constructor' ) ) {
+                               obj.constructor = properties.constructor.value;
+                       }
+                       return obj;
+               };
+       } )();
 
 /* Class Methods */
 
@@ -88,7 +102,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
        // allows people to comply with their style guide.
        targetFn['super'] = targetFn.parent = originFn;
 
-       targetFn.prototype = Object.create( originFn.prototype, {
+       targetFn.prototype = createObject( originFn.prototype, {
                // Restore constructor property of targetFn
                constructor: {
                        value: targetConstructor,
@@ -100,7 +114,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
 
        // Extend static properties - always initialize both sides
        oo.initClass( originFn );
-       targetFn.static = Object.create( originFn.static );
+       targetFn.static = createObject( originFn.static );
 };
 
 /**
@@ -242,7 +256,7 @@ oo.setProp = function ( obj ) {
 oo.cloneObject = function ( origin ) {
        var key, r;
 
-       r = Object.create( origin.constructor.prototype );
+       r = createObject( origin.constructor.prototype );
 
        for ( key in origin ) {
                if ( hasOwn.call( origin, key ) ) {
@@ -698,12 +712,9 @@ oo.isPlainObject = $.isPlainObject;
        /**
         * Emit an event.
         *
-        * TODO: Should this be chainable? What is the usefulness of the boolean
-        * return value here?
-        *
         * @param {string} event Type of event
         * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
-        * @return {boolean} If event was handled by at least one listener
+        * @return {boolean} Whether the event was handled by at least one listener
         */
        oo.EventEmitter.prototype.emit = function ( event ) {
                var args = [],
@@ -894,6 +905,8 @@ oo.Registry.prototype.lookup = function ( name ) {
        }
 };
 
+/*global createObject */
+
 /**
  * @class OO.Factory
  * @extends OO.Registry
@@ -994,7 +1007,7 @@ oo.Factory.prototype.create = function ( name ) {
        // the constructor's prototype (which also makes it an "instanceof" the constructor),
        // then invoke the constructor with the object as context, and return it (ignoring
        // the constructor's return value).
-       obj = Object.create( constructor.prototype );
+       obj = createObject( constructor.prototype );
        constructor.apply( obj, args );
        return obj;
 };
index 1ac34a5..92f8eb9 100644 (file)
@@ -150,14 +150,14 @@ function updateTooltip( element ) {
                if ( id ) {
                        $label = $( 'label[for="' + id + '"]' );
                        if ( $label.length === 1 ) {
-                               updateTooltipOnElement( element, $label[0] );
+                               updateTooltipOnElement( element, $label[ 0 ] );
                        }
                }
 
                // Search it as parent, because the form control can also be inside the label element itself
                $labelParent = $element.parents( 'label' );
                if ( $labelParent.length === 1 ) {
-                       updateTooltipOnElement( element, $labelParent[0] );
+                       updateTooltipOnElement( element, $labelParent[ 0 ] );
                }
        }
 }
index 9a196b5..e1115d6 100644 (file)
@@ -69,16 +69,16 @@ $.fn.autoEllipsis = function ( options ) {
                // Try cache
                if ( options.matchText ) {
                        if ( !( text in matchTextCache ) ) {
-                               matchTextCache[text] = {};
+                               matchTextCache[ text ] = {};
                        }
-                       if ( !( options.matchText in matchTextCache[text] ) ) {
-                               matchTextCache[text][options.matchText] = {};
+                       if ( !( options.matchText in matchTextCache[ text ] ) ) {
+                               matchTextCache[ text ][ options.matchText ] = {};
                        }
-                       if ( !( w in matchTextCache[text][options.matchText] ) ) {
-                               matchTextCache[text][options.matchText][w] = {};
+                       if ( !( w in matchTextCache[ text ][ options.matchText ] ) ) {
+                               matchTextCache[ text ][ options.matchText ][ w ] = {};
                        }
-                       if ( options.position in matchTextCache[text][options.matchText][w] ) {
-                               $container.html( matchTextCache[text][options.matchText][w][options.position] );
+                       if ( options.position in matchTextCache[ text ][ options.matchText ][ w ] ) {
+                               $container.html( matchTextCache[ text ][ options.matchText ][ w ][ options.position ] );
                                if ( options.tooltip ) {
                                        $container.attr( 'title', text );
                                }
@@ -86,13 +86,13 @@ $.fn.autoEllipsis = function ( options ) {
                        }
                } else {
                        if ( !( text in cache ) ) {
-                               cache[text] = {};
+                               cache[ text ] = {};
                        }
-                       if ( !( w in cache[text] ) ) {
-                               cache[text][w] = {};
+                       if ( !( w in cache[ text ] ) ) {
+                               cache[ text ][ w ] = {};
                        }
-                       if ( options.position in cache[text][w] ) {
-                               $container.html( cache[text][w][options.position] );
+                       if ( options.position in cache[ text ][ w ] ) {
+                               $container.html( cache[ text ][ w ][ options.position ] );
                                if ( options.tooltip ) {
                                        $container.attr( 'title', text );
                                }
@@ -120,19 +120,19 @@ $.fn.autoEllipsis = function ( options ) {
                                        break;
                                case 'center':
                                        // TODO: Use binary search like for 'right'
-                                       i = [Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 )];
+                                       i = [ Math.round( trimmableText.length / 2 ), Math.round( trimmableText.length / 2 ) ];
                                        // Begin with making the end shorter
                                        side = 1;
-                                       while ( $trimmableText.outerWidth() + pw > w && i[0] > 0 ) {
-                                               $trimmableText.text( trimmableText.slice( 0, i[0] ) + '...' + trimmableText.slice( i[1] ) );
+                                       while ( $trimmableText.outerWidth() + pw > w && i[ 0 ] > 0 ) {
+                                               $trimmableText.text( trimmableText.slice( 0, i[ 0 ] ) + '...' + trimmableText.slice( i[ 1 ] ) );
                                                // Alternate between trimming the end and begining
                                                if ( side === 0 ) {
                                                        // Make the begining shorter
-                                                       i[0]--;
+                                                       i[ 0 ]--;
                                                        side = 1;
                                                } else {
                                                        // Make the end shorter
-                                                       i[1]++;
+                                                       i[ 1 ]++;
                                                        side = 0;
                                                }
                                        }
@@ -152,9 +152,9 @@ $.fn.autoEllipsis = function ( options ) {
                }
                if ( options.matchText ) {
                        $container.highlightText( options.matchText );
-                       matchTextCache[text][options.matchText][w][options.position] = $container.html();
+                       matchTextCache[ text ][ options.matchText ][ w ][ options.position ] = $container.html();
                } else {
-                       cache[text][w][options.position] = $container.html();
+                       cache[ text ][ w ][ options.position ] = $container.html();
                }
 
        } );
index 5551232..6203239 100644 (file)
         * "fobo", not "foba". Basically emulating the native maxlength by
         * reconstructing where the insertion occurred.
         *
-        * @private
+        * @static
         * @param {string} safeVal Known value that was previously returned by this
         * function, if none, pass empty string.
         * @param {string} newVal New value that may have to be trimmed down.
         * @param {number} byteLimit Number of bytes the value may be in size.
-        * @param {Function} [fn] See jQuery.byteLimit.
+        * @param {Function} [fn] See jQuery#byteLimit.
         * @return {Object}
         * @return {string} return.newVal
         * @return {boolean} return.trimmed
         */
-       function trimValForByteLength( safeVal, newVal, byteLimit, fn ) {
+       $.trimByteLength = function ( safeVal, newVal, byteLimit, fn ) {
                var startMatches, endMatches, matchesLen, inpParts,
                        oldVal = safeVal;
 
                // until the limit is statisfied.
                if ( fn ) {
                        // stop, when there is nothing to slice - bug 41450
-                       while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit && inpParts[1].length > 0 ) {
-                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                       while ( $.byteLength( fn( inpParts.join( '' ) ) ) > byteLimit && inpParts[ 1 ].length > 0 ) {
+                               inpParts[ 1 ] = inpParts[ 1 ].slice( 0, -1 );
                        }
                } else {
                        while ( $.byteLength( inpParts.join( '' ) ) > byteLimit ) {
-                               inpParts[1] = inpParts[1].slice( 0, -1 );
+                               inpParts[ 1 ] = inpParts[ 1 ].slice( 0, -1 );
                        }
                }
 
@@ -92,7 +92,7 @@
                        newVal: newVal,
                        trimmed: true
                };
-       }
+       };
 
        var eventKeys = [
                'keyup.byteLimit',
                        // See http://www.w3.org/TR/DOM-Level-3-Events/#events-keyboard-event-order for
                        // the order and characteristics of the key events.
                        $el.on( eventKeys, function () {
-                               var res = trimValForByteLength(
+                               var res = $.trimByteLength(
                                        prevSafeVal,
                                        this.value,
                                        elLimit,
                                        this.value = res.newVal;
                                }
                                // Always adjust prevSafeVal to reflect the input value. Not doing this could cause
-                               // trimValForByteLength to compare the new value to an empty string instead of the
+                               // trimByteLength to compare the new value to an empty string instead of the
                                // old value, resulting in trimming always from the end (bug 40850).
                                prevSafeVal = res.newVal;
                        } );
index 04f8047..a3cc8fc 100644 (file)
@@ -28,7 +28,7 @@
        }
 
        // We override the animation for all of these color styles
-       $.each([
+       $.each( [
                'backgroundColor',
                'borderBottomColor',
                'borderLeftColor',
                'color',
                'outlineColor'
        ], function ( i, attr ) {
-               $.fx.step[attr] = function ( fx ) {
+               $.fx.step[ attr ] = function ( fx ) {
                        if ( !fx.colorInit ) {
                                fx.start = getColor( fx.elem, attr );
                                fx.end = $.colorUtil.getRGB( fx.end );
                                fx.colorInit = true;
                        }
 
-                       fx.elem.style[attr] = 'rgb(' + [
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0], 10 ), 255 ), 0 ),
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1], 10 ), 255 ), 0 ),
-                               Math.max( Math.min( parseInt( (fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2], 10 ), 255 ), 0 )
+                       fx.elem.style[ attr ] = 'rgb(' + [
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 0 ] - fx.start[ 0 ] ) ) + fx.start[ 0 ], 10 ), 255 ), 0 ),
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 1 ] - fx.start[ 1 ] ) ) + fx.start[ 1 ], 10 ), 255 ), 0 ),
+                               Math.max( Math.min( parseInt( ( fx.pos * ( fx.end[ 2 ] - fx.start[ 2 ] ) ) + fx.start[ 2 ], 10 ), 255 ), 0 )
                        ].join( ',' ) + ')';
                };
        } );
index a6ff8bc..c14f2c8 100644 (file)
                        }
 
                        // Look for rgb(num,num,num)
-                       if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) {
+                       if ( result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec( color ) ) {
                                return [
-                                       parseInt( result[1], 10 ),
-                                       parseInt( result[2], 10 ),
-                                       parseInt( result[3], 10 )
+                                       parseInt( result[ 1 ], 10 ),
+                                       parseInt( result[ 2 ], 10 ),
+                                       parseInt( result[ 3 ], 10 )
                                ];
                        }
 
                        // Look for rgb(num%,num%,num%)
-                       if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) {
+                       if ( result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec( color ) ) {
                                return [
-                                       parseFloat( result[1] ) * 2.55,
-                                       parseFloat( result[2] ) * 2.55,
-                                       parseFloat( result[3] ) * 2.55
+                                       parseFloat( result[ 1 ] ) * 2.55,
+                                       parseFloat( result[ 2 ] ) * 2.55,
+                                       parseFloat( result[ 3 ] ) * 2.55
                                ];
                        }
 
                        // Look for #a0b1c2
-                       if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) {
+                       if ( result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec( color ) ) {
                                return [
-                                       parseInt( result[1], 16 ),
-                                       parseInt( result[2], 16 ),
-                                       parseInt( result[3], 16 )
+                                       parseInt( result[ 1 ], 16 ),
+                                       parseInt( result[ 2 ], 16 ),
+                                       parseInt( result[ 3 ], 16 )
                                ];
                        }
 
                        // Look for #fff
-                       if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) {
+                       if ( result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec( color ) ) {
                                return [
-                                       parseInt( result[1] + result[1], 16 ),
-                                       parseInt( result[2] + result[2], 16 ),
-                                       parseInt( result[3] + result[3], 16)
+                                       parseInt( result[ 1 ] + result[ 1 ], 16 ),
+                                       parseInt( result[ 2 ] + result[ 2 ], 16 ),
+                                       parseInt( result[ 3 ] + result[ 3 ], 16 )
                                ];
                        }
 
                        // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
-                       if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) {
+                       if ( result = /rgba\(0, 0, 0, 0\)/.exec( color ) ) {
                                return $.colorUtil.colors.transparent;
                        }
 
                        // Otherwise, we're most likely dealing with a named color
-                       return $.colorUtil.colors[$.trim(color).toLowerCase()];
+                       return $.colorUtil.colors[ $.trim( color ).toLowerCase() ];
                },
 
                /**
                 * @property {Object}
                 */
                colors: {
-                       aqua: [0, 255, 255],
-                       azure: [240, 255, 255],
-                       beige: [245, 245, 220],
-                       black: [0, 0, 0],
-                       blue: [0, 0, 255],
-                       brown: [165, 42, 42],
-                       cyan: [0, 255, 255],
-                       darkblue: [0, 0, 139],
-                       darkcyan: [0, 139, 139],
-                       darkgrey: [169, 169, 169],
-                       darkgreen: [0, 100, 0],
-                       darkkhaki: [189, 183, 107],
-                       darkmagenta: [139, 0, 139],
-                       darkolivegreen: [85, 107, 47],
-                       darkorange: [255, 140, 0],
-                       darkorchid: [153, 50, 204],
-                       darkred: [139, 0, 0],
-                       darksalmon: [233, 150, 122],
-                       darkviolet: [148, 0, 211],
-                       fuchsia: [255, 0, 255],
-                       gold: [255, 215, 0],
-                       green: [0, 128, 0],
-                       indigo: [75, 0, 130],
-                       khaki: [240, 230, 140],
-                       lightblue: [173, 216, 230],
-                       lightcyan: [224, 255, 255],
-                       lightgreen: [144, 238, 144],
-                       lightgrey: [211, 211, 211],
-                       lightpink: [255, 182, 193],
-                       lightyellow: [255, 255, 224],
-                       lime: [0, 255, 0],
-                       magenta: [255, 0, 255],
-                       maroon: [128, 0, 0],
-                       navy: [0, 0, 128],
-                       olive: [128, 128, 0],
-                       orange: [255, 165, 0],
-                       pink: [255, 192, 203],
-                       purple: [128, 0, 128],
-                       violet: [128, 0, 128],
-                       red: [255, 0, 0],
-                       silver: [192, 192, 192],
-                       white: [255, 255, 255],
-                       yellow: [255, 255, 0],
-                       transparent: [255, 255, 255]
+                       aqua: [ 0, 255, 255 ],
+                       azure: [ 240, 255, 255 ],
+                       beige: [ 245, 245, 220 ],
+                       black: [ 0, 0, 0 ],
+                       blue: [ 0, 0, 255 ],
+                       brown: [ 165, 42, 42 ],
+                       cyan: [ 0, 255, 255 ],
+                       darkblue: [ 0, 0, 139 ],
+                       darkcyan: [ 0, 139, 139 ],
+                       darkgrey: [ 169, 169, 169 ],
+                       darkgreen: [ 0, 100, 0 ],
+                       darkkhaki: [ 189, 183, 107 ],
+                       darkmagenta: [ 139, 0, 139 ],
+                       darkolivegreen: [ 85, 107, 47 ],
+                       darkorange: [ 255, 140, 0 ],
+                       darkorchid: [ 153, 50, 204 ],
+                       darkred: [ 139, 0, 0 ],
+                       darksalmon: [ 233, 150, 122 ],
+                       darkviolet: [ 148, 0, 211 ],
+                       fuchsia: [ 255, 0, 255 ],
+                       gold: [ 255, 215, 0 ],
+                       green: [ 0, 128, 0 ],
+                       indigo: [ 75, 0, 130 ],
+                       khaki: [ 240, 230, 140 ],
+                       lightblue: [ 173, 216, 230 ],
+                       lightcyan: [ 224, 255, 255 ],
+                       lightgreen: [ 144, 238, 144 ],
+                       lightgrey: [ 211, 211, 211 ],
+                       lightpink: [ 255, 182, 193 ],
+                       lightyellow: [ 255, 255, 224 ],
+                       lime: [ 0, 255, 0 ],
+                       magenta: [ 255, 0, 255 ],
+                       maroon: [ 128, 0, 0 ],
+                       navy: [ 0, 0, 128 ],
+                       olive: [ 128, 128, 0 ],
+                       orange: [ 255, 165, 0 ],
+                       pink: [ 255, 192, 203 ],
+                       purple: [ 128, 0, 128 ],
+                       violet: [ 128, 0, 128 ],
+                       red: [ 255, 0, 0 ],
+                       silver: [ 192, 192, 192 ],
+                       white: [ 255, 255, 255 ],
+                       yellow: [ 255, 255, 0 ],
+                       transparent: [ 255, 255, 255 ]
                },
 
                /**
                                min = Math.min( r, g, b ),
                                h,
                                s,
-                               l = (max + min) / 2;
+                               l = ( max + min ) / 2;
 
                        if ( max === min ) {
                                // achromatic
                                h = s = 0;
                        } else {
                                d = max - min;
-                               s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+                               s = l > 0.5 ? d / ( 2 - max - min ) : d / ( max + min );
                                switch ( max ) {
                                        case r:
-                                               h = (g - b) / d + (g < b ? 6 : 0);
+                                               h = ( g - b ) / d + ( g < b ? 6 : 0 );
                                                break;
                                        case g:
-                                               h = (b - r) / d + 2;
+                                               h = ( b - r ) / d + 2;
                                                break;
                                        case b:
-                                               h = (r - g) / d + 4;
+                                               h = ( r - g ) / d + 4;
                                                break;
                                }
                                h /= 6;
                        }
 
-                       return [h, s, l];
+                       return [ h, s, l ];
                },
 
                /**
                                                t -= 1;
                                        }
                                        if ( t < 1 / 6 ) {
-                                               return p + (q - p) * 6 * t;
+                                               return p + ( q - p ) * 6 * t;
                                        }
                                        if ( t < 1 / 2 ) {
                                                return q;
                                        }
                                        if ( t < 2 / 3 ) {
-                                               return p + (q - p) * (2 / 3 - t) * 6;
+                                               return p + ( q - p ) * ( 2 / 3 - t ) * 6;
                                        }
                                        return p;
                                };
 
-                               q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+                               q = l < 0.5 ? l * ( 1 + s ) : l + s - l * s;
                                p = 2 * l - q;
                                r = hue2rgb( p, q, h + 1 / 3 );
                                g = hue2rgb( p, q, h );
                                b = hue2rgb( p, q, h - 1 / 3 );
                        }
 
-                       return [r * 255, g * 255, b * 255];
+                       return [ r * 255, g * 255, b * 255 ];
                },
 
                /**
                 */
                getColorBrightness: function ( currentColor, mod ) {
                        var rgbArr = $.colorUtil.getRGB( currentColor ),
-                               hslArr = $.colorUtil.rgbToHsl(rgbArr[0], rgbArr[1], rgbArr[2] );
-                       rgbArr = $.colorUtil.hslToRgb(hslArr[0], hslArr[1], hslArr[2] + mod);
+                               hslArr = $.colorUtil.rgbToHsl( rgbArr[ 0 ], rgbArr[ 1 ], rgbArr[ 2 ] );
+                       rgbArr = $.colorUtil.hslToRgb( hslArr[ 0 ], hslArr[ 1 ], hslArr[ 2 ] + mod );
 
                        return 'rgb(' +
-                               [parseInt( rgbArr[0], 10), parseInt( rgbArr[1], 10 ), parseInt( rgbArr[2], 10 )].join( ',' ) +
+                               [ parseInt( rgbArr[ 0 ], 10 ), parseInt( rgbArr[ 1 ], 10 ), parseInt( rgbArr[ 2 ], 10 ) ].join( ',' ) +
                                ')';
                }
 
index 48341bc..221e6bb 100644 (file)
@@ -23,7 +23,7 @@
                expandField: function ( e, context ) {
                        context.config.beforeExpand.call( context.data.$field, context );
                        context.data.$field
-                               .animate( { 'width': context.data.expandedWidth }, 'fast', function () {
+                               .animate( { width: context.data.expandedWidth }, 'fast', function () {
                                        context.config.afterExpand.call( this, context );
                                } );
                },
                condenseField: function ( e, context ) {
                        context.config.beforeCondense.call( context.data.$field, context );
                        context.data.$field
-                               .animate( { 'width': context.data.condensedWidth }, 'fast', function () {
+                               .animate( { width: context.data.condensedWidth }, 'fast', function () {
                                        context.config.afterCondense.call( this, context );
                                } );
                },
                /**
                 * Sets the value of a property, and updates the widget accordingly
-                * @param property String Name of property
-                * @param value Mixed Value to set property with
+                *
+                * @param {String} property Name of property
+                * @param {Mixed} value Value to set property with
                 */
                configure: function ( context, property, value ) {
                        // TODO: Validate creation using fallback values
-                       context.config[property] = value;
+                       context.config[ property ] = value;
                }
 
        };
                        /* API */
                        // Handle various calling styles
                        if ( args.length > 0 ) {
-                               if ( typeof args[0] === 'object' ) {
+                               if ( typeof args[ 0 ] === 'object' ) {
                                        // Apply set of properties
-                                       for ( key in args[0] ) {
-                                               $.expandableField.configure( context, key, args[0][key] );
+                                       for ( key in args[ 0 ] ) {
+                                               $.expandableField.configure( context, key, args[ 0 ][ key ] );
                                        }
-                               } else if ( typeof args[0] === 'string' ) {
+                               } else if ( typeof args[ 0 ] === 'string' ) {
                                        if ( args.length > 1 ) {
                                                // Set property values
-                                               $.expandableField.configure( context, args[0], args[1] );
+                                               $.expandableField.configure( context, args[ 0 ], args[ 1 ] );
 
                                        // TODO: Do we need to check both null and undefined?
                                        } else if ( returnValue === null || returnValue === undefined ) {
                                                // Get property values, but don't give access to internal data - returns only the first
-                                               returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] );
+                                               returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
                                        }
                                }
                        }
index d7024cc..f70913f 100644 (file)
@@ -52,10 +52,10 @@ jQuery._farbtastic = function (container, callback) {
                        if (this.currentStyle.backgroundImage != 'none') {
                                var image = this.currentStyle.backgroundImage;
                                image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
-                               $(this).css({
-                                       'backgroundImage': 'none',
-                                       'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
-                               });
+                               $(this).css( {
+                                       backgroundImage: 'none',
+                                       filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
+                               } );
                        }
                });
        }
index 64827fb..3064b42 100644 (file)
@@ -8,7 +8,7 @@ function serializeControls( controls ) {
                len = controls.length;
 
        for ( i = 0; i < len; i++ ) {
-               data[ controls[i].name ] = controls[i].value;
+               data[ controls[ i ].name ] = controls[ i ].value;
        }
 
        return data;
@@ -23,7 +23,7 @@ function serializeControls( controls ) {
  * @return {Object}
  */
 jQuery.fn.getAttrs = function () {
-       return serializeControls( this[0].attributes );
+       return serializeControls( this[ 0 ].attributes );
 };
 
 /**
index 8fca056..aa6590b 100644 (file)
 $.devicePixelRatio = function () {
        if ( window.devicePixelRatio !== undefined ) {
                // Most web browsers:
-               // * WebKit (Safari, Chrome, Android browser, etc)
+               // * WebKit/Blink (Safari, Chrome, Android browser, etc)
                // * Opera
                // * Firefox 18+
+               // * Microsoft Edge (Windows 10)
                return window.devicePixelRatio;
        } else if ( window.msMatchMedia !== undefined ) {
                // Windows 8 desktops / tablets, probably Windows Phone 8
                //
-               // IE 10 doesn't report pixel ratio directly, but we can get the
+               // IE 10/11 doesn't report pixel ratio directly, but we can get the
                // screen DPI and divide by 96. We'll bracket to [1, 1.5, 2.0] for
                // simplicity, but you may get different values depending on zoom
                // factor, size of screen and orientation in Metro IE.
@@ -52,6 +53,52 @@ $.devicePixelRatio = function () {
        }
 };
 
+/**
+ * Bracket a given device pixel ratio to one of [1, 1.5, 2].
+ *
+ * This is useful for grabbing images on the fly with sizes based on the display
+ * density, without causing slowdown and extra thumbnail renderings on devices
+ * that are slightly different from the most common sizes.
+ *
+ * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
+ * so will be consistent with default renderings.
+ *
+ * @static
+ * @inheritable
+ * @return {number} Device pixel ratio
+ */
+$.bracketDevicePixelRatio = function ( baseRatio ) {
+       if ( baseRatio > 1.5 ) {
+               return 2;
+       } else if ( baseRatio > 1 ) {
+               return 1.5;
+       } else {
+               return 1;
+       }
+};
+
+/**
+ * Get reported or approximate device pixel ratio, bracketed to [1, 1.5, 2].
+ *
+ * This is useful for grabbing images on the fly with sizes based on the display
+ * density, without causing slowdown and extra thumbnail renderings on devices
+ * that are slightly different from the most common sizes.
+ *
+ * The bracketed ratios match the default 'srcset' output on MediaWiki thumbnails,
+ * so will be consistent with default renderings.
+ *
+ * - 1.0 means 1 CSS pixel is 1 hardware pixel
+ * - 1.5 means 1 CSS pixel is 1.5 hardware pixels
+ * - 2.0 means 1 CSS pixel is 2 hardware pixels
+ *
+ * @static
+ * @inheritable
+ * @return {number} Device pixel ratio
+ */
+$.bracketedDevicePixelRatio = function () {
+       return $.bracketDevicePixelRatio( $.devicePixelRatio() );
+};
+
 /**
  * Implement responsive images based on srcset attributes, if browser has no
  * native srcset support.
@@ -106,11 +153,11 @@ $.matchSrcSet = function ( devicePixelRatio, srcset ) {
                selectedSrc = null;
        candidates = srcset.split( / *, */ );
        for ( i = 0; i < candidates.length; i++ ) {
-               candidate = candidates[i];
+               candidate = candidates[ i ];
                bits = candidate.split( / +/ );
-               src = bits[0];
-               if ( bits.length > 1 && bits[1].charAt( bits[1].length - 1 ) === 'x' ) {
-                       ratioStr = bits[1].slice( 0, -1 );
+               src = bits[ 0 ];
+               if ( bits.length > 1 && bits[ 1 ].charAt( bits[ 1 ].length - 1 ) === 'x' ) {
+                       ratioStr = bits[ 1 ].slice( 0, -1 );
                        ratio = parseFloat( ratioStr );
                        if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
                                selectedRatio = ratio;
index 8deb669..e37f19b 100644 (file)
                        var i,
                                patArray = pat.split( ' ' );
                        for ( i = 0; i < patArray.length; i++ ) {
-                               if ( patArray[i].length === 0 ) {
+                               if ( patArray[ i ].length === 0 ) {
                                        continue;
                                }
-                               $.highlightText.innerHighlight( node, patArray[i] );
+                               $.highlightText.innerHighlight( node, patArray[ i ] );
                        }
                        return node;
                },
                // scans a node looking for the pattern and wraps a span around each match
                innerHighlight: function ( node, pat ) {
                        var i, match, pos, spannode, middlebit, middleclone;
-                       // if this is a text node
-                       if ( node.nodeType === 3 ) {
+                       if ( node.nodeType === Node.TEXT_NODE ) {
                                // TODO - need to be smarter about the character matching here.
                                // non latin characters can make regex think a new word has begun: do not use \b
                                // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                                // look for an occurrence of our pattern and store the starting position
                                match = node.data.match( new RegExp( '(^|\\s)' + mw.RegExp.escape( pat ), 'i' ) );
                                if ( match ) {
-                                       pos = match.index + match[1].length; // include length of any matched spaces
+                                       pos = match.index + match[ 1 ].length; // include length of any matched spaces
                                        // create the span wrapper for the matched text
                                        spannode = document.createElement( 'span' );
                                        spannode.className = 'highlight';
@@ -46,8 +45,8 @@
                                        // replace the matched node, with our span-wrapped clone of the matched node
                                        middlebit.parentNode.replaceChild( spannode, middlebit );
                                }
-                       // if this is an element with childnodes, and not a script, style or an element we created
-                       } else if ( node.nodeType === 1
+                       } else if ( node.nodeType === Node.ELEMENT_NODE
+                               // element with childnodes, and not a script, style or an element we created
                                && node.childNodes
                                && !/(script|style)/i.test( node.tagName )
                                && !( node.tagName.toLowerCase() === 'span'
@@ -56,7 +55,7 @@
                        ) {
                                for ( i = 0; i < node.childNodes.length; ++i ) {
                                        // call the highlight function for each child node
-                                       $.highlightText.innerHighlight( node.childNodes[i], pat );
+                                       $.highlightText.innerHighlight( node.childNodes[ i ], pat );
                                }
                        }
                }
index 0b42354..f5932b2 100644 (file)
@@ -5,16 +5,16 @@
 
 /**
  * Gets a localized message, using parameters from options if present.
- * @ignore
  *
+ * @ignore
  * @param {Object} options
  * @param {string} key
  * @return {string} Localized message
  */
 function msg( options, key ) {
-       var args = options.params[key] || [];
+       var args = options.params[ key ] || [];
        // Format: mw.msg( key [, p1, p2, ...] )
-       args.unshift( options.prefix + ( options.keys[key] || key ) );
+       args.unshift( options.prefix + ( options.keys[ key ] || key ) );
        return mw.msg.apply( mw, args );
 }
 
@@ -108,7 +108,7 @@ function msg( options, key ) {
  */
 $.fn.localize = function ( options ) {
        var $target = this,
-               attributes = ['title', 'alt', 'placeholder'];
+               attributes = [ 'title', 'alt', 'placeholder' ];
 
        // Extend options
        options = $.extend( {
index f7c4217..19fdb26 100644 (file)
                }
 
                if ( e ) {
-                       if ( e.type === 'click' && options.linksPassthru && $.nodeName( e.target, 'a' ) ) {
-                               // Don't fire if a link was clicked, if requested  (for premade togglers by default)
+                       if (
+                               e.type === 'click' &&
+                               options.linksPassthru &&
+                               $.nodeName( e.target, 'a' ) &&
+                               $( e.target ).attr( 'href' ) !== '#'
+                       ) {
+                               // Don't fire if a link with href !== '#' was clicked, if requested  (for premade togglers by default)
                                return;
                        } else if ( e.type === 'keypress' && e.which !== 13 && e.which !== 32 ) {
                                // Only handle keypresses on the "Enter" or "Space" keys
index 5484212..27ceb2b 100644 (file)
                                return false;
                        }
                        for ( var i = 0; i < arrThis.length; i++ ) {
-                               if ( $.isArray( arrThis[i] ) ) {
-                                       if ( !$.compareArray( arrThis[i], arrAgainst[i] ) ) {
+                               if ( $.isArray( arrThis[ i ] ) ) {
+                                       if ( !$.compareArray( arrThis[ i ], arrAgainst[ i ] ) ) {
                                                return false;
                                        }
-                               } else if ( arrThis[i] !== arrAgainst[i] ) {
+                               } else if ( arrThis[ i ] !== arrAgainst[ i ] ) {
                                        return false;
                                }
                        }
                                                        // Check if this property is also present in the other object
                                                        if ( prop in objectB ) {
                                                                // Compare the types of the properties
-                                                               type = typeof objectA[prop];
-                                                               if ( type === typeof objectB[prop] ) {
+                                                               type = typeof objectA[ prop ];
+                                                               if ( type === typeof objectB[ prop ] ) {
                                                                        // Recursively check objects inside this one
                                                                        switch ( type ) {
                                                                                case 'object' :
-                                                                                       if ( !$.compareObject( objectA[prop], objectB[prop] ) ) {
+                                                                                       if ( !$.compareObject( objectA[ prop ], objectB[ prop ] ) ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
                                                                                case 'function' :
                                                                                        // Functions need to be strings to compare them properly
-                                                                                       if ( objectA[prop].toString() !== objectB[prop].toString() ) {
+                                                                                       if ( objectA[ prop ].toString() !== objectB[ prop ].toString() ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
                                                                                default:
                                                                                        // Strings, numbers
-                                                                                       if ( objectA[prop] !== objectB[prop] ) {
+                                                                                       if ( objectA[ prop ] !== objectB[ prop ] ) {
                                                                                                return false;
                                                                                        }
                                                                                        break;
index d50422e..9c18a91 100644 (file)
  * @version 2.1.0
  * @license MIT
  */
-( function ($) {
+( function ( $ ) {
 
-       var isInputSupported = 'placeholder' in document.createElement('input'),
-               isTextareaSupported = 'placeholder' in document.createElement('textarea'),
+       var isInputSupported = 'placeholder' in document.createElement( 'input' ),
+               isTextareaSupported = 'placeholder' in document.createElement( 'textarea' ),
                prototype = $.fn,
                valHooks = $.valHooks,
                propHooks = $.propHooks,
                hooks,
                placeholder;
 
-       if (isInputSupported && isTextareaSupported) {
+       function safeActiveElement() {
+               // Avoid IE9 `document.activeElement` of death
+               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
+               try {
+                       return document.activeElement;
+               } catch ( err ) {}
+       }
+
+       function args( elem ) {
+               // Return an object of element attributes
+               var newAttrs = {},
+                               rinlinejQuery = /^jQuery\d+$/;
+               $.each( elem.attributes, function ( i, attr ) {
+                       if ( attr.specified && !rinlinejQuery.test( attr.name ) ) {
+                               newAttrs[ attr.name ] = attr.value;
+                       }
+               } );
+               return newAttrs;
+       }
+
+       function clearPlaceholder( event, value ) {
+               var input = this,
+                               $input = $( input );
+               if ( input.value === $input.attr( 'placeholder' ) && $input.hasClass( 'placeholder' ) ) {
+                       if ( $input.data( 'placeholder-password' ) ) {
+                               $input = $input.hide().next().show().attr( 'id', $input.removeAttr( 'id' ).data( 'placeholder-id' ) );
+                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
+                               if ( event === true ) {
+                                       $input[ 0 ].value = value;
+                                       return value;
+                               }
+                               $input.focus();
+                       } else {
+                               input.value = '';
+                               $input.removeClass( 'placeholder' );
+                               if ( input === safeActiveElement() ) {
+                                       input.select();
+                               }
+                       }
+               }
+       }
 
-               placeholder = prototype.placeholder = function (text) {
+       function setPlaceholder() {
+               var $replacement,
+                               input = this,
+                               $input = $( input ),
+                               id = this.id;
+               if ( !input.value ) {
+                       if ( input.type === 'password' ) {
+                               if ( !$input.data( 'placeholder-textinput' ) ) {
+                                       try {
+                                               $replacement = $input.clone().attr( { type: 'text' } );
+                                       } catch ( e ) {
+                                               $replacement = $( '<input>' ).attr( $.extend( args( this ), { type: 'text' } ) );
+                                       }
+                                       $replacement
+                                                       .removeAttr( 'name' )
+                                                       .data( {
+                                                               'placeholder-password': $input,
+                                                               'placeholder-id': id
+                                                       } )
+                                                       .bind( 'focus.placeholder drop.placeholder', clearPlaceholder );
+                                       $input
+                                                       .data( {
+                                                               'placeholder-textinput': $replacement,
+                                                               'placeholder-id': id
+                                                       } )
+                                                       .before( $replacement );
+                               }
+                               $input = $input.removeAttr( 'id' ).hide().prev().attr( 'id', id ).show();
+                               // Note: `$input[0] != input` now!
+                       }
+                       $input.addClass( 'placeholder' );
+                       $input[ 0 ].value = $input.attr( 'placeholder' );
+               } else {
+                       $input.removeClass( 'placeholder' );
+               }
+       }
+
+       function changePlaceholder( text ) {
+               var hasArgs = arguments.length,
+                               $input = this;
+               if ( hasArgs ) {
+                       if ( $input.attr( 'placeholder' ) !== text ) {
+                               $input.prop( 'placeholder', text );
+                               if ( $input.hasClass( 'placeholder' ) ) {
+                                       $input[ 0 ].value = text;
+                               }
+                       }
+               }
+       }
+
+       if ( isInputSupported && isTextareaSupported ) {
+
+               placeholder = prototype.placeholder = function ( text ) {
                        var hasArgs = arguments.length;
 
-                       if (hasArgs) {
-                               changePlaceholder.call(this, text);
+                       if ( hasArgs ) {
+                               changePlaceholder.call( this, text );
                        }
 
                        return this;
 
        } else {
 
-               placeholder = prototype.placeholder = function (text) {
+               placeholder = prototype.placeholder = function ( text ) {
                        var $this = this,
                                hasArgs = arguments.length;
 
-                       if (hasArgs) {
-                               changePlaceholder.call(this, text);
+                       if ( hasArgs ) {
+                               changePlaceholder.call( this, text );
                        }
 
                        $this
-                               .filter((isInputSupported ? 'textarea' : ':input') + '[placeholder]')
+                               .filter( ( isInputSupported ? 'textarea' : ':input' ) + '[placeholder]' )
                                .filter( function () {
-                                       return !$(this).data('placeholder-enabled');
-                               })
-                               .bind({
+                                       return !$( this ).data( 'placeholder-enabled' );
+                               } )
+                               .bind( {
                                        'focus.placeholder drop.placeholder': clearPlaceholder,
                                        'blur.placeholder': setPlaceholder
-                               })
-                               .data('placeholder-enabled', true)
-                               .trigger('blur.placeholder');
+                               } )
+                               .data( 'placeholder-enabled', true )
+                               .trigger( 'blur.placeholder' );
                        return $this;
                };
 
                placeholder.textarea = isTextareaSupported;
 
                hooks = {
-                       'get': function (element) {
-                               var $element = $(element),
-                                       $passwordInput = $element.data('placeholder-password');
-                               if ($passwordInput) {
-                                       return $passwordInput[0].value;
+                       get: function ( element ) {
+                               var $element = $( element ),
+                                       $passwordInput = $element.data( 'placeholder-password' );
+                               if ( $passwordInput ) {
+                                       return $passwordInput[ 0 ].value;
                                }
 
-                               return $element.data('placeholder-enabled') && $element.hasClass('placeholder') ? '' : element.value;
+                               return $element.data( 'placeholder-enabled' ) && $element.hasClass( 'placeholder' ) ? '' : element.value;
                        },
-                       'set': function (element, value) {
-                               var $element = $(element),
-                                       $passwordInput = $element.data('placeholder-password');
-                               if ($passwordInput) {
-                                       $passwordInput[0].value = value;
+                       set: function ( element, value ) {
+                               var $element = $( element ),
+                                       $passwordInput = $element.data( 'placeholder-password' );
+                               if ( $passwordInput ) {
+                                       $passwordInput[ 0 ].value = value;
                                        return value;
                                }
 
-                               if (!$element.data('placeholder-enabled')) {
+                               if ( !$element.data( 'placeholder-enabled' ) ) {
                                        element.value = value;
                                        return value;
                                }
-                               if (!value) {
+                               if ( !value ) {
                                        element.value = value;
                                        // Issue #56: Setting the placeholder causes problems if the element continues to have focus.
-                                       if (element !== safeActiveElement()) {
+                                       if ( element !== safeActiveElement() ) {
                                                // We can't use `triggerHandler` here because of dummy text/password inputs :(
-                                               setPlaceholder.call(element);
+                                               setPlaceholder.call( element );
                                        }
-                               } else if ($element.hasClass('placeholder')) {
-                                       if (!clearPlaceholder.call(element, true, value)) {
+                               } else if ( $element.hasClass( 'placeholder' ) ) {
+                                       if ( !clearPlaceholder.call( element, true, value ) ) {
                                                element.value = value;
                                        }
                                } else {
                        }
                };
 
-               if (!isInputSupported) {
+               if ( !isInputSupported ) {
                        valHooks.input = hooks;
                        propHooks.value = hooks;
                }
-               if (!isTextareaSupported) {
+               if ( !isTextareaSupported ) {
                        valHooks.textarea = hooks;
                        propHooks.value = hooks;
                }
 
                $( function () {
                        // Look for forms
-                       $(document).delegate('form', 'submit.placeholder', function () {
+                       $( document ).delegate( 'form', 'submit.placeholder', function () {
                                // Clear the placeholder values so they don't get submitted
-                               var $inputs = $('.placeholder', this).each(clearPlaceholder);
+                               var $inputs = $( '.placeholder', this ).each( clearPlaceholder );
                                setTimeout( function () {
-                                       $inputs.each(setPlaceholder);
-                               }, 10);
-                       });
-               });
+                                       $inputs.each( setPlaceholder );
+                               }, 10 );
+                       } );
+               } );
 
                // Clear placeholder values upon page reload
-               $(window).bind('beforeunload.placeholder', function () {
-                       $('.placeholder').each( function () {
+               $( window ).bind( 'beforeunload.placeholder', function () {
+                       $( '.placeholder' ).each( function () {
                                this.value = '';
-                       });
-               });
+                       } );
+               } );
 
        }
-
-       function args(elem) {
-               // Return an object of element attributes
-               var newAttrs = {},
-                       rinlinejQuery = /^jQuery\d+$/;
-               $.each(elem.attributes, function (i, attr) {
-                       if (attr.specified && !rinlinejQuery.test(attr.name)) {
-                               newAttrs[attr.name] = attr.value;
-                       }
-               });
-               return newAttrs;
-       }
-
-       function clearPlaceholder(event, value) {
-               var input = this,
-                       $input = $(input);
-               if (input.value === $input.attr('placeholder') && $input.hasClass('placeholder')) {
-                       if ($input.data('placeholder-password')) {
-                               $input = $input.hide().next().show().attr('id', $input.removeAttr('id').data('placeholder-id'));
-                               // If `clearPlaceholder` was called from `$.valHooks.input.set`
-                               if (event === true) {
-                                       $input[0].value = value;
-                                       return value;
-                               }
-                               $input.focus();
-                       } else {
-                               input.value = '';
-                               $input.removeClass('placeholder');
-                               if (input === safeActiveElement()) {
-                                       input.select();
-                               }
-                       }
-               }
-       }
-
-       function setPlaceholder() {
-               var $replacement,
-                       input = this,
-                       $input = $(input),
-                       id = this.id;
-               if (!input.value) {
-                       if (input.type === 'password') {
-                               if (!$input.data('placeholder-textinput')) {
-                                       try {
-                                               $replacement = $input.clone().attr({ 'type': 'text' });
-                                       } catch (e) {
-                                               $replacement = $('<input>').attr($.extend(args(this), { 'type': 'text' }));
-                                       }
-                                       $replacement
-                                               .removeAttr('name')
-                                               .data({
-                                                       'placeholder-password': $input,
-                                                       'placeholder-id': id
-                                               })
-                                               .bind('focus.placeholder drop.placeholder', clearPlaceholder);
-                                       $input
-                                               .data({
-                                                       'placeholder-textinput': $replacement,
-                                                       'placeholder-id': id
-                                               })
-                                               .before($replacement);
-                               }
-                               $input = $input.removeAttr('id').hide().prev().attr('id', id).show();
-                               // Note: `$input[0] != input` now!
-                       }
-                       $input.addClass('placeholder');
-                       $input[0].value = $input.attr('placeholder');
-               } else {
-                       $input.removeClass('placeholder');
-               }
-       }
-
-       function safeActiveElement() {
-               // Avoid IE9 `document.activeElement` of death
-               // https://github.com/mathiasbynens/jquery-placeholder/pull/99
-               try {
-                       return document.activeElement;
-               } catch (err) {}
-       }
-
-       function changePlaceholder(text) {
-               var hasArgs = arguments.length,
-                       $input = this;
-               if (hasArgs) {
-                       if ($input.attr('placeholder') !== text) {
-                               $input.prop('placeholder', text);
-                               if ($input.hasClass('placeholder')) {
-                                       $input[0].value = text;
-                               }
-                       }
-               }
-       }
-
-}(jQuery));
+}( jQuery ) );
index 556bf8c..785b273 100644 (file)
 
        /**
         * CompletenessTest
-        * @constructor
         *
+        * @constructor
         * @example
         *  var myTester = new CompletenessTest( myLib );
-        * @param masterVariable {Object} The root variable that contains all object
+        * @param {Object} masterVariable The root variable that contains all object
         *  members. CompletenessTest will recursively traverse objects and keep track
         *  of all methods.
-        * @param ignoreFn {Function} Optionally pass a function to filter out certain
+        * @param {Function} [ignoreFn] Optionally pass a function to filter out certain
         *  methods. Example: You may want to filter out instances of jQuery or some
         *  other constructor. Otherwise "missingTests" will include all methods that
         *  were not called from that instance.
                                elOutputWrapper.appendChild( elContainer );
 
                                util.each( style, function ( key, value ) {
-                                       elOutputWrapper.style[key] = value;
+                                       elOutputWrapper.style[ key ] = value;
                                } );
                                return elOutputWrapper;
                        }
                 * Depending on the action it either injects our listener into the methods, or
                 * reads from our tracker and records which methods have not been called by the test suite.
                 *
-                * @param currName {String|Null} Name of the given object member (Initially this is null).
-                * @param currVar {mixed} The variable to check (initially an object,
+                * @param {String|Null} currName Name of the given object member (Initially this is null).
+                * @param {mixed} currVar The variable to check (initially an object,
                 *  further down it could be anything).
-                * @param masterVariable {Object} Throughout our interation, always keep track of the master/root.
+                * @param {Object} masterVariable Throughout our interation, always keep track of the master/root.
                 *  Initially this is the same as currVar.
-                * @param parentPathArray {Array} Array of names that indicate our breadcrumb path starting at
+                * @param {Array} parentPathArray Array of names that indicate our breadcrumb path starting at
                 *  masterVariable. Not including currName.
                 */
                walkTheObject: function ( currObj, currName, masterVariable, parentPathArray ) {
 
                        if ( currName ) {
                                currPathArray.push( currName );
-                               currVal = currObj[currName];
+                               currVal = currObj[ currName ];
                        } else {
                                currName = '(root)';
                                currVal = currObj;
                 * was called during the test suite (as far as the tracker knows).
                 * If not it adds it to missingTests.
                 *
-                * @param fnName {String}
+                * @param {String} fnName
                 * @return {Boolean}
                 */
                hasTest: function ( fnName ) {
                        if ( !( fnName in this.methodCallTracker ) ) {
-                               this.missingTests[fnName] = true;
+                               this.missingTests[ fnName ] = true;
                                return false;
                        }
                        return true;
                 * Injects a function (such as a spy that updates methodCallTracker when
                 * it's called) inside another function.
                 *
-                * @param masterVariable {Object}
-                * @param objectPathArray {Array}
-                * @param injectFn {Function}
+                * @param {Object} masterVariable
+                * @param {Array} objectPathArray
+                * @param {Function} injectFn
                 */
                injectCheck: function ( obj, key, injectFn ) {
                        var spy,
                        // Make the spy inherit from the original so that its static methods are also
                        // visible in the spy (e.g. when we inject a check into mw.log, mw.log.warn
                        // must remain accessible).
+                       // XXX: https://github.com/jshint/jshint/issues/2656
+                       /*jshint ignore:start */
                        /*jshint proto:true */
                        spy.__proto__ = val;
+                       /*jshint ignore:end */
 
                        // Objects are by reference, members (unless objects) are not.
                        obj[ key ] = spy;
index 361d3e0..41c555b 100644 (file)
@@ -67,7 +67,7 @@
 
                        opts = $.extend( {}, defaults, opts );
 
-                       var $spinner = $( '<div>', { 'class': 'mw-spinner', 'title': '...' } );
+                       var $spinner = $( '<div>', { 'class': 'mw-spinner', title: '...' } );
                        if ( opts.id !== undefined ) {
                                $spinner.attr( 'id', 'mw-spinner-' + opts.id );
                        }
index 7c9bec3..dc1c779 100644 (file)
@@ -142,6 +142,7 @@ $.suggestions = {
         * call to this function still pending will be canceled. If the value in the
         * textbox is empty or hasn't changed since the last time suggestions were fetched,
         * this function does nothing.
+        *
         * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
         */
        update: function ( context, delayed ) {
@@ -229,6 +230,7 @@ $.suggestions = {
 
        /**
         * Sets the value of a property, and updates the widget accordingly
+        *
         * @param {string} property Name of property
         * @param {Mixed} value Value to set property with
         */
@@ -246,10 +248,10 @@ $.suggestions = {
                        case 'update':
                        case '$region':
                        case 'expandFrom':
-                               context.config[property] = value;
+                               context.config[ property ] = value;
                                break;
                        case 'suggestions':
-                               context.config[property] = value;
+                               context.config[ property ] = value;
                                // Update suggestions
                                if ( context.data !== undefined ) {
                                        if ( context.data.$textbox.val().length === 0 ) {
@@ -277,7 +279,7 @@ $.suggestions = {
                                                                expandFrom = 'left';
 
                                                        // Catch invalid values, default to 'auto'
-                                                       } else if ( $.inArray( expandFrom, ['left', 'right', 'start', 'end', 'auto'] ) === -1 ) {
+                                                       } else if ( $.inArray( expandFrom, [ 'left', 'right', 'start', 'end', 'auto' ] ) === -1 ) {
                                                                expandFrom = 'auto';
                                                        }
 
@@ -336,11 +338,11 @@ $.suggestions = {
                                                expWidth = -1;
                                                for ( i = 0; i < context.config.suggestions.length; i++ ) {
                                                        /*jshint loopfunc:true */
-                                                       text = context.config.suggestions[i];
+                                                       text = context.config.suggestions[ i ];
                                                        $result = $( '<div>' )
                                                                .addClass( 'suggestions-result' )
                                                                .attr( 'rel', i )
-                                                               .data( 'text', context.config.suggestions[i] )
+                                                               .data( 'text', context.config.suggestions[ i ] )
                                                                .mousemove( function () {
                                                                        context.data.selectedWithMouse = true;
                                                                        $.suggestions.highlight(
@@ -352,7 +354,7 @@ $.suggestions = {
                                                                .appendTo( $results );
                                                        // Allow custom rendering
                                                        if ( typeof context.config.result.render === 'function' ) {
-                                                               context.config.result.render.call( $result, context.config.suggestions[i], context );
+                                                               context.config.result.render.call( $result, context.config.suggestions[ i ], context );
                                                        } else {
                                                                $result.text( text );
                                                        }
@@ -393,28 +395,29 @@ $.suggestions = {
                                }
                                break;
                        case 'maxRows':
-                               context.config[property] = Math.max( 1, Math.min( 100, value ) );
+                               context.config[ property ] = Math.max( 1, Math.min( 100, value ) );
                                break;
                        case 'delay':
-                               context.config[property] = Math.max( 0, Math.min( 1200, value ) );
+                               context.config[ property ] = Math.max( 0, Math.min( 1200, value ) );
                                break;
                        case 'cacheMaxAge':
-                               context.config[property] = Math.max( 1, value );
+                               context.config[ property ] = Math.max( 1, value );
                                break;
                        case 'maxExpandFactor':
-                               context.config[property] = Math.max( 1, value );
+                               context.config[ property ] = Math.max( 1, value );
                                break;
                        case 'cache':
                        case 'submitOnClick':
                        case 'positionFromLeft':
                        case 'highlightInput':
-                               context.config[property] = !!value;
+                               context.config[ property ] = !!value;
                                break;
                }
        },
 
        /**
         * Highlight a result in the results table
+        *
         * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
         * @param {boolean} updateTextbox If true, put the suggestion in the textbox
         */
@@ -484,6 +487,7 @@ $.suggestions = {
 
        /**
         * Respond to keypress event
+        *
         * @param {number} key Code of key pressed
         */
        keypress: function ( e, context, key ) {
@@ -595,18 +599,18 @@ $.fn.suggestions = function () {
 
                // Handle various calling styles
                if ( args.length > 0 ) {
-                       if ( typeof args[0] === 'object' ) {
+                       if ( typeof args[ 0 ] === 'object' ) {
                                // Apply set of properties
-                               for ( key in args[0] ) {
-                                       $.suggestions.configure( context, key, args[0][key] );
+                               for ( key in args[ 0 ] ) {
+                                       $.suggestions.configure( context, key, args[ 0 ][ key ] );
                                }
-                       } else if ( typeof args[0] === 'string' ) {
+                       } else if ( typeof args[ 0 ] === 'string' ) {
                                if ( args.length > 1 ) {
                                        // Set property values
-                                       $.suggestions.configure( context, args[0], args[1] );
+                                       $.suggestions.configure( context, args[ 0 ], args[ 1 ] );
                                } else if ( returnValue === null || returnValue === undefined ) {
                                        // Get property values, but don't give access to internal data - returns only the first
-                                       returnValue = ( args[0] in context.config ? undefined : context.config[args[0]] );
+                                       returnValue = ( args[ 0 ] in context.config ? undefined : context.config[ args[ 0 ] ] );
                                }
                        }
                }
index c8e3cb3..eaa138b 100644 (file)
@@ -70,8 +70,8 @@
                var i,
                        len = parsers.length;
                for ( i = 0; i < len; i++ ) {
-                       if ( parsers[i].id.toLowerCase() === name.toLowerCase() ) {
-                               return parsers[i];
+                       if ( parsers[ i ].id.toLowerCase() === name.toLowerCase() ) {
+                               return parsers[ i ];
                        }
                }
                return false;
@@ -95,8 +95,7 @@
                                return $node.attr( 'alt' ) || ''; // handle undefined alt
                        } else {
                                return $.map( $.makeArray( node.childNodes ), function ( elem ) {
-                                       // 1 is for document.ELEMENT_NODE (the constant is undefined on old browsers)
-                                       if ( elem.nodeType === 1 ) {
+                                       if ( elem.nodeType === Node.ELEMENT_NODE ) {
                                                return getElementSortKey( elem );
                                        } else {
                                                return $.text( elem );
                }
        }
 
-       function detectParserForColumn( table, rows, cellIndex ) {
+       function detectParserForColumn( table, rows, column ) {
                var l = parsers.length,
+                       cellIndex,
                        nodeValue,
                        // Start with 1 because 0 is the fallback parser
                        i = 1,
+                       lastRowIndex = -1,
                        rowIndex = 0,
                        concurrent = 0,
+                       empty = 0,
                        needed = ( rows.length > 4 ) ? 5 : rows.length;
 
                while ( i < l ) {
-                       if ( rows[rowIndex] && rows[rowIndex].cells[cellIndex] ) {
-                               nodeValue = $.trim( getElementSortKey( rows[rowIndex].cells[cellIndex] ) );
+                       if ( rows[ rowIndex ] ) {
+                               if ( rowIndex !== lastRowIndex ) {
+                                       lastRowIndex = rowIndex;
+                                       cellIndex = $( rows[ rowIndex ] ).data( 'columnToCell' )[ column ];
+                                       nodeValue = $.trim( getElementSortKey( rows[ rowIndex ].cells[ cellIndex ] ) );
+                               }
                        } else {
                                nodeValue = '';
                        }
 
                        if ( nodeValue !== '' ) {
-                               if ( parsers[i].is( nodeValue, table ) ) {
+                               if ( parsers[ i ].is( nodeValue, table ) ) {
                                        concurrent++;
                                        rowIndex++;
                                        if ( concurrent >= needed ) {
                                                // Confirmed the parser for multiple cells, let's return it
-                                               return parsers[i];
+                                               return parsers[ i ];
                                        }
                                } else {
                                        // Check next parser, reset rows
                                        i++;
                                        rowIndex = 0;
                                        concurrent = 0;
+                                       empty = 0;
                                }
                        } else {
                                // Empty cell
+                               empty++;
                                rowIndex++;
-                               if ( rowIndex > rows.length ) {
-                                       rowIndex = 0;
+                               if ( rowIndex >= rows.length ) {
+                                       if ( concurrent >= rows.length - empty ) {
+                                               // Confirmed the parser for all filled cells
+                                               return parsers[ i ];
+                                       }
+                                       // Check next parser, reset rows
                                        i++;
+                                       rowIndex = 0;
+                                       concurrent = 0;
+                                       empty = 0;
                                }
                        }
                }
 
                // 0 is always the generic parser (text)
-               return parsers[0];
+               return parsers[ 0 ];
        }
 
        function buildParserCache( table, $headers ) {
-               var sortType, cells, len, i, parser,
-                       rows = table.tBodies[0].rows,
+               var sortType, len, j, parser,
+                       rows = table.tBodies[ 0 ].rows,
+                       config = $( table ).data( 'tablesorter' ).config,
                        parsers = [];
 
-               if ( rows[0] ) {
-
-                       cells = rows[0].cells;
-                       len = cells.length;
-
-                       for ( i = 0; i < len; i++ ) {
+               if ( rows[ 0 ] ) {
+                       len = config.columns;
+                       for ( j = 0; j < len; j++ ) {
                                parser = false;
-                               sortType = $headers.eq( i ).data( 'sortType' );
+                               sortType = $headers.eq( config.columnToHeader[ j ] ).data( 'sortType' );
                                if ( sortType !== undefined ) {
                                        parser = getParserById( sortType );
                                }
 
                                if ( parser === false ) {
-                                       parser = detectParserForColumn( table, rows, i );
+                                       parser = detectParserForColumn( table, rows, j );
                                }
 
                                parsers.push( parser );
 
        function buildCache( table ) {
                var i, j, $row, cols,
-                       totalRows = ( table.tBodies[0] && table.tBodies[0].rows.length ) || 0,
-                       totalCells = ( table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length ) || 0,
+                       totalRows = ( table.tBodies[ 0 ] && table.tBodies[ 0 ].rows.length ) || 0,
                        config = $( table ).data( 'tablesorter' ).config,
                        parsers = config.parsers,
+                       len = parsers.length,
+                       cellIndex,
                        cache = {
                                row: [],
                                normalized: []
                        };
 
-               for ( i = 0; i < totalRows; ++i ) {
+               for ( i = 0; i < totalRows; i++ ) {
 
                        // Add the table data to main data array
-                       $row = $( table.tBodies[0].rows[i] );
+                       $row = $( table.tBodies[ 0 ].rows[ i ] );
                        cols = [];
 
                        // if this is a child row, add it to the last row's children and
                        // continue to the next row
                        if ( $row.hasClass( config.cssChildRow ) ) {
-                               cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add( $row );
+                               cache.row[ cache.row.length - 1 ] = cache.row[ cache.row.length - 1 ].add( $row );
                                // go to the next for loop
                                continue;
                        }
 
                        cache.row.push( $row );
 
-                       for ( j = 0; j < totalCells; ++j ) {
-                               cols.push( parsers[j].format( getElementSortKey( $row[0].cells[j] ), table, $row[0].cells[j] ) );
+                       for ( j = 0; j < len; j++ ) {
+                               cellIndex = $row.data( 'columnToCell' )[ j ];
+                               cols.push( parsers[ j ].format( getElementSortKey( $row[ 0 ].cells[ cellIndex ] ) ) );
                        }
 
                        cols.push( cache.normalized.length ); // add position for rowCache
                        row = cache.row,
                        normalized = cache.normalized,
                        totalRows = normalized.length,
-                       checkCell = ( normalized[0].length - 1 ),
+                       checkCell = ( normalized[ 0 ].length - 1 ),
                        fragment = document.createDocumentFragment();
 
                for ( i = 0; i < totalRows; i++ ) {
-                       pos = normalized[i][checkCell];
+                       pos = normalized[ i ][ checkCell ];
 
-                       l = row[pos].length;
+                       l = row[ pos ].length;
 
                        for ( j = 0; j < l; j++ ) {
-                               fragment.appendChild( row[pos][j] );
+                               fragment.appendChild( row[ pos ][ j ] );
                        }
 
                }
-               table.tBodies[0].appendChild( fragment );
+               table.tBodies[ 0 ].appendChild( fragment );
 
                $( table ).trigger( 'sortEnd.tablesorter' );
        }
         *
         * After this, it will look at all rows at the bottom for footer rows
         * And place these in a tfoot using similar rules.
-        * @param $table jQuery object for a <table>
+        *
+        * @param {jQuery} $table object for a <table>
         */
        function emulateTHeadAndFoot( $table ) {
                var $thead, $tfoot, i, len,
                        $tfoot = $( '<tfoot>' );
                        len = $rows.length;
                        for ( i = len - 1; i >= 0; i-- ) {
-                               if ( $( $rows[i] ).children( 'td' ).length ) {
+                               if ( $( $rows[ i ] ).children( 'td' ).length ) {
                                        break;
                                }
-                               $tfoot.prepend( $( $rows[i] ) );
+                               $tfoot.prepend( $( $rows[ i ] ) );
                        }
                        $table.append( $tfoot );
                }
        }
 
+       function uniqueElements( array ) {
+               var uniques = [];
+               $.each( array, function ( index, elem ) {
+                       if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
+                               uniques.push( elem );
+                       }
+               } );
+               return uniques;
+       }
+
        function buildHeaders( table, msg ) {
                var config = $( table ).data( 'tablesorter' ).config,
                        maxSeen = 0,
                        colspanOffset = 0,
                        columns,
-                       i,
+                       k,
                        $cell,
                        rowspan,
                        colspan,
                        headerCount,
                        longestTR,
+                       headerIndex,
                        exploded,
                        $tableHeaders = $( [] ),
                        $tableRows = $( 'thead:eq(0) > tr', table );
                                        colspan = Number( cell.colSpan );
 
                                        // Skip the spots in the exploded matrix that are already filled
-                                       while ( exploded[rowIndex] && exploded[rowIndex][columnIndex] !== undefined ) {
+                                       while ( exploded[ rowIndex ] && exploded[ rowIndex ][ columnIndex ] !== undefined ) {
                                                ++columnIndex;
                                        }
 
                                        // in the exploded matrix rowspan times colspan times, with the proper offsets
                                        for ( matrixColumnIndex = columnIndex; matrixColumnIndex < columnIndex + colspan; ++matrixColumnIndex ) {
                                                for ( matrixRowIndex = rowIndex; matrixRowIndex < rowIndex + rowspan; ++matrixRowIndex ) {
-                                                       if ( !exploded[matrixRowIndex] ) {
-                                                               exploded[matrixRowIndex] = [];
+                                                       if ( !exploded[ matrixRowIndex ] ) {
+                                                               exploded[ matrixRowIndex ] = [];
                                                        }
-                                                       exploded[matrixRowIndex][matrixColumnIndex] = cell;
+                                                       exploded[ matrixRowIndex ][ matrixColumnIndex ] = cell;
                                                }
                                        }
                                } );
                                }
                        } );
                        // We cannot use $.unique() here because it sorts into dom order, which is undesirable
-                       $tableHeaders = $( uniqueElements( exploded[longestTR] ) ).filter( 'th' );
+                       $tableHeaders = $( uniqueElements( exploded[ longestTR ] ) ).filter( 'th' );
                }
 
                // as each header can span over multiple columns (using colspan=N),
                // we have to bidirectionally map headers to their columns and columns to their headers
-               $tableHeaders.each( function ( headerIndex ) {
+               config.columnToHeader = [];
+               config.headerToColumns = [];
+               config.headerList = [];
+               headerIndex = 0;
+               $tableHeaders.each( function () {
                        $cell = $( this );
                        columns = [];
 
-                       for ( i = 0; i < this.colSpan; i++ ) {
-                               config.columnToHeader[ colspanOffset + i ] = headerIndex;
-                               columns.push( colspanOffset + i );
-                       }
-
-                       config.headerToColumns[ headerIndex ] = columns;
-                       colspanOffset += this.colSpan;
-
-                       $cell.data( {
-                               headerIndex: headerIndex,
-                               order: 0,
-                               count: 0
-                       } );
-
-                       if ( $cell.hasClass( config.unsortableClass ) ) {
-                               $cell.data( 'sortDisabled', true );
-                       }
-
-                       if ( !$cell.data( 'sortDisabled' ) ) {
+                       if ( !$cell.hasClass( config.unsortableClass ) ) {
                                $cell
                                        .addClass( config.cssHeader )
                                        .prop( 'tabIndex', 0 )
                                        .attr( {
                                                role: 'columnheader button',
-                                               title: msg[1]
+                                               title: msg[ 1 ]
                                        } );
+
+                               for ( k = 0; k < this.colSpan; k++ ) {
+                                       config.columnToHeader[ colspanOffset + k ] = headerIndex;
+                                       columns.push( colspanOffset + k );
+                               }
+
+                               config.headerToColumns[ headerIndex ] = columns;
+
+                               $cell.data( {
+                                       headerIndex: headerIndex,
+                                       order: 0,
+                                       count: 0
+                               } );
+
+                               // add only sortable cells to headerList
+                               config.headerList[ headerIndex ] = this;
+                               headerIndex++;
                        }
 
-                       // add cell to headerList
-                       config.headerList[headerIndex] = this;
+                       colspanOffset += this.colSpan;
                } );
 
-               return $tableHeaders;
+               // number of columns with extended colspan, inclusive unsortable
+               // parsers[j], cache[][j], columnToHeader[j], columnToCell[j] have so many elements
+               config.columns = colspanOffset;
 
+               return $tableHeaders.not( '.' + config.unsortableClass );
+       }
+
+       function isValueInArray( v, a ) {
+               var i,
+                               len = a.length;
+               for ( i = 0; i < len; i++ ) {
+                       if ( a[ i ][ 0 ] === v ) {
+                               return true;
+                       }
+               }
+               return false;
        }
 
        /**
                $.each( headerToColumns, function ( headerIndex, columns ) {
 
                        $.each( columns, function ( i, columnIndex ) {
-                               var header = $headers[headerIndex],
+                               var header = $headers[ headerIndex ],
                                        $header = $( header );
 
                                if ( !isValueInArray( columnIndex, sortList ) ) {
                                } else {
                                        // Column shall be sorted: Apply designated count and order.
                                        $.each( sortList, function ( j, sortColumn ) {
-                                               if ( sortColumn[0] === i ) {
+                                               if ( sortColumn[ 0 ] === i ) {
                                                        $header.data( {
-                                                               order: sortColumn[1],
-                                                               count: sortColumn[1] + 1
+                                                               order: sortColumn[ 1 ],
+                                                               count: sortColumn[ 1 ] + 1
                                                        } );
                                                        return false;
                                                }
                } );
        }
 
-       function isValueInArray( v, a ) {
-               var i,
-                       len = a.length;
-               for ( i = 0; i < len; i++ ) {
-                       if ( a[i][0] === v ) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       function uniqueElements( array ) {
-               var uniques = [];
-               $.each( array, function ( index, elem ) {
-                       if ( elem !== undefined && $.inArray( elem, uniques ) === -1 ) {
-                               uniques.push( elem );
-                       }
-               } );
-               return uniques;
-       }
-
        function setHeadersCss( table, $headers, list, css, msg, columnToHeader ) {
                // Remove all header information and reset titles to default message
-               $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
+               $headers.removeClass( css[ 0 ] ).removeClass( css[ 1 ] ).attr( 'title', msg[ 1 ] );
 
                for ( var i = 0; i < list.length; i++ ) {
-                       $headers.eq( columnToHeader[ list[i][0] ] )
-                               .addClass( css[ list[i][1] ] )
-                               .attr( 'title', msg[ list[i][1] ] );
+                       $headers.eq( columnToHeader[ list[ i ][ 0 ] ] )
+                               .addClass( css[ list[ i ][ 1 ] ] )
+                               .attr( 'title', msg[ list[ i ][ 1 ] ] );
                }
        }
 
                        sortFn = [],
                        len = sortList.length;
                for ( i = 0; i < len; i++ ) {
-                       sortFn[i] = ( sortList[i][1] ) ? sortTextDesc : sortText;
+                       sortFn[ i ] = ( sortList[ i ][ 1 ] ) ? sortTextDesc : sortText;
                }
                cache.normalized.sort( function ( array1, array2 ) {
                        var i, col, ret;
                        for ( i = 0; i < len; i++ ) {
-                               col = sortList[i][0];
-                               ret = sortFn[i].call( this, array1[col], array2[col] );
+                               col = sortList[ i ][ 0 ];
+                               ret = sortFn[ i ].call( this, array1[ col ], array2[ col ] );
                                if ( ret !== 0 ) {
                                        return ret;
                                }
                        }
                        // Fall back to index number column to ensure stable sort
-                       return sortText.call( this, array1[array1.length - 1], array2[array2.length - 1] );
+                       return sortText.call( this, array1[ array1.length - 1 ], array2[ array2.length - 1 ] );
                } );
                return cache;
        }
                        separatorTransformTable = mw.config.get( 'wgSeparatorTransformTable' ),
                        digitTransformTable = mw.config.get( 'wgDigitTransformTable' );
 
-               if ( separatorTransformTable === null || ( separatorTransformTable[0] === '' && digitTransformTable[2] === '' ) ) {
+               if ( separatorTransformTable === null || ( separatorTransformTable[ 0 ] === '' && digitTransformTable[ 2 ] === '' ) ) {
                        ts.transformTable = false;
                } else {
                        ts.transformTable = {};
 
                        // Unpack the transform table
-                       ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
-                       localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
+                       ascii = separatorTransformTable[ 0 ].split( '\t' ).concat( digitTransformTable[ 0 ].split( '\t' ) );
+                       localised = separatorTransformTable[ 1 ].split( '\t' ).concat( digitTransformTable[ 1 ].split( '\t' ) );
 
                        // Construct regex for number identification
                        for ( i = 0; i < ascii.length; i++ ) {
-                               ts.transformTable[localised[i]] = ascii[i];
-                               digits.push( mw.RegExp.escape( localised[i] ) );
+                               ts.transformTable[ localised[ i ] ] = ascii[ i ];
+                               digits.push( mw.RegExp.escape( localised[ i ] ) );
                        }
                }
                digitClass = '[' + digits.join( '', digits ) + ']';
                ts.monthNames = {};
 
                for ( i = 0; i < 12; i++ ) {
-                       name = mw.language.months.names[i].toLowerCase();
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.names[ i ].toLowerCase();
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
-                       name = mw.language.months.genitive[i].toLowerCase();
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.genitive[ i ].toLowerCase();
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
-                       name = mw.language.months.abbrev[i].toLowerCase().replace( '.', '' );
-                       ts.monthNames[name] = i + 1;
+                       name = mw.language.months.abbrev[ i ].toLowerCase().replace( '.', '' );
+                       ts.monthNames[ name ] = i + 1;
                        regex.push( mw.RegExp.escape( name ) );
                }
 
 
                // Build RegEx
                // Any date formated with . , ' - or /
-               ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i );
+               ts.dateRegex[ 0 ] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i );
 
                // Written Month name, dmy
-               ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[ 1 ] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
                // Written Month name, mdy
-               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
+               ts.dateRegex[ 2 ] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]+(\\d{1,2})[\\,\\.\\-\\/\'\\s]+(\\d{2,4})\\s*$', 'i' );
 
        }
 
         * Replace all rowspanned cells in the body with clones in each row, so sorting
         * need not worry about them.
         *
-        * @param $table jQuery object for a <table>
+        * @param {jQuery} $table jQuery object for a <table>
         */
        function explodeRowspans( $table ) {
                var spanningRealCellIndex, rowSpan, colSpan,
                                col = 0,
                                l = this.cells.length;
                        for ( i = 0; i < l; i++ ) {
-                               $( this.cells[i] ).data( 'tablesorter', {
+                               $( this.cells[ i ] ).data( 'tablesorter', {
                                        realCellIndex: col,
                                        realRowIndex: this.rowIndex
                                } );
-                               col += this.cells[i].colSpan;
+                               col += this.cells[ i ].colSpan;
                        }
                } );
 
                }
 
                while ( rowspanCells.length ) {
-                       if ( $.data( rowspanCells[0], 'tablesorter' ).needResort ) {
+                       if ( $.data( rowspanCells[ 0 ], 'tablesorter' ).needResort ) {
                                resortCells();
                        }
 
                        cell.rowSpan = 1;
                        $nextRows = $( cell ).parent().nextAll();
                        for ( i = 0; i < rowSpan - 1; i++ ) {
-                               $tds = $( $nextRows[i].cells ).filter( filterfunc );
+                               $tds = $( $nextRows[ i ].cells ).filter( filterfunc );
                                $clone = $( cell ).clone();
                                $clone.data( 'tablesorter', {
                                        realCellIndex: spanningRealCellIndex,
                }
        }
 
+       /**
+        * Build index to handle colspanned cells in the body.
+        * Set the cell index for each column in an array,
+        * so that colspaned cells set multiple in this array.
+        * columnToCell[collumnIndex] point at the real cell in this row.
+        *
+        * @param {jQuery} $table object for a <table>
+        */
+       function manageColspans( $table ) {
+               var i, j, k, $row,
+                       $rows = $table.find( '> tbody > tr' ),
+                       totalRows = $rows.length || 0,
+                       config = $table.data( 'tablesorter' ).config,
+                       columns = config.columns,
+                       columnToCell, cellsInRow, index;
+
+               for ( i = 0; i < totalRows; i++ ) {
+
+                       $row = $rows.eq( i );
+                       // if this is a child row, continue to the next row (as buildCache())
+                       if ( $row.hasClass( config.cssChildRow ) ) {
+                               // go to the next for loop
+                               continue;
+                       }
+
+                       columnToCell = [];
+                       cellsInRow = ( $row[ 0 ].cells.length ) || 0;  // all cells in this row
+                       index = 0; // real cell index in this row
+                       for ( j = 0; j < columns; index++ ) {
+                               if ( index === cellsInRow ) {
+                                       // Row with cells less than columns: add empty cell
+                                       $row.append( '<td>' );
+                                       cellsInRow++;
+                               }
+                               for ( k = 0; k < $row[ 0 ].cells[ index ].colSpan; k++ ) {
+                                       columnToCell[ j++ ] = index;
+                               }
+                       }
+                       // Store it in $row
+                       $row.data( 'columnToCell', columnToCell );
+               }
+       }
+
        function buildCollationTable() {
                ts.collationTable = mw.config.get( 'tableSorterCollation' );
                ts.collationRegex = null;
                $.each( sortObjects, function ( i, sortObject ) {
                        $.each( sortObject, function ( columnIndex, order ) {
                                var orderIndex = ( order === 'desc' ) ? 1 : 0;
-                               sortList.push( [parseInt( columnIndex, 10 ), orderIndex] );
+                               sortList.push( [ parseInt( columnIndex, 10 ), orderIndex ] );
                        } );
                } );
                return sortList;
                                cssChildRow: 'expand-child',
                                sortMultiSortKey: 'shiftKey',
                                unsortableClass: 'unsortable',
-                               parsers: {},
+                               parsers: [],
                                cancelSelection: true,
                                sortList: [],
                                headerList: [],
                                headerToColumns: [],
-                               columnToHeader: []
+                               columnToHeader: [],
+                               columns: 0
                        },
 
                        dateRegex: [],
                        monthNames: {},
 
                        /**
-                        * @param $tables {jQuery}
-                        * @param settings {Object} (optional)
+                        * @param {jQuery} $tables
+                        * @param {Object} [settings]
                         */
                        construct: function ( $tables, settings ) {
                                return $tables.each( function ( i, table ) {
                                                }
 
                                                explodeRowspans( $table );
+                                               manageColspans( $table );
 
                                                // Try to auto detect column type, and store in tables config
                                                config.parsers = buildParserCache( table, $headers );
 
                                        // Apply event handling to headers
                                        // this is too big, perhaps break it out?
-                                       $headers.not( '.' + config.unsortableClass ).on( 'keypress click', function ( e ) {
+                                       $headers.on( 'keypress click', function ( e ) {
                                                var cell, $cell, columns, newSortList, i,
                                                        totalRows,
                                                        j, s, o;
                                                // cells get event .change() and bubbles up to the <table> here
                                                cache = buildCache( table );
 
-                                               totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
-                                               if ( !table.sortDisabled && totalRows > 0 ) {
+                                               totalRows = ( $table[ 0 ].tBodies[ 0 ] && $table[ 0 ].tBodies[ 0 ].rows.length ) || 0;
+                                               if ( totalRows > 0 ) {
                                                        cell = this;
                                                        $cell = $( cell );
 
                                                        columns = config.headerToColumns[ $cell.data( 'headerIndex' ) ];
                                                        newSortList = $.map( columns, function ( c ) {
                                                                // jQuery "helpfully" flattens the arrays...
-                                                               return [[c, $cell.data( 'order' )]];
+                                                               return [ [ c, $cell.data( 'order' ) ] ];
                                                        } );
                                                        // Index of first column belonging to this header
-                                                       i = columns[0];
+                                                       i = columns[ 0 ];
 
-                                                       if ( !e[config.sortMultiSortKey] ) {
+                                                       if ( !e[ config.sortMultiSortKey ] ) {
                                                                // User only wants to sort on one column set
                                                                // Flush the sort list and add new columns
                                                                config.sortList = newSortList;
                                                                        // The user has clicked on an already sorted column.
                                                                        // Reverse the sorting direction for all tables.
                                                                        for ( j = 0; j < config.sortList.length; j++ ) {
-                                                                               s = config.sortList[j];
-                                                                               o = config.headerList[s[0]];
-                                                                               if ( isValueInArray( s[0], newSortList ) ) {
-                                                                                       $( o ).data( 'count', s[1] + 1 );
-                                                                                       s[1] = $( o ).data( 'count' ) % 2;
+                                                                               s = config.sortList[ j ];
+                                                                               o = config.headerList[ config.columnToHeader[ s[ 0 ] ] ];
+                                                                               if ( isValueInArray( s[ 0 ], newSortList ) ) {
+                                                                                       $( o ).data( 'count', s[ 1 ] + 1 );
+                                                                                       s[ 1 ] = $( o ).data( 'count' ) % 2;
                                                                                }
                                                                        }
                                                                } else {
                                                        setHeadersOrder( $headers, config.sortList, config.headerToColumns );
 
                                                        // Set CSS for headers
-                                                       setHeadersCss( $table[0], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
+                                                       setHeadersCss( $table[ 0 ], $headers, config.sortList, sortCSS, sortMsg, config.columnToHeader );
                                                        appendToTable(
-                                                               $table[0], multisort( $table[0], config.sortList, cache )
+                                                               $table[ 0 ], multisort( $table[ 0 ], config.sortList, cache )
                                                        );
 
                                                        // Stop normal event by returning false
                                         * Passing an empty array will reset sorting (basically just reset the headers
                                         * making the table appear unsorted).
                                         *
-                                        * @param sortList {Array} (optional) List of sort objects.
+                                        * @param {Array} [sortList] List of sort objects.
                                         */
                                        $table.data( 'tablesorter' ).sort = function ( sortList ) {
 
 
                                        // sort initially
                                        if ( config.sortList.length > 0 ) {
-                                               setupForFirstSort();
                                                config.sortList = convertSortList( config.sortList );
                                                $table.data( 'tablesorter' ).sort();
                                        }
                                        len = parsers.length,
                                        a = true;
                                for ( i = 0; i < len; i++ ) {
-                                       if ( parsers[i].id.toLowerCase() === parser.id.toLowerCase() ) {
+                                       if ( parsers[ i ].id.toLowerCase() === parser.id.toLowerCase() ) {
                                                a = false;
                                        }
                                }
                                        for ( p = 0; p < s.length; p++ ) {
                                                c = s.charAt( p );
                                                if ( c in ts.transformTable ) {
-                                                       out += ts.transformTable[c];
+                                                       out += ts.transformTable[ c ];
                                                } else {
                                                        out += c;
                                                }
                        },
 
                        clearTableBody: function ( table ) {
-                               $( table.tBodies[0] ).empty();
+                               $( table.tBodies[ 0 ] ).empty();
                        },
 
                        getParser: function ( id ) {
                                buildCollationTable();
 
                                return getParserById( id );
+                       },
+
+                       getParsers: function () {  // for table diagnosis
+                               return parsers;
                        }
                };
 
                        if ( ts.collationRegex ) {
                                var tsc = ts.collationTable;
                                s = s.replace( ts.collationRegex, function ( match ) {
-                                       var r = tsc[match] ? tsc[match] : tsc[match.toUpperCase()];
+                                       var r = tsc[ match ] ? tsc[ match ] : tsc[ match.toUpperCase() ];
                                        return r.toLowerCase();
                                } );
                        }
        ts.addParser( {
                id: 'IPAddress',
                is: function ( s ) {
-                       return ts.rgx.IPAddress[0].test( s );
+                       return ts.rgx.IPAddress[ 0 ].test( s );
                },
                format: function ( s ) {
                        var i, item,
                                r = '',
                                len = a.length;
                        for ( i = 0; i < len; i++ ) {
-                               item = a[i];
+                               item = a[ i ];
                                if ( item.length === 1 ) {
                                        r += '00' + item;
                                } else if ( item.length === 2 ) {
        ts.addParser( {
                id: 'currency',
                is: function ( s ) {
-                       return ts.rgx.currency[0].test( s );
+                       return ts.rgx.currency[ 0 ].test( s );
                },
                format: function ( s ) {
-                       return $.tablesorter.formatDigit( s.replace( ts.rgx.currency[1], '' ) );
+                       return $.tablesorter.formatDigit( s.replace( ts.rgx.currency[ 1 ], '' ) );
                },
                type: 'numeric'
        } );
        ts.addParser( {
                id: 'url',
                is: function ( s ) {
-                       return ts.rgx.url[0].test( s );
+                       return ts.rgx.url[ 0 ].test( s );
                },
                format: function ( s ) {
-                       return $.trim( s.replace( ts.rgx.url[1], '' ) );
+                       return $.trim( s.replace( ts.rgx.url[ 1 ], '' ) );
                },
                type: 'text'
        } );
        ts.addParser( {
                id: 'isoDate',
                is: function ( s ) {
-                       return ts.rgx.isoDate[0].test( s );
+                       return ts.rgx.isoDate[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( ( s !== '' ) ? new Date( s.replace(
        ts.addParser( {
                id: 'usLongDate',
                is: function ( s ) {
-                       return ts.rgx.usLongDate[0].test( s );
+                       return ts.rgx.usLongDate[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( new Date( s ).getTime() );
        ts.addParser( {
                id: 'date',
                is: function ( s ) {
-                       return ( ts.dateRegex[0].test( s ) || ts.dateRegex[1].test( s ) || ts.dateRegex[2].test( s ) );
+                       return ( ts.dateRegex[ 0 ].test( s ) || ts.dateRegex[ 1 ].test( s ) || ts.dateRegex[ 2 ].test( s ) );
                },
                format: function ( s ) {
                        var match, y;
                        s = $.trim( s.toLowerCase() );
 
-                       if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
+                       if ( ( match = s.match( ts.dateRegex[ 0 ] ) ) !== null ) {
                                if ( mw.config.get( 'wgDefaultDateFormat' ) === 'mdy' || mw.config.get( 'wgPageContentLanguage' ) === 'en' ) {
-                                       s = [ match[3], match[1], match[2] ];
+                                       s = [ match[ 3 ], match[ 1 ], match[ 2 ] ];
                                } else if ( mw.config.get( 'wgDefaultDateFormat' ) === 'dmy' ) {
-                                       s = [ match[3], match[2], match[1] ];
+                                       s = [ match[ 3 ], match[ 2 ], match[ 1 ] ];
                                } else {
                                        // If we get here, we don't know which order the dd-dd-dddd
                                        // date is in. So return something not entirely invalid.
                                        return '99999999';
                                }
-                       } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
-                               s = [ match[3], String( ts.monthNames[match[2]] ), match[1] ];
-                       } else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) {
-                               s = [ match[3], String( ts.monthNames[match[1]] ), match[2] ];
+                       } else if ( ( match = s.match( ts.dateRegex[ 1 ] ) ) !== null ) {
+                               s = [ match[ 3 ], String( ts.monthNames[ match[ 2 ] ] ), match[ 1 ] ];
+                       } else if ( ( match = s.match( ts.dateRegex[ 2 ] ) ) !== null ) {
+                               s = [ match[ 3 ], String( ts.monthNames[ match[ 1 ] ] ), match[ 2 ] ];
                        } else {
                                // Should never get here
                                return '99999999';
                        }
 
                        // Pad Month and Day
-                       if ( s[1].length === 1 ) {
-                               s[1] = '0' + s[1];
+                       if ( s[ 1 ].length === 1 ) {
+                               s[ 1 ] = '0' + s[ 1 ];
                        }
-                       if ( s[2].length === 1 ) {
-                               s[2] = '0' + s[2];
+                       if ( s[ 2 ].length === 1 ) {
+                               s[ 2 ] = '0' + s[ 2 ];
                        }
 
-                       if ( ( y = parseInt( s[0], 10 ) ) < 100 ) {
+                       if ( ( y = parseInt( s[ 0 ], 10 ) ) < 100 ) {
                                // Guestimate years without centuries
                                if ( y < 30 ) {
-                                       s[0] = 2000 + y;
+                                       s[ 0 ] = 2000 + y;
                                } else {
-                                       s[0] = 1900 + y;
+                                       s[ 0 ] = 1900 + y;
                                }
                        }
-                       while ( s[0].length < 4 ) {
-                               s[0] = '0' + s[0];
+                       while ( s[ 0 ].length < 4 ) {
+                               s[ 0 ] = '0' + s[ 0 ];
                        }
                        return parseInt( s.join( '' ), 10 );
                },
        ts.addParser( {
                id: 'time',
                is: function ( s ) {
-                       return ts.rgx.time[0].test( s );
+                       return ts.rgx.time[ 0 ].test( s );
                },
                format: function ( s ) {
                        return $.tablesorter.formatFloat( new Date( '2000/01/01 ' + s ).getTime() );
index 5111930..b901642 100644 (file)
                                                        insertText = '',
                                                        selTextArr = selText.split( '\n' );
                                                for ( i = 0; i < selTextArr.length; i++ ) {
-                                                       insertText += pre + selTextArr[i] + post;
+                                                       insertText += pre + selTextArr[ i ] + post;
                                                        if ( i !== selTextArr.length - 1 ) {
                                                                insertText += '\n';
                                                        }
                                                                context.fn.restoreCursorAndScrollTop();
                                                        }
                                                        if ( options.selectionStart !== undefined ) {
-                                                               $( this ).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                               $( this ).textSelection( 'setSelection', { start: options.selectionStart, end: options.selectionEnd } );
                                                        }
 
                                                        selText = $( this ).textSelection( 'getSelection' );
 
                                                        $( this ).focus();
                                                        if ( options.selectionStart !== undefined ) {
-                                                               $( this ).textSelection( 'setSelection', { 'start': options.selectionStart, 'end': options.selectionEnd } );
+                                                               $( this ).textSelection( 'setSelection', { start: options.selectionStart, end: options.selectionEnd } );
                                                        }
 
                                                        selText = $( this ).textSelection( 'getSelection' );
                         *
                         * Scroll a textarea to the current cursor position. You can set the cursor
                         * position with setSelection()
-                        * @param options boolean Whether to force a scroll even if the caret position
+                        *
+                        * @param {boolean} options Whether to force a scroll even if the caret position
                         *  is already visible. Defaults to false
                         *
                         * @fixme document the options parameters (function body suggests options.force is a boolean, not options itself)
                        context.fn.restoreSelection();
                        needSave = true;
                }
-               retval = ( alternateFn && alternateFn[command] || fn[command] ).call( this, options );
+               retval = ( alternateFn && alternateFn[ command ] || fn[ command ] ).call( this, options );
                if ( hasWikiEditor && needSave ) {
                        context.fn.saveSelection();
                }
diff --git a/resources/src/mediawiki.action/images/checker.png b/resources/src/mediawiki.action/images/checker.png
new file mode 100644 (file)
index 0000000..3e9e3d0
Binary files /dev/null and b/resources/src/mediawiki.action/images/checker.png differ
index e181472..011f9c5 100644 (file)
@@ -53,9 +53,9 @@
                for ( i = 0; i < collapsibleLists.length; i++ ) {
                        // Pass to a function for iteration-local variables
                        handleOne(
-                               $editForm.find( collapsibleLists[i].listSel ),
-                               $editForm.find( collapsibleLists[i].togglerSel ),
-                               collapsibleLists[i].cookieName
+                               $editForm.find( collapsibleLists[ i ].listSel ),
+                               $editForm.find( collapsibleLists[ i ].togglerSel ),
+                               collapsibleLists[ i ].cookieName
                        );
                }
        } );
index 5f1058f..ab4535b 100644 (file)
@@ -17,6 +17,7 @@
                $editform = $( '#editform' );
                $textbox = $editform.find( '#wpTextbox1' );
                $summary = $editform.find( '#wpSummary' );
+               $spinner = $( '.mw-spinner-preview' );
                $errorBox = $( '.errorbox' );
                section = $editform.find( '[name="wpSection"]' ).val();
 
@@ -36,7 +37,7 @@
                $wikiPreview.show();
 
                // Jump to where the preview will appear
-               $wikiPreview[0].scrollIntoView();
+               $wikiPreview[ 0 ].scrollIntoView();
 
                copySelectors = [
                        // Main
                // Not shown during normal preview, to be removed if present
                $( '.mw-newarticletext' ).remove();
 
-               $spinner = $.createSpinner( {
-                       size: 'large',
-                       type: 'block'
-               } );
-               $wikiPreview.before( $spinner );
-               $spinner.css( {
-                       marginTop: $spinner.height()
-               } );
+               if ( $spinner.length === 0 ) {
+                       $spinner = $.createSpinner( {
+                               size: 'large',
+                               type: 'block'
+                       } )
+                               .addClass( 'mw-spinner-preview' )
+                               .css( 'margin-top', '1em' );
+                       $wikiPreview.before( $spinner );
+               } else {
+                       $spinner.show();
+               }
 
                // Can't use fadeTo because it calls show(), and we might want to keep some elements hidden
                // (e.g. empty #catlinks)
                                        indexpageids: '',
                                        prop: 'revisions',
                                        titles: mw.config.get( 'wgPageName' ),
-                                       rvdifftotext: response.parse.text['*'],
+                                       rvdifftotext: response.parse.text[ '*' ],
                                        rvprop: ''
                                };
                                if ( section !== '' ) {
                                }
                                return api.post( postData ).done( function ( result2 ) {
                                        try {
-                                               var diffHtml = result2.query.pages[result2.query.pageids[0]]
-                                                       .revisions[0].diff['*'];
+                                               var diffHtml = result2.query.pages[ result2.query.pageids[ 0 ] ]
+                                                       .revisions[ 0 ].diff[ '*' ];
                                                $wikiDiff.find( 'table.diff tbody' ).html( diffHtml );
                                        } catch ( e ) {
                                                // "result.blah is undefined" error, ignore
                                        );
                                }
                                if ( response.parse.categorieshtml ) {
-                                       $( '#catlinks' ).replaceWith( response.parse.categorieshtml['*'] );
+                                       $( '#catlinks' ).replaceWith( response.parse.categorieshtml[ '*' ] );
                                }
                                if ( response.parse.templates ) {
                                        newList = [];
                                                li = $( '<li>' )
                                                        .append( $( '<a>' )
                                                                .attr( {
-                                                                       'href': mw.util.getUrl( template['*'] ),
+                                                                       href: mw.util.getUrl( template[ '*' ] ),
                                                                        'class': ( template.exists !== undefined ? '' : 'new' )
                                                                } )
-                                                               .text( template['*'] )
+                                                               .text( template[ '*' ] )
                                                        );
                                                newList.push( li );
                                        } );
                                        $editform.find( '.templatesUsed .mw-editfooter-list' ).detach().empty().append( newList ).appendTo( '.templatesUsed' );
                                }
                                if ( response.parse.limitreporthtml ) {
-                                       $( '.limitreport' ).html( response.parse.limitreporthtml['*'] );
+                                       $( '.limitreport' ).html( response.parse.limitreporthtml[ '*' ] );
                                }
                                if ( response.parse.langlinks && mw.config.get( 'skin' ) === 'vector' ) {
                                        newList = [];
                                                        .addClass( 'interlanguage-link interwiki-' + langlink.lang )
                                                        .append( $( '<a>' )
                                                                .attr( {
-                                                                       'href': langlink.url,
-                                                                       'title': langlink['*'] + ' - ' + langlink.langname,
-                                                                       'lang': langlink.lang,
-                                                                       'hreflang': langlink.lang
+                                                                       href: langlink.url,
+                                                                       title: langlink[ '*' ] + ' - ' + langlink.langname,
+                                                                       lang: langlink.lang,
+                                                                       hreflang: langlink.lang
                                                                } )
                                                                .text( langlink.autonym )
                                                        );
                                        $list.detach().empty().append( newList ).prependTo( $parent );
                                }
 
-                               if ( response.parse.text['*'] ) {
+                               if ( response.parse.text[ '*' ] ) {
                                        $content = $wikiPreview.children( '.mw-content-ltr,.mw-content-rtl' );
                                        $content
                                                .detach()
-                                               .html( response.parse.text['*'] );
+                                               .html( response.parse.text[ '*' ] );
 
                                        mw.hook( 'wikipage.content' ).fire( $content );
 
                        var isSubject = ( section === 'new' ),
                                summaryMsg = isSubject ? 'subject-preview' : 'summary-preview',
                                $summaryPreview = $editform.find( '.mw-summary-preview' ).empty();
-                       if ( response.parse.parsedsummary && response.parse.parsedsummary['*'] !== '' ) {
+                       if ( response.parse.parsedsummary && response.parse.parsedsummary[ '*' ] !== '' ) {
                                $summaryPreview.append(
                                        mw.message( summaryMsg ).parse(),
                                        ' ',
                                        $( '<span>' ).addClass( 'comment' ).html(
                                                // There is no equivalent to rawParams
                                                mw.message( 'parentheses' ).escaped()
-                                                       .replace( '$1', response.parse.parsedsummary['*'] )
+                                                       .replace( '$1', response.parse.parsedsummary[ '*' ] )
                                        )
                                );
                        }
                        mw.hook( 'wikipage.editform' ).fire( $editform );
                } );
                request.always( function () {
-                       $spinner.remove();
+                       $spinner.hide();
                        $copyElements.animate( {
                                opacity: 1
                        }, 'fast' );
                        $( '.portal:last' ).after(
                                $( '<div>' ).attr( {
                                        'class': 'portal',
-                                       'id': 'p-lang',
-                                       'role': 'navigation',
-                                       'title': mw.msg( 'tooltip-p-lang' ),
+                                       id: 'p-lang',
+                                       role: 'navigation',
+                                       title: mw.msg( 'tooltip-p-lang' ),
                                        'aria-labelledby': 'p-lang-label'
                                } )
                                .append( $( '<h3>' ).attr( 'id', 'p-lang-label' ).text( mw.msg( 'otherlanguages' ) ) )
index 29c533d..abe912d 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var idleTimeout = 4000,
+               var idleTimeout = 3000,
                        api = new mw.Api(),
                        pending = null,
                        $form = $( '#editform' ),
index 2ebfe92..077d5e3 100644 (file)
@@ -9,7 +9,7 @@ jQuery( function ( $ ) {
        /**
         * @ignore
         * @context {Element} input
-        * @param e {jQuery.Event}
+        * @param {jQuery.Event} e
         */
        function updateDiffRadios() {
                var nextState = 'before',
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.filepage.css b/resources/src/mediawiki.action/mediawiki.action.view.filepage.css
new file mode 100644 (file)
index 0000000..bfc201a
--- /dev/null
@@ -0,0 +1,71 @@
+/*!
+ * File description page
+ */
+
+div.mw-filepage-resolutioninfo {
+       font-size: smaller;
+}
+
+/*
+ * File histories
+ */
+h2#filehistory {
+       clear: both;
+}
+
+table.filehistory th,
+table.filehistory td {
+       vertical-align: top;
+}
+
+table.filehistory th {
+       text-align: left;
+}
+
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+       white-space: nowrap;
+}
+
+table.filehistory td.filehistory-selected {
+       font-weight: bold;
+}
+
+/*
+ * Add a checkered background image on hover for file
+ * description pages. (bug 26470)
+ */
+.filehistory a img,
+#file img:hover {
+       /* @embed */
+       background: white url(images/checker.png) repeat;
+}
+
+/*
+ * filetoc
+ */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+/*
+ * Shared images hint
+ */
+#shared-image-dup,
+#shared-image-conflict {
+       font-style: italic;
+}
+
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css b/resources/src/mediawiki.action/mediawiki.action.view.filepage.print.css
new file mode 100644 (file)
index 0000000..15b20f1
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * File description page - print style
+ */
+
+span.mw-filepage-other-resolutions,
+#filetoc {
+       display: none;
+}
index 9f786ec..b07965e 100644 (file)
@@ -14,3 +14,9 @@ table.collapsed tr.collapsable {
        -ms-user-select: none;
        user-select: none;
 }
+
+@media print {
+       tr.mw-metadata-show-hide-extended {
+               display: none;
+       }
+}
index c008dfd..168a1c1 100644 (file)
                cookieVal = mw.cookie.get( cookieKey ),
                $div, id;
 
+       function removeConfirmation() {
+               $div.remove();
+               mw.hook( 'postEdit.afterRemoval' ).fire();
+       }
+
+       function fadeOutConfirmation() {
+               clearTimeout( id );
+               $div.find( '.postedit' ).addClass( 'postedit postedit-faded' );
+               setTimeout( removeConfirmation, 500 );
+
+               return false;
+       }
+
        function showConfirmation( data ) {
                data = data || {};
                if ( data.message === undefined ) {
                id = setTimeout( fadeOutConfirmation, 3000 );
        }
 
-       function fadeOutConfirmation() {
-               clearTimeout( id );
-               $div.find( '.postedit' ).addClass( 'postedit postedit-faded' );
-               setTimeout( removeConfirmation, 500 );
-
-               return false;
-       }
-
-       function removeConfirmation() {
-               $div.remove();
-               mw.hook( 'postEdit.afterRemoval' ).fire();
-       }
-
        mw.hook( 'postEdit' ).add( showConfirmation );
 
        if ( config.wgAction === 'view' && cookieVal ) {
@@ -68,7 +68,7 @@
                        // postedit-confirmation-saved
                        // postedit-confirmation-created
                        // postedit-confirmation-restored
-                       'message': mw.msg(
+                       message: mw.msg(
                                'postedit-confirmation-' + cookieVal,
                                mw.user
                        )
diff --git a/resources/src/mediawiki.api/mediawiki.ForeignApi.js b/resources/src/mediawiki.api/mediawiki.ForeignApi.js
new file mode 100644 (file)
index 0000000..b8cc059
--- /dev/null
@@ -0,0 +1,109 @@
+( function ( mw, $ ) {
+
+       /**
+        * Create an object like mw.Api, but automatically handling everything required to communicate
+        * with another MediaWiki wiki via cross-origin requests (CORS).
+        *
+        * The foreign wiki must be configured to accept requests from the current wiki. See
+        * <https://www.mediawiki.org/wiki/Manual:$wgCrossSiteAJAXdomains> for details.
+        *
+        *     var api = new mw.ForeignApi( 'https://commons.wikimedia.org/w/api.php' );
+        *     api.get( {
+        *         action: 'query',
+        *         meta: 'userinfo'
+        *     } ).done( function ( data ) {
+        *         console.log( data );
+        *     } );
+        *
+        * To ensure that the user at the foreign wiki is logged in, pass the `assert: 'user'` parameter
+        * to #get/#post (since MW 1.23): if they are not, the API request will fail. (Note that this
+        * doesn't guarantee that it's the same user.)
+        *
+        * Authentication-related MediaWiki extensions may extend this class to ensure that the user
+        * authenticated on the current wiki will be automatically authenticated on the foreign one. These
+        * extension modules should be registered using the ResourceLoaderForeignApiModules hook. See
+        * CentralAuth for a practical example. The general pattern to extend and override the name is:
+        *
+        *     function MyForeignApi() {};
+        *     OO.inheritClass( MyForeignApi, mw.ForeignApi );
+        *     mw.ForeignApi = MyForeignApi;
+        *
+        * @class mw.ForeignApi
+        * @extends mw.Api
+        * @since 1.26
+        *
+        * @constructor
+        * @param {string|mw.Uri} url URL pointing to another wiki's `api.php` endpoint.
+        * @param {Object} [options] See mw.Api.
+        *
+        * @author Bartosz Dziewoński
+        * @author Jon Robson
+        */
+       function CoreForeignApi( url, options ) {
+               if ( !url || $.isPlainObject( url ) ) {
+                       throw new Error( 'mw.ForeignApi() requires a `url` parameter' );
+               }
+
+               this.apiUrl = String( url );
+
+               options = $.extend( /*deep=*/ true,
+                       {
+                               ajax: {
+                                       url: this.apiUrl,
+                                       xhrFields: {
+                                               withCredentials: true
+                                       }
+                               },
+                               parameters: {
+                                       // Add 'origin' query parameter to all requests.
+                                       origin: this.getOrigin()
+                               }
+                       },
+                       options
+               );
+
+               // Call parent constructor
+               CoreForeignApi.parent.call( this, options );
+       }
+
+       OO.inheritClass( CoreForeignApi, mw.Api );
+
+       /**
+        * Return the origin to use for API requests, in the required format (protocol, host and port, if
+        * any).
+        *
+        * @protected
+        * @return {string}
+        */
+       CoreForeignApi.prototype.getOrigin = function () {
+               var origin = location.protocol + '//' + location.hostname;
+               if ( location.port ) {
+                       origin += ':' + location.port;
+               }
+               return origin;
+       };
+
+       /**
+        * @inheritdoc
+        */
+       CoreForeignApi.prototype.ajax = function ( parameters, ajaxOptions ) {
+               var url, origin, newAjaxOptions;
+
+               // 'origin' query parameter must be part of the request URI, and not just POST request body
+               if ( ajaxOptions.type === 'POST' ) {
+                       url = ( ajaxOptions && ajaxOptions.url ) || this.defaults.ajax.url;
+                       origin = ( parameters && parameters.origin ) || this.defaults.parameters.origin;
+                       url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
+                               'origin=' + encodeURIComponent( origin );
+                       newAjaxOptions = $.extend( {}, ajaxOptions, { url: url } );
+               } else {
+                       newAjaxOptions = ajaxOptions;
+               }
+
+               return CoreForeignApi.parent.prototype.ajax.call( this, parameters, newAjaxOptions );
+       };
+
+       // Expose
+       mw.ForeignApi = CoreForeignApi;
+
+}( mediaWiki, jQuery ) );
index dbe45bf..e43285f 100644 (file)
                 * cached token and start over.
                 *
                 * @param {Object} params API parameters
+                * @param {Object} [ajaxOptions]
                 * @return {jQuery.Promise} See #post
                 */
-               postWithEditToken: function ( params ) {
-                       return this.postWithToken( 'edit', params );
+               postWithEditToken: function ( params, ajaxOptions ) {
+                       return this.postWithToken( 'edit', params, ajaxOptions );
                },
 
                /**
@@ -30,6 +31,7 @@
 
                /**
                 * Post a new section to the page.
+                *
                 * @see #postWithEditToken
                 * @param {mw.Title|String} title Target page
                 * @param {string} header
index 0b57907..43b20b8 100644 (file)
@@ -1,22 +1,24 @@
 ( function ( mw, $ ) {
 
-       // We allow people to omit these default parameters from API requests
-       // there is very customizable error handling here, on a per-call basis
-       // wondering, would it be simpler to make it easy to clone the api object,
-       // change error handling, and use that instead?
+       /**
+        * @class mw.Api
+        */
+
+       /**
+        * @property {Object} defaultOptions Default options for #ajax calls. Can be overridden by passing
+        *     `options` to mw.Api constructor.
+        * @property {Object} defaultOptions.parameters Default query parameters for API requests.
+        * @property {Object} defaultOptions.ajax Default options for jQuery#ajax.
+        * @private
+        */
        var defaultOptions = {
-                       // Query parameters for API requests
                        parameters: {
                                action: 'query',
                                format: 'json'
                        },
-
-                       // Ajax options for jQuery.ajax()
                        ajax: {
                                url: mw.util.wikiScript( 'api' ),
-
                                timeout: 30 * 1000, // 30 seconds
-
                                dataType: 'json'
                        }
                },
         * Constructor to create an object to interact with the API of a particular MediaWiki server.
         * mw.Api objects represent the API of a particular MediaWiki server.
         *
-        * TODO: Share API objects with exact same config.
-        *
         *     var api = new mw.Api();
         *     api.get( {
         *         action: 'query',
         *         meta: 'userinfo'
-        *     } ).done ( function ( data ) {
+        *     } ).done( function ( data ) {
         *         console.log( data );
         *     } );
         *
-        * Multiple values for a parameter can be specified using an array (since MW 1.25):
+        * Since MW 1.25, multiple values for a parameter can be specified using an array:
         *
         *     var api = new mw.Api();
         *     api.get( {
         *         action: 'query',
         *         meta: [ 'userinfo', 'siteinfo' ] // same effect as 'userinfo|siteinfo'
-        *     } ).done ( function ( data ) {
+        *     } ).done( function ( data ) {
         *         console.log( data );
         *     } );
         *
-        * @class
+        * Since MW 1.26, boolean values for a parameter can be specified directly. If the value is
+        * `false` or `undefined`, the parameter will be omitted from the request, as required by the API.
         *
         * @constructor
-        * @param {Object} options See defaultOptions documentation above. Ajax options can also be
-        *  overridden for each individual request to {@link jQuery#ajax} later on.
+        * @param {Object} [options] See #defaultOptions documentation above. Can also be overridden for
+        *  each individual request by passing them to #get or #post (or directly #ajax) later on.
         */
        mw.Api = function ( options ) {
-
-               if ( options === undefined ) {
-                       options = {};
-               }
+               // TODO: Share API objects with exact same config.
+               options = options || {};
 
                // Force a string if we got a mw.Uri object
                if ( options.ajax && options.ajax.url !== undefined ) {
                        return this.ajax( parameters, ajaxOptions );
                },
 
+               /**
+                * Massage parameters from the nice format we accept into a format suitable for the API.
+                *
+                * @private
+                * @param {Object} parameters (modified in-place)
+                */
+               preprocessParameters: function ( parameters ) {
+                       var key;
+                       // Handle common MediaWiki API idioms for passing parameters
+                       for ( key in parameters ) {
+                               // Multiple values are pipe-separated
+                               if ( $.isArray( parameters[ key ] ) ) {
+                                       parameters[ key ] = parameters[ key ].join( '|' );
+                               }
+                               // Boolean values are only false when not given at all
+                               if ( parameters[ key ] === false || parameters[ key ] === undefined ) {
+                                       delete parameters[ key ];
+                               }
+                       }
+               },
+
                /**
                 * Perform the API call.
                 *
                                delete parameters.token;
                        }
 
-                       for ( key in parameters ) {
-                               if ( $.isArray( parameters[key] ) ) {
-                                       parameters[key] = parameters[key].join( '|' );
-                               }
-                       }
+                       this.preprocessParameters( parameters );
 
                        // If multipart/form-data has been requested and emulation is possible, emulate it
                        if (
                                formData = new FormData();
 
                                for ( key in parameters ) {
-                                       formData.append( key, parameters[key] );
+                                       formData.append( key, parameters[ key ] );
                                }
                                // If we extracted a token parameter, add it back in.
                                if ( token ) {
 
                                d = apiPromise
                                        .then( function ( data ) {
-                                               if ( data.tokens && data.tokens[type + 'token'] ) {
-                                                       return data.tokens[type + 'token'];
+                                               if ( data.tokens && data.tokens[ type + 'token' ] ) {
+                                                       return data.tokens[ type + 'token' ];
                                                }
 
                                                // If token type is not available for this user,
index 2525792..2b709aa 100644 (file)
@@ -1,5 +1,6 @@
 /**
  * Make the two-step login easier.
+ *
  * @author Niklas Laxström
  * @class mw.Api.plugin.login
  * @since 1.22
index b839fbd..399e6f4 100644 (file)
@@ -14,7 +14,7 @@
                 */
                saveOption: function ( name, value ) {
                        var param = {};
-                       param[name] = value;
+                       param[ name ] = value;
                        return this.saveOptions( param );
                },
 
@@ -38,7 +38,7 @@
                                deferreds = [];
 
                        for ( name in options ) {
-                               value = options[name] === null ? null : String( options[name] );
+                               value = options[ name ] === null ? null : String( options[ name ] );
 
                                // Can we bundle this option, or does it need a separate request?
                                bundleable =
index 2dcf807..bc3d44f 100644 (file)
@@ -21,7 +21,7 @@
 
                        return apiPromise
                                .then( function ( data ) {
-                                       return data.parse.text['*'];
+                                       return data.parse.text[ '*' ];
                                } )
                                .promise( { abort: apiPromise.abort } );
                }
diff --git a/resources/src/mediawiki.api/mediawiki.api.upload.js b/resources/src/mediawiki.api/mediawiki.api.upload.js
new file mode 100644 (file)
index 0000000..4abff28
--- /dev/null
@@ -0,0 +1,368 @@
+/**
+ * Provides an interface for uploading files to MediaWiki.
+ *
+ * @class mw.Api.plugin.upload
+ * @singleton
+ */
+( function ( mw, $ ) {
+       var nonce = 0,
+               fieldsAllowed = {
+                       stash: true,
+                       filekey: true,
+                       filename: true,
+                       comment: true,
+                       text: true,
+                       watchlist: true,
+                       ignorewarnings: true
+               };
+
+       /**
+        * @private
+        * Get nonce for iframe IDs on the page.
+        *
+        * @return {number}
+        */
+       function getNonce() {
+               return nonce++;
+       }
+
+       /**
+        * @private
+        * Get new iframe object for an upload.
+        *
+        * @return {HTMLIframeElement}
+        */
+       function getNewIframe( id ) {
+               var frame = document.createElement( 'iframe' );
+               frame.id = id;
+               frame.name = id;
+               return frame;
+       }
+
+       /**
+        * @private
+        * Shortcut for getting hidden inputs
+        *
+        * @return {jQuery}
+        */
+       function getHiddenInput( name, val ) {
+               return $( '<input type="hidden" />' )
+                       .attr( 'name', name )
+                       .val( val );
+       }
+
+       /**
+        * Process the result of the form submission, returned to an iframe.
+        * This is the iframe's onload event.
+        *
+        * @param {HTMLIframeElement} iframe Iframe to extract result from
+        * @return {Object} Response from the server. The return value may or may
+        *   not be an XMLDocument, this code was copied from elsewhere, so if you
+        *   see an unexpected return type, please file a bug.
+        */
+       function processIframeResult( iframe ) {
+               var json,
+                       doc = iframe.contentDocument || frames[ iframe.id ].document;
+
+               if ( doc.XMLDocument ) {
+                       // The response is a document property in IE
+                       return doc.XMLDocument;
+               }
+
+               if ( doc.body ) {
+                       // Get the json string
+                       // We're actually searching through an HTML doc here --
+                       // according to mdale we need to do this
+                       // because IE does not load JSON properly in an iframe
+                       json = $( doc.body ).find( 'pre' ).text();
+
+                       return JSON.parse( json );
+               }
+
+               // Response is a xml document
+               return doc;
+       }
+
+       function formDataAvailable() {
+               return window.FormData !== undefined &&
+                       window.File !== undefined &&
+                       window.File.prototype.slice !== undefined;
+       }
+
+       $.extend( mw.Api.prototype, {
+               /**
+                * Upload a file to MediaWiki.
+                *
+                * The file will be uploaded using AJAX and FormData, if the browser supports it, or via an
+                * iframe if it doesn't.
+                *
+                * Caveats of iframe upload:
+                * - The returned jQuery.Promise will not receive `progress` notifications during the upload
+                * - It is incompatible with uploads to a foreign wiki using mw.ForeignApi
+                * - You must pass a HTMLInputElement and not a File for it to be possible
+                *
+                * @param {HTMLInputElement|File} file HTML input type=file element with a file already inside
+                *     of it, or a File object.
+                * @param {Object} data Other upload options, see action=upload API docs for more
+                * @return {jQuery.Promise}
+                */
+               upload: function ( file, data ) {
+                       var isFileInput, canUseFormData;
+
+                       isFileInput = file && file.nodeType === Node.ELEMENT_NODE;
+
+                       if ( formDataAvailable() && isFileInput && file.files ) {
+                               file = file.files[ 0 ];
+                       }
+
+                       if ( !file ) {
+                               return $.Deferred().reject( 'No file' );
+                       }
+
+                       canUseFormData = formDataAvailable() && file instanceof window.File;
+
+                       if ( !isFileInput && !canUseFormData ) {
+                               return $.Deferred().reject( 'Unsupported argument type passed to mw.Api.upload' );
+                       }
+
+                       if ( canUseFormData ) {
+                               return this.uploadWithFormData( file, data );
+                       }
+
+                       return this.uploadWithIframe( file, data );
+               },
+
+               /**
+                * Upload a file to MediaWiki with an iframe and a form.
+                *
+                * This method is necessary for browsers without the File/FormData
+                * APIs, and continues to work in browsers with those APIs.
+                *
+                * The rough sketch of how this method works is as follows:
+                * 1. An iframe is loaded with no content.
+                * 2. A form is submitted with the passed-in file input and some extras.
+                * 3. The MediaWiki API receives that form data, and sends back a response.
+                * 4. The response is sent to the iframe, because we set target=(iframe id)
+                * 5. The response is parsed out of the iframe's document, and passed back
+                *    through the promise.
+                *
+                * @private
+                * @param {HTMLInputElement} file The file input with a file in it.
+                * @param {Object} data Other upload options, see action=upload API docs for more
+                * @return {jQuery.Promise}
+                */
+               uploadWithIframe: function ( file, data ) {
+                       var key,
+                               tokenPromise = $.Deferred(),
+                               api = this,
+                               deferred = $.Deferred(),
+                               nonce = getNonce(),
+                               id = 'uploadframe-' + nonce,
+                               $form = $( '<form>' ),
+                               iframe = getNewIframe( id ),
+                               $iframe = $( iframe );
+
+                       for ( key in data ) {
+                               if ( !fieldsAllowed[ key ] ) {
+                                       delete data[ key ];
+                               }
+                       }
+
+                       data = $.extend( {}, this.defaults.parameters, { action: 'upload' }, data );
+                       $form.addClass( 'mw-api-upload-form' );
+
+                       $form.css( 'display', 'none' )
+                               .attr( {
+                                       action: this.defaults.ajax.url,
+                                       method: 'POST',
+                                       target: id,
+                                       enctype: 'multipart/form-data'
+                               } );
+
+                       $iframe.one( 'load', function () {
+                               $iframe.one( 'load', function () {
+                                       var result = processIframeResult( iframe );
+
+                                       if ( !result ) {
+                                               deferred.reject( 'No response from API on upload attempt.' );
+                                       } else if ( result.error || result.warnings ) {
+                                               if ( result.error && result.error.code === 'badtoken' ) {
+                                                       api.badToken( 'edit' );
+                                               }
+
+                                               deferred.reject( result.error || result.warnings );
+                                       } else {
+                                               deferred.notify( 1 );
+                                               deferred.resolve( result );
+                                       }
+                               } );
+                               tokenPromise.done( function () {
+                                       $form.submit();
+                               } );
+                       } );
+
+                       $iframe.error( function ( error ) {
+                               deferred.reject( 'iframe failed to load: ' + error );
+                       } );
+
+                       $iframe.prop( 'src', 'about:blank' ).hide();
+
+                       file.name = 'file';
+
+                       $.each( data, function ( key, val ) {
+                               $form.append( getHiddenInput( key, val ) );
+                       } );
+
+                       if ( !data.filename && !data.stash ) {
+                               return $.Deferred().reject( 'Filename not included in file data.' );
+                       }
+
+                       if ( this.needToken() ) {
+                               this.getEditToken().then( function ( token ) {
+                                       $form.append( getHiddenInput( 'token', token ) );
+                                       tokenPromise.resolve();
+                               }, tokenPromise.reject );
+                       } else {
+                               tokenPromise.resolve();
+                       }
+
+                       $( 'body' ).append( $form, $iframe );
+
+                       deferred.always( function () {
+                               $form.remove();
+                               $iframe.remove();
+                       } );
+
+                       return deferred.promise();
+               },
+
+               /**
+                * Uploads a file using the FormData API.
+                *
+                * @private
+                * @param {File} file
+                * @param {Object} data Other upload options, see action=upload API docs for more
+                * @return {jQuery.Promise}
+                */
+               uploadWithFormData: function ( file, data ) {
+                       var key,
+                               deferred = $.Deferred();
+
+                       for ( key in data ) {
+                               if ( !fieldsAllowed[ key ] ) {
+                                       delete data[ key ];
+                               }
+                       }
+
+                       data = $.extend( {}, this.defaults.parameters, { action: 'upload' }, data );
+                       data.file = file;
+
+                       if ( !data.filename && !data.stash ) {
+                               return $.Deferred().reject( 'Filename not included in file data.' );
+                       }
+
+                       // Use this.postWithEditToken() or this.post()
+                       this[ this.needToken() ? 'postWithEditToken' : 'post' ]( data, {
+                               // Use FormData (if we got here, we know that it's available)
+                               contentType: 'multipart/form-data',
+                               // Provide upload progress notifications
+                               xhr: function () {
+                                       var xhr = $.ajaxSettings.xhr();
+                                       if ( xhr.upload ) {
+                                               // need to bind this event before we open the connection (see note at
+                                               // https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progress)
+                                               xhr.upload.addEventListener( 'progress', function ( ev ) {
+                                                       if ( ev.lengthComputable ) {
+                                                               deferred.notify( ev.loaded / ev.total );
+                                                       }
+                                               } );
+                                       }
+                                       return xhr;
+                               }
+                       } )
+                               .done( function ( result ) {
+                                       if ( result.error || result.warnings ) {
+                                               deferred.reject( result.error || result.warnings );
+                                       } else {
+                                               deferred.notify( 1 );
+                                               deferred.resolve( result );
+                                       }
+                               } )
+                               .fail( function ( result ) {
+                                       deferred.reject( result );
+                               } );
+
+                       return deferred.promise();
+               },
+
+               /**
+                * Upload a file to the stash.
+                *
+                * This function will return a promise, which when resolved, will pass back a function
+                * to finish the stash upload. You can call that function with an argument containing
+                * more, or conflicting, data to pass to the server. For example:
+                *
+                *     // upload a file to the stash with a placeholder filename
+                *     api.uploadToStash( file, { filename: 'testing.png' } ).done( function ( finish ) {
+                *         // finish is now the function we can use to finalize the upload
+                *         // pass it a new filename from user input to override the initial value
+                *         finish( { filename: getFilenameFromUser() } ).done( function ( data ) {
+                *             // the upload is complete, data holds the API response
+                *         } );
+                *     } );
+                *
+                * @param {File|HTMLInputElement} file
+                * @param {Object} [data]
+                * @return {jQuery.Promise}
+                * @return {Function} return.finishStashUpload Call this function to finish the upload.
+                * @return {Object} return.finishStashUpload.data Additional data for the upload.
+                * @return {jQuery.Promise} return.finishStashUpload.return API promise for the final upload
+                * @return {Object} return.finishStashUpload.return.data API return value for the final upload
+                */
+               uploadToStash: function ( file, data ) {
+                       var filekey,
+                               api = this;
+
+                       if ( !data.filename ) {
+                               return $.Deferred().reject( 'Filename not included in file data.' );
+                       }
+
+                       function finishUpload( moreData ) {
+                               data = $.extend( data, moreData );
+                               data.filekey = filekey;
+                               data.action = 'upload';
+                               data.format = 'json';
+
+                               if ( !data.filename ) {
+                                       return $.Deferred().reject( 'Filename not included in file data.' );
+                               }
+
+                               return api.postWithEditToken( data ).then( function ( result ) {
+                                       if ( result.upload && ( result.upload.error || result.upload.warnings ) ) {
+                                               return $.Deferred().reject( result.upload.error || result.upload.warnings ).promise();
+                                       }
+                                       return result;
+                               } );
+                       }
+
+                       return this.upload( file, { stash: true, filename: data.filename } ).then( function ( result ) {
+                               if ( result && result.upload && result.upload.filekey ) {
+                                       filekey = result.upload.filekey;
+                               } else if ( result && ( result.error || result.warning ) ) {
+                                       return $.Deferred().reject( result );
+                               }
+
+                               return finishUpload;
+                       } );
+               },
+
+               needToken: function () {
+                       return true;
+               }
+       } );
+
+       /**
+        * @class mw.Api
+        * @mixins mw.Api.plugin.upload
+        */
+}( mediaWiki, jQuery ) );
index 40ba136..a2ff129 100644 (file)
@@ -37,7 +37,7 @@
                return apiPromise
                        .then( function ( data ) {
                                // If a single page was given (not an array) respond with a single item as well.
-                               return $.isArray( pages ) ? data.watch : data.watch[0];
+                               return $.isArray( pages ) ? data.watch : data.watch[ 0 ];
                        } )
                        .promise( { abort: apiPromise.abort } );
        }
index b56e4b2..cb9e19e 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'bs', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index 69c36cc..dc4447a 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'dsb', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index d9c2b06..2bbfc6b 100644 (file)
@@ -7,8 +7,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms, aou, origWord;
 
        grammarForms = mediaWiki.language.getData( 'fi', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
 
        // vowel harmony flag
index fb4e939..a4c911a 100644 (file)
@@ -5,8 +5,8 @@
 mediaWiki.language.convertGrammar = function ( word, form ) {
        /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'ga', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'ainmlae':
index d1eba43..945f02f 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'he', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'prefixed':
index 2c0abd3..8e9b129 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'hsb', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index d72a1c0..4f8f74d 100644 (file)
@@ -5,8 +5,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'hu', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'rol':
index c4a1cf7..935d466 100644 (file)
@@ -5,8 +5,8 @@
 mediaWiki.language.convertGrammar = function ( word, form ) {
        /*jshint onecase:true */
        var grammarForms = mediaWiki.language.getData( 'hy', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
 
        // These rules are not perfect, but they are currently only used for site names so it doesn't
index 52e8dd4..29e04a6 100644 (file)
@@ -5,8 +5,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'la', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive':
@@ -30,7 +30,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /nuntii$/i, 'nuntios' );// 2nd declension plural (partly)
                        word = word.replace( /tio$/i, 'tionem' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'ntem' );
-                       word = word.replace( /as$/i, 'atem');
+                       word = word.replace( /as$/i, 'atem' );
                        word = word.replace( /es$/i, 'em' ); // 5th declension singular
                        break;
                case 'ablative':
@@ -42,7 +42,7 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                        word = word.replace( /nuntii$/i, 'nuntiis' ); // 2nd declension plural (partly)
                        word = word.replace( /tio$/i, 'tione' ); // 3rd declension singular (partly)
                        word = word.replace( /ns$/i, 'nte' );
-                       word = word.replace( /as$/i, 'ate');
+                       word = word.replace( /as$/i, 'ate' );
                        word = word.replace( /es$/i, 'e' ); // 5th declension singular
                        break;
        }
index 554e99d..3e0f279 100644 (file)
@@ -14,8 +14,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
                // Variable for ending
                ending = '';
 
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        // Checking if the $word is in plural form
        if ( word.match( /тæ$/i ) ) {
index 2077b6b..ee1d6ef 100644 (file)
@@ -10,8 +10,8 @@ mediaWiki.language.convertGrammar = function ( word, form ) {
        'use strict';
 
        var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
index d20d0b3..3d8bdfd 100644 (file)
@@ -4,8 +4,8 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'sl', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'mestnik': // locative
index 550a388..a22874b 100644 (file)
@@ -4,31 +4,31 @@
 
 mediaWiki.language.convertGrammar = function ( word, form ) {
        var grammarForms = mediaWiki.language.getData( 'uk', 'grammarForms' );
-       if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word];
+       if ( grammarForms && grammarForms[ form ] ) {
+               return grammarForms[ form ][ word ];
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
                        if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
                                if ( word.slice( -1 ) === 'ь' ) {
-                                       word = word.slice(0, -1 ) + 'я';
+                                       word = word.slice( 0, -1 ) + 'я';
                                } else if ( word.slice( -2 ) === 'ія' ) {
-                                       word = word.slice(0, -2 ) + 'ії';
+                                       word = word.slice( 0, -2 ) + 'ії';
                                } else if ( word.slice( -2 ) === 'ка' ) {
-                                       word = word.slice(0, -2 ) + 'ки';
+                                       word = word.slice( 0, -2 ) + 'ки';
                                } else if ( word.slice( -2 ) === 'ти' ) {
-                                       word = word.slice(0, -2 ) + 'тей';
+                                       word = word.slice( 0, -2 ) + 'тей';
                                } else if ( word.slice( -2 ) === 'ды' ) {
-                                       word = word.slice(0, -2 ) + 'дов';
+                                       word = word.slice( 0, -2 ) + 'дов';
                                } else if ( word.slice( -3 ) === 'ник' ) {
-                                       word = word.slice(0, -3 ) + 'ника';
+                                       word = word.slice( 0, -3 ) + 'ника';
                                }
                        }
                        break;
                case 'accusative': // знахідний відмінок
                        if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
                                if ( word.slice( -2 ) === 'ія' ) {
-                                       word = word.slice(0, -2 ) + 'ію';
+                                       word = word.slice( 0, -2 ) + 'ію';
                                }
                        }
                        break;
index f6fb8f1..ca4b6fb 100644 (file)
@@ -21,7 +21,7 @@
                getPluralForm: function ( number, pluralRules ) {
                        var i;
                        for ( i = 0; i < pluralRules.length; i++ ) {
-                               if ( mw.libs.pluralRuleParser( pluralRules[i], number ) ) {
+                               if ( mw.libs.pluralRuleParser( pluralRules[ i ], number ) ) {
                                        break;
                                }
                        }
index b3765c8..808f6e5 100644 (file)
@@ -55,8 +55,8 @@
                getData: function ( langCode, dataKey ) {
                        var langData = mw.language.data;
                        langCode = langCode.toLowerCase();
-                       if ( langData && langData[langCode] instanceof mw.Map ) {
-                               return langData[langCode].get( dataKey );
+                       if ( langData && langData[ langCode ] instanceof mw.Map ) {
+                               return langData[ langCode ].get( dataKey );
                        }
                        return undefined;
                },
                setData: function ( langCode, dataKey, value ) {
                        var langData = mw.language.data;
                        langCode = langCode.toLowerCase();
-                       if ( !( langData[langCode] instanceof mw.Map ) ) {
-                               langData[langCode] = new mw.Map();
+                       if ( !( langData[ langCode ] instanceof mw.Map ) ) {
+                               langData[ langCode ] = new mw.Map();
                        }
-                       langData[langCode].set( dataKey, value );
+                       langData[ langCode ].set( dataKey, value );
                }
        };
 
index 78e3919..0d324ed 100644 (file)
@@ -29,8 +29,8 @@ $.extend( mw.language, {
                        return mw.language.convertPlural( parseInt( count, 10 ), template.parameters );
                }
                // Could not process plural return first form or nothing
-               if ( template.parameters[0] ) {
-                       return template.parameters[0];
+               if ( template.parameters[ 0 ] ) {
+                       return template.parameters[ 0 ];
                }
                return '';
        },
@@ -47,8 +47,8 @@ $.extend( mw.language, {
                var pluralRules,
                        pluralFormIndex = 0;
 
-               if ( explicitPluralForms && explicitPluralForms[count] ) {
-                       return explicitPluralForms[count];
+               if ( explicitPluralForms && explicitPluralForms[ count ] ) {
+                       return explicitPluralForms[ count ];
                }
 
                if ( !forms || forms.length === 0 ) {
@@ -58,11 +58,11 @@ $.extend( mw.language, {
                pluralRules = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'pluralRules' );
                if ( !pluralRules ) {
                        // default fallback.
-                       return ( count === 1 ) ? forms[0] : forms[1];
+                       return ( count === 1 ) ? forms[ 0 ] : forms[ 1 ];
                }
                pluralFormIndex = mw.cldr.getPluralForm( count, pluralRules );
                pluralFormIndex = Math.min( pluralFormIndex, forms.length - 1 );
-               return forms[pluralFormIndex];
+               return forms[ pluralFormIndex ];
        },
 
        /**
@@ -90,7 +90,7 @@ $.extend( mw.language, {
         *
         * @param {string} gender 'male', 'female', or anything else for neutral.
         * @param {Array} forms List of gender forms
-        * @return string
+        * @return {string}
         */
        gender: function ( gender, forms ) {
                if ( !forms || forms.length === 0 ) {
@@ -98,12 +98,12 @@ $.extend( mw.language, {
                }
                forms = mw.language.preConvertPlural( forms, 2 );
                if ( gender === 'male' ) {
-                       return forms[0];
+                       return forms[ 0 ];
                }
                if ( gender === 'female' ) {
-                       return forms[1];
+                       return forms[ 1 ];
                }
-               return ( forms.length === 3 ) ? forms[2] : forms[0];
+               return ( forms.length === 3 ) ? forms[ 2 ] : forms[ 0 ];
        },
 
        /**
@@ -119,8 +119,8 @@ $.extend( mw.language, {
         */
        convertGrammar: function ( word, form ) {
                var grammarForms = mw.language.getData( mw.config.get( 'wgUserLanguage' ), 'grammarForms' );
-               if ( grammarForms && grammarForms[form] ) {
-                       return grammarForms[form][word] || word;
+               if ( grammarForms && grammarForms[ form ] ) {
+                       return grammarForms[ form ][ word ] || word;
                }
                return word;
        },
@@ -138,7 +138,7 @@ $.extend( mw.language, {
                        i = 0;
 
                for ( ; i < list.length; i++ ) {
-                       text += list[i];
+                       text += list[ i ];
                        if ( list.length - 2 === i ) {
                                text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
                        } else if ( list.length - 1 !== i ) {
index 3c13055..268985f 100644 (file)
@@ -6,6 +6,26 @@
         * @class mw.language
         */
 
+       /**
+        * Replicate a string 'n' times.
+        *
+        * @private
+        * @param {string} str The string to replicate
+        * @param {number} num Number of times to replicate the string
+        * @return {string}
+        */
+       function replicate( str, num ) {
+               if ( num <= 0 || !str ) {
+                       return '';
+               }
+
+               var buf = [];
+               while ( num-- ) {
+                       buf.push( str );
+               }
+               return buf.join( '' );
+       }
+
        /**
         * Pad a string to guarantee that it is at least `size` length by
         * filling with the character `ch` at either the start or end of the
                return end ? out + padStr : padStr + out;
        }
 
-       /**
-        * Replicate a string 'n' times.
-        *
-        * @private
-        * @param {string} str The string to replicate
-        * @param {number} num Number of times to replicate the string
-        * @return {string}
-        */
-       function replicate( str, num ) {
-               if ( num <= 0 || !str ) {
-                       return '';
-               }
-
-               var buf = [];
-               while ( num-- ) {
-                       buf.push( str );
-               }
-               return buf.join( '' );
-       }
-
        /**
         * Apply numeric pattern to absolute value using options. Gives no
         * consideration to local customs.
@@ -74,7 +74,7 @@
                        decimal: '.'
                };
 
-               if ( isNaN( value) ) {
+               if ( isNaN( value ) ) {
                        return value;
                }
 
                        off,
                        remainder,
                        patternParts = pattern.split( '.' ),
-                       maxPlaces = ( patternParts[1] || [] ).length,
+                       maxPlaces = ( patternParts[ 1 ] || [] ).length,
                        valueParts = String( Math.abs( value ) ).split( '.' ),
-                       fractional = valueParts[1] || '',
+                       fractional = valueParts[ 1 ] || '',
                        groupSize = 0,
                        groupSize2 = 0,
                        pieces = [];
 
-               if ( patternParts[1] ) {
+               if ( patternParts[ 1 ] ) {
                        // Pad fractional with trailing zeros
-                       padLength = ( patternParts[1] && patternParts[1].lastIndexOf( '0' ) + 1 );
+                       padLength = ( patternParts[ 1 ] && patternParts[ 1 ].lastIndexOf( '0' ) + 1 );
 
                        if ( padLength > fractional.length ) {
-                               valueParts[1] = pad( fractional, padLength, '0', true );
+                               valueParts[ 1 ] = pad( fractional, padLength, '0', true );
                        }
 
                        // Truncate fractional
                        if ( maxPlaces < fractional.length ) {
-                               valueParts[1] = fractional.slice( 0, maxPlaces );
+                               valueParts[ 1 ] = fractional.slice( 0, maxPlaces );
                        }
                } else {
-                       if ( valueParts[1] ) {
+                       if ( valueParts[ 1 ] ) {
                                valueParts.pop();
                        }
                }
 
                // Pad whole with leading zeros
-               patternDigits = patternParts[0].replace( ',', '' );
+               patternDigits = patternParts[ 0 ].replace( ',', '' );
 
                padLength = patternDigits.indexOf( '0' );
 
                if ( padLength !== -1 ) {
                        padLength = patternDigits.length - padLength;
 
-                       if ( padLength > valueParts[0].length ) {
-                               valueParts[0] = pad( valueParts[0], padLength );
+                       if ( padLength > valueParts[ 0 ].length ) {
+                               valueParts[ 0 ] = pad( valueParts[ 0 ], padLength );
                        }
 
                        // Truncate whole
                        if ( patternDigits.indexOf( '#' ) === -1 ) {
-                               valueParts[0] = valueParts[0].slice( valueParts[0].length - padLength );
+                               valueParts[ 0 ] = valueParts[ 0 ].slice( valueParts[ 0 ].length - padLength );
                        }
                }
 
                // Add group separators
-               index = patternParts[0].lastIndexOf( ',' );
+               index = patternParts[ 0 ].lastIndexOf( ',' );
 
                if ( index !== -1 ) {
-                       groupSize = patternParts[0].length - index - 1;
-                       remainder = patternParts[0].slice( 0, index );
+                       groupSize = patternParts[ 0 ].length - index - 1;
+                       remainder = patternParts[ 0 ].slice( 0, index );
                        index = remainder.lastIndexOf( ',' );
                        if ( index !== -1 ) {
                                groupSize2 = remainder.length - index - 1;
                        }
                }
 
-               for ( whole = valueParts[0]; whole; ) {
+               for ( whole = valueParts[ 0 ]; whole; ) {
                        off = groupSize ? whole.length - groupSize : 0;
                        pieces.push( ( off > 0 ) ? whole.slice( off ) : whole );
                        whole = ( off > 0 ) ? whole.slice( 0, off ) : '';
                                groupSize2 = null;
                        }
                }
-               valueParts[0] = pieces.reverse().join( options.group );
+               valueParts[ 0 ] = pieces.reverse().join( options.group );
 
                return valueParts.join( options.decimal );
        }
 
                        convertedNumber = '';
                        for ( i = 0; i < numberString.length; i++ ) {
-                               if ( transformTable[ numberString[i] ] ) {
-                                       convertedNumber += transformTable[numberString[i]];
+                               if ( transformTable[ numberString[ i ] ] ) {
+                                       convertedNumber += transformTable[ numberString[ i ] ];
                                } else {
-                                       convertedNumber += numberString[i];
+                                       convertedNumber += numberString[ i ];
                                }
                        }
                        return integer ? parseInt( convertedNumber, 10 ) : convertedNumber;
                },
 
                /**
-                * Get the  digit transform table for current UI language.
+                * Get the digit transform table for current UI language.
+                *
                 * @return {Object|Array}
                 */
                getDigitTransformTable: function () {
                },
 
                /**
-                * Get the  separator transform table for current UI language.
+                * Get the separator transform table for current UI language.
+                *
                 * @return {Object|Array}
                 */
                getSeparatorTransformTable: function () {
                commafy: function ( value, pattern ) {
                        var numberPattern,
                                transformTable = mw.language.getSeparatorTransformTable(),
-                               group = transformTable[','] || ',',
+                               group = transformTable[ ',' ] || ',',
                                numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/, // not precise, but good enough
-                               decimal = transformTable['.'] || '.',
+                               decimal = transformTable[ '.' ] || '.',
                                patternList = pattern.split( ';' ),
-                               positivePattern = patternList[0];
+                               positivePattern = patternList[ 0 ];
 
-                       pattern = patternList[ ( value < 0 ) ? 1 : 0] || ( '-' + positivePattern );
+                       pattern = patternList[ ( value < 0 ) ? 1 : 0 ] || ( '-' + positivePattern );
                        numberPattern = positivePattern.match( numberPatternRE );
 
                        if ( !numberPattern ) {
                                throw new Error( 'unable to find a number expression in pattern: ' + pattern );
                        }
 
-                       return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[0], {
+                       return pattern.replace( numberPatternRE, commafyNumber( value, numberPattern[ 0 ], {
                                decimal: decimal,
                                group: group
                        } ) );
diff --git a/resources/src/mediawiki.legacy/ajax.js b/resources/src/mediawiki.legacy/ajax.js
deleted file mode 100644 (file)
index 3660c20..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Remote Scripting Library
- * Copyright 2005 modernmethod, inc
- * Under the open source BSD license
- * http://www.modernmethod.com/sajax/
- */
-
-/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
-/*global alert */
-( function ( mw ) {
-
-       /**
-        * if sajax_debug_mode is true, this function outputs given the message into
-        * the element with id = sajax_debug; if no such element exists in the document,
-        * it is injected.
-        */
-       function debug( text ) {
-               if ( !window.sajax_debug_mode ) {
-                       return false;
-               }
-
-               var b, m,
-                       e = document.getElementById( 'sajax_debug' );
-
-               if ( !e ) {
-                       e = document.createElement( 'p' );
-                       e.className = 'sajax_debug';
-                       e.id = 'sajax_debug';
-
-                       b = document.getElementsByTagName( 'body' )[0];
-
-                       if ( b.firstChild ) {
-                               b.insertBefore( e, b.firstChild );
-                       } else {
-                               b.appendChild( e );
-                       }
-               }
-
-               m = document.createElement( 'div' );
-               m.appendChild( document.createTextNode( text ) );
-
-               e.appendChild( m );
-
-               return true;
-       }
-
-       /**
-        * Compatibility wrapper for creating a new XMLHttpRequest object.
-        */
-       function createXhr() {
-               debug( 'sajax_init_object() called..' );
-               var a;
-               try {
-                       // Try the new style before ActiveX so we don't
-                       // unnecessarily trigger warnings in IE 7 when
-                       // set to prompt about ActiveX usage
-                       a = new XMLHttpRequest();
-               } catch ( xhrE ) {
-                       try {
-                               a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
-                       } catch ( msXmlE ) {
-                               try {
-                                       a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
-                               } catch ( msXhrE ) {
-                                       a = null;
-                               }
-                       }
-               }
-               if ( !a ) {
-                       debug( 'Could not create connection object.' );
-               }
-
-               return a;
-       }
-
-       /**
-        * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
-        *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
-        *   args - an array of arguments to that function
-        *   target - the target that will handle the result of the call. If this is a function,
-        *            if will be called with the XMLHttpRequest as a parameter; if it's an input
-        *            element, its value will be set to the resultText; if it's another type of
-        *            element, its innerHTML will be set to the resultText.
-        *
-        * Example:
-        *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
-        *
-        * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
-        * (1, 2, 3) as the parameter list, and will show the result in the element
-        * with id = showFoo
-        */
-       function doAjaxRequest( func_name, args, target ) {
-               var i, x, uri, post_data;
-               uri = mw.util.wikiScript() + '?action=ajax';
-               if ( window.sajax_request_type === 'GET' ) {
-                       if ( uri.indexOf( '?' ) === -1 ) {
-                               uri = uri + '?rs=' + encodeURIComponent( func_name );
-                       } else {
-                               uri = uri + '&rs=' + encodeURIComponent( func_name );
-                       }
-                       for ( i = 0; i < args.length; i++ ) {
-                               uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
-                       }
-                       // uri = uri + '&rsrnd=' + new Date().getTime();
-                       post_data = null;
-               } else {
-                       post_data = 'rs=' + encodeURIComponent( func_name );
-                       for ( i = 0; i < args.length; i++ ) {
-                               post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
-                       }
-               }
-               x = createXhr();
-               if ( !x ) {
-                       alert( 'AJAX not supported' );
-                       return false;
-               }
-
-               try {
-                       x.open( window.sajax_request_type, uri, true );
-               } catch ( e ) {
-                       if ( location.hostname === 'localhost' ) {
-                               alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
-                       }
-                       throw e;
-               }
-               if ( window.sajax_request_type === 'POST' ) {
-                       x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
-                       x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
-               }
-               x.setRequestHeader( 'Pragma', 'cache=yes' );
-               x.setRequestHeader( 'Cache-Control', 'no-transform' );
-               x.onreadystatechange = function () {
-                       if ( x.readyState !== 4 ) {
-                               return;
-                       }
-
-                       debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
-
-                       // if ( x.status != 200 )
-                       //   alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
-                       // else
-
-                       if ( typeof target === 'function' ) {
-                               target( x );
-                       } else if ( typeof target === 'object' ) {
-                               if ( target.tagName === 'INPUT' ) {
-                                       if ( x.status === 200 ) {
-                                               target.value = x.responseText;
-                                       }
-                                       // else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
-                               } else {
-                                       if ( x.status === 200 ) {
-                                               target.innerHTML = x.responseText;
-                                       } else {
-                                               target.innerHTML = '<div class="error">Error: ' + x.status +
-                                                       ' ' + x.statusText + ' (' + x.responseText + ')</div>';
-                                       }
-                               }
-                       } else {
-                               alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
-                       }
-               };
-
-               debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
-               x.send( post_data );
-               debug( func_name + ' waiting..' );
-
-               return true;
-       }
-
-       /**
-        * @return {boolean} Whether the browser supports AJAX
-        */
-       function wfSupportsAjax() {
-               var request = createXhr(),
-                       supportsAjax = request ? true : false;
-
-               request = undefined;
-               return supportsAjax;
-       }
-
-       // Expose + Mark as deprecated
-       var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-       // Variables
-       mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-       // Methods
-       mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-       mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
-
-}( mediaWiki ) );
index e35b1cf..e1b3198 100644 (file)
@@ -16,7 +16,6 @@ div#jump-to-nav,
 .mw-jump,
 div.top,
 div#column-one,
-#colophon,
 .mw-editsection,
 .mw-editsection-like,
 .toctoggle,
@@ -29,9 +28,6 @@ li#mobileview,
 li#privacy,
 #footer-places,
 .mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc,
 .usermessage,
 .patrollink,
 .ns-0 .mw-redirectedfrom,
@@ -284,45 +280,6 @@ img.thumbborder {
        border: 1px solid #dddddd;
 }
 
-/**
- * Galleries (see shared.css for more info)
- */
-li.gallerybox {
-       vertical-align: top;
-       display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       margin: 2px;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
 /**
  * Table rendering
  * As on shared.css but with white background.
diff --git a/resources/src/mediawiki.legacy/images/checker.png b/resources/src/mediawiki.legacy/images/checker.png
deleted file mode 100644 (file)
index 3e9e3d0..0000000
Binary files a/resources/src/mediawiki.legacy/images/checker.png and /dev/null differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.png b/resources/src/mediawiki.legacy/images/feed-icon.png
deleted file mode 100644 (file)
index 00f49f6..0000000
Binary files a/resources/src/mediawiki.legacy/images/feed-icon.png and /dev/null differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.svg b/resources/src/mediawiki.legacy/images/feed-icon.svg
deleted file mode 100644 (file)
index 6e5f570..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/images/question.png b/resources/src/mediawiki.legacy/images/question.png
deleted file mode 100644 (file)
index f7405d2..0000000
Binary files a/resources/src/mediawiki.legacy/images/question.png and /dev/null differ
diff --git a/resources/src/mediawiki.legacy/images/question.svg b/resources/src/mediawiki.legacy/images/question.svg
deleted file mode 100644 (file)
index 98fbe8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
index 196ea21..b0f86e6 100644 (file)
@@ -320,10 +320,6 @@ span.comment {
        font-style: italic;
 }
 
-span.changedby {
-       font-size: 95%;
-}
-
 .previewnote {
        text-align: center;
        color: #cc0000;
index 3f4b263..6226c90 100644 (file)
@@ -146,7 +146,7 @@ var ProtectionForm = window.ProtectionForm = {
         */
        matchAttribute: function ( objects, attrName ) {
                return $.map( objects, function ( object ) {
-                       return object[attrName];
+                       return object[ attrName ];
                } ).filter( function ( item, index, a ) {
                        return index === a.indexOf( item );
                } ).length === 1;
@@ -177,6 +177,7 @@ var ProtectionForm = window.ProtectionForm = {
 
        /**
         * Find the highest protection level in any selector
+        *
         * @return {number}
         */
        getMaxLevel: function () {
index a0861df..9045e4c 100644 (file)
@@ -2,6 +2,11 @@
  * CSS in this file is used by *all* skins (that have any CSS at all). Be
  * careful what you put in here, since what looks good in one skin may not in
  * another, but don't ignore the poor pre-Monobook users either.
+ *
+ * NOTE: The images which are referenced in this file are no longer in use in
+ * essential interface components. They should NOT be embedded, because that
+ * optimizes for the uncommon case at the cost of bloating the size of render-
+ * blocking CSS common to all pages.
  */
 
 /* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
@@ -78,6 +83,14 @@ abbr[title],
        cursor: help;
 }
 
+@supports (text-decoration: underline dotted) {
+       abbr[title],
+       .explain[title] {
+               border-bottom: none;
+               text-decoration: underline dotted;
+       }
+}
+
 /* Colored watchlist and recent changes numbers */
 .mw-plusminus-pos {
        color: #006400; /* dark green */
@@ -113,15 +126,11 @@ abbr[title],
        font-style: italic;
 }
 
-/* Comment and username portions of RC entries */
+/* Comment portions of RC entries */
 span.comment {
        font-style: italic;
 }
 
-span.changedby {
-       font-size: 95%;
-}
-
 /* Math */
 .texvc {
        direction: ltr;
@@ -151,49 +160,6 @@ span.texhtml {
        clear: both;
 }
 
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
-       font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
-       clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
-       vertical-align: top;
-}
-
-table.filehistory th {
-       text-align: left;
-}
-
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
-       white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
-       font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
-       /* @embed */
-       background: white url(images/checker.png) repeat;
-}
-
 /**
  * rev_deleted stuff
  */
@@ -237,7 +203,7 @@ td.mw-submit {
 }
 
 td.mw-label {
-       vertical-align: top;
+       vertical-align: middle;
 }
 
 .prefsection td.mw-label {
@@ -252,58 +218,10 @@ td.mw-label {
        width: auto;
 }
 
-.mw-icon-question {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/question.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
-       background-repeat: no-repeat;
-       background-size: 13px 13px;
-       display: inline-block;
-       height: 13px;
-       width: 13px;
-       margin-left: 4px;
-}
-
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
-       -webkit-transform: scaleX(-1);
-       -ms-transform: scaleX(-1);
-       transform: scaleX(-1);
-}
-
 td.mw-submit {
        white-space: nowrap;
 }
 
-table.mw-htmlform-nolabel td.mw-label {
-       width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
-       text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
-       border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
-       display: inline;
-       margin-right: 1em;
-       white-space: nowrap;
-}
-
-.mw-htmlform-matrix td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
 input#wpSummary {
        width: 80%;
        margin-bottom: 1em;
@@ -437,11 +355,6 @@ p.mw-upload-editlicenses {
        font-weight: bold;
 }
 
-#shared-image-dup,
-#shared-image-conflict {
-       font-style: italic;
-}
-
 /**
  * Recreating deleted page warning
  * Reupload file warning
@@ -481,22 +394,6 @@ a.new {
        color: #BA0000;
 }
 
-/* feed links */
-a.feedlink {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/feed-icon.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       background-position: center left;
-       background-repeat: no-repeat;
-       background-size: 12px 12px;
-       padding-left: 16px;
-}
-
 /* Plainlinks - this can be used to switch
  * off special external link styling */
 .plainlinks a.external {
@@ -662,24 +559,6 @@ table.wikitable > caption {
        background-color: #eeeeff;
 }
 
-/* filetoc */
-ul#filetoc {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-       margin-bottom: 0.5em;
-       margin-left: 0;
-       margin-right: 0;
-}
-
-#filetoc li {
-       display: inline;
-       list-style-type: none;
-       padding-right: 2em;
-}
-
 /* Classes for Exif data display */
 table.mw_metadata {
        font-size: 0.8em;
@@ -772,110 +651,7 @@ table.mw_metadata ul.metadata-langlist {
        margin-left: 0;
 }
 
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
-       vertical-align: top;
-       display: -moz-inline-box;
-       display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       background-color: #f9f9f9;
-       margin: 2px;
-}
-
-li.gallerybox div.thumb img {
-       display: block;
-       margin: 0 auto;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/* new gallery stuff */
-ul.mw-gallery-nolines li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-nolines li.gallerybox div.gallerytext {
-       text-align: center;
-}
-
-/* height constrained gallery */
-
-ul.mw-gallery-packed li.gallerybox div.thumb,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-packed li.gallerybox div.thumb img,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
-       margin: 0 auto;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox,
-ul.mw-gallery-packed-overlay li.gallerybox {
-       position: relative;
-}
-
-ul.mw-gallery-packed-hover div.gallerytextwrapper {
-       overflow: hidden;
-       height: 0;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
-ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
-ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
-       position: absolute;
-       background: white;
-       background: rgba(255, 255, 255, 0.8);
-       padding: 5px 10px;
-       bottom: 0;
-       left: 0; /* Needed for IE */
-       height: auto;
-       font-weight: bold;
-       margin: 2px; /* correspond to style on div.thumb */
-}
-
-ul.mw-gallery-packed-hover,
-ul.mw-gallery-packed-overlay,
-ul.mw-gallery-packed {
-       text-align: center;
-}
-
 .mw-ajax-loader {
-       /* @embed */
        background-image: url(images/ajax-loader.gif);
        background-position: center center;
        background-repeat: no-repeat;
@@ -887,7 +663,6 @@ ul.mw-gallery-packed {
 .mw-small-spinner {
        padding: 10px !important;
        margin-right: 0.6em;
-       /* @embed */
        background-image: url(images/spinner.gif);
        background-position: center center;
        background-repeat: no-repeat;
@@ -944,6 +719,7 @@ h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
 }
 
 /* Localised ordered list numbering for some languages */
+ol:lang(azb) li,
 ol:lang(bcc) li,
 ol:lang(bgn) li,
 ol:lang(bqi) li,
@@ -951,6 +727,7 @@ ol:lang(fa) li,
 ol:lang(glk) li,
 ol:lang(kk-arab) li,
 ol:lang(lrc) li,
+ol:lang(luz) li,
 ol:lang(mzn) li {
        list-style-type: -moz-persian;
        list-style-type: persian;
@@ -1025,7 +802,6 @@ ol:lang(or) li {
        margin-left: 2px;
        margin-bottom: -8px;
        padding: 0 0 0 15px;
-       /* @embed */
        background-image: url(images/help-question.gif);
        background-position: left center;
        background-repeat: no-repeat;
@@ -1036,7 +812,6 @@ ol:lang(or) li {
 }
 
 .mw-help-field-hint:hover {
-       /* @embed */
        background-image: url(images/help-question-hover.gif);
 }
 
index 32cd79a..7d1f6d7 100644 (file)
@@ -85,7 +85,7 @@
 
                // Execute the queued functions
                for ( i = 0; i < functs.length; i++ ) {
-                       functs[i]();
+                       functs[ i ]();
                }
        } );
 
         * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
         */
 
-       function importScript( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' +
-                       mw.util.wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/javascript';
-               return importScriptURI( uri );
-       }
-
        /**
         * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
         */
        function importScriptURI( url ) {
-               if ( loadedScripts[url] ) {
+               if ( loadedScripts[ url ] ) {
                        return null;
                }
-               loadedScripts[url] = true;
+               loadedScripts[ url ] = true;
                var s = document.createElement( 'script' );
                s.setAttribute( 'src', url );
                s.setAttribute( 'type', 'text/javascript' );
-               document.getElementsByTagName( 'head' )[0].appendChild( s );
+               document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
                return s;
        }
 
-       function importStylesheet( page ) {
+       function importScript( page ) {
                var uri = mw.config.get( 'wgScript' ) + '?title=' +
                        mw.util.wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/css';
-               return importStylesheetURI( uri );
+                       '&action=raw&ctype=text/javascript';
+               return importScriptURI( uri );
        }
 
        /**
                if ( media ) {
                        l.media = media;
                }
-               document.getElementsByTagName( 'head' )[0].appendChild( l );
+               document.getElementsByTagName( 'head' )[ 0 ].appendChild( l );
                return l;
        }
 
+       function importStylesheet( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' +
+                       mw.util.wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/css';
+               return importStylesheetURI( uri );
+       }
+
        msg = 'Use mw.loader instead.';
        mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
        mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
        win.importScript = importScript;
        win.importStylesheet = importStylesheet;
 
+       // Replace document.write/writeln with basic html parsing that appends
+       // to the <body> to avoid blanking pages. Added JavaScript will not run.
+       $.each( [ 'write', 'writeln' ], function ( idx, method ) {
+               mw.log.deprecate( document, method, function () {
+                       $( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
+               }, 'Use jQuery or mw.loader.load instead.' );
+       } );
+
 }( mediaWiki, jQuery ) );
index e947775..79549c3 100644 (file)
@@ -52,7 +52,7 @@
 .list-style-image-svg(@svg, @fallback) {
        list-style-image: e('/* @embed */') url(@svg);
        /* Fallback to PNG bullet for IE 8 and below using CSS hack */
-       list-style-image: e('/* @embed */') url(@fallback)\9;
+       list-style-image: e('/* @embed */') url(@fallback) e('\9');
 }
 
 .transition(@value) {
index 56b6811..1b31956 100644 (file)
 
        &:hover {
                // The inner bottom bevel should match the active background color.
-               box-shadow: 0 1px rgba(0, 0, 0, 10%), inset 0 -3px rgba(0, 0, 0, 20%);
-               border-bottom-color: @highlightColor;
+               background-color: @highlightColor;
        }
 
        &:focus {
-               border-color: rgba(0,0,0,0.2);
-               box-shadow: inset 0 0 0 1px rgba(0,0,0,0.2);
+               border-color: @colorWhite;
+               box-shadow: 0 0 0 1px @highlightColor;
 
                outline: none;
                // remove outline in Firefox
                color: @colorButtonText;
        }
 
+       &:focus {
+               background-color: @highlightColor;
+       }
+
        &:disabled {
                color: @colorDisabledText;
 
 
        &:hover,
        &:focus {
+               background: transparent;
                color: @textColor;
        }
 
index 9d28080..6f9aa02 100644 (file)
         * @param {Function} messagePosterConstructor Constructor for MessagePoster
         */
        MwMessagePosterFactory.prototype.register = function ( contentModel, messagePosterConstructor ) {
-               if ( this.contentModelToClass[contentModel] !== undefined ) {
+               if ( this.contentModelToClass[ contentModel ] !== undefined ) {
                        throw new Error( 'The content model \'' + contentModel + '\' is already registered.' );
                }
 
-               this.contentModelToClass[contentModel] = messagePosterConstructor;
+               this.contentModelToClass[ contentModel ] = messagePosterConstructor;
        };
 
        /**
@@ -38,7 +38,7 @@
         * @param {string} contentModel Content model to unregister
         */
        MwMessagePosterFactory.prototype.unregister = function ( contentModel ) {
-               delete this.contentModelToClass[contentModel];
+               delete this.contentModelToClass[ contentModel ];
        };
 
        /**
@@ -67,9 +67,9 @@
                        indexpageids: 1,
                        titles: title.getPrefixedDb()
                } ).then( function ( result ) {
-                       if ( result.query.pageids.length > 0 ) {
-                               pageId = result.query.pageids[0];
-                               page = result.query.pages[pageId];
+                       if ( result.query.pageids && result.query.pageids.length > 0 ) {
+                               pageId = result.query.pageids[ 0 ];
+                               page = result.query.pages[ pageId ];
 
                                contentModel = page.contentmodel;
                                moduleName = 'mediawiki.messagePoster.' + contentModel;
         *
         */
        MwMessagePosterFactory.prototype.createForContentModel = function ( contentModel, title ) {
-               return new this.contentModelToClass[contentModel]( title );
+               return new this.contentModelToClass[ contentModel ]( title );
        };
 
        mw.messagePoster = {
diff --git a/resources/src/mediawiki.page/mediawiki.page.gallery.css b/resources/src/mediawiki.page/mediawiki.page.gallery.css
new file mode 100644 (file)
index 0000000..20deb21
--- /dev/null
@@ -0,0 +1,101 @@
+/* Galleries */
+/* These display attributes look nonsensical, but are needed to support IE and FF2 */
+/* Don't forget to update mediawiki.page.gallery.print.css */
+li.gallerybox {
+       vertical-align: top;
+       display: -moz-inline-box;
+       display: inline-block;
+}
+
+ul.gallery,
+li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       background-color: #f9f9f9;
+       margin: 2px;
+}
+
+li.gallerybox div.thumb img {
+       display: block;
+       margin: 0 auto;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/* new gallery stuff */
+ul.mw-gallery-nolines li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-nolines li.gallerybox div.gallerytext {
+       text-align: center;
+}
+
+/* height constrained gallery */
+
+ul.mw-gallery-packed li.gallerybox div.thumb,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-packed li.gallerybox div.thumb img,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
+       margin: 0 auto;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox,
+ul.mw-gallery-packed-overlay li.gallerybox {
+       position: relative;
+}
+
+ul.mw-gallery-packed-hover div.gallerytextwrapper {
+       overflow: hidden;
+       height: 0;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
+ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
+ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
+       position: absolute;
+       background: white;
+       background: rgba(255, 255, 255, 0.8);
+       padding: 5px 10px;
+       bottom: 0;
+       left: 0; /* Needed for IE */
+       height: auto;
+       font-weight: bold;
+       margin: 2px; /* correspond to style on div.thumb */
+}
+
+ul.mw-gallery-packed-hover,
+ul.mw-gallery-packed-overlay,
+ul.mw-gallery-packed {
+       text-align: center;
+}
index 9514070..dfccf21 100644 (file)
@@ -12,6 +12,7 @@
 
        /**
         * Perform the layout justification.
+        *
         * @ignore
         * @context {HTMLElement} A `ul.mw-gallery-*` element
         */
                                $this = $( this );
 
                        if ( top !== lastTop ) {
-                               rows[rows.length] = [];
+                               rows[ rows.length ] = [];
                                lastTop = top;
                        }
 
                        $img = $this.find( 'div.thumb a.image img' );
-                       if ( $img.length && $img[0].height ) {
-                               imgHeight = $img[0].height;
-                               imgWidth = $img[0].width;
+                       if ( $img.length && $img[ 0 ].height ) {
+                               imgHeight = $img[ 0 ].height;
+                               imgWidth = $img[ 0 ].width;
                        } else {
                                // If we don't have a real image, get the containing divs width/height.
                                // Note that if we do have a real image, using this method will generally
@@ -54,7 +55,7 @@
                        }
 
                        captionWidth = $this.children().children( 'div.gallerytextwrapper' ).width();
-                       rows[rows.length - 1][rows[rows.length - 1].length] = {
+                       rows[ rows.length - 1 ][ rows[ rows.length - 1 ].length ] = {
                                $elm: $this,
                                width: $this.outerWidth(),
                                imgWidth: imgWidth,
                                maxWidth = $gallery.width();
                                combinedAspect = 0;
                                combinedPadding = 0;
-                               curRow = rows[i];
+                               curRow = rows[ i ];
                                curRowHeight = 0;
 
                                for ( j = 0; j < curRow.length; j++ ) {
                                        if ( curRowHeight === 0 ) {
-                                               if ( isFinite( curRow[j].height ) ) {
+                                               if ( isFinite( curRow[ j ].height ) ) {
                                                        // Get the height of this row, by taking the first
                                                        // non-out of bounds height
-                                                       curRowHeight = curRow[j].height;
+                                                       curRowHeight = curRow[ j ].height;
                                                }
                                        }
 
-                                       if ( curRow[j].aspect === 0 || !isFinite( curRow[j].aspect ) ) {
+                                       if ( curRow[ j ].aspect === 0 || !isFinite( curRow[ j ].aspect ) ) {
                                                // One of the dimensions are 0. Probably should
                                                // not try to resize.
-                                               combinedPadding += curRow[j].width;
+                                               combinedPadding += curRow[ j ].width;
                                        } else {
-                                               combinedAspect += curRow[j].aspect;
-                                               combinedPadding += curRow[j].width - curRow[j].imgWidth;
+                                               combinedAspect += curRow[ j ].aspect;
+                                               combinedPadding += curRow[ j ].width - curRow[ j ].imgWidth;
                                        }
                                }
 
                                }
 
                                for ( j = 0; j < curRow.length; j++ ) {
-                                       newWidth = preferredHeight * curRow[j].aspect;
-                                       padding = curRow[j].width - curRow[j].imgWidth;
-                                       $outerDiv = curRow[j].$elm;
+                                       newWidth = preferredHeight * curRow[ j ].aspect;
+                                       padding = curRow[ j ].width - curRow[ j ].imgWidth;
+                                       $outerDiv = curRow[ j ].$elm;
                                        $innerDiv = $outerDiv.children( 'div' ).first();
                                        $imageDiv = $innerDiv.children( 'div.thumb' );
                                        $imageElm = $imageDiv.find( 'img' ).first();
-                                       imageElm = $imageElm.length ? $imageElm[0] : null;
+                                       imageElm = $imageElm.length ? $imageElm[ 0 ] : null;
                                        $caption = $outerDiv.find( 'div.gallerytextwrapper' );
 
                                        // Since we are going to re-adjust the height, the vertical
                                                $outerDiv.width( newWidth + padding );
                                                $innerDiv.width( newWidth + padding );
                                                $imageDiv.width( newWidth );
-                                               $caption.width( curRow[j].captionWidth + ( newWidth - curRow[j].imgWidth ) );
+                                               $caption.width( curRow[ j ].captionWidth + ( newWidth - curRow[ j ].imgWidth ) );
                                        }
 
                                        if ( imageElm ) {
                        $( this ).find( 'div.gallerytextwrapper' ).width( captionWidth );
 
                        $imageElm = $( this ).find( 'img' ).first();
-                       imageElm = $imageElm.length ? $imageElm[0] : null;
+                       imageElm = $imageElm.length ? $imageElm[ 0 ] : null;
                        if ( imageElm ) {
                                imageElm.width = imgWidth;
                                imageElm.height = imgHeight;
diff --git a/resources/src/mediawiki.page/mediawiki.page.gallery.print.css b/resources/src/mediawiki.page/mediawiki.page.gallery.print.css
new file mode 100644 (file)
index 0000000..0c14865
--- /dev/null
@@ -0,0 +1,35 @@
+li.gallerybox {
+       vertical-align: top;
+       display: inline-block;
+}
+
+ul.gallery, li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
index 9ad9c30..49a51df 100644 (file)
@@ -2,6 +2,7 @@
  * Implement AJAX navigation for multi-page images so the user may browse without a full page reload.
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
        var jqXhr, $multipageimage, $spinner,
                cache = {},
                cacheOrder = [];
                jqXhr = undefined;
 
                // Try the cache
-               if ( cache[url] ) {
+               if ( cache[ url ] ) {
                        // Update access freshness
                        cacheOrder.splice( $.inArray( url, cacheOrder ), 1 );
                        cacheOrder.push( url );
-                       return $.Deferred().resolve( cache[url] ).promise();
+                       return $.Deferred().resolve( cache[ url ] ).promise();
                }
 
                // @todo Don't fetch the entire page. Ideally we'd only fetch the content portion or the data
                        jqXhr = undefined;
 
                        // Cache the newly loaded page
-                       cache[url] = $contents;
+                       cache[ url ] = $contents;
                        cacheOrder.push( url );
 
                        // Remove the oldest entry if we're over the limit
                        if ( cacheOrder.length > 10 ) {
-                               delete cache[ cacheOrder[0] ];
+                               delete cache[ cacheOrder[ 0 ] ];
                                cacheOrder = cacheOrder.slice( 1 );
                        }
                } );
index cc72e16..f9b0d35 100644 (file)
@@ -17,7 +17,7 @@
                        var $spinner, href, rcid, apiRequest;
 
                        // Start preloading the notification module (normally loaded by mw.notify())
-                       mw.loader.load( ['mediawiki.notification'], null, true );
+                       mw.loader.load( 'mediawiki.notification' );
 
                        // Hide the link and create a spinner to show it inside the brackets.
                        $spinner = $.createSpinner( {
@@ -43,7 +43,7 @@
                                        mw.notify( mw.msg( 'markedaspatrollednotify', title.toText() ) );
                                } else {
                                        // This should never happen as errors should trigger fail
-                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ), { type: 'error' } );
                                }
                        } )
                        .fail( function ( error ) {
@@ -53,9 +53,9 @@
                                $patrolLinks.show();
                                if ( error === 'noautopatrol' ) {
                                        // Can't patrol own
-                                       mw.notify( mw.msg( 'markedaspatrollederror-noautopatrol' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederror-noautopatrol' ), { type: 'warn' } );
                                } else {
-                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ), { type: 'error' } );
                                }
                        } );
 
index ddd4f0c..708dcb5 100644 (file)
@@ -1,12 +1,11 @@
 ( function ( mw, $ ) {
 
-       mw.page = {};
+       // Support: MediaWiki < 1.26
+       // Cached HTML will not yet have this from OutputPage::getHeadScripts.
+       document.documentElement.className = document.documentElement.className
+               .replace( /(^|\s)client-nojs(\s|$)/, '$1client-js$2' );
 
-       // Client profile classes for <html>
-       // Allows for easy hiding/showing of JS or no-JS-specific UI elements
-       $( document.documentElement )
-               .addClass( 'client-js' )
-               .removeClass( 'client-nojs' );
+       mw.page = {};
 
        $( function () {
                mw.util.init();
index 50f280a..a3197da 100644 (file)
                actionPaths = mw.config.get( 'wgActionPaths' );
                for ( key in actionPaths ) {
                        if ( actionPaths.hasOwnProperty( key ) ) {
-                               parts = actionPaths[key].split( '$1' );
+                               parts = actionPaths[ key ].split( '$1' );
                                for ( i = 0; i < parts.length; i++ ) {
-                                       parts[i] = mw.RegExp.escape( parts[i] );
+                                       parts[ i ] = mw.RegExp.escape( parts[ i ] );
                                }
                                m = new RegExp( parts.join( '(.+)' ) ).exec( url );
-                               if ( m && m[1] ) {
+                               if ( m && m[ 1 ] ) {
                                        return key;
                                }
 
                        var action, api, $link;
 
                        // Start preloading the notification module (normally loaded by mw.notify())
-                       mw.loader.load( ['mediawiki.notification'], null, true );
+                       mw.loader.load( 'mediawiki.notification' );
 
                        action = mwUriGetAction( this.href );
 
 
                        api = new mw.Api();
 
-                       api[action]( title )
+                       api[ action ]( title )
                                .done( function ( watchResponse ) {
                                        var otherAction = action === 'watch' ? 'unwatch' : 'watch';
 
                                        msg = mw.message( 'watcherrortext', link );
 
                                        // Report to user about the error
-                                       mw.notify( msg, { tag: 'watch-self' } );
+                                       mw.notify( msg, {
+                                               tag: 'watch-self',
+                                               type: 'error'
+                                       } );
                                } );
                } );
        } );
index cbc97ab..d706d26 100644 (file)
@@ -64,6 +64,10 @@ a.new:visited, #p-personal a.new:visited {
        color: #b63;
 }
 
+.mw-body a.external.free {
+       word-wrap: break-word;
+}
+
 /* Inline Elements */
 img {
        border: none;
index 67531f7..06851b9 100644 (file)
@@ -4,6 +4,7 @@
 ( function ( mw, $ ) {
        /**
         * Given an email validity status (true, false, null) update the label CSS class
+        *
         * @ignore
         */
        function updateMailValidityLabel( mail ) {
index 0e026af..a484350 100644 (file)
@@ -59,3 +59,7 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
 .mw-enhanced-watched .mw-enhanced-rc-time {
        font-weight: bold;
 }
+
+span.changedby {
+       font-size: 95%;
+}
diff --git a/resources/src/mediawiki.special/mediawiki.special.movePage.css b/resources/src/mediawiki.special/mediawiki.special.movePage.css
new file mode 100644 (file)
index 0000000..dd1c2aa
--- /dev/null
@@ -0,0 +1,8 @@
+/*!
+ * Styles for Special:MovePage
+ */
+
+.movepage-wrapper {
+       width: 50em;
+       margin: 1em 0;
+}
index 7e56050..6d88c51 100644 (file)
@@ -1,6 +1,7 @@
 /*!
  * JavaScript for Special:MovePage
  */
-jQuery( function ( $ ) {
-       $( '#wpReason, #wpNewTitleMain' ).byteLimit();
+jQuery( function () {
+       OO.ui.infuse( 'wpNewTitle' );
+       OO.ui.infuse( 'wpReason' ).$input.byteLimit();
 } );
index e27e34a..8fb9a47 100644 (file)
@@ -19,3 +19,8 @@
        height: 0;
        zoom: 1;
 }
+
+/* When JS is enabled, .mw-preferences-messageboxes are replaced with mw.notifications */
+.mw-preferences-messagebox {
+       display: none;
+}
index a385ad3..bad1c08 100644 (file)
@@ -5,7 +5,8 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes, allowCloseWindow;
+               $checkBoxes, allowCloseWindow,
+               notif;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -50,8 +51,8 @@ jQuery( function ( $ ) {
         * It uses document.getElementById for security reasons (HTML injections in $()).
         *
         * @ignore
-        * @param String name: the name of a tab without the prefix ("mw-prefsection-")
-        * @param String mode: [optional] A hash will be set according to the current
+        * @param {String} name the name of a tab without the prefix ("mw-prefsection-")
+        * @param {String} [mode] A hash will be set according to the current
         *  open section. Set mode 'noHash' to surpress this.
         */
        function switchPrefTab( name, mode ) {
@@ -84,6 +85,26 @@ jQuery( function ( $ ) {
                }
        }
 
+       // Check for messageboxes (.successbox, .warningbox, .errorbox) to replace with notifications
+       if ( $( '.mw-preferences-messagebox' ).length ) {
+               // If there is a #mw-preferences-success box and javascript is enabled, use a slick notification instead!
+               if ( $( '#mw-preferences-success' ).length ) {
+                       notif = mediaWiki.notification.notify( mediaWiki.message( 'savedprefs' ), { autoHide: false } );
+                       // 'change' event not reliable!
+                       $( '#preftoc, .prefsection' ).one( 'change keydown mousedown', function () {
+                               if ( notif ) {
+                                       notif.close();
+                                       notif = null;
+                               }
+                       } );
+
+                       // Remove now-unnecessary success=1 querystring to prevent reappearance of notification on reload
+                       if ( history.replaceState ) {
+                               history.replaceState( {}, document.title, location.href.replace( /&?success=1/, '' ) );
+                       }
+               }
+       }
+
        // Populate the prefToc
        $legends.each( function ( i, legend ) {
                var $legend = $( legend ),
@@ -113,7 +134,7 @@ jQuery( function ( $ ) {
        // Disable the button to save preferences unless preferences have changed
        $( '#prefcontrol' ).prop( 'disabled', true );
        $( '.prefsection' ).one( 'change keydown mousedown', function () {
-               $( '#prefcontrol' ).prop( 'disabled', false);
+               $( '#prefcontrol' ).prop( 'disabled', false );
        } );
 
        // Enable keyboard users to use left and right keys to switch tabs
@@ -189,15 +210,15 @@ jQuery( function ( $ ) {
                var minutes,
                        arr = hour.split( ':' );
 
-               arr[0] = parseInt( arr[0], 10 );
+               arr[ 0 ] = parseInt( arr[ 0 ], 10 );
 
                if ( arr.length === 1 ) {
                        // Specification is of the form [-]XX
-                       minutes = arr[0] * 60;
+                       minutes = arr[ 0 ] * 60;
                } else {
                        // Specification is of the form [-]XX:XX
-                       minutes = Math.abs( arr[0] ) * 60 + parseInt( arr[1], 10 );
-                       if ( arr[0] < 0 ) {
+                       minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
+                       if ( arr[ 0 ] < 0 ) {
                                minutes *= -1;
                        }
                }
@@ -224,7 +245,7 @@ jQuery( function ( $ ) {
                        minuteDiff = hoursToMinutes( $tzTextbox.val() );
                } else {
                        // Grab data from the $tzSelect value
-                       minuteDiff = parseInt( type.split( '|' )[1], 10 ) || 0;
+                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
                        $tzTextbox.val( minutesToHours( minuteDiff ) );
                }
 
index b27fe34..730119e 100644 (file)
                                var parts = $( this ).attr( 'href' ).split( 'search=' ),
                                        lastpart = '',
                                        prefix = 'search=';
-                               if ( parts.length > 1 && parts[1].indexOf( '&' ) !== -1 ) {
-                                       lastpart = parts[1].slice( parts[1].indexOf( '&' ) );
+                               if ( parts.length > 1 && parts[ 1 ].indexOf( '&' ) !== -1 ) {
+                                       lastpart = parts[ 1 ].slice( parts[ 1 ].indexOf( '&' ) );
                                } else {
                                        prefix = '&search=';
                                }
-                               this.href = parts[0] + prefix + encodeURIComponent( searchterm ) + lastpart;
+                               this.href = parts[ 0 ] + prefix + encodeURIComponent( searchterm ) + lastpart;
                        } );
                } ).trigger( 'change' );
 
index 8d3e86a..7628ff8 100644 (file)
@@ -28,7 +28,7 @@
                                        mw.notify( mw.msg( 'addedwatchtext-short', title ) );
                                } ).fail( function () {
                                        $link.text( mw.msg( 'watch' ) );
-                                       mw.notify( mw.msg( 'watcherrortext', title ) );
+                                       mw.notify( mw.msg( 'watcherrortext', title ), { type: 'error' } );
                                } );
                        } else {
                                $link.text( mw.msg( 'unwatching' ) );
@@ -38,7 +38,7 @@
                                        mw.notify( mw.msg( 'removedwatchtext-short', title ) );
                                } ).fail( function () {
                                        $link.text( mw.msg( 'unwatch' ) );
-                                       mw.notify( mw.msg( 'watcherrortext', title ) );
+                                       mw.notify( mw.msg( 'watcherrortext', title ), { type: 'error' } );
                                } );
                        }
 
index ea1eb99..677d26d 100644 (file)
@@ -6,6 +6,7 @@
  * @singleton
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
        var uploadWarning, uploadLicense,
                ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
                $license = $( '#wpLicense' );
@@ -35,7 +36,7 @@
                        }
                        // Check response cache
                        if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
-                               this.setWarning( this.responseCache[this.nameToCheck] );
+                               this.setWarning( this.responseCache[ this.nameToCheck ] );
                                return;
                        }
 
@@ -71,7 +72,7 @@
                        } ).done( function ( result ) {
                                var resultOut = '';
                                if ( result.query ) {
-                                       resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
+                                       resultOut = result.query.pages[ result.query.pageids[ 0 ] ].imageinfo[ 0 ];
                                }
                                $spinnerDestCheck.remove();
                                uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
@@ -80,7 +81,7 @@
 
                processResult: function ( result, fileName ) {
                        this.setWarning( result.html );
-                       this.responseCache[fileName] = result.html;
+                       this.responseCache[ fileName ] = result.html;
                },
 
                setWarning: function ( warning ) {
                                return;
                        }
                        if ( this.responseCache.hasOwnProperty( license ) ) {
-                               this.showPreview( this.responseCache[license] );
+                               this.showPreview( this.responseCache[ license ] );
                                return;
                        }
 
                },
 
                processResult: function ( result, license ) {
-                       this.responseCache[license] = result.parse.text['*'];
-                       this.showPreview( this.responseCache[license] );
+                       this.responseCache[ license ] = result.parse.text[ '*' ];
+                       this.showPreview( this.responseCache[ license ] );
                },
 
                showPreview: function ( preview ) {
                                fname = fname.replace( / /g, '_' );
                                // Capitalise first letter if needed
                                if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
-                                       fname = fname[0].toUpperCase() + fname.slice( 1 );
+                                       fname = fname[ 0 ].toUpperCase() + fname.slice( 1 );
                                }
 
                                // Output result
                 * TODO: Put SVG back after working around Firefox 7 bug <https://bugzilla.wikimedia.org/show_bug.cgi?id=31643>
                 *
                 * @param {File} file
-                * @return boolean
+                * @return {boolean}
                 */
                function fileIsPreviewable( file ) {
-                       var known = ['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml'],
+                       var known = [ 'image/png', 'image/gif', 'image/jpeg', 'image/svg+xml' ],
                                tooHuge = 10 * 1024 * 1024;
                        return ( $.inArray( file.type, known ) !== -1 ) && file.size > 0 && file.size < tooHuge;
                }
 
+               /**
+                * Format a file size attractively.
+                *
+                * TODO: Match numeric formatting
+                *
+                * @param {number} s
+                * @return {string}
+                */
+               function prettySize( s ) {
+                       var sizeMsgs = [ 'size-bytes', 'size-kilobytes', 'size-megabytes', 'size-gigabytes' ];
+                       while ( s >= 1024 && sizeMsgs.length > 1 ) {
+                               s /= 1024;
+                               sizeMsgs = sizeMsgs.slice( 1 );
+                       }
+                       return mw.msg( sizeMsgs[ 0 ], Math.round( s ) );
+               }
+
                /**
                 * Show a thumbnail preview of PNG, JPEG, GIF, and SVG files prior to upload
                 * in browsers supporting HTML5 FileAPI.
                                ctx,
                                meta,
                                previewSize = 180,
+                               $spinner = $.createSpinner( { size: 'small', type: 'block' } )
+                                       .css( { width: previewSize, height: previewSize } ),
                                thumb = mw.template.get( 'mediawiki.special.upload', 'thumbnail.html' ).render();
 
-                       thumb.find( '.filename' ).text( file.name ).end()
-                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end();
+                       thumb
+                               .find( '.filename' ).text( file.name ).end()
+                               .find( '.fileinfo' ).text( prettySize( file.size ) ).end()
+                               .find( '.thumbinner' ).prepend( $spinner ).end();
 
-                       $canvas = $( '<canvas width="' + previewSize + '" height="' + previewSize + '" ></canvas>' );
-                       ctx = $canvas[0].getContext( '2d' );
+                       $canvas = $( '<canvas>' ).attr( { width: previewSize, height: previewSize } );
+                       ctx = $canvas[ 0 ].getContext( '2d' );
                        $( '#mw-htmlform-source' ).parent().prepend( thumb );
 
                        fetchPreview( file, function ( dataURL ) {
                                        ctx.clearRect( 0, 0, 180, 180 );
                                        ctx.rotate( rotation / 180 * Math.PI );
                                        ctx.drawImage( img, x, y, width, height );
-                                       thumb.find( '.mw-small-spinner' ).replaceWith( $canvas );
+                                       $spinner.replaceWith( $canvas );
 
                                        // Image size
                                        info = mw.msg( 'widthheight', logicalWidth, logicalHeight ) +
                                                buffer = new Uint8Array( reader.result ),
                                                string = '';
                                        for ( i = 0; i < buffer.byteLength; i++ ) {
-                                               string += String.fromCharCode( buffer[i] );
+                                               string += String.fromCharCode( buffer[ i ] );
                                        }
                                        callbackBinary( string );
 
                        }
                }
 
-               /**
-                * Format a file size attractively.
-                *
-                * TODO: Match numeric formatting
-                *
-                * @param {number} s
-                * @return {string}
-                */
-               function prettySize( s ) {
-                       var sizeMsgs = ['size-bytes', 'size-kilobytes', 'size-megabytes', 'size-gigabytes'];
-                       while ( s >= 1024 && sizeMsgs.length > 1 ) {
-                               s /= 1024;
-                               sizeMsgs = sizeMsgs.slice( 1 );
-                       }
-                       return mw.msg( sizeMsgs[0], Math.round( s ) );
-               }
-
                /**
                 * Clear the file upload preview area.
                 */
                        function getMaxUploadSize( type ) {
                                var sizes = mw.config.get( 'wgMaxUploadSize' );
 
-                               if ( sizes[type] !== undefined ) {
-                                       return sizes[type];
+                               if ( sizes[ type ] !== undefined ) {
+                                       return sizes[ type ];
                                }
-                               return sizes['*'];
+                               return sizes[ '*' ];
                        }
 
                        $( '.mw-upload-source-error' ).remove();
                                clearPreview();
                                if ( this.files && this.files.length ) {
                                        // Note: would need to be updated to handle multiple files.
-                                       var file = this.files[0];
+                                       var file = this.files[ 0 ];
 
                                        if ( !checkMaxUploadSize( file ) ) {
                                                return;
diff --git a/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js b/resources/src/mediawiki.special/mediawiki.special.userlogin.common.js
deleted file mode 100644 (file)
index f5289de..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
- * JavaScript for login and signup forms.
- */
-( function ( mw, $ ) {
-       // Move the FancyCaptcha image into a more attractive container.
-       // The CAPTCHA is in a <div class="captcha"> at the top of the form. If it's a FancyCaptcha,
-       // then we remove it and insert it lower down, in a customized div with just what we need (e.g.
-       // no 'fancycaptcha-createaccount' message).
-       function adjustFancyCaptcha( $content, buttonSubmit ) {
-               var $submit = $content.find( buttonSubmit ),
-                       tabIndex,
-                       $captchaStuff,
-                       $captchaImageContainer,
-                       // JavaScript can't yet parse the message 'createacct-imgcaptcha-help' when it
-                       // contains a MediaWiki transclusion, so PHP parses it and sends the HTML.
-                       // This is only set for the signup form (and undefined for login).
-                       helpMsg = mw.config.get( 'wgCreateacctImgcaptchaHelp' ),
-                       helpHtml = '';
-
-               if ( !$submit.length ) {
-                       return;
-               }
-               tabIndex = $submit.prop( 'tabIndex' ) - 1;
-               $captchaStuff = $content.find( '.captcha' );
-
-               if ( $captchaStuff.length ) {
-                       // The FancyCaptcha has this class in the ConfirmEdit extension since 2013-04-18.
-                       $captchaImageContainer = $captchaStuff.find( '.fancycaptcha-image-container' );
-                       if ( $captchaImageContainer.length !== 1 ) {
-                               return;
-                       }
-
-                       $captchaStuff.remove();
-
-                       if ( helpMsg ) {
-                               helpHtml = '<small class="mw-createacct-captcha-assisted">' + helpMsg + '</small>';
-                       }
-
-                       // Insert another div before the submit button that will include the
-                       // repositioned FancyCaptcha div, an input field, and possible help.
-                       $submit.closest( 'div' ).before( [
-                               '<div>',
-                                       '<label for="wpCaptchaWord">' + mw.message( 'createacct-captcha' ).escaped() + '</label>',
-                                       '<div class="mw-createacct-captcha-container">',
-                                               '<div class="mw-createacct-captcha-and-reload" />',
-                                               '<input id="wpCaptchaWord" class="mw-ui-input" name="wpCaptchaWord" type="text" placeholder="' +
-                                                       mw.message( 'createacct-imgcaptcha-ph' ).escaped() +
-                                                       '" tabindex="' + tabIndex + '" autocapitalize="off" autocorrect="off">',
-                                                       helpHtml,
-                                       '</div>',
-                               '</div>'
-                       ].join( '' ) );
-
-                       // Stick the FancyCaptcha container inside our bordered and framed parents.
-                       $captchaImageContainer
-                               .prependTo( $content.find( '.mw-createacct-captcha-and-reload' ) );
-
-                       // Find the input field, add the text (if any) of the existing CAPTCHA
-                       // field (although usually it's blanked out on every redisplay),
-                       // and after it move over the hidden field that tells the CAPTCHA
-                       // what to do.
-                       $content.find( '#wpCaptchaWord' )
-                               .val( $captchaStuff.find( '#wpCaptchaWord' ).val() )
-                               .after( $captchaStuff.find( '#wpCaptchaId' ) );
-               }
-       }
-
-       $( function () {
-               // Work with both login and signup form
-               adjustFancyCaptcha( $( '#mw-content-text' ), '#wpCreateaccount, #wpLoginAttempt' );
-       } );
-}( mediaWiki, jQuery ) );
index a32a790..a0c6ee2 100644 (file)
@@ -65,7 +65,7 @@
                                ususers: username // '|' in usernames is handled below
                        } )
                                .done( function ( resp ) {
-                                       var userinfo = resp.query.users[0];
+                                       var userinfo = resp.query.users[ 0 ];
 
                                        if ( resp.query.users.length !== 1 ) {
                                                // Happens if the user types '|' into the field
index 73042f2..bf0e701 100644 (file)
@@ -1,6 +1,5 @@
 <div id="mw-upload-thumbnail" class="thumb tright">
        <div class="thumbinner">
-               <div class="mw-small-spinner" style="width: 180px; height: 180px"></div>
                <div class="thumbcaption">
                        <div class="filename"></div>
                        <div class="fileinfo"></div>
index 70d54ce..0469cc5 100644 (file)
                $toolbar = $( '#toolbar' );
 
                for ( i = 0; i < queue.length; i++ ) {
-                       button = queue[i];
+                       button = queue[ i ];
                        if ( $.isArray( button ) ) {
                                // Forwarded arguments array from mw.toolbar.addButton
                                insertButton.apply( toolbar, button );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js b/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
new file mode 100644 (file)
index 0000000..d519c0d
--- /dev/null
@@ -0,0 +1,535 @@
+/*!
+ * MediaWiki Widgets – CalendarWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+/*global moment */
+( function ( $, mw ) {
+
+       /**
+        * Creates an mw.widgets.CalendarWidget object.
+        *
+        * You will most likely want to use mw.widgets.DateInputWidget instead of CalendarWidget directly.
+        *
+        * @class
+        * @extends OO.ui.Widget
+        * @mixins OO.ui.mixin.TabIndexedElement
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {string} [precision='day'] Date precision to use, 'day' or 'month'
+        * @cfg {string|null} [date=null] Day or month date (depending on `precision`), in the format
+        *     'YYYY-MM-DD' or 'YYYY-MM'. When null, the calendar will show today's date, but not select
+        *     it.
+        */
+       mw.widgets.CalendarWidget = function MWWCalendarWidget( config ) {
+               // Config initialization
+               config = config || {};
+
+               // Parent constructor
+               mw.widgets.CalendarWidget.parent.call( this, config );
+
+               // Mixin constructors
+               OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$element } ) );
+
+               // Properties
+               this.precision = config.precision || 'day';
+               // Currently selected date (day or month)
+               this.date = null;
+               // Current UI state (date and precision we're displaying right now)
+               this.moment = null;
+               this.displayLayer = this.getDisplayLayers()[ 0 ]; // 'month', 'year', 'duodecade'
+
+               this.$header = $( '<div>' ).addClass( 'mw-widget-calendarWidget-header' );
+               this.$bodyOuterWrapper = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body-outer-wrapper' );
+               this.$bodyWrapper = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body-wrapper' );
+               this.$body = $( '<div>' ).addClass( 'mw-widget-calendarWidget-body' );
+               this.labelButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       label: '',
+                       framed: false,
+                       classes: [ 'mw-widget-calendarWidget-labelButton' ]
+               } );
+               this.upButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'collapse',
+                       classes: [ 'mw-widget-calendarWidget-upButton' ]
+               } );
+               this.prevButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'previous',
+                       classes: [ 'mw-widget-calendarWidget-prevButton' ]
+               } );
+               this.nextButton = new OO.ui.ButtonWidget( {
+                       tabIndex: -1,
+                       framed: false,
+                       icon: 'next',
+                       classes: [ 'mw-widget-calendarWidget-nextButton' ]
+               } );
+
+               // Events
+               this.labelButton.connect( this, { click: 'onUpButtonClick' } );
+               this.upButton.connect( this, { click: 'onUpButtonClick' } );
+               this.prevButton.connect( this, { click: 'onPrevButtonClick' } );
+               this.nextButton.connect( this, { click: 'onNextButtonClick' } );
+               this.$element.on( {
+                       focus: this.onFocus.bind( this ),
+                       mousedown: this.onClick.bind( this ),
+                       keydown: this.onKeyDown.bind( this )
+               } );
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widget-calendarWidget' )
+                       .append( this.$header, this.$bodyOuterWrapper.append( this.$bodyWrapper.append( this.$body ) ) );
+               this.$header.append(
+                       this.prevButton.$element,
+                       this.nextButton.$element,
+                       this.upButton.$element,
+                       this.labelButton.$element
+               );
+               this.setDate( config.date !== undefined ? config.date : null );
+       };
+
+       /* Inheritance */
+
+       OO.inheritClass( mw.widgets.CalendarWidget, OO.ui.Widget );
+       OO.mixinClass( mw.widgets.CalendarWidget, OO.ui.mixin.TabIndexedElement );
+
+       /* Events */
+
+       /**
+        * @event change
+        *
+        * A change event is emitted when the chosen date changes.
+        *
+        * @param {string} date Day or month date, in the format 'YYYY-MM-DD' or 'YYYY-MM'
+        */
+
+       /* Methods */
+
+       /**
+        * Get the date format ('YYYY-MM-DD' or 'YYYY-MM', depending on precision), which is used
+        * internally and for dates accepted by #setDate and returned by #getDate.
+        *
+        * @private
+        * @returns {string} Format
+        */
+       mw.widgets.CalendarWidget.prototype.getDateFormat = function () {
+               return {
+                       day: 'YYYY-MM-DD',
+                       month: 'YYYY-MM'
+               }[ this.precision ];
+       };
+
+       /**
+        * Get the date precision this calendar uses, 'day' or 'month'.
+        *
+        * @private
+        * @returns {string} Precision, 'day' or 'month'
+        */
+       mw.widgets.CalendarWidget.prototype.getPrecision = function () {
+               return this.precision;
+       };
+
+       /**
+        * Get list of possible display layers.
+        *
+        * @private
+        * @returns {string[]} Layers
+        */
+       mw.widgets.CalendarWidget.prototype.getDisplayLayers = function () {
+               return [ 'month', 'year', 'duodecade' ].slice( this.precision === 'month' ? 1 : 0 );
+       };
+
+       /**
+        * Update the calendar.
+        *
+        * @private
+        * @param {string|null} [fade=null] Direction in which to fade out current calendar contents, 'previous',
+        *     'next' or 'up'
+        * @returns {string} Format
+        */
+       mw.widgets.CalendarWidget.prototype.updateUI = function ( fade ) {
+               var items, today, selected, currentMonth, currentYear, currentDay, i, needsFade,
+                       $bodyWrapper = this.$bodyWrapper;
+
+               if (
+                       this.displayLayer === this.previousDisplayLayer &&
+                       this.date === this.previousDate &&
+                       this.previousMoment &&
+                       this.previousMoment.isSame( this.moment, this.precision === 'month' ? 'month' : 'day' )
+               ) {
+                       // Already displayed
+                       return;
+               }
+
+               items = [];
+               if ( this.$oldBody ) {
+                       this.$oldBody.remove();
+               }
+               this.$oldBody = this.$body.addClass( 'mw-widget-calendarWidget-old-body' );
+               // Clone without children
+               this.$body = $( this.$body[ 0 ].cloneNode( false ) )
+                       .removeClass( 'mw-widget-calendarWidget-old-body' )
+                       .toggleClass( 'mw-widget-calendarWidget-body-month', this.displayLayer === 'month' )
+                       .toggleClass( 'mw-widget-calendarWidget-body-year', this.displayLayer === 'year' )
+                       .toggleClass( 'mw-widget-calendarWidget-body-duodecade', this.displayLayer === 'duodecade' );
+
+               today = moment();
+               selected = moment( this.getDate(), this.getDateFormat() );
+
+               switch ( this.displayLayer ) {
+               case 'month':
+                       this.labelButton.setLabel( this.moment.format( 'MMMM YYYY' ) );
+                       this.upButton.toggle( true );
+
+                       // First week displayed is the first week spanned by the month, unless it begins on Monday, in
+                       // which case first week displayed is the previous week. This makes the calendar "balanced"
+                       // and also neatly handles 28-day February sometimes spanning only 4 weeks.
+                       currentDay = moment( this.moment ).startOf( 'month' ).subtract( 1, 'day' ).startOf( 'week' );
+
+                       // Day-of-week labels. Localisation-independent: works with weeks starting on Saturday, Sunday
+                       // or Monday.
+                       for ( i = 0; i < 7; i++ ) {
+                               items.push(
+                                       $( '<div>' )
+                                               .addClass( 'mw-widget-calendarWidget-day-heading' )
+                                               .text( currentDay.format( 'dd' ) )
+                               );
+                               currentDay.add( 1, 'day' );
+                       }
+                       currentDay.subtract( 7, 'days' );
+
+                       // Actual calendar month. Always displays 6 weeks, for consistency (months can span 4 to 6
+                       // weeks).
+                       for ( i = 0; i < 42; i++ ) {
+                               items.push(
+                                       $( '<div>' )
+                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-day' )
+                                               .toggleClass( 'mw-widget-calendarWidget-day-additional', !currentDay.isSame( this.moment, 'month' ) )
+                                               .toggleClass( 'mw-widget-calendarWidget-day-today', currentDay.isSame( today, 'day' ) )
+                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentDay.isSame( selected, 'day' ) )
+                                               .text( currentDay.format( 'D' ) )
+                                               .data( 'date', currentDay.date() )
+                                               .data( 'month', currentDay.month() )
+                                               .data( 'year', currentDay.year() )
+                               );
+                               currentDay.add( 1, 'day' );
+                       }
+                       break;
+
+               case 'year':
+                       this.labelButton.setLabel( this.moment.format( 'YYYY' ) );
+                       this.upButton.toggle( true );
+
+                       currentMonth = moment( this.moment ).startOf( 'year' );
+                       for ( i = 0; i < 12; i++ ) {
+                               items.push(
+                                       $( '<div>' )
+                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-month' )
+                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentMonth.isSame( selected, 'month' ) )
+                                               .text( currentMonth.format( 'MMMM' ) )
+                                               .data( 'month', currentMonth.month() )
+                               );
+                               currentMonth.add( 1, 'month' );
+                       }
+                       // Shuffle the array to display months in columns rather than rows.
+                       items = [
+                               items[ 0 ], items[ 6 ],      //  | January  | July      |
+                               items[ 1 ], items[ 7 ],      //  | February | August    |
+                               items[ 2 ], items[ 8 ],      //  | March    | September |
+                               items[ 3 ], items[ 9 ],      //  | April    | October   |
+                               items[ 4 ], items[ 10 ],     //  | May      | November  |
+                               items[ 5 ], items[ 11 ]      //  | June     | December  |
+                       ];
+                       break;
+
+               case 'duodecade':
+                       this.labelButton.setLabel( null );
+                       this.upButton.toggle( false );
+
+                       currentYear = moment( { year: Math.floor( this.moment.year() / 20 ) * 20 } );
+                       for ( i = 0; i < 20; i++ ) {
+                               items.push(
+                                       $( '<div>' )
+                                               .addClass( 'mw-widget-calendarWidget-item mw-widget-calendarWidget-year' )
+                                               .toggleClass( 'mw-widget-calendarWidget-item-selected', currentYear.isSame( selected, 'year' ) )
+                                               .text( currentYear.format( 'YYYY' ) )
+                                               .data( 'year', currentYear.year() )
+                               );
+                               currentYear.add( 1, 'year' );
+                       }
+                       break;
+               }
+
+               this.$body.append.apply( this.$body, items );
+
+               $bodyWrapper
+                       .removeClass( 'mw-widget-calendarWidget-body-wrapper-fade-up' )
+                       .removeClass( 'mw-widget-calendarWidget-body-wrapper-fade-down' )
+                       .removeClass( 'mw-widget-calendarWidget-body-wrapper-fade-previous' )
+                       .removeClass( 'mw-widget-calendarWidget-body-wrapper-fade-next' );
+
+               needsFade = this.previousDisplayLayer !== this.displayLayer;
+               if ( this.displayLayer === 'month' ) {
+                       needsFade = needsFade || !this.moment.isSame( this.previousMoment, 'month' );
+               } else if ( this.displayLayer === 'year' ) {
+                       needsFade = needsFade || !this.moment.isSame( this.previousMoment, 'year' );
+               } else if ( this.displayLayer === 'duodecade' ) {
+                       needsFade = needsFade || (
+                               Math.floor( this.moment.year() / 20 ) * 20 !==
+                                       Math.floor( this.previousMoment.year() / 20 ) * 20
+                       );
+               }
+
+               if ( fade && needsFade ) {
+                       this.$oldBody.find( '.mw-widget-calendarWidget-item-selected' )
+                               .removeClass( 'mw-widget-calendarWidget-item-selected' );
+                       if ( fade === 'previous' || fade === 'up' ) {
+                               this.$body.insertBefore( this.$oldBody );
+                       } else if ( fade === 'next' || fade === 'down' ) {
+                               this.$body.insertAfter( this.$oldBody );
+                       }
+                       setTimeout( function () {
+                               $bodyWrapper.addClass( 'mw-widget-calendarWidget-body-wrapper-fade-' + fade );
+                       }.bind( this ), 0 );
+               } else {
+                       this.$oldBody.replaceWith( this.$body );
+               }
+
+               this.previousMoment = moment( this.moment );
+               this.previousDisplayLayer = this.displayLayer;
+               this.previousDate = this.date;
+
+               this.$body.on( 'click', this.onBodyClick.bind( this ) );
+       };
+
+       /**
+        * Handle click events on the "up" button, switching to less precise view.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.onUpButtonClick = function () {
+               var
+                       layers = this.getDisplayLayers(),
+                       currentLayer = layers.indexOf( this.displayLayer );
+               if ( currentLayer !== layers.length - 1 ) {
+                       // One layer up
+                       this.displayLayer = layers[ currentLayer + 1 ];
+                       this.updateUI( 'up' );
+               } else {
+                       this.updateUI();
+               }
+       };
+
+       /**
+        * Handle click events on the "previous" button, switching to previous pane.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.onPrevButtonClick = function () {
+               switch ( this.displayLayer ) {
+               case 'month':
+                       this.moment.subtract( 1, 'month' );
+                       break;
+               case 'year':
+                       this.moment.subtract( 1, 'year' );
+                       break;
+               case 'duodecade':
+                       this.moment.subtract( 20, 'years' );
+                       break;
+               }
+               this.updateUI( 'previous' );
+       };
+
+       /**
+        * Handle click events on the "next" button, switching to next pane.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.onNextButtonClick = function () {
+               switch ( this.displayLayer ) {
+               case 'month':
+                       this.moment.add( 1, 'month' );
+                       break;
+               case 'year':
+                       this.moment.add( 1, 'year' );
+                       break;
+               case 'duodecade':
+                       this.moment.add( 20, 'years' );
+                       break;
+               }
+               this.updateUI( 'next' );
+       };
+
+       /**
+        * Handle click events anywhere in the body of the widget, which contains the matrix of days,
+        * months or years to choose. Maybe change the pane or switch to more precise view, depending on
+        * what gets clicked.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.onBodyClick = function ( e ) {
+               var
+                       previousMoment = moment( this.moment ),
+                       $target = $( e.target ),
+                       layers = this.getDisplayLayers(),
+                       currentLayer = layers.indexOf( this.displayLayer );
+               if ( $target.data( 'year' ) !== undefined ) {
+                       this.moment.year( $target.data( 'year' ) );
+               }
+               if ( $target.data( 'month' ) !== undefined ) {
+                       this.moment.month( $target.data( 'month' ) );
+               }
+               if ( $target.data( 'date' ) !== undefined ) {
+                       this.moment.date( $target.data( 'date' ) );
+               }
+               if ( currentLayer === 0 ) {
+                       this.setDateFromMoment();
+                       this.updateUI(
+                               this.precision === 'day' && this.moment.isBefore( previousMoment, 'month' ) ? 'previous' :
+                                       this.precision === 'day' && this.moment.isAfter( previousMoment, 'month' ) ? 'next' : null
+                       );
+               } else {
+                       // One layer down
+                       this.displayLayer = layers[ currentLayer - 1 ];
+                       this.updateUI( 'down' );
+               }
+       };
+
+       /**
+        * Set the date.
+        *
+        * @param {string|null} [date=null] Day or month date, in the format 'YYYY-MM-DD' or 'YYYY-MM'.
+        *     When null, the calendar will show today's date, but not select it. When invalid, the date
+        *     is not changed.
+        */
+       mw.widgets.CalendarWidget.prototype.setDate = function ( date ) {
+               var mom = date !== null ? moment( date, this.getDateFormat() ) : moment();
+               if ( mom.isValid() ) {
+                       this.moment = mom;
+                       if ( date !== null ) {
+                               this.setDateFromMoment();
+                       } else if ( this.date !== null ) {
+                               this.date = null;
+                               this.emit( 'change', this.date );
+                       }
+                       this.displayLayer = this.getDisplayLayers()[ 0 ];
+                       this.updateUI();
+               }
+       };
+
+       /**
+        * Reset the user interface of this widget to reflect selected date.
+        */
+       mw.widgets.CalendarWidget.prototype.resetUI = function () {
+               this.moment = moment( this.getDate(), this.getDateFormat() );
+               this.displayLayer = this.getDisplayLayers()[ 0 ];
+               this.updateUI();
+       };
+
+       /**
+        * Set the date from moment object.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.setDateFromMoment = function () {
+               // Switch to English locale to avoid number formatting. We want the internal value to be
+               // '2015-07-24' and not '٢٠١٥-٠٧-٢٤' even if the UI language is Arabic.
+               var newDate = moment( this.moment ).locale( 'en' ).format( this.getDateFormat() );
+               if ( this.date !== newDate ) {
+                       this.date = newDate;
+                       this.emit( 'change', this.date );
+               }
+       };
+
+       /**
+        * Get current date, in the format 'YYYY-MM-DD' or 'YYYY-MM', depending on precision. Digits will
+        * not be localised.
+        *
+        * @returns {string|null} Date string
+        */
+       mw.widgets.CalendarWidget.prototype.getDate = function () {
+               return this.date;
+       };
+
+       /**
+        * Handle focus events.
+        *
+        * @private
+        */
+       mw.widgets.CalendarWidget.prototype.onFocus = function () {
+               this.displayLayer = this.getDisplayLayers()[ 0 ];
+               this.updateUI( 'down' );
+       };
+
+       /**
+        * Handle mouse click events.
+        *
+        * @private
+        * @param {jQuery.Event} e Mouse click event
+        */
+       mw.widgets.CalendarWidget.prototype.onClick = function ( e ) {
+               if ( !this.isDisabled() && e.which === 1 ) {
+                       // Prevent unintended focussing
+                       return false;
+               }
+       };
+
+       /**
+        * Handle key down events.
+        *
+        * @private
+        * @param {jQuery.Event} e Key down event
+        */
+       mw.widgets.CalendarWidget.prototype.onKeyDown = function ( e ) {
+               var
+                       /*jshint -W024*/
+                       dir = OO.ui.Element.static.getDir( this.$element ),
+                       /*jshint +W024*/
+                       nextDirectionKey = dir === 'ltr' ? OO.ui.Keys.RIGHT : OO.ui.Keys.LEFT,
+                       prevDirectionKey = dir === 'ltr' ? OO.ui.Keys.LEFT : OO.ui.Keys.RIGHT,
+                       updateInDirection = null;
+
+               if ( !this.isDisabled() ) {
+                       switch ( e.which ) {
+                       case prevDirectionKey:
+                               this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'day' );
+                               updateInDirection = 'previous';
+                               break;
+                       case nextDirectionKey:
+                               this.moment.add( 1, this.precision === 'month' ? 'month' : 'day' );
+                               updateInDirection = 'next';
+                               break;
+                       case OO.ui.Keys.UP:
+                               this.moment.subtract( 1, this.precision === 'month' ? 'month' : 'week' );
+                               updateInDirection = 'previous';
+                               break;
+                       case OO.ui.Keys.DOWN:
+                               this.moment.add( 1, this.precision === 'month' ? 'month' : 'week' );
+                               updateInDirection = 'next';
+                               break;
+                       case OO.ui.Keys.PAGEUP:
+                               this.moment.subtract( 1, this.precision === 'month' ? 'year' : 'month' );
+                               updateInDirection = 'previous';
+                               break;
+                       case OO.ui.Keys.PAGEDOWN:
+                               this.moment.add( 1, this.precision === 'month' ? 'year' : 'month' );
+                               updateInDirection = 'next';
+                               break;
+                       }
+
+                       if ( updateInDirection ) {
+                               this.displayLayer = this.getDisplayLayers()[ 0 ];
+                               this.setDateFromMoment();
+                               this.updateUI( updateInDirection );
+                               return false;
+                       }
+               }
+       };
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less b/resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less
new file mode 100644 (file)
index 0000000..21a9019
--- /dev/null
@@ -0,0 +1,262 @@
+/*!
+ * MediaWiki Widgets – CalendarWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+@calendarWidth: 21em;
+@calendarHeight: 14em;
+
+.mw-widget-calendarWidget {
+       width: @calendarWidth;
+}
+
+.mw-widget-calendarWidget-header {
+       position: relative;
+       line-height: 2.5em;
+}
+
+.mw-widget-calendarWidget-header .oo-ui-buttonWidget {
+       margin-right: 0;
+}
+
+.mw-widget-calendarWidget-header .mw-widget-calendarWidget-labelButton {
+       margin: 0 auto;
+       display: block;
+       width: @calendarWidth - 2*3em;
+
+       .oo-ui-buttonElement-button {
+               width: @calendarWidth - 2*3em;
+               text-align: center;
+       }
+}
+
+.mw-widget-calendarWidget-upButton {
+       position: absolute;
+       right: 3em;
+}
+
+.mw-widget-calendarWidget-prevButton {
+       float: left;
+}
+
+.mw-widget-calendarWidget-nextButton {
+       float: right;
+}
+
+.mw-widget-calendarWidget-body-outer-wrapper {
+       clear: both;
+       position: relative;
+       overflow: hidden;
+       // Fit 7 days, 3em each
+       width: @calendarWidth;
+       // Fit 6 weeks + heading line, 2em each
+       height: @calendarHeight;
+}
+
+.mw-widget-calendarWidget-body-wrapper {
+       .mw-widget-calendarWidget-body {
+               display: inline-block;
+               // Fit 7 days, 3em each
+               width: @calendarWidth;
+               // Fit 6 weeks + heading line, 2em each
+               height: @calendarHeight;
+       }
+
+       .mw-widget-calendarWidget-old-body {
+               // background: #fdd;
+       }
+
+       .mw-widget-calendarWidget-body:not(.mw-widget-calendarWidget-old-body):first-child {
+               margin-top: -@calendarHeight;
+               margin-left: -@calendarWidth;
+       }
+
+       .mw-widget-calendarWidget-body:not(.mw-widget-calendarWidget-old-body):last-child {
+               margin-top: 0;
+               margin-left: 0;
+       }
+}
+
+.mw-widget-calendarWidget-body-wrapper-fade-previous {
+       width: @calendarWidth * 2;
+       height: @calendarHeight;
+
+       .mw-widget-calendarWidget-body:first-child {
+               margin-top: 0 !important;
+               margin-left: 0 !important;
+               transition: 0.5s margin-left;
+       }
+}
+
+.mw-widget-calendarWidget-body-wrapper-fade-next {
+       width: @calendarWidth * 2;
+       height: @calendarHeight;
+
+       .mw-widget-calendarWidget-body:first-child {
+               margin-left: -@calendarWidth !important;
+               margin-top: 0 !important;
+               transition: 0.5s margin-left;
+       }
+}
+
+.mw-widget-calendarWidget-body-wrapper-fade-up {
+       width: @calendarWidth;
+       height: @calendarHeight * 2;
+
+       .mw-widget-calendarWidget-body {
+               display: block;
+       }
+
+       .mw-widget-calendarWidget-body:first-child {
+               margin-left: 0 !important;
+               margin-top: 0 !important;
+               transition: 0.5s margin-top;
+       }
+}
+
+.mw-widget-calendarWidget-body-wrapper-fade-down {
+       width: @calendarWidth;
+       height: @calendarHeight * 2;
+
+       .mw-widget-calendarWidget-body {
+               display: block;
+       }
+
+       .mw-widget-calendarWidget-body:first-child {
+               margin-left: 0 !important;
+               margin-top: -@calendarHeight !important;
+               transition: 0.5s margin-top;
+       }
+}
+
+.mw-widget-calendarWidget-day,
+.mw-widget-calendarWidget-day-heading,
+.mw-widget-calendarWidget-month,
+.mw-widget-calendarWidget-year {
+       display: inline-block;
+       vertical-align: middle;
+       white-space: nowrap;
+       overflow: hidden;
+       text-overflow: ellipsis;
+       text-align: center;
+}
+
+.mw-widget-calendarWidget-day,
+.mw-widget-calendarWidget-day-heading {
+       // 7x7 grid
+       width: @calendarWidth / 7;
+       line-height: @calendarHeight / 7;
+       // Don't overlap the hacked-up fake box-shadow border we get inside DateInputWidget when focussed
+       &:nth-child(7n) {
+               width: @calendarWidth / 7 - 0.2em;
+               margin-right: 0.2em;
+       }
+       &:nth-child(7n+1) {
+               width: @calendarWidth / 7 - 0.2em;
+               margin-left: 0.2em;
+       }
+       &:nth-child(42) ~ & {
+               line-height: @calendarHeight / 7 - 0.2em;
+               margin-bottom: 0.2em;
+       }
+}
+
+.mw-widget-calendarWidget-month {
+       // 2x6 grid
+       width: @calendarWidth / 2;
+       line-height: @calendarHeight / 6;
+       // Don't overlap the hacked-up fake box-shadow border we get inside DateInputWidget when focussed
+       &:nth-child(2n) {
+               width: @calendarWidth / 2 - 0.2em;
+               margin-right: 0.2em;
+       }
+       &:nth-child(2n+1) {
+               width: @calendarWidth / 2 - 0.2em;
+               margin-left: 0.2em;
+       }
+       &:nth-child(10) ~ & {
+               line-height: @calendarHeight / 6 - 0.2em;
+               margin-bottom: 0.2em;
+       }
+}
+
+.mw-widget-calendarWidget-year {
+       // 5x4 grid
+       width: @calendarWidth / 5;
+       line-height: @calendarHeight / 4;
+       // Don't overlap the hacked-up fake box-shadow border we get inside DateInputWidget when focussed
+       &:nth-child(5n) {
+               width: @calendarWidth / 5 - 0.2em;
+               margin-right: 0.2em;
+       }
+       &:nth-child(5n+1) {
+               width: @calendarWidth / 5 - 0.2em;
+               margin-left: 0.2em;
+       }
+       &:nth-child(15) ~ & {
+               line-height: @calendarHeight / 4 - 0.2em;
+               margin-bottom: 0.2em;
+       }
+}
+
+.mw-widget-calendarWidget-item {
+       cursor: pointer;
+}
+
+/* Theme-specific */
+.mw-widget-calendarWidget-day {
+       color: #444;
+}
+
+.mw-widget-calendarWidget-day-heading {
+       font-weight: bold;
+       color: #555;
+}
+
+.mw-widget-calendarWidget-day-additional {
+       color: #aaa;
+}
+
+.mw-widget-calendarWidget-day-today {
+       box-shadow: inset 0 0 0 1px #3787fb;
+       border-radius: ((@calendarHeight / 7) / 2);
+}
+
+.mw-widget-calendarWidget-item-selected {
+       background-color: #d8e6fe;
+       color: #3787fb;
+
+       &.mw-widget-calendarWidget-day,
+       &.mw-widget-calendarWidget-day-heading {
+               border-radius: ((@calendarHeight / 7) / 2);
+       }
+
+       &.mw-widget-calendarWidget-month {
+               border-radius: ((@calendarHeight / 6) / 2);
+       }
+
+       &.mw-widget-calendarWidget-year {
+               border-radius: ((@calendarHeight / 4) / 2);
+       }
+}
+
+.mw-widget-calendarWidget-item:hover {
+       background-color: #eee;
+
+       &.mw-widget-calendarWidget-day,
+       &.mw-widget-calendarWidget-day-heading {
+               border-radius: ((@calendarHeight / 7) / 4);
+               // Hide the border from .mw-widget-calendarWidget-day-today
+               box-shadow: none;
+       }
+
+       &.mw-widget-calendarWidget-month {
+               border-radius: ((@calendarHeight / 6) / 4);
+       }
+
+       &.mw-widget-calendarWidget-year {
+               border-radius: ((@calendarHeight / 4) / 4);
+       }
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js b/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
new file mode 100644 (file)
index 0000000..8d6452c
--- /dev/null
@@ -0,0 +1,102 @@
+/*!
+ * MediaWiki Widgets - CategorySelector class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Category selector widget. Displays an OO.ui.CapsuleMultiSelectWidget
+        * and autocompletes with available categories.
+        *
+        * @class
+        * @uses mw.Api
+        * @extends OO.ui.CapsuleMultiSelectWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {number} [limit=10] Maximum number of results to load
+        */
+       mw.widgets.CategorySelector = function ( config ) {
+               // Config initialization
+               config = $.extend( { limit: 10 }, config );
+               this.limit = config.limit;
+
+               // Parent constructor
+               mw.widgets.CategorySelector.parent.call( this, config );
+
+               // Event handler to call the autocomplete methods
+               this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.CategorySelector, OO.ui.CapsuleMultiSelectWidget );
+
+       /* Methods */
+
+       /**
+        * Gets new items based on the input by calling
+        * {@link #getNewMenuItems getNewItems} and updates the menu
+        * after removing duplicates based on the data value.
+        *
+        * @private
+        * @method
+        */
+       mw.widgets.CategorySelector.prototype.updateMenuItems = function () {
+               this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
+                       var existingItems, filteredItems,
+                               menu = this.getMenu();
+
+                       // Array of strings of the data of OO.ui.MenuOptionsWidgets
+                       existingItems = menu.getItems().map( function ( item ) {
+                               return item.data;
+                       } );
+
+                       // Remove if items' data already exists
+                       filteredItems = items.filter( function ( item ) {
+                               return existingItems.indexOf( item ) === -1;
+                       } );
+
+                       // Map to an array of OO.ui.MenuOptionWidgets
+                       filteredItems = filteredItems.map( function ( item ) {
+                               return new OO.ui.MenuOptionWidget( {
+                                       data: item,
+                                       label: item
+                               } );
+                       } );
+
+                       menu.addItems( filteredItems ).updateItemVisibility();
+               }.bind( this ) );
+       };
+
+       /**
+        * Searches for categories based on the input.
+        *
+        * @private
+        * @method
+        * @param {string} input The input used to prefix search categories
+        * @return {jQuery.Promise} Resolves with an array of categories
+        */
+       mw.widgets.CategorySelector.prototype.getNewMenuItems = function ( input ) {
+               var deferred = new $.Deferred(),
+                       catNsId = mw.config.get( 'wgNamespaceIds' ).category,
+                       api = new mw.Api();
+
+               api.get( {
+                       action: 'opensearch',
+                       namespace: catNsId,
+                       limit: this.limit,
+                       search: input
+               } ).done( function ( res ) {
+                       var categoryNames = res[ 1 ].map( function ( name ) {
+                               return mw.Title.newFromText( name, catNsId ).getMainText();
+                       } );
+
+                       deferred.resolve( categoryNames );
+               } );
+
+               return deferred.promise();
+       };
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.base.css
new file mode 100644 (file)
index 0000000..b60883e
--- /dev/null
@@ -0,0 +1,26 @@
+/*!
+ * MediaWiki Widgets - base ComplexNamespaceInputWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.mw-widget-complexNamespaceInputWidget .mw-widget-namespaceInputWidget,
+.mw-widget-complexNamespaceInputWidget .oo-ui-fieldLayout {
+       display: inline-block;
+       margin-right: 1em;
+}
+
+/* TODO FieldLayout is not supposed to be used the way we use it here */
+.mw-widget-complexNamespaceInputWidget .oo-ui-fieldLayout {
+       vertical-align: middle;
+       margin-bottom: 0;
+}
+
+.mw-widget-complexNamespaceInputWidget .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-labelElement-label {
+       padding-left: 0.5em;
+}
+
+.mw-widget-complexNamespaceInputWidget .mw-widget-namespaceInputWidget {
+       max-width: 20em;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js
new file mode 100644 (file)
index 0000000..f67ed3d
--- /dev/null
@@ -0,0 +1,118 @@
+/*!
+ * MediaWiki Widgets - ComplexNamespaceInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Namespace input widget. Displays a dropdown box with the choice of available namespaces, plus
+        * two checkboxes to include associated namespace or to invert selection.
+        *
+        * @class
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {Object} namespace Configuration for the NamespaceInputWidget dropdown with list
+        *     of namespaces
+        * @cfg {string} namespace.includeAllValue If specified, add a "all namespaces"
+        *     option to the dropdown, and use this as the input value for it
+        * @cfg {Object} invert Configuration for the "invert selection" CheckboxInputWidget. If
+        *     null, the checkbox will not be generated.
+        * @cfg {Object} associated Configuration for the "include associated namespace"
+        *     CheckboxInputWidget. If null, the checkbox will not be generated.
+        * @cfg {Object} invertLabel Configuration for the FieldLayout with label wrapping the
+        *     "invert selection" checkbox
+        * @cfg {string} invertLabel.label Label text for the label
+        * @cfg {Object} associatedLabel Configuration for the FieldLayout with label wrapping
+        *     the "include associated namespace" checkbox
+        * @cfg {string} associatedLabel.label Label text for the label
+        */
+       mw.widgets.ComplexNamespaceInputWidget = function MwWidgetsComplexNamespaceInputWidget( config ) {
+               // Configuration initialization
+               config = $.extend(
+                       {
+                               // Config options for nested widgets
+                               namespace: {},
+                               invert: {},
+                               invertLabel: {},
+                               associated: {},
+                               associatedLabel: {}
+                       },
+                       config
+               );
+
+               // Parent constructor
+               mw.widgets.ComplexNamespaceInputWidget.parent.call( this, config );
+
+               // Properties
+               this.config = config;
+
+               this.namespace = new mw.widgets.NamespaceInputWidget( config.namespace );
+               if ( config.associated !== null ) {
+                       this.associated = new OO.ui.CheckboxInputWidget( $.extend(
+                               { value: '1' },
+                               config.associated
+                       ) );
+                       // TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
+                       this.associatedLabel = new OO.ui.FieldLayout(
+                               this.associated,
+                               $.extend(
+                                       { align: 'inline' },
+                                       config.associatedLabel
+                               )
+                       );
+               }
+               if ( config.invert !== null ) {
+                       this.invert = new OO.ui.CheckboxInputWidget( $.extend(
+                               { value: '1' },
+                               config.invert
+                       ) );
+                       // TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
+                       this.invertLabel = new OO.ui.FieldLayout(
+                               this.invert,
+                               $.extend(
+                                       { align: 'inline' },
+                                       config.invertLabel
+                               )
+                       );
+               }
+
+               // Events
+               this.namespace.connect( this, { change: 'updateCheckboxesState' } );
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widget-complexNamespaceInputWidget' )
+                       .append(
+                               this.namespace.$element,
+                               this.invert ? this.invertLabel.$element : '',
+                               this.associated ? this.associatedLabel.$element : ''
+                       );
+               this.updateCheckboxesState();
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.ComplexNamespaceInputWidget, OO.ui.Widget );
+
+       /* Methods */
+
+       /**
+        * Update the disabled state of checkboxes when the value of namespace dropdown changes.
+        *
+        * @private
+        */
+       mw.widgets.ComplexNamespaceInputWidget.prototype.updateCheckboxesState = function () {
+               var disabled = this.namespace.getValue() === this.namespace.allValue;
+               if ( this.invert ) {
+                       this.invert.setDisabled( disabled );
+               }
+               if ( this.associated ) {
+                       this.associated.setDisabled( disabled );
+               }
+       };
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.base.css
new file mode 100644 (file)
index 0000000..73a50d8
--- /dev/null
@@ -0,0 +1,20 @@
+/*!
+ * MediaWiki Widgets - base ComplexTitleInputWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget,
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       display: inline-block;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-namespaceInputWidget {
+       max-width: 20em;
+       margin-right: 0.5em;
+}
+
+.mw-widget-complexTitleInputWidget .mw-widget-titleInputWidget {
+       max-width: 29.5em;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
new file mode 100644 (file)
index 0000000..0c6c15e
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * MediaWiki Widgets - ComplexTitleInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Like TitleInputWidget, but the namespace has to be input through a separate dropdown field.
+        *
+        * @class
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {Object} namespace Configuration for the NamespaceInputWidget dropdown with list of
+        *     namespaces
+        * @cfg {Object} title Configuration for the TitleInputWidget text field
+        */
+       mw.widgets.ComplexTitleInputWidget = function MwWidgetsComplexTitleInputWidget( config ) {
+               // Parent constructor
+               mw.widgets.ComplexTitleInputWidget.parent.call( this, config );
+
+               // Properties
+               this.namespace = new mw.widgets.NamespaceInputWidget( config.namespace );
+               this.title = new mw.widgets.TitleInputWidget( $.extend(
+                       {},
+                       config.title,
+                       {
+                               relative: true,
+                               namespace: config.namespace.value || null
+                       }
+               ) );
+
+               // Events
+               this.namespace.connect( this, { change: 'updateTitleNamespace' } );
+
+               // Initialization
+               this.$element
+                       .addClass( 'mw-widget-complexTitleInputWidget' )
+                       .append(
+                               this.namespace.$element,
+                               this.title.$element
+                       );
+               this.updateTitleNamespace();
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.ComplexTitleInputWidget, OO.ui.Widget );
+
+       /* Methods */
+
+       /**
+        * Update the namespace to use for search suggestions of the title when the value of namespace
+        * dropdown changes.
+        */
+       mw.widgets.ComplexTitleInputWidget.prototype.updateTitleNamespace = function () {
+               this.title.setNamespace( Number( this.namespace.getValue() ) );
+       };
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
new file mode 100644 (file)
index 0000000..b478c4a
--- /dev/null
@@ -0,0 +1,557 @@
+/*!
+ * MediaWiki Widgets – DateInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+/*global moment */
+( function ( $, mw ) {
+
+       /**
+        * Creates an mw.widgets.DateInputWidget object.
+        *
+        *     @example
+        *     // Date input widget showcase
+        *     var fieldset = new OO.ui.FieldsetLayout( {
+        *       items: [
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget(),
+        *           {
+        *             align: 'top',
+        *             label: 'Select date'
+        *           }
+        *         ),
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget( { precision: 'month' } ),
+        *           {
+        *             align: 'top',
+        *             label: 'Select month'
+        *           }
+        *         ),
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget( {
+        *             inputFormat: 'DD.MM.YYYY',
+        *             displayFormat: 'Do [of] MMMM [anno Domini] YYYY'
+        *           } ),
+        *           {
+        *             align: 'top',
+        *             label: 'Select date (custom formats)'
+        *           }
+        *         )
+        *       ]
+        *     } );
+        *     $( 'body' ).append( fieldset.$element );
+        *
+        * The value is stored in 'YYYY-MM-DD' or 'YYYY-MM' format:
+        *
+        *     @example
+        *     // Accessing values in a date input widget
+        *     var dateInput = new mw.widgets.DateInputWidget();
+        *     var $label = $( '<p>' );
+        *     $( 'body' ).append( $label, dateInput.$element );
+        *     dateInput.on( 'change', function () {
+        *       // The value will always be a valid date or empty string, malformed input is ignored
+        *       var date = dateInput.getValue();
+        *       $label.text( 'Selected date: ' + ( date || '(none)' ) );
+        *     } );
+        *
+        * @class
+        * @extends OO.ui.InputWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {string} [precision='day'] Date precision to use, 'day' or 'month'
+        * @cfg {string} [value] Day or month date (depending on `precision`), in the format 'YYYY-MM-DD'
+        *     or 'YYYY-MM'. If not given or empty string, no date is selected.
+        * @cfg {string} [inputFormat] Date format string to use for the textual input field. Displayed
+        *     while the widget is active, and the user can type in a date in this format. Should be short
+        *     and easy to type. When not given, defaults to 'YYYY-MM-DD' or 'YYYY-MM', depending on
+        *     `precision`.
+        * @cfg {string} [displayFormat] Date format string to use for the clickable label. Displayed
+        *     while the widget is inactive. Should be as unambiguous as possible (for example, prefer to
+        *     spell out the month, rather than rely on the order), even if that makes it longer. When not
+        *     given, the default is language-specific.
+        * @cfg {string} [placeholder] User-visible date format string displayed in the textual input
+        *     field when it's empty. Should be the same as `inputFormat`, but translated to the user's
+        *     language. When not given, defaults to a translated version of 'YYYY-MM-DD' or 'YYYY-MM',
+        *     depending on `precision`.
+        * @cfg {boolean} [required=false] Mark the field as required. Implies `indicator: 'required'`.
+        * @cfg {string} [mustBeAfter] Validates the date to be after this. In the 'YYYY-MM-DD' format.
+        * @cfg {string} [mustBeBefore] Validates the date to be before this. In the 'YYYY-MM-DD' format.
+        */
+       mw.widgets.DateInputWidget = function MWWDateInputWidget( config ) {
+               // Config initialization
+               config = $.extend( { precision: 'day' }, config );
+               if ( config.required ) {
+                       if ( config.indicator === undefined ) {
+                               config.indicator = 'required';
+                       }
+               }
+
+               var placeholder, mustBeAfter, mustBeBefore;
+               if ( config.placeholder ) {
+                       placeholder = config.placeholder;
+               } else if ( config.inputFormat ) {
+                       // We have no way to display a translated placeholder for custom formats
+                       placeholder = '';
+               } else {
+                       // Messages: mw-widgets-dateinput-placeholder-day, mw-widgets-dateinput-placeholder-month
+                       placeholder = mw.msg( 'mw-widgets-dateinput-placeholder-' + config.precision );
+               }
+
+               // Properties (must be set before parent constructor, which calls #setValue)
+               this.handle = new OO.ui.LabelWidget();
+               this.textInput = new OO.ui.TextInputWidget( {
+                       placeholder: placeholder,
+                       validate: this.validateDate.bind( this )
+               } );
+               this.calendar = new mw.widgets.CalendarWidget( {
+                       precision: config.precision
+               } );
+               this.inCalendar = 0;
+               this.inTextInput = 0;
+               this.inputFormat = config.inputFormat;
+               this.displayFormat = config.displayFormat;
+
+               // Validate and set min and max dates as properties
+               mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
+               mustBeBefore = moment( config.mustBeBefore, 'YYYY-MM-DD' );
+               if (
+                       config.mustBeAfter !== undefined &&
+                       mustBeAfter.isValid()
+               ) {
+                       this.mustBeAfter = mustBeAfter;
+               }
+
+               if (
+                       config.mustBeBefore !== undefined &&
+                       mustBeBefore.isValid()
+               ) {
+                       this.mustBeBefore = mustBeBefore;
+               }
+
+               // Parent constructor
+               mw.widgets.DateInputWidget.parent.call( this, config );
+
+               // Events
+               this.calendar.connect( this, {
+                       change: 'onCalendarChange'
+               } );
+               this.textInput.connect( this, {
+                       enter: 'onEnter',
+                       change: 'onTextInputChange'
+               } );
+               this.$element.on( {
+                       focusout: this.onBlur.bind( this )
+               } );
+               this.calendar.$element.on( {
+                       keypress: this.onCalendarKeyPress.bind( this )
+               } );
+               this.handle.$element.on( {
+                       click: this.onClick.bind( this ),
+                       keypress: this.onKeyPress.bind( this )
+               } );
+
+               // Initialization
+               if ( config.required ) {
+                       this.$input.attr( 'required', 'required' );
+                       this.$input.attr( 'aria-required', 'true' );
+               }
+               // Move 'tabindex' from this.$input (which is invisible) to the visible handle
+               this.setTabIndexedElement( this.handle.$element );
+               this.handle.$element
+                       .addClass( 'mw-widget-dateInputWidget-handle' );
+               this.$element
+                       .addClass( 'mw-widget-dateInputWidget' )
+                       .append( this.handle.$element, this.textInput.$element, this.calendar.$element );
+               // Set handle label and hide stuff
+               this.updateUI();
+               this.deactivate();
+       };
+
+       /* Inheritance */
+
+       OO.inheritClass( mw.widgets.DateInputWidget, OO.ui.InputWidget );
+
+       /* Methods */
+
+       /**
+        * @inheritdoc
+        * @protected
+        */
+       mw.widgets.DateInputWidget.prototype.getInputElement = function () {
+               return $( '<input type="hidden">' );
+       };
+
+       /**
+        * Respond to calendar date change events.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.onCalendarChange = function () {
+               this.inCalendar++;
+               if ( !this.inTextInput ) {
+                       // If this is caused by user typing in the input field, do not set anything.
+                       // The value may be invalid (see #onTextInputChange), but displayable on the calendar.
+                       this.setValue( this.calendar.getDate() );
+               }
+               this.inCalendar--;
+       };
+
+       /**
+        * Respond to text input value change events.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.onTextInputChange = function () {
+               var mom,
+                       widget = this,
+                       value = this.textInput.getValue(),
+                       valid = this.isValidDate( value );
+               this.inTextInput++;
+
+               if ( value === '' ) {
+                       // No date selected
+                       widget.setValue( '' );
+               } else if ( valid ) {
+                       // Well-formed date value, parse and set it
+                       mom = moment( value, widget.getInputFormat() );
+                       // Use English locale to avoid number formatting
+                       widget.setValue( mom.locale( 'en' ).format( widget.getInternalFormat() ) );
+               } else {
+                       // Not well-formed, but possibly partial? Try updating the calendar, but do not set the
+                       // internal value. Generally this only makes sense when 'inputFormat' is little-endian (e.g.
+                       // 'YYYY-MM-DD'), but that's hard to check for, and might be difficult to handle the parsing
+                       // right for weird formats. So limit this trick to only when we're using the default
+                       // 'inputFormat', which is the same as the internal format, 'YYYY-MM-DD'.
+                       if ( widget.getInputFormat() === widget.getInternalFormat() ) {
+                               widget.calendar.setDate( widget.textInput.getValue() );
+                       }
+               }
+               widget.inTextInput--;
+
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.DateInputWidget.prototype.setValue = function ( value ) {
+               var oldValue = this.value;
+
+               if ( !moment( value, this.getInternalFormat() ).isValid() ) {
+                       value = '';
+               }
+
+               mw.widgets.DateInputWidget.parent.prototype.setValue.call( this, value );
+
+               if ( this.value !== oldValue ) {
+                       this.updateUI();
+               }
+
+               return this;
+       };
+
+       /**
+        * Handle text input and calendar blur events.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.onBlur = function () {
+               var widget = this;
+               setTimeout( function () {
+                       var $focussed = $( ':focus' );
+                       // Deactivate unless the focus moved to something else inside this widget
+                       if ( !OO.ui.contains( widget.$element[ 0 ], $focussed[ 0 ], true ) ) {
+                               widget.deactivate();
+                       }
+               }, 0 );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.DateInputWidget.prototype.focus = function () {
+               this.activate();
+               return this;
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.DateInputWidget.prototype.blur = function () {
+               this.deactivate();
+               return this;
+       };
+
+       /**
+        * Update the contents of the label, text input and status of calendar to reflect selected value.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.updateUI = function () {
+               if ( this.getValue() === '' ) {
+                       this.textInput.setValue( '' );
+                       this.calendar.setDate( null );
+                       this.handle.setLabel( mw.msg( 'mw-widgets-dateinput-no-date' ) );
+                       this.$element.addClass( 'mw-widget-dateInputWidget-empty' );
+               } else {
+                       if ( !this.inTextInput ) {
+                               this.textInput.setValue( this.getMoment().format( this.getInputFormat() ) );
+                       }
+                       if ( !this.inCalendar ) {
+                               this.calendar.setDate( this.getValue() );
+                       }
+                       this.handle.setLabel( this.getMoment().format( this.getDisplayFormat() ) );
+                       this.$element.removeClass( 'mw-widget-dateInputWidget-empty' );
+               }
+       };
+
+       /**
+        * Deactivate this input field for data entry. Closes the calendar and hides the text field.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.deactivate = function () {
+               this.$element.removeClass( 'mw-widget-dateInputWidget-active' );
+               this.handle.toggle( true );
+               this.textInput.toggle( false );
+               this.calendar.toggle( false );
+       };
+
+       /**
+        * Activate this input field for data entry. Opens the calendar and shows the text field.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.activate = function () {
+               this.$element.addClass( 'mw-widget-dateInputWidget-active' );
+               this.handle.toggle( false );
+               this.textInput.toggle( true );
+               this.calendar.toggle( true );
+
+               this.textInput.$input.focus();
+       };
+
+       /**
+        * Get the date format to be used for handle label when the input is inactive.
+        *
+        * @private
+        * @return {string} Format string
+        */
+       mw.widgets.DateInputWidget.prototype.getDisplayFormat = function () {
+               if ( this.displayFormat !== undefined ) {
+                       return this.displayFormat;
+               }
+
+               if ( this.calendar.getPrecision() === 'month' ) {
+                       return 'MMMM YYYY';
+               } else {
+                       // The formats Moment.js provides:
+                       // * ll:   Month name, day of month, year
+                       // * lll:  Month name, day of month, year, time
+                       // * llll: Month name, day of month, day of week, year, time
+                       //
+                       // The format we want:
+                       // * ????: Month name, day of month, day of week, year
+                       //
+                       // We try to construct it as 'llll - (lll - ll)' and hope for the best.
+                       // This seems to work well for many languages (maybe even all?).
+
+                       var localeData = moment.localeData( moment.locale() ),
+                               llll = localeData.longDateFormat( 'llll' ),
+                               lll = localeData.longDateFormat( 'lll' ),
+                               ll = localeData.longDateFormat( 'll' ),
+                               format = llll.replace( lll.replace( ll, '' ), '' );
+
+                       return format;
+               }
+       };
+
+       /**
+        * Get the date format to be used for the text field when the input is active.
+        *
+        * @private
+        * @return {string} Format string
+        */
+       mw.widgets.DateInputWidget.prototype.getInputFormat = function () {
+               if ( this.inputFormat !== undefined ) {
+                       return this.inputFormat;
+               }
+
+               return {
+                       day: 'YYYY-MM-DD',
+                       month: 'YYYY-MM'
+               }[ this.calendar.getPrecision() ];
+       };
+
+       /**
+        * Get the date format to be used internally for the value. This is not configurable in any way,
+        * and always either 'YYYY-MM-DD' or 'YYYY-MM'.
+        *
+        * @private
+        * @return {string} Format string
+        */
+       mw.widgets.DateInputWidget.prototype.getInternalFormat = function () {
+               return {
+                       day: 'YYYY-MM-DD',
+                       month: 'YYYY-MM'
+               }[ this.calendar.getPrecision() ];
+       };
+
+       /**
+        * Get the Moment object for current value.
+        *
+        * @return {Object} Moment object
+        */
+       mw.widgets.DateInputWidget.prototype.getMoment = function () {
+               return moment( this.getValue(), this.getInternalFormat() );
+       };
+
+       /**
+        * Handle mouse click events.
+        *
+        * @private
+        * @param {jQuery.Event} e Mouse click event
+        */
+       mw.widgets.DateInputWidget.prototype.onClick = function ( e ) {
+               if ( !this.isDisabled() && e.which === 1 ) {
+                       this.activate();
+               }
+               return false;
+       };
+
+       /**
+        * Handle key press events.
+        *
+        * @private
+        * @param {jQuery.Event} e Key press event
+        */
+       mw.widgets.DateInputWidget.prototype.onKeyPress = function ( e ) {
+               if ( !this.isDisabled() &&
+                       ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )
+               ) {
+                       this.activate();
+                       return false;
+               }
+       };
+
+       /**
+        * Handle calendar key press events.
+        *
+        * @private
+        * @param {jQuery.Event} e Key press event
+        */
+       mw.widgets.DateInputWidget.prototype.onCalendarKeyPress = function ( e ) {
+               if ( !this.isDisabled() && e.which === OO.ui.Keys.ENTER ) {
+                       this.deactivate();
+                       this.handle.$element.focus();
+                       return false;
+               }
+       };
+
+       /**
+        * Handle text input enter events.
+        *
+        * @private
+        */
+       mw.widgets.DateInputWidget.prototype.onEnter = function () {
+               this.deactivate();
+               this.handle.$element.focus();
+       };
+
+       /**
+        * @private
+        * @param {string} date Date string, to be valid, must be empty (no date selected) or in
+        *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
+        */
+       mw.widgets.DateInputWidget.prototype.validateDate = function ( date ) {
+               if ( date === '' ) {
+                       return true;
+               }
+
+               var isValid = this.isValidDate( date ) && this.isInRange( date );
+               this.setValidityFlag( isValid );
+               return isValid;
+       };
+
+       /**
+        * @private
+        * @param {string} date Date string, to be valid, must be empty (no date selected) or in
+        *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
+        */
+       mw.widgets.DateInputWidget.prototype.isValidDate = function ( date ) {
+               // "Half-strict mode": for example, for the format 'YYYY-MM-DD', 2015-1-3 instead of 2015-01-03
+               // is okay, but 2015-01 isn't, and neither is 2015-01-foo. Use Moment's "fuzzy" mode and check
+               // parsing flags for the details (stoled from implementation of #isValid).
+               var
+                       mom = moment( date, this.getInputFormat() ),
+                       flags = mom.parsingFlags();
+
+               return mom.isValid() && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0;
+       };
+
+       /**
+        * Validates if the date is within the range configured with {@link #cfg-mustBeAfter}
+        * and {@link #cfg-mustBeBefore}.
+        *
+        * @private
+        * @param {string} date Date string, to be valid, must be empty (no date selected) or in
+        *     'YYYY-MM-DD' or 'YYYY-MM' format to be valid
+        * @returns {boolean}
+        */
+       mw.widgets.DateInputWidget.prototype.isInRange = function ( date ) {
+               var momentDate = moment( date, 'YYYY-MM-DD' ),
+                       isAfter = ( this.mustBeAfter === undefined || momentDate.isAfter( this.mustBeAfter ) ),
+                       isBefore = ( this.mustBeBefore === undefined || momentDate.isBefore( this.mustBeBefore ) );
+
+               return isAfter && isBefore;
+       };
+
+       /**
+        * Get the validity of current value.
+        *
+        * This method returns a promise that resolves if the value is valid and rejects if
+        * it isn't. Uses {@link #validateDate}.
+        *
+        * @return {jQuery.Promise} A promise that resolves if the value is valid, rejects if not.
+        */
+       mw.widgets.DateInputWidget.prototype.getValidity = function () {
+               var isValid = this.validateDate( this.getValue() );
+
+               if ( isValid ) {
+                       return $.Deferred().resolve().promise();
+               } else {
+                       return $.Deferred().reject().promise();
+               }
+       };
+
+       /**
+        * Sets the 'invalid' flag appropriately.
+        *
+        * @param {boolean} [isValid] Optionally override validation result
+        */
+       mw.widgets.DateInputWidget.prototype.setValidityFlag = function ( isValid ) {
+               var widget = this,
+                       setFlag = function ( valid ) {
+                               if ( !valid ) {
+                                       widget.$input.attr( 'aria-invalid', 'true' );
+                               } else {
+                                       widget.$input.removeAttr( 'aria-invalid' );
+                               }
+                               widget.setFlags( { invalid: !valid } );
+                       };
+
+               if ( isValid !== undefined ) {
+                       setFlag( isValid );
+               } else {
+                       this.getValidity().then( function () {
+                               setFlag( true );
+                       }, function () {
+                               setFlag( false );
+                       } );
+               }
+       };
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less b/resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less
new file mode 100644 (file)
index 0000000..f78a18d
--- /dev/null
@@ -0,0 +1,119 @@
+/*!
+ * MediaWiki Widgets – DateInputWidget styles.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.oo-ui-box-sizing( @type: border-box ) {
+       -webkit-box-sizing: @type;
+       -moz-box-sizing: @type;
+       box-sizing: @type;
+}
+
+.oo-ui-unselectable() {
+       -webkit-touch-callout: none;
+       -webkit-user-select: none;
+       -moz-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+.oo-ui-inline-spacing( @spacing, @cancelled-spacing: 0 ) {
+       margin-right: @spacing;
+       &:last-child {
+               margin-right: @cancelled-spacing;
+       }
+}
+
+.mw-widget-dateInputWidget {
+       display: inline-block;
+       position: relative;
+
+       &-handle {
+               width: 100%;
+               display: inline-block;
+               cursor: pointer;
+
+               .oo-ui-unselectable();
+               .oo-ui-box-sizing(border-box);
+       }
+
+       &.oo-ui-widget-disabled .mw-widget-dateInputWidget-handle {
+               cursor: default;
+       }
+
+       > .mw-widget-calendarWidget {
+               position: absolute;
+               z-index: 1;
+       }
+
+       // Theme-specific styles
+       width: 21em;
+       margin: 0.25em 0;
+
+       .oo-ui-inline-spacing(0.5em);
+
+       &-handle {
+               padding: 0.5em 1em;
+               border: 1px solid #ccc;
+               border-radius: 0.1em;
+               line-height: 1.275em;
+               background-color: white;
+       }
+
+       > .oo-ui-textInputWidget input {
+               padding-left: 1em;
+       }
+
+       > .mw-widget-calendarWidget {
+               background-color: white;
+       }
+
+       &-active > .mw-widget-calendarWidget {
+               margin-top: -2px;
+               // Immitate focussed input styles
+               // First shadow generates bottom and right "border", second shadow generates bottom and left,
+               // resulting in no "border" at the top. Note that this generates a 2px-wide "border", not 1px.
+               // It makes sense when you think about it long enough and look up what each value means. Enjoy.
+               // (This is symmetrical anyway, and CSSJanus can't flip it correctly. T62805)
+               /* @noflip */
+               box-shadow: inset -1px -1px 0 1px #347bff, inset 1px -1px 0 1px #347bff;
+               border-top: 1px solid #ccc;
+
+               &:focus {
+                       outline: none;
+                       // Add border at the top on focus
+                       margin-top: -3px;
+                       border-top: 2px solid #347bff;
+               }
+       }
+
+       &.oo-ui-widget-enabled {
+               .mw-widget-dateInputWidget-handle:hover {
+                       border-color: #347bff;
+               }
+       }
+
+       &.oo-ui-widget-disabled {
+               .mw-widget-dateInputWidget-handle {
+                       color: #ccc;
+                       text-shadow: 0 1px 1px #fff;
+                       border-color: #ddd;
+                       background-color: #f3f3f3;
+               }
+       }
+
+       &.oo-ui-flaggedElement-invalid {
+               .mw-widget-dateInputWidget-handle {
+                       border-color: red;
+                       box-shadow: inset 0 0 0 0 red;
+               }
+       }
+
+       &-empty {
+               .mw-widget-dateInputWidget-handle {
+                       color: #ccc;
+               }
+       }
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
new file mode 100644 (file)
index 0000000..4f1b874
--- /dev/null
@@ -0,0 +1,69 @@
+/*!
+ * MediaWiki Widgets - NamespaceInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Namespace input widget. Displays a dropdown box with the choice of available namespaces.
+        *
+        * @class
+        * @extends OO.ui.DropdownInputWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {string|null} [includeAllValue] Value for "all namespaces" option, if any
+        * @cfg {number[]} [exclude] List of namespace numbers to exclude from the selector
+        */
+       mw.widgets.NamespaceInputWidget = function MwWidgetsNamespaceInputWidget( config ) {
+               // Configuration initialization
+               config = $.extend( {}, config, { options: this.getNamespaceDropdownOptions( config ) } );
+
+               // Parent constructor
+               mw.widgets.NamespaceInputWidget.parent.call( this, config );
+
+               // Initialization
+               this.$element.addClass( 'mw-widget-namespaceInputWidget' );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.NamespaceInputWidget, OO.ui.DropdownInputWidget );
+
+       /* Methods */
+
+       /**
+        * @private
+        */
+       mw.widgets.NamespaceInputWidget.prototype.getNamespaceDropdownOptions = function ( config ) {
+               var options,
+                       exclude = config.exclude || [],
+                       NS_MAIN = 0;
+
+               options = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
+                       if ( ns < NS_MAIN || exclude.indexOf( Number( ns ) ) !== -1 ) {
+                               return null; // skip
+                       }
+                       ns = String( ns );
+                       if ( ns === String( NS_MAIN ) ) {
+                               name = mw.message( 'blanknamespace' ).text();
+                       }
+                       return { data: ns, label: name };
+               } ).sort( function ( a, b ) {
+                       // wgFormattedNamespaces is an object, and so technically doesn't have to be ordered
+                       return a.data - b.data;
+               } );
+
+               if ( config.includeAllValue !== null && config.includeAllValue !== undefined ) {
+                       options.unshift( {
+                               data: config.includeAllValue,
+                               label: mw.message( 'namespacesall' ).text()
+                       } );
+               }
+
+               return options;
+       };
+
+}( jQuery, mediaWiki ) );
index df2f1a7..d5a7abc 100644 (file)
@@ -5,6 +5,7 @@
  * @license The MIT License (MIT); see LICENSE.txt
  */
 ( function ( $, mw ) {
+
        /**
         * Creates an mw.widgets.TitleInputWidget object.
         *
@@ -17,6 +18,7 @@
         * @cfg {number} [limit=10] Number of results to show
         * @cfg {number} [namespace] Namespace to prepend to queries
         * @cfg {boolean} [relative=true] If a namespace is set, return a title relative to it
+        * @cfg {boolean} [suggestions=true] Display search suggestions
         * @cfg {boolean} [showRedirectTargets=true] Show the targets of redirects
         * @cfg {boolean} [showRedlink] Show red link to exact match if it doesn't exist
         * @cfg {boolean} [showImages] Show page images
                var widget = this;
 
                // Config initialization
-               config = config || {};
+               config = $.extend( {
+                       maxLength: 255,
+                       limit: 10
+               }, config );
 
                // Parent constructor
-               OO.ui.TextInputWidget.call( this, config );
+               mw.widgets.TitleInputWidget.parent.call( this, $.extend( {}, config, { autocomplete: false } ) );
 
                // Mixin constructors
                OO.ui.mixin.LookupElement.call( this, config );
 
                // Properties
-               this.limit = config.limit || 10;
-               this.namespace = config.namespace || null;
+               this.limit = config.limit;
+               this.maxLength = config.maxLength;
+               this.namespace = config.namespace !== undefined ? config.namespace : null;
                this.relative = config.relative !== undefined ? config.relative : true;
+               this.suggestions = config.suggestions !== undefined ? config.suggestions : true;
                this.showRedirectTargets = config.showRedirectTargets !== false;
                this.showRedlink = !!config.showRedlink;
                this.showImages = !!config.showImages;
@@ -54,6 +61,7 @@
                if ( this.showDescriptions ) {
                        this.lookupMenu.$element.addClass( 'mw-widget-titleInputWidget-menu-withDescriptions' );
                }
+               this.setLookupsDisabled( !this.suggestions );
 
                this.interwikiPrefixes = [];
                this.interwikiPrefixesPromise = new mw.Api().get( {
                } );
        };
 
-       /* Inheritance */
+       /* Setup */
 
        OO.inheritClass( mw.widgets.TitleInputWidget, OO.ui.TextInputWidget );
-
        OO.mixinClass( mw.widgets.TitleInputWidget, OO.ui.mixin.LookupElement );
 
        /* Methods */
 
+       /**
+        * Get the namespace to prepend to titles in suggestions, if any.
+        *
+        * @return {number|null} Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.getNamespace = function () {
+               return this.namespace;
+       };
+
+       /**
+        * Set the namespace to prepend to titles in suggestions, if any.
+        *
+        * @param {number|null} namespace Namespace number
+        */
+       mw.widgets.TitleInputWidget.prototype.setNamespace = function ( namespace ) {
+               this.namespace = namespace;
+               this.lookupCache = {};
+               this.closeLookupMenu();
+       };
+
        /**
         * @inheritdoc
         */
                this.closeLookupMenu();
                this.setLookupsDisabled( true );
                this.setValue( item.getData() );
-               this.setLookupsDisabled( false );
+               this.setLookupsDisabled( !this.suggestions );
        };
 
        /**
                this.setLookupsDisabled( true );
 
                // Parent method
-               retval = OO.ui.TextInputWidget.prototype.focus.apply( this, arguments );
+               retval = mw.widgets.TitleInputWidget.parent.prototype.focus.apply( this, arguments );
 
-               this.setLookupsDisabled( false );
+               this.setLookupsDisabled( !this.suggestions );
 
                return retval;
        };
                                        widget.interwikiPrefixes.indexOf( interwiki ) !== -1
                                ) {
                                        return $.Deferred().resolve( { query: {
-                                               pages: [{
+                                               pages: [ {
                                                        title: widget.value
-                                               }]
+                                               } ]
                                        } } ).promise( promiseAbortObject );
                                } else {
                                        params = {
         * Get lookup cache item from server response data.
         *
         * @method
-        * @param {Mixed} data Response from server
+        * @param {Mixed} response Response from server
         */
-       mw.widgets.TitleInputWidget.prototype.getLookupCacheDataFromResponse = function ( data ) {
-               return data.query || {};
+       mw.widgets.TitleInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
+               return response.query || {};
        };
 
        /**
 
                if ( data.redirects ) {
                        for ( i = 0, len = data.redirects.length; i < len; i++ ) {
-                               redirect = data.redirects[i];
-                               redirectsTo[redirect.to] = redirectsTo[redirect.to] || [];
-                               redirectsTo[redirect.to].push( redirect.from );
+                               redirect = data.redirects[ i ];
+                               redirectsTo[ redirect.to ] = redirectsTo[ redirect.to ] || [];
+                               redirectsTo[ redirect.to ].push( redirect.from );
                        }
                }
 
                for ( index in data.pages ) {
-                       suggestionPage = data.pages[index];
-                       pageData[suggestionPage.title] = {
+                       suggestionPage = data.pages[ index ];
+                       pageData[ suggestionPage.title ] = {
                                missing: suggestionPage.missing !== undefined,
                                redirect: suggestionPage.redirect !== undefined,
                                disambiguation: OO.getProp( suggestionPage, 'pageprops', 'disambiguation' ) !== undefined,
                                imageUrl: OO.getProp( suggestionPage, 'thumbnail', 'source' ),
                                description: OO.getProp( suggestionPage, 'terms', 'description' )
                        };
-                       titles.push( suggestionPage.title );
 
-                       redirects = redirectsTo[suggestionPage.title] || [];
+                       // Throw away pages from wrong namespaces. This can happen when 'showRedirectTargets' is true
+                       // and we encounter a cross-namespace redirect.
+                       if ( this.namespace === null || this.namespace === suggestionPage.ns ) {
+                               titles.push( suggestionPage.title );
+                       }
+
+                       redirects = redirectsTo[ suggestionPage.title ] || [];
                        for ( i = 0, len = redirects.length; i < len; i++ ) {
-                               pageData[redirects[i]] = {
+                               pageData[ redirects[ i ] ] = {
                                        missing: false,
                                        redirect: true,
                                        disambiguation: false,
                                        description: mw.msg( 'mw-widgets-titleinput-description-redirect', suggestionPage.title )
                                };
-                               titles.push( redirects[i] );
+                               titles.push( redirects[ i ] );
                        }
                }
 
                );
 
                if ( !pageExists ) {
-                       pageData[this.value] = {
+                       pageData[ this.value ] = {
                                missing: true, redirect: false, disambiguation: false,
                                description: mw.msg( 'mw-widgets-titleinput-description-new-page' )
                        };
                        titles.push( this.value );
                }
                for ( i = 0, len = titles.length; i < len; i++ ) {
-                       page = pageData[titles[i]] || {};
-                       items.push( new mw.widgets.TitleOptionWidget( this.getOptionWidgetData( titles[i], page ) ) );
+                       page = pageData[ titles[ i ] ] || {};
+                       items.push( new mw.widgets.TitleOptionWidget( this.getOptionWidgetData( titles[ i ], page ) ) );
                }
 
                return items;
                        data: this.namespace !== null && this.relative
                                ? mwTitle.getRelativeText( this.namespace )
                                : title,
+                       title: mwTitle,
                        imageUrl: this.showImages ? data.imageUrl : null,
                        description: this.showDescriptions ? data.description : null,
                        missing: data.missing,
        };
 
        /**
-        * Get title object corresponding to #getValue
+        * Get title object corresponding to given value, or #getValue if not given.
         *
+        * @param {string} [value] Value to get a title for
         * @returns {mw.Title|null} Title object, or null if value is invalid
         */
-       mw.widgets.TitleInputWidget.prototype.getTitle = function () {
-               var title = this.getValue(),
+       mw.widgets.TitleInputWidget.prototype.getTitle = function ( value ) {
+               var title = value !== undefined ? value : this.getValue(),
                        // mw.Title doesn't handle null well
                        titleObj = mw.Title.newFromText( title, this.namespace !== null ? this.namespace : undefined );
 
                return titleObj;
        };
 
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.TitleInputWidget.prototype.cleanUpValue = function ( value ) {
+               var widget = this;
+               value = mw.widgets.TitleInputWidget.parent.prototype.cleanUpValue.call( this, value );
+               return $.trimByteLength( this.value, value, this.maxLength, function ( value ) {
+                       var title = widget.getTitle( value );
+                       return title ? title.getMain() : value;
+               } ).newVal;
+       };
+
        /**
         * @inheritdoc
         */
index 07b81e4..ec0c935 100644 (file)
@@ -14,7 +14,8 @@
         *
         * @constructor
         * @param {Object} [config] Configuration options
-        * @cfg {string} [data] Page title
+        * @cfg {string} [data] Label to display
+        * @cfg {mw.Title} [title] Page title object
         * @cfg {string} [imageUrl] Thumbnail image URL with URL encoding
         * @cfg {string} [description] Page description
         * @cfg {boolean} [missing] Page doesn't exist
@@ -23,7 +24,7 @@
         * @cfg {string} [query] Matching query string
         */
        mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( config ) {
-               var icon, title = config.data;
+               var icon;
 
                if ( config.missing ) {
                        icon = 'page-not-found';
                // Config initialization
                config = $.extend( {
                        icon: icon,
-                       label: title,
-                       href: mw.util.getUrl( title ),
+                       label: config.data,
+                       href: config.title.getUrl(),
                        autoFitLabel: false
                }, config );
 
                // Parent constructor
-               OO.ui.MenuOptionWidget.call( this, config );
+               mw.widgets.TitleOptionWidget.parent.call( this, config );
 
-               // Intialization
+               // Initialization
                this.$label.wrap( '<a>' );
                this.$link = this.$label.parent();
                this.$link.attr( 'href', config.href );
@@ -74,7 +75,7 @@
                }
        };
 
-       /* Inheritance */
+       /* Setup */
 
        OO.inheritClass( mw.widgets.TitleOptionWidget, OO.ui.MenuOptionWidget );
 
diff --git a/resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js b/resources/src/mediawiki.widgets/mw.widgets.UserInputWidget.js
new file mode 100644 (file)
index 0000000..0d0fb73
--- /dev/null
@@ -0,0 +1,119 @@
+/*!
+ * MediaWiki Widgets - UserInputWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+
+       /**
+        * Creates a mw.widgets.UserInputWidget object.
+        *
+        * @class
+        * @extends OO.ui.TextInputWidget
+        * @mixins OO.ui.mixin.LookupElement
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {number} [limit=10] Number of results to show
+        */
+       mw.widgets.UserInputWidget = function MwWidgetsUserInputWidget( config ) {
+               // Config initialization
+               config = config || {};
+
+               // Parent constructor
+               mw.widgets.UserInputWidget.parent.call( this, $.extend( {}, config, { autocomplete: false } ) );
+
+               // Mixin constructors
+               OO.ui.mixin.LookupElement.call( this, config );
+
+               // Properties
+               this.limit = config.limit || 10;
+
+               // Initialization
+               this.$element.addClass( 'mw-widget-userInputWidget' );
+               this.lookupMenu.$element.addClass( 'mw-widget-userInputWidget-menu' );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.UserInputWidget, OO.ui.TextInputWidget );
+       OO.mixinClass( mw.widgets.UserInputWidget, OO.ui.mixin.LookupElement );
+
+       /* Methods */
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.UserInputWidget.prototype.onLookupMenuItemChoose = function ( item ) {
+               this.closeLookupMenu();
+               this.setLookupsDisabled( true );
+               this.setValue( item.getData() );
+               this.setLookupsDisabled( false );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.UserInputWidget.prototype.focus = function () {
+               var retval;
+
+               // Prevent programmatic focus from opening the menu
+               this.setLookupsDisabled( true );
+
+               // Parent method
+               retval = mw.widgets.UserInputWidget.parent.prototype.focus.apply( this, arguments );
+
+               this.setLookupsDisabled( false );
+
+               return retval;
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.UserInputWidget.prototype.getLookupRequest = function () {
+               var inputValue = this.value;
+
+               return new mw.Api().get( {
+                       action: 'query',
+                       list: 'allusers',
+                       // Prefix of list=allusers is case sensitive. Normalise first
+                       // character to uppercase so that "fo" may yield "Foo".
+                       auprefix: inputValue[ 0 ].toUpperCase() + inputValue.slice( 1 ),
+                       aulimit: this.limit
+               } );
+       };
+
+       /**
+        * Get lookup cache item from server response data.
+        *
+        * @method
+        * @param {Mixed} response Response from server
+        */
+       mw.widgets.UserInputWidget.prototype.getLookupCacheDataFromResponse = function ( response ) {
+               return response.query.allusers || {};
+       };
+
+       /**
+        * Get list of menu items from a server response.
+        *
+        * @param {Object} data Query result
+        * @returns {OO.ui.MenuOptionWidget[]} Menu items
+        */
+       mw.widgets.UserInputWidget.prototype.getLookupMenuOptionsFromData = function ( data ) {
+               var len, i, user,
+                       items = [];
+
+               for ( i = 0, len = data.length; i < len; i++ ) {
+                       user = data[ i ] || {};
+                       items.push( new OO.ui.MenuOptionWidget( {
+                               label: user.name,
+                               data: user.name
+                       } ) );
+               }
+
+               return items;
+       };
+
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.infuse.js b/resources/src/mediawiki.widgets/mw.widgets.infuse.js
deleted file mode 100644 (file)
index 98480bb..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-// HACK: OO.ui.infuse assumes all widgets are in the OO.ui. namespace.
-// Make it so until this is fixed. (T104989)
-jQuery.extend( OO.ui, mediaWiki.widgets );
diff --git a/resources/src/mediawiki/images/feed-icon.png b/resources/src/mediawiki/images/feed-icon.png
new file mode 100644 (file)
index 0000000..00f49f6
Binary files /dev/null and b/resources/src/mediawiki/images/feed-icon.png differ
diff --git a/resources/src/mediawiki/images/feed-icon.svg b/resources/src/mediawiki/images/feed-icon.svg
new file mode 100644 (file)
index 0000000..6e5f570
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki/images/question.png b/resources/src/mediawiki/images/question.png
new file mode 100644 (file)
index 0000000..f7405d2
Binary files /dev/null and b/resources/src/mediawiki/images/question.png differ
diff --git a/resources/src/mediawiki/images/question.svg b/resources/src/mediawiki/images/question.svg
new file mode 100644 (file)
index 0000000..98fbe8d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js b/resources/src/mediawiki/mediawiki.ForeignStructuredUpload.js
new file mode 100644 (file)
index 0000000..fe8520b
--- /dev/null
@@ -0,0 +1,172 @@
+( function ( mw, OO ) {
+       /**
+        * @class mw.ForeignStructuredUpload
+        * @extends mw.ForeignUpload
+        *
+        * Used to represent an upload in progress on the frontend.
+        *
+        * This subclass will upload to a wiki using a structured metadata
+        * system similar to (or identical to) the one on Wikimedia Commons.
+        *
+        * See <https://commons.wikimedia.org/wiki/Commons:Structured_data> for
+        * a more detailed description of how that system works.
+        *
+        * TODO this currently only supports uploads under CC-BY-SA 4.0,
+        *     and should really have support for more licenses.
+        *
+        * @inheritdoc
+        */
+       function ForeignStructuredUpload( targetHost, apiconfig ) {
+               this.date = undefined;
+               this.descriptions = [];
+               this.categories = [];
+
+               mw.ForeignUpload.call( this, targetHost, apiconfig );
+       }
+
+       OO.inheritClass( ForeignStructuredUpload, mw.ForeignUpload );
+
+       /**
+        * Add categories to the upload.
+        *
+        * @param {string[]} categories Array of categories to which this upload will be added.
+        */
+       ForeignStructuredUpload.prototype.addCategories = function ( categories ) {
+               var i, category;
+
+               for ( i = 0; i < categories.length; i++ ) {
+                       category = categories[ i ];
+                       this.categories.push( category );
+               }
+       };
+
+       /**
+        * Add a description to the upload.
+        *
+        * @param {string} language The language code for the description's language. Must have a template on the target wiki to work properly.
+        * @param {string} description The description of the file.
+        */
+       ForeignStructuredUpload.prototype.addDescription = function ( language, description ) {
+               this.descriptions.push( {
+                       language: language,
+                       text: description
+               } );
+       };
+
+       /**
+        * Set the date of creation for the upload.
+        *
+        * @param {Date} date
+        */
+       ForeignStructuredUpload.prototype.setDate = function ( date ) {
+               this.date = date;
+       };
+
+       /**
+        * Get the text of the file page, to be created on upload. Brings together
+        * several different pieces of information to create useful text.
+        *
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getText = function () {
+               return (
+                       '{{' +
+                       this.getTemplateName() +
+                       '\n|description=' +
+                       this.getDescriptions() +
+                       '\n|date=' +
+                       this.getDate() +
+                       '\n|source=' +
+                       this.getUser() +
+                       '\n|author=' +
+                       this.getUser() +
+                       '\n}}\n\n' +
+                       this.getLicense() +
+                       '\n\n' +
+                       this.getCategories()
+               );
+       };
+
+       /**
+        * Gets the wikitext for the creation date of this upload.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getDate = function () {
+               if ( !this.date ) {
+                       return '';
+               }
+
+               return this.date.toString();
+       };
+
+       /**
+        * Gets the name of the template to use for creating the file metadata.
+        * Override in subclasses for other templates.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getTemplateName = function () {
+               return 'Information';
+       };
+
+       /**
+        * Fetches the wikitext for any descriptions that have been added
+        * to the upload.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getDescriptions = function () {
+               var i, desc, templateCalls = [];
+
+               for ( i = 0; i < this.descriptions.length; i++ ) {
+                       desc = this.descriptions[ i ];
+                       templateCalls.push( '{{' + desc.language + '|' + desc.text + '}}' );
+               }
+
+               return templateCalls.join( '\n' );
+       };
+
+       /**
+        * Fetches the wikitext for the categories to which the upload will
+        * be added.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getCategories = function () {
+               var i, cat, categoryLinks = [];
+
+               for ( i = 0; i < this.categories.length; i++ ) {
+                       cat = this.categories[ i ];
+                       categoryLinks.push( '[[Category:' + cat + ']]' );
+               }
+
+               return categoryLinks.join( '\n' );
+       };
+
+       /**
+        * Gets the wikitext for the license of the upload. Abstract for now.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getLicense = function () {
+               return '';
+       };
+
+       /**
+        * Get the username.
+        *
+        * @private
+        * @return {string}
+        */
+       ForeignStructuredUpload.prototype.getUser = function () {
+               return mw.config.get( 'wgUserName' );
+       };
+
+       mw.ForeignStructuredUpload = ForeignStructuredUpload;
+}( mediaWiki, OO ) );
diff --git a/resources/src/mediawiki/mediawiki.ForeignUpload.js b/resources/src/mediawiki/mediawiki.ForeignUpload.js
new file mode 100644 (file)
index 0000000..0929661
--- /dev/null
@@ -0,0 +1,58 @@
+( function ( mw, OO ) {
+       /**
+        * @class mw.ForeignUpload
+        * @extends mw.Upload
+        *
+        * Used to represent an upload in progress on the frontend.
+        *
+        * Subclassed to upload to a foreign API, with no other goodies. Use
+        * this for a generic foreign image repository on your wiki farm.
+        *
+        * Note you can provide the {@link #targetHost targetHost} or not - if the first argument is
+        * an object, we assume you want the default, and treat it as apiconfig
+        * instead.
+        *
+        * @constructor
+        * @param {string} [targetHost="commons.wikimedia.org"] Used to set up the target
+        *     wiki. If not remote, this class behaves identically to mw.Upload (unless further subclassed)
+        * @param {Object} [apiconfig] Passed to the constructor of mw.ForeignApi or mw.Api, as needed.
+        */
+       function ForeignUpload( targetHost, apiconfig ) {
+               var api;
+
+               if ( typeof targetHost === 'object' ) {
+                       // targetHost probably wasn't passed in, it must
+                       // be apiconfig
+                       apiconfig = targetHost;
+               } else {
+                       // targetHost is a useful string, set it here
+                       this.targetHost = targetHost || this.targetHost;
+               }
+
+               if ( location.host !== this.targetHost ) {
+                       api = new mw.ForeignApi(
+                               location.protocol + '//' + this.targetHost + '/w/api.php',
+                               apiconfig
+                       );
+               } else {
+                       // We'll ignore the CORS and centralauth stuff if we're on Commons already
+                       api = new mw.Api( apiconfig );
+               }
+
+               mw.Upload.call( this, api );
+       }
+
+       OO.inheritClass( ForeignUpload, mw.Upload );
+
+       /**
+        * @property targetHost
+        * Used to specify the target repository of the upload.
+        *
+        * You could override this to point at something that isn't Commons,
+        * but be sure it has the correct templates and is CORS and CentralAuth
+        * ready.
+        */
+       ForeignUpload.prototype.targetHost = 'commons.wikimedia.org';
+
+       mw.ForeignUpload = ForeignUpload;
+}( mediaWiki, OO ) );
index 661ab74..7f95b1c 100644 (file)
@@ -4,6 +4,7 @@
  * @since 1.18
  */
 ( function ( mw, $ ) {
+       /*jshint latedef:false */
 
        /**
         * @class mw.Title
                        return false;
                }
                ns = ns.toLowerCase();
-               id = mw.config.get( 'wgNamespaceIds' )[ns];
+               id = mw.config.get( 'wgNamespaceIds' )[ ns ];
                if ( id === undefined ) {
                        return false;
                }
                        .replace( rUnderscoreTrim, '' );
 
                // Process initial colon
-               if ( title !== '' && title[0] === ':' ) {
+               if ( title !== '' && title[ 0 ] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                // Process namespace prefix (if any)
                m = title.match( rSplit );
                if ( m ) {
-                       id = getNsIdByName( m[1] );
+                       id = getNsIdByName( m[ 1 ] );
                        if ( id !== false ) {
                                // Ordinary namespace
                                namespace = id;
-                               title = m[2];
+                               title = m[ 2 ];
 
                                // For Talk:X pages, make sure X has no "namespace" prefix
                                if ( namespace === NS_TALK && ( m = title.match( rSplit ) ) ) {
                                        // Disallow titles like Talk:File:x (subject should roundtrip: talk:file:x -> file:x -> file_talk:x)
-                                       if ( getNsIdByName( m[1] ) !== false ) {
+                                       if ( getNsIdByName( m[ 1 ] ) !== false ) {
                                                return false;
                                        }
                                }
                }
 
                // Any remaining initial :s are illegal.
-               if ( title[0] === ':' ) {
+               if ( title[ 0 ] === ':' ) {
                        return false;
                }
 
                        rules = sanitationRules;
 
                for ( i = 0, ruleLength = rules.length; i < ruleLength; ++i ) {
-                       rule = rules[i];
+                       rule = rules[ i ];
                        for ( m = 0, filterLength = filter.length; m < filterLength; ++m ) {
-                               if ( rule[filter[m]] ) {
+                               if ( rule[ filter[ m ] ] ) {
                                        s = s.replace( rule.pattern, rule.replace );
                                }
                        }
         * @param {number} [defaultNamespace=NS_MAIN]
         *  If given, will used as default namespace for the given title.
         * @param {Object} [options] additional options
-        * @param {string} [options.fileExtension='']
         *  If the title is about to be created for the Media or File namespace,
         *  ensures the resulting Title has the correct extension. Useful, for example
         *  on systems that predict the type by content-sniffing, not by file extension.
         * @return {mw.Title|null} A valid Title object or null if the input cannot be turned into a valid title
         */
        Title.newFromUserInput = function ( title, defaultNamespace, options ) {
-               var namespace, m, id, ext, parts, normalizeExtension;
+               var namespace, m, id, ext, parts;
 
                // defaultNamespace is optional; check whether options moves up
                if ( arguments.length < 3 && $.type( defaultNamespace ) === 'object' ) {
 
                // merge options into defaults
                options = $.extend( {
-                       fileExtension: '',
                        forUploading: true
                }, options );
 
-               normalizeExtension = function ( extension ) {
-                       // Remove only trailing space (that is removed by MW anyway)
-                       extension = extension.toLowerCase().replace( /\s*$/, '' );
-                       return extension;
-               };
-
                namespace = defaultNamespace === undefined ? NS_MAIN : defaultNamespace;
 
                // Normalise whitespace and remove duplicates
                title = $.trim( title.replace( rWhitespace, ' ' ) );
 
                // Process initial colon
-               if ( title !== '' && title[0] === ':' ) {
+               if ( title !== '' && title[ 0 ] === ':' ) {
                        // Initial colon means main namespace instead of specified default
                        namespace = NS_MAIN;
                        title = title
                // Process namespace prefix (if any)
                m = title.match( rSplit );
                if ( m ) {
-                       id = getNsIdByName( m[1] );
+                       id = getNsIdByName( m[ 1 ] );
                        if ( id !== false ) {
                                // Ordinary namespace
                                namespace = id;
-                               title = m[2];
+                               title = m[ 2 ];
                        }
                }
 
                if ( namespace === NS_MEDIA
-                       || ( ( options.forUploading || options.fileExtension ) && ( namespace === NS_FILE ) )
+                       || ( options.forUploading && ( namespace === NS_FILE ) )
                ) {
 
                        title = sanitize( title, [ 'generalRule', 'fileRule' ] );
                                // Get the last part, which is supposed to be the file extension
                                ext = parts.pop();
 
-                               // Does the supplied file name carry the desired file extension?
-                               if ( options.fileExtension
-                                       && normalizeExtension( ext ) !== normalizeExtension( options.fileExtension )
-                               ) {
-
-                                       // No, push back, whatever there was after the dot
-                                       parts.push( ext );
-
-                                       // And add the desired file extension later
-                                       ext = options.fileExtension;
-                               }
-
                                // Remove whitespace of the name part (that W/O extension)
                                title = $.trim( parts.join( '.' ) );
 
                                // Missing file extension
                                title = $.trim( parts.join( '.' ) );
 
-                               if ( options.fileExtension ) {
-
-                                       // Cut, if too long and append the desired file extension
-                                       title = trimFileNameToByteLength( title, options.fileExtension );
-
-                               } else {
-
-                                       // Name has no file extension and a fallback wasn't provided either
-                                       return null;
-                               }
+                               // Name has no file extension and a fallback wasn't provided either
+                               return null;
                        }
                } else {
 
         * @static
         * @param {string} uncleanName The unclean file name including file extension but
         *   without namespace
-        * @param {string} [fileExtension] the desired file extension
         * @return {mw.Title|null} A valid Title object or null if the title is invalid
         */
-       Title.newFromFileName = function ( uncleanName, fileExtension ) {
+       Title.newFromFileName = function ( uncleanName ) {
 
                return Title.newFromUserInput( 'File:' + uncleanName, {
-                       fileExtension: fileExtension,
                        forUploading: true
                } );
        };
 
                        recount = regexes.length;
 
-               src = img.jquery ? img[0].src : img.src;
+               src = img.jquery ? img[ 0 ].src : img.src;
 
                matches = src.match( thumbPhpRegex );
 
                decodedSrc = decodeURIComponent( src );
 
                for ( i = 0; i < recount; i++ ) {
-                       regex = regexes[i];
+                       regex = regexes[ i ];
                        matches = decodedSrc.match( regex );
 
-                       if ( matches && matches[1] ) {
-                               return mw.Title.newFromText( 'File:' + matches[1] );
+                       if ( matches && matches[ 1 ] ) {
+                               return mw.Title.newFromText( 'File:' + matches[ 1 ] );
                        }
                }
 
                        obj = Title.exist.pages;
 
                if ( type === 'string' ) {
-                       match = obj[title];
+                       match = obj[ title ];
                } else if ( type === 'object' && title instanceof Title ) {
-                       match = obj[title.toString()];
+                       match = obj[ title.toString() ];
                } else {
                        throw new Error( 'mw.Title.exists: title must be a string or an instance of Title' );
                }
                pages: {},
 
                set: function ( titles, state ) {
-                       titles = $.isArray( titles ) ? titles : [titles];
+                       titles = $.isArray( titles ) ? titles : [ titles ];
                        state = state === undefined ? true : !!state;
                        var i,
                                pages = this.pages,
                                len = titles.length;
 
                        for ( i = 0; i < len; i++ ) {
-                               pages[ titles[i] ] = state;
+                               pages[ titles[ i ] ] = state;
                        }
                        return true;
                }
        };
 
+       /**
+        * Normalize a file extension to the common form, making it lowercase and checking some synonyms,
+        * and ensure it's clean. Extensions with non-alphanumeric characters will be discarded.
+        * Keep in sync with File::normalizeExtension() in PHP.
+        *
+        * @param {string} extension File extension (without the leading dot)
+        * @return {string} File extension in canonical form
+        */
+       Title.normalizeExtension = function ( extension ) {
+               var
+                       lower = extension.toLowerCase(),
+                       squish = {
+                               htm: 'html',
+                               jpeg: 'jpg',
+                               mpeg: 'mpg',
+                               tiff: 'tif',
+                               ogv: 'ogg'
+                       };
+               if ( squish.hasOwnProperty( lower ) ) {
+                       return squish[ lower ];
+               } else if ( /^[0-9a-z]+$/.test( lower ) ) {
+                       return lower;
+               } else {
+                       return '';
+               }
+       };
+
        /* Public members */
 
        Title.prototype = {
                        ) {
                                return this.title;
                        }
-                       return this.title[0].toUpperCase() + this.title.slice( 1 );
+                       return this.title[ 0 ].toUpperCase() + this.title.slice( 1 );
                },
 
                /**
diff --git a/resources/src/mediawiki/mediawiki.Upload.Dialog.js b/resources/src/mediawiki/mediawiki.Upload.Dialog.js
new file mode 100644 (file)
index 0000000..36fbd46
--- /dev/null
@@ -0,0 +1,514 @@
+( function ( $, mw ) {
+
+       /**
+        * mw.Upload.Dialog encapsulates the process of uploading a file
+        * to MediaWiki using the {@link mw.Upload mw.Upload} model.
+        * The dialog emits events that can be used to get the stashed
+        * upload and the final file. It can be extended to accept
+        * additional fields from the user for specific scenarios like
+        * for Commons, or campaigns.
+        *
+        * ## Structure
+        *
+        * The {@link OO.ui.ProcessDialog dialog} has three steps:
+        *
+        *  - **Upload**: Has a {@link OO.ui.SelectFileWidget field} to get the file object.
+        *
+        * - **Information**: Has a {@link OO.ui.FormLayout form} to collect metadata. This can be
+        *   extended.
+        *
+        * - **Insert**: Has details on how to use the file that was uploaded.
+        *
+        * Each step has a form associated with it defined in
+        * {@link mw.Upload.Dialog#renderUploadForm renderUploadForm},
+        * {@link mw.Upload.Dialog#renderInfoForm renderInfoForm}, and
+        * {@link mw.Upload.Dialog#renderInsertForm renderInfoForm}. The
+        * {@link mw.Upload.Dialog#getFile getFile},
+        * {@link mw.Upload.Dialog#getFilename getFilename}, and
+        * {@link mw.Upload.Dialog#getText getText} methods are used to get
+        * the information filled in these forms, required to call
+        * {@link mw.Upload mw.Upload}.
+        *
+        * ## Usage
+        *
+        * To use, setup a {@link OO.ui.WindowManager window manager} like for normal
+        * dialogs:
+        *
+        *     var uploadDialog = new mw.Upload.Dialog();
+        *     var windowManager = new OO.ui.WindowManager();
+        *     $( 'body' ).append( windowManager.$element );
+        *     windowManager.addWindows( [ uploadDialog ] );
+        *     windowManager.openWindow( uploadDialog );
+        *
+        * The dialog's closing promise,
+        * {@link mw.Upload.Dialog#event-fileUploaded fileUploaded},
+        * and {@link mw.Upload.Dialog#event-fileSaved fileSaved} events can
+        * be used to get details of the upload.
+        *
+        * ## Extending
+        *
+        * To extend using {@link mw.Upload mw.Upload}, override
+        * {@link mw.Upload.Dialog#renderInfoForm renderInfoForm} to render
+        * the form required for the specific use-case. Update the
+        * {@link mw.Upload.Dialog#getFilename getFilename}, and
+        * {@link mw.Upload.Dialog#getText getText} methods to return data
+        * from your newly created form. If you added new fields you'll also have
+        * to update the {@link #getTeardownProcess} method.
+        *
+        * If you plan to use a different upload model, apart from what is mentioned
+        * above, you'll also have to override the
+        * {@link mw.Upload.Dialog#getUploadObject getUploadObject} method to
+        * return the new model. The {@link mw.Upload.Dialog#saveFile saveFile}, and
+        * the {@link mw.Upload.Dialog#uploadFile uploadFile} methods need to be
+        * overriden to use the new model and data returned from the forms.
+        *
+        * @class mw.Upload.Dialog
+        * @uses mw.Upload
+        * @extends OO.ui.ProcessDialog
+        */
+       mw.Upload.Dialog = function ( config ) {
+               // Parent constructor
+               mw.Upload.Dialog.parent.call( this, config );
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.Upload.Dialog, OO.ui.ProcessDialog );
+
+       /* Static Properties */
+
+       /**
+        * @inheritdoc
+        * @property title
+        */
+       /*jshint -W024*/
+       mw.Upload.Dialog.static.title = mw.msg( 'upload-dialog-title' );
+
+       /**
+        * @inheritdoc
+        * @property actions
+        */
+       mw.Upload.Dialog.static.actions = [
+               {
+                       flags: 'safe',
+                       action: 'cancel',
+                       label: mw.msg( 'upload-dialog-button-cancel' ),
+                       modes: [ 'upload', 'insert', 'save' ]
+               },
+               {
+                       flags: [ 'primary', 'progressive' ],
+                       label: mw.msg( 'upload-dialog-button-done' ),
+                       action: 'insert',
+                       modes: 'insert'
+               },
+               {
+                       flags: [ 'primary', 'constructive' ],
+                       label: mw.msg( 'upload-dialog-button-save' ),
+                       action: 'save',
+                       modes: 'save'
+               },
+               {
+                       flags: [ 'primary', 'progressive' ],
+                       label: mw.msg( 'upload-dialog-button-upload' ),
+                       action: 'upload',
+                       modes: 'upload'
+               }
+       ];
+       /*jshint +W024*/
+
+       /* Properties */
+
+       /**
+        * @property {OO.ui.FormLayout} uploadForm
+        * The form rendered in the first step to get the file object.
+        * Rendered in {@link mw.Upload.Dialog#renderUploadForm renderUploadForm}.
+        */
+
+       /**
+        * @property {OO.ui.FormLayout} infoForm
+        * The form rendered in the second step to get metadata.
+        * Rendered in {@link mw.Upload.Dialog#renderInfoForm renderInfoForm}
+        */
+
+       /**
+        * @property {OO.ui.FormLayout} insertForm
+        * The form rendered in the third step to show usage
+        * Rendered in {@link mw.Upload.Dialog#renderInsertForm renderInsertForm}
+        */
+
+       /* Events */
+
+       /**
+        * A `fileUploaded` event is emitted from the
+        * {@link mw.Upload.Dialog#uploadFile uploadFile} method.
+        *
+        * @event fileUploaded
+        */
+
+       /**
+        * A `fileSaved` event is emitted from the
+        * {@link mw.Upload.Dialog#saveFile saveFile} method.
+        *
+        * @event fileSaved
+        */
+
+       /* Methods */
+
+       /**
+        * @inheritdoc
+        */
+       mw.Upload.Dialog.prototype.initialize = function () {
+               mw.Upload.Dialog.parent.prototype.initialize.call( this );
+
+               this.renderUploadForm();
+               this.renderInfoForm();
+               this.renderInsertForm();
+
+               this.uploadFormPanel = new OO.ui.PanelLayout( {
+                       scrollable: true,
+                       padded: true,
+                       content: [ this.uploadForm ]
+               } );
+               this.infoFormPanel = new OO.ui.PanelLayout( {
+                       scrollable: true,
+                       padded: true,
+                       content: [ this.infoForm ]
+               } );
+               this.insertFormPanel = new OO.ui.PanelLayout( {
+                       scrollable: true,
+                       padded: true,
+                       content: [ this.insertForm ]
+               } );
+
+               this.panels = new OO.ui.StackLayout();
+               this.panels.addItems( [
+                       this.uploadFormPanel,
+                       this.infoFormPanel,
+                       this.insertFormPanel
+               ] );
+
+               this.$body.append( this.panels.$element );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.Upload.Dialog.prototype.getBodyHeight = function () {
+               return 300;
+       };
+
+       /**
+        * Switch between the panels.
+        *
+        * @param {string} panel Panel name: 'upload', 'info', 'insert'
+        */
+       mw.Upload.Dialog.prototype.switchPanels = function ( panel ) {
+               switch ( panel ) {
+               case 'upload':
+                       this.panels.setItem( this.uploadFormPanel );
+                       this.actions.setMode( 'upload' );
+                       break;
+               case 'info':
+                       this.panels.setItem( this.infoFormPanel );
+                       this.actions.setMode( 'save' );
+                       break;
+               case 'insert':
+                       this.panels.setItem( this.insertFormPanel );
+                       this.actions.setMode( 'insert' );
+                       break;
+               }
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.Upload.Dialog.prototype.getSetupProcess = function ( data ) {
+               return mw.Upload.Dialog.parent.prototype.getSetupProcess.call( this, data )
+                       .next( function () {
+                               this.upload = this.getUploadObject();
+                               this.switchPanels( 'upload' );
+                               this.actions.setAbilities( { upload: false } );
+                       }, this );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.Upload.Dialog.prototype.getActionProcess = function ( action ) {
+               var dialog = this;
+
+               if ( action === 'upload' ) {
+                       return new OO.ui.Process( function () {
+                               dialog.filenameWidget.setValue( dialog.getFile().name );
+                               dialog.switchPanels( 'info' );
+                               dialog.actions.setAbilities( { save: false } );
+                               return dialog.uploadFile();
+                       } );
+               }
+               if ( action === 'save' ) {
+                       return new OO.ui.Process( dialog.saveFile() );
+               }
+               if ( action === 'insert' ) {
+                       return new OO.ui.Process( function () {
+                               dialog.close( dialog.upload );
+                       } );
+               }
+               if ( action === 'cancel' ) {
+                       return new OO.ui.Process( dialog.close() );
+               }
+
+               return mw.Upload.Dialog.parent.prototype.getActionProcess.call( this, action );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.Upload.Dialog.prototype.getTeardownProcess = function ( data ) {
+               return mw.Upload.Dialog.parent.prototype.getTeardownProcess.call( this, data )
+                       .next( function () {
+                               // Clear the values of all fields
+                               this.selectFileWidget.setValue( null );
+                               this.filenameWidget.setValue( null ).setValidityFlag( true );
+                               this.descriptionWidget.setValue( null ).setValidityFlag( true );
+                               this.filenameUsageWidget.setValue( null );
+                       }, this );
+       };
+
+       /* Uploading */
+
+       /**
+        * Get the upload model object required for this dialog. Can be
+        * extended to different models.
+        *
+        * @return {mw.Upload}
+        */
+       mw.Upload.Dialog.prototype.getUploadObject = function () {
+               return new mw.Upload();
+       };
+
+       /**
+        * Uploads the file that was added in the upload form. Uses
+        * {@link mw.Upload.Dialog#getFile getFile} to get the HTML5
+        * file object.
+        *
+        * @protected
+        * @fires fileUploaded
+        * @return {jQuery.Promise}
+        */
+       mw.Upload.Dialog.prototype.uploadFile = function () {
+               var dialog = this,
+                       file = this.getFile();
+               this.upload.setFile( file );
+               this.uploadPromise = this.upload.uploadToStash();
+               this.uploadPromise.then( function () {
+                       dialog.emit( 'fileUploaded' );
+               } );
+
+               return this.uploadPromise;
+       };
+
+       /**
+        * Saves the stash finalizes upload. Uses
+        * {@link mw.Upload.Dialog#getFilename getFilename}, and
+        * {@link mw.Upload.Dialog#getText getText} to get details from
+        * the form.
+        *
+        * @protected
+        * @fires fileSaved
+        * @returns {jQuery.Promise} Rejects the promise with an
+        * {@link OO.ui.Error error}, or resolves if the upload was successful.
+        */
+       mw.Upload.Dialog.prototype.saveFile = function () {
+               var dialog = this,
+                       promise = $.Deferred();
+
+               this.upload.setFilename( this.getFilename() );
+               this.upload.setText( this.getText() );
+
+               this.uploadPromise.always( function () {
+
+                       if ( dialog.upload.getState() === mw.Upload.State.ERROR ) {
+                               promise.reject( new OO.ui.Error( mw.msg( 'upload-dialog-error' )  ) );
+                               return false;
+                       }
+
+                       if ( dialog.upload.getState() === mw.Upload.State.WARNING ) {
+                               promise.reject( new OO.ui.Error( mw.msg( 'upload-dialog-error' )  ) );
+                               return false;
+                       }
+
+                       dialog.upload.finishStashUpload().always( function () {
+                               var name;
+
+                               if ( dialog.upload.getState() === mw.Upload.State.ERROR ) {
+                                       promise.reject( new OO.ui.Error( mw.msg( 'upload-dialog-error' ) ) );
+                                       return false;
+                               }
+
+                               if ( dialog.upload.getState() === mw.Upload.State.WARNING ) {
+                                       promise.reject( new OO.ui.Error( mw.msg( 'upload-dialog-warning' ) ) );
+                                       return false;
+                               }
+
+                               // Normalize page name and localise the 'File:' prefix
+                               name = new mw.Title( 'File:' + dialog.upload.getFilename() ).toString();
+                               dialog.filenameUsageWidget.setValue( '[[' + name + ']]' );
+                               dialog.switchPanels( 'insert' );
+
+                               promise.resolve();
+                               dialog.emit( 'fileSaved' );
+                       } );
+               } );
+
+               return promise.promise();
+       };
+
+       /* Form renderers */
+
+       /**
+        * Renders and returns the upload form and sets the
+        * {@link mw.Upload.Dialog#uploadForm uploadForm} property.
+        * Validates the form and
+        * {@link OO.ui.ActionSet#setAbilities sets abilities}
+        * for the dialog accordingly.
+        *
+        * @protected
+        * @returns {OO.ui.FormLayout}
+        */
+       mw.Upload.Dialog.prototype.renderUploadForm = function () {
+               var fieldset,
+                       dialog = this;
+
+               this.selectFileWidget = new OO.ui.SelectFileWidget();
+               fieldset = new OO.ui.FieldsetLayout( { label: mw.msg( 'upload-dialog-label-select-file' ) } );
+               fieldset.addItems( [ this.selectFileWidget ] );
+               this.uploadForm = new OO.ui.FormLayout( { items: [ fieldset ] } );
+
+               // Validation
+               this.selectFileWidget.on( 'change', function ( value ) {
+                       dialog.actions.setAbilities( { upload: !!value } );
+               } );
+
+               return this.uploadForm;
+       };
+
+       /**
+        * Renders and returns the information form for collecting
+        * metadata and sets the {@link mw.Upload.Dialog#infoForm infoForm}
+        * property.
+        * Validates the form and
+        * {@link OO.ui.ActionSet#setAbilities sets abilities}
+        * for the dialog accordingly.
+        *
+        * @protected
+        * @returns {OO.ui.FormLayout}
+        */
+       mw.Upload.Dialog.prototype.renderInfoForm = function () {
+               var fieldset,
+                       dialog = this;
+
+               this.filenameWidget = new OO.ui.TextInputWidget( {
+                       indicator: 'required',
+                       required: true,
+                       validate: /.+/
+               } );
+               this.descriptionWidget = new OO.ui.TextInputWidget( {
+                       indicator: 'required',
+                       required: true,
+                       validate: /.+/,
+                       multiline: true,
+                       autosize: true
+               } );
+
+               fieldset = new OO.ui.FieldsetLayout( {
+                       label: mw.msg( 'upload-dialog-label-infoform-title' )
+               } );
+               fieldset.addItems( [
+                       new OO.ui.FieldLayout( this.filenameWidget, {
+                               label: mw.msg( 'upload-dialog-label-infoform-name' ),
+                               align: 'top'
+                       } ),
+                       new OO.ui.FieldLayout( this.descriptionWidget, {
+                               label: mw.msg( 'upload-dialog-label-infoform-description' ),
+                               align: 'top'
+                       } )
+               ] );
+               this.infoForm = new OO.ui.FormLayout( { items: [ fieldset ] } );
+
+               // Validation
+               function checkValidity() {
+                       $.when(
+                               dialog.filenameWidget.getValidity(),
+                               dialog.descriptionWidget.getValidity()
+                       ).done( function () {
+                               dialog.actions.setAbilities( { save: true } );
+                       } ).fail( function () {
+                               dialog.actions.setAbilities( { save: false } );
+                       } );
+               }
+               this.filenameWidget.on( 'change', checkValidity );
+               this.descriptionWidget.on( 'change', checkValidity );
+
+               return this.infoForm;
+       };
+
+       /**
+        * Renders and returns the insert form to show file usage and
+        * sets the {@link mw.Upload.Dialog#insertForm insertForm} property.
+        *
+        * @protected
+        * @returns {OO.ui.FormLayout}
+        */
+       mw.Upload.Dialog.prototype.renderInsertForm = function () {
+               var fieldset;
+
+               this.filenameUsageWidget = new OO.ui.TextInputWidget();
+               fieldset = new OO.ui.FieldsetLayout( {
+                       label: mw.msg( 'upload-dialog-label-usage-title' )
+               } );
+               fieldset.addItems( [
+                       new OO.ui.FieldLayout( this.filenameUsageWidget, {
+                               label: mw.msg( 'upload-dialog-label-usage-filename' ),
+                               align: 'top'
+                       } )
+               ] );
+               this.insertForm = new OO.ui.FormLayout( { items: [ fieldset ] } );
+
+               return this.insertForm;
+       };
+
+       /* Getters */
+
+       /**
+        * Gets the file object from the
+        * {@link mw.Upload.Dialog#uploadForm upload form}.
+        *
+        * @protected
+        * @returns {File|null}
+        */
+       mw.Upload.Dialog.prototype.getFile = function () {
+               return this.selectFileWidget.getValue();
+       };
+
+       /**
+        * Gets the file name from the
+        * {@link mw.Upload.Dialog#infoForm information form}.
+        *
+        * @protected
+        * @returns {string}
+        */
+       mw.Upload.Dialog.prototype.getFilename = function () {
+               return this.filenameWidget.getValue();
+       };
+
+       /**
+        * Gets the page text from the
+        * {@link mw.Upload.Dialog#infoForm information form}.
+        *
+        * @protected
+        * @returns {string}
+        */
+       mw.Upload.Dialog.prototype.getText = function () {
+               return this.descriptionWidget.getValue();
+       };
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki/mediawiki.Upload.js b/resources/src/mediawiki/mediawiki.Upload.js
new file mode 100644 (file)
index 0000000..79628de
--- /dev/null
@@ -0,0 +1,325 @@
+( function ( mw, $ ) {
+       var UP;
+
+       /**
+        * @class mw.Upload
+        *
+        * Used to represent an upload in progress on the frontend.
+        * Most of the functionality is implemented in mw.Api.plugin.upload,
+        * but this model class will tie it together as well as let you perform
+        * actions in a logical way.
+        *
+        * A simple example:
+        *
+        *     var file = new OO.ui.SelectFileWidget(),
+        *       button = new OO.ui.ButtonWidget( { label: 'Save' } ),
+        *       upload = new mw.Upload;
+        *
+        *     button.on( 'click', function () {
+        *       upload.setFile( file.getValue() );
+        *       upload.setFilename( file.getValue().name );
+        *       upload.upload();
+        *     } );
+        *
+        *     $( 'body' ).append( file.$element, button.$element );
+        *
+        * You can also choose to {@link #uploadToStash stash the upload} and
+        * {@link #finishStashUpload finalize} it later:
+        *
+        *     var file, // Some file object
+        *       upload = new mw.Upload,
+        *       stashPromise = $.Deferred();
+        *
+        *     upload.setFile( file );
+        *     upload.uploadToStash().then( function () {
+        *       stashPromise.resolve();
+        *     } );
+        *
+        *     stashPromise.then( function () {
+        *       upload.setFilename( 'foo' );
+        *       upload.setText( 'bar' );
+        *       upload.finishStashUpload().then( function () {
+        *         console.log( 'Done!' );
+        *       } );
+        *     } );
+        *
+        * @constructor
+        * @param {Object|mw.Api} [apiconfig] A mw.Api object (or subclass), or configuration
+        *     to pass to the constructor of mw.Api.
+        */
+       function Upload( apiconfig ) {
+               this.api = ( apiconfig instanceof mw.Api ) ? apiconfig : new mw.Api( apiconfig );
+
+               this.watchlist = false;
+               this.text = '';
+               this.comment = '';
+               this.filename = null;
+               this.file = null;
+               this.state = Upload.State.NEW;
+
+               this.imageinfo = undefined;
+       }
+
+       UP = Upload.prototype;
+
+       /**
+        * Set the text of the file page, to be created on file upload.
+        *
+        * @param {string} text
+        */
+       UP.setText = function ( text ) {
+               this.text = text;
+       };
+
+       /**
+        * Set the filename, to be finalized on upload.
+        *
+        * @param {string} filename
+        */
+       UP.setFilename = function ( filename ) {
+               this.filename = filename;
+       };
+
+       /**
+        * Sets the filename based on the filename as it was on the upload.
+        */
+       UP.setFilenameFromFile = function () {
+               var file = this.getFile();
+               if ( file.nodeType && file.nodeType === Node.ELEMENT_NODE ) {
+                       // File input element, use getBasename to cut out the path
+                       this.setFilename( this.getBasename( file.value ) );
+               } else if ( file.name && file.lastModified ) {
+                       // HTML5 FileAPI File object, but use getBasename to be safe
+                       this.setFilename( this.getBasename( file.name ) );
+               }
+       };
+
+       /**
+        * Set the file to be uploaded.
+        *
+        * @param {HTMLInputElement|File} file
+        */
+       UP.setFile = function ( file ) {
+               this.file = file;
+       };
+
+       /**
+        * Set whether the file should be watchlisted after upload.
+        *
+        * @param {boolean} watchlist
+        */
+       UP.setWatchlist = function ( watchlist ) {
+               this.watchlist = watchlist;
+       };
+
+       /**
+        * Set the edit comment for the upload.
+        *
+        * @param {string} comment
+        */
+       UP.setComment = function ( comment ) {
+               this.comment = comment;
+       };
+
+       /**
+        * Get the text of the file page, to be created on file upload.
+        *
+        * @return {string}
+        */
+       UP.getText = function () {
+               return this.text;
+       };
+
+       /**
+        * Get the filename, to be finalized on upload.
+        *
+        * @return {string}
+        */
+       UP.getFilename = function () {
+               return this.filename;
+       };
+
+       /**
+        * Get the file being uploaded.
+        *
+        * @return {HTMLInputElement|File}
+        */
+       UP.getFile = function () {
+               return this.file;
+       };
+
+       /**
+        * Get the boolean for whether the file will be watchlisted after upload.
+        *
+        * @return {boolean}
+        */
+       UP.getWatchlist = function () {
+               return this.watchlist;
+       };
+
+       /**
+        * Get the current value of the edit comment for the upload.
+        *
+        * @return {string}
+        */
+       UP.getComment = function () {
+               return this.comment;
+       };
+
+       /**
+        * Gets the base filename from a path name.
+        *
+        * @param {string} path
+        * @return {string}
+        */
+       UP.getBasename = function ( path ) {
+               if ( path === undefined || path === null ) {
+                       return '';
+               }
+
+               // Find the index of the last path separator in the
+               // path, and add 1. Then, take the entire string after that.
+               return path.slice(
+                       Math.max(
+                               path.lastIndexOf( '/' ),
+                               path.lastIndexOf( '\\' )
+                       ) + 1
+               );
+       };
+
+       /**
+        * Gets the state of the upload.
+        *
+        * @return {mw.Upload.State}
+        */
+       UP.getState = function () {
+               return this.state;
+       };
+
+       /**
+        * Get the imageinfo object for the finished upload.
+        * Only available once the upload is finished! Don't try to get it
+        * beforehand.
+        *
+        * @return {Object|undefined}
+        */
+       UP.getImageInfo = function () {
+               return this.imageinfo;
+       };
+
+       /**
+        * Upload the file directly.
+        *
+        * @return {jQuery.Promise}
+        */
+       UP.upload = function () {
+               var upload = this;
+
+               if ( !this.getFile() ) {
+                       return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
+               }
+
+               if ( !this.getFilename() ) {
+                       return $.Deferred().reject( 'No filename set. Call setFilename to add one.' );
+               }
+
+               this.state = Upload.State.UPLOADING;
+
+               return this.api.upload( this.getFile(), {
+                       watchlist: ( this.getWatchlist() ) ? 1 : undefined,
+                       comment: this.getComment(),
+                       filename: this.getFilename(),
+                       text: this.getText()
+               } ).then( function ( result ) {
+                       upload.state = Upload.State.UPLOADED;
+                       upload.imageinfo = result.upload.imageinfo;
+                       return result;
+               }, function () {
+                       upload.state = Upload.State.ERROR;
+               } );
+       };
+
+       /**
+        * Upload the file to the stash to be completed later.
+        *
+        * @return {jQuery.Promise}
+        */
+       UP.uploadToStash = function () {
+               var upload = this;
+
+               if ( !this.getFile() ) {
+                       return $.Deferred().reject( 'No file to upload. Call setFile to add one.' );
+               }
+
+               if ( !this.getFilename() ) {
+                       this.setFilenameFromFile();
+               }
+
+               this.state = Upload.State.UPLOADING;
+
+               this.stashPromise = this.api.uploadToStash( this.getFile(), {
+                       filename: this.getFilename()
+               } ).then( function ( finishStash ) {
+                       upload.state = Upload.State.STASHED;
+                       return finishStash;
+               }, function () {
+                       upload.state = Upload.State.ERROR;
+               } );
+
+               return this.stashPromise;
+       };
+
+       /**
+        * Finish a stash upload.
+        *
+        * @return {jQuery.Promise}
+        */
+       UP.finishStashUpload = function () {
+               var upload = this;
+
+               if ( !this.stashPromise ) {
+                       return $.Deferred().reject( 'This upload has not been stashed, please upload it to the stash first.' );
+               }
+
+               return this.stashPromise.then( function ( finishStash ) {
+                       upload.state = Upload.State.UPLOADING;
+
+                       return finishStash( {
+                               watchlist: ( upload.getWatchlist() ) ? 1 : undefined,
+                               comment: upload.getComment(),
+                               filename: upload.getFilename(),
+                               text: upload.getText()
+                       } ).then( function () {
+                               upload.state = Upload.State.UPLOADED;
+                       }, function () {
+                               upload.state = Upload.State.ERROR;
+                       } );
+               } );
+       };
+
+       /**
+        * @enum mw.Upload.State
+        * State of uploads represented in simple terms.
+        */
+       Upload.State = {
+               /** Upload not yet started */
+               NEW: 0,
+
+               /** Upload finished, but there was a warning */
+               WARNING: 1,
+
+               /** Upload finished, but there was an error */
+               ERROR: 2,
+
+               /** Upload in progress */
+               UPLOADING: 3,
+
+               /** Upload finished, but not published, call #finishStashUpload */
+               STASHED: 4,
+
+               /** Upload finished and published */
+               UPLOADED: 5
+       };
+
+       mw.Upload = Upload;
+}( mediaWiki, jQuery ) );
index 07d8900..29b224e 100644 (file)
                if ( val === undefined || val === null || val === '' ) {
                        return '';
                }
+               /* jshint latedef:false */
                return pre + ( raw ? val : mw.Uri.encode( val ) ) + post;
+               /* jshint latedef:true */
        }
 
        /**
         * Regular expressions to parse many common URIs.
         *
+        * As they are gnarly, they have been moved to separate files to allow us to format them in the
+        * 'extended' regular expression format (which JavaScript normally doesn't support). The subset of
+        * features handled is minimal, but just the free whitespace gives us a lot.
+        *
         * @private
         * @static
         * @property {Object} parser
         */
        var parser = {
-               strict: /^(?:([^:\/?#]+):)?(?:\/\/(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?)?((?:[^?#\/]*\/)*[^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
-               loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?(?:(?:([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?([^:\/?#]*)(?::(\d*))?((?:\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?[^?#\/]*)(?:\?([^#]*))?(?:#(.*))?/
+               strict: mw.template.get( 'mediawiki.Uri', 'strict.regexp' ).render(),
+               loose: mw.template.get( 'mediawiki.Uri', 'loose.regexp' ).render()
        },
 
        /**
                 * @param {boolean} [options.overrideKeys=false] Whether to let duplicate query parameters
                 *  override each other (`true`) or automagically convert them to an array (`false`).
                 */
+               /* jshint latedef:false */
                function Uri( uri, options ) {
                        var prop,
                                defaultUri = getDefaultUri();
                                                // Only copy direct properties, not inherited ones
                                                if ( uri.hasOwnProperty( prop ) ) {
                                                        // Deep copy object properties
-                                                       if ( $.isArray( uri[prop] ) || $.isPlainObject( uri[prop] ) ) {
-                                                               this[prop] = $.extend( true, {}, uri[prop] );
+                                                       if ( $.isArray( uri[ prop ] ) || $.isPlainObject( uri[ prop ] ) ) {
+                                                               this[ prop ] = $.extend( true, {}, uri[ prop ] );
                                                        } else {
-                                                               this[prop] = uri[prop];
+                                                               this[ prop ] = uri[ prop ];
                                                        }
                                                }
                                        }
                                        this.port = defaultUri.port;
                                }
                        }
-                       if ( this.path && this.path[0] !== '/' ) {
+                       if ( this.path && this.path[ 0 ] !== '/' ) {
                                // A real relative URL, relative to defaultUri.path. We can't really handle that since we cannot
                                // figure out whether the last path component of defaultUri.path is a directory or a file.
                                throw new Error( 'Bad constructor arguments' );
diff --git a/resources/src/mediawiki/mediawiki.Uri.loose.regexp b/resources/src/mediawiki/mediawiki.Uri.loose.regexp
new file mode 100644 (file)
index 0000000..300ab3b
--- /dev/null
@@ -0,0 +1,22 @@
+^
+(?:
+       (?![^:@]+:[^:@/]*@)
+       (?<protocol>[^:/?#.]+):
+)?
+(?://)?
+(?:(?:
+       (?<user>[^:@/?#]*)
+       (?::(?<password>[^:@/?#]*))?
+)?@)?
+(?<host>[^:/?#]*)
+(?::(?<port>\d*))?
+(
+       (?:/
+               (?:[^?#]
+                       (?![^?#/]*\.[^?#/.]+(?:[?#]|$))
+               )*/?
+       )?
+       [^?#/]*
+)
+(?:\?(?<query>[^#]*))?
+(?:\#(?<fragment>.*))?
diff --git a/resources/src/mediawiki/mediawiki.Uri.strict.regexp b/resources/src/mediawiki/mediawiki.Uri.strict.regexp
new file mode 100644 (file)
index 0000000..2ac7d2f
--- /dev/null
@@ -0,0 +1,13 @@
+^
+(?:(?<protocol>[^:/?#]+):)?
+(?://(?:
+       (?:
+               (?<user>[^:@/?#]*)
+               (?::(?<password>[^:@/?#]*))?
+       )?@)?
+       (?<host>[^:/?#]*)
+       (?::(?<port>\d*))?
+)?
+(?<path>(?:[^?#/]*/)*[^?#]*)
+(?:\?(?<query>[^#]*))?
+(?:\#(?<fragment>.*))?
index 8d1faa6..4d0c135 100644 (file)
 
                /**
                 * Return the object with functions to release and manually trigger the confirm alert
+                *
                 * @ignore
                 */
                return {
                        /**
                         * Remove all event listeners and don't show an alert anymore, if the user wants to leave
                         * the page.
+                        *
                         * @ignore
                         */
                        release: function () {
@@ -92,8 +94,9 @@
                         * Trigger the module's function manually: Check, if options.test() returns true and show
                         * an alert to the user if he/she want to leave this page. Returns false, if options.test() returns
                         * false or the user cancelled the alert window (~don't leave the page), true otherwise.
+                        *
                         * @ignore
-                        * @return boolean
+                        * @return {boolean}
                         */
                        trigger: function () {
                                // use confirm to show the message to the user (if options.text() is true)
index bdff99f..f721009 100644 (file)
                                                className: 'mw-debug-pane',
                                                id: 'mw-debug-pane-' + id
                                        } )
-                                       .append( panes[id] )
+                                       .append( panes[ id ] )
                                        .appendTo( $container );
                        }
 
                        };
 
                        for ( i = 0, length = this.data.log.length; i < length; i += 1 ) {
-                               entry = this.data.log[i];
+                               entry = this.data.log[ i ];
                                entry.typeText = entryTypeText( entry.type );
 
                                $( '<tr>' )
                        .appendTo( $table );
 
                        for ( i = 0, length = this.data.queries.length; i < length; i += 1 ) {
-                               query = this.data.queries[i];
+                               query = this.data.queries[ i ];
 
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( i + 1 ) )
                                        .append( $( '<td>' ).text( query.sql ) )
                                        .append( $( '<td class="stats">' ).text( ( query.time * 1000 ).toFixed( 4 ) + 'ms' ) )
-                                       .append( $( '<td>' ).text( query['function'] ) )
+                                       .append( $( '<td>' ).text( query[ 'function' ] ) )
                                .appendTo( $table );
                        }
 
                        $list = $( '<ul>' );
 
                        for ( i = 0, length = this.data.debugLog.length; i < length; i += 1 ) {
-                               line = this.data.debugLog[i];
+                               line = this.data.debugLog[ i ];
                                $( '<li>' )
                                        .html( mw.html.escape( line ).replace( /\n/g, '<br />\n' ) )
                                        .appendTo( $list );
 
                                        $( '<tr>' )
                                                .append( $( '<th>' ).text( key ) )
-                                               .append( $( '<td>' ).text( data[key] ) )
+                                               .append( $( '<td>' ).text( data[ key ] ) )
                                                .appendTo( $table );
                                }
 
                        $table = $( '<table>' );
 
                        for ( i = 0, length = this.data.includes.length; i < length; i += 1 ) {
-                               file = this.data.includes[i];
+                               file = this.data.includes[ i ];
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( file.name ) )
                                        .append( $( '<td class="nr">' ).text( file.size ) )
index 9f4f19d..46b8479 100644 (file)
@@ -1,5 +1,6 @@
 /**
  * Try to catch errors in modules which don't do their own error handling.
+ *
  * @class mw.errorLogger
  * @singleton
  */
@@ -24,6 +25,7 @@
                /**
                 * Install a window.onerror handler that will report via mw.track, while preserving
                 * any previous handler.
+                *
                 * @param {Object} window
                 */
                installGlobalHandler: function ( window ) {
@@ -35,6 +37,7 @@
 
                        /**
                         * Dumb window.onerror handler which forwards the errors via mw.track.
+                        *
                         * @fires global_error
                         */
                        window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
diff --git a/resources/src/mediawiki/mediawiki.experiments.js b/resources/src/mediawiki/mediawiki.experiments.js
new file mode 100644 (file)
index 0000000..75b1f80
--- /dev/null
@@ -0,0 +1,110 @@
+/* jshint bitwise:false */
+( function ( mw, $ ) {
+
+       var CONTROL_BUCKET = 'control',
+               MAX_INT32_UNSIGNED = 4294967295;
+
+       /**
+        * An implementation of Jenkins' one-at-a-time hash.
+        *
+        * @see http://en.wikipedia.org/wiki/Jenkins_hash_function
+        *
+        * @param {String} string String to hash
+        * @return {Number} The hash as a 32-bit unsigned integer
+        * @ignore
+        *
+        * @author Ori Livneh <ori@wikimedia.org>
+        * @see http://jsbin.com/kejewi/4/watch?js,console
+        */
+       function hashString( string ) {
+               var hash = 0,
+                       i = string.length;
+
+               while ( i-- ) {
+                       hash += string.charCodeAt( i );
+                       hash += ( hash << 10 );
+                       hash ^= ( hash >> 6 );
+               }
+               hash += ( hash << 3 );
+               hash ^= ( hash >> 11 );
+               hash += ( hash << 15 );
+
+               return hash >>> 0;
+       }
+
+       /**
+        * Provides an API for bucketing users in experiments.
+        *
+        * @class mw.experiments
+        * @singleton
+        */
+       mw.experiments = {
+
+               /**
+                * Gets the bucket for the experiment given the token.
+                *
+                * The name of the experiment and the token are hashed. The hash is converted
+                * to a number which is then used to get a bucket.
+                *
+                * Consider the following experiment specification:
+                *
+                * ```
+                * {
+                *   name: 'My first experiment',
+                *   enabled: true,
+                *   buckets: {
+                *     control: 0.5
+                *     A: 0.25,
+                *     B: 0.25
+                *   }
+                * }
+                * ```
+                *
+                * The experiment has three buckets: control, A, and B. The user has a 50%
+                * chance of being assigned to the control bucket, and a 25% chance of being
+                * assigned to either the A or B buckets. If the experiment were disabled,
+                * then the user would always be assigned to the control bucket.
+                *
+                * This function is based on the deprecated `mw.user.bucket` function.
+                *
+                * @param {Object} experiment
+                * @param {String} experiment.name The name of the experiment
+                * @param {Boolean} experiment.enabled Whether or not the experiment is
+                *  enabled. If the experiment is disabled, then the user is always assigned
+                *  to the control bucket
+                * @param {Object} experiment.buckets A map of bucket name to probability
+                *  that the user will be assigned to that bucket
+                * @param {String} token A token that uniquely identifies the user for the
+                *  duration of the experiment
+                * @returns {String} The bucket
+                */
+               getBucket: function ( experiment, token ) {
+                       var buckets = experiment.buckets,
+                               key,
+                               range = 0,
+                               hash,
+                               max,
+                               acc = 0;
+
+                       if ( !experiment.enabled || $.isEmptyObject( experiment.buckets ) ) {
+                               return CONTROL_BUCKET;
+                       }
+
+                       for ( key in buckets ) {
+                               range += buckets[ key ];
+                       }
+
+                       hash = hashString( experiment.name + ':' + token );
+                       max = ( hash / MAX_INT32_UNSIGNED ) * range;
+
+                       for ( key in buckets ) {
+                               acc += buckets[ key ];
+
+                               if ( max <= acc ) {
+                                       return key;
+                               }
+                       }
+               }
+       };
+
+}( mediaWiki, jQuery ) );
index 6e12f49..d226ed9 100644 (file)
@@ -86,6 +86,7 @@
         * Respond to dialog submit event. If the information was
         * submitted, either successfully or with an error, open
         * a MessageDialog to thank the user.
+        *
         * @param {string} [status] A status of the end of operation
         *  of the main feedback dialog. Empty if the dialog was
         *  dismissed with no action or the user followed the button
         */
        mw.Feedback.Dialog = function mwFeedbackDialog( config ) {
                // Parent constructor
-               mw.Feedback.Dialog.super.call( this, config );
+               mw.Feedback.Dialog.parent.call( this, config );
 
                this.status = '';
                this.feedbackPageTitle = null;
                        feedbackFieldsetLayout, termsOfUseLabel;
 
                // Parent method
-               mw.Feedback.Dialog.super.prototype.initialize.call( this );
+               mw.Feedback.Dialog.parent.prototype.initialize.call( this );
 
                this.feedbackPanel = new OO.ui.PanelLayout( {
                        scrollable: false,
         * @inheritdoc
         */
        mw.Feedback.Dialog.prototype.getSetupProcess = function ( data ) {
-               return mw.Feedback.Dialog.super.prototype.getSetupProcess.call( this, data )
+               return mw.Feedback.Dialog.parent.prototype.getSetupProcess.call( this, data )
                        .next( function () {
                                var plainMsg, parsedMsg,
                                        settings = data.settings;
         * @inheritdoc
         */
        mw.Feedback.Dialog.prototype.getReadyProcess = function ( data ) {
-               return mw.Feedback.Dialog.super.prototype.getReadyProcess.call( this, data )
+               return mw.Feedback.Dialog.parent.prototype.getReadyProcess.call( this, data )
                        .next( function () {
                                this.feedbackSubjectInput.focus();
                        }, this );
                        }, this );
                }
                // Fallback to parent handler
-               return mw.Feedback.Dialog.super.prototype.getActionProcess.call( this, action );
+               return mw.Feedback.Dialog.parent.prototype.getActionProcess.call( this, action );
        };
 
        /**
         * @inheritdoc
         */
        mw.Feedback.Dialog.prototype.getTeardownProcess = function ( data ) {
-               return mw.Feedback.Dialog.super.prototype.getTeardownProcess.call( this, data )
+               return mw.Feedback.Dialog.parent.prototype.getTeardownProcess.call( this, data )
                        .first( function () {
                                this.emit( 'submit', this.status, this.feedbackPageName, this.feedbackPageUrl );
                                // Cleanup
 
        /**
         * Set the bug report link
+        *
         * @param {string} link Link to the external bug report form
         */
        mw.Feedback.Dialog.prototype.setBugReportLink = function ( link ) {
 
        /**
         * Get the bug report link
+        *
         * @returns {string} Link to the external bug report form
         */
        mw.Feedback.Dialog.prototype.getBugReportLink = function () {
diff --git a/resources/src/mediawiki/mediawiki.feedlink.css b/resources/src/mediawiki/mediawiki.feedlink.css
new file mode 100644 (file)
index 0000000..8221f52
--- /dev/null
@@ -0,0 +1,12 @@
+/* Styles for links to RSS/Atom feeds in sidebar */
+
+a.feedlink {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/feed-icon.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+}
index 489ac42..58ca445 100644 (file)
@@ -1,7 +1,7 @@
 @import "mediawiki.ui/variables"
 
 .mediawiki-filewarning {
-       display: none;
+       visibility: hidden;
 
        .mediawiki-filewarning-header {
                padding: 0;
@@ -17,7 +17,7 @@
        }
 
        .mediawiki-filewarning-anchor:hover & {
-               display: block;
+               visibility: visible;
        }
 }
 
diff --git a/resources/src/mediawiki/mediawiki.htmlform.css b/resources/src/mediawiki/mediawiki.htmlform.css
new file mode 100644 (file)
index 0000000..e41248c
--- /dev/null
@@ -0,0 +1,51 @@
+/* HTMLForm styles */
+
+table.mw-htmlform-nolabel td.mw-label {
+       width: 1px;
+}
+
+.mw-htmlform-invalid-input td.mw-input input {
+       border-color: red;
+}
+
+.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
+       display: inline;
+       margin-right: 1em;
+       white-space: nowrap;
+}
+
+/* HTMLCheckMatrix */
+
+.mw-htmlform-matrix td {
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+tr.mw-htmlform-vertical-label td.mw-label {
+       text-align: left !important;
+}
+
+.mw-icon-question {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/question.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+       background-repeat: no-repeat;
+       background-size: 13px 13px;
+       display: inline-block;
+       height: 13px;
+       width: 13px;
+       margin-left: 4px;
+}
+
+.mw-icon-question:lang(ar),
+.mw-icon-question:lang(fa),
+.mw-icon-question:lang(ur) {
+       -webkit-transform: scaleX(-1);
+       -ms-transform: scaleX(-1);
+       transform: scaleX(-1);
+}
index 7fdaa6e..8c6f3ab 100644 (file)
@@ -53,7 +53,7 @@
        function hideIfParse( $el, spec ) {
                var op, i, l, v, $field, $fields, fields, func, funcs, getVal;
 
-               op = spec[0];
+               op = spec[ 0 ];
                l = spec.length;
                switch ( op ) {
                        case 'AND':
                                funcs = [];
                                fields = [];
                                for ( i = 1; i < l; i++ ) {
-                                       if ( !$.isArray( spec[i] ) ) {
+                                       if ( !$.isArray( spec[ i ] ) ) {
                                                throw new Error( op + ' parameters must be arrays' );
                                        }
-                                       v = hideIfParse( $el, spec[i] );
-                                       fields = fields.concat( v[0].toArray() );
-                                       funcs.push( v[1] );
+                                       v = hideIfParse( $el, spec[ i ] );
+                                       fields = fields.concat( v[ 0 ].toArray() );
+                                       funcs.push( v[ 1 ] );
                                }
                                $fields = $( fields );
 
@@ -78,7 +78,7 @@
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( !funcs[i]() ) {
+                                                               if ( !funcs[ i ]() ) {
                                                                        return false;
                                                                }
                                                        }
@@ -90,7 +90,7 @@
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( funcs[i]() ) {
+                                                               if ( funcs[ i ]() ) {
                                                                        return true;
                                                                }
                                                        }
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( !funcs[i]() ) {
+                                                               if ( !funcs[ i ]() ) {
                                                                        return true;
                                                                }
                                                        }
                                                func = function () {
                                                        var i;
                                                        for ( i = 0; i < l; i++ ) {
-                                                               if ( funcs[i]() ) {
+                                                               if ( funcs[ i ]() ) {
                                                                        return false;
                                                                }
                                                        }
                                if ( l !== 2 ) {
                                        throw new Error( 'NOT takes exactly one parameter' );
                                }
-                               if ( !$.isArray( spec[1] ) ) {
+                               if ( !$.isArray( spec[ 1 ] ) ) {
                                        throw new Error( 'NOT parameters must be arrays' );
                                }
-                               v = hideIfParse( $el, spec[1] );
-                               $fields = v[0];
-                               func = v[1];
+                               v = hideIfParse( $el, spec[ 1 ] );
+                               $fields = v[ 0 ];
+                               func = v[ 1 ];
                                return [ $fields, function () {
                                        return !func();
                                } ];
                                if ( l !== 3 ) {
                                        throw new Error( op + ' takes exactly two parameters' );
                                }
-                               $field = hideIfGetField( $el, spec[1] );
+                               $field = hideIfGetField( $el, spec[ 1 ] );
                                if ( !$field ) {
                                        return [ $(), function () {
                                                return false;
                                        } ];
                                }
-                               v = spec[2];
+                               v = spec[ 2 ];
 
                                if ( $field.first().prop( 'type' ) === 'radio' ||
                                        $field.first().prop( 'type' ) === 'checkbox'
         * jQuery plugin to fade or snap to hiding state.
         *
         * @param {boolean} [instantToggle=false]
-        * @return jQuery
+        * @return {jQuery}
         * @chainable
         */
        $.fn.goOut = function ( instantToggle ) {
         * @param {Function} callback
         * @param {boolean|jQuery.Event} callback.immediate True when the event is called immediately,
         *  an event object when triggered from an event.
-        * @return jQuery
+        * @return {jQuery}
         * @chainable
         */
        mw.log.deprecate( $.fn, 'liveAndTestAtStart', function ( callback ) {
                        }
 
                        v = hideIfParse( $el, spec );
-                       $fields = v[0];
-                       test = v[1];
+                       $fields = v[ 0 ];
+                       test = v[ 1 ];
                        func = function () {
                                if ( test() ) {
                                        $el.hide();
index 92294c9..309eb34 100644 (file)
@@ -1,7 +1,18 @@
 /* OOUIHTMLForm styles */
 
-.mw-htmlform-ooui {
+.mw-htmlform-ooui-wrapper {
        width: 50em;
+       margin: 1em 0;
+}
+
+.oo-ui-fieldLayout.mw-htmlform-ooui-header-empty,
+.oo-ui-fieldLayout.mw-htmlform-ooui-header-empty .oo-ui-fieldLayout-body {
+       display: none;
+}
+
+.oo-ui-fieldLayout.mw-htmlform-ooui-header-errors {
+       /* Override 'display: none' from above */
+       display: block;
 }
 
 .mw-htmlform-ooui .mw-htmlform-submit-buttons {
index 31cd6c4..4859953 100644 (file)
@@ -13,7 +13,7 @@
        function sortByProperty( array, prop, descending ) {
                var order = descending ? -1 : 1;
                return array.sort( function ( a, b ) {
-                       return a[prop] > b[prop] ? order : a[prop] < b[prop] ? -order : 0;
+                       return a[ prop ] > b[ prop ] ? order : a[ prop ] < b[ prop ] ? -order : 0;
                } );
        }
 
@@ -25,7 +25,7 @@
                for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
                // Maintain one decimal for kB and above, but don't
                // add ".0" for bytes.
-               return bytes.toFixed( i > 0 ? 1 : 0 ) + units[i];
+               return bytes.toFixed( i > 0 ? 1 : 0 ) + units[ i ];
        }
 
        /**
                                graph = {};
 
                        $.each( modules, function ( moduleIndex, moduleName ) {
-                               var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
+                               var dependencies = mw.loader.moduleRegistry[ moduleName ].dependencies || [];
 
                                if ( !hasOwn.call( graph, moduleName ) ) {
-                                       graph[moduleName] = { requiredBy: [] };
+                                       graph[ moduleName ] = { requiredBy: [] };
                                }
-                               graph[moduleName].requires = dependencies;
+                               graph[ moduleName ].requires = dependencies;
 
                                $.each( dependencies, function ( depIndex, depName ) {
                                        if ( !hasOwn.call( graph, depName ) ) {
-                                               graph[depName] = { requiredBy: [] };
+                                               graph[ depName ] = { requiredBy: [] };
                                        }
-                                       graph[depName].requiredBy.push( moduleName );
+                                       graph[ depName ].requiredBy.push( moduleName );
                                } );
                        } );
                        return graph;
                 * document.
                 *
                 * @param {string} css CSS source
-                * @return Selector counts
+                * @return {Object} Selector counts
                 * @return {number} return.selectors Total number of selectors
                 * @return {number} return.matched Number of matched selectors
                 */
                        rules = sheet.cssRules || sheet.rules;
                        $.each( rules, function ( index, rule ) {
                                selectors.total++;
-                               if ( document.querySelector( rule.selectorText ) !== null ) {
-                                       selectors.matched++;
-                               }
+                               // document.querySelector() on prefixed pseudo-elements can throw exceptions
+                               // in Firefox and Safari. Ignore these exceptions.
+                               // https://bugs.webkit.org/show_bug.cgi?id=149160
+                               // https://bugzilla.mozilla.org/show_bug.cgi?id=1204880
+                               try {
+                                       if ( document.querySelector( rule.selectorText ) !== null ) {
+                                               selectors.matched++;
+                                       }
+                               } catch ( e ) {}
                        } );
                        document.body.removeChild( style );
                        return selectors;
                                $.map( inspect.reports, function ( v, k ) { return k; } );
 
                        $.each( reports, function ( index, name ) {
-                               inspect.dumpTable( inspect.reports[name]() );
+                               inspect.dumpTable( inspect.reports[ name ]() );
                        } );
                },
 
                                var modules = [];
 
                                $.each( inspect.getLoadedModules(), function ( index, name ) {
-                                       var css, stats, module = mw.loader.moduleRegistry[name];
+                                       var css, stats, module = mw.loader.moduleRegistry[ name ];
 
                                        try {
                                                css = module.style.css.join();
                                                stats.totalSize = humanSize( $.byteLength( raw ) );
                                        } catch ( e ) {}
                                }
-                               return [stats];
+                               return [ stats ];
                        }
                },
 
                        }
 
                        return $.grep( inspect.getLoadedModules(), function ( moduleName ) {
-                               var module = mw.loader.moduleRegistry[moduleName];
+                               var module = mw.loader.moduleRegistry[ moduleName ];
 
                                // Grep module's JavaScript
                                if ( $.isFunction( module.script ) && pattern.test( module.script.toString() ) ) {
index 66d560e..ce92423 100644 (file)
@@ -15,7 +15,7 @@
                slice = Array.prototype.slice,
                parserDefaults = {
                        magic: {
-                               'SITENAME': mw.config.get( 'wgSiteName' )
+                               SITENAME: mw.config.get( 'wgSiteName' )
                        },
                        // Whitelist for allowed HTML elements in wikitext.
                        // Self-closing tags are not currently supported.
                var i, len;
 
                if ( !$.isArray( children ) ) {
-                       children = [children];
+                       children = [ children ];
                }
 
                for ( i = 0, len = children.length; i < len; i++ ) {
-                       if ( typeof children[i] !== 'object' ) {
-                               children[i] = document.createTextNode( children[i] );
+                       if ( typeof children[ i ] !== 'object' ) {
+                               children[ i ] = document.createTextNode( children[ i ] );
                        }
                }
 
         * Try to parse a key and optional replacements, returning a jQuery object that may be a tree of jQuery nodes.
         * If there was an error parsing, return the key and the error message (wrapped in jQuery). This should put the error right into
         * the interface, without causing the page to halt script execution, and it hopefully should be clearer how to fix it.
+        *
         * @private
         * @param {Object} options Parser options
         * @return {Function}
 
                return function ( args ) {
                        var fallback,
-                               key = args[0],
-                               argsArray = $.isArray( args[1] ) ? args[1] : slice.call( args, 1 );
+                               key = args[ 0 ],
+                               argsArray = $.isArray( args[ 1 ] ) ? args[ 1 ] : slice.call( args, 1 );
                        try {
                                return parser.parse( key, argsArray );
                        } catch ( e ) {
                 * Where the magic happens.
                 * Parses a message from the key, and swaps in replacements as necessary, wraps in jQuery
                 * If an error is thrown, returns original key, and logs the error
+                *
                 * @param {string} key Message key.
                 * @param {Array} replacements Variable replacements for $1, $2... $n
                 * @return {jQuery}
                /**
                 * Fetch the message string associated with a key, return parsed structure. Memoized.
                 * Note that we pass '[' + key + ']' back for a missing message here.
+                *
                 * @param {string} key
                 * @return {string|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function ( key ) {
                        var wikiText,
-                               cacheKey = [key, this.settings.onlyCurlyBraceTransform].join( ':' );
+                               cacheKey = [ key, this.settings.onlyCurlyBraceTransform ].join( ':' );
 
                        if ( this.astCache[ cacheKey ] === undefined ) {
                                wikiText = this.settings.messages.get( key );
 
                        /**
                         * Try parsers until one works, if none work return null
+                        *
                         * @private
                         * @param {Function[]} ps
                         * @return {string|null}
                                return function () {
                                        var i, result;
                                        for ( i = 0; i < ps.length; i++ ) {
-                                               result = ps[i]();
+                                               result = ps[ i ]();
                                                if ( result !== null ) {
                                                        return result;
                                                }
                        /**
                         * Try several ps in a row, all must succeed or return null.
                         * This is the only eager one.
+                        *
                         * @private
                         * @param {Function[]} ps
                         * @return {string|null}
                                        originalPos = pos,
                                        result = [];
                                for ( i = 0; i < ps.length; i++ ) {
-                                       res = ps[i]();
+                                       res = ps[ i ]();
                                        if ( res === null ) {
                                                pos = originalPos;
                                                return null;
                        /**
                         * Run the same parser over and over until it fails.
                         * Must succeed a minimum of n times or return null.
+                        *
                         * @private
                         * @param {number} n
                         * @param {Function} p
 
                        /**
                         * Just make parsers out of simpler JS builtin types
+                        *
                         * @private
                         * @param {string} s
                         * @return {Function}
                                        if ( matches === null ) {
                                                return null;
                                        }
-                                       pos += matches[0].length;
-                                       return matches[0];
+                                       pos += matches[ 0 ].length;
+                                       return matches[ 0 ];
                                };
                        }
 
                                        backslash,
                                        anyCharacter
                                ] );
-                               return result === null ? null : result[1];
+                               return result === null ? null : result[ 1 ];
                        }
                        escapedOrLiteralWithoutSpace = choice( [
                                escapedLiteral,
                                if ( result === null ) {
                                        return null;
                                }
-                               return [ 'REPLACE', parseInt( result[1], 10 ) - 1 ];
+                               return [ 'REPLACE', parseInt( result[ 1 ], 10 ) - 1 ];
                        }
                        openExtlink = makeStringParser( '[' );
                        closeExtlink = makeStringParser( ']' );
                                        closeExtlink
                                ] );
                                if ( parsedResult !== null ) {
-                                       result = [ 'EXTLINK', parsedResult[1] ];
+                                       result = [ 'EXTLINK', parsedResult[ 1 ] ];
                                        // TODO (mattflaschen, 2013-03-22): Clean this up if possible.
                                        // It's avoiding CONCAT for single nodes, so they at least doesn't get the htmlEmitter span.
-                                       if ( parsedResult[3].length === 1 ) {
-                                               result.push( parsedResult[3][0] );
+                                       if ( parsedResult[ 3 ].length === 1 ) {
+                                               result.push( parsedResult[ 3 ][ 0 ] );
                                        } else {
-                                               result.push( ['CONCAT'].concat( parsedResult[3] ) );
+                                               result.push( [ 'CONCAT' ].concat( parsedResult[ 3 ] ) );
                                        }
                                }
                                return result;
                                if ( result === null ) {
                                        return null;
                                }
-                               return [ 'EXTLINKPARAM', parseInt( result[2], 10 ) - 1, result[4] ];
+                               return [ 'EXTLINKPARAM', parseInt( result[ 2 ], 10 ) - 1, result[ 4 ] ];
                        }
                        openWikilink = makeStringParser( '[[' );
                        closeWikilink = makeStringParser( ']]' );
                                        templateContents,
                                        closeTemplate
                                ] );
-                               return result === null ? null : result[1];
+                               return result === null ? null : result[ 1 ];
                        }
 
                        wikilinkPage = choice( [
                                        pipe,
                                        expression
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
 
                        wikilinkContents = choice( [
                                        closeWikilink
                                ] );
                                if ( parsedResult !== null ) {
-                                       parsedLinkContents = parsedResult[1];
+                                       parsedLinkContents = parsedResult[ 1 ];
                                        result = [ 'WIKILINK' ].concat( parsedLinkContents );
                                }
                                return result;
                                        htmlDoubleQuoteAttributeValue,
                                        doubleQuote
                                ] );
-                               return parsedResult === null ? null : parsedResult[1];
+                               return parsedResult === null ? null : parsedResult[ 1 ];
                        }
 
                        function singleQuotedHtmlAttributeValue() {
                                        htmlSingleQuoteAttributeValue,
                                        singleQuote
                                ] );
-                               return parsedResult === null ? null : parsedResult[1];
+                               return parsedResult === null ? null : parsedResult[ 1 ];
                        }
 
                        function htmlAttribute() {
                                                singleQuotedHtmlAttributeValue
                                        ] )
                                ] );
-                               return parsedResult === null ? null : [parsedResult[1], parsedResult[3]];
+                               return parsedResult === null ? null : [ parsedResult[ 1 ], parsedResult[ 3 ] ];
                        }
 
                        /**
                                }
 
                                for ( i = 0, len = attributes.length; i < len; i += 2 ) {
-                                       attributeName = attributes[i];
+                                       attributeName = attributes[ i ];
                                        if ( $.inArray( attributeName, settings.allowedHtmlCommonAttributes ) === -1 &&
-                                               $.inArray( attributeName, settings.allowedHtmlAttributesByElement[startTagName] || [] ) === -1 ) {
+                                               $.inArray( attributeName, settings.allowedHtmlAttributesByElement[ startTagName ] || [] ) === -1 ) {
                                                return false;
                                        }
                                }
                        function htmlAttributes() {
                                var parsedResult = nOrMore( 0, htmlAttribute )();
                                // Un-nest attributes array due to structure of jQueryMsg operations (see emit).
-                               return concat.apply( ['HTMLATTRIBUTES'], parsedResult );
+                               return concat.apply( [ 'HTMLATTRIBUTES' ], parsedResult );
                        }
 
                        // Subset of allowed HTML markup.
                                }
 
                                endOpenTagPos = pos;
-                               startTagName = parsedOpenTagResult[1];
+                               startTagName = parsedOpenTagResult[ 1 ];
 
                                parsedHtmlContents = nOrMore( 0, expression )();
 
                                }
 
                                endCloseTagPos = pos;
-                               endTagName = parsedCloseTagResult[1];
-                               wrappedAttributes = parsedOpenTagResult[2];
+                               endTagName = parsedCloseTagResult[ 1 ];
+                               wrappedAttributes = parsedOpenTagResult[ 2 ];
                                attributes = wrappedAttributes.slice( 1 );
                                if ( isAllowedHtml( startTagName, endTagName, attributes ) ) {
                                        result = [ 'HTMLELEMENT', startTagName, wrappedAttributes ]
                                if ( result === null ) {
                                        return null;
                                }
-                               expr = result[1];
+                               expr = result[ 1 ];
                                // use a CONCAT operator if there are multiple nodes, otherwise return the first node, raw.
-                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[0];
+                               return expr.length > 1 ? [ 'CONCAT' ].concat( expr ) : expr[ 0 ];
                        }
 
                        function templateWithReplacement() {
                                        colon,
                                        replacement
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
                        function templateWithOutReplacement() {
                                var result = sequence( [
                                        colon,
                                        paramExpression
                                ] );
-                               return result === null ? null : [ result[0], result[2] ];
+                               return result === null ? null : [ result[ 0 ], result[ 2 ] ];
                        }
                        function templateWithOutFirstParameter() {
                                var result = sequence( [
                                        templateName,
                                        colon
                                ] );
-                               return result === null ? null : [ result[0], '' ];
+                               return result === null ? null : [ result[ 0 ], '' ];
                        }
                        colon = makeStringParser( ':' );
                        templateContents = choice( [
                                                choice( [ templateWithReplacement, templateWithOutReplacement, templateWithOutFirstParameter ] ),
                                                nOrMore( 0, templateParam )
                                        ] );
-                                       return res === null ? null : res[0].concat( res[1] );
+                                       return res === null ? null : res[ 0 ].concat( res[ 1 ] );
                                },
                                function () {
                                        var res = sequence( [
                                        if ( res === null ) {
                                                return null;
                                        }
-                                       return [ res[0] ].concat( res[1] );
+                                       return [ res[ 0 ] ].concat( res[ 1 ] );
                                }
                        ] );
                        openTemplate = makeStringParser( '{{' );
                /**
                 * (We put this method definition here, and not in prototype, to make sure it's not overwritten by any magic.)
                 * Walk entire node structure, applying replacements and template functions when appropriate
+                *
                 * @param {Mixed} node Abstract syntax tree (top node or subnode)
                 * @param {Array} replacements for $1, $2, ... $n
                 * @return {Mixed} single-string node or array of nodes suitable for jQuery appending
                                        subnodes = $.map( node.slice( 1 ), function ( n ) {
                                                return jmsg.emit( n, replacements );
                                        } );
-                                       operation = node[0].toLowerCase();
-                                       if ( typeof jmsg[operation] === 'function' ) {
+                                       operation = node[ 0 ].toLowerCase();
+                                       if ( typeof jmsg[ operation ] === 'function' ) {
                                                ret = jmsg[ operation ]( subnodes, replacements );
                                        } else {
                                                throw new Error( 'Unknown operation "' + operation + '"' );
                 * Parsing has been applied depth-first we can assume that all nodes here are single nodes
                 * Must return a single node to parents -- a jQuery with synthetic span
                 * However, unwrap any other synthetic spans in our children and pass them upwards
+                *
                 * @param {Mixed[]} nodes Some single nodes, some arrays of nodes
                 * @return {jQuery}
                 */
                 * @return {String} replacement
                 */
                replace: function ( nodes, replacements ) {
-                       var index = parseInt( nodes[0], 10 );
+                       var index = parseInt( nodes[ 0 ], 10 );
 
                        if ( index < replacements.length ) {
-                               return replacements[index];
+                               return replacements[ index ];
                        } else {
                                // index not found, fallback to displaying variable
                                return '$' + ( index + 1 );
                 * from the server, since the replacement is done at save time.
                 * It may, though, if the wikitext appears in extension-controlled content.
                 *
-                * @param nodes
+                * @param {String[]} nodes
                 */
                wikilink: function ( nodes ) {
                        var page, anchor, url;
 
-                       page = nodes[0];
+                       page = nodes[ 0 ];
                        url = mw.util.getUrl( page );
 
                        if ( nodes.length === 1 ) {
                                anchor = page;
                        } else {
                                // [[Some Page|anchor text]] or [[Namespace:Some Page|anchor]]
-                               anchor = nodes[1];
+                               anchor = nodes[ 1 ];
                        }
 
                        return $( '<a>' ).attr( {
                htmlattributes: function ( nodes ) {
                        var i, len, mapping = {};
                        for ( i = 0, len = nodes.length; i < len; i += 2 ) {
-                               mapping[nodes[i]] = decodePrimaryHtmlEntities( nodes[i + 1] );
+                               mapping[ nodes[ i ] ] = decodePrimaryHtmlEntities( nodes[ i + 1 ] );
                        }
                        return mapping;
                },
                 */
                extlink: function ( nodes ) {
                        var $el,
-                               arg = nodes[0],
-                               contents = nodes[1];
+                               arg = nodes[ 0 ],
+                               contents = nodes[ 1 ];
                        if ( arg instanceof jQuery ) {
                                $el = arg;
                        } else {
                 */
                extlinkparam: function ( nodes, replacements ) {
                        var replacement,
-                               index = parseInt( nodes[0], 10 );
+                               index = parseInt( nodes[ 0 ], 10 );
                        if ( index < replacements.length ) {
-                               replacement = replacements[index];
+                               replacement = replacements[ index ];
                        } else {
                                replacement = '$' + ( index + 1 );
                        }
-                       return this.extlink( [ replacement, nodes[1] ] );
+                       return this.extlink( [ replacement, nodes[ 1 ] ] );
                },
 
                /**
                 * Transform parsed structure into pluralization
                 * n.b. The first node may be a non-integer (for instance, a string representing an Arabic number).
                 * So convert it back with the current language's convertNumber.
+                *
                 * @param {Array} nodes List of nodes, [ {string|number}, {string}, {string} ... ]
                 * @return {string} selected pluralized form according to current language
                 */
                        var forms, firstChild, firstChildText, explicitPluralFormNumber, formIndex, form, count,
                                explicitPluralForms = {};
 
-                       count = parseFloat( this.language.convertNumber( nodes[0], true ) );
+                       count = parseFloat( this.language.convertNumber( nodes[ 0 ], true ) );
                        forms = nodes.slice( 1 );
                        for ( formIndex = 0; formIndex < forms.length; formIndex++ ) {
-                               form = forms[formIndex];
+                               form = forms[ formIndex ];
 
                                if ( form.jquery && form.hasClass( 'mediaWiki_htmlEmitter' ) ) {
                                        // This is a nested node, may be an explicit plural form like 5=[$2 linktext]
                                        if ( firstChild && firstChild.nodeType === Node.TEXT_NODE ) {
                                                firstChildText = firstChild.textContent;
                                                if ( /^\d+=/.test( firstChildText ) ) {
-                                                       explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[0], 10 );
+                                                       explicitPluralFormNumber = parseInt( firstChildText.split( /=/ )[ 0 ], 10 );
                                                        // Use the digit part as key and rest of first text node and
                                                        // rest of child nodes as value.
                                                        firstChild.textContent = firstChildText.slice( firstChildText.indexOf( '=' ) + 1 );
-                                                       explicitPluralForms[explicitPluralFormNumber] = form;
-                                                       forms[formIndex] = undefined;
+                                                       explicitPluralForms[ explicitPluralFormNumber ] = form;
+                                                       forms[ formIndex ] = undefined;
                                                }
                                        }
                                } else if ( /^\d+=/.test( form ) ) {
                                        // Simple explicit plural forms like 12=a dozen
-                                       explicitPluralFormNumber = parseInt( form.split( /=/ )[0], 10 );
-                                       explicitPluralForms[explicitPluralFormNumber] = form.slice( form.indexOf( '=' ) + 1 );
-                                       forms[formIndex] = undefined;
+                                       explicitPluralFormNumber = parseInt( form.split( /=/ )[ 0 ], 10 );
+                                       explicitPluralForms[ explicitPluralFormNumber ] = form.slice( form.indexOf( '=' ) + 1 );
+                                       forms[ formIndex ] = undefined;
                                }
                        }
 
                 */
                gender: function ( nodes ) {
                        var gender,
-                               maybeUser = nodes[0],
+                               maybeUser = nodes[ 0 ],
                                forms = nodes.slice( 1 );
 
                        if ( maybeUser === '' ) {
                /**
                 * Transform parsed structure into grammar conversion.
                 * Invoked by putting `{{grammar:form|word}}` in a message
+                *
                 * @param {Array} nodes List of nodes [{Grammar case eg: genitive}, {string word}]
                 * @return {string} selected grammatical form according to current language
                 */
                grammar: function ( nodes ) {
-                       var form = nodes[0],
-                               word = nodes[1];
+                       var form = nodes[ 0 ],
+                               word = nodes[ 1 ];
                        return word && form && this.language.convertGrammar( word, form );
                },
 
                /**
                 * Tranform parsed structure into a int: (interface language) message include
                 * Invoked by putting `{{int:othermessage}}` into a message
+                *
                 * @param {Array} nodes List of nodes
                 * @return {string} Other message
                 */
                'int': function ( nodes ) {
-                       return mw.jqueryMsg.getMessageFunction()( nodes[0].toLowerCase() );
+                       var msg = nodes[ 0 ];
+                       return mw.jqueryMsg.getMessageFunction()( msg.charAt( 0 ).toLowerCase() + msg.slice( 1 ) );
                },
 
                /**
                 * Takes an unformatted number (arab, no group separators and . as decimal separator)
                 * and outputs it in the localized digit script and formatted with decimal
                 * separator, according to the current language.
+                *
                 * @param {Array} nodes List of nodes
                 * @return {number|string} Formatted number
                 */
                formatnum: function ( nodes ) {
-                       var isInteger = ( nodes[1] && nodes[1] === 'R' ) ? true : false,
-                               number = nodes[0];
+                       var isInteger = ( nodes[ 1 ] && nodes[ 1 ] === 'R' ) ? true : false,
+                               number = nodes[ 0 ];
 
                        return this.language.convertNumber( number, isInteger );
                }
                }
 
                messageFunction = mw.jqueryMsg.getMessageFunction( {
-                       'messages': this.map,
+                       messages: this.map,
                        // For format 'escaped', escaping part is handled by mediawiki.js
-                       'format': this.format
+                       format: this.format
                } );
                return messageFunction( this.key, this.parameters );
        };
index 2c88e93..5dd2acb 100644 (file)
@@ -7,6 +7,7 @@
  * @alternateClassName mediaWiki
  * @singleton
  */
+/*jshint latedef:false */
 /*global sha1 */
 ( function ( $ ) {
        'use strict';
@@ -68,7 +69,7 @@
 
                                if ( $.isPlainObject( selection ) ) {
                                        for ( s in selection ) {
-                                               setGlobalMapValue( this, s, selection[s] );
+                                               setGlobalMapValue( this, s, selection[ s ] );
                                        }
                                        return true;
                                }
         * @param {Mixed} value
         */
        function setGlobalMapValue( map, key, value ) {
-               map.values[key] = value;
+               map.values[ key ] = value;
                mw.log.deprecate(
-                       window,
-                       key,
-                       value,
-                       // Deprecation notice for mw.config globals (T58550, T72470)
-                       map === mw.config && 'Use mw.config instead.'
+                               window,
+                               key,
+                               value,
+                               // Deprecation notice for mw.config globals (T58550, T72470)
+                               map === mw.config && 'Use mw.config instead.'
                );
        }
 
                                selection = slice.call( selection );
                                results = {};
                                for ( i = 0; i < selection.length; i++ ) {
-                                       results[selection[i]] = this.get( selection[i], fallback );
+                                       results[ selection[ i ] ] = this.get( selection[ i ], fallback );
                                }
                                return results;
                        }
                                if ( !hasOwn.call( this.values, selection ) ) {
                                        return fallback;
                                }
-                               return this.values[selection];
+                               return this.values[ selection ];
                        }
 
                        if ( selection === undefined ) {
 
                        if ( $.isPlainObject( selection ) ) {
                                for ( s in selection ) {
-                                       this.values[s] = selection[s];
+                                       this.values[ s ] = selection[ s ];
                                }
                                return true;
                        }
                        if ( typeof selection === 'string' && arguments.length > 1 ) {
-                               this.values[selection] = value;
+                               this.values[ selection ] = value;
                                return true;
                        }
                        return false;
 
                        if ( $.isArray( selection ) ) {
                                for ( s = 0; s < selection.length; s++ ) {
-                                       if ( typeof selection[s] !== 'string' || !hasOwn.call( this.values, selection[s] ) ) {
+                                       if ( typeof selection[ s ] !== 'string' || !hasOwn.call( this.values, selection[ s ] ) ) {
                                                return false;
                                        }
                                }
                params: function ( parameters ) {
                        var i;
                        for ( i = 0; i < parameters.length; i += 1 ) {
-                               this.parameters.push( parameters[i] );
+                               this.parameters.push( parameters[ i ] );
                        }
                        return this;
                },
                        var parameters = slice.call( arguments, 1 );
                        return formatString.replace( /\$(\d+)/g, function ( str, match ) {
                                var index = parseInt( match, 10 ) - 1;
-                               return parameters[index] !== undefined ? parameters[index] : '$' + match;
+                               return parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;
                        } );
                },
 
                 */
                trackUnsubscribe: function ( callback ) {
                        trackHandlers = $.grep( trackHandlers, function ( fns ) {
-                               if ( fns[1] === callback ) {
-                                       trackCallbacks.remove( fns[0] );
+                               if ( fns[ 1 ] === callback ) {
+                                       trackCallbacks.remove( fns[ 0 ] );
                                        // Ensure the tuple is removed to avoid holding on to closures
                                        return false;
                                }
 
                /**
                 * Dummy placeholder for {@link mw.log}
+                *
                 * @method
                 */
                log: ( function () {
                         * @param {string} [msg] Optional text to include in the deprecation message
                         */
                        log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
-                               obj[key] = val;
+                               obj[ key ] = val;
                        } : function ( obj, key, val, msg ) {
                                msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
                                // Support: IE8
                                        } );
                                } catch ( err ) {
                                        // Fallback to creating a copy of the value to the object.
-                                       obj[key] = val;
+                                       obj[ key ] = val;
                                }
                        };
 
                        /**
                         * Mapping of registered modules.
                         *
-                        * See #implement for exact details on support for script, style and messages.
+                        * See #implement and #execute for exact details on support for script, style and messages.
                         *
                         * Format:
                         *
                         *     {
                         *         'moduleName': {
-                        *             // From startup mdoule
-                        *             'version': '################' (Hash)
+                        *             // From mw.loader.register()
+                        *             'version': '########' (hash)
                         *             'dependencies': ['required.foo', 'bar.also', ...], (or) function () {}
                         *             'group': 'somegroup', (or) null
                         *             'source': 'local', (or) 'anotherwiki'
                         *             'skip': 'return !!window.Example', (or) null
+                        *
+                        *             // Set from execute() or mw.loader.state()
                         *             'state': 'registered', 'loaded', 'loading', 'ready', 'error', or 'missing'
                         *
-                        *             // Added during implementation
+                        *             // Optionally added at run-time by mw.loader.implement()
                         *             'skipped': true
-                        *             'script': ...
-                        *             'style': ...
-                        *             'messages': { 'key': 'value' }
+                        *             'script': closure, array of urls, or string
+                        *             'style': { ... } (see #execute)
+                        *             'messages': { 'key': 'value', ... }
                         *         }
                         *     }
                         *
+                        * State machine:
+                        *
+                        * - `registered`:
+                        *    The module is known to the system but not yet requested.
+                        *    Meta data is registered via mw.loader#register. Calls to that method are
+                        *    generated server-side by the startup module.
+                        * - `loading`:
+                        *    The module is requested through mw.loader (either directly or as dependency of
+                        *    another module). The client will be fetching module contents from the server.
+                        *    The contents are then stashed in the registry via mw.loader#implement.
+                        * - `loaded`:
+                        *    The module has been requested from the server and stashed via mw.loader#implement.
+                        *    If the module has no more dependencies in-fight, the module will be executed
+                        *    right away. Otherwise execution is deferred, controlled via #handlePending.
+                        * - `executing`:
+                        *    The module is being executed.
+                        * - `ready`:
+                        *    The module has been successfully executed.
+                        * - `error`:
+                        *    The module (or one of its dependencies) produced an error during execution.
+                        * - `missing`:
+                        *    The module was registered client-side and requested, but the server denied knowledge
+                        *    of the module's existence.
+                        *
                         * @property
                         * @private
                         */
                                // List of modules to be loaded
                                queue = [],
 
-                               // List of callback functions waiting for modules to be ready to be called
+                               /**
+                                * List of callback jobs waiting for modules to be ready.
+                                *
+                                * Jobs are created by #request() and run by #handlePending().
+                                *
+                                * Typically when a job is created for a module, the job's dependencies contain
+                                * both the module being requested and all its recursive dependencies.
+                                *
+                                * Format:
+                                *
+                                *     {
+                                *         'dependencies': [ module names ],
+                                *         'ready': Function callback
+                                *         'error': Function callback
+                                *     }
+                                *
+                                * @property {Object[]} jobs
+                                * @private
+                                */
                                jobs = [],
 
                                // Selector cache for the marker element. Use getMarker() to get/use the marker!
                                if ( nextnode ) {
                                        $( nextnode ).before( s );
                                } else {
-                                       document.getElementsByTagName( 'head' )[0].appendChild( s );
+                                       document.getElementsByTagName( 'head' )[ 0 ].appendChild( s );
                                }
                                if ( s.styleSheet ) {
                                        // Support: IE6-10
                        function addEmbeddedCSS( cssText, callback ) {
                                var $style, styleEl;
 
+                               function fireCallbacks() {
+                                       var oldCallbacks = cssCallbacks;
+                                       // Reset cssCallbacks variable so it's not polluted by any calls to
+                                       // addEmbeddedCSS() from one of the callbacks (T105973)
+                                       cssCallbacks = $.Callbacks();
+                                       oldCallbacks.fire().empty();
+                               }
+
                                if ( callback ) {
                                        cssCallbacks.add( callback );
                                }
                                                } else {
                                                        styleEl.appendChild( document.createTextNode( cssText ) );
                                                }
-                                               cssCallbacks.fire().empty();
+                                               fireCallbacks();
                                                return;
                                        }
                                }
 
                                $( newStyleTag( cssText, getMarker() ) ).data( 'ResourceLoaderDynamicStyleTag', true );
 
-                               cssCallbacks.fire().empty();
+                               fireCallbacks();
                        }
 
                        /**
                         */
                        function getCombinedVersion( modules ) {
                                var hashes = $.map( modules, function ( module ) {
-                                       return registry[module].version;
+                                       return registry[ module ].version;
                                } );
                                // Trim for consistency with server-side ResourceLoader::makeHash. It also helps
                                // save precious space in the limited query string. Otherwise modules are more
                                return sha1( hashes.join( '' ) ).slice( 0, 12 );
                        }
 
-                       /**
-                        * Resolve dependencies and detect circular references.
-                        *
-                        * @private
-                        * @param {string} module Name of the top-level module whose dependencies shall be
-                        *  resolved and sorted.
-                        * @param {Array} resolved 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 {Object} [unresolved] 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 sortDependencies( module, resolved, unresolved ) {
-                               var n, deps, len, skip;
-
-                               if ( !hasOwn.call( registry, module ) ) {
-                                       throw new Error( 'Unknown dependency: ' + module );
-                               }
-
-                               if ( registry[module].skip !== null ) {
-                                       /*jshint evil:true */
-                                       skip = new Function( registry[module].skip );
-                                       registry[module].skip = null;
-                                       if ( skip() ) {
-                                               registry[module].skipped = true;
-                                               registry[module].dependencies = [];
-                                               registry[module].state = 'ready';
-                                               handlePending( module );
-                                               return;
-                                       }
-                               }
-
-                               // Resolves dynamic loader function and replaces it with its own results
-                               if ( $.isFunction( registry[module].dependencies ) ) {
-                                       registry[module].dependencies = registry[module].dependencies();
-                                       // Ensures the module's dependencies are always in an array
-                                       if ( typeof registry[module].dependencies !== 'object' ) {
-                                               registry[module].dependencies = [registry[module].dependencies];
-                                       }
-                               }
-                               if ( $.inArray( module, resolved ) !== -1 ) {
-                                       // Module already resolved; nothing to do
-                                       return;
-                               }
-                               // Create unresolved 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 ( unresolved[deps[n]] ) {
-                                                       throw new Error(
-                                                               'Circular reference detected: ' + module +
-                                                               ' -> ' + deps[n]
-                                                       );
-                                               }
-
-                                               // Add to unresolved
-                                               unresolved[module] = true;
-                                               sortDependencies( deps[n], resolved, unresolved );
-                                               delete unresolved[module];
-                                       }
-                               }
-                               resolved[resolved.length] = module;
-                       }
-
-                       /**
-                        * Get a list of module names that a module depends on in their proper dependency
-                        * order.
-                        *
-                        * @private
-                        * @param {string[]} module Array of string module names
-                        * @return {Array} List of dependencies, including 'module'.
-                        */
-                       function resolve( modules ) {
-                               var resolved = [];
-                               $.each( modules, function ( idx, module ) {
-                                       sortDependencies( module, resolved );
-                               } );
-                               return resolved;
-                       }
-
                        /**
                         * Determine whether all dependencies are in state 'ready', which means we may
                         * execute the module or job now.
                        function allReady( modules ) {
                                var i;
                                for ( i = 0; i < modules.length; i++ ) {
-                                       if ( mw.loader.getState( modules[i] ) !== 'ready' ) {
+                                       if ( mw.loader.getState( modules[ i ] ) !== 'ready' ) {
                                                return false;
                                        }
                                }
                        function anyFailed( modules ) {
                                var i, state;
                                for ( i = 0; i < modules.length; i++ ) {
-                                       state = mw.loader.getState( modules[i] );
+                                       state = mw.loader.getState( modules[ i ] );
                                        if ( state === 'error' || state === 'missing' ) {
                                                return true;
                                        }
                        function handlePending( module ) {
                                var j, job, hasErrors, m, stateChange;
 
-                               if ( registry[module].state === 'error' || registry[module].state === 'missing' ) {
+                               if ( registry[ module ].state === 'error' || registry[ module ].state === 'missing' ) {
                                        // 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 ( registry[m].state !== 'error' && registry[m].state !== 'missing' ) {
-                                                               if ( anyFailed( registry[m].dependencies ) ) {
-                                                                       registry[m].state = 'error';
+                                                       if ( registry[ m ].state !== 'error' && registry[ m ].state !== 'missing' ) {
+                                                               if ( anyFailed( registry[ m ].dependencies ) ) {
+                                                                       registry[ m ].state = 'error';
                                                                        stateChange = true;
                                                                }
                                                        }
 
                                // 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 = anyFailed( jobs[j].dependencies );
-                                       if ( hasErrors || allReady( jobs[j].dependencies ) ) {
+                                       hasErrors = anyFailed( jobs[ j ].dependencies );
+                                       if ( hasErrors || allReady( jobs[ j ].dependencies ) ) {
                                                // All dependencies satisfied, or some have errors
-                                               job = jobs[j];
+                                               job = jobs[ j ];
                                                jobs.splice( j, 1 );
                                                j -= 1;
                                                try {
                                                        if ( hasErrors ) {
                                                                if ( $.isFunction( job.error ) ) {
-                                                                       job.error( new Error( 'Module ' + module + ' has failed dependencies' ), [module] );
+                                                                       job.error( new Error( 'Module ' + module + ' has failed dependencies' ), [ module ] );
                                                                }
                                                        } else {
                                                                if ( $.isFunction( job.ready ) ) {
                                        }
                                }
 
-                               if ( registry[module].state === 'ready' ) {
+                               if ( registry[ module ].state === 'ready' ) {
                                        // The current module became 'ready'. Set it in the module store, and recursively execute all
                                        // dependent modules that are loaded and now have all dependencies satisfied.
-                                       mw.loader.store.set( module, registry[module] );
+                                       mw.loader.store.set( module, registry[ module ] );
                                        for ( m in registry ) {
-                                               if ( registry[m].state === 'loaded' && allReady( registry[m].dependencies ) ) {
+                                               if ( registry[ m ].state === 'loaded' && allReady( registry[ m ].dependencies ) ) {
                                                        execute( m );
                                                }
                                        }
                        }
 
                        /**
-                        * Adds a script tag to the DOM, either using document.write or low-level DOM manipulation,
-                        * depending on whether document-ready has occurred yet and whether we are in async mode.
+                        * Resolve dependencies and detect circular references.
                         *
                         * @private
-                        * @param {string} src URL to script, will be used as the src attribute in the script tag
-                        * @param {Function} [callback] Callback which will be run when the script is done
-                        * @param {boolean} [async=false] Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
+                        * @param {string} module Name of the top-level module whose dependencies shall be
+                        *  resolved and sorted.
+                        * @param {Array} resolved 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 {Object} [unresolved] 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 addScript( src, callback, async ) {
-                               // Using isReady directly instead of storing it locally from a $().ready callback (bug 31895)
-                               if ( $.isReady || async ) {
-                                       $.ajax( {
-                                               url: src,
-                                               dataType: 'script',
-                                               // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
-                                               // XHR for a same domain request instead of <script>, which changes the request
-                                               // headers (potentially missing a cache hit), and reduces caching in general
-                                               // since browsers cache XHR much less (if at all). And XHR means we retreive
-                                               // text, so we'd need to $.globalEval, which then messes up line numbers.
-                                               crossDomain: true,
-                                               cache: true,
-                                               async: true
-                                       } ).always( callback );
-                               } else {
+                       function sortDependencies( module, resolved, unresolved ) {
+                               var n, deps, len, skip;
+
+                               if ( !hasOwn.call( registry, module ) ) {
+                                       throw new Error( 'Unknown dependency: ' + module );
+                               }
+
+                               if ( registry[ module ].skip !== null ) {
                                        /*jshint evil:true */
-                                       document.write( mw.html.element( 'script', { 'src': src }, '' ) );
-                                       if ( callback ) {
-                                               // Document.write is synchronous, so this is called when it's done.
-                                               // FIXME: That's a lie. doc.write isn't actually synchronous.
-                                               callback();
+                                       skip = new Function( registry[ module ].skip );
+                                       registry[ module ].skip = null;
+                                       if ( skip() ) {
+                                               registry[ module ].skipped = true;
+                                               registry[ module ].dependencies = [];
+                                               registry[ module ].state = 'ready';
+                                               handlePending( module );
+                                               return;
                                        }
                                }
+
+                               // Resolves dynamic loader function and replaces it with its own results
+                               if ( $.isFunction( registry[ module ].dependencies ) ) {
+                                       registry[ module ].dependencies = registry[ module ].dependencies();
+                                       // Ensures the module's dependencies are always in an array
+                                       if ( typeof registry[ module ].dependencies !== 'object' ) {
+                                               registry[ module ].dependencies = [ registry[ module ].dependencies ];
+                                       }
+                               }
+                               if ( $.inArray( module, resolved ) !== -1 ) {
+                                       // Module already resolved; nothing to do
+                                       return;
+                               }
+                               // Create unresolved 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 ( unresolved[ deps[ n ] ] ) {
+                                                       throw new Error(
+                                                               'Circular reference detected: ' + module +
+                                                               ' -> ' + deps[ n ]
+                                                       );
+                                               }
+
+                                               // Add to unresolved
+                                               unresolved[ module ] = true;
+                                               sortDependencies( deps[ n ], resolved, unresolved );
+                                               delete unresolved[ module ];
+                                       }
+                               }
+                               resolved[ resolved.length ] = module;
+                       }
+
+                       /**
+                        * Get a list of module names that a module depends on in their proper dependency
+                        * order.
+                        *
+                        * @private
+                        * @param {string[]} module Array of string module names
+                        * @return {Array} List of dependencies, including 'module'.
+                        */
+                       function resolve( modules ) {
+                               var resolved = [];
+                               $.each( modules, function ( idx, module ) {
+                                       sortDependencies( module, resolved );
+                               } );
+                               return resolved;
+                       }
+
+                       /**
+                        * Load and execute a script with callback.
+                        *
+                        * @private
+                        * @param {string} src URL to script, will be used as the src attribute in the script tag
+                        * @return {jQuery.Promise}
+                        */
+                       function addScript( src ) {
+                               return $.ajax( {
+                                       url: src,
+                                       dataType: 'script',
+                                       // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
+                                       // XHR for a same domain request instead of <script>, which changes the request
+                                       // headers (potentially missing a cache hit), and reduces caching in general
+                                       // since browsers cache XHR much less (if at all). And XHR means we retreive
+                                       // text, so we'd need to $.globalEval, which then messes up line numbers.
+                                       crossDomain: true,
+                                       cache: true
+                               } );
+                       }
+
+                       /**
+                        * Utility function for execute()
+                        *
+                        * @ignore
+                        */
+                       function addLink( media, url ) {
+                               var el = document.createElement( 'link' );
+                               // Support: IE
+                               // Insert in document *before* setting href
+                               getMarker().before( el );
+                               el.rel = 'stylesheet';
+                               if ( media && media !== 'all' ) {
+                                       el.media = media;
+                               }
+                               // If you end up here from an IE exception "SCRIPT: Invalid property value.",
+                               // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
+                               el.href = url;
                        }
 
                        /**
                         * @param {string} module Module name to execute
                         */
                        function execute( module ) {
-                               var key, value, media, i, urls, cssHandle, checkCssHandles,
+                               var key, value, media, i, urls, cssHandle, checkCssHandles, runScript,
                                        cssHandlesRegistered = false;
 
                                if ( !hasOwn.call( registry, module ) ) {
                                        throw new Error( 'Module has not been registered yet: ' + module );
-                               } else if ( registry[module].state === 'registered' ) {
-                                       throw new Error( 'Module has not been requested from the server yet: ' + module );
-                               } else if ( registry[module].state === 'loading' ) {
-                                       throw new Error( 'Module has not completed loading yet: ' + module );
-                               } else if ( registry[module].state === 'ready' ) {
-                                       throw new Error( 'Module has already been executed: ' + module );
                                }
-
-                               /**
-                                * Define loop-function here for efficiency
-                                * and to avoid re-using badly scoped variables.
-                                * @ignore
-                                */
-                               function addLink( media, url ) {
-                                       var el = document.createElement( 'link' );
-                                       // Support: IE
-                                       // Insert in document *before* setting href
-                                       getMarker().before( el );
-                                       el.rel = 'stylesheet';
-                                       if ( media && media !== 'all' ) {
-                                               el.media = media;
-                                       }
-                                       // If you end up here from an IE exception "SCRIPT: Invalid property value.",
-                                       // see #addEmbeddedCSS, bug 31676, and bug 47277 for details.
-                                       el.href = url;
+                               if ( registry[ module ].state !== 'loaded' ) {
+                                       throw new Error( 'Module in state "' + registry[ module ].state + '" may not be executed: ' + module );
                                }
 
-                               function runScript() {
-                                       var script, markModuleReady, nestedAddScript;
+                               registry[ module ].state = 'executing';
+
+                               runScript = function () {
+                                       var script, markModuleReady, nestedAddScript, legacyWait,
+                                               // Expand to include dependencies since we have to exclude both legacy modules
+                                               // and their dependencies from the legacyWait (to prevent a circular dependency).
+                                               legacyModules = resolve( mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
                                        try {
-                                               script = registry[module].script;
+                                               script = registry[ module ].script;
                                                markModuleReady = function () {
-                                                       registry[module].state = 'ready';
+                                                       registry[ module ].state = 'ready';
                                                        handlePending( module );
                                                };
-                                               nestedAddScript = function ( arr, callback, async, i ) {
+                                               nestedAddScript = function ( arr, callback, i ) {
                                                        // Recursively call addScript() in its own callback
                                                        // for each element of arr.
                                                        if ( i >= arr.length ) {
                                                                return;
                                                        }
 
-                                                       addScript( arr[i], function () {
-                                                               nestedAddScript( arr, callback, async, i + 1 );
-                                                       }, async );
+                                                       addScript( arr[ i ] ).always( function () {
+                                                               nestedAddScript( arr, callback, i + 1 );
+                                                       } );
                                                };
 
-                                               if ( $.isArray( script ) ) {
-                                                       nestedAddScript( script, markModuleReady, registry[module].async, 0 );
-                                               } else if ( $.isFunction( script ) ) {
-                                                       registry[module].state = 'ready';
-                                                       // Pass jQuery twice so that the signature of the closure which wraps
-                                                       // the script can bind both '$' and 'jQuery'.
-                                                       script( $, $ );
-                                                       handlePending( module );
-                                               }
+                                               legacyWait = ( $.inArray( module, legacyModules ) !== -1 )
+                                                       ? $.Deferred().resolve()
+                                                       : mw.loader.using( legacyModules );
+
+                                               legacyWait.always( function () {
+                                                       if ( $.isArray( script ) ) {
+                                                               nestedAddScript( script, markModuleReady, 0 );
+                                                       } else if ( $.isFunction( script ) ) {
+                                                               // Pass jQuery twice so that the signature of the closure which wraps
+                                                               // the script can bind both '$' and 'jQuery'.
+                                                               script( $, $ );
+                                                               markModuleReady();
+                                                       } else if ( typeof script === 'string' ) {
+                                                               // Site and user modules are a legacy scripts that run in the global scope.
+                                                               // This is transported as a string instead of a function to avoid needing
+                                                               // to use string manipulation to undo the function wrapper.
+                                                               if ( module === 'user' ) {
+                                                                       // Implicit dependency on the site module. Not real dependency because
+                                                                       // it should run after 'site' regardless of whether it succeeds or fails.
+                                                                       mw.loader.using( 'site' ).always( function () {
+                                                                               $.globalEval( script );
+                                                                               markModuleReady();
+                                                                       } );
+                                                               } else {
+                                                                       $.globalEval( script );
+                                                                       markModuleReady();
+                                                               }
+                                                       } else {
+                                                               // Module without script
+                                                               markModuleReady();
+                                                       }
+                                               } );
                                        } 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
-                                               registry[module].state = 'error';
+                                               registry[ module ].state = 'error';
                                                mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
                                                handlePending( module );
                                        }
-                               }
-
-                               // This used to be inside runScript, but since that is now fired asychronously
-                               // (after CSS is loaded) we need to set it here right away. It is crucial that
-                               // when execute() is called this is set synchronously, otherwise modules will get
-                               // executed multiple times as the registry will state that it isn't loading yet.
-                               registry[module].state = 'loading';
+                               };
 
                                // Add localizations to message system
-                               if ( $.isPlainObject( registry[module].messages ) ) {
-                                       mw.messages.set( registry[module].messages );
+                               if ( registry[ module ].messages ) {
+                                       mw.messages.set( registry[ module ].messages );
                                }
 
                                // Initialise templates
-                               if ( registry[module].templates ) {
-                                       mw.templates.set( module, registry[module].templates );
+                               if ( registry[ module ].templates ) {
+                                       mw.templates.set( module, registry[ module ].templates );
                                }
 
-                               if ( $.isReady || registry[module].async ) {
-                                       // Make sure we don't run the scripts until all (potentially asynchronous)
-                                       // stylesheet insertions have completed.
-                                       ( function () {
-                                               var pending = 0;
-                                               checkCssHandles = function () {
-                                                       // cssHandlesRegistered ensures we don't take off too soon, e.g. when
-                                                       // one of the cssHandles is fired while we're still creating more handles.
-                                                       if ( cssHandlesRegistered && pending === 0 && runScript ) {
-                                                               runScript();
-                                                               runScript = undefined; // Revoke
+                               // Make sure we don't run the scripts until all stylesheet insertions have completed.
+                               ( function () {
+                                       var pending = 0;
+                                       checkCssHandles = function () {
+                                               // cssHandlesRegistered ensures we don't take off too soon, e.g. when
+                                               // one of the cssHandles is fired while we're still creating more handles.
+                                               if ( cssHandlesRegistered && pending === 0 && runScript ) {
+                                                       runScript();
+                                                       runScript = undefined; // Revoke
+                                               }
+                                       };
+                                       cssHandle = function () {
+                                               var check = checkCssHandles;
+                                               pending++;
+                                               return function () {
+                                                       if ( check ) {
+                                                               pending--;
+                                                               check();
+                                                               check = undefined; // Revoke
                                                        }
                                                };
-                                               cssHandle = function () {
-                                                       var check = checkCssHandles;
-                                                       pending++;
-                                                       return function () {
-                                                               if ( check ) {
-                                                                       pending--;
-                                                                       check();
-                                                                       check = undefined; // Revoke
-                                                               }
-                                                       };
-                                               };
-                                       }() );
-                               } else {
-                                       // We are in blocking mode, and so we can't afford to wait for CSS
-                                       cssHandle = function () {};
-                                       // Run immediately
-                                       checkCssHandles = runScript;
-                               }
+                                       };
+                               }() );
 
                                // Process styles (see also mw.loader.implement)
                                // * back-compat: { <media>: css }
                                // * back-compat: { <media>: [url, ..] }
                                // * { "css": [css, ..] }
                                // * { "url": { <media>: [url, ..] } }
-                               if ( $.isPlainObject( registry[module].style ) ) {
-                                       for ( key in registry[module].style ) {
-                                               value = registry[module].style[key];
+                               if ( registry[ module ].style ) {
+                                       for ( key in registry[ module ].style ) {
+                                               value = registry[ module ].style[ key ];
                                                media = undefined;
 
                                                if ( key !== 'url' && key !== 'css' ) {
                                                        for ( i = 0; i < value.length; i += 1 ) {
                                                                if ( key === 'bc-url' ) {
                                                                        // back-compat: { <media>: [url, ..] }
-                                                                       addLink( media, value[i] );
+                                                                       addLink( media, value[ i ] );
                                                                } else if ( key === 'css' ) {
                                                                        // { "css": [css, ..] }
-                                                                       addEmbeddedCSS( value[i], cssHandle() );
+                                                                       addEmbeddedCSS( value[ i ], cssHandle() );
                                                                }
                                                        }
                                                // Not an array, but a regular object
                                                } else if ( typeof value === 'object' ) {
                                                        // { "url": { <media>: [url, ..] } }
                                                        for ( media in value ) {
-                                                               urls = value[media];
+                                                               urls = value[ media ];
                                                                for ( i = 0; i < urls.length; i += 1 ) {
-                                                                       addLink( media, urls[i] );
+                                                                       addLink( media, urls[ i ] );
                                                                }
                                                        }
                                                }
                         * @param {string|string[]} dependencies Module name or array of string module names
                         * @param {Function} [ready] Callback to execute when all dependencies are ready
                         * @param {Function} [error] Callback to execute when any dependency fails
-                        * @param {boolean} [async=false] Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
-                       function request( dependencies, ready, error, async ) {
+                       function request( dependencies, ready, error ) {
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
-                                       dependencies = [dependencies];
+                                       dependencies = [ dependencies ];
                                }
 
                                // Add ready and error callbacks if they were given
                                if ( ready !== undefined || error !== undefined ) {
-                                       jobs[jobs.length] = {
+                                       jobs.push( {
+                                               // Narrow down the list to modules that are worth waiting for
                                                dependencies: $.grep( dependencies, function ( module ) {
                                                        var state = mw.loader.getState( module );
-                                                       return state === 'registered' || state === 'loaded' || state === 'loading';
+                                                       return state === 'registered' || state === 'loaded' || state === 'loading' || state === 'executing';
                                                } ),
                                                ready: ready,
                                                error: error
-                                       };
+                                       } );
                                }
 
                                $.each( dependencies, function ( idx, module ) {
                                        if ( state === 'registered' && $.inArray( module, queue ) === -1 ) {
                                                // Private modules must be embedded in the page. Don't bother queuing
                                                // these as the server will deny them anyway (T101806).
-                                               if ( registry[module].group === 'private' ) {
-                                                       registry[module].state = 'error';
+                                               if ( registry[ module ].group === 'private' ) {
+                                                       registry[ module ].state = 'error';
                                                        handlePending( module );
                                                        return;
                                                }
                                                queue.push( module );
-                                               if ( async ) {
-                                                       registry[module].async = true;
-                                               }
                                        }
                                } );
 
                                }
                                a.sort();
                                for ( key = 0; key < a.length; key += 1 ) {
-                                       sorted[a[key]] = o[a[key]];
+                                       sorted[ a[ key ] ] = o[ a[ key ] ];
                                }
                                return sorted;
                        }
                        /**
                         * Converts a module map of the form { foo: [ 'bar', 'baz' ], bar: [ 'baz, 'quux' ] }
                         * to a query string of the form foo.bar,baz|bar.baz,quux
+                        *
                         * @private
                         */
                        function buildModulesString( moduleMap ) {
 
                                for ( prefix in moduleMap ) {
                                        p = prefix === '' ? '' : prefix + '.';
-                                       arr.push( p + moduleMap[prefix].join( ',' ) );
+                                       arr.push( p + moduleMap[ prefix ].join( ',' ) );
                                }
                                return arr.join( '|' );
                        }
 
                        /**
-                        * Asynchronously append a script tag to the end of the body
-                        * that invokes load.php
+                        * Load modules from load.php
+                        *
                         * @private
                         * @param {Object} moduleMap Module map, see #buildModulesString
                         * @param {Object} currReqBase Object with other parameters (other than 'modules') to use in the request
                         * @param {string} sourceLoadScript URL of load.php
-                        * @param {boolean} async Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
-                       function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
+                       function doRequest( moduleMap, currReqBase, sourceLoadScript ) {
                                var request = $.extend(
                                        { modules: buildModulesString( moduleMap ) },
                                        currReqBase
                                );
                                request = sortQuery( request );
-                               // Support: IE6
-                               // Append &* to satisfy load.php's WebRequest::checkUrlExtension test. This script
-                               // isn't actually used in IE6, but MediaWiki enforces it in general.
-                               addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
+                               addScript( sourceLoadScript + '?' + $.param( request ) );
                        }
 
                        /**
                         */
                        function resolveIndexedDependencies( modules ) {
                                $.each( modules, function ( idx, module ) {
-                                       if ( module[2] ) {
-                                               module[2] = $.map( module[2], function ( dep ) {
-                                                       return typeof dep === 'number' ? modules[dep][0] : dep;
+                                       if ( module[ 2 ] ) {
+                                               module[ 2 ] = $.map( module[ 2 ], function ( dep ) {
+                                                       return typeof dep === 'number' ? modules[ dep ][ 0 ] : dep;
                                                } );
                                        }
                                } );
                                        var     reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup,
                                                source, concatSource, origBatch, group, i, modules, sourceLoadScript,
                                                currReqBase, currReqBaseLength, moduleMap, l,
-                                               lastDotIndex, prefix, suffix, bytesAdded, async;
+                                               lastDotIndex, prefix, suffix, bytesAdded;
 
                                        // Build a list of request parameters common to all requests.
                                        reqBase = {
                                        // Appends a list of modules from the queue to the batch
                                        for ( q = 0; q < queue.length; q += 1 ) {
                                                // Only request modules which are registered
-                                               if ( hasOwn.call( registry, queue[q] ) && registry[queue[q]].state === 'registered' ) {
+                                               if ( hasOwn.call( registry, queue[ q ] ) && registry[ queue[ q ] ].state === 'registered' ) {
                                                        // Prevent duplicate entries
-                                                       if ( $.inArray( queue[q], batch ) === -1 ) {
-                                                               batch[batch.length] = queue[q];
+                                                       if ( $.inArray( queue[ q ], batch ) === -1 ) {
+                                                               batch[ batch.length ] = queue[ q ];
                                                                // Mark registered modules as loading
-                                                               registry[queue[q]].state = 'loading';
+                                                               registry[ queue[ q ] ].state = 'loading';
                                                        }
                                                }
                                        }
                                                        // the error) instead of all of them.
                                                        mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
                                                        origBatch = $.grep( origBatch, function ( module ) {
-                                                               return registry[module].state === 'loading';
+                                                               return registry[ module ].state === 'loading';
                                                        } );
                                                        batch = batch.concat( origBatch );
                                                }
 
                                        // Split batch by source and by group.
                                        for ( b = 0; b < batch.length; b += 1 ) {
-                                               bSource = registry[batch[b]].source;
-                                               bGroup = registry[batch[b]].group;
+                                               bSource = registry[ batch[ b ] ].source;
+                                               bGroup = registry[ batch[ b ] ].group;
                                                if ( !hasOwn.call( splits, bSource ) ) {
-                                                       splits[bSource] = {};
+                                                       splits[ bSource ] = {};
                                                }
-                                               if ( !hasOwn.call( splits[bSource], bGroup ) ) {
-                                                       splits[bSource][bGroup] = [];
+                                               if ( !hasOwn.call( splits[ bSource ], bGroup ) ) {
+                                                       splits[ bSource ][ bGroup ] = [];
                                                }
-                                               bSourceGroup = splits[bSource][bGroup];
-                                               bSourceGroup[bSourceGroup.length] = batch[b];
+                                               bSourceGroup = splits[ bSource ][ bGroup ];
+                                               bSourceGroup[ bSourceGroup.length ] = batch[ b ];
                                        }
 
                                        // Clear the batch - this MUST happen before we append any
 
                                        for ( source in splits ) {
 
-                                               sourceLoadScript = sources[source];
+                                               sourceLoadScript = sources[ source ];
 
-                                               for ( group in splits[source] ) {
+                                               for ( group in splits[ source ] ) {
 
                                                        // Cache access to currently selected list of
                                                        // modules for this group from this source.
-                                                       modules = splits[source][group];
+                                                       modules = splits[ source ][ group ];
 
                                                        currReqBase = $.extend( {
                                                                version: getCombinedVersion( modules )
                                                                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,
                                                        // so build it piece by piece.
                                                        l = currReqBaseLength + 9; // '&modules='.length == 9
 
                                                        for ( i = 0; i < modules.length; i += 1 ) {
                                                                // Determine how many bytes this module would add to the query string
-                                                               lastDotIndex = modules[i].lastIndexOf( '.' );
+                                                               lastDotIndex = modules[ i ].lastIndexOf( '.' );
 
                                                                // If lastDotIndex is -1, substr() returns an empty string
-                                                               prefix = modules[i].substr( 0, lastDotIndex );
-                                                               suffix = modules[i].slice( lastDotIndex + 1 );
+                                                               prefix = modules[ i ].substr( 0, lastDotIndex );
+                                                               suffix = modules[ i ].slice( lastDotIndex + 1 );
 
                                                                bytesAdded = hasOwn.call( moduleMap, prefix )
                                                                        ? suffix.length + 3 // '%2C'.length == 3
-                                                                       : modules[i].length + 3; // '%7C'.length == 3
+                                                                       : modules[ i ].length + 3; // '%7C'.length == 3
 
                                                                // If the request would become too long, create a new one,
                                                                // but don't create empty requests
                                                                if ( maxQueryLength > 0 && !$.isEmptyObject( moduleMap ) && l + bytesAdded > maxQueryLength ) {
                                                                        // This request would become too long, create a new one
                                                                        // and fire off the old one
-                                                                       doRequest( moduleMap, currReqBase, sourceLoadScript, async );
+                                                                       doRequest( moduleMap, currReqBase, sourceLoadScript );
                                                                        moduleMap = {};
-                                                                       async = true;
                                                                        l = currReqBaseLength + 9;
                                                                        mw.track( 'resourceloader.splitRequest', { maxQueryLength: maxQueryLength } );
                                                                }
                                                                if ( !hasOwn.call( moduleMap, prefix ) ) {
-                                                                       moduleMap[prefix] = [];
-                                                               }
-                                                               moduleMap[prefix].push( suffix );
-                                                               if ( !registry[modules[i]].async ) {
-                                                                       // If this module is blocking, make the entire request blocking
-                                                                       // This is slightly suboptimal, but in practice mixing of blocking
-                                                                       // and async modules will only occur in debug mode.
-                                                                       async = false;
+                                                                       moduleMap[ prefix ] = [];
                                                                }
+                                                               moduleMap[ prefix ].push( suffix );
                                                                l += bytesAdded;
                                                        }
                                                        // If there's anything left in moduleMap, request that too
                                                        if ( !$.isEmptyObject( moduleMap ) ) {
-                                                               doRequest( moduleMap, currReqBase, sourceLoadScript, async );
+                                                               doRequest( moduleMap, currReqBase, sourceLoadScript );
                                                        }
                                                }
                                        }
                                        // Allow multiple additions
                                        if ( typeof id === 'object' ) {
                                                for ( source in id ) {
-                                                       mw.loader.addSource( source, id[source] );
+                                                       mw.loader.addSource( source, id[ source ] );
                                                }
                                                return true;
                                        }
                                                loadUrl = loadUrl.loadScript;
                                        }
 
-                                       sources[id] = loadUrl;
+                                       sources[ id ] = loadUrl;
 
                                        return true;
                                },
                                                resolveIndexedDependencies( module );
                                                for ( i = 0, len = module.length; i < len; i++ ) {
                                                        // module is an array of module names
-                                                       if ( typeof module[i] === 'string' ) {
-                                                               mw.loader.register( module[i] );
+                                                       if ( typeof module[ i ] === 'string' ) {
+                                                               mw.loader.register( module[ i ] );
                                                        // module is an array of arrays
-                                                       } else if ( typeof module[i] === 'object' ) {
-                                                               mw.loader.register.apply( mw.loader, module[i] );
+                                                       } else if ( typeof module[ i ] === 'object' ) {
+                                                               mw.loader.register.apply( mw.loader, module[ i ] );
                                                        }
                                                }
                                                return;
                                                throw new Error( 'module already registered: ' + module );
                                        }
                                        // List the module as registered
-                                       registry[module] = {
+                                       registry[ module ] = {
                                                version: version !== undefined ? String( version ) : '',
                                                dependencies: [],
                                                group: typeof group === 'string' ? group : null,
                                        };
                                        if ( typeof dependencies === 'string' ) {
                                                // Allow dependencies to be given as a single module name
-                                               registry[module].dependencies = [ dependencies ];
+                                               registry[ module ].dependencies = [ dependencies ];
                                        } else if ( typeof dependencies === 'object' || $.isFunction( dependencies ) ) {
                                                // Allow dependencies to be given as an array of module names
                                                // or a function which returns an array
-                                               registry[module].dependencies = dependencies;
+                                               registry[ module ].dependencies = dependencies;
                                        }
                                },
 
                                 * The reason css strings are not concatenated anymore is bug 31676. We now check
                                 * whether it's safe to extend the stylesheet.
                                 *
-                                * @param {Object} [msgs] List of key/value pairs to be added to mw#messages.
+                                * @param {Object} [messages] List of key/value pairs to be added to mw#messages.
                                 * @param {Object} [templates] List of key/value pairs to be added to mw#templates.
                                 */
-                               implement: function ( module, script, style, msgs, templates ) {
+                               implement: function ( module, script, style, messages, templates ) {
                                        // Validate input
                                        if ( typeof module !== 'string' ) {
                                                throw new Error( 'module must be of type string, not ' + typeof module );
                                        }
-                                       if ( script && !$.isFunction( script ) && !$.isArray( script ) ) {
-                                               throw new Error( 'script must be of type function or array, not ' + typeof script );
+                                       if ( script && !$.isFunction( script ) && !$.isArray( script ) && typeof script !== 'string' ) {
+                                               throw new Error( 'script must be of type function, array, or script; not ' + typeof script );
                                        }
                                        if ( style && !$.isPlainObject( style ) ) {
                                                throw new Error( 'style must be of type object, not ' + typeof style );
                                        }
-                                       if ( msgs && !$.isPlainObject( msgs ) ) {
-                                               throw new Error( 'msgs must be of type object, not a ' + typeof msgs );
+                                       if ( messages && !$.isPlainObject( messages ) ) {
+                                               throw new Error( 'messages must be of type object, not a ' + typeof messages );
                                        }
                                        if ( templates && !$.isPlainObject( templates ) ) {
                                                throw new Error( 'templates must be of type object, not a ' + typeof templates );
                                                mw.loader.register( module );
                                        }
                                        // Check for duplicate implementation
-                                       if ( hasOwn.call( registry, module ) && registry[module].script !== undefined ) {
+                                       if ( hasOwn.call( registry, module ) && registry[ module ].script !== undefined ) {
                                                throw new Error( 'module already implemented: ' + module );
                                        }
                                        // Attach components
-                                       registry[module].script = script || [];
-                                       registry[module].style = style || {};
-                                       registry[module].messages = msgs || {};
-                                       registry[module].templates = templates || {};
+                                       registry[ module ].script = script || null;
+                                       registry[ module ].style = style || null;
+                                       registry[ module ].messages = messages || null;
+                                       registry[ module ].templates = templates || null;
                                        // 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 ) ) {
+                                       if ( $.inArray( registry[ module ].state, [ 'error', 'missing' ] ) === -1 ) {
+                                               registry[ module ].state = 'loaded';
+                                               if ( allReady( registry[ module ].dependencies ) ) {
                                                        execute( module );
                                                }
                                        }
                                 * @param {string} [type='text/javascript'] MIME type to use if calling with a URL of an
                                 *  external script or style; acceptable values are "text/css" and
                                 *  "text/javascript"; if no type is provided, text/javascript is assumed.
-                                * @param {boolean} [async] Whether to load modules asynchronously.
-                                *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
-                                *  Defaults to `true` if loading a URL, `false` otherwise.
                                 */
-                               load: function ( modules, type, async ) {
+                               load: function ( modules, type ) {
                                        var filtered, l;
 
                                        // Validate input
                                        if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
                                                throw new Error( 'modules must be a string or an array, not a ' + typeof modules );
                                        }
-                                       // Allow calling with an external url or single dependency as a string
+                                       // Allow calling with a url or single dependency as a string
                                        if ( typeof modules === 'string' ) {
-                                               if ( /^(https?:)?\/\//.test( modules ) ) {
-                                                       if ( async === undefined ) {
-                                                               // Assume async for bug 34542
-                                                               async = true;
-                                                       }
+                                               // "https://example.org/x.js", "http://example.org/x.js", "//example.org/x.js", "/x.js"
+                                               if ( /^(https?:)?\/?\//.test( modules ) ) {
                                                        if ( type === 'text/css' ) {
                                                                // Support: IE 7-8
                                                                // Use properties instead of attributes as IE throws security
                                                                return;
                                                        }
                                                        if ( type === 'text/javascript' || type === undefined ) {
-                                                               addScript( modules, null, async );
+                                                               addScript( modules );
                                                                return;
                                                        }
                                                        // Unknown type
                                                return;
                                        }
                                        // Since some modules are not yet ready, queue up a request.
-                                       request( filtered, undefined, undefined, async );
+                                       request( filtered, undefined, undefined );
                                },
 
                                /**
 
                                        if ( typeof module === 'object' ) {
                                                for ( m in module ) {
-                                                       mw.loader.state( m, module[m] );
+                                                       mw.loader.state( m, module[ m ] );
                                                }
                                                return;
                                        }
                                        if ( !hasOwn.call( registry, module ) ) {
                                                mw.loader.register( module );
                                        }
-                                       if ( $.inArray( state, ['ready', 'error', 'missing'] ) !== -1
-                                               && 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;
+                                               registry[ module ].state = state;
                                                handlePending( module );
                                        } else {
-                                               registry[module].state = state;
+                                               registry[ module ].state = state;
                                        }
                                },
 
                                 *  in the registry.
                                 */
                                getVersion: function ( module ) {
-                                       if ( !hasOwn.call( registry, module ) || registry[module].version === undefined ) {
+                                       if ( !hasOwn.call( registry, module ) || registry[ module ].version === undefined ) {
                                                return null;
                                        }
-                                       return registry[module].version;
+                                       return registry[ module ].version;
                                },
 
                                /**
                                 *  in the registry.
                                 */
                                getState: function ( module ) {
-                                       if ( !hasOwn.call( registry, module ) || registry[module].state === undefined ) {
+                                       if ( !hasOwn.call( registry, module ) || registry[ module ].state === undefined ) {
                                                return null;
                                        }
-                                       return registry[module].state;
+                                       return registry[ module ].state;
                                },
 
                                /**
 
                                        /**
                                         * Construct a JSON-serializable object representing the content of the store.
+                                        *
                                         * @return {Object} Module store contents.
                                         */
                                        toJSON: function () {
 
                                        /**
                                         * Get a key on which to vary the module cache.
+                                        *
                                         * @return {string} String of concatenated vary conditions.
                                         */
                                        getVary: function () {
                                         */
                                        getModuleKey: function ( module ) {
                                                return hasOwn.call( registry, module ) ?
-                                                       ( module + '@' + registry[module].version ) : null;
+                                                       ( module + '@' + registry[ module ].version ) : null;
                                        },
 
                                        /**
                                                key = mw.loader.store.getModuleKey( module );
                                                if ( key in mw.loader.store.items ) {
                                                        mw.loader.store.stats.hits++;
-                                                       return mw.loader.store.items[key];
+                                                       return mw.loader.store.items[ key ];
                                                }
                                                mw.loader.store.stats.misses++;
                                                return false;
                                                        // Module failed to load
                                                        descriptor.state !== 'ready' ||
                                                        // Unversioned, private, or site-/user-specific
-                                                       ( !descriptor.version || $.inArray( descriptor.group, [ 'private', 'user', 'site' ] ) !== -1 ) ||
+                                                       ( !descriptor.version || $.inArray( descriptor.group, [ 'private', 'user' ] ) !== -1 ) ||
                                                        // Partial descriptor
                                                        $.inArray( undefined, [ descriptor.script, descriptor.style,
                                                                        descriptor.messages, descriptor.templates ] ) !== -1
                                                        ];
                                                        // Attempted workaround for a possible Opera bug (bug T59567).
                                                        // This regex should never match under sane conditions.
-                                                       if ( /^\s*\(/.test( args[1] ) ) {
-                                                               args[1] = 'function' + args[1];
+                                                       if ( /^\s*\(/.test( args[ 1 ] ) ) {
+                                                               args[ 1 ] = 'function' + args[ 1 ];
                                                                mw.track( 'resourceloader.assert', { source: 'bug-T59567' } );
                                                        }
                                                } catch ( e ) {
                                                if ( src.length > mw.loader.store.MODULE_SIZE_MAX ) {
                                                        return false;
                                                }
-                                               mw.loader.store.items[key] = src;
+                                               mw.loader.store.items[ key ] = src;
                                                mw.loader.store.update();
                                        },
 
                                                        module = key.slice( 0, key.indexOf( '@' ) );
                                                        if ( mw.loader.store.getModuleKey( module ) !== key ) {
                                                                mw.loader.store.stats.expired++;
-                                                               delete mw.loader.store.items[key];
-                                                       } else if ( mw.loader.store.items[key].length > mw.loader.store.MODULE_SIZE_MAX ) {
+                                                               delete mw.loader.store.items[ key ];
+                                                       } else if ( mw.loader.store.items[ key ].length > mw.loader.store.MODULE_SIZE_MAX ) {
                                                                // This value predates the enforcement of a size limit on cached modules.
-                                                               delete mw.loader.store.items[key];
+                                                               delete mw.loader.store.items[ key ];
                                                        }
                                                }
                                        },
                                        var v, attrName, s = '<' + name;
 
                                        for ( attrName in attrs ) {
-                                               v = attrs[attrName];
+                                               v = attrs[ attrName ];
                                                // Convert name=true, to name=name
                                                if ( v === true ) {
                                                        v = attrName;
 
                                /**
                                 * Wrapper object for raw HTML passed to mw.html.element().
+                                *
                                 * @class mw.html.Raw
                                 */
                                Raw: function ( value ) {
 
                                /**
                                 * Wrapper object for CDATA element contents passed to mw.html.element()
+                                *
                                 * @class mw.html.Cdata
                                 */
                                Cdata: function ( value ) {
                         */
                        return function ( name ) {
                                var list = hasOwn.call( lists, name ) ?
-                                       lists[name] :
-                                       lists[name] = $.Callbacks( 'memory' );
+                                       lists[ name ] :
+                                       lists[ name ] = $.Callbacks( 'memory' );
 
                                return {
                                        /**
                                         * Register a hook handler
+                                        *
                                         * @param {Function...} handler Function to bind.
                                         * @chainable
                                         */
 
                                        /**
                                         * Unregister a hook handler
+                                        *
                                         * @param {Function...} handler Function to unbind.
                                         * @chainable
                                         */
 
                                        /**
                                         * Run a hook.
+                                        *
                                         * @param {Mixed...} data
                                         * @chainable
                                         */
                }
        }
 
-       // subscribe to error streams
+       // Subscribe to error streams
        mw.trackSubscribe( 'resourceloader.exception', log );
        mw.trackSubscribe( 'resourceloader.assert', log );
 
+       /**
+        * Fired when all modules associated with the page have finished loading.
+        *
+        * @event resourceloader_loadEnd
+        * @member mw.hook
+        */
+       $( function () {
+               var loading = $.grep( mw.loader.getModuleNames(), function ( module ) {
+                       return mw.loader.getState( module ) === 'loading';
+               } );
+               // In order to use jQuery.when (which stops early if one of the promises got rejected)
+               // cast any loading failures into successes. We only need a callback, not the module.
+               loading = $.map( loading, function ( module ) {
+                       return mw.loader.using( module ).then( null, function () {
+                               return $.Deferred().resolve();
+                       } );
+               } );
+               $.when.apply( $, loading ).then( function () {
+                       mwPerformance.mark( 'mwLoadEnd' );
+                       mw.hook( 'resourceloader.loadEnd' ).fire();
+               } );
+       } );
+
        // Attach to window and globally alias
        window.mw = window.mediaWiki = mw;
 }( jQuery ) );
index 954de22..632ae82 100644 (file)
 .mw-notification-title {
        font-weight: bold;
 }
+
+.mw-notification-type-warn {
+       border-color: #F5BE00; /* yellow */
+       background-color: #FFFFE8;
+}
+
+.mw-notification-type-error {
+       border-color: #EB3941; /* red */
+       background-color: #FFF8F8;
+}
index 132c334..f361ec8 100644 (file)
                        }
                }
 
+               if ( options.type ) {
+                       // Sanitize options.type
+                       options.type = options.type.replace( /[ _\-]+/g, '-' ).replace( /[^\-a-z0-9]+/ig, '' );
+                       $notification.addClass( 'mw-notification-type-' + options.type );
+               }
+
                if ( options.title ) {
                        $notificationTitle = $( '<div class="mw-notification-title"></div>' )
                                .text( options.title )
                $notifications.each( function () {
                        var notif = $( this ).data( 'mw.notification' );
                        if ( notif ) {
-                               notif[fn]();
+                               notif[ fn ]();
                        }
                } );
        }
        /**
         * Initialisation.
         * Must only be called once, and not before the document is ready.
+        *
         * @ignore
         */
        function init() {
                /**
                 * Pause auto-hide timers for all notifications.
                 * Notifications will not auto-hide until resume is called.
+                *
                 * @see mw.Notification#pause
                 */
                pause: function () {
                 * - title:
                 *   An optional title for the notification. Will be displayed above the
                 *   content. Usually in bold.
+                *
+                * - type:
+                *   An optional string for the type of the message used for styling:
+                *   Examples: 'info', 'warn', 'error'.
                 */
                defaults: {
                        autoHide: true,
                        tag: false,
-                       title: undefined
+                       title: undefined,
+                       type: false
                },
 
                /**
index c1e1dab..0f3a086 100644 (file)
@@ -6,8 +6,9 @@
 
        /**
         * @see mw.notification#notify
-        * @param message
-        * @param options
+        * @see mw.notification#defaults
+        * @param {HTMLElement|HTMLElement[]|jQuery|mw.Message|string} message
+        * @param {Object} options See mw.notification#defaults for details.
         * @return {jQuery.Promise}
         */
        mw.notify = function ( message, options ) {
index 5292e80..6c7484e 100644 (file)
@@ -2,6 +2,20 @@
  * Add search suggestions to the search form.
  */
 ( function ( mw, $ ) {
+       mw.searchSuggest = {
+               request: function ( api, query, response, maxRows ) {
+                       return api.get( {
+                               action: 'opensearch',
+                               search: query,
+                               namespace: 0,
+                               limit: maxRows,
+                               suggest: ''
+                       } ).done( function ( data ) {
+                               response( data[ 1 ] );
+                       } );
+               }
+       };
+
        $( function () {
                var api, map, searchboxesSelectors,
                        // Region where the suggestions box will appear directly below
                // Compatibility map
                map = {
                        // SimpleSearch is broken in Opera < 9.6
-                       opera: [['>=', 9.6]],
+                       opera: [ [ '>=', 9.6 ] ],
                        // Older Konquerors are unable to position the suggestions correctly (bug 50805)
-                       konqueror: [['>=', '4.11']],
+                       konqueror: [ [ '>=', '4.11' ] ],
                        docomo: false,
                        blackberry: false,
                        // Support for iOS 6 or higher. It has not been tested on iOS 5 or lower
-                       ipod: [['>=', 6]],
-                       iphone: [['>=', 6]]
+                       ipod: [ [ '>=', 6 ] ],
+                       iphone: [ [ '>=', 6 ] ]
                };
 
                if ( !$.client.test( map ) ) {
@@ -58,6 +72,7 @@
                /**
                 * Callback that's run when the user changes the search input text
                 * 'this' is the search input box (jQuery object)
+                *
                 * @ignore
                 */
                function onBeforeUpdate() {
@@ -74,6 +89,7 @@
                /**
                 * Callback that's run when suggestions have been updated either from the cache or the API
                 * 'this' is the search input box (jQuery object)
+                *
                 * @ignore
                 */
                function onAfterUpdate() {
                $( searchboxesSelectors.join( ', ' ) )
                        .suggestions( {
                                fetch: function ( query, response, maxRows ) {
-                                       var node = this[0];
+                                       var node = this[ 0 ];
 
                                        api = api || new mw.Api();
 
-                                       $.data( node, 'request', api.get( {
-                                               action: 'opensearch',
-                                               search: query,
-                                               namespace: 0,
-                                               limit: maxRows,
-                                               suggest: ''
-                                       } ).done( function ( data ) {
-                                               response( data[ 1 ] );
-                                       } ) );
+                                       $.data( node, 'request', mw.searchSuggest.request( api, query, response, maxRows ) );
                                },
                                cancel: function () {
-                                       var node = this[0],
+                                       var node = this[ 0 ],
                                                request = $.data( node, 'request' );
 
                                        if ( request ) {
diff --git a/resources/src/mediawiki/mediawiki.startUp.js b/resources/src/mediawiki/mediawiki.startUp.js
deleted file mode 100644 (file)
index 028784c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * Auto-register from pre-loaded startup scripts
- */
-( function ( $ ) {
-       'use strict';
-
-       if ( $.isFunction( window.startUp ) ) {
-               window.startUp();
-               window.startUp = undefined;
-       }
-}( jQuery ) );
diff --git a/resources/src/mediawiki/mediawiki.storage.js b/resources/src/mediawiki/mediawiki.storage.js
new file mode 100644 (file)
index 0000000..e10b561
--- /dev/null
@@ -0,0 +1,69 @@
+( function ( mw ) {
+       'use strict';
+       var storage;
+
+       /**
+        * Library for storing device specific information. It should be used for storing simple
+        * strings and is not suitable for storing large chunks of data.
+        * @class mw.storage
+        * @singleton
+        */
+       storage = {
+               isLocalStorageSupported: false,
+               /**
+                * Retrieve value from device storage.
+                *
+                * @param {String} key of item to retrieve
+                * @returns {String|Boolean} false when localStorage not available, otherwise string
+                */
+               get: function ( key ) {
+                       if ( this.isLocalStorageSupported ) {
+                               return localStorage.getItem( key );
+                       } else {
+                               return false;
+                       }
+               },
+
+               /**
+                * Set a value in device storage.
+                *
+                * @param {String} key key name to store under.
+                * @param {String} value to be stored.
+                * @returns {Boolean} whether the save succeeded or not.
+                */
+               set: function ( key, value ) {
+                       try {
+                               localStorage.setItem( key, value );
+                               return true;
+                       } catch ( e ) {
+                               return false;
+                       }
+               },
+
+               /**
+                * Remove a value from device storage.
+                *
+                * @param {String} key of item to remove.
+                * @returns {Boolean} whether the save succeeded or not.
+                */
+               remove: function ( key ) {
+                       if ( this.isLocalStorageSupported ) {
+                               localStorage.removeItem( key );
+                               return true;
+                       } else {
+                               return false;
+                       }
+               }
+       };
+
+       mw.storage = storage;
+       // See if local storage is supported
+       try {
+               localStorage.setItem( 'localStorageTest', 'localStorageTest' );
+               localStorage.removeItem( 'localStorageTest' );
+               storage.isLocalStorageSupported = true;
+       } catch ( e ) {
+               // Already set. No body needed.
+       }
+
+}( mediaWiki ) );
index 61bbb0d..c3db69e 100644 (file)
@@ -17,7 +17,7 @@
                        if ( !compiler.compile ) {
                                throw new Error( 'Compiler must implement compile method.' );
                        }
-                       compilers[name] = compiler;
+                       compilers[ name ] = compiler;
                },
 
                /**
                        var compiledTemplate,
                                compilerName = this.getCompilerName( templateName );
 
-                       if ( !compiledTemplates[moduleName] ) {
-                               compiledTemplates[moduleName] = {};
+                       if ( !compiledTemplates[ moduleName ] ) {
+                               compiledTemplates[ moduleName ] = {};
                        }
 
                        compiledTemplate = this.compile( templateBody, compilerName );
-                       compiledTemplates[moduleName][ templateName ] = compiledTemplate;
+                       compiledTemplates[ moduleName ][ templateName ] = compiledTemplate;
                        return compiledTemplate;
                },
 
diff --git a/resources/src/mediawiki/mediawiki.template.regexp.js b/resources/src/mediawiki/mediawiki.template.regexp.js
new file mode 100644 (file)
index 0000000..3ec0a1f
--- /dev/null
@@ -0,0 +1,15 @@
+mediaWiki.template.registerCompiler( 'regexp', {
+       compile: function ( src ) {
+               return {
+                       render: function () {
+                               return new RegExp(
+                                       src
+                                               // Remove whitespace
+                                               .replace( /\s+/g, '' )
+                                               // Remove named capturing groups
+                                               .replace( /\?<\w+?>/g, '' )
+                               );
+                       }
+               };
+       }
+} );
index ec34ce6..b4baa66 100644 (file)
@@ -16,7 +16,7 @@
         */
        function getUserInfo( info ) {
                var api;
-               if ( !deferreds[info] ) {
+               if ( !deferreds[ info ] ) {
 
                        deferreds.rights = $.Deferred();
                        deferreds.groups = $.Deferred();
 
                }
 
-               return deferreds[info].promise();
+               return deferreds[ info ].promise();
        }
 
        // Map from numbers 0-255 to a hex string (with padding)
        for ( i = 0; i < 256; i++ ) {
                // Padding: Add a full byte (0x100, 256) and strip the extra character
-               byteToHex[i] = ( i + 256 ).toString( 16 ).slice( 1 );
+               byteToHex[ i ] = ( i + 256 ).toString( 16 ).slice( 1 );
        }
 
        // mw.user with the properties options and tokens gets defined in mediawiki.js.
                                        if ( ( i & 3 ) === 0 ) {
                                                r = Math.random() * 0x100000000;
                                        }
-                                       rnds[i] = r >>> ( ( i & 3 ) << 3 ) & 255;
+                                       rnds[ i ] = r >>> ( ( i & 3 ) << 3 ) & 255;
                                }
                        }
                        // Convert from number to hex
                        for ( i = 0; i < 8; i++ ) {
-                               hexRnds[i] = byteToHex[rnds[i]];
+                               hexRnds[ i ] = byteToHex[ rnds[ i ] ];
                        }
 
                        // Concatenation of two random integers with entrophy n and m
                        // Bucket information is stored as 2 integers, together as version:bucket like: "1:2"
                        if ( typeof cookie === 'string' && cookie.length > 2 && cookie.indexOf( ':' ) !== -1 ) {
                                parts = cookie.split( ':' );
-                               if ( parts.length > 1 && Number( parts[0] ) === options.version ) {
-                                       version = Number( parts[0] );
-                                       bucket = String( parts[1] );
+                               if ( parts.length > 1 && Number( parts[ 0 ] ) === options.version ) {
+                                       version = Number( parts[ 0 ] );
+                                       bucket = String( parts[ 1 ] );
                                }
                        }
 
                                // Find range
                                range = 0;
                                for ( k in options.buckets ) {
-                                       range += options.buckets[k];
+                                       range += options.buckets[ k ];
                                }
 
                                // Select random value within range
                                total = 0;
                                for ( k in options.buckets ) {
                                        bucket = k;
-                                       total += options.buckets[k];
+                                       total += options.buckets[ k ];
                                        if ( total >= rand ) {
                                                break;
                                        }
index df10204..02a90fc 100644 (file)
@@ -6,7 +6,7 @@
 
        config = {
                fetch: function ( userInput, response, maxRows ) {
-                       var node = this[0];
+                       var node = this[ 0 ];
 
                        api = api || new mw.Api();
 
@@ -15,7 +15,7 @@
                                list: 'allusers',
                                // Prefix of list=allusers is case sensitive. Normalise first
                                // character to uppercase so that "fo" may yield "Foo".
-                               auprefix: userInput[0].toUpperCase() + userInput.slice( 1 ),
+                               auprefix: userInput[ 0 ].toUpperCase() + userInput.slice( 1 ),
                                aulimit: maxRows
                        } ).done( function ( data ) {
                                var users = $.map( data.query.allusers, function ( userObj ) {
@@ -25,7 +25,7 @@
                        } ) );
                },
                cancel: function () {
-                       var node = this[0],
+                       var node = this[ 0 ],
                                request = $.data( node, 'request' );
 
                        if ( request ) {
index 13bf455..50fd0b4 100644 (file)
@@ -33,7 +33,7 @@
                                ];
 
                                for ( i = 0, l = selectors.length; i < l; i++ ) {
-                                       $node = $( selectors[i] );
+                                       $node = $( selectors[ i ] );
                                        if ( $node.length ) {
                                                return $node.first();
                                        }
@@ -82,6 +82,7 @@
                                .replace( /%29/g, ')' )
                                .replace( /%2C/g, ',' )
                                .replace( /%2F/g, '/' )
+                               .replace( /%7E/g, '~' )
                                .replace( /%3A/g, ':' );
                },
 
                 * For index.php use `mw.config.get( 'wgScript' )`.
                 *
                 * @since 1.18
-                * @param str string Name of script (eg. 'api'), defaults to 'index'
-                * @return string Address to script (eg. '/w/api.php' )
+                * @param {string} str Name of script (e.g. 'api'), defaults to 'index'
+                * @return {string} Address to script (e.g. '/w/api.php' )
                 */
                wikiScript: function ( str ) {
                        str = str || 'index';
                        if ( m ) {
                                // Beware that decodeURIComponent is not required to understand '+'
                                // by spec, as encodeURIComponent does not produce it.
-                               return decodeURIComponent( m[1].replace( /\+/g, '%20' ) );
+                               return decodeURIComponent( m[ 1 ].replace( /\+/g, '%20' ) );
                        }
                        return null;
                },
                                        // Error: Invalid nextnode
                                        nextnode = undefined;
                                }
-                               if ( nextnode && ( nextnode.length !== 1 || nextnode[0].parentNode !== $ul[0] ) ) {
+                               if ( nextnode && ( nextnode.length !== 1 || nextnode[ 0 ].parentNode !== $ul[ 0 ] ) ) {
                                        // Error: nextnode must resolve to a single node
                                        // Error: nextnode must have the associated <ul> as its parent
                                        nextnode = undefined;
                        // to get a localized access key label (bug 67946).
                        $link.updateTooltipAccessKeys();
 
-                       return $item[0];
+                       return $item[ 0 ];
                },
 
                /**
diff --git a/resources/src/moment-local-dmy.js b/resources/src/moment-local-dmy.js
new file mode 100644 (file)
index 0000000..c67b93e
--- /dev/null
@@ -0,0 +1,16 @@
+// Use DMY date format for Moment.js, in accordance with MediaWiki's date formatting routines.
+// This affects English only (and languages without localisations, that fall back to English).
+// http://momentjs.com/docs/#/customization/long-date-formats/
+/*global moment */
+moment.locale( 'en', {
+       longDateFormat: {
+               // Unchanged, but have to be repeated here:
+               LT: 'h:mm A',
+               LTS: 'h:mm:ss A',
+               // Customized:
+               L: 'DD/MM/YYYY',
+               LL: 'D MMMM YYYY',
+               LLL: 'D MMMM YYYY LT',
+               LLLL: 'dddd, D MMMM YYYY LT'
+       }
+} );
index 80cc7d9..1a10f83 100644 (file)
@@ -3,8 +3,16 @@
  * continue loading jQuery and the MediaWiki modules. This code should work on
  * even the most ancient of browsers, so be very careful when editing.
  */
+/*jshint unused: false, evil: true */
+/*globals mw, RLQ: true, $VARS, $CODE, performance */
 
-var mediaWikiLoadStart = ( new Date() ).getTime();
+var mediaWikiLoadStart = ( new Date() ).getTime(),
+
+       mwPerformance = ( window.performance && performance.mark ) ? performance : {
+               mark: function () {}
+       };
+
+mwPerformance.mark( 'mwLoadStart' );
 
 /**
  * Returns false for Grade C supported browsers.
@@ -16,8 +24,6 @@ var mediaWikiLoadStart = ( new Date() ).getTime();
  * - https://www.mediawiki.org/wiki/Compatibility#Browsers
  * - https://jquery.com/browser-support/
  */
-
-/*jshint unused: false */
 function isCompatible( ua ) {
        if ( ua === undefined ) {
                ua = navigator.userAgent;
@@ -26,18 +32,18 @@ function isCompatible( ua ) {
        // Browsers with outdated or limited JavaScript engines get the no-JS experience
        return !(
                // Internet Explorer < 8
-               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 8 ) ||
+               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[ 1 ] ) < 8 ) ||
                // Firefox < 3
-               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 3 ) ||
+               ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[ 1 ] ) < 3 ) ||
                // Opera < 12
                ( ua.indexOf( 'Opera/' ) !== -1 && ( ua.indexOf( 'Version/' ) === -1 ?
                        // "Opera/x.y"
-                       parseFloat( ua.split( 'Opera/' )[1] ) < 10 :
+                       parseFloat( ua.split( 'Opera/' )[ 1 ] ) < 10 :
                        // "Opera/9.80 ... Version/x.y"
-                       parseFloat( ua.split( 'Version/' )[1] ) < 12
+                       parseFloat( ua.split( 'Version/' )[ 1 ] ) < 12
                ) ) ||
                // "Mozilla/0.0 ... Opera x.y"
-               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[1] ) < 10 ) ||
+               ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[ 1 ] ) < 10 ) ||
                // BlackBerry < 6
                ua.match( /BlackBerry[^\/]*\/[1-5]\./ ) ||
                // Open WebOS < 1.5
@@ -59,6 +65,49 @@ function isCompatible( ua ) {
        );
 }
 
-/**
- * The startUp() function will be auto-generated and added below.
- */
+// Conditional script injection
+( function () {
+       if ( !isCompatible() ) {
+               // Undo class swapping in case of an unsupported browser.
+               // See OutputPage::getHeadScripts().
+               document.documentElement.className = document.documentElement.className
+                       .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
+               return;
+       }
+
+       /**
+        * The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
+        */
+       function startUp() {
+               mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
+
+               $CODE.registrations();
+
+               mw.config.set( $VARS.configuration );
+
+               // Must be after mw.config.set because these callbacks may use mw.loader which
+               // needs to have values 'skin', 'debug' etc. from mw.config.
+               window.RLQ = window.RLQ || [];
+               while ( RLQ.length ) {
+                       RLQ.shift()();
+               }
+               window.RLQ = {
+                       push: function ( fn ) {
+                               fn();
+                       }
+               };
+       }
+
+       var script = document.createElement( 'script' );
+       script.src = $VARS.baseModulesUri;
+       script.onload = script.onreadystatechange = function () {
+               if ( !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+                       // Clean up
+                       script.onload = script.onreadystatechange = null;
+                       script = null;
+                       // Callback
+                       startUp();
+               }
+       };
+       document.getElementsByTagName( 'head' )[ 0 ].appendChild( script );
+}() );
index 8f8381e..b2232e6 100644 (file)
@@ -14,7 +14,7 @@
 #   export MEDIAWIKI_USER=Selenium_user2
 #   bundle exec cucumber
 #
-mw-vagrant-host:
+mw-vagrant-host: &default
   mediawiki_url: http://127.0.0.1:8080/wiki/
   mediawiki_user: Selenium_user
   mediawiki_password: vagrant
@@ -33,3 +33,5 @@ test2:
   mediawiki_url: http://test2.wikipedia.org/wiki/
   mediawiki_user: Selenium_user
   # mediawiki_password: SET THIS IN THE ENVIRONMENT!
+
+default: *default
index 3d312f7..98e0f2c 100644 (file)
@@ -22,5 +22,5 @@ When(/^I submit the form$/) do
 end
 
 Then(/^an error message is displayed$/) do
-  expect(on(CreateAccountPage).error_message_element.class_name).to eq "errorbox"
+  expect(on(CreateAccountPage).error_message_element.class_name).to eq 'errorbox'
 end
index cc0df7a..f429c30 100644 (file)
@@ -889,9 +889,9 @@ class ParserTest {
                        'wgDisableTitleConversion' => false,
                        // Tidy options.
                        'wgUseTidy' => isset( $opts['tidy'] ),
-                       'wgAlwaysUseTidy' => false,
+                       'wgTidyConfig' => null,
                        'wgDebugTidy' => false,
-                       'wgTidyConf' => $IP . '/includes/tidy.conf',
+                       'wgTidyConf' => $IP . '/includes/tidy/tidy.conf',
                        'wgTidyOpts' => '',
                        'wgTidyInternal' => $this->tidySupport->isInternal(),
                );
@@ -936,6 +936,7 @@ class ParserTest {
                $wgHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
 
                MagicWord::clearCache();
+               MWTidy::destroySingleton();
 
                return $context;
        }
@@ -1218,6 +1219,7 @@ class ParserTest {
                FileBackendGroup::destroySingleton();
                LockManagerGroup::destroySingletons();
                LinkCache::singleton()->clear();
+               MWTidy::destroySingleton();
 
                foreach ( $this->savedGlobals as $var => $val ) {
                        $GLOBALS[$var] = $val;
index 18d9aa8..c8c63f3 100644 (file)
@@ -118,6 +118,13 @@ Template:echo_with_div
 <div>{{{1}}}</div>
 !! endarticle
 
+!! article
+Template:blank_param
+!! text
+{{{1}}}
+{{{}}}
+!! endarticle
+
 !! article
 Template:table_attribs
 !! text
@@ -153,6 +160,22 @@ Template:table_attribs_5
 |</noinclude>style="color:red;"||Bar
 !! endarticle
 
+!! article
+Template:table_attribs_6
+!! text
+style="background: <nowiki>
+
+
+red;</nowiki>" |
+!! endarticle
+
+!! article
+Template:table_attribs_7
+!! text
+<noinclude>
+|</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo<ref>foo</ref>
+!! endarticle
+
 !! article
 Template:table_header_cells
 !! text
@@ -165,6 +188,13 @@ Template:table_cells
 {{table_attribs}}||style='color:red;'|''Bar''||style='color:brown;'|''Foo'' and Baz
 !! endarticle
 
+!! article
+Template:PartialTable
+!! text
+{|
+|-
+!! endarticle
+
 !! article
 Template:image_attribs
 !! text
@@ -808,15 +838,12 @@ parsoid=wt2html
 !!end
 
 # same html as previous, but wikitext adjusted to match parsoid html2wt
-# skipping wt2html and html2html because it wants to put <i> before <b>
 !! test
 Italics and bold: 5-quote opening sequence: (5,2+3)
-!! options
-parsoid=wt2wt,html2wt
 !! wikitext
 '''''foo'''''
-!! html
-<p><b><i>foo</i></b>
+!! html/*
+<p><i><b>foo</b></i>
 </p>
 !! end
 
@@ -1300,7 +1327,7 @@ Non-word characters don't terminate tag names + tidy
 Non-word characters are valid in extension tags (T19663)
 !! wikitext
 <tåg>tåg</tåg>
-!! html
+!! html/php
 <pre>
 'tåg'
 array (
@@ -1311,11 +1338,15 @@ array (
 
 !! test
 Isolated close tags should be treated as literal text (bug 52760)
+!! options
+parsoid=wt2html
 !! wikitext
 </b>
 
 <s.foo>s</s>
-!! html+tidy
+!! html/php+tidy
+<p>&lt;s.foo&gt;s</p>
+!! html/parsoid
 <p>&lt;s.foo&gt;s</p>
 !! end
 
@@ -1349,9 +1380,11 @@ Bare pipe character from a template (bug 52363)
 <nowiki> unordered list
 !! wikitext
 <nowiki>* This is not an unordered list item.</nowiki>
-!! html
+!! html/php
 <p>* This is not an unordered list item.
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">* This is not an unordered list item.</span></p>
 !! end
 
 !! test
@@ -1364,7 +1397,7 @@ sed abit.
 
 :and a colon
 </nowiki>
-!! html
+!! html/php
 <p>Lorem ipsum dolor
 
 sed abit.
@@ -1373,6 +1406,14 @@ sed abit.
 :and a colon
 
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">Lorem ipsum dolor
+
+sed abit.
+  sed nullum.
+
+:and a colon
+</span></p>
 !! end
 
 !! test
@@ -1386,7 +1427,7 @@ nowiki 3
 
 *There is not nowiki.
 *There is <nowiki>nowiki</nowiki>.
-!! html
+!! html/php
 <dl><dd>There is not nowiki.</dd>
 <dd>There is nowiki.</dd></dl>
 <ol><li>There is not nowiki.</li>
@@ -1394,6 +1435,15 @@ nowiki 3
 <ul><li>There is not nowiki.</li>
 <li>There is nowiki.</li></ul>
 
+!! html/parsoid
+<dl><dd data-parsoid='{}'>There is not nowiki.</dd>
+<dd data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</dd></dl>
+
+<ol><li data-parsoid='{}'>There is not nowiki.</li>
+<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ol>
+
+<ul><li data-parsoid='{}'>There is not nowiki.</li>
+<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ul>
 !! end
 
 !! test
@@ -1407,11 +1457,11 @@ Entities inside <nowiki>
 
 !! test
 Entities inside template parameters
-!! options
-parsoid
 !! wikitext
 {{echo|&ndash;}}
-!! html
+!! html/php+tidy
+<p>–</p>
+!! html/parsoid
 <p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span></p>
 !! end
 
@@ -1419,17 +1469,27 @@ parsoid
 Properly escape nowiki when combined with other wiki markup
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>* &lt;/nowiki&gt; tag</p>
 !! wikitext
-<nowiki>* &lt;/nowiki&gt;</nowiki> tag
+<nowiki>*</nowiki> <nowiki>&lt;/nowiki&gt;</nowiki> tag
+!! end
+
+!! test
+T93824: Put escaped HTML tags inside nowiki
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>&lt;h2&gt;foo&lt;/h2&gt;</p>
+!! wikitext
+<nowiki><h2>foo</h2></nowiki>
 !! end
 
 !! test
 T71950: 1. Put nowiki as close to cause as possible, even with non-quote escapable chars
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>This text: L'<a rel="mw:WikiLink" href="./Foo">Foo</a>
 This text: L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
 This text: L'''<a rel="mw:WikiLink" href="./Foo">Foo</a>''</p>
@@ -1444,7 +1504,7 @@ This text: L<nowiki>'''</nowiki>[[Foo]]<nowiki>''</nowiki>
 T71950: 2. Put nowiki as close to cause as possible, after ' :'
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>This text : L''<a rel="mw:WikiLink" href="./Foo">Foo</a>
 </p>
 !! wikitext
@@ -1483,6 +1543,30 @@ parsoid=html2wt
 {{echo|a <nowiki>}</nowiki>}}
 !! end
 
+!! test
+Cases where "!!" needs nowiki protection
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tr><th>this needs protection !! here</th></tr>
+</table>
+
+<table>
+<tr><th>this does not need
+protection !! here</th></tr>
+</table>
+!! wikitext
+{|
+!<nowiki>this needs protection !! here</nowiki>
+|}
+
+{|
+!this does not need
+protection !! here
+|}
+!! end
+
 ###
 ### Comments
 ###
@@ -1587,8 +1671,10 @@ Comment whitespace
 Comment semantics and delimiters
 !! wikitext
 <!-- --><!----><!-----><!------>
-!! html
+!! html/php
 
+!! html/parsoid
+<!-- --><!----><!--&#x2D;--><!--&#x2D;&#x2D;-->
 !! end
 
 !! test
@@ -1596,8 +1682,11 @@ Comment semantics and delimiters, redux
 !! wikitext
 <!-- In SGML every "foo" here would actually show up in the text -- foo -- bar
 -- foo -- funky huh? ... -->
-!! html
+!! html/php
 
+!! html/parsoid
+<!-- In SGML every "foo" here would actually show up in the text &#x2D;&#x2D; foo &#x2D;&#x2D; bar
+&#x2D;&#x2D; foo &#x2D;&#x2D; funky huh? ... -->
 !! end
 
 !! test
@@ -1607,39 +1696,68 @@ Comment semantics and delimiters: directors cut
 everything starting with < followed by !-- until the first -- and > we see,
 that wouldn't be valid XML however, since in XML -- has to terminate a comment
 -->-->
-!! html
+!! html/php
 <p>--&gt;
 </p>
+!! html/parsoid
+<!-- ... However we like to keep things simple and somewhat XML&#x2D;ish so we eat
+everything starting with < followed by !&#x2D;&#x2D; until the first &#x2D;&#x2D; and &#x3E; we see,
+that wouldn't be valid XML however, since in XML &#x2D;&#x2D; has to terminate a comment
+--><p>--></p>
 !! end
 
 !! test
 Comment semantics: nesting
 !! wikitext
 <!--<!-- no, we're not going to do anything fancy here -->-->
-!! html
+!! html/php
 <p>--&gt;
 </p>
+!! html/parsoid
+<!--<!&#x2D;&#x2D; no, we're not going to do anything fancy here --><p>--></p>
 !! end
 
+# Parsoid closes the unclosed comment, even if it means a slight
+# round-trip diff.
 !! test
 Comment semantics: unclosed comment at end
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 <!--This comment will run out to the end of the document
-!! html
+!! html/php
 
+!! html/parsoid
+<!--This comment will run out to the end of the document-->
 !! end
 
-# Bug 58184: document parsoid's behaviour
 !! test
-Suppress comment closing tag in lenient browsers
-!! options
-parsoid=wt2html,html2html
+Comment semantics: normalize comments to play nice with XML and browsers
 !! wikitext
-<!-- Browsers--!> think this is closed -->
+<!-- Browsers --!> think this is closed -->
+<!--> This would normally be text -->
+<!---> As would this -->
+<!-- XML doesn't like trailing dashes -------->
+<!-- Nor doubled hyphens -- anywhere in the data -->
+But this is not a comment.
 !! html/php
+<p>But this is not a comment.
+</p>
+!! html/parsoid
+<!-- Browsers &#x2D;&#x2D;!&#x3E; think this is closed -->
+<!--&#x3E; This would normally be text -->
+<!--&#x2D;&#x3E; As would this -->
+<!-- XML doesn't like trailing dashes &#x2D;&#x2D;&#x2D;&#x2D;&#x2D;&#x2D;-->
+<!-- Nor doubled hyphens &#x2D;&#x2D; anywhere in the data -->
+<p>But this is not a comment.</p>
+!! end
 
+!! test
+Comment semantics: round-trip even text which contains encoded -->
+!! wikitext
+<!-- hello & goodbye - > --&gt; --&amp;gt; --&xx -->
 !! html/parsoid
-<!-- Browsers--¡> think this is closed -->
+<!-- hello &#x26; goodbye &#x2D; &#x3E; &#x2D;&#x2D;&#x3E; &#x2D;&#x2D;&#x26;gt; &#x2D;&#x2D;&#x26;xx -->
 !! end
 
 !! test
@@ -1682,10 +1800,15 @@ parsoid=wt2html,wt2wt
 !! wikitext
 <!--c1-->*a
 <!--c2--><!--c3--><!--c4-->*b
-!! html
-<ul>
+!! html/php
+<ul><li>a</li>
+<li>b</li></ul>
+
+!! html/parsoid
+<!--c1--><ul>
 <li>a
 </li>
+<!--c2--><!--c3--><!--c4-->
 <li>b
 </li>
 </ul>
@@ -1894,7 +2017,7 @@ a [[Category:A1]] [[Category:A2]]
 [[Category:A4]]
 !! html/parsoid
 <p>a</p>
-<link href="Category:A1"/> <link href="Category:A2"/> <link href="Category:A3"/> <link href="Category:A4"/>
+<link rel="mw:PageProp/Category" href="./Category:A1"/> <link rel="mw:PageProp/Category" href="./Category:A2"/> <link rel="mw:PageProp/Category" href="./Category:A3"/> <link rel="mw:PageProp/Category" href="./Category:A4"/>
 !! end
 
 !! test
@@ -1904,7 +2027,7 @@ parsoid=wt2html
 !! wikitext
 [[Category:A1]]a
 !! html/parsoid
-<link href="Category:A1"/><p>a</p>
+<link rel="mw:PageProp/Category" href="./Category:A1"/><p>a</p>
 !! end
 
 ###
@@ -1934,13 +2057,28 @@ Tabs don't trigger preformatted text
         preformatted text.
  This is preformatted text.
        So is this.
-!! html
+!! html/php
 <p>    This is not
         preformatted text.
 </p>
 <pre>This is preformatted text.
        So is this.
 </pre>
+!! html/parsoid
+<p>    This is not
+        preformatted text.</p>
+<pre>This is preformatted text.
+       So is this.</pre>
+!! end
+
+!! test
+Space before tab needs nowiki pre protection
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>    a</p>
+!! wikitext
+<nowiki> </nowiki>     a
 !! end
 
 !! test
@@ -2140,7 +2278,7 @@ Entities inside <pre>
 </nowiki>
 </pre>
 
-!! html
+!! html/php
 <pre>
 &lt;nowiki&gt;
 </pre>
@@ -2153,6 +2291,18 @@ Entities inside <pre>
 
 &lt;/pre&gt;
 </p>
+!! html/parsoid
+<pre data-parsoid='{"stx":"html","strippedNL":true}'>&lt;nowiki>
+</pre>
+<p><span typeof="mw:Placeholder" data-parsoid='{"src":"&lt;/nowiki>"}'>&lt;/nowiki></span>
+&lt;/pre></p>
+
+<p><span typeof="mw:Nowiki">
+&lt;pre>
+&lt;nowiki>
+&lt;/pre>
+</span>
+&lt;/pre></p>
 !! end
 
 !! test
@@ -2209,13 +2359,17 @@ HTML pre followed by indent-pre
 </pre>
 !! end
 
+# Note that tidy removes the empty <p> tags from the start and end.
+# Parsoid does not, by design.
 !!test
 Block tag pre
-!!options
-parsoid
 !! wikitext
 <p><pre>foo</pre></p>
-!! html
+!! html/php+tidy
+<pre>
+foo
+</pre>
+!! html/parsoid
 <p data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre data-parsoid='{"stx":"html"}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
 !!end
 
@@ -2338,6 +2492,19 @@ Templates: Indent-Pre: 1f: Wrapping should be based on expanded content
 </pre>
 !!end
 
+!! test
+Pres with newline attributes
+!! wikitext
+<pre class="one
+two">hi</pre>
+!! html/php
+<pre class="one two">hi</pre>
+
+!! html/parsoid
+<pre class="one
+two" data-parsoid='{"stx":"html"}'>hi</pre>
+!! end
+
 !! test
 Things that look like <pre> tags aren't treated as such
 !! wikitext
@@ -2377,7 +2544,10 @@ Parsoid: handle pre with space after attribute
 parsoid=wt2html
 !! wikitext
 <pre style="width:50%;" >{{echo|foo}}</pre>
-!! html
+!! html/php
+<pre style="width:50%;">{{echo|foo}}</pre>
+
+!! html/parsoid
 <pre style="width:50%;">{{echo|foo}}</pre>
 !! end
 
@@ -2583,32 +2753,32 @@ Templates: Other wikitext in parameter names (bug 67657)
 #--------------------------------------------------------------------
 !! test
 Templates: Parsoid parameter escaping test 1
-!! options
-parsoid
 !! wikitext
 {{echo|[foo]|{{echo|[bar]}}}}
-!! html
+!! html/php+tidy
+<p>[foo]</p>
+!! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[foo]"},"2":{"wt":"{{echo|[bar]}}"}},"i":0}}]}'>[foo]</p>
 !! end
 
 !! test
 Parsoid: Pipes in external links in template parameter
-!! options
-parsoid
 !! wikitext
 {{echo|[{{echo|http://example.com}} link]}}
-!! html
+!! html/php+tidy
+<p><a rel="nofollow" class="external text" href="http://example.com">link</a></p>
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com" about="#mwt31" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[{{echo|http://example.com}} link]"}},"i":0}}]}'>link</a></p>
 !! end
 
 !! test
 Parsoid: pipe in transclusion parameter
-!! options
-parsoid
 !! wikitext
 {{echo|http://foo.com/a&#124;b}}
-!! html
+!! html/php+tidy
+<p><a rel="nofollow" class="external free" href="http://foo.com/a%7Cb">http://foo.com/a%7Cb</a></p>
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://foo.com/a&amp;#124;b"}},"i":0}}]}'>http://foo.com/a|b</a></p>
@@ -2620,7 +2790,9 @@ Parsoid: Pipe in external link target and content in template parameter
 parsoid=html2wt,wt2wt
 !! wikitext
 {{echo|[http://foo.com/a&#124;b a&#124;b]}}
-!! html
+!! html/php+tidy
+<p><a rel="nofollow" class="external text" href="http://foo.com/a%7Cb">a|b</a></p>
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://foo.com/a|b" about="#mwt1"
 typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
@@ -2645,7 +2817,9 @@ parsoid=html2wt,wt2wt
 {{echo|foo<nowiki>|</nowiki>bar}}
 {{echo|<nowiki>&lt;div&gt;</nowiki>}}
 {{echo|<nowiki></nowiki>}}
-!! html
+!! html/php+tidy
+<p>foo|bar &lt;div&gt;</p>
+!! html/parsoid
 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo<nowiki>|</nowiki>bar"}},"i":0}}]}'}'>foo</span><span typeof="mw:Nowiki" about="#mwt1">|</span><span about="#mwt1">bar</span>
 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt2" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki>&amp;lt;div&amp;gt;</nowiki>"}},"i":0}}]}'><span typeof="mw:Entity">&lt;</span>div<span typeof="mw:Entity">&gt;</span></span>
 <span typeof="mw:Transclusion mw:Nowiki" about="#mwt3" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<nowiki></nowiki>"}},"i":0}}]}'></span>
@@ -2659,19 +2833,21 @@ Templates: '=' char in nested transclusions should not trigger nowiki escapes or
 parsoid=html2wt,wt2wt
 !! wikitext
 {{echo|{{echo|1=bar}}}}
-!! html
+!! html/php+tidy
+<p>bar</p>
+!! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{echo|1=bar}}"}},"i":0}}]}'>bar</p>
 !! end
 
 ## Bug 56733
 !! test
 Templates parameters with special tokenizing behavior dont get modified because of arg escaping
-!! options
-parsoid
 !! wikitext
 {{echo|a : b}}
-!! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
+!! html/php+tidy
+<p>a&#160;: b</p>
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a : b"}},"i":0}}]}'>a<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"isDisplayHack":true}'> </span>: b</p>
 !! end
 
 ## Bug T73412
@@ -2679,13 +2855,23 @@ parsoid
 Templates: Preserve blank parameter names
 !! wikitext
 {{echo|=foo}}
-!! html/php
-<p>{{{1}}}
-</p>
+!! html/php+tidy
+<p>{{{1}}}</p>
 !! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"":{"wt":"foo"}},"i":0}}]}'>{{{1}}}</p>
 !! end
 
+!! test
+Templates: Preserve blank parameter names in other positions
+!! wikitext
+{{blank_param|bar|=foo}}
+!! html/php+tidy
+<p>bar foo</p>
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]},{"k":"","named":true,"spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"blank_param","href":"./Template:Blank_param"},"params":{"1":{"wt":"bar"},"":{"wt":"foo"}},"i":0}}]}'>bar
+foo</p>
+!! end
+
 ###
 ### Parsoid-centric tests for testing RT edge cases for pre
 ###
@@ -3136,9 +3322,10 @@ parsoid=wt2html,wt2wt
 !! wikitext
  [[Category:foo]] <!-- No pre-wrapping -->
 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
-!! html
- <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
-<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
+!! html/php+tidy
+!! html/parsoid
+ <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre&#x2D;wrapping -->
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre&#x2D;wrapping -->
 !! end
 
 !! test
@@ -3149,9 +3336,22 @@ parsoid=wt2html,wt2wt
  [[Category:foo]] a
  [[Category:foo]] {{echo|b}}
 !! html
-<pre>
-<link rel="mw:PageProp/Category" href="./Category:Foo"> a
-<link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
+<pre><link rel="mw:PageProp/Category" href="./Category:Foo"> a
+ <link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
+!! end
+
+!! test
+Indent-Pre: Newlines in comments shouldn't affect sol state
+!! wikitext
+a <!--
+foo
+--> b
+!! html/php+tidy
+<p>a b</p>
+!! html/parsoid
+<p>a <!--
+foo
+--> b</p>
 !! end
 
 ###
@@ -3177,8 +3377,10 @@ foo
 
 foo
 </pre>
-!! html
-<pre>foo</pre>
+!! html/php+tidy
+<pre>
+foo
+</pre>
 <pre>
 foo
 </pre>
@@ -3191,7 +3393,6 @@ foo
 
 foo
 </pre>
-
 !! html/parsoid
 <pre data-parsoid='{"stx":"html"}'>foo</pre>
 
@@ -3230,7 +3431,7 @@ haha
 
 
 </pre>
-!! html
+!! html/php+tidy
 <pre>
 
 
@@ -3247,7 +3448,6 @@ haha
 
 
 </pre>
-
 !! html/parsoid
 <pre data-parsoid='{"stx":"html"}'>
 
@@ -3290,7 +3490,7 @@ HTML-pre: 3: other wikitext
 '' no-italic ''
 [[ NoLink ]]
 </pre>
-!! html
+!! html/php
 <pre>
 * foo
 # bar
@@ -3299,6 +3499,13 @@ HTML-pre: 3: other wikitext
 [[ NoLink ]]
 </pre>
 
+!! html/parsoid
+<pre data-parsoid='{"stx":"html","strippedNL":true}'>* foo
+# bar
+= no-h =
+'' no-italic ''
+[[ NoLink ]]
+</pre>
 !!end
 
 ###
@@ -3570,20 +3777,26 @@ Definition Lists: Hacky use to indent tables, with comment before table
 </tr></table></dd></dl></dd></dl>
 !! end
 
-# Bug 52473
+# The trailing whitespace in this test is to catch a regression in
+# Parsoid after T54473.
 !! test
 Definition Lists: Hacky use to indent tables (WS-insensitive)
-!! options
-parsoid
 !! wikitext
 : {|
 |a
 |} 
-!! html
-<dl>
-<dd> <table><tr><td>a</td></tr></table> </dd>
-</dl>
+!! html/php
+<dl><dd><table>
+<tr>
+<td>a
+</td></tr></table></dd></dl>
+
+!! html/parsoid
+<dl><dd> <table>
+<tbody><tr><td>a</td></tr>
+</tbody></table> </dd></dl>
 !! end
+
 ## The PHP parser treats : items (dd) without a corresponding ; item (dt)
 ## as an empty dt item.  It also ignores all but the last ";" when followed
 ## by ":" later on.  So, ";" are not ignored in ";;;t3" but are ignored  in
@@ -3616,7 +3829,7 @@ parsoid
 ##
 ## All Parsoid only definition list tests have this difference.
 ##
-## See also: https://bugzilla.wikimedia.org/show_bug.cgi?id=6569
+## See also: https://phabricator.wikimedia.org/T8569
 ## and http://lists.wikimedia.org/pipermail/wikitext-l/2011-November/000483.html
 
 !! test
@@ -3706,12 +3919,19 @@ parsoid
 
 !! test
 Definition Lists: Nesting: Test 2 (Parsoid only)
-!! options
-parsoid
 !! wikitext
 ;t1
 ::d2
-!! html
+!! html/php+tidy
+<dl>
+<dt>t1</dt>
+<dd>
+<dl>
+<dd>d2</dd>
+</dl>
+</dd>
+</dl>
+!! html/parsoid
 <dl>
   <dt>t1</dt>
   <dd>
@@ -3726,12 +3946,27 @@ parsoid
 
 !! test
 Definition Lists: Nesting: Test 3 (Parsoid only)
-!! options
-parsoid
 !! wikitext
 :;t1
 ::::d2
-!! html
+!! html/php+tidy
+<dl>
+<dd>
+<dl>
+<dt>t1</dt>
+<dd>
+<dl>
+<dd>
+<dl>
+<dd>d2</dd>
+</dl>
+</dd>
+</dl>
+</dd>
+</dl>
+</dd>
+</dl>
+!! html/parsoid
 <dl>
   <dd>
     <dl>
@@ -4006,6 +4241,9 @@ Definition Lists: Mixed Lists: Test 11
 
 
 # Another case where tidy converts a <dt> to a <dd> (but Parsoid doesn't).
+# From whitelist:
+# * The test is wrong, there are two colons where there should be :;
+# * The PHP parser is wrong to close the <dl> after the <dt> containing the <ul>.
 !! test
 Definition Lists: Weird Ones: Test 1
 !! wikitext
@@ -4063,7 +4301,7 @@ Definition Lists: Weird Ones: Test 1
 <dl>
 <dt>
 <dl>
-<dt> foo<span typeof="mw:Placeholder">&nbsp;</span></dt>
+<dt> foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span></dt>
 <dd data-parsoid='{"stx":"row"}'> bar (who uses this?)</dd>
 </dl></dt>
 </dl></dd>
@@ -4120,6 +4358,17 @@ Definition Lists: colons occurring in tags
 </dl>
 </dd>
 </dl>
+!! html/parsoid
+<dl><dt>a</dt><dd data-parsoid='{"stx":"row"}'>b</dd>
+<dt><b>a:b</b></dt>
+<dt><i data-parsoid='{"stx":"html"}'>a:b</i></dt>
+<dt><span data-parsoid='{"stx":"html"}'>a:b</span></dt>
+<dt><div data-parsoid='{"stx":"html"}'>a:b</div></dt>
+<dt><div data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</div></dt>
+<dd>b</dd>
+<dt><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a:b"}},"i":0}}]}'>a:b</span></dt>
+<dt><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;a:b&#39;&#39;"}},"i":0}}]}'>a:b</i>
+<dl><dt><dl><dt><i>a:b</i></dt></dl></dt></dl></dt></dl>
 !! end
 
 !! test
@@ -4440,6 +4689,25 @@ http://example.com/url_with_entity&#60;
 <a rel="mw:ExtLink" href="http://example.com/url_with_entity&lt;">http://example.com/url_with_entity&lt;</a></p>
 !! end
 
+!! test
+External links: Lone protocols are never linked (T105697)
+!! wikitext
+http://
+http://;
+(http://)
+bitcoin:
+bitcoin:;
+(bitcoin:)
+!! html
+<p>http://
+http://;
+(http://)
+bitcoin:
+bitcoin:;
+(bitcoin:)
+</p>
+!! end
+
 !! test
 External links: No preceding word characters allowed (bug 65278)
 !! wikitext
@@ -4981,38 +5249,6 @@ External link containing a single quote. (bug 63947)
 <p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
 !! end
 
-
-!! test
-External link containing a period in the anchor. (bug 63947)
-!! wikitext
-[//foo.org/bar#baz. bang]
-
-[//foo.org/bar. bang]
-!! html/php
-<p><a rel="nofollow" class="external text" href="//foo.org/bar#baz.">bang</a>
-</p><p><a rel="nofollow" class="external text" href="//foo.org/bar.">bang</a>
-</p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="//foo.org/bar#baz.">bang</a></p>
-<p><a rel="mw:ExtLink" href="//foo.org/bar.">bang</a></p>
-!! end
-
-!! test
-External link containing a single quote. (bug 63947)
-!! wikitext
-[//foo.org/bar'baz]
-
-[//foo.org/bar'baz bang]
-!! html/php
-<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar'baz">[1]</a>
-</p><p><a rel="nofollow" class="external text" href="//foo.org/bar'baz">bang</a>
-</p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
-<p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
-!! end
-
-
 !! test
 External link containing double-single-quotes in text '' (bug 4598 sanity check)
 !! wikitext
@@ -5048,9 +5284,22 @@ External link containing double-single-quotes with no space separating the url f
 External link with comments in link text
 !! wikitext
 [http://www.google.com Google <!-- comment -->]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://www.google.com">Google </a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.google.com">Google <!-- comment --></a></p>
+!! end
+
+!! test
+External link to bare IPv4 address
+!! wikitext
+[http://192.168.0.1 Link]
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://192.168.0.1">Link</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://192.168.0.1">Link</a></p>
 !! end
 
 !! test
@@ -5088,14 +5337,129 @@ http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
 !! end
 
 !! test
-IPv6 urls (bug 21261)
-!! options
-disabled
+IPv6 urls, autolink format (T23261)
 !! wikitext
 http://[2404:130:0:1000::187:2]/index.php
-!! html
+
+Examples from RFC 2373, section 2.2:
+* http://[1080::8:800:200C:417A]/unicast
+* http://[FF01::101]/multicast
+* http://[::1]/loopback
+* http://[::]/unspecified
+* http://[::13.1.68.3]/ipv4compat
+* http://[::FFFF:129.144.52.38]/ipv4compat
+
+Examples from RFC 2732, section 2:
+* http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html
+* http://[1080:0:0:0:8:800:200C:417A]/index.html
+* http://[3ffe:2a00:100:7031::1]
+* http://[1080::8:800:200C:417A]/foo
+* http://[::192.9.5.5]/ipng
+* http://[::FFFF:129.144.52.38]:80/index.html
+* http://[2010:836B:4179::836B:4179]
+
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a>
-</p>
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
+</p>
+<ul><li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
+<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
+</p>
+<ul><li> <a rel="nofollow" class="external free" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[1080::8:800:200C:417A]/foo">http://[1080::8:800:200C:417A]/foo</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::192.9.5.5]/ipng">http://[::192.9.5.5]/ipng</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
+<li> <a rel="nofollow" class="external free" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
+
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a></p>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::]/unspecified">http://[::]/unspecified</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">http://[1080::8:800:200C:417A]/foo</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">http://[::192.9.5.5]/ipng</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">http://[::FFFF:129.144.52.38]:80/index.html</a></li>
+<li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">http://[2010:836B:4179::836B:4179]</a></li></ul>
+!! end
+
+!! test
+IPv6 urls, bracketed format (T23261)
+!! wikitext
+[http://[2404:130:0:1000::187:2]/index.php test]
+
+Examples from RFC 2373, section 2.2:
+* [http://[1080::8:800:200C:417A] unicast]
+* [http://[FF01::101] multicast]
+* [http://[::1]/ loopback]
+* [http://[::] unspecified]
+* [http://[::13.1.68.3] ipv4compat]
+* [http://[::FFFF:129.144.52.38] ipv4compat]
+
+Examples from RFC 2732, section 2:
+* [http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html 1]
+* [http://[1080:0:0:0:8:800:200C:417A]/index.html 2]
+* [http://[3ffe:2a00:100:7031::1] 3]
+* [http://[1080::8:800:200C:417A]/foo 4]
+* [http://[::192.9.5.5]/ipng 5]
+* [http://[::FFFF:129.144.52.38]:80/index.html 6]
+* [http://[2010:836B:4179::836B:4179] 7]
+
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://[2404:130:0:1000::187:2]/index.php">test</a>
+</p><p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2373">RFC 2373</a>, section 2.2:
+</p>
+<ul><li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]">unicast</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[FF01::101]">multicast</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::1]/">loopback</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::]">unspecified</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::13.1.68.3]">ipv4compat</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
+<p>Examples from <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc2732">RFC 2732</a>, section 2:
+</p>
+<ul><li> <a rel="nofollow" class="external text" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[1080::8:800:200C:417A]/foo">4</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::192.9.5.5]/ipng">5</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
+<li> <a rel="nofollow" class="external text" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
+
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://[2404:130:0:1000::187:2]/index.php">test</a></p>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2373" rel="mw:ExtLink">RFC 2373</a>, section 2.2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]">unicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[FF01::101]">multicast</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::1]/">loopback</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::]">unspecified</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::13.1.68.3]">ipv4compat</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
+
+<p>Examples from <a href="//tools.ietf.org/html/rfc2732" rel="mw:ExtLink">RFC 2732</a>, section 2:</p>
+<ul><li> <a rel="mw:ExtLink" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
+<li> <a rel="mw:ExtLink" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
+<li> <a rel="mw:ExtLink" href="http://[1080::8:800:200C:417A]/foo">4</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::192.9.5.5]/ipng">5</a></li>
+<li> <a rel="mw:ExtLink" href="http://[::FFFF:129.144.52.38]:80/index.html">6</a></li>
+<li> <a rel="mw:ExtLink" href="http://[2010:836B:4179::836B:4179]">7</a></li></ul>
 !! end
 
 !! test
@@ -5113,7 +5477,8 @@ Non-extlinks in brackets
 [{{echo|foo}}l's errand]
 [url={{echo|foo}}]
 [url=http://example.com]
-!! html
+[http:// bare protocols don't count]
+!! html/php
 <p>[foo]
 [foo bar]
 [foo <i>bar</i>]
@@ -5126,7 +5491,22 @@ Non-extlinks in brackets
 [fool's errand]
 [url=foo]
 [url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
+[http:// bare protocols don't count]
 </p>
+!! html/parsoid
+<p>[foo]
+[foo bar]
+[foo <i>bar</i>]
+[fool's] errand
+[fool's errand]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span>]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> bar]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}"}'>foo</span> <i>bar</i>]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span>] errand
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"{{echo|foo}}l&#39;s"}'>fool's</span> errand]
+[<span typeof="mw:Placeholder" data-parsoid='{"src":"url={{echo|foo}}"}'>url=foo</span>]
+[url=<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>]
+[http:// bare protocols don't count]</p>
 !! end
 
 !! test
@@ -5208,15 +5588,55 @@ Parenthesis in external links, w/ transclusion or comment
 !! end
 
 !! test
-Replace invalid link targets when serializing
+Serialize <a> tags with invalid link targets as plain text
 !! options
 parsoid=html2wt
-!! html
-<a rel="mw:WikiLink" href="./]] foo [[bar">Manual</a>
+!! html/parsoid
+<a rel="mw:WikiLink" href="[[foo]]">text</a>
+<a rel="mw:WikiLink" href="[[foo]]">*text</a>
+<a rel="mw:WikiLink" href="[[foo]]">[[foo]]</a>
+<a rel="mw:WikiLink" href="[[foo]]">*a [[foo]]</a>
+!! wikitext
+text
+<nowiki>*</nowiki>text
+<nowiki>[[foo]]</nowiki>
+<nowiki>*a [[foo]]</nowiki>
+!! end
+
+!! test
+mw:ExtLink -vs- mw:WikiLink (T94723)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"piped","a":{"href":"./Foo"},"sa":{"href":"Foo"},"dsr":[0,11,6,2]}'>Bar</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">Bar</a>
+<a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
+<a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="Foo">Bar</a>
+<p>
+<a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
+<a rel="mw:WikiLink" href="http://en.wikipedia.org/wiki/European_Robin">European Robin</a>
+</p>
+!! wikitext
+[[Foo|Bar]]
+[[Foo|Bar]]
+[[wikipedia:Foo|Bar]]
+[[wikipedia:Foo|Bar]]
+
+[[wikipedia:European_Robin|European Robin]]
+[[wikipedia:European_Robin|European Robin]]
+!! end
+
+!! test
+mw:ExtLink linking to a interwiki URL can be round-tripped losslessly (T94723)
+!! options
+parsoid=wt2wt
 !! wikitext
-[[MediaWiki:Badtitletext|Manual]]
+[http://en.wikipedia.org/wiki/European_Robin European Robin]
+!! html/parsoid
+THIS SECTION IS NOT USED (but Parsoid won't run the test without it)
 !! end
 
+
 ###
 ### Quotes
 ###
@@ -5280,7 +5700,9 @@ Plain ''italic'''s plain
 </p><p><b>Bold tag left open</b>
 </p><p><i>Italic tag left open</i>
 </p><p>Normal text.
-</p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
+</p>
+<!-- Unmatching number of opening, closing tags: -->
+<p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
 </p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
 </p><p>Plain <i>italic'</i>s plain
 </p>
@@ -5480,6 +5902,7 @@ Simple table but with multiple dashes for row wikitext
 </td></tr></table>
 
 !! end
+
 !! test
 Multiplication table
 !! wikitext
@@ -5600,6 +6023,69 @@ Accept "||" in indented table headings
 
 !! end
 
+!! test
+Accept "!!" in templates
+!! wikitext
+{|
+!a {{echo|b!!c}}
+|}
+!! html/php
+<table>
+<tr>
+<th>a b</th>
+<th>c
+</th></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><th typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":["!a ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b!!c"}},"i":0}}]}'>a b</th><th about="#mwt1">c</th></tr>
+!! end
+
+!! test
+Accept "!!" in table headings after newline
+!! wikitext
+{|
+!a
+b!!c
+|}
+!! html/php
+<table>
+<tr>
+<th>a
+<p>b!!c
+</p>
+</th></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><th>a
+<p>b!!c</p></th></tr>
+</tbody></table>
+!! end
+
+!! test
+Accept "!!" in table data of mixed wikitext / html syntax
+!! wikitext
+{|
+!a
+<tr><td>b!!c</td></tr>
+|}
+!! html+tidy
+<table>
+<tr>
+<th>a</th>
+</tr>
+<tr>
+<td>b!!c</td>
+</tr>
+</table>
+!! html/parsoid
+<table>
+<tbody><tr><th>a</th></tr>
+<tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'>b!!c</td></tr>
+</tbody></table>
+!! end
+
 !! test
 Accept empty attributes in td/th cells (td/th cells starting with leading ||)
 !! wikitext
@@ -5746,10 +6232,37 @@ Invalid attributes in table cell (bug 1830)
 
 !! end
 
-# The "|}" to close the table is missing from the input, so parsoid's
-# *2wt modes will fail.
 !! test
-Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html)
+Table cell attributes: Pipes protected by nowikis should be treated as a plain character
+!! wikitext
+{|
+| title="foo" |bar
+| title="foo<nowiki>|</nowiki>" |bar
+| title="foo<nowiki>|</nowiki>" bar
+|}
+!! html/php
+<table>
+<tr>
+<td title="foo">bar
+</td>
+<td title="foo&#124;">bar
+</td>
+<td> title="foo|" bar
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td title="foo">bar</td>
+<td title="foo|" data-parsoid='{"a":{"title":"foo|"},"sa":{"title":"foo&lt;nowiki>|&lt;/nowiki>"},"autoInsertedEnd":true}'>bar</td>
+<td> title="foo<span typeof="mw:Nowiki">|</span>" bar</td></tr>
+</tbody></table>
+!! end
+
+# See: http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html
+# N.B. The "|}" to close the table is missing from the input, so parsoid's
+#      *2wt modes will fail.
+!! test
+Table security: embedded pipes
 !! options
 parsoid=wt2html,html2html
 !! wikitext
@@ -5767,12 +6280,14 @@ parsoid=wt2html,html2html
 !! html/parsoid
 <table><tbody>
 <tr>
-<td><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
+<td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
 !! end
 
-# FIXME: The php output is broken.
+# FIXME: The output seems broken. Filed as T110268.
 !! test
 ! and || in td attributes should not be parsed as <th>/<td>
+!! options
+parsoid=wt2html
 !! wikitext
 {|
 | style="color: red !important;" data-contrived="put this here ||" | foo
@@ -5786,7 +6301,7 @@ parsoid=wt2html,html2html
 
 !! html/parsoid
 <table>
-<tbody><tr><td style="color: red !important;" data-contrived="put this here ||" data-parsoid='{"autoInsertedEnd":true}'> foo</td></tr>
+<tbody><tr><td> style="color: red !important;" data-contrived="put this here </td><td data-parsoid='{"stx_v":"row","a":{"\"":null},"sa":{"\"":""},"autoInsertedEnd":true}'> foo</td></tr>
 </tbody></table>
 !! end
 
@@ -5892,6 +6407,50 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
 </tbody></table>
 !! end
 
+!! test
+4. Template-generated table cell attributes and cell content inside a templated table
+!! wikitext
+{{tbl-start}}
+!align=center {{table_header_cells}}
+|-
+|align=center {{table_cells}}
+{{tbl-end}}
+!! html/php
+<table>
+<tr>
+<th align="center" style="color:red;">Foo</th>
+<th style="color:red;"><i>Bar</i></th>
+<th style="color:brown;"><i>Foo</i> and Baz
+</th></tr>
+<tr>
+<td align="center" style="color:red;">Foo</td>
+<td style="color:red;"><i>Bar</i></td>
+<td style="color:brown;"><i>Foo</i> and Baz
+</td></tr></table>
+
+!! html/parsoid
+<table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[],[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n!align=center ",{"template":{"target":{"wt":"table_header_cells","href":"./Template:Table_header_cells"},"params":{},"i":1}},"\n|-\n|align=center ",{"template":{"target":{"wt":"table_cells","href":"./Template:Table_cells"},"params":{},"i":2}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":3}}]}'>
+<tbody><tr><th align="center" style="color:red;">Foo</th><th style="color:red;"><i>Bar</i></th><th style="color:brown;"><i>Foo</i> and Baz</th></tr>
+<tr>
+<td align="center" style="color:red;">Foo</td><td style="color:red;"><i>Bar</i></td><td style="color:brown;"><i>Foo</i> and Baz</td></tr>
+</tbody></table>
+!! end
+
+## Edge case fix to prevent future regressions
+!! test
+T107652: <ref>s in templates that also generate table cell attributes should be rendered properly
+!! wikitext
+{|
+|{{table_attribs_7}}
+|}
+<references />
+!! html/parsoid
+<table>
+<tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<span class="mw-ref" id="cite_ref-1" rel="dc:references" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></td></tr>
+</tbody></table>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
 !! test
 Table with row followed by newlines and table heading
 !! wikitext
@@ -6305,7 +6864,7 @@ parsoid=wt2html,wt2wt
 Parsoid: Default to a newline after tables in new content (bug 51219)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <table><tbody>
 <tr><td>foo</td></tr></tbody></table> bar
 <table><tbody>
@@ -6325,7 +6884,7 @@ parsoid=html2wt
 Parsoid: newline inducing block nodes don't suppress <nowiki>
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
  a<h1>foo</h1>
 !! wikitext
 <nowiki> </nowiki>a
@@ -6359,9 +6918,6 @@ parsoid=wt2html,wt2wt
 </tbody></table>
 !! end
 
-
-# PHP throws away the (semi-broken) "foo" class here; Parsoid
-# preserves it.
 !!test
 Parsoid: Recover better from broken table attributes
 !!options
@@ -6372,7 +6928,7 @@ parsoid=wt2html
 foo
 |}
 !!html/php+tidy
-<table>
+<table class="foo">
 <tr>
 <td class="bar">
 <p>foo</p>
@@ -6387,11 +6943,28 @@ foo
 </tbody></table>
 !!end
 
+!! test
+Tables: Digest broken attributes on table and tr tag
+!! options
+parsoid=wt2html
+!! wikitext
+{| || |} ++
+|- || || ++ --
+|- > [
+|}
+!! html
+<table>
+<tbody>
+<tr></tr>
+<tr></tr>
+</tbody></table>
+!! end
+
 !! test
 Strip unsupported table tags
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <table>
 <thead>
 <tr>
@@ -6597,8 +7170,10 @@ Link with HTML entity in suffix / tail
 Link with 3 brackets
 !! wikitext
 [[[Main Page]]]
+Foo [[[Main Page]]]
 !! html
 <p>[[[Main Page]]]
+Foo [[[Main Page]]]
 </p>
 !! end
 
@@ -6696,7 +7271,7 @@ Namespace takes precedence over interwiki link (bug 51680)
 Link to namespace preferred over interwiki with correct rel attribute
 !! options
 parsoid=html2wt,html2html
-!! html
+!! html/parsoid
 <p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a></p>
 !! wikitext
 [[MemoryAlpha:AlphaTest]]
@@ -6810,7 +7385,7 @@ Link containing a tilde
 !! wikitext
 [[Foo~bar]]
 !! html/php
-<p><a href="/wiki/Foo%7Ebar" title="Foo~bar">Foo~bar</a>
+<p><a href="/wiki/Foo~bar" title="Foo~bar">Foo~bar</a>
 </p>
 !! html/parsoid
 <p><a rel="mw:WikiLink" href="./Foo~bar" title="Foo~bar">Foo~bar</a></p>
@@ -6884,10 +7459,10 @@ Broken image links with HTML captions (bug 39700)
 <a href="/index.php?title=Special:Upload&amp;wpDestFile=Nonexistent" class="new" title="File:Nonexistent">abc</a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;script>&lt;/script>"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
-<span typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;script>&lt;/script>"}'><a href="./File:Nonexistent" data-parsoid='{"a":{"href":"./File:Nonexistent"},"sa":{}}'><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="100" width="100"/></a></span>
-<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&amp;lt;"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
-<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"a&lt;i>b&lt;/i>c"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
+<span typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="100" width="100"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;span typeof=\"mw:Entity\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;lt;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;&lt;&amp;quot;,&amp;quot;dsr&amp;quot;:[107,111,null,null]}\">&amp;lt;&lt;/span>"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"a&lt;i data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[134,142,3,4]}\">b&lt;/i>c"}'><a href="./File:Nonexistent"><img resource="./File:Nonexistent" src="./Special:FilePath/Nonexistent" height="220" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -7125,7 +7700,7 @@ title=[[User:test/123]]
 <p><a href="#a">b</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
+<p><a rel="mw:WikiLink" href="./User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"./User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
 !! end
 
 !! test
@@ -7204,7 +7779,7 @@ mótmælenda[[söfnuður|söfnuðir]]xxx
 Parsoid link trail escaping
 !! options
 parsoid=html2wt,html2html
-!! html
+!! html/parsoid
 <p><a rel="mw:WikiLink" href="Apple" title="Apple">apple</a>s</p>
 !! wikitext
 [[apple]]<nowiki/>s
@@ -7215,7 +7790,7 @@ Parsoid link prefix escaping
 !! options
 language=is
 parsoid=html2wt,html2html
-!! html
+!! html/parsoid
 <p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður">söfnuður</a></p>
 !! wikitext
 Aðrir mótmælenda<nowiki/>[[söfnuður]]
@@ -7515,7 +8090,6 @@ Blah blah blah
 [[   es :Spanish]]
 [[ ZH :Chinese]]
 [[es:Foo_bar]]
-[[es:Foo bar]]
 !! html/php
 <p>Blah blah blah
 </p>
@@ -7524,7 +8098,21 @@ Blah blah blah
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish" />
 <link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese" />
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
-<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar" />
+!! end
+
+!! test
+Space and question mark encoding in interlanguage links (T95473)
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! wikitext
+Blah blah blah
+[[es:Foo bar?]]
+!! html/php
+<p>Blah blah blah
+</p>
+!! html/parsoid
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Foo_bar%3F" />
 !! end
 
 !! test
@@ -7587,7 +8175,7 @@ language=ln
 Parsoid bug 53221: Wikilinks should be properly entity-escaped
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>He&amp;nbsp;llo <a href="Foo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
 <p>He&amp;nbsp;llo <a href="He&amp;nbsp;llo" rel="mw:WikiLink">He&amp;nbsp;llo</a></p>
 !! wikitext
@@ -7693,7 +8281,7 @@ Blah blah blah
 </p>
 !! html/parsoid
 <p>Blah blah blah
-<a rel="mw:WikiLink" href="Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
+<a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
 !! end
 
 ###
@@ -7702,12 +8290,10 @@ Blah blah blah
 
 !! test
 1. Simple redirect to page
-!! options
-parsoid
 !! wikitext
 #REDIRECT [[Main Page]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"/>
 !! end
 
 !! test
@@ -7718,12 +8304,22 @@ parsoid
 <link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./Main_Page"},"sa":{"href":"Main_Page"}}'/>
 !! end
 
+# Not a valid redirect in PHP (although perhaps it was, once upon a time)
+# This tests the Parsoid bail-out code.
 !! test
 3. Other redirect variants
 !! wikitext
 #REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
 !! html/parsoid
-<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D" data-parsoid='{"src":"#REDIRECT ","a":{"href":"./%5B%5BBar%5D%5D"},"sa":{"href":"&lt;nowiki>[[Bar]]&lt;/nowiki>"}}'/>
+<ol><li data-parsoid>REDIRECT [[[[Bar]]]]</li></ol>
+!! end
+
+!! test
+4. Redirect to a templated destination
+!! wikitext
+#REDIRECT [[{{echo|Foo}}bar]]
+!! html/parsoid
+<link typeof="mw:ExpandedAttrs" rel="mw:PageProp/redirect" href="./Foobar" data-mw='{"attribs":[[{"txt":"href"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[12,24,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;Foo&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">Foo&lt;/span>bar"}]]}'/>
 !! end
 
 !! test
@@ -7732,7 +8328,7 @@ Empty redirect
 parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[]]
-!! html
+!! html/parsoid
 <ol>
 <li>REDIRECT [[]]</li></ol>
 !! end
@@ -7745,8 +8341,8 @@ Optional colon in #REDIRECT
 parsoid=wt2html,html2html
 !! wikitext
 #REDIRECT:[[Main Page]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"/>
 !! end
 
 !! test
@@ -7761,8 +8357,8 @@ parsoid=wt2html,html2html
  #REDIRECT 
 : 
 [[Main Page]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"/>
 !! end
 
 !! test
@@ -7773,89 +8369,90 @@ Piped link in #REDIRECT
 parsoid=wt2html
 !! wikitext
 #REDIRECT [[Main Page|bar]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"/>
 !! end
 
 !! test
-Redirect to category
+Redirect to category (T104502)
 !! options
-parsoid=wt2wt,wt2html
+parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[Category:Foo]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Category:Foo"><link rel="mw:PageProp/Category" href="./Category:Foo">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Category:Foo"/>
 !! end
 
 !! test
-Redirect to category with URL encoding
+Redirect to category with URL encoding (T104502)
 !! options
 parsoid=wt2html
 !! wikitext
 #REDIRECT [[Category%3AFoo]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Category:Foo"><link rel="mw:PageProp/Category" href="./Category:Foo">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Category:Foo"/>
 !! end
 
 !! test
 Redirect to category page
-!! options
-parsoid
 !! wikitext
 #REDIRECT [[:Category:Foo]]
-!! html
-<link rel="mw:PageProp/redirect" href="Category:Foo" title="Category:Foo"/>
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Category:Foo"/>
 !! end
 
 !! test
 Redirect to image page (1)
-!! options
-parsoid
 !! wikitext
 #REDIRECT [[File:Wiki.png]]
-!! html
-<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png"/>
 !! end
 
 !! test
 Redirect to image page (2)
-!! options
-parsoid
 !! wikitext
 #REDIRECT [[Image:Wiki.png]]
-!! html
-<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./File:Wiki.png"  data-parsoid='{"src":"#REDIRECT ","a":{"href":"./File:Wiki.png"},"sa":{"href":"Image:Wiki.png"}}'/>
 !! end
 
+# html2wt disabled because wts serializes as "#REDIRECT [[:en:File:Wiki.png]]"
+# Next test confirms this.
 !! test
-Redirect to language
+Redirect to language (1) (T104918)
 !! options
-parsoid
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 #REDIRECT [[en:File:Wiki.png]]
-!! html
-<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="//en.wikipedia.org/wiki/File:Wiki.png"/>
 !! end
 
 !! test
-Redirect to interwiki
-!! options
-parsoid
+Redirect to language (2) (T104918)
+!! wikitext
+#REDIRECT [[:en:File:Wiki.png]]
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="//en.wikipedia.org/wiki/File:Wiki.png"/>
+!! end
+
+!! test
+Redirect to interwiki (T104918)
 !! wikitext
 #REDIRECT [[meatball:File:Wiki.png]]
-!! html
-<link rel="mw:PageProp/redirect" href="./File:Wiki.png">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="http://www.usemod.com/cgi-bin/mb.pl?File:Wiki.png"/>
 !! end
 
 !! test
 Non-English #REDIRECT
 !! options
-parsoid
 language=is
 !! wikitext
 #TILVÍSUN [[Main Page]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page" data-parsoid='{"src":"#TILVÍSUN ","a":{"href":"./Main_Page"},"sa":{"href":"Main Page"}}'/>
 !! end
 
 !! test
@@ -7874,8 +8471,8 @@ some text
 New redirect
 !! options
 parsoid=html2wt
-!! html
-<p>Foo<link rel="mw:PageProp/redirect" href="./Foo"></p>
+!! html/parsoid
+<p>Foo<link rel="mw:PageProp/redirect" href="./Foo"/></p>
 !! wikitext
 Foo
 #REDIRECT [[Foo]]
@@ -7980,8 +8577,8 @@ Handling html with a br self-closing tag
 <br title=bar/>
 <br title=bar/ >
 !! html/php
-<p><br title="title" />
-<br title="title" />
+<p><br title="" />
+<br title="" />
 <br />
 <br title="bar" />
 <br title="bar" />
@@ -8225,7 +8822,7 @@ parsoid
 !! wikitext
 *<references />
 !! html/parsoid
-<ul><li data-parsoid='{}'><ol class="references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
+<ul><li data-parsoid='{}'><ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
 !! end
 
 !! test
@@ -8258,11 +8855,15 @@ List items are not parsed correctly following a <pre> block (bug 785)
 * <pre>foo</pre>
 * <pre>bar</pre>
 * zar
-!! html
+!! html/php
 <ul><li> <pre>foo</pre></li>
 <li> <pre>bar</pre></li>
 <li> zar</li></ul>
 
+!! html/parsoid
+<ul><li> <pre data-parsoid='{"stx":"html"}'>foo</pre></li>
+<li> <pre data-parsoid='{"stx":"html"}'>bar</pre></li>
+<li> zar</li></ul>
 !! end
 
 !! test
@@ -9306,7 +9907,7 @@ hi+world%3F%21
 Magic Word: prioritize type info over data-parsoid
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <meta property="mw:PageProp/forcetoc" data-parsoid='{"magicSrc":"__NOTOC__"}'/>
 !! wikitext
 __FORCETOC__
@@ -9320,7 +9921,7 @@ parsoid=wt2wt,html2wt
 foo
 __NOTOC__
 bar
-!! html
+!! html/parsoid
 foo<meta property="mw:PageProp/notoc"/>bar
 !! end
 
@@ -9331,10 +9932,19 @@ parsoid=wt2wt
 language=de
 !! wikitext
 __NOEDITSECTION__
-!! html
+!! html/parsoid
 <meta property="mw:PageProp/noeditsection" data-parsoid='{"magicSrc":"__NOEDITSECTION__"}'/>
 !! end
 
+!!test
+__proto__ is treated as normal wikitext (T105997)
+!!wikitext
+__proto__
+!!html
+<p>__proto__
+</p>
+!!end
+
 ###
 ### Magic links
 ###
@@ -9342,27 +9952,33 @@ __NOEDITSECTION__
 Magic links: internal link to RFC (bug 479)
 !! wikitext
 [[RFC 123]]
-!! html
+!! html/php
 <p><a href="/index.php?title=RFC_123&amp;action=edit&amp;redlink=1" class="new" title="RFC 123 (page does not exist)">RFC 123</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./RFC_123" title="RFC 123">RFC 123</a></p>
 !! end
 
 !! test
 Magic links: RFC (bug 479)
 !! wikitext
 RFC 822
-!! html
+!! html/php
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
+!! html/parsoid
+<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a></p>
 !! end
 
 !! test
 Magic links: RFC (bug 65278)
 !! wikitext
 This is RFC 822 but thisRFC 822 is not RFC 822linked.
-!! html
+!! html/php
 <p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
 </p>
+!! html/parsoid
+<p>This is <a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
 !! end
 
 !! test
@@ -9371,20 +9987,26 @@ Magic links: RFC (w/ non-newline whitespace, bug 28950/29025)
 RFC &nbsp;&#160;&#0160;&#xA0;&#Xa0; 822
 RFC
 822
-!! html
+!! html/php
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc822">RFC 822</a>
 RFC
 822
 </p>
+!! html/parsoid
+<p><a href="//tools.ietf.org/html/rfc822" rel="mw:ExtLink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
+RFC
+822</p>
 !! end
 
 !! test
 Magic links: ISBN (bug 1937)
 !! wikitext
 ISBN 0-306-40615-2
-!! html
+!! html/php
 <p><a href="/wiki/Special:BookSources/0306406152" class="internal mw-magiclink-isbn">ISBN 0-306-40615-2</a>
 </p>
+!! html/parsoid
+<p><a href="./Special:BookSources/0306406152" rel="mw:WikiLink">ISBN 0-306-40615-2</a></p>
 !! end
 
 !! test
@@ -9395,7 +10017,7 @@ This is ISBN 978-0-316-09811-3 but thisISBN 978-0-316-09811-3 is not ISBN 978-0-
 <p>This is <a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.
 </p>
 !! html/parsoid
-<p>This is <a href="./Special:BookSources/9780316098113" rel="mw:ExtLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
+<p>This is <a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN 978-0-316-09811-3</a> but thisISBN 978-0-316-09811-3 is not ISBN 978-0-316-09811-3linked.</p>
 !! end
 
 !! test
@@ -9406,31 +10028,41 @@ ISBN
 9780316098113
 ISBN 978
 0316098113
-!! html
+!! html/php
 <p><a href="/wiki/Special:BookSources/9780316098113" class="internal mw-magiclink-isbn">ISBN 978 0 316 09811 3</a>
 ISBN
 9780316098113
 ISBN 978
 0316098113
 </p>
+!! html/parsoid
+<p><a href="./Special:BookSources/9780316098113" rel="mw:WikiLink">ISBN <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 978<span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span>0<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span>316<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span>09811<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span>3</a>
+ISBN
+9780316098113
+ISBN 978
+0316098113</p>
 !! end
 
 !! test
 Magic links: PMID incorrectly converts space to underscore
 !! wikitext
 PMID 1234
-!! html
+!! html/php
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
+!! html/parsoid
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></p>
 !! end
 
 !! test
 Magic links: PMID (bug 65278)
 !! wikitext
 This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
-!! html
+!! html/php
 <p>This is <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.
 </p>
+!! html/parsoid
+<p>This is <a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.</p>
 !! end
 
 !! test
@@ -9439,11 +10071,15 @@ Magic links: PMID (w/ non-newline whitespace, bug 28950/29025)
 PMID &nbsp;&#160;&#0160;&#xA0;&#Xa0; 1234
 PMID
 1234
-!! html
+!! html/php
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 PMID
 1234
 </p>
+!! html/parsoid
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 1234</a>
+PMID
+1234</p>
 !! end
 
 ###
@@ -9642,9 +10278,11 @@ Template with default value (value set)
 Template redirect
 !! wikitext
 {{templateredirect}}
-!! html
+!! html/php
 <p>(test)
 </p>
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Template:Templatesimple" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"templateredirect","href":"./Template:Templateredirect"},"params":{},"i":0}}]}'/>
 !! end
 
 !! test
@@ -9882,6 +10520,24 @@ Template with targets containing wikilinks
 </p>
 !! end
 
+!! article
+Template:''
+!! text
+bar
+!! endarticle
+
+!! test
+Templates: Double quotes as template target
+!! wikitext
+foo {{''}} baz
+!! html/php
+<p>foo bar baz
+</p>
+!! html/parsoid
+<p>foo <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"&#39;&#39;"},"params":{},"i":0}}]}'>bar</span> baz
+</p>
+!! end
+
 !! article
 Template:MSGNW test
 !! text
@@ -9892,6 +10548,7 @@ Template:MSGNW test
 <gallery>
 File:Foobar.jpg
 </gallery>
+<!-- comment -->
 !! endarticle
 
 # hmm, fix this or just deprecate msgnw and document its behavior?
@@ -9899,7 +10556,7 @@ File:Foobar.jpg
 msgnw keyword
 !! wikitext
 {{msgnw:MSGNW test}}
-!! html
+!! html/php
 <p>&#39;&#39;None&#39;&#39; of &#39;&#39;&#39;this&#39;&#39;&#39; should be 
 &#42; interpreted
 &#32;but rather passed unmodified
@@ -9907,6 +10564,7 @@ msgnw keyword
 &#60;gallery&#62;
 File:Foobar.jpg
 &#60;/gallery&#62;
+&#60;!-- comment --&#62;
 </p>
 !! end
 
@@ -9919,6 +10577,15 @@ int keyword
 </p>
 !! end
 
+!! test
+int keyword - non-existing message
+!! wikitext
+{{int:var}}
+!! html
+<p>&lt;var&gt;
+</p>
+!! end
+
 !! article
 Template:Includes
 !! text
@@ -10160,7 +10827,7 @@ b}}
 !! end
 
 !! test
-Parsoid: Merge double tds (bug 50603)
+Parsoid: Merge double tds (T52603)
 !! options
 parsoid
 !! wikitext
@@ -10174,7 +10841,7 @@ parsoid
 !! end
 
 !! test
-Parsoid: Merge double tds in nested transclusion content (bug 50603)
+Parsoid: Merge double tds in nested transclusion content (T52603)
 !! options
 parsoid
 !! wikitext
@@ -10669,6 +11336,43 @@ Templates: Support for templates generating attributes and content
 </tbody></table>
 !! end
 
+!! test
+3. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
+!! wikitext
+{{tbl-start}}
+|{{table_attribs_3}}
+{{tbl-end}}
+!! html/php
+<table>
+<tr>
+<td style="background:#f9f9f9;">Foo
+</td></tr></table>
+
+!! html/parsoid
+<table about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[],[],[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"tbl-start","href":"./Template:Tbl-start"},"params":{},"i":0}},"\n|",{"template":{"target":{"wt":"table_attribs_3","href":"./Template:Table_attribs_3"},"params":{},"i":1}},"\n",{"template":{"target":{"wt":"tbl-end","href":"./Template:Tbl-end"},"params":{},"i":2}}]}'>
+<tbody><tr><td style="background:#f9f9f9;">Foo</td></tr>
+</tbody></table>
+!! end
+
+# T107622
+!! test
+4. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
+!! wikitext
+{|
+| {{table_attribs_6}} hi
+|}
+!! html/php
+<table>
+<tr>
+<td style="background: red;"> hi
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td style="background:  red;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["| ",{"template":{"target":{"wt":"table_attribs_6","href":"./Template:Table_attribs_6"},"params":{},"i":0}}," hi"]}'> hi</td></tr>
+</tbody></table>
+!! end
+
 !!test
 Templates: HTML Tables: 1. Generating start of a HTML table
 !! wikitext
@@ -10896,6 +11600,46 @@ Templates: Wiki Tables: 6. Templated tags, templated td-tags
 
 !!end
 
+## This test case is very specific to Parsoid's internals
+## and is hence only tested for Parsoid's code. Parsoid uses
+## a <meta> marker tag for <ref> tags and they are expanded
+## much later. We are verifying that this <meta> tag usage
+## doesn't prevent foster parenting.
+!!test
+Templates: Wiki Tables: 7. Fosterable <ref>s should get fostered
+!!wikitext
+{{PartialTable}}<ref>foo</ref>
+|}
+
+<references />
+!!html/parsoid
+<span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"PartialTable","href":"./Template:PartialTable"},"params":{},"i":0}},"&lt;ref>foo&lt;/ref>\n|}"]}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span><table about="#mwt2">
+<tbody>
+</tbody></table>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+!!end
+
+!! test
+Templates: Wiki Tables: 8. Fosterable meta-tags should get fostered
+!! wikitext
+{{echo|
+{{{!}}
+{{!}}-}}
+<onlyinclude>
+|foo
+</onlyinclude>
+{{!}}}
+!! html/parsoid
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"\n{{{!}}\n{{!}}-"}},"i":0}},"\n&lt;onlyinclude>\n|foo\n&lt;/onlyinclude>\n{{!}}}"]}'>
+</span><meta typeof="mw:Includes/OnlyInclude" about="#mwt1"/><table about="#mwt1">
+<tbody><tr>
+
+<td>foo
+<meta typeof="mw:Includes/OnlyInclude/End"/></td></tr>
+</tbody></table>
+!! end
+
 !!test
 Templates: Lists: Multi-line list-items via templates
 !! wikitext
@@ -11093,41 +11837,40 @@ Parser Functions: 2. Nested use (only outermost should be marked up)
 !! test
 pre-save transform: subst:
 !! options
-PST
+pst
 !! wikitext
 {{subst:test}}
-!! html
+!! html/php
 This is a test template
 !! end
 
 !! test
 pre-save transform: normal template
 !! options
-PST
+pst
 !! wikitext
 {{test}}
-!! html
+!! html/php
 {{test}}
 !! end
 
 !! test
 pre-save transform: nonexistent template
 !! options
-PST
+pst
 !! wikitext
 {{thistemplatedoesnotexist}}
-!! html
+!! html/php
 {{thistemplatedoesnotexist}}
 !! end
 
-
 !! test
 pre-save transform: subst magic variables
 !! options
-PST
+pst
 !! wikitext
 {{subst:SITENAME}}
-!! html
+!! html/php
 MediaWiki
 !! end
 
@@ -11138,7 +11881,7 @@ pre-save transform: subst: templates with parameters
 pst
 !! wikitext
 {{subst:paramtest|param="something else"}}
-!! html
+!! html/php
 This is a test template with parameter "something else"
 !! end
 
@@ -11154,11 +11897,10 @@ pre-save transform: nowiki in subst (bug 1188)
 pst
 !! wikitext
 {{subst:nowikitest}}
-!! html
+!! html/php
 <nowiki>'''not wiki'''</nowiki>
 !! end
 
-
 !! article
 Template:commenttest
 !! text
@@ -11171,7 +11913,7 @@ pre-save transform: comment in subst (bug 1936)
 pst
 !! wikitext
 {{subst:commenttest}}
-!! html
+!! html/php
 This template has <!-- a comment --> in it.
 !! end
 
@@ -11181,7 +11923,7 @@ pre-save transform: unclosed tag
 pst noxml
 !! wikitext
 <nowiki>'''not wiki'''
-!! html
+!! html/php
 <nowiki>'''not wiki'''
 !! end
 
@@ -11191,7 +11933,7 @@ pre-save transform: mixed tag case
 pst noxml
 !! wikitext
 <NOwiki>'''not wiki'''</noWIKI>
-!! html
+!! html/php
 <NOwiki>'''not wiki'''</noWIKI>
 !! end
 
@@ -11201,7 +11943,7 @@ pre-save transform: unclosed comment in <nowiki>
 pst noxml
 !! wikitext
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
-!! html
+!! html/php
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
 !!end
 
@@ -11229,7 +11971,7 @@ pre-save transform: comment containing gallery (bug 5024)
 pst
 !! wikitext
 <!-- <gallery>data</gallery> -->
-!! html
+!! html/php
 <!-- <gallery>data</gallery> -->
 !!end
 
@@ -11239,7 +11981,7 @@ pre-save transform: comment containing extension
 pst
 !! wikitext
 <!-- <tag>data</tag> -->
-!! html
+!! html/php
 <!-- <tag>data</tag> -->
 !!end
 
@@ -11249,7 +11991,7 @@ pre-save transform: comment containing nowiki
 pst
 !! wikitext
 <!-- <nowiki>data</nowiki> -->
-!! html
+!! html/php
 <!-- <nowiki>data</nowiki> -->
 !!end
 
@@ -11259,7 +12001,7 @@ pre-save transform: <noinclude> in subst (bug 3298)
 pst
 !! wikitext
 {{subst:Includes}}
-!! html
+!! html/php
 Foobar
 !! end
 
@@ -11269,7 +12011,7 @@ pre-save transform: <onlyinclude> in subst (bug 3298)
 pst
 !! wikitext
 {{subst:Includes2}}
-!! html
+!! html/php
 Foo
 !! end
 
@@ -11291,7 +12033,7 @@ bug 22297: safesubst: works during PST
 pst
 !! wikitext
 {{subst:SafeSubstTest}}{{safesubst:SubstTest}}
-!! html
+!! html/php
 FoobarFoobar
 !! end
 
@@ -11327,7 +12069,7 @@ pst
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 [[Bar:Article|Article]]
 [[:Bar:Article|Article]]
@@ -11348,7 +12090,7 @@ pst
 [[:interwiki:Article|]]
 [[interwiki:Bar:Article|]]
 [[:interwiki:Bar:Article|]]
-!! html
+!! html/php
 [[interwiki:Article|Article]]
 [[:interwiki:Article|Article]]
 [[interwiki:Bar:Article|Bar:Article]]
@@ -11361,7 +12103,7 @@ pre-save transform: context links ("pipe trick") with parens in title
 pst title=[[Somearticle (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 !! end
 
@@ -11373,7 +12115,7 @@ pst title=[[Someplace, Somewhere]]
 [[|Otherplace]]
 [[Otherplace, Elsewhere|]]
 [[Otherplace, Elsewhere, Anywhere|]]
-!! html
+!! html/php
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace, Elsewhere|Otherplace]]
 [[Otherplace, Elsewhere, Anywhere|Otherplace]]
@@ -11386,7 +12128,7 @@ pst title=[[Someplace (IGNORED), Somewhere]]
 !! wikitext
 [[|Otherplace]]
 [[Otherplace (place), Elsewhere|]]
-!! html
+!! html/php
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace (place), Elsewhere|Otherplace]]
 !! end
@@ -11398,7 +12140,7 @@ pst title=[[Who, me? (context)]]
 !! wikitext
 [[|Yes, you.]]
 [[Me, Myself, and I (1937 song)|]]
-!! html
+!! html/php
 [[Yes, you. (context)|Yes, you.]]
 [[Me, Myself, and I (1937 song)|Me, Myself, and I]]
 !! end
@@ -11409,7 +12151,7 @@ pre-save transform: context links ("pipe trick") with namespace
 pst title=[[Ns:Somearticle]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article|Article]]
 !! end
 
@@ -11419,7 +12161,7 @@ pre-save transform: context links ("pipe trick") with namespace and parens
 pst title=[[Ns:Somearticle (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -11429,7 +12171,7 @@ pre-save transform: context links ("pipe trick") with namespace and comma
 pst title=[[Ns:Somearticle, Context, Whatever]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article, Context, Whatever|Article]]
 !! end
 
@@ -11439,7 +12181,7 @@ pre-save transform: context links ("pipe trick") with namespace, comma and paren
 pst title=[[Ns:Somearticle, Context (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -11449,7 +12191,7 @@ pre-save transform: context links ("pipe trick") with namespace, parens and comm
 pst title=[[Ns:Somearticle (IGNORED), Context]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article, Context|Article]]
 !! end
 
@@ -11464,7 +12206,7 @@ pst
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! html
+!! html/php
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -11484,7 +12226,7 @@ pst
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 [[Bar:Article (context)|Article]]
 [[:Bar:Article (context)|Article]]
@@ -11504,7 +12246,7 @@ pst
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! html
+!! html/php
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -11524,7 +12266,7 @@ pst
 [[Bar:Article (context),context|]]
 [[:Bar:Article (context), context|]]
 [[:Bar:Article (context),context|]]
-!! html
+!! html/php
 [[Article (context), context|Article]]
 [[Article (context),context|Article]]
 [[Bar:Article (context), context|Article]]
@@ -11543,7 +12285,7 @@ Empty lines are trimmed
 
 
 
-!! html
+!! html/php
 Empty lines are trimmed
 !! end
 
@@ -11556,7 +12298,7 @@ pst
 * <noinclude>~~~</noinclude>
 * <includeonly>~~~</includeonly>
 * <onlyinclude>~~~</onlyinclude>
-!! html
+!! html/php
 * [[Special:Contributions/127.0.0.1|127.0.0.1]]
 * <noinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</noinclude>
 * <includeonly>[[Special:Contributions/127.0.0.1|127.0.0.1]]</includeonly>
@@ -11587,7 +12329,7 @@ As well as inside noinclude/onlyinclude
 
 But not inside includeonly
 <includeonly>{{subst:Foo}}</includeonly>
-!! html
+!! html/php
 Shall not expand:
 
 <nowiki>~~~~</nowiki>
@@ -11642,7 +12384,7 @@ parsoid=wt2html
 Parsoid: Escape nowiki with trailing space in tags
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>&lt;nowiki &gt; foo &lt/nowiki ></p>
 <p>a&lt;nowiki /&gt;b</p>
 <p>c&lt;nowiki/ &gt;d</p>
@@ -11658,7 +12400,7 @@ c&lt;nowiki/ &gt;d
 Parsoid: Escape weird noWikI capitalizations
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>&lt;noWikI &gt; foo &lt/NoWikI ></p>
 !! wikitext
 &lt;noWikI &gt; foo &lt;/NoWikI &gt;
@@ -11921,7 +12663,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -11932,7 +12674,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -11989,7 +12731,7 @@ thumbsize=220
 !! html/parsoid
 <p>123<span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span>456</p>
 <p>123</p><figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure><p>456</p>
-<p>123</p><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></figure><p>456</p>
+<p>123</p><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></figure><p>456</p>
 !! end
 
 !! test
@@ -12011,7 +12753,7 @@ Image with multiple widths -- use last
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" width="300" height="34" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></span></p>
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></span></p>
 !! end
 
 !! test
@@ -12027,7 +12769,7 @@ thumbsize=220
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" style="vertical-align: middle" /></a>
 </p>
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 <p><span class="mw-default-size mw-valign-middle" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
@@ -12043,9 +12785,9 @@ Image with width attribute at different positions
 <div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
 
 !! html/parsoid
-<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
-<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
-<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>Caption</figcaption></figure>
 !! end
 
 # a sad bit of backward-compatibility
@@ -12061,7 +12803,7 @@ parsoid=wt2html,wt2wt,html2html
 <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" width="177" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="2" width="20"/></a></span> <span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="177"/></a></span></p>
+<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="2" width="20"/></a></span> <span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="177"/></a></span></p>
 !! end
 
 !! test
@@ -12100,7 +12842,22 @@ Image with link parameter, protocol-less URL target
 !! end
 
 !! test
-Image with link parameter, wgExternalLinkTarget
+Escaping non-block captions (T107435)
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["[typeof~='mw:Image']", "attr", "data-mw", "{\"caption\": \"|\"}"]
+  ]
+}
+!! wikitext
+[[Image:Foobar.jpg|caption]]
+!! wikitext/edited
+[[Image:Foobar.jpg|<nowiki>|</nowiki>]]
+!! end
+
+!! test
+Image with link parameter, wgExternalLinkTarget
 !! wikitext
 [[Image:foobar.jpg|link=http://example.com/]]
 !! config
@@ -12187,7 +12944,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="http://example.com/"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Title</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="http://example.com/"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Title</figcaption></figure>
 !! end
 
 !! test
@@ -12287,8 +13044,6 @@ parsoid=wt2html,wt2wt,html2html
 
 !! test
 Image with wiki markup in implicit alt
-!! options
-parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[Image:Foobar.jpg|testing '''bold''' in alt]]
 
@@ -12298,8 +13053,8 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="testing bold in alt" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw="{&quot;caption&quot;:&quot;testing '''bold''' in alt&quot;}"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"testing &lt;b data-parsoid=\"{&amp;quot;dsr&amp;quot;:[27,37,3,3]}\">bold&lt;/b> in alt"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"Image:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="./File:Foobar.jpg"><img alt="testing bold in alt" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"testing bold in alt","resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=testing &#39;&#39;&#39;bold&#39;&#39;&#39; in alt","resource":"Image:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
@@ -12334,9 +13089,9 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
-<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -12372,15 +13127,15 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 ###################
 # Image sizing.
 # See https://www.mediawiki.org/wiki/Help:Images#Size_and_frame
-# and https://bugzilla.wikimedia.org/show_bug.cgi?id=62258
+# and https://phabricator.wikimedia.org/T64258
 # Foobar has actual size of 1941x220
 # 1. Thumbs & frameless always reduce, can't be enlarged unless it's
 #    a scalable format.
@@ -12401,8 +13156,8 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="2000" height="227" class="thumbborder" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
-<p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
+<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1941px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1941px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="227" width="2000"/></a></span></p>
 !! end
 
 !! test
@@ -12418,8 +13173,8 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" width="1000" height="113" class="thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg 1.5x, http://example.com/images/3/3a/Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
-<p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
+<p><span typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
+<p><span class="mw-image-border" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="113" width="1000"/></a></span></p>
 !! end
 
 !! test
@@ -12432,7 +13187,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:52px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div></div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></figure>
 !! end
 
 !! test
@@ -12448,8 +13203,8 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:2002px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div></div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1941px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/240px-Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></figure>
 !! end
 
 !! test
@@ -12462,7 +13217,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12478,8 +13233,8 @@ parsoid=wt2html,wt2wt,html2html
 </p><p><a href="/wiki/File:Foobar.svg" class="image"><img alt="Foobar.svg" src="http://example.com/images/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png" width="2000" height="1500" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
-<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/1941px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span typeof="mw:Image/Frameless"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/240px-Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="1500" width="2000"/></a></span></p>
 !! end
 
 !! test
@@ -12537,7 +13292,7 @@ Frameless image caption with a free URL
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="http://example.com"><img alt="http://example.com" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"http://example.com"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;a rel=\"mw:ExtLink\" href=\"http://example.com\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;url&amp;quot;,&amp;quot;dsr&amp;quot;:[18,36,0,0]}\">http://example.com&lt;/a>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12550,7 +13305,7 @@ thumbsize=220
 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
 !! end
 
 !! test
@@ -12564,7 +13319,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Alteration" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img alt="Alteration" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img alt="Alteration" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
 !! end
 
 !! test
@@ -12576,7 +13331,7 @@ SVG thumbnails with no language set
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/220px-Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12589,7 +13344,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=File:Foobar.svg&amp;lang=de" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/220px-Foobar.svg" lang="de" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12613,7 +13368,7 @@ BUG 1887: A ISBN with a thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a href="/wiki/Special:BookSources/1235467890" class="internal mw-magiclink-isbn">ISBN 1235467890</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="Special:BookSources/1235467890" rel="mw:ExtLink">ISBN 1235467890</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/1235467890" rel="mw:WikiLink">ISBN 1235467890</a></figcaption></figure>
 !! end
 
 !! test
@@ -12624,7 +13379,7 @@ BUG 1887: A RFC with a thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="//tools.ietf.org/html/rfc12354" rel="mw:ExtLink">RFC 12354</a></figcaption></figure>
 !! end
 
 !! test
@@ -12635,7 +13390,7 @@ BUG 1887: A mailto link with a thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Please <a rel="nofollow" class="external free" href="mailto:nobody@example.com">mailto:nobody@example.com</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>Please <a rel="mw:ExtLink" href="mailto:nobody@example.com">mailto:nobody@example.com</a></figcaption></figure>
 !! end
 
 # Pending resolution to bug 368
@@ -12647,7 +13402,7 @@ BUG 648: Frameless image caption with a link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[30,38,2,2]}\">link&lt;/a> in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12658,7 +13413,7 @@ BUG 648: Frameless image caption with a link (suffix)
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a linkfoo in it"><img alt="text with a linkfoo in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[link]]foo in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a &lt;a rel=\"mw:WikiLink\" href=\"./Link\" title=\"Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;link&amp;quot;},&amp;quot;dsr&amp;quot;:[30,41,2,5],&amp;quot;tail&amp;quot;:&amp;quot;foo&amp;quot;}\">linkfoo&lt;/a> in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12669,7 +13424,7 @@ BUG 648: Frameless image caption with an interwiki link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a MeatBall:Link in it"><img alt="text with a MeatBall:Link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a &lt;a rel=\"mw:ExtLink\" href=\"http://www.usemod.com/cgi-bin/mb.pl?Link\" title=\"meatball:Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;http://www.usemod.com/cgi-bin/mb.pl?Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;MeatBall:Link&amp;quot;},&amp;quot;isIW&amp;quot;:true,&amp;quot;dsr&amp;quot;:[30,47,2,2]}\">MeatBall:Link&lt;/a> in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12680,7 +13435,15 @@ BUG 648: Frameless image caption with a piped interwiki link
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="text with a link in it"><img alt="text with a link in it" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a [[MeatBall:Link|link]] in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"text with a &lt;a rel=\"mw:ExtLink\" href=\"http://www.usemod.com/cgi-bin/mb.pl?Link\" title=\"meatball:Link\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;piped&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;http://www.usemod.com/cgi-bin/mb.pl?Link&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;MeatBall:Link&amp;quot;},&amp;quot;isIW&amp;quot;:true,&amp;quot;dsr&amp;quot;:[30,52,16,2]}\">link&lt;/a> in it"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+!! end
+
+!! test
+T107474: Frameless image caption with <nowiki>
+!! wikitext
+[[File:Foobar.jpg|<nowiki>text with a [[MeatBall:Link|link]] in it</nowiki>]]
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;span typeof=\"mw:Nowiki\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[18,75,8,9]}\">text with a [[MeatBall:Link|link]] in it&lt;/span>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12691,7 +13454,7 @@ Escape HTML special chars in image alt text
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="&amp; &lt; &gt; &quot;"><img alt="&amp; &lt; &gt; &quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp; &lt; > \""}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;amp; &amp;lt; &amp;gt; \""}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12702,7 +13465,7 @@ BUG 499: Alt text should have &#1234;, not &amp;1234;
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="♀"><img alt="♀" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&amp;#9792;"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;span typeof=\"mw:Entity\" data-parsoid=\"{&amp;quot;src&amp;quot;:&amp;quot;&amp;amp;#9792;&amp;quot;,&amp;quot;srcContent&amp;quot;:&amp;quot;♀&amp;quot;,&amp;quot;dsr&amp;quot;:[18,25,null,null]}\">♀&lt;/span>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -12726,7 +13489,7 @@ Image caption containing another image
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption with another <a href="/wiki/File:Thumb.png" class="image" title="image"><img alt="image" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" /></a> inside it!</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="./File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a></span> inside it!</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is a caption with another <span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"image"}'><a href="./File:Thumb.png"><img resource="./File:Thumb.png" src="//example.com/images/e/ea/Thumb.png" data-file-width="135" data-file-height="135" data-file-type="bitmap" height="135" width="135"/></a></span> inside it!</figcaption></figure>
 !! end
 
 !! test
@@ -12750,7 +13513,7 @@ Image: caption containing leading space
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>bar</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> bar</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> bar</figcaption></figure>
 !!end
 
 !! test
@@ -12769,7 +13532,7 @@ and some more text.]]
 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is an example image thumbnail caption with a table <table> <tr> <th> Foo </th> <th> Bar </th></tr> <tr> <td> Foo1 </td> <td> Bar1 </td></tr></table> and some more text.</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This is an example image thumbnail caption with a table
 <table>
 <tbody>
 <tr><th>Foo </th><th>Bar</th></tr>
@@ -12786,7 +13549,7 @@ Bug 3090: External links other than http: in image captions
 <div class="thumb tright"><div class="thumbinner" style="width:202px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This caption has <a rel="nofollow" class="external text" href="irc://example.net">irc</a> and <a rel="nofollow" class="external text" href="https://example.com">Secure</a> ext links in it.</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has <a rel="mw:ExtLink" href="irc://example.net">irc</a> and <a rel="mw:ExtLink" href="https://example.com">Secure</a> ext links in it.</figcaption></figure>
 !! end
 
 !! test
@@ -12828,7 +13591,7 @@ language=es
 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="Foo"><img resource="./Archivo:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12842,7 +13605,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size mw-image-border extra" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a></span></p>
 !! end
 
 # Note that 'right' is the default alignment, despite the misspelled 'righ' below
@@ -12863,9 +13626,9 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! article
@@ -12910,7 +13673,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
 !! wikitext
 [[File:Foobar.jpg|middle|50px]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12921,7 +13684,7 @@ parsoid=wt2wt,wt2html,html2html
 !! wikitext
 [[Image:Foobar.jpg|middle|50px]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12930,7 +13693,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
 !! wikitext
 [[File:Foobar.jpg|50px|middle]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span class="mw-valign-middle" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"width","ak":"50px"},{"ck":"middle","ak":"middle"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
@@ -12941,7 +13704,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[Image:Foobar.jpg|50px|middle]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a></span></p>
 !! end
 
 !! test
@@ -12965,7 +13728,7 @@ Parsoid-specific image handling - thumbnail with halign, valign, and caption
 !! wikitext
 [[File:Foobar.jpg|left|baseline|thumb|caption content]]
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption content</figcaption></figure>
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
@@ -12974,7 +13737,7 @@ Parsoid-specific image handling - thumbnail with halign, valign, and caption
 !! wikitext
 [[File:Foobar.jpg|thumb|left|baseline|caption content]]
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
@@ -12982,7 +13745,7 @@ Parsoid-specific image handling - thumbnail with specific size, halign, valign,
 !! wikitext
 [[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -13029,7 +13792,7 @@ Parsoid-specific image handling - simple image with a formatted caption
 !! wikitext
 [[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[18,81,7,8]}\">&lt;tbody data-parsoid=\"{&amp;quot;dsr&amp;quot;:[25,73,0,0]}\">&lt;tr data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[25,54,4,5]}\">&lt;td data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[29,39,4,5]}\">a&lt;/td>&lt;td data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[39,49,4,5]}\">b&lt;/td>&lt;/tr>&lt;tr data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[54,73,4,5]}\">&lt;td data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;dsr&amp;quot;:[58,68,4,5]}\">c&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></span></p>
 !! end
 
 !! test
@@ -13050,7 +13813,7 @@ foo
 bar
 !! html/parsoid
 <p>foo</p>
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="23" width="200"/></a><figcaption>This caption has a <center>unbalanced tag in it.</center></figcaption></figure>
 <p>bar</p>
 !! end
 
@@ -13061,7 +13824,7 @@ parsoid=wt2html,wt2wt
 !! wikitext
 [[File:Foobar.jpg|thumb|]]
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption></figcaption></figure>
 !! end
 
 # empty captions don't get serialized unless we're in the "round trip" case
@@ -13088,7 +13851,7 @@ Parsoid-specific image handling - whitespace caption
 !! wikitext
 [[File:Foobar.jpg|thumb| ]]
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> </figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption> </figcaption></figure>
 !! end
 
 !! test
@@ -13103,6 +13866,42 @@ bar
 bar</p>
 !! end
 
+## Edge case bugs in Parsoid from T93580
+!! test
+T93580: 1. Templated <ref> inside block images
+!! wikitext
+[[File:Foobar.jpg|thumb|Caption with templated ref: {{echo|<ref>foo</ref>}}]]
+
+<references />
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption with templated ref: {{echo|&lt;ref>foo&lt;/ref>}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption with templated ref: <span about="#mwt5" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo&lt;/ref>"}},"i":0}}]}'><a href="#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></figcaption></figure>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
+!! test
+T93580: 2. <ref> inside inline images
+!! wikitext
+[[File:Foobar.jpg|Undisplayed caption in inline image with ref: <ref>foo</ref>]]
+
+<references />
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,78,5,6]}\" data-mw=\"{&amp;quot;name&amp;quot;:&amp;quot;ref&amp;quot;,&amp;quot;body&amp;quot;:{&amp;quot;id&amp;quot;:&amp;quot;mw-reference-text-cite_note-1&amp;quot;},&amp;quot;attrs&amp;quot;:{}}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,78,5,6],&amp;quot;tmp&amp;quot;:{}}\" data-mw=\"{}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
+!! test
+T93580: 3. Templated <ref> inside inline images
+!! wikitext
+[[File:Foobar.jpg|Undisplayed caption in inline image with ref: {{echo|<ref>{{echo|foo}}</ref>}}]]
+
+<references />
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=\"{&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">&lt;a href=\"#cite_note-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=\"{&amp;quot;group&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;foo&amp;quot;,&amp;quot;hasRefInRef&amp;quot;:false,&amp;quot;dsr&amp;quot;:[64,96,null,null],&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;tmp&amp;quot;:{}}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;&lt;ref>{{echo|foo}}&lt;/ref>&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
 
 ###
 ### Subpages
@@ -13435,6 +14234,152 @@ Bar
 </p>
 !! end
 
+## The whitespace on the empty line is part of the test. Please do not delete
+!! test
+1. Categories and newlines: All preceding newlines should be suppressed (courtesy bug 87)
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+This
+   
+[[Category:Foo]] and this should be part of same paragraph (not an indent-pre)
+   
+{{echo|[[Category:Foo]] and so should this!}}
+!! html
+<p>This and this should be part of same paragraph (not an indent-pre) and so should this!
+</p>
+!! html/parsoid
+<p>This
+   
+<link rel="mw:PageProp/Category" href="./Category:Foo"/> and this should be part of same paragraph (not an indent-pre)
+   
+<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]] and so should this!"}},"i":0}}]}'/><span about="#mwt1"> and so should this!</span></p>
+!! end
+
+## Parsoid will not try to wt2wt this while preserving newlines because
+## it suppresses excess newlines within list items -- and we don't want to
+## introduce a special case just for categories, which is, in reality somewhat
+## odd behavior -- categories are unlikely to be used in list items like this
+## in top-level pages and are only likely to show up in template-generated
+## list items where this RT-ing is a non-issue.
+##
+## The whitespace on the empty line is part of the test. Please do not delete
+!! test
+2. Categories and newlines: All preceding newlines should be suppressed (courtesy bug 87)
+!! options
+parsoid=wt2html
+!! wikitext
+* This
+   
+[[Category:Foo]] and this should be part of the same list item
+* So should this
+
+{{echo|[[Category:Foo]] and this should be part of the same list item}}
+!! html
+<ul><li>This and this should be part of the same list item</li>
+<li>So should this and this should be part of the same list item</li></ul>
+!! html/parsoid
+<ul>
+<li>This <link rel="mw:PageProp/Category" href="./Category:Foo"/> and this should be part of the same list item</li>
+<li>So should this <link rel="mw:PageProp/Category" href="./Category:Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]] and this should be part of the same list item"}},"i":0}}]}'/><span> and this should be part of the same list item</span></li>
+</ul>
+!! end
+
+## Newlines and categories that follow the last item of a list
+## are treated differently because this (list followed by categories)
+## is an extremely common pattern on wikis.
+!! test
+3. Categories and newlines: newline suppression for last list item should RT properly
+!! wikitext
+* a
+* b 
+   
+[[Category:Foo]]
+   
+[[Category:Bar]]
+[[Category:Baz]]
+!! html/parsoid
+<ul><li> a</li>
+<li> b</li></ul> 
+   
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
+   
+<link rel="mw:PageProp/Category" href="./Category:Bar" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
+<link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
+!! end
+
+!! test
+4. Categories and newlines: newline suppression for last list item should RT properly
+!! wikitext
+* a
+**** b
+
+[[Category:Foo]]
+!! html/parsoid
+<ul><li> a
+<ul><li><ul><li><ul><li> b</li></ul></li></ul></li></ul></li></ul>
+
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
+!! end
+
+## only wt2html for this to make sure the algo only applies to the rightmost path
+!! test
+5. Categories and newlines: migrateTrailingCategories dom pass should only run on the rightmost path of nested lists
+!! options
+parsoid=wt2html
+!! wikitext
+* a
+** b
+[[Category:Foo]]
+* c
+** d
+[[Category:Foo]]
+!! html/parsoid
+<ul><li> a
+<ul><li> b
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul></li>
+<li> c
+<ul><li> d</li></ul></li></ul>
+<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
+!! end
+
+!! test
+6. Categories and newlines: migrateTrailingCategories dom pass should not migrate categories not preceded by newlines
+!! wikitext
+* a [[Category:Foo]]
+!! html/parsoid
+<ul><li>a <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
+!! end
+
+# This test also demonstrates because of newline+category tunneling
+# through the list hander, template wrapping doesn't expand to the
+# containing list when the list item swallows the category.
+!! test
+7. Categories and newlines: migrateTrailingCategories dom pass should leave template content alone
+!! wikitext
+* {{echo|a
+[[Category:Foo]]}}
+!! html/parsoid
+<ul><li> <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a</span><span about="#mwt1">
+</span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
+!! end
+
+!! test
+8. Categories and newlines: migrateTrailingCategories dom pass should not get tripped by intervening templates
+!! wikitext
+* a
+
+{{echo|[[Category:Foo]]
+[[Category:Bar]]}}
+[[Category:Baz]]
+!! html/parsoid
+<ul><li> a</li></ul>
+
+<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
+</span><link rel="mw:PageProp/Category" href="./Category:Bar" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
+<link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
+!! end
+
 !! test
 Parsoid: Serialize link to category page with colon escape
 !! options
@@ -13445,20 +14390,26 @@ parsoid
 [[:Category:Foo|Bar]]
 !! html
 <p>
-<a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Category:Foo</a>
-<a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Bar</a>
+<a rel="mw:WikiLink" href="./Category:Foo" title="Category:Foo">Category:Foo</a>
+<a rel="mw:WikiLink" href="./Category:Foo" title="Category:Foo">Bar</a>
 </p>
 !! end
 
+# html2wt localizes the "Category" namespace.
+# XXX the <link> element needs an empty data-parsoid attribute, or
+# else the html2html test fails because spaces are inserted.
 !! test
-Parsoid: Link prefix/suffixes aren't applied to category links
+Link prefix/suffixes aren't applied to category links
 !! options
 parsoid=wt2html,wt2wt,html2html
 language=is
 !! wikitext
 x[[Category:Foo]]y
-!! html
-<p>x<link rel="mw:PageProp/Category" href="Category:Foo">y</p>
+!! html/php
+<p>xy
+</p>
+!! html/parsoid
+<p>x<link rel="mw:PageProp/Category" href="./Flokkur:Foo" data-parsoid=""/>y</p>
 !! end
 
 !! test
@@ -13484,15 +14435,15 @@ parsoid
 [[Category:Foo]]
 [[Category:Foo|Bar]]
 !! html
-<link rel="mw:PageProp/Category" href="Category:Foo">
-<link rel="mw:PageProp/Category" href="Category:Foo#Bar">
+<link rel="mw:PageProp/Category" href="./Category:Foo">
+<link rel="mw:PageProp/Category" href="./Category:Foo#Bar">
 !! end
 
 !! test
 Normalize hrefs properly before testing for invalid link targets (bug 70894)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
 !! wikitext
 [[Category:Toxine bactérienne]]
@@ -13630,7 +14581,7 @@ __FORCETOC__
 == Headline ==
 == Headline 2 ==
 == Headline ==
-!! html
+!! html/php
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Headline_2"><span class="tocnumber">1</span> <span class="toctext">Headline 2</span></a></li>
@@ -13744,6 +14695,22 @@ TOC regression (T11764)
 
 !! end
 
+!! test
+TOC for heading containing <span id="..."></span> (T96153)
+!! wikitext
+__FORCETOC__
+==<span id="old-anchor"></span>New title==
+!! html/php
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#New_title"><span class="tocnumber">1</span> <span class="toctext">New title</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="New_title"><span id="old-anchor"></span>New title</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: New title">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+
+!! end
+
 !! test
 TOC with wgMaxTocLevel=3 (bug 6204)
 !! options
@@ -14376,11 +15343,8 @@ I always thought &xacute; was a cute letter.
 </p>
 !! end
 
-# TODO: generalize to PHP parser?
 !! test
 HTML5 tags
-!! options
-parsoid
 !! wikitext
 <data value="5">five</data>
 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
@@ -14388,7 +15352,8 @@ parsoid
 !! html
 <p><data value="5">five</data>
 <time datetime="2000-01-01T00:00Z">The new millenium started</time>
-<mark>This highlighted text</mark></p>
+<mark>This highlighted text</mark>
+</p>
 !! end
 
 !! test
@@ -14628,13 +15593,19 @@ Attribute test: unquoted but illegal value (hash)
 </p>
 !! end
 
+# Parsoid does not serialize to empty attribute syntax,
+# so wt2wt and html2wt cases are skipped
 !! test
-Attribute test: no value
+Attribute test: no value (T54330)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 <font color>foo</font>
-!! html
-<p><font color="color">foo</font>
+!! html/php
+<p><font color="">foo</font>
 </p>
+!! html/parsoid
+<p><font color="">foo</font></p>
 !! end
 
 !! test
@@ -14932,6 +15903,7 @@ MSIE 6 CSS safety test: sup/sub script (bug 55332)
 
 !! end
 
+# FIXME: Parsoid fails to sanitize this! See T58846.
 !! test
 Opera -o-link CSS
 !! wikitext
@@ -15006,7 +15978,7 @@ CSS line continuation 2
 !! wikitext
 <div style="background-image: u\&#13;rl(test.jpg); "></div>
 !! html
-<div style="/* insecure input */"></div>
+<div style="/* invalid control char */"></div>
 
 !! end
 
@@ -15063,7 +16035,7 @@ evil <math>-wiki-tags without Extension:Math enabled
 Parser hook: empty input
 !! wikitext
 <tag></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
@@ -15076,7 +16048,7 @@ array (
 Parser hook: empty input using terminated empty elements
 !! wikitext
 <tag/>
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15089,7 +16061,7 @@ array (
 Parser hook: empty input using terminated empty elements (space before)
 !! wikitext
 <tag />
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15102,7 +16074,7 @@ array (
 Parser hook: basic input
 !! wikitext
 <tag>input</tag>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15116,7 +16088,7 @@ array (
 Parser hook: case insensitive
 !! wikitext
 <TAG>input</TAG>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15130,7 +16102,7 @@ array (
 Parser hook: case insensitive, redux
 !! wikitext
 <TaG>input</TAg>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15145,7 +16117,7 @@ Parser hook: nested tags
 noxml
 !! wikitext
 <tag><tag></tag></tag>
-!! html
+!! html/php
 <pre>
 '<tag>'
 array (
@@ -15158,14 +16130,14 @@ array (
 Parser hook: basic arguments
 !! wikitext
 <tag width=200 height = "100" depth = '50' square></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
   'width' => '200',
   'height' => '100',
   'depth' => '50',
-  'square' => 'square',
+  'square' => '',
 )
 </pre>
 
@@ -15175,7 +16147,7 @@ array (
 Parser hook: argument containing a forward slash (bug 5344)
 !! wikitext
 <tag filename='/tmp/bla'></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
@@ -15189,7 +16161,7 @@ array (
 Parser hook: empty input using terminated empty elements (bug 2374)
 !! wikitext
 <tag foo=bar/>text
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15206,14 +16178,14 @@ Parser hook: basic arguments using terminated empty elements (bug 2374)
 <tag width=200 height = "100" depth = '50' square/>
 other stuff
 </tag>
-!! html
+!! html/php
 <pre>
 NULL
 array (
   'width' => '200',
   'height' => '100',
   'depth' => '50',
-  'square' => 'square',
+  'square' => '',
 )
 </pre>
 <p>other stuff
@@ -15230,7 +16202,7 @@ Parser hook: static parser hook not inside a comment
 !! wikitext
 <statictag>hello, world</statictag>
 <statictag action=flush/>
-!! html
+!! html/php
 <p>hello, world
 </p>
 !! end
@@ -15241,7 +16213,7 @@ Parser hook: static parser hook inside a comment
 !! wikitext
 <!-- <statictag>hello, world</statictag> -->
 <statictag action=flush/>
-!! html
+!! html/php
 <p><br />
 </p>
 !! end
@@ -15300,20 +16272,24 @@ Sanitizer: Closing of open but not closed tags
 
 !! test
 Sanitizer: Closing of closed but not open tags
+!! options
+parsoid=wt2html
 !! wikitext
 </s>
-!! html
-<p>&lt;/s&gt;
-</p>
+!! html/php+tidy
+!! html/parsoid
 !! end
 
 !! test
 Sanitizer: Closing of closed but not open table tags
+!! options
+parsoid=wt2html
 !! wikitext
 Table not started</td></tr></table>
-!! html
-<p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
-</p>
+!! html/php+tidy
+<p>Table not started</p>
+!! html/parsoid
+<p>Table not started</p>
 !! end
 
 !! test
@@ -15360,7 +16336,7 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
        <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
 </div>
 !! html
-<div itemscope="itemscope">
+<div itemscope="">
 <p>    <meta itemprop="hello" content="world" />
        &lt;meta http-equiv="refresh" content="5"&gt;
        <meta itemprop="hello" content="5" />
@@ -16112,7 +17088,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 !! end
 
@@ -16132,7 +17108,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==a==
 ===aa===
 ====aaa====
@@ -16154,7 +17130,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===aa===
 ====aaa====
 !! end
@@ -16175,7 +17151,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ====aaa====
 !! end
 
@@ -16195,7 +17171,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==b==
 ===ba===
 ===bb===
@@ -16219,7 +17195,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===ba===
 !! end
 
@@ -16239,7 +17215,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===bb===
 ====bba====
 !! end
@@ -16260,7 +17236,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ====bba====
 !! end
 
@@ -16280,7 +17256,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===bc===
 !! end
 
@@ -16300,7 +17276,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==c==
 ===ca===
 !! end
@@ -16321,7 +17297,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===ca===
 !! end
 
@@ -16341,7 +17317,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 !! end
 
 !! test
@@ -16352,7 +17328,7 @@ section=1
 ==a==
 ==bogus== not a legal section
 ==b==
-!! html
+!! html/php
 ==a==
 ==bogus== not a legal section
 !! end
@@ -16365,7 +17341,7 @@ section=2
 ==a==
 ==bogus== not a legal section
 ==b==
-!! html
+!! html/php
 ==b==
 !! end
 
@@ -16377,7 +17353,7 @@ section=1
 ==a==
 ==b== <!-- -->
 ==c==
-!! html
+!! html/php
 ==a==
 !! end
 
@@ -16389,7 +17365,7 @@ section=2
 ==a==
 ==b== <!-- -->
 ==c==
-!! html
+!! html/php
 ==b== <!-- -->
 !! end
 
@@ -16401,7 +17377,7 @@ section=1
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! html
+!! html/php
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 !! end
@@ -16414,11 +17390,10 @@ section=2
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! html
+!! html/php
 ==b==
 !! end
 
-
 # Formerly testing for bug 2587, now resolved by the use of unmarked sections
 # instead of respecting commented sections
 !! test
@@ -16428,7 +17403,7 @@ section=1
 !! wikitext
 <!-- -->==sec1==
 ==sec2==
-!! html
+!! html/php
 ==sec2==
 !!end
 
@@ -16439,11 +17414,10 @@ section=2
 !! wikitext
 <!-- -->==sec1==
 ==sec2==
-!! html
+!! html/php
 
 !!end
 
-
 # Formerly testing for bug 2607, now resolved by the use of unmarked sections
 # instead of respecting HTML-style headings
 !! test
@@ -16457,7 +17431,7 @@ unmarked
 one
 ==2==
 two
-!! html
+!! html/php
 ==1==
 one
 !! end
@@ -16473,7 +17447,7 @@ unmarked
 one
 ==2==
 two
-!! html
+!! html/php
 ==2==
 two
 !! end
@@ -16487,7 +17461,7 @@ section=1
 !! wikitext
 <noinclude>==unmarked==</noinclude>
 ==marked==
-!! html
+!! html/php
 ==marked==
 !!end
 
@@ -16502,7 +17476,7 @@ The line above must have a trailing space
 === <!--
 --> <!-- -->
 But just in case it doesn't...
-!! html
+!! html/php
 === <!--
 --> <!-- -->
 But just in case it doesn't...
@@ -16524,7 +17498,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 xxx
 
 ==a==
@@ -16555,7 +17529,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 xxx
 
@@ -16584,7 +17558,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 xxx
@@ -16614,7 +17588,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16645,7 +17619,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16672,7 +17646,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16703,7 +17677,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16733,7 +17707,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16764,7 +17738,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16795,7 +17769,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16824,7 +17798,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -16846,7 +17820,7 @@ replace=2,"xxx"
  Preformatted initial line
 ==a==
 ===a===
-!! html
+!! html/php
  Preformatted initial line
 ==a==
 xxx
@@ -16860,7 +17834,7 @@ section=1
 !! wikitext
 ==a==
                     a
-!! html
+!! html/php
 ==a==
                     a
 !! end
@@ -16872,7 +17846,7 @@ section=1
 !! wikitext
 ==a==
                    a
-!! html
+!! html/php
 ==a==
                    a
 !! end
@@ -16890,7 +17864,7 @@ noxml section=2
 
 == Section Two ==
 stuff
-!! html
+!! html/php
 == Section Two ==
 stuff
 !! end
@@ -16907,7 +17881,7 @@ noxml replace=2,"xxx"
 
 == Section Two ==
 stuff
-!! html
+!! html/php
 == Section One ==
 <pre>
 =======
@@ -16917,7 +17891,6 @@ xxx
 !! end
 
 
-
 !! test
 Handling of &#x0A; in URLs
 !! wikitext
@@ -17338,12 +18311,44 @@ parsoid=wt2html,wt2wt,html2html
 <p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
 !! end
 
+# See: http://www.w3.org/TR/html5/syntax.html#character-references
+# Note that U+000C (form feed) is not a valid XML character, so
+# it is banned even though allowed in HTML5.
+!! test
+Illegal character references (T106578)
+!! wikitext
+; Null: &#00;
+; FF: &#xC;
+; CR: &#xD;
+; Control (low): &#8;
+; Control (high): &#x7F; &#x9F;
+; Surrogate: &#xD83D;&#xDCA9;
+; This is an okay astral character: &#x1F4A9;
+!! html+tidy
+<dl>
+<dt>Null</dt>
+<dd>&amp;#00;</dd>
+<dt>FF</dt>
+<dd>&amp;#xC;</dd>
+<dt>CR</dt>
+<dd>&amp;#xD;</dd>
+<dt>Control (low)</dt>
+<dd>&amp;#8;</dd>
+<dt>Control (high)</dt>
+<dd>&amp;#x7F; &amp;#x9F;</dd>
+<dt>Surrogate</dt>
+<dd>&amp;#xD83D;&amp;#xDCA9;</dd>
+<dt>This is an okay astral character</dt>
+<dd>💩</dd>
+</dl>
+!! end
+
 !! test
 __FORCETOC__ override
 !! wikitext
 __NEWSECTIONLINK__
 __FORCETOC__
-!! html
+!! html/php
 <p><br />
 </p>
 !! end
@@ -17358,7 +18363,7 @@ ISBN  978-0-1234-56&#x20;789
 !! html+tidy
 <p><a href="/wiki/Special:BookSources/9780123456" class="internal mw-magiclink-isbn">ISBN 978-0-1234-56</a> 789</p>
 !! html/parsoid
-<p><a href="./Special:BookSources/9780123456" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
+<p><a href="./Special:BookSources/9780123456" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978-0-1234-56</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>789</p>
 !! end
 
 !! test
@@ -17378,24 +18383,34 @@ ISBN ISBN 1234567890
 <p>ISBN <a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p>
 !! html/parsoid
-<p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
+<p>ISBN <a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a></p>
 !! end
 
+# Uppercase X and lowercase x as well
 !! test
 ISBN with an X
 !! wikitext
 ISBN 3-462-04561-X
+ISBN 3-462-04561-x
 ISBN 080442957X
+ISBN 080442957x
 ISBN 978080442957X
+ISBN 978080442957x
 !! html/php
 <p><a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-X</a>
+<a href="/wiki/Special:BookSources/346204561X" class="internal mw-magiclink-isbn">ISBN 3-462-04561-x</a>
 <a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957X</a>
+<a href="/wiki/Special:BookSources/080442957X" class="internal mw-magiclink-isbn">ISBN 080442957x</a>
 <a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957X</a>
+<a href="/wiki/Special:BookSources/978080442957X" class="internal mw-magiclink-isbn">ISBN 978080442957x</a>
 </p>
 !! html/parsoid
-<p><a href="./Special:BookSources/346204561X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
-<a href="./Special:BookSources/080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
-<a href="./Special:BookSources/978080442957X" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a></p>
+<p><a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-X</a>
+<a href="./Special:BookSources/346204561X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 3-462-04561-x</a>
+<a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957X</a>
+<a href="./Special:BookSources/080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 080442957x</a>
+<a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957X</a>
+<a href="./Special:BookSources/978080442957X" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 978080442957x</a></p>
 !! end
 
 !! test
@@ -17406,7 +18421,7 @@ ISBN 1234567890
 <p><a href="/wiki/Special:BookSources/1234567890" class="internal mw-magiclink-isbn">ISBN 1234567890</a>
 </p>
 !! html/parsoid
-<p><a href="Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567890</a></p>
+<p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink">ISBN 1234567890</a></p>
 !! end
 
 !! test
@@ -17417,7 +18432,7 @@ Bug 22905: <abbr> followed by ISBN followed by </a>
 <p><abbr>(fr)</abbr> <a href="/wiki/Special:BookSources/2753300917" class="internal mw-magiclink-isbn">ISBN 2753300917</a> <a rel="nofollow" class="external text" href="http://www.example.com">example.com</a>
 </p>
 !! html/parsoid
-<p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
+<p><abbr data-parsoid='{"stx":"html"}'>(fr)</abbr> <a href="./Special:BookSources/2753300917" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 2753300917</a> <a rel="mw:ExtLink" href="http://www.example.com">example.com</a></p>
 !! end
 
 !! test
@@ -17548,7 +18563,7 @@ Images with the "|" character in the comment
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
 !! end
 
 !! test
@@ -17704,7 +18719,7 @@ Don't fall for the self-closing div
 MSGNW magic word
 !! wikitext
 {{MSGNW:msg}}
-!! html
+!! html/php
 <p>&#91;&#91;:Template:Msg&#93;&#93;
 </p>
 !! end
@@ -19093,7 +20108,7 @@ percent-encoding and + signs in comments (Bug 26410)
 comment
 !! wikitext
 [[ABC%33D% ++]] [[ABC%33D% ++|+%20]]
-!! html
+!! html/php
 <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
 !! end
 
@@ -19137,7 +20152,7 @@ wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=false
 !! wikitext
 this is not the the title
-!! html
+!! html/php
 Parser test
 <p>this is not the the title
 </p>
@@ -19154,7 +20169,7 @@ wgRestrictDisplayTitle=false
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! html
+!! html/php
 whatever
 <p>this is not the the title
 </p>
@@ -19171,7 +20186,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 </p>
@@ -19188,7 +20203,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! html
+!! html/php
 screen
 <p>this is not the the title
 </p>
@@ -19204,7 +20219,7 @@ wgAllowDisplayTitle=false
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 <a href="/index.php?title=Template:DISPLAYTITLE:screen&amp;action=edit&amp;redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
@@ -19220,7 +20235,7 @@ title=[[Screen]]
 wgAllowDisplayTitle=false
 !! wikitext
 this is not the the title
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 </p>
@@ -19237,7 +20252,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
-!! html
+!! html/php
 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
 <p>this is not the the title
 </p>
@@ -19254,7 +20269,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
-!! html
+!! html/php
 <span style="color: red;">s</span>creen
 <p>this is not the the title
 </p>
@@ -19279,7 +20294,7 @@ Page status indicators: Weird syntaxes that are okay
 showindicators
 !! wikitext
 <indicator name="empty" />
-<indicator name></indicator>
+<indicator name="name"></indicator>
 !! html
 empty=
 name=
@@ -19342,7 +20357,7 @@ preload: check <noinclude> and <includeonly>
 preload
 !! wikitext
 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
-!! html
+!! html/php
 Hello kind world.
 !! end
 
@@ -19352,7 +20367,7 @@ preload: check <onlyinclude>
 preload
 !! wikitext
 Goodbye <onlyinclude>Hello world</onlyinclude>
-!! html
+!! html/php
 Hello world
 !! end
 
@@ -19362,7 +20377,7 @@ preload: can pass tags through if we want to
 preload
 !! wikitext
 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
-!! html
+!! html/php
 <includeonly>Hello world</includeonly>
 !! end
 
@@ -19372,7 +20387,7 @@ preload: check that it doesn't try to do tricks
 preload
 !! wikitext
 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
-!! html
+!! html/php
 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
 !! end
 
@@ -19423,7 +20438,10 @@ percent-encoding and + signs in internal links (Bug 26410)
 <a href="/index.php?title=3E&amp;action=edit&amp;redlink=1" class="new" title="3E (page does not exist)">3E</a> <a href="/index.php?title=3E%2B&amp;action=edit&amp;redlink=1" class="new" title="3E+ (page does not exist)">3E+</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="User:+%" title="User:+%">User:+%</a> <a rel="mw:WikiLink" href="Page+title%" title="Page+title%">Page+title%</a> <a rel="mw:WikiLink" href="%+" title="%+">%+</a> <a rel="mw:WikiLink" href="%+" title="%+">%20</a> <a rel="mw:WikiLink" href="%+" title="%+">%+ </a> <a rel="mw:WikiLink" href="%+r" title="%+r">%+r</a> <a rel="mw:WikiLink" href="%" title="%">%</a> <a rel="mw:WikiLink" href="+" title="+">+</a> <span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"[[bar]]"}'><a href="./File:%+abc9"><img resource="./File:%25+abc9" src="./Special:FilePath/%+abc9" height="220" width="220"/></a></span> <a rel="mw:WikiLink" href="3E" title="3E">3E</a> <a rel="mw:WikiLink" href="3E+" title="3E+">3E+</a></p>
+<p><a rel="mw:WikiLink" href="./User:+%25" title="User:+%">User:+%</a> <a rel="mw:WikiLink" href="Page+title%25" title="Page+title%">Page+title%</a>
+<a rel="mw:WikiLink" href="%25+" title="%+">%+</a> <a rel="mw:WikiLink" href="%25+" title="%+">%20</a> <a rel="mw:WikiLink" href="%25+" title="%+">%+ </a> <a rel="mw:WikiLink" href="%25+r" title="%+r">%+r</a>
+<a rel="mw:WikiLink" href="%25" title="%">%</a> <a rel="mw:WikiLink" href="+" title="+">+</a> <span class="mw-default-size" typeof="mw:Error mw:Image" data-parsoid='{"optList":[{"ck":"bogus","ak":"foo"},{"ck":"caption","ak":"[[bar]]"}]}' data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"&lt;a rel=\"mw:WikiLink\" href=\"./Bar\" title=\"Bar\" data-parsoid=\"{&amp;quot;stx&amp;quot;:&amp;quot;simple&amp;quot;,&amp;quot;a&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;./Bar&amp;quot;},&amp;quot;sa&amp;quot;:{&amp;quot;href&amp;quot;:&amp;quot;bar&amp;quot;},&amp;quot;dsr&amp;quot;:[94,101,2,2]}\">bar&lt;/a>"}'><a href="./File:%25+abc9"><img resource="./File:%25+abc9" src="./Special:FilePath/%25+abc9" height="220" width="220" data-parsoid='{"a":{"resource":"./File:%25+abc9","height":"220","width":"220"},"sa":{"resource":"File:%+abc%39"}}'/></a></span>
+<a rel="mw:WikiLink" href="./3E" title="3E" data-parsoid='{"stx":"simple","a":{"href":"./3E"},"sa":{"href":"%33%45"}}'>3E</a> <a rel="mw:WikiLink" href="./3E+" title="3E+" data-parsoid='{"stx":"simple","a":{"href":"./3E+"},"sa":{"href":"%33%45+"}}'>3E+</a></p>
 !! end
 
 !! test
@@ -19437,7 +20455,7 @@ Special characters in embedded file links (bug 27679)
 </p>
 !! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}]}'><a href="./File:Contains_&amp;_ampersand.jpg"><img resource="./File:Contains_&amp;_ampersand.jpg" src="./Special:FilePath/Contains_&amp;_ampersand.jpg" height="220" width="220"/></a></span>
-<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"Title with &amp; ampersand"}'><a href="./File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
+<span class="mw-default-size" typeof="mw:Error mw:Image" data-mw='{"errors":[{"key":"missing-image","message":"This image does not exist."}],"caption":"Title with &amp;amp; ampersand"}'><a href="./File:Does_not_exist.jpg"><img resource="./File:Does_not_exist.jpg" src="./Special:FilePath/Does_not_exist.jpg" height="220" width="220"/></a></span></p>
 !! end
 
 !! test
@@ -19708,14 +20726,18 @@ __TOC__
 <p><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Foo Bar">edit</a><span class="mw-editsection-bracket">]</span></span></p>
 !! end
 
+# Don't expect Parsoid to roundtrip this until the php parser comes closer to
+# html5 tag parsing.
 !! test
 Tags with parameters in TOC
+!! options
+parsoid=wt2html
 !! wikitext
 __TOC__
 == <sup class="in-h2">Hello</sup> ==
 
 == <sup class="a > b">Evilbye</sup> ==
-!! html
+!! html/php
 <div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
@@ -19724,8 +20746,13 @@ __TOC__
 </div>
 
 <h2><span class="mw-headline" id="Hello"><sup class="in-h2">Hello</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Hello">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id="b.22.3EEvilbye"><sup class="a"> b"&gt;Evilbye</sup></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: b&quot;&gt;Evilbye">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 
+!! html/parsoid
+<meta property="mw:PageProp/toc" />
+<h2> <sup class="in-h2" data-parsoid='{"stx":"html"}'>Hello</sup> </h2>
+
+<h2> <sup class="a " data-parsoid='{"stx":"html"}'> b">Evilbye</sup> </h2>
 !! end
 
 !! test
@@ -19830,10 +20857,12 @@ Strip marker in urlencode
 {{urlencode:x<nowiki/>y}}
 {{urlencode:x<nowiki/>y|wiki}}
 {{urlencode:x<nowiki/>y|path}}
+{{urlencode:x<pre id="one">two</pre>y}}
 !! html
 <p>xy
 xy
 xy
+xy
 </p>
 !! end
 
@@ -20192,10 +21221,35 @@ parsoid=wt2html,wt2wt
 
 <small>[[Image:Foobar.jpg|right|300px]]</small>
 !! html/parsoid
+
 <p><b>foo</b></p>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><b>caption</b></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><b>caption</b></figcaption></figure>
 <p><b>bar</b></p>
-<small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small>
+<small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small>
+!! end
+
+!! test
+3. Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+<small>'''foo[[File:Foobar.jpg|thumb|caption]]bar'''</small>
+!! html/parsoid
+<p><small><b>foo</b></small></p>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><small><b>caption</b></small></figcaption></figure>
+<p><small><b>bar</b></small></p>
+!! end
+
+!! test
+4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+'''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
+!! html/parsoid
+<p><b><small></small></b></p>
+<figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure>
+<p></p>
 !! end
 
 #### ----------------------------------------------------------------
@@ -20214,13 +21268,13 @@ B <ref name="x">foo</ref>
 C <ref name="y" />
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-x_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-2"},"attrs":{"name":"x"}}'><a href="#cite_note-x-2">[2]</a></span>
-C <span about="#mwt6" class="reference" id="cite_ref-y_3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"y"}}'><a href="#cite_note-y-3">[3]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-x-2" id="cite_note-x-2"><span rel="mw:referencedBy"><a href="#cite_ref-x_2-0">↑</a></span> <span id="mw-reference-text-cite_note-x-2" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-y-3" id="cite_note-y-3"><span rel="mw:referencedBy"><a href="#cite_ref-y_3-0">↑</a></span> <span id="mw-reference-text-cite_note-y-3" class="mw-reference-text"></span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-x_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-2"},"attrs":{"name":"x"}}'><a href="#cite_note-x-2"><span class="mw-reflink-text">[2]</span></a></span>
+C <span about="#mwt6" class="mw-ref" id="cite_ref-y_3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"y"}}'><a href="#cite_note-y-3"><span class="mw-reflink-text">[3]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-x-2" id="cite_note-x-2"><a href="#cite_ref-x_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-x-2" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-y-3" id="cite_note-y-3"><a href="#cite_ref-y_3-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-y-3" class="mw-reference-text"></span></li>
 </ol>
 !!end
 
@@ -20233,10 +21287,10 @@ A <ref name="x">foo</ref>
 B <ref name="x" />
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-x_1-0">1.0</a> <a href="#cite_ref-x_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy"><a href="#cite_ref-x_1-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-x_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20250,11 +21304,11 @@ B <ref name=" x " />
 C <ref name= x  />
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
-C <span about="#mwt6" class="reference" id="cite_ref-x_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-x_1-0">1.0</a> <a href="#cite_ref-x_1-1">1.1</a> <a href="#cite_ref-x_1-2">1.2</a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-x_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-x-1"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-x_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span>
+C <span about="#mwt6" class="mw-ref" id="cite_ref-x_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-x-1" id="cite_note-x-1"><span rel="mw:referencedBy"><a href="#cite_ref-x_1-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-x_1-1"><span class="mw-linkback-text">2 </span></a><a href="#cite_ref-x_1-2"><span class="mw-linkback-text">3 </span></a></span> <span id="mw-reference-text-cite_note-x-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20267,9 +21321,9 @@ parsoid
 A <ref name="constructor">foo</ref>
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-constructor_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-constructor-1"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-constructor-1" id="cite_note-constructor-1"><span rel="mw:referencedBy"><a href="#cite_ref-constructor_1-0">↑</a></span> <span id="mw-reference-text-cite_note-constructor-1" class="mw-reference-text">foo</span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-constructor_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-constructor-1"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-constructor-1" id="cite_note-constructor-1"><a href="#cite_ref-constructor_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-constructor-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20284,10 +21338,10 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">This is a <b><a rel="mw:WikiLink" href="Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </span></li>
 </ol>
 !!end
@@ -20305,10 +21359,10 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
  bar
  baz
 </span></li>
@@ -20335,10 +21389,10 @@ booz
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo
 
 bar
 
@@ -20361,9 +21415,9 @@ A <ref> foo {{echo|</ref> B C}}
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <span typeof="mw:Nowiki" data-parsoid='{"src":"{{","dsr":[12,14,0,0]}'>{{</span>echo|</span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C<span typeof="mw:Nowiki">}}</span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <span typeof="mw:Nowiki" data-parsoid='{"src":"{{","dsr":[12,14,0,0]}'>{{</span>echo|</span></li>
 </ol>
 !!end
 
@@ -20375,9 +21429,9 @@ parsoid
 A <ref> foo <!--</ref> B C
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <!----></span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C</p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <!----></span></li>
 </ol>
 !!end
 
@@ -20390,11 +21444,11 @@ A <ref> <b> foo </ref> B C
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B C</p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></span></li>
 </ol>
 !!end
 
@@ -20407,37 +21461,35 @@ A <ref>foo</ref> B
 C <ref>bar</ref> D
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B
-C <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> D</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B
+C <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span> D</p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
 </ol>
 !!end
 
 !!test
 Ref: 12. ref-tags act as trailing newline migration barrier
-!!options
-parsoid
 !! wikitext
-<!--the newline at the end of this line moves out of the p-tag-->a
+<!--the newline at the end of this line moves out of the p tag-->a
 
-b<!--the newline at the end of this line stays inside the p-tag--> <ref />
+b<!--the newline at the end of this line stays inside the p tag--> <ref />
 <ref />
 
 c
 <references />
-!! html
-<p><!--the newline at the end of this line moves out of the p-tag-->a</p>
+!! html/parsoid
+<!--the newline at the end of this line moves out of the p tag--><p>a</p>
 
 
-<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-1">[1]</a></span>
-<span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-2">[2]</a></span></p>
+<p>b<!--the newline at the end of this line stays inside the p tag--> <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
+<span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span></p>
 
 <p>c</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"></span></li>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"></span></li></ol>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"></span></li>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"></span></li></ol>
 !!end
 
 !!test
@@ -20450,11 +21502,11 @@ parsoid
 </ref> B
 <references />
 !! html
-<p><span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> A
-<span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> B</p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar
+<p><span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> A
+<span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2"><span class="mw-reflink-text">[2]</span></a></span> B</p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar
 </span></li>
 </ol>
 !!end
@@ -20468,10 +21520,10 @@ parsoid
 
 <references />
 !! html
-<p><span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+<p><span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
 </p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo &lt;ref>bar&lt;/ref> baz</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo &lt;ref>bar&lt;/ref> baz</span></li>
 </ol>
 !!end
 
@@ -20485,10 +21537,10 @@ B1 <ref name="b" /> B2 <ref name="b">bar</ref>
 
 <references />
 !! html
-<p>A1 <span about="#mwt3" class="reference" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a-1"},"attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" id="cite_ref-a_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
-B1 <span about="#mwt7" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" id="cite_ref-b_2-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
+<p>A1 <span about="#mwt3" class="mw-ref" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a-1"},"attrs":{"name":"a"}}'><a href="#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span> A2 <span about="#mwt4" class="mw-ref" id="cite_ref-a_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span>
+B1 <span about="#mwt7" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"b"}}'><a href="#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span> B2 <span about="#mwt8" class="mw-ref" id="cite_ref-b_2-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a_1-0">1.0</a> <a href="#cite_ref-a_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b_2-0">2.0</a> <a href="#cite_ref-b_2-1">2.1</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_1-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-a_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-b_2-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
 </ol>
 !!end
 
@@ -20502,9 +21554,9 @@ A <ref >foo</ref >
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !!end
 
 !!test
@@ -20516,11 +21568,11 @@ parsoid
 
 <references />
 !!html
-<p><span class="reference" id="cite_ref-a_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_b-1"},"attrs":{"name":"a b"}}'><a href="#cite_note-a_b-1">[1]</a></span>
+<p><span class="mw-ref" id="cite_ref-a_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_b-1"},"attrs":{"name":"a b"}}'><a href="#cite_note-a_b-1"><span class="mw-reflink-text">[1]</span></a></span>
 </p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-a_b-1" id="cite_note-a_b-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_b_1-0">↑</a></span> <span id="mw-reference-text-cite_note-a_b-1" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-a_b-1" id="cite_note-a_b-1"><a href="#cite_ref-a_b_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a_b-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20533,11 +21585,11 @@ parsoid
 
 <references />
 !!html
-<p><span class="reference" id="cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1"},"attrs":{"name":"{{echo|a}}"}}'><a href="#cite_note-.7B.7Becho.7Ca.7D.7D-1">[1]</a></span>
+<p><span class="mw-ref" id="cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1"},"attrs":{"name":"{{echo|a}}"}}'><a href="#cite_note-.7B.7Becho.7Ca.7D.7D-1"><span class="mw-reflink-text">[1]</span></a></span>
 </p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-.7B.7Becho.7Ca.7D.7D-1" id="cite_note-.7B.7Becho.7Ca.7D.7D-1"><span rel="mw:referencedBy"><a href="#cite_ref-.7B.7Becho.7Ca.7D.7D_1-0">↑</a></span> <span id="mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-.7B.7Becho.7Ca.7D.7D-1" id="cite_note-.7B.7Becho.7Ca.7D.7D-1"><a href="#cite_ref-.7B.7Becho.7Ca.7D.7D_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-.7B.7Becho.7Ca.7D.7D-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20550,10 +21602,10 @@ parsoid
 
 <references />
 !! html
-<p>1 <span about="#mwt3" class="reference" id="cite_ref-a_.26_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_.26_b-1"},"attrs":{"name":"a &amp; b"}}'><a href="#cite_note-a_.26_b-1">[1]</a></span> 2 <span about="#mwt4" class="reference" id="cite_ref-a_.26_b_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a &amp;amp; b"}}'><a href="#cite_note-a_.26_b-1">[1]</a></span>
+<p>1 <span about="#mwt3" class="mw-ref" id="cite_ref-a_.26_b_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-a_.26_b-1"},"attrs":{"name":"a &amp; b"}}'><a href="#cite_note-a_.26_b-1"><span class="mw-reflink-text">[1]</span></a></span> 2 <span about="#mwt4" class="mw-ref" id="cite_ref-a_.26_b_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a &amp;amp; b"}}'><a href="#cite_note-a_.26_b-1"><span class="mw-reflink-text">[1]</span></a></span>
 </p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-a_.26_b-1" id="cite_note-a_.26_b-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a_.26_b_1-0">1.0</a> <a href="#cite_ref-a_.26_b_1-1">1.1</a></span> <span id="mw-reference-text-cite_note-a_.26_b-1" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-a_.26_b-1" id="cite_note-a_.26_b-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_.26_b_1-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-a_.26_b_1-1"><span class="mw-linkback-text">2 </span></a></span> <span id="mw-reference-text-cite_note-a_.26_b-1" class="mw-reference-text">foo</span></li>
 </ol>
 !!end
 
@@ -20568,28 +21620,24 @@ C <ref name="foo" />
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-foo_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-foo-1"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-foo_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"Foo two"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span>
-C <span about="#mwt6" class="reference" id="cite_ref-foo_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"foo"}}'><a href="#cite_note-foo-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-foo_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-foo-1"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-foo_1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"Foo two"},"attrs":{"name":"foo"}}'><a href="#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span>
+C <span about="#mwt6" class="mw-ref" id="cite_ref-foo_1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"foo"}}'><a href="#cite_note-foo-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-foo-1" id="cite_note-foo-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-foo_1-0">1.0</a> <a href="#cite_ref-foo_1-1">1.1</a> <a href="#cite_ref-foo_1-2">1.2</a></span> <span id="mw-reference-text-cite_note-foo-1" class="mw-reference-text">Foo one</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-foo-1" id="cite_note-foo-1"><span rel="mw:referencedBy"><a href="#cite_ref-foo_1-0"><span class="mw-linkback-text">1 </span></a><a href="#cite_ref-foo_1-1"><span class="mw-linkback-text">2 </span></a><a href="#cite_ref-foo_1-2"><span class="mw-linkback-text">3 </span></a></span> <span id="mw-reference-text-cite_note-foo-1" class="mw-reference-text">Foo one</span></li>
 </ol>
 !!end
 
 !!test
 References: 1. references tag without any refs should be handled properly
-!!options
-parsoid
 !! wikitext
 <references />
-!! html
-<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
+!! html/parsoid
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !!end
 
 !!test
 References: 2. references tag with group only outputs references from that group
-!!options
-parsoid
 !! wikitext
 A <ref group="a">foo</ref>
 B <ref group="b">bar</ref>
@@ -20598,26 +21646,24 @@ C <ref>baz</ref>
 <references group="a" />
 <references />
 <references group="b" />
-!! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"b"}}'><a href="#cite_note-2">[b 1]</a></span>
-C <span class="reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3">[1]</a></span></p>
+!! html/parsoid
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1" data-mw-group="a"><span class="mw-reflink-text">[a 1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"b"}}'><a href="#cite_note-2" data-mw-group="b"><span class="mw-reflink-text">[b 1]</span></a></span>
+C <span class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{"group":"a"}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="a" data-mw='{"name":"references","attrs":{"group":"a"}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" data-mw-group="a" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
 </ol>
-<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3">↑</a></span> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">baz</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-3" id="cite_note-3"><a href="#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">baz</span></li>
 </ol>
-<ol class="references" typeof="mw:Extension/references" about="#mwt12" data-mw='{"name":"references","attrs":{"group":"b"}}'>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt12" data-mw-group="b" data-mw='{"name":"references","attrs":{"group":"b"}}'>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" data-mw-group="b" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
 </ol>
 !!end
 
 !!test
 References: 3. ref list should be cleared after processing references
-!!options
-parsoid
 !! wikitext
 A <ref>foo</ref>
 
@@ -20626,23 +21672,21 @@ A <ref>foo</ref>
 B <ref>bar</ref>
 
 <references />
-!! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
+!! html/parsoid
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
 </ol>
 
-<p>B <span about="#mwt6" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
+<p>B <span about="#mwt6" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
 </ol>
 !!end
 
 !!test
 References: 4. only referenced group should be cleared after processing references
-!!options
-parsoid
 !! wikitext
 A <ref group="a">afoo</ref>
 B <ref>bfoo</ref>
@@ -20652,23 +21696,21 @@ B <ref>bfoo</ref>
 C <ref>cfoo</ref>
 
 <references />
-!! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
+!! html/parsoid
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{"group":"a"}}'><a href="#cite_note-1" data-mw-group="a"><span class="mw-reflink-text">[a 1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="#cite_note-2"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">afoo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw-group="a" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" data-mw-group="a" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">afoo</span></li>
 </ol>
 
-<p>C <span about="#mwt8" class="reference" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3">[2]</a></span></p>
+<p>C <span about="#mwt8" class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-3"},"attrs":{}}'><a href="#cite_note-3"><span class="mw-reflink-text">[2]</span></a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bfoo</span></li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3">↑</a></span> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">cfoo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bfoo</span></li><li about="#cite_note-3" id="cite_note-3"><a href="#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text">cfoo</span></li>
 </ol>
 !!end
 
 !!test
 References: 5. ref tags in references should be processed while ignoring all other content
-!!options
-parsoid
 !! wikitext
 A <ref name="a" />
 B <ref name="b">bar</ref>
@@ -20677,30 +21719,26 @@ B <ref name="b">bar</ref>
 <ref name="a">foo</ref>
 This should just get lost.
 </references>
-!! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
+!! html/parsoid
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-a_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-b-2"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2"><span class="mw-reflink-text">[2]</span></a></span></p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a_1-0">↑</a></span> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-a-1\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\" style=\"counter-reset: mw-Ref 1;\">&lt;span class=\"mw-reflink-text\">[1]&lt;/span>&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><a href="#cite_ref-a_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-a-1" class="mw-reference-text">foo</span></li><li about="#cite_note-b-2" id="cite_note-b-2"><a href="#cite_ref-b_2-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">bar</span></li>
 </ol>
 !!end
 
 !!test
 References: 6. <references /> from a transclusion
-!!options
-parsoid
 !! wikitext
 <ref>Foo</ref> {{echo|<references />}}
-!! html
-<p><span about="#mwt3" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">Foo</span></li>
+!! html/parsoid
+<p><span about="#mwt3" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p> <ol class="mw-references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">Foo</span></li>
 </ol>
 !!end
 
 !! test
 References: 7. Multiple references tags (one without and one with nested refs) should be correctly handled
-!! options
-parsoid
 !! wikitext
 A <ref>foo bar for a</ref>
 B <ref group="X" name="b" />
@@ -20710,30 +21748,28 @@ B <ref group="X" name="b" />
 <references group="X">
 <ref name="b">foo</ref>
 </references>
-!! html
-<p>A <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt4" class="reference" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}'><a href="#cite_note-b-2">[X 1]</a></span>
+!! html/parsoid
+<p>A <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
+B <span about="#mwt4" class="mw-ref" id="cite_ref-b_2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}'><a href="#cite_note-b-2" data-mw-group="X"><span class="mw-reflink-text">[X 1]</span></a></span>
 </p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo bar for a</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo bar for a</span></li>
 </ol>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'>
-<li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b_2-0">↑</a></span> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">foo</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt8" data-mw-group="X" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"mw-ref\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-b-2\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\" style=\"counter-reset: mw-Ref 1;\" data-mw-group=\"X\">&lt;span class=\"mw-reflink-text\">[X 1]&lt;/span>&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'>
+<li about="#cite_note-b-2" id="cite_note-b-2"><a href="#cite_ref-b_2-0" data-mw-group="X" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-b-2" class="mw-reference-text">foo</span></li>
 </ol>
 !! end
 
 !! test
 References: 8. T88019: Remove <meta>s from templates inside <ref> that's itself inside a template
-!! options
-parsoid
 !! wikitext
 X{{echo|<ref>foo {{echo|<b>bar</b>}} and {{echo|baz}} boo</ref>}}
 <references />
-!! html
-<p>X<span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo {{echo|&lt;b>bar&lt;/b>}} and {{echo|baz}} boo&lt;/ref>"}},"i":0}}]}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt7" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <b data-parsoid='{"stx":"html"}'>bar</b> and baz boo</span></li>
+!! html/parsoid
+<p>X<span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo {{echo|&lt;b>bar&lt;/b>}} and {{echo|baz}} boo&lt;/ref>"}},"i":0}}]}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt7" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo <b data-parsoid='{"stx":"html"}'>bar</b> and baz boo</span></li>
 </ol>
 !!end
 
@@ -20743,18 +21779,16 @@ X{{echo|<ref>foo {{echo|<b>bar</b>}} and {{echo|baz}} boo</ref>}}
 # wt2wt.
 !! test
 References: 9. Generate missing references list at the end
-!! options
-parsoid
 !! wikitext
 A <ref>foo</ref>
 B <ref group="inexistent">bar</ref>
-!! html
-<p>A <span class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B <span class="reference" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"inexistent"}}'><a href="#cite_note-2">[inexistent 1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
+!! html/parsoid
+<p>A <span class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> B <span class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{"group":"inexistent"}}'><a href="#cite_note-2" data-mw-group="inexistent"><span class="mw-reflink-text">[inexistent 1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li>
 </ol>
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"inexistent"}}'>
-<li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2">↑</a></span> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw-group="inexistent" data-mw='{"name":"references","attrs":{"group":"inexistent"}}'>
+<li about="#cite_note-2" id="cite_note-2"><a href="#cite_ref-2" data-mw-group="inexistent" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text">bar</span></li>
 </ol>
 !! end
 
@@ -20776,15 +21810,13 @@ A <ref>foo</ref>
 
 !! test
 Entities in ref name
-!! options
-parsoid
 !! wikitext
 <ref name="test &amp; me">hi</ref>
 <references />
-!! html
-<p><span about="#mwt2" class="reference" id="cite_ref-test_.26_me_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-test_.26_me-1"},"attrs":{"name":"test &amp;amp; me"}}'><a href="#cite_note-test_.26_me-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-test_.26_me-1" id="cite_note-test_.26_me-1"><span rel="mw:referencedBy"><a href="#cite_ref-test_.26_me_1-0">↑</a></span> <span id="mw-reference-text-cite_note-test_.26_me-1" class="mw-reference-text">hi</span></li>
+!! html/parsoid
+<p><span about="#mwt2" class="mw-ref" id="cite_ref-test_.26_me_1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-test_.26_me-1"},"attrs":{"name":"test &amp;amp; me"}}'><a href="#cite_note-test_.26_me-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-test_.26_me-1" id="cite_note-test_.26_me-1"><a href="#cite_ref-test_.26_me_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-test_.26_me-1" class="mw-reference-text">hi</span></li>
 </ol>
 !! end
 
@@ -20798,10 +21830,10 @@ parsoid=wt2html
 a<ref>foo</ref>
 
 <references>
-!! html
-<p>a<span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+!! html/parsoid
+<p>a<span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 !! test
@@ -20811,8 +21843,8 @@ parsoid=wt2wt,html2wt
 !! wikitext
 foo
 <references />
-!! html
-foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
+!! html/parsoid
+foo<ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !! end
 
 #### ----------------------------------------------------------------
@@ -20919,23 +21951,23 @@ Empty TR nodes should not be stripped if they have any attributes set
 !! test
 Headings: 0. Unnested
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p>=foo=</p>
+
+<p> =foo=
+<!--cmt-->
+=foo=</p>
+
+<p>=foo<i>a</i>=</p>
 !! wikitext
 <nowiki>=foo=</nowiki>
 
-<nowiki> =foo= </nowiki>
+<nowiki> </nowiki>=foo=
 <!--cmt-->
 <nowiki>=foo=</nowiki>
 
 =foo''a''<nowiki>=</nowiki>
-!! html
-<p><span typeof="mw:Nowiki">=foo=</span></p>
-
-<p><span typeof="mw:Nowiki"> =foo= </span>
-<!--cmt-->
-<span typeof="mw:Nowiki">=foo=</span></p>
-
-<p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
 !!end
 
 # New headings and existing headings are handled differently
@@ -20943,7 +21975,7 @@ parsoid
 Headings: 1. Nested inside html
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <h1>=foo=</h1>
 <h2>=foo=</h2>
 <h3>=foo=</h3>
@@ -20974,7 +22006,7 @@ parsoid=html2wt
 Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <h1>foo</h1>*bar
 <h1>foo</h1>=bar
 <h1>foo</h1>=bar=
@@ -20992,15 +22024,26 @@ parsoid=html2wt
 !! test
 Headings: 3. Nested inside html with wikitext split by html tags
 !! options
-parsoid=html2wt,wt2wt
-!! wikitext
-= ='''bold'''<nowiki>foo=</nowiki> =
+parsoid=html2wt
 !! html/parsoid
 <h1>=<b>bold</b>foo=</h1>
+!! wikitext
+= ='''bold'''<nowiki>foo=</nowiki> =
 !!end
 
 !! test
 Headings: 4a. No escaping needed (testing just h1 and h2)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<h1>=foo</h1>
+<h1>foo=</h1>
+<h1> =foo= </h1>
+<h1>=foo= bar</h1>
+<h2>=foo</h2>
+<h2>foo=</h2>
+<h1>=</h1>
+<h1><i>=</i>foo=</h1>
 !! wikitext
 = =foo =
 
@@ -21017,22 +22060,13 @@ Headings: 4a. No escaping needed (testing just h1 and h2)
 = = =
 
 = ''=''foo= =
-!! html/parsoid
-<h1>=foo</h1>
-<h1>foo=</h1>
-<h1> =foo= </h1>
-<h1>=foo= bar</h1>
-<h2>=foo</h2>
-<h2>foo=</h2>
-<h1>=</h1>
-<h1><i>=</i>foo=</h1>
 !!end
 
 !! test
 Headings: 4b. No escaping needed (inside p-tags)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p>===
 =foo= x
 =foo= <s></s>
@@ -21046,7 +22080,19 @@ parsoid=html2wt
 !! test
 Headings: 5. Empty headings
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<h1 data-parsoid='{}'></h1>
+
+<h2 data-parsoid='{}'></h2>
+
+<h3 data-parsoid='{}'></h3>
+
+<h4 data-parsoid='{}'></h4>
+
+<h5 data-parsoid='{}'></h5>
+
+<h6 data-parsoid='{}'></h6>
 !! wikitext
 =<nowiki/>=
 
@@ -21059,92 +22105,81 @@ parsoid
 =====<nowiki/>=====
 
 ======<nowiki/>======
-!! html
-<h1></h1>
-<h2></h2>
-<h3></h3>
-<h4></h4>
-<h5></h5>
-<h6></h6>
 !!end
 
 !! test
 Headings: 6a. Heading chars in SOL context (with trailing spaces)
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p>=a=</p>
+
+<p>=a=</p> 
+
+<p>=a=</p>     
 !! wikitext
 <nowiki>=a=</nowiki>
 
 <nowiki>=a=</nowiki> 
 
 <nowiki>=a=</nowiki>   
-
-<nowiki>=a=</nowiki>   
-!! html
-<p>=a=</p>
-<p>=a= </p>
-<p>=a= </p>
-<p>=a=         </p>
 !!end
 
 !! test
 Headings: 6b. Heading chars in SOL context (with trailing newlines)
 !! options
-parsoid
-!! wikitext
-<nowiki>=a=
-b</nowiki>
-
-<nowiki>=a= 
-b</nowiki>
-
-<nowiki>=a=    
-b</nowiki>
-
-<nowiki>=a=     
-b</nowiki>
-!! html
+parsoid=html2wt
+!! html/parsoid
 <p>=a=
 b</p>
+
 <p>=a= 
 b</p>
+
 <p>=a= 
 b</p>
-<p>=a=  
-b</p>
-</p>
+!! wikitext
+<nowiki>=a=</nowiki>
+b
+
+<nowiki>=a=</nowiki> 
+b
+
+<nowiki>=a=</nowiki>   
+b
 !!end
 
 !! test
 Headings: 6c. Heading chars in SOL context (leading newline break)
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p>a
+=b=</p>
 !! wikitext
 a
 <nowiki>=b=</nowiki>
-!! html
-<p>a
-=b=</p>
 !!end
 
 !! test
 Headings: 6d. Heading chars in SOL context (with interspersed comments)
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<!--c0--><p>=a=</p>
+
+<!--c1--><p>=a=</p> <!--c2-->   <!--c3-->
 !! wikitext
 <!--c0--><nowiki>=a=</nowiki>
 
 <!--c1--><nowiki>=a=</nowiki> <!--c2-->         <!--c3-->
-!! html
-<p><!--c0-->=a=</p>
-<p><!--c1-->=a= <!--c2-->       <!--c3--></p>
 !!end
 
 !! test
 Headings: 6d. Heading chars in SOL context (No escaping needed)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 =a=<div>b</div>
 !! wikitext
 =a=<div>b</div>
@@ -21154,11 +22189,11 @@ parsoid=html2wt
 Headings: 7. Insert a newline between new content and headings
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <h2>NEW</h2>
 <p>new</p>
-<h2 data-parsoid='{"dsr":[0,5,2,2]}'>A</h2>
-<p data-parsoid='{"dsr":[6,7,0,0]}'>a</p>
+<h2 data-parsoid='{}'>A</h2>
+<p data-parsoid='{}'>a</p>
 !! wikitext
 == NEW ==
 new
 
 !! test
 Lists: 0. Outside nests
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>*foo</p>
+
+<p>#foo</p>
+
+<p>;Foo:bar</p>
 !! wikitext
 <nowiki>*</nowiki>foo
 
 <nowiki>#</nowiki>foo
 
-<nowiki>;Foo:</nowiki>bar
-!! html
-<p>*foo
-</p><p>#foo
-</p><p>;Foo:bar
-</p>
+<nowiki>;</nowiki>Foo<nowiki>:</nowiki>bar
 !!end
 
 !! test
 Lists: 1. Nested inside html
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li>*foo</li></ul>
+<ul><li>#foo</li></ul>
+<ul><li>:foo</li></ul>
+<ul><li>;foo</li></ul>
+<ol><li>*foo</li></ol>
+<ol><li>#foo</li></ol>
+<ol><li>:foo</li></ol>
+<ol><li>;foo</li></ol>
+
 !! wikitext
 *<nowiki>*foo</nowiki>
 
@@ -21212,20 +22262,19 @@ Lists: 1. Nested inside html
 #<nowiki>:foo</nowiki>
 
 #<nowiki>;foo</nowiki>
-!! html
-<ul><li>*foo</li></ul>
-<ul><li>#foo</li></ul>
-<ul><li>:foo</li></ul>
-<ul><li>;foo</li></ul>
-<ol><li>*foo</li></ol>
-<ol><li>#foo</li></ol>
-<ol><li>:foo</li></ol>
-<ol><li>;foo</li></ol>
-
 !!end
 
 !! test
 Lists: 2. Inside definition lists
+!! options
+parsoid=html2wt
+!! html/parsoid
+<dl><dt>;foo</dt></dl>
+<dl><dt>:foo</dt></dl>
+<dl><dt>:foo</dt>
+<dd>bar</dd></dl>
+<dl><dd>:foo</dd></dl>
+
 !! wikitext
 ;<nowiki>;foo</nowiki>
 
@@ -21235,40 +22284,27 @@ Lists: 2. Inside definition lists
 :bar
 
 :<nowiki>:foo</nowiki>
-!! html
-<dl><dt>;foo</dt></dl>
-<dl><dt>:foo</dt></dl>
-<dl><dt>:foo</dt>
-<dd>bar</dd></dl>
-<dl><dd>:foo</dd></dl>
-
 !!end
 
 !! test
 Lists: 3. Only bullets at start of text should be escaped
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li>*foo*bar</li></ul>
+<ul><li>*foo<i>it</i>*bar</li></ul>
+
 !! wikitext
 *<nowiki>*foo*bar</nowiki>
 
 *<nowiki>*foo</nowiki>''it''*bar
-!! html
-<ul><li>*foo*bar</li></ul>
-<ul><li>*foo<i>it</i>*bar</li></ul>
-
 !!end
 
 !! test
 Lists: 4. No escapes needed
 !! options
-parsoid
-!! wikitext
-*foo*bar
-
-*''foo''*bar
-
-*[[Foo]]: bar
-
-*[[Foo]]*bar
-!! html
+parsoid=html2wt
+!! html/parsoid
 <ul>
 <li>foo*bar
 </li>
@@ -21285,10 +22321,29 @@ parsoid
 <li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
 </li>
 </ul>
+!! wikitext
+*foo*bar
+
+*''foo''*bar
+
+*[[Foo]]: bar
+
+*[[Foo]]*bar
 !!end
 
 !! test
 Lists: 5. No unnecessary escapes
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul><li> bar <span>[[foo]]</span></li></ul>
+<ul><li> =bar <span>[[foo]]</span></li></ul>
+<ul><li> [[bar <span>[[foo]]</span></li></ul>
+<ul><li> ]]bar <span>[[foo]]</span></li></ul>
+<ul><li> =bar <span>foo]]</span>=</li></ul>
+<ul><li> <s></s>: a</li></ul>
+<ul><li> <i>* foo</i></li></ul>
+
 !! wikitext
 * bar <span><nowiki>[[foo]]</nowiki></span>
 
@@ -21303,22 +22358,13 @@ Lists: 5. No unnecessary escapes
 * <s></s>: a
 
 * ''* foo''
-!! html
-<ul><li> bar <span>[[foo]]</span></li></ul>
-<ul><li> =bar <span>[[foo]]</span></li></ul>
-<ul><li> [[bar <span>[[foo]]</span></li></ul>
-<ul><li> ]]bar <span>[[foo]]</span></li></ul>
-<ul><li> =bar <span>foo]]</span>=</li></ul>
-<ul><li> <s></s>: a</li></ul>
-<ul><li> <i>* foo</i></li></ul>
-
 !!end
 
 !! test
 Lists: 6. Escape bullets in SOL position
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><!--cmt-->*foo</p>
 !! wikitext
 <!--cmt--><nowiki>*</nowiki>foo
@@ -21326,20 +22372,22 @@ parsoid=html2wt
 
 !! test
 Lists: 7. Escape bullets in a multi-line context
-!! wikitext
-a
-<nowiki>*</nowiki>b
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>a
 *b
 </p>
+!! wikitext
+a
+<nowiki>*</nowiki>b
 !!end
 
 !! test
 Lists: 8. Escape colons only if not present in tags
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <dl><dt>a:b<i>c:d</i></dt></dl>
 !! wikitext
 ; <nowiki>a:b</nowiki>''c:d''
@@ -21351,17 +22399,16 @@ parsoid=html2wt
 
 !! test
 HRs: 1. Single line
+!! options
+parsoid=html2wt
+!! html/parsoid
+<hr />----
+<hr />=foo=
+<hr />*foo
 !! wikitext
 ----<nowiki>----</nowiki>
 ----=foo=
 ----*foo
-!! html+tidy
-<hr />
-<p>----</p>
-<hr />
-<p>=foo=</p>
-<hr />
-<p>*foo</p>
 !! end
 
 #### --------------- Tables ---------------
@@ -21385,40 +22432,48 @@ HRs: 1. Single line
 
 !! test
 Tables: 1a. Simple example
-!! wikitext
-<nowiki>{|
-|}</nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>{|
 |}
 </p>
+!! wikitext
+<nowiki>{|</nowiki>
+|}
 !! end
 
 !! test
 Tables: 1b. No escaping needed
-!! wikitext
-!foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>!foo
 </p>
+!! wikitext
+!foo
 !! end
 
 !! test
 Tables: 1c. No escaping needed
-!! wikitext
-|foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>|foo
 </p>
+!! wikitext
+|foo
 !! end
 
 !! test
 Tables: 1d. No escaping needed
-!! wikitext
-|}foo
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>|}foo
 </p>
+!! wikitext
+|}foo
 !! end
 
 !! test
@@ -21479,11 +22534,8 @@ parsoid=html2wt
 
 !! test
 Tables: 2c. Nested in td -- no escaping needed
-!! wikitext
-{|
-
-|foo!!bar
-|}
+!! options
+parsoid=html2wt
 !! html/*
 <table>
 
@@ -21491,15 +22543,17 @@ Tables: 2c. Nested in td -- no escaping needed
 <td>foo!!bar
 </td></tr></table>
 
-!! end
-
-!! test
-Tables: 3a. Nested in th
 !! wikitext
 {|
 
-!foo!bar
+|foo!!bar
 |}
+!! end
+
+!! test
+Tables: 3a. Nested in th
+!! options
+parsoid=html2wt
 !! html/*
 <table>
 
@@ -21507,6 +22561,11 @@ Tables: 3a. Nested in th
 <th>foo!bar
 </th></tr></table>
 
+!! wikitext
+{|
+
+!foo!bar
+|}
 !! end
 
 !! test
@@ -21615,6 +22674,19 @@ parsoid=html2wt
 
 !! test
 Tables: 4c. No escaping needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table><tbody>
+<tr><td>foo-bar</td><td>foo+bar</td></tr>
+<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
+<tr><td>foo
+<p>bar|baz
++bar
+-bar</p></td></tr>
+<tr><td>x
+<div>a|b</div></td>
+</tbody></table>
 !! wikitext
 {|
 |foo-bar
@@ -21655,21 +22727,18 @@ bar|baz
 <div>a|b</div>
 </td></tr></table>
 
-!! html/parsoid
-<table><tbody>
-<tr><td>foo-bar</td><td>foo+bar</td></tr>
-<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
-<tr><td>foo
-<p>bar|baz
-+bar
--bar</p></td></tr>
-<tr><td>x
-<div>a|b</div></td>
-</tbody></table>
 !! end
 
 !! test
 Tables: 4d. No escaping needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
+<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
+<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
+</tbody></table>
 !! wikitext
 {|
 |[[Foo]]-bar
@@ -21686,29 +22755,42 @@ Tables: 4d. No escaping needed
 <td>-2
 </td></tr></table>
 
+!! end
+
+!! test
+T97430: Don't emit empty nowiki pairs around marker meta tags
+!! options
+parsoid=html2wt
 !! html/parsoid
-<table>
-<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
-<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
-<td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
-</tbody></table>
+<p>*This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
+|** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.</p>
+!! wikitext
+<nowiki>*</nowiki>This is a long sentence here that will make the nowiki algo split up the nowikis into multiple pairs
+|** Make this another long long long sentence forcing the nowiki algo to split up the nowikis.
 !! end
 
 !! test
-Tables: Digest broken attributes on table and tr tag
+Unclosed xmlish element in table line shouldn't eat end delimiters
 !! options
-parsoid=wt2html
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tbody><tr><td> &lt;foo</td>
+<td> bar></td></tr>
+</tbody></table>
 !! wikitext
-{| || |} ++
-|- || || ++ --
-|- > [
+{|
+| <foo
+| bar>
 |}
-!! html
+!! html/php
 <table>
-<tbody>
-<tr></tr>
-<tr></tr>
-</tbody></table>
+<tr>
+<td> &lt;foo
+</td>
+<td> bar&gt;
+</td></tr></table>
+
 !! end
 
 #### --------------- Links ----------------
@@ -21720,6 +22802,12 @@ parsoid=wt2html
 #### --------------------------------------
 !! test
 Links 1. WikiLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
 !! wikitext
 [[Foo|Foo''boo'']]
 [[Foo|[Foobar]]]
@@ -21729,10 +22817,6 @@ Links 1. WikiLinks: No escapes needed
 <a href="/wiki/Foo" title="Foo">[Foobar]</a>
 <a href="/wiki/Foo" title="Foo">x [Foobar] x</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Foo" title="Foo">Foo<i>boo</i></a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">[Foobar]</a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">x [Foobar] x</a></p>
 !! end
 
 !! test
@@ -21777,6 +22861,11 @@ parsoid=html2wt
 
 !! test
 Links 3. WikiLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
+<a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
 !! wikitext
 [[Foo|[Foobar]]
 [[Foo|foo|bar]]
@@ -21784,9 +22873,6 @@ Links 3. WikiLinks: No escapes needed
 <p><a href="/wiki/Foo" title="Foo">[Foobar</a>
 <a href="/wiki/Foo" title="Foo">foo|bar</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Foo">[Foobar</a>
-<a rel="mw:WikiLink" href="Foo" title="Foo">foo|bar</a></p>
 !! end
 
 !! test
@@ -21816,17 +22902,21 @@ parsoid=html2wt
 
 !! test
 Links 5. ExtLinks: No escapes needed
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
 !! wikitext
 [http://google.com [google]
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://google.com">[google</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:ExtLink" href="http://google.com">[google</a></p>
 !! end
 
 !! test
 Links 6. Add <nowiki/>s between text-nodes and url-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p>x<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>y
 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>?x
@@ -21860,6 +22950,8 @@ http://example.com(x<nowiki/>)
 
 !! test
 Links 7a. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p>x
 <a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>
 
 !! test
 Links 7b. Don't add spurious <nowiki/>s between text-nodes and url-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url"}'>http://example.com</a>.,;:!?\
 -<a rel="mw:ExtLink" href="http://example.com">http://example.com</a>:</p>
@@ -21907,6 +23001,8 @@ http://example.com.,;:!?\
 
 !! test
 Links 8. Add <nowiki/>s between text-nodes and RFC-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>4
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>y
@@ -21919,6 +23015,8 @@ X<nowiki/>RFC 123<nowiki/>y
 
 !! test
 Links 9. Don't add spurious <nowiki/>s between text-nodes and RFC-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>?foo
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>RFC 123</a>&amp;foo
@@ -21937,6 +23035,8 @@ RFC 123&foo
 
 !! test
 Links 10. Add <nowiki/>s between text-nodes and PMID-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>4
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>y
@@ -21949,6 +23049,8 @@ X<nowiki/>PMID 123<nowiki/>y
 
 !! test
 Links 11. Don't add spurious <nowiki/>s between text-nodes and PMID-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
 <p><a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>?foo
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>PMID 123</a>&foo
@@ -21967,10 +23069,12 @@ PMID 123&foo
 
 !! test
 Links 12. Add <nowiki/>s between text-nodes and ISBN-links when required (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
-<p><a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
-a<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
+<p><a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>1
+<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>x
+a<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>b
 </p>
 !! wikitext
 ISBN 1234567890<nowiki/>1
@@ -21980,8 +23084,10 @@ a<nowiki/>ISBN 1234567890<nowiki/>b
 
 !! test
 Links 13. Don't add spurious <nowiki/>s between text-nodes and ISBN-links (bug 64300)
+!! options
+parsoid=html2wt
 !! html/parsoid
-<p>-<a href="./Special:BookSources/1234567890" rel="mw:ExtLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
+<p>-<a href="./Special:BookSources/1234567890" rel="mw:WikiLink" data-parsoid='{"stx":"magiclink"}'>ISBN 1234567890</a>'s
 !! wikitext
 -ISBN 1234567890's
 !! html/php
@@ -21997,20 +23103,21 @@ parsoid=html2wt
 <p>this is not a link: http://example.com
 </p>
 !! wikitext
-this is not a link: <nowiki>http://example.com</nowiki>
+<nowiki>this is not a link: http://example.com</nowiki>
 !! end
 
 !! test
 Links 15. Link trails can't become link prefixes.
 !! options
 language=is
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
 !! wikitext
 [[Söfnuður]]-[[00]]
 !! html/php
 <p><a href="/wiki/S%C3%B6fnu%C3%B0ur" title="Söfnuður">Söfnuður-</a><a href="/wiki/00" title="00">00</a>
 </p>
-!! html/parsoid
-<p><a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður" data-parsoid='{"stx":"simple","tail":"-"}'>Söfnuður-</a><a rel="mw:WikiLink" href="00" title="00">00</a></p>
 !! end
 
 #### --------------- Quotes ---------------
@@ -22022,28 +23129,7 @@ language=is
 !! test
 1a. Quotes inside <b> and <i>
 !! options
-parsoid=html2wt,wt2wt
-!! wikitext
-''<nowiki/>'foo'''
-''<nowiki>''foo''</nowiki>''
-''<nowiki>'''foo'''</nowiki>''
-''foo''<nowiki/>'s
-'''<nowiki/>'foo''''
-'''<nowiki>''foo''</nowiki>'''
-'''<nowiki>'''foo'''</nowiki>'''
-'''foo'<nowiki/>''bar'<nowiki/>''baz'''
-'''foo'''<nowiki/>'s
-'''foo''
-''foo''<nowiki/>'
-''foo'''<nowiki/>'
-'''foo''<nowiki/>'
-''''foo'''
-'''foo'''<nowiki/>'
-''''foo'''<nowiki/>'
-''fools'<span> errand</span>''
-''<span>fool</span>'s errand''
-'<nowiki/>''foo'' bar '''baz''
-a|!*#-:;+-~[]{}b'''x''
+parsoid=html2wt
 !! html/*
 <p><i>'foo'</i>
 <i>''foo''</i>
@@ -22066,12 +23152,44 @@ a|!*#-:;+-~[]{}b'''x''
 '<i>foo</i> bar '<i>baz</i>
 a|!*#-:;+-~[]{}b'<i>x</i>
 </p>
+!! wikitext
+''<nowiki/>'foo'''
+''<nowiki>''foo''</nowiki>''
+''<nowiki>'''foo'''</nowiki>''
+''foo''<nowiki/>'s
+'''<nowiki/>'foo''''
+'''<nowiki>''foo''</nowiki>'''
+'''<nowiki>'''foo'''</nowiki>'''
+'''foo'<nowiki/>''bar'<nowiki/>''baz'''
+'''foo'''<nowiki/>'s
+'''foo''
+''foo''<nowiki/>'
+''foo'''<nowiki/>'
+'''foo''<nowiki/>'
+''''foo'''
+'''foo'''<nowiki/>'
+''''foo'''<nowiki/>'
+''fools'<span> errand</span>''
+''<span>fool</span>'s errand''
+'<nowiki/>''foo'' bar '''baz''
+a|!*#-:;+-~[]{}b'''x''
 !! end
 
 !! test
 1b. Quotes inside <b> and <i> with other tags on same line
 !! options
-parsoid=html2wt,wt2wt
+parsoid=html2wt
+!! html/parsoid
+'<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
+<i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
+<i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
+<a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
+'<i>foo</i> <span class="mw-ref" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
+'<i>foo</i> <div title="name">test</div>
+'<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
+</ol>
 !! wikitext
 '''a'' foo ''[[bar]]''
 ''a''' foo ''[[bar]]''
@@ -22081,56 +23199,49 @@ parsoid=html2wt,wt2wt
 '''foo'' <div title="name">test</div>
 '''foo'' and <br> bar
 <references />
-!! html
-'<i>a</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
-<i>a'</i> foo <i><a rel="mw:WikiLink" href="Bar" title="Bar">bar</a></i>
-<i>a'</i> foo <b><a rel="mw:WikiLink" href="Bar" title="Bar" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[bar]]"}},"i":0}}]}'>bar</a></b>
-<a rel="mw:WikiLink" href="Foo" title="Foo">foo</a> x'<i><a href="Bar" rel="mw:WikiLink" title="Bar">bar</a></i>
-'<i>foo</i> <span class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
-'<i>foo</i> <div title="name">test</div>
-'<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
-</ol>
 !! end
 
 !! test
 2. Link fragments separated by <i> and <b> tags
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>[[<i>foo</i>hello]]</p>
+<p>[[<b>foo</b>hello]]</p>
 !! wikitext
 [[''foo''<nowiki>hello]]</nowiki>
 
 [['''foo'''<nowiki>hello]]</nowiki>
-!! html
-<p>[[<i>foo</i>hello]]
-</p><p>[[<b>foo</b>hello]]
-</p>
 !! end
 
 # FIXME: Escaping one or both of [[ and ]] is also acceptable --
 #        this is one of the shortcomings of this format
 !! test
 3. Link fragments inside <i> and <b>
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><i>[[foo</i>]]</p>
+<p><b>[[foo</b>]]</p>
 !! wikitext
 ''[[foo''<nowiki>]]</nowiki>
 
 '''[[foo'''<nowiki>]]</nowiki>
-!! html
-<p><i>[[foo</i>]]
-</p><p><b>[[foo</b>]]
-</p>
 !! end
 
 !! test
 4. No escaping needed
-!! wikitext
-'<span>''bar''</span>'
-'<span>'''bar'''</span>'
-'a:b'foo
-!! html
+!! options
+options=html2wt
+!! html/parsoid
 <p>'<span><i>bar</i></span>'
 '<span><b>bar</b></span>'
 'a:b'foo
 </p>
+!! wikitext
+'<span>''bar''</span>'
+'<span>'''bar'''</span>'
+'a:b'foo
 !! end
 
 #### ----------- Paragraphs ---------------
@@ -22139,6 +23250,15 @@ parsoid=html2wt,wt2wt
 
 !! test
 1. No unnecessary escapes
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>bar <span>[[foo]]</span>
+</p><p>=bar <span>[[foo]]</span>
+</p><p>[[bar <span>[[foo]]</span>
+</p><p>]]bar <span>[[foo]]</span>
+</p><p>=bar <span>foo]]</span>=
+</p>
 !! wikitext
 bar <span><nowiki>[[foo]]</nowiki></span>
 
@@ -22149,13 +23269,6 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 ]]bar <span><nowiki>[[foo]]</nowiki></span>
 
 =bar <span>foo]]</span><nowiki>=</nowiki>
-!! html
-<p>bar <span>[[foo]]</span>
-</p><p>=bar <span>[[foo]]</span>
-</p><p>[[bar <span>[[foo]]</span>
-</p><p>]]bar <span>[[foo]]</span>
-</p><p>=bar <span>foo]]</span>=
-</p>
 !!end
 
 #### ----------------------- PRE --------------------------
@@ -22164,101 +23277,136 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 !! test
 1. Leading whitespace in SOL context should be escaped
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+<p> a</p>
+
+<p>  a</p>
+
+<p>    a(tab)</p>
+
+<p>    a
+<!--cmt-->
+  a</p>
+
+<p>a
+ b</p>
+
+<p>a
+       b</p>
+
+<p>a
+        b</p>
 !! wikitext
 <nowiki> </nowiki>a
 
 <nowiki> </nowiki> a
 
-<nowiki>       </nowiki>a(tab)
+       a(tab)
 
 <nowiki> </nowiki>     a
 <!--cmt-->
-<nowiki> </nowiki> a
+<nowiki>  </nowiki>a
 
 a
 <nowiki> </nowiki>b
 
 a
-<nowiki>       </nowiki>b
+       b
 
 a
-<nowiki>       </nowiki> b
-!! html
-<p> a</p>
-<p>  a</p>
-<p>    a(tab)</p>
-<p>    a</p>
-<p><!--cmt-->  a</p>
-<p>a
- b</p>
-<p>a
-       b</p>
-<p>a
-        b</p>
+        b
+!! html/php
+<p> a
+</p><p>  a
+</p><p>        a(tab)
+</p><p>        a
+  a
+</p><p>a
+ b
+</p><p>a
+       b
+</p><p>a
+        b
+</p>
 !! end
 
 !! test
 2. Leading whitespace in non-indent-pre contexts should not be escaped
 !! options
-parsoid
+parsoid=htm2wt
+!! html/parsoid
+<p>foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i data-parsoid='{"dsr":[9,14,2,2]}'>a</i>
+ b</span></li>
+</ol>
 !! wikitext
 foo <ref>''a''
  b</ref>
 <references />
-!! html
-<p>foo <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i data-parsoid='{"dsr":[9,14,2,2]}'>a</i>
- b</span></li>
-</ol>
 !! end
 
 !! test
 3. Leading whitespace in indent-pre suppressing contexts should not be escaped
 !! options
-parsoid
-!! wikitext
+parsoid=html2wt
+!! html/parsoid
 <blockquote>
+<p>
  a
  <span>b</span>
- c
+ c</p>
 </blockquote>
-!! html
+!! wikitext
 <blockquote>
-<p>
  a
  <span>b</span>
- c</p>
+ c
 </blockquote>
 !! end
 
 !! test
 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
 !! options
-parsoid
+options=html2wt
+!! html/parsoid
+ <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! wikitext
  [[File:Foobar.jpg|thumb|caption]]
-!! html/parsoid
- <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 5. Nowiki escaping should account for indent-pres
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <pre>==foo==</pre>
 !! wikitext
  ==foo==
 !! end
 
+!!test
+T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
+!! options
+parsoid=html2wt
+!! html/parsoid
+<pre>
+* foo
+* bar
+</pre>
+!! wikitext
+ * foo
+ * bar
+!! end
+
 #### --------------- Behavior Switches --------------------
+
 !! test
 1. Valid behavior switches should be escaped
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 __TOC__
 <i>__TOC__</i>
 !! wikitext
@@ -22270,7 +23418,7 @@ __TOC__
 2. Invalid behavior switches should not be escaped
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 __TOO__
 __|__
 !! wikitext
@@ -22278,6 +23426,31 @@ __TOO__
 __|__
 !! end
 
+# We use indent-pre as an indirect way to test for sol-transparent behavior.
+!! test
+Behavior switches should be SOL-transparent
+!! options
+parsoid=html2wt
+!! html/parsoid
+ <meta property="mw:PageProp/toc" />
+
+ <!-- this one's bogus -->
+<pre>__TOO__</pre>
+
+<pre data-parsoid='{}'><meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/> foo</pre>
+
+<meta property="mw:PageProp/toc" data-parsoid='{"src":"__TOC__","magicSrc":"__TOC__"}'/><pre data-parsoid='{}'>bar</pre>
+!! wikitext
+ __TOC__
+
+ <!-- this one's bogus -->
+ __TOO__
+
+ __TOC__ foo
+
+__TOC__ bar
+!! end
+
 #### --------------- HTML tags ---------------
 #### 1. a tags
 #### 2. other tags
@@ -22287,75 +23460,85 @@ __|__
 !! test
 1. a tags
 !! options
-parsoid
+parsoid=html2wt
+!! html/parsoid
+&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
 !! wikitext
 <a href="http://google.com">google</a>
-!! html
-&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
 !! end
 
 !! test
 2. other tags
-!! wikitext
-* <nowiki><div>foo</div></nowiki>
-* <nowiki><div style="color:red">foo</div></nowiki>
-* <nowiki><td></nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <ul><li> &lt;div&gt;foo&lt;/div&gt;</li>
 <li> &lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;</li>
 <li> &lt;td&gt;</li></ul>
 
+!! wikitext
+* <nowiki><div>foo</div></nowiki>
+* <nowiki><div style="color:red">foo</div></nowiki>
+* <nowiki><td></nowiki>
 !! end
 
 !! test
 3. multi-line html tag
-!! wikitext
-<nowiki><div
->foo</div
-></nowiki>
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>&lt;div
 &gt;foo&lt;/div
 &gt;
 </p>
+!! wikitext
+<nowiki><div
+>foo</div
+></nowiki>
 !! end
 
 !! test
 4. extension tags
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>&lt;ref&gt;foo&lt;/ref&gt;
+</p><p>&lt;ref&gt;bar
+</p><p>baz&lt;/ref&gt;
+</p>
 !! wikitext
 <nowiki><ref>foo</ref></nowiki>
 
 <nowiki><ref>bar</nowiki>
 
 baz<nowiki></ref></nowiki>
-!! html
-<p>&lt;ref&gt;foo&lt;/ref&gt;
-</p><p>&lt;ref&gt;bar
-</p><p>baz&lt;/ref&gt;
-</p>
 !! end
 
 #### --------------- Others ---------------
 !! test
 Escaping nowikis
-!! wikitext
-&lt;nowiki&gt;foo&lt;/nowiki&gt;
-!! html
+!! options
+parsoid=html2wt
+!! html/parsoid
 <p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
 </p>
+!! wikitext
+&lt;nowiki&gt;foo&lt;/nowiki&gt;
 !! end
 
 ## The quote-char in the input is necessary for triggering the bug
 !! test
 (Bug 52035) Nowiki-escaping should not get tripped by " :" in text
 !! options
-parsoid=wt2wt,html2wt
+parsoid=html2wt
+!! html/parsoid
+<p>foo's bar :</p>
 !! wikitext
 foo's bar :
-!! html
-<p>foo's bar :</p>
 !! end
 
+#----------- End of wikitext escaping tests --------------
+
 !! test
 
 Tag-like HTML structures are passed through as text
@@ -22407,20 +23590,9 @@ HTML tag with broken attribute value quoting
 !! wikitext
 <span title="Hello world>Foo</span>
 !! html/php
-<p><span>Foo</span>
-</p>
-!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
-!! end
-
-!! test
-Parsoid-only: HTML tag with broken attribute value quoting
-!! options
-parsoid
-!! wikitext
-<span title="Hello world>Foo</span>
-!! html
+!! html/parsoid
 <p><span title="Hello world">Foo</span>
 </p>
 !! end
@@ -22434,7 +23606,7 @@ Table with broken attribute value quoting
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td></tr></table>
 
 !! html/parsoid
@@ -22455,9 +23627,9 @@ Table with broken attribute value quoting on consecutive lines
 !! html/php
 <table>
 <tr>
-<td>Foo
+<td title="Hello world">Foo
 </td>
-<td>Bar
+<td style="color:red">Bar
 </td></tr></table>
 
 !! html/parsoid
@@ -22470,7 +23642,7 @@ Table with broken attribute value quoting on consecutive lines
 !! end
 
 !! test
-Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+2. Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
 !! wikitext
@@ -22480,7 +23652,7 @@ parsoid
 !! end
 
 !! test
-Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
+1. Parsoid-only: Don't wrap broken template tags in <nowiki> on wt2wt (Bug 42353)
 !! options
 parsoid
 !! wikitext
@@ -22599,6 +23771,8 @@ bar
 </tbody></table>
 !!end
 
+# Note that the "style" attribute is really a template parameter here.
+# The = would have to be {{=}} if you wanted the literal.
 !!test
 Empty TD followed by TD with tpl-generated attribute
 !! wikitext
@@ -22759,7 +23933,7 @@ Multi-line image caption generated by templates with/without trailing newlines
 New element inserted (without intervening newlines) after an old sol-transparent node should serialize correctly
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>foo&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><p>new para</p>
 
 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{}'/><h1>new heading</h1>
@@ -22776,12 +23950,10 @@ new para
 ## a Parsoid serializer test, marking this Parsoid only
 !!test
 Improperly nested inline or quotes tags with whitespace in between
-!!options
-parsoid
 !! wikitext
 <span> <s>x</span> </s>
 ''' ''x''' ''
-!! html
+!! html/parsoid
 <p><span> <s>x</s></span><s> </s>
 <b> <i>x</i></b><i> </i>
 </p>
@@ -22789,12 +23961,10 @@ parsoid
 
 !!test
 Encapsulate protected attributes from wt
-!!options
-parsoid
 !! wikitext
-<div typeof="mw:placeholder stuff" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
-!! html
-<body><div data-x-typeof="mw:placeholder stuff" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
+<div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
+!! html/parsoid
+<body><div data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
 </body>
 !!end
 
@@ -22807,7 +23977,7 @@ Ensure ParagraphWrapper can deal with stray closing pre tags
 parsoid=wt2html
 !! wikitext
 plain text</pre>
-!! html
+!! html/parsoid
 plain text
 !!end
 
@@ -22817,7 +23987,7 @@ plain text
 parsoid=wt2html
 !! wikitext
 <table>hi</table><table>ho</table>
-!! html
+!! html/parsoid
 <p>hi</p>
 <table></table>
 <p>ho</p>
@@ -22833,7 +24003,7 @@ parsoid=wt2html,wt2wt
 <tr> || ||
 <td> a
 </table>
-!! html
+!! html/parsoid
 <p> || ||
 </p><table>
 <tbody><tr><td> a</td></tr>
@@ -22846,7 +24016,7 @@ Encapsulation properly handles null DSR information from foster box
 parsoid=wt2html,wt2wt
 !! wikitext
 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
-!! html
+!! html/parsoid
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
 !!end
 
@@ -22856,7 +24026,7 @@ parsoid=wt2html,wt2wt
 parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
-!! html
+!! html/parsoid
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
 <tbody>
 <tr>
@@ -22872,7 +24042,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
-!! html
+!! html/parsoid
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div><tr><td>bar</td></tr></table>&quot;]}">foo</div>
 <table>
 <tbody>
@@ -22889,7 +24059,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
-!! html
+!! html/parsoid
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
 <p>foo</p>
 </div>
@@ -22908,7 +24078,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
-!! html
+!! html/parsoid
 <div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
 <p>foo</p>
 </div>
@@ -22927,7 +24097,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
-!! html
+!! html/parsoid
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
 <table>
 <tbody>
@@ -22948,7 +24118,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
-!! html
+!! html/parsoid
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
 <table>
 <tbody>
@@ -22970,7 +24140,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
-!! html
+!! html/parsoid
 <p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;<td>bar</td></table>&quot;]}">foo</p>
 <table>
 <tbody>
@@ -22981,6 +24151,8 @@ parsoid=wt2wt,wt2html
 </table>
 !!end
 
+# Note that the wt is broken on purpose: the = should be {{=}} if you
+# don't want it to be a template parameter key.
 !!test
 8. Encapsulate foster-parented transclusion content
 !!options
@@ -22991,8 +24163,11 @@ parsoid=wt2wt,wt2html
 |-
 |b
 |}
-!! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</p><table>
+!! html/parsoid
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p>
+<span> </span>
+<p typeof="mw:Transclusion" data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"style":{"wt":"&#39;color:red&#39;"}},"i":0}},"\n|-\n|b\n|}"]}'>{{{1}}}</p>
+<table>
 <tbody>
 <tr>
 <td>b</td>
@@ -23007,7 +24182,7 @@ parsoid=wt2wt,wt2html
 parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|hi</table>hello}}
-!! html
+!! html/parsoid
 <p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
 !!end
 
@@ -23022,7 +24197,7 @@ parsoid=wt2html,wt2wt
 |}
 </div>
 |}
-!! html
+!! html/parsoid
 <div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
 </span>
 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
@@ -23050,7 +24225,7 @@ Properly encapsulate empty-content transclusions in fosterable positions
 Support <object> element with .data attribute
 !!options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <object data="test.swf"></object>
 !! wikitext
 <object data="test.swf"></object>
@@ -23079,7 +24254,7 @@ Don't block XML namespace declaration
 Serialize interwiki links pointing to the current wiki as plain wiki links (bug 65869)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
 !! wikitext
 [[Foo]]
@@ -23090,7 +24265,7 @@ parsoid=html2wt
 New wikilinks should be serialized properly
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{}'>Foo</a>
 <a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>
 !! wikitext
@@ -23102,7 +24277,7 @@ parsoid=html2wt
 New wiki links (href variations)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
 <a rel="mw:WikiLink" href="Foo_bar">Foo_bar</a>
 <a rel="mw:WikiLink" href="Foo bar">Foo_bar</a>
@@ -23118,7 +24293,7 @@ parsoid=html2wt
 New wiki links (content string variations)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a rel="mw:WikiLink" href="./Foo_bar">Foo_bar</a>
 <a rel="mw:WikiLink" href="./Foo_bar">Foo bar</a>
 <a rel="mw:WikiLink" href="./Foo_bar">./Foo_bar</a>
@@ -23132,7 +24307,7 @@ parsoid=html2wt
 New category links (href variations)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne" />
 <link rel="mw:PageProp/Category" href="./Category:Toxine_bact%C3%A9rienne" />
 <link rel="mw:PageProp/Category" href="Category:Toxine_bact%C3%A9rienne" />
@@ -23147,7 +24322,7 @@ New sol transparent links don't need indent-pre nowiki protection
 !! options
 parsoid=html2wt
 language=de
-!! html
+!! html/parsoid
          <link rel="mw:PageProp/redirect" href="./Main_Page">
 <!-- this is good  -->    <link rel="mw:PageProp/Category" href="./Category:Good" />
 <!-- this is great -->    <link rel="mw:PageProp/Category" href="./Kategorie:Great" />
@@ -23161,7 +24336,7 @@ language=de
 New interlanguage links (href variations)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine bactérienne" />
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bactérienne" />
 <link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Toxine_bact%C3%A9rienne" />
@@ -23308,16 +24483,17 @@ parsoid
 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"alt","ak":"alt="},{"ck":"caption","ak":"bar"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img alt="" resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"alt":"","resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"alt":"alt=","resource":"File:Foobar.jpg"}}'/></a><figcaption>bar</figcaption></figure>
 !! end
 
-#!! test
-#Image: new attributes should be serialized in wiki's language for RTL languages (bug 51852)
-#!! options
-#parsoid=html2wt
-#language=ar
-#!! html
-#<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="180"/></a></figure>
-#!! wikitext
-#[[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
-#!! end
+!! test
+Image: new attributes should be serialized in wiki's language for RTL languages (bug 51852)
+!! options
+parsoid=html2wt
+language=ar
+disabled
+!! html/parsoid
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image/Thumb"><a href="./Imagen:Foobar.jpg"><img resource="./Imagen:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="20" width="180"/></a></figure>
+!! wikitext
+[[Imagen:Foobar.jpg|derecha|miniaturadeimagen]]
+!! end
 
 !! test
 Image: Block level image should have \n before and after
@@ -23327,7 +24503,7 @@ Image: Block level image should have \n before and after
 456
 !! html/parsoid
 <p>123</p>
-<figure class="mw-halign-right" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150"/></a></figure>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="17" width="150"/></a></figure>
 <p>456</p>
 !!end
 
@@ -23345,26 +24521,22 @@ Image: New block level image should have \n before and after (existing content)
 
 !! test
 Image: upright option (parsoid)
-!! options
-parsoid
 !! wikitext
 [[File:Foobar.jpg|thumb|upright|caption]]
 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
-!! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="19" width="170"/></a><figcaption>caption</figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="12" width="110"/></a><figcaption>caption</figcaption></figure>
-<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/170px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="19" width="170"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/110px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="12" width="110"/></a><figcaption>caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/500px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
 !!end
 
 !! test
 Image: upright option is ignored on inline and frame images (parsoid)
-!! options
-parsoid
 !! wikitext
 [[File:Foobar.jpg|500x500px|upright=0.5|caption]]
-!! html
-<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a></span></p>
+!! html/parsoid
+<p><span typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/500px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="57" width="500"/></a></span></p>
 !!end
 
 !! test
@@ -23413,7 +24585,7 @@ parsoid=html2wt
 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <ul>
 <li><p>foo</p></li>
 </ul>
@@ -23425,7 +24597,7 @@ parsoid=html2wt
 Lists: Serialize correctly even when list tags has unneeded whitespace between tags
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <ul> <li>foo</li></ul>
 !! wikitext
 * foo
@@ -23435,7 +24607,7 @@ parsoid=html2wt
 Don't strip leading whitespace when handling indent-pre suppressing tags
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <table>
   <tr><td> indented row</td></tr>
 </table>
@@ -23468,55 +24640,39 @@ foo
 Nowiki-wrap leading whitespace when handling indent-pre inducing tags
 !! options
 parsoid=html2wt
-!! wikitext
-foo
-<nowiki> </nowiki><span>bar</span>
+!! html/parsoid
+<p>foo</p>
+ <span>bar</span>
 
 <span>foo2
-<nowiki> </nowiki></span>bar2
+ </span>bar2
 
 <div>foo</div>
-<nowiki> </nowiki><span>bar</span>
+ <span>bar</span>
 
 <div>
-<nowiki> </nowiki><span>foo</span>
+ <span>foo</span>
 </div>
-!! html
-<p>foo</p>
- <span>bar</span>
+!! wikitext
+foo
+<nowiki> </nowiki><span>bar</span>
 
 <span>foo2
- </span>bar2
+<nowiki> </nowiki></span>bar2
 
 <div>foo</div>
- <span>bar</span>
+<nowiki> </nowiki><span>bar</span>
 
 <div>
- <span>foo</span>
+<nowiki> </nowiki><span>foo</span>
 </div>
 !! end
 
-!! test
-Lists: Add space after bullets
-!! options
-parsoid=html2wt
-!! html
-<ul>
-<li>foo</li>
-<li> bar</li>
-<li><span> baz</span></li>
-</ul>
-!! wikitext
-* foo
-* bar
-* <span> baz</span>
-!! end
-
 !! test
 Lists: Dont insert newlines in a serialized list item.
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <ul><li>a<br>b</li><li>c</li></ul>
 !! wikitext
 * a<br>b
@@ -23524,49 +24680,106 @@ parsoid=html2wt
 !! end
 
 !! test
-Headings: Add space before/after == (Bug 51744)
+1. Headings: Force sol-transparent links and behavior switches to serialize before/after
 !! options
-parsoid=html2wt
-!! html
-<h2>foo</h2>
-<h2> bar</h2>
-<h2>baz </h2>
-<h2><span> baz</span></h2>
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html/parsoid
+<h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
+<h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
+
+<h2><!--foo-->  <link href="./Category:A3" rel="mw:PageProp/Category" />   how goes it</h2>
+<h2>it goes well   <link href="./Category:A4" rel="mw:PageProp/Category" />  <!--bar--></h2>
+
+<h2 data-parsoid='{}'>howdy<link href="./Category:A5" rel="mw:PageProp/Category" /></h2>
+
+<h2><meta property="mw:PageProp/toc" /> ok</h2>
 !! wikitext
-== foo ==
+== hello there [[Category:A1]]  ==
 
-== bar ==
+==  [[Category:A2]] hi pal ==
 
-== baz ==
+==  <!--foo-->  [[Category:A3]]    how goes it ==
 
-== <span> baz</span> ==
+== it goes well    [[Category:A4]]  <!--bar-->  ==
+
+==howdy [[Category:A5]] ==
+
+==  __TOC__  ok ==
 !! end
 
 !! test
-Headings: Force metas to serialize before/after
+2. Headings: Force sol-transparent links and behavior switches to serialize before/after
 !! options
-parsoid=html2wt
-!! html
-<h2>hello there<link href="Category:A1" rel="mw:PageProp/Category" /></h2>
-<h2><link href="Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<h2>hello there<link href="./Category:A1" rel="mw:PageProp/Category" /></h2>
+<h2><link href="./Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
 
-<h2><!--foo-->  <link href="Category:A3" rel="mw:PageProp/Category" />   how goes it</h2>
+<h2><!--foo-->  <link href="./Category:A3" rel="mw:PageProp/Category" />   how goes it</h2>
+<h2>it goes well   <link href="./Category:A4" rel="mw:PageProp/Category" />  <!--bar--></h2>
+
+<h2><meta property="mw:PageProp/toc" /> ok</h2>
 !! wikitext
 == hello there ==
 [[Category:A1]]
-
 [[Category:A2]]
+
 == hi pal ==
 
 <!--foo-->  [[Category:A3]]
+
 == how goes it ==
+
+== it goes well ==
+[[Category:A4]]  <!--bar-->
+
+__TOC__
+
+== ok ==
+!! end
+
+!! test
+Headings: Don't hoist metas that come from templates
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<h2><span about="#mwt1" typeof="mw:Transclusion" data-parsoid="{}" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo [[Category:Foo]]"}},"i":0}}]}'>foo </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid="{}" /></h2>
+!! wikitext
+== {{echo|foo [[Category:Foo]]}} ==
+!! end
+
+!! test
+Headings: Category in ref isn't hoisted
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<h2> foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> </h2>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">bar <link rel="mw:PageProp/Category" href="./Category:Baz" /> </span></li></ol>
+!! wikitext
+== foo <ref>bar 
+[[Category:Baz]] </ref> ==
+
+<references />
 !! end
 
 !! test
 Parsoid: Serialize positional parameters with = in them as named parameter
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion"
 data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"f=oo"}},"i":0}}]}'>foo</p>
 
@@ -23590,7 +24803,7 @@ data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},
 Parsoid: Serialize positional parameters with = in extlink as named parameter
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://stuff?is=ok" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"http://stuff?is=ok"}},"i":0}}]}'>http://stuff?is=ok</a></p>
 !! wikitext
 {{echo|1 = http://stuff?is=ok}}
@@ -23600,7 +24813,7 @@ parsoid=html2wt
 Parsoid: Correctly serialize block-node children when they are a combination of text and p-nodes
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <div>a<p>b</p></div>
 <div>a
 <p>b</p></div>
 Substrings resembling wikitext in hrefs should not get nowiki escapes
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
 !! wikitext
 [[Foo''bar''baz]]
@@ -23635,27 +24848,89 @@ parsoid=html2wt
 Enforce single-line context in the serializer
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <h2>testing
 123</h2>
 
+<h2> hi <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bogus","href":"./Template:Bogus"},"params":{"1":{"wt":"there\nyou"}},"i":0}}]}'>there</span><span about="#mwt1">
+</span><span about="#mwt1">you</span> </h2>
+
+<h2> foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span> </h2>
+
+<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">hello
+there</span></li></ol>
+
 <ul><li>asd
 sdf</li></ul>
+
+<ul><li>foo
+bar
+baz</li>
+<li>foo <b>bar</b>
+baz</li></ul>
+
+<dl><dt>hi
+ho </dt><dd data-parsoid='{"stx":"row"}'> hi
+ho</dd></dl>
+
+<dl><dd> <table>
+<tbody><tr><td> ha
+ha
+ha</td></tr>
+</tbody></table></dd></dl>
 !! wikitext
 == testing 123 ==
 
+== hi {{bogus|there
+you}} ==
+
+== foo <ref>hello
+there</ref> ==
+
+<references />
+
 * asd sdf
+
+* foo bar baz
+* foo '''bar''' baz
+
+; hi ho : hi ho
+
+: {|
+| ha
+ha
+ha
+|}
+!! end
+
+!! test
+Serialize new placeholder space without spans
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>foo<span typeof="mw:Placeholder"> </span>: bar</p>
+
+<p>foo<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span>: bar</p>
+
+<span typeof="mw:Extension/ref" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo<span typeof=\&quot;mw:Placeholder\&quot;>&amp;nbsp;</span>: bar&quot;}}"><sup>[1]</sup></span>ok</p>
+!! wikitext
+foo : bar
+
+foo : bar
+
+<ref>foo : bar</ref>ok
 !! end
 
-#-----------------------------
-# I/B quote minimization tests
-#-----------------------------
+
+#-----------------------
+# Tag minimization tests
+#-----------------------
 
 !! test
 1. I/B quote minimization: wikitext-only tags should be combined
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><i>A</i><i>B</i></p>
 <p><b>A</b><b>B</b></p>
 <p><i>A</i><b><i>B</i></b></p>
@@ -23686,7 +24961,7 @@ parsoid=html2wt
 2. I/B quote minimization: wikitext and html tags should not be combined
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><i>A</i><i data-parsoid='{"stx":"html"}'>B</i></p>
 <p><i>A</i><b><i data-parsoid='{"stx":"html"}'>B</i></b></p>
 !! wikitext
@@ -23699,7 +24974,7 @@ parsoid=html2wt
 3. I/B quote minimization: templated content stops minimization
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><i>A</i><i about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;B&#39;&#39;"}},"i":0}}]}'>B</i>
 <p><i>A</i><b about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;&#39;&#39;&#39;B&#39;&#39;&#39;&#39;&#39;"}},"i":0}}]}'><i>B</i></b>
 !! wikitext
@@ -23712,7 +24987,7 @@ parsoid=html2wt
 4. I/B quote minimization: new content should be mimimized with adjacent old content
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <p><i>A</i><i>B</i></p>
 <p><b>A</b><b>B</b></p>
 <p><i>A</i><b><i>B</i></b></p>
@@ -23754,18 +25029,61 @@ parsoid={
 ''ac''
 !! end
 
-#------------------------------------
-# End of I/B quote minimization tests
-#------------------------------------
+!! test
+1. Merge adjacent link nodes as long as at least one element is new
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
+<a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
+<a data-parsoid="{}" rel="mw:WikiLink" href="./Football">Foot</a><a data-parsoid="{}" rel="mw:WikiLink" href="./Football">ball</a>
+!! wikitext
+[[Football]]
+[[Football]]
+[[Football|Foot]][[Football|ball]]
+!! end
+
+!! test
+2. Merge adjacent link nodes and enable additional normalizations
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
+!! wikitext
+[[Football|''Football'']]
+!! end
+
+!! test
+3. Don't merge adjacent link nodes if scrubWikitext is false
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Football">Foot</a><a rel="mw:WikiLink" href="./Football">ball</a>
+!! wikitext
+[[Football|Foot]][[Football|ball]]
+!! end
+
+#------------------------------
+# End of tag minimization tests
+#------------------------------
 
 !!test
 Bug 54262: New entities
 !! options
 parsoid=html2wt
+!! html/parsoid
+<span typeof="mw:Entity">&nbsp;</span>
 !! wikitext
 &nbsp;
-!! html
-<span typeof="mw:Entity">&nbsp;</span>
 !! end
 
 ## Note that there is no wikitext output for 'unknownproperty' ##
@@ -23775,7 +25093,7 @@ parsoid=html2wt
 Magic words
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <meta property='mw:PageProp/toc' />
 <meta property='mw:PageProp/notoc' />
 <meta property='mw:PageProp/forcetoc' />
@@ -23802,7 +25120,7 @@ __NOCONTENTCONVERT__
 Consecutive <pre>s should not get merged
 !! options
 parsoid=html2wt,html2html
-!! html
+!! html/parsoid
 <pre>a</pre><pre>b</pre>
 
 <pre>c
@@ -23834,8 +25152,8 @@ f</pre>
 Edited ISBN links not serializable as ISBN links should serialize as wikilinks
 !! options
 parsoid=html2wt
-!! html
-<a rel="mw:ExtLink" href="./Special:BookSources/1234567890">ISBN 1234567895</a>
+!! html/parsoid
+<a href="./Special:BookSources/1234567890" rel="mw:ExtLink">ISBN 1234567895</a>
 !! wikitext
 [[Special:BookSources/1234567890|ISBN 1234567895]]
 !! end
@@ -23844,7 +25162,7 @@ parsoid=html2wt
 Edited RFC links not serializable as RFC links should serialize as extlinks
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a href="//tools.ietf.org/html/rfc123" rel="mw:ExtLink">New RFC</a>
 !! wikitext
 [//tools.ietf.org/html/rfc123 New RFC]
@@ -23854,7 +25172,7 @@ parsoid=html2wt
 Edited PMID links not serializable as PMID links should serialize as extlinks
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a href="//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract" rel="mw:ExtLink">New PMID</a>
 !! wikitext
 [//www.ncbi.nlm.nih.gov/pubmed/123?dopt=Abstract New PMID]
@@ -23911,21 +25229,142 @@ x<nowiki/>http://cscott.net<nowiki/>x
 !! end
 
 !! test
-Edited Redirect link should emit a non-piped wikitext link
+WTS of edited autolink-like text (T103364)
 !! options
-parsoid=html2wt
-!! html
-<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    [ "span[typeof]", "removeAttr", "typeof" ]
+  ]
+}
 !! wikitext
-#REDIRECT [[Bar]]
+Not a link: <nowiki>http://example.com</nowiki>.
+!! wikitext/edited
+Not a link: <span><nowiki>http://example.com</nowiki></span>.
 !! end
 
 !! test
-T75121: Infer extension name from typeOf if data-mw is not present
+WTS of newly-authored autolink-like text (T103364)
 !! options
 parsoid=html2wt
-!! html
-<div typeOf="mw:Extension/foo"></div>
+!! html/parsoid
+<p>http://example.com is not a link.</p>
+!! wikitext
+<nowiki>http://example.com is not a link.</nowiki>
+!! end
+
+!! test
+WTS of autolink-like text after an autolink (T108563)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com">http://example.com</a> http://example.com is not a link.</p>
+!! wikitext
+http://example.com<nowiki> http://example.com is not a link.</nowiki>
+!! end
+
+!! test
+Magic links inside links (not autolinked)
+!! wikitext
+[[Foo|http://example.com]]
+[[Foo|RFC 1234]]
+[[Foo|PMID 1234]]
+[[Foo|ISBN 123456789x]]
+
+[http://foo.com http://example.com]
+[http://foo.com RFC 1234]
+[http://foo.com PMID 1234]
+[http://foo.com ISBN 123456789x]
+!! html+tidy
+<p><a href="/wiki/Foo" title="Foo">http://example.com</a> <a href="/wiki/Foo" title="Foo">RFC 1234</a> <a href="/wiki/Foo" title="Foo">PMID 1234</a> <a href="/wiki/Foo" title="Foo">ISBN 123456789x</a></p>
+<p><a rel="nofollow" class="external text" href="http://foo.com">http://example.com</a> <a rel="nofollow" class="external text" href="http://foo.com">RFC 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">PMID 1234</a> <a rel="nofollow" class="external text" href="http://foo.com">ISBN 123456789x</a></p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">http://example.com</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">RFC 1234</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">PMID 1234</a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">ISBN 123456789x</a></p>
+
+<p><a rel="mw:ExtLink" href="http://foo.com">http://example.com</a>
+<a rel="mw:ExtLink" href="http://foo.com">RFC 1234</a>
+<a rel="mw:ExtLink" href="http://foo.com">PMID 1234</a>
+<a rel="mw:ExtLink" href="http://foo.com">ISBN 123456789x</a></p>
+!! end
+
+!! test
+Magic links inside image captions (autolinked)
+!! wikitext
+[[File:Foobar.jpg|thumb|http://example.com]]
+[[File:Foobar.jpg|thumb|RFC 1234]]
+[[File:Foobar.jpg|thumb|PMID 1234]]
+[[File:Foobar.jpg|thumb|ISBN 123456789x]]
+!! html+tidy
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a class="external mw-magiclink-rfc" rel="nofollow" href="//tools.ietf.org/html/rfc1234">RFC 1234</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a></div>
+</div>
+</div>
+<div class="thumb tright">
+<div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>
+<a href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div>
+</div>
+</div>
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" href="http://example.com">http://example.com</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//tools.ietf.org/html/rfc1234" rel="mw:ExtLink">RFC 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink">PMID 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/123456789X" rel="mw:WikiLink">ISBN 123456789x</a></figcaption></figure>
+!! end
+
+!! test
+WTS of magic word text (T109371)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>RFC 1234</p>
+<p><a href="http://foo.com" rel="mw:ExtLink">RFC 1234</a></p>
+<p><a href="./Foo" rel="mw:WikiLink">RFC 1234</a></p>
+!! wikitext
+<nowiki>RFC 1234</nowiki>
+
+[http://foo.com RFC 1234]
+
+[[Foo|RFC 1234]]
+!! end
+
+!! test
+Edited Redirect link should emit a non-piped wikitext link
+!! options
+parsoid=html2wt
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="Bar" data-parsoid='{"a":{"href":"./Foo"},"sa":{"href":"Foo"}}'>
+!! wikitext
+#REDIRECT [[Bar]]
+!! end
+
+!! test
+T75121: Infer extension name from typeOf if data-mw is not present
+!! options
+parsoid=html2wt
+!! html/parsoid
+<div typeOf="mw:Extension/foo"></div>
 !! wikitext
 <foo />
 !! end
@@ -23984,7 +25423,7 @@ parsoid=html2wt,wt2wt
 HTML id attribute with Parsoid-like element ids should not be serialized to wikitext
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <table id='mwAb'>
 <td id='mwAc'>foo</td>
 <td id='serialize-this'>bar</td>
@@ -24000,7 +25439,7 @@ parsoid=html2wt
 Parsoid-like element ids should not be serialized to wikitext unless shadowed
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <div id="mwAQ" data-parsoid='{"stx":"html","a":{"id":"mwAQ"},"sa":{"id":"hello"}}'>ok</div>
 !! wikitext
 <div id="hello">ok</div>
@@ -24027,67 +25466,708 @@ parsoid={
 Never serialize a-tag as html, regardless of what data-parsoid has to say
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"html"}'>Foo</a>
 !! wikitext
 [[Foo]]
 !! end
 
-# -----------------------------------------------------------------
-# End of section for Parsoid-only html2wt tests for serialization
-# of new content
-# -----------------------------------------------------------------
+## SSS FIXME: This is broken output nevertheless.
+## What might be a reasonable non-broken output for this?
+## This is an edge case unlikely to be seen in production
+## that I am not wasting more time on this right now.
+!! test
+Never serialize a-tag as html, no matter what attributes it has
+!! options
+parsoid=html2wt
+!! html/parsoid
+<a bad='true' href='http://boo.org'><img src='http://boohoo.org' /></a>
+!! wikitext
+[http://boo.org http://boohoo.org]
+!! end
 
-# -----------------------------------------------------------------
-# The following section of tests are primarily to spec behavior of
-# the selective serializer. All these tests have manual selser
-# changes. The automated selser changes for all tests handle the
-# wide variation of changes, but these tests here capture specs
-# deterministically.
-# ----------------------------------------------------------------
+# Misnested is an indication that selser can reuse the source but these have
+# shown to sneak through on occasion. See T101768.
+# The original wikitext here is: [http://test.com [[one]] two three]
+!! test
+Strip span tags added to mark as misnested
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://test.com" data-parsoid='{"targetOff":17,"contentOffsets":[17,34]}'></a><a rel="mw:WikiLink" href="./One" title="One" data-parsoid='{"stx":"simple","a":{"href":"./One"},"sa":{"href":"one"},"misnested":true}'>one</a><span data-parsoid='{"misnested":true}'> two three</span></p>
+!! wikitext
+[http://test.com][[one]] two three
+!! end
+
+# --------------------------------------------
+# Tests spec'ing wikitext serialization norms |
+# --------------------------------------------
+
+!! test
+Lists: Add space after bullets
+!! options
+parsoid=html2wt
+!! html/parsoid
+<ul>
+<li>foo</li>
+<li> bar</li>
+<li><span> baz</span></li>
+</ul>
+!! wikitext
+* foo
+* bar
+* <span> baz</span>
+!! end
+
+!! test
+1. Headings: Add space before/after == (T53744)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<h2>foo</h2>
+<h2> bar</h2>
+<h2>baz </h2>
+<h2><span> baz</span></h2>
+!! wikitext
+== foo ==
+
+== bar ==
+
+== baz ==
+
+== <span> baz</span> ==
+!! end
+
+!! test
+2. Headings: Add space before/after == even after hoisted content
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
+!! wikitext
+ [[Category:A2]]
+
+== ok ==
+!! end
+
+!! test
+1. Headings: suppress newly created empty headings
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<h2></h2>
+!! wikitext
+!! end
+
+!! test
+2. Headings: don't suppress empty headings if scrubWikitext is false
+!! options
+parsoid=html2wt
+!! html/parsoid
+<h2></h2>
+!! wikitext
+==<nowiki/>==
+!! end
 
-## T90517
 !! test
-1. Selser: New comments should not be lost
+3. Headings: suppress empty headings on edits
 !! options
 parsoid={
   "modes": ["selser"],
+  "scrubWikitext": true,
   "changes": [
-    [ "#a", "after", "<!--c1-->" ],
-    [ "#b", "before", "<!--c2-->" ]
+    [ "#x", "remove"]
   ]
 }
 !! wikitext
-<span id="a">a</span>
+==<span id="x">foo</span>==
+!! wikitext/edited
+!! end
 
-<span id="b">b</span>
+!! test
+1. WT Quote Tags: suppress newly created empty style tags
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<i></i><b></b>
+!! wikitext
+!! end
+
+!! test
+2. WT Quote Tags: don't suppress empty style tags if scrubWikitext is false
+!! options
+parsoid=html2wt
+!! html/parsoid
+<i></i><b></b>
+!! wikitext
+''<nowiki/>'''''<nowiki/>'''
+!! end
+
+!! test
+3. WT Quote Tags: suppress empty style tags on edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "#x", "remove"]
+  ]
+}
+!! wikitext
+'''<span id="x">foo</span>'''
 !! wikitext/edited
-<span id="a">a</span><!--c1-->
+!! end
 
-<!--c2--><span id="b">b</span>
+!! test
+1. Anchors: suppress newly created empty anchors
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Test" title="Test"></a>
+!! wikitext
+!! end
+
+!! test
+2. Anchors: don't suppress empty anchors if scrubWikitext is false
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Test" title="Test"></a>
+!! wikitext
+[[Test|<nowiki/>]]
 !! end
 
-## T89383
 !! test
-2. Selser: Check for validity of DSR before using it
+3. Anchors: suppress empty anchors on edits
 !! options
 parsoid={
   "modes": ["selser"],
+  "scrubWikitext": true,
   "changes": [
-    [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
+    [ "#x", "remove"]
   ]
 }
 !! wikitext
-<span id="a">a</span>
+[[Test|<span id="x">foo</span>]]
 !! wikitext/edited
-{{DISPLAYTITLE:foo}}
-<span id="a">a</span>
 !! end
 
+!! test
+3a. Anchors: do not suppress numbered extlinks
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "scrubWikitext": true
+}
+!! wikitext
+[http://foo.com]
+!! html/parsoid
+<a rel="mw:ExtLink" href="http://foo.com"></a>
+!! end
+
+!! test
+3b. Anchors: do not suppress numbered extlinks
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "#x", "remove"]
+  ]
+}
+!! wikitext
+[http://foo.com <span id="x">foo</span>]
+!! wikitext/edited
+[http://foo.com]
+!! end
+
+!!test
+Normalizations should be restricted to edited content
+!!options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "h1", "before", "<i></i>"]
+  ]
+}
+!!wikitext
+a
+= =
+b
+!!wikitext/edited
+a
+= =
+b
+!!end
+
+!! test
+1. Multiple normalizations (html2wt)
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<h2><i></i></h2>
+<p><a href='Foo' rel='mw:WikiLink'>foo<i></i>
+ </a><b><i></i></b>x</p>
+!! wikitext
+
+[[foo]]
+x
 
-TODO:
-more images
-more tables
-character entities
-and much more
-Try for 100% code coverage
+!! end
+
+!! test
+2. Multiple normalizations (selser)
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "#x", "after", "<h1><i></i></h1>\n<p> x<b></b></p>"]
+  ]
+}
+!! wikitext
+<span id="x">foo</span>
+!! wikitext/edited
+<span id="x">foo</span>
+
+x
+!! end
+
+!! test
+1. Indent Pre Nowiki: suppress whitespace at the start of new paragraph
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<p> hi</p>
+<p>    hello</p>
+!! wikitext
+hi
+
+hello
+!! end
+
+!! test
+2. Indent Pre Nowiki: don't suppress whitespace at the start of new paragraph if scrubWikitext is false
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p> hi</p>
+<p>    hello</p>
+!! wikitext
+<nowiki> </nowiki>hi
+
+<nowiki> </nowiki>   hello
+!! end
+
+!! test
+3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<p>Foo
+ bar
+baz</p>
+
+<table><tr><td>Foo
+ bar
+ baz bang</td></tr></table>
+
+<p><!--boo--> foo
+ bar</p>
+
+<p> foo
+ bar<span>boo</span></p>
+!! wikitext
+Foo
+bar
+baz
+
+{|
+|Foo
+bar
+baz bang
+|}
+
+<!--boo-->foo
+bar
+
+foo
+bar<span>boo</span>
+!! end
+
+!! test
+4. Indent Pre Nowiki: suppress leading whitespace in edited paragraphs
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "p", "html", " a\n b" ]
+  ]
+}
+!! wikitext
+xyz
+!! wikitext/edited
+a
+b
+!! end
+
+!! test
+1. New links that end in spaces
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
+<p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
+!! wikitext
+[[Berlin ]]<nowiki/>is the capital of Germany.
+
+[[Foo ]]'''bar'''
+
+[[Boston ]] is a city.
+!! end
+
+!! test
+2. New links that end in spaces
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
+<p><a rel="mw:WikiLink" href="./Boston" title="Boston">Boston </a> is a city.</p>
+!! wikitext
+[[Berlin]] is the capital of Germany.
+
+[[Foo]] '''bar'''
+
+[[Boston]] is a city.
+!! end
+
+!! test
+1. Table cells with escapable prefixes
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html
+<table>
+<tr><td>a</td></tr>
+<tr><td>-</td></tr>
+<tr><td>+</td></tr>
+</table>
+!! wikitext
+{|
+|a
+|-
+|<nowiki>-</nowiki>
+|-
+|<nowiki>+</nowiki>
+|}
+!! end
+
+!! test
+2. Table cells with escapable prefixes
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<table>
+<tr><td>a</td></tr>
+<tr><td>-</td></tr>
+<tr><td>+</td></tr>
+</table>
+!! wikitext
+{|
+|a
+|-
+| -
+|-
+| +
+|}
+!! end
+
+!! test
+3a. Table cells with escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "table tbody tr:first-child td:first-child", "remove"]
+  ]
+}
+!! wikitext
+{|
+|a||-
+|}
+!! wikitext/edited
+{|
+| -
+|}
+!! end
+
+!! test
+3b. Table cells with escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "table tbody tr:first-child td:first-child", "html", "-" ],
+    [ "#x", "remove" ]
+  ]
+}
+!! wikitext
+{|
+|pqr
+|<span id="x">foo</span>+
+|}
+!! wikitext/edited
+{|
+| -
+| +
+|}
+!! end
+
+# FIXME: This test will fail because
+# normalization doesn't realize that the id attribute
+# will eliminate the escapable scenario
+!! test
+4a. Table cells without escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "#x", "html", "-" ]
+  ]
+}
+!! wikitext
+{|
+| id="x" |abcd
+|}
+!! wikitext/edited
+{|
+| id="x" |-
+|}
+!! end
+
+## This tests normalizer's ability to discriminate between
+## cells having identical content.
+!! test
+4b. Table cells without escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "td", "html", "-" ]
+  ]
+}
+!! wikitext
+{|
+|a||b
+|}
+!! wikitext/edited
+{|
+| -||-
+|}
+!! end
+
+## This tests normalizer's ability to not be tripped by
+## comments (and whitespace)
+!! test
+4c. Table cells without escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "table tbody tr td:first-child", "remove" ]
+  ]
+}
+!! wikitext
+{|
+|-
+<!--foo--> |a||-
+|}
+!! wikitext/edited
+{|
+|-
+<!--foo--> | -
+|}
+!! end
+
+## This tests normalizer's ability to handle HTML cells
+!! test
+4d. Table cells without escapable prefixes after edits
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    [ "td", "html", "-" ]
+  ]
+}
+!! wikitext
+<table>
+<tr><td>a</td></tr>
+</table>
+!! wikitext/edited
+<table>
+<tr><td>-</td></tr>
+</table>
+!! end
+
+!! test
+Escape nowiki DOM elements
+!! options
+parsoid=html2wt
+!! html/parsoid
+<nowiki><i>foo</i></nowiki>
+!! wikitext
+&lt;nowiki&gt;''foo''&lt;/nowiki&gt;
+!! end
+
+# ---------------------------------------------------
+# End of tests spec'ing wikitext serialization norms |
+# ---------------------------------------------------
+
+# -----------------------------------------------------------------
+# End of section for Parsoid-only html2wt tests for serialization
+# of new content
+# -----------------------------------------------------------------
+
+# -----------------------------------------------------------------
+# The following section of tests are primarily to spec behavior of
+# the selective serializer. All these tests have manual selser
+# changes. The automated selser changes for all tests handle the
+# wide variation of changes, but these tests here capture specs
+# deterministically.
+# ----------------------------------------------------------------
+
+## T90517
+!! test
+Selser: New comments should not be lost
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    [ "#a", "after", "<!--c1-->" ],
+    [ "#b", "before", "<!--c2-->" ]
+  ]
+}
+!! wikitext
+<span id="a">a</span>
+
+<span id="b">b</span>
+!! wikitext/edited
+<span id="a">a</span><!--c1-->
+
+<!--c2--><span id="b">b</span>
+!! end
+
+## T89383
+!! test
+Selser: Check for validity of DSR before using it
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    [ "#a", "before", "<meta property='mw:PageProp/displaytitle' content='foo'>" ]
+  ]
+}
+!! wikitext
+<span id="a">a</span>
+!! wikitext/edited
+{{DISPLAYTITLE:foo}}
+<span id="a">a</span>
+!! end
+
+!! test
+1. DOMDiff: Changes to <ref> content should be looked up using id
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    ["#X", "after", "bar"],
+    ["#Y", "after", "baz"]
+  ]
+}
+!! wikitext
+X <ref><span id="X">foo</span></ref>
+Y <ref name="a" />
+<references>
+<ref name="a"><span id="Y">foo</span></ref>
+</references>
+!! wikitext/edited
+X <ref><span id="X">foo</span>bar</ref>
+Y <ref name="a" />
+<references>
+<ref name="a"><span id="Y">foo</span>baz</ref>
+</references>
+!! end
+
+!! test
+2. DOMDiff: Changes to <ref> content should be looked up using id
+!! options
+parsoid={
+  "modes": ["selser"],
+  "changes": [
+    ["#Z", "after", "bar"]
+  ]
+}
+!! wikitext
+A <ref>foo bar for a</ref>
+B <ref group="X" name="b" />
+
+<references />
+
+<references group="X">
+<ref name="b"><span id="Z">foo</span></ref>
+</references>
+!! wikitext/edited
+A <ref>foo bar for a</ref>
+B <ref group="X" name="b" />
+
+<references />
+
+<references group="X">
+<ref name="b"><span id="Z">foo</span>bar</ref>
+</references>
+!! end
index 3665e3c..57223da 100644 (file)
@@ -1370,12 +1370,12 @@ Message
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:Emailmessage</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailpage&amp;action=edit emailpage]&lt;br&gt;
-[[MediaWiki_talk:Emailpage|Talk]]
+[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailuser&amp;action=edit emailuser]&lt;br&gt;
+[[MediaWiki_talk:Emailuser|Talk]]
 &lt;/td&gt;&lt;td&gt;
 E-mail user
 &lt;/td&gt;&lt;td&gt;
-<template lineStart="1"><title>int:Emailpage</title></template>
+<template lineStart="1"><title>int:Emailuser</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailpagetext&amp;action=edit emailpagetext]&lt;br&gt;
 [[MediaWiki_talk:Emailpagetext|Talk]]
index c619df7..cdc223a 100644 (file)
@@ -1370,12 +1370,12 @@ Message
 </td><td>
 {{int:Emailmessage}}
 </td></tr><tr><td>
-[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailpage&action=edit emailpage]<br>
-[[MediaWiki_talk:Emailpage|Talk]]
+[http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailuser&action=edit emailuser]<br>
+[[MediaWiki_talk:Emailuser|Talk]]
 </td><td>
 E-mail user
 </td><td>
-{{int:Emailpage}}
+{{int:Emailuser}}
 </td></tr><tr><td>
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:Emailpagetext&action=edit emailpagetext]<br>
 [[MediaWiki_talk:Emailpagetext|Talk]]
index df4690a..73fa0b5 100644 (file)
@@ -48,10 +48,6 @@ class LessFileCompilationTest extends ResourceLoaderTestCase {
                $this->assertNotNull( $compiler->compileFile( $this->file ) );
        }
 
-       public function getName( $withDataSet = true ) {
-               return $this->toString();
-       }
-
        public function toString() {
                $moduleName = $this->module->getName();
 
index a33b86a..e1537bf 100644 (file)
@@ -73,7 +73,6 @@ help:
        #
        # Targets:
        #   phpunit (default)   Run all the tests with phpunit
-       #   install             Install PHPUnit from phpunit.de
        #   tap                 Run the tests individually through Test::Harness's prove(1)
        #   help                You're looking at it!
        #   coverage            Run the tests and generates an HTML code coverage report
index 0ce056f..7dc7027 100644 (file)
@@ -204,13 +204,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        while ( $this->db->trxLevel() > 0 ) {
                                $this->db->rollback();
                        }
-
-                       // don't ignore DB errors
-                       $this->db->ignoreErrors( false );
                }
 
                DeferredUpdates::clearPendingUpdates();
 
+               ob_start( 'MediaWikiTestCase::wfResetOutputBuffersBarrier' );
        }
 
        protected function addTmpFiles( $files ) {
@@ -218,6 +216,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        protected function tearDown() {
+               $status = ob_get_status();
+               if ( isset( $status['name'] ) && $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier' ) {
+                       ob_end_flush();
+               }
+
                $this->called['tearDown'] = true;
                // Cleaning up temporary files
                foreach ( $this->tmpFiles as $fileName ) {
@@ -233,9 +236,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        while ( $this->db->trxLevel() > 0 ) {
                                $this->db->rollback();
                        }
-
-                       // don't ignore DB errors
-                       $this->db->ignoreErrors( false );
                }
 
                // Restore mw globals
@@ -1117,7 +1117,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                // of tidy. In that case however, we can not reliably detect whether a failing validation
                // is due to malformed HTML, or caused by tidy not being installed as a command line tool.
                // That would cause all HTML assertions to fail on a system that has no tidy installed.
-               if ( !$GLOBALS['wgTidyInternal'] ) {
+               if ( !$GLOBALS['wgTidyInternal'] || !MWTidy::isEnabled() ) {
                        $this->markTestSkipped( 'Tidy extension not installed' );
                }
 
@@ -1180,4 +1180,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
                self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
        }
+
+       /**
+        * Used as a marker to prevent wfResetOutputBuffers from breaking PHPUnit.
+        * @return string
+        */
+       public static function wfResetOutputBuffersBarrier( $buffer ) {
+               return $buffer;
+       }
 }
index 99c7f64..a45cfbb 100644 (file)
@@ -1,20 +1,47 @@
 <?php
 
-class WellProtectedClass {
+class WellProtectedParentClass {
+       private $privateParentProperty;
+
+       public function __construct() {
+               $this->privateParentProperty = 9000;
+       }
+
+       private function incrementPrivateParentPropertyValue() {
+               $this->privateParentProperty++;
+       }
+
+       public function getPrivateParentProperty() {
+               return $this->privateParentProperty;
+       }
+}
+
+class WellProtectedClass extends WellProtectedParentClass {
        protected $property;
+       private $privateProperty;
 
        public function __construct() {
+               parent::__construct();
                $this->property = 1;
+               $this->privateProperty = 42;
        }
 
        protected function incrementPropertyValue() {
                $this->property++;
        }
 
+       private function incrementPrivatePropertyValue() {
+               $this->privateProperty++;
+       }
+
        public function getProperty() {
                return $this->property;
        }
 
+       public function getPrivateProperty() {
+               return $this->privateProperty;
+       }
+
        protected function whatSecondArg( $a, $b = false ) {
                return $b;
        }
index 2fbe9b7..4064729 100644 (file)
@@ -1,5 +1,4 @@
 .test-mixin (@value) {
        color: @value;
        border: @foo solid @Foo;
-       line-height: test-sum(@bar, 10, 20);
 }
index b78780a..e8099d1 100644 (file)
@@ -2,5 +2,4 @@
 .unit-tests {
   color: green;
   border: 2px solid #eeeeee;
-  line-height: 35;
 }
diff --git a/tests/phpunit/data/templates/bad_partial.mustache b/tests/phpunit/data/templates/bad_partial.mustache
new file mode 100644 (file)
index 0000000..d2767f0
--- /dev/null
@@ -0,0 +1 @@
+Partial {{>nonexistenttemplate}} in here
diff --git a/tests/phpunit/data/templates/has_partial.mustache b/tests/phpunit/data/templates/has_partial.mustache
new file mode 100644 (file)
index 0000000..504387a
--- /dev/null
@@ -0,0 +1 @@
+Partial {{>foobar_args}} in here
index 77b26b3..7b60fb3 100644 (file)
@@ -22,7 +22,6 @@ class ExtraParserTest extends MediaWikiTestCase {
                        'wgContLang' => $contLang,
                        'wgLang' => Language::factory( 'en' ),
                        'wgMemc' => new EmptyBagOStuff,
-                       'wgAlwaysUseTidy' => false,
                        'wgCleanSignatures' => true,
                ) );
 
diff --git a/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php b/tests/phpunit/includes/GlobalFunctions/wfArrayPlus2dTest.php
new file mode 100644 (file)
index 0000000..88875bb
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @group GlobalFunctions
+ * @covers ::wfArrayPlus2d
+ */
+class WfArrayPlus2dTest extends MediaWikiTestCase {
+       /**
+        * @dataProvider provideArrays
+        */
+       public function testWfArrayPlus2d( $baseArray, $newValues, $expected, $testName ) {
+               $this->assertEquals(
+                       $expected,
+                       wfArrayPlus2d( $baseArray, $newValues ),
+                       $testName
+               );
+       }
+
+       /**
+        * Provider for testing wfArrayPlus2d
+        *
+        * @return array
+        */
+       public static function provideArrays() {
+               return array(
+                       // target array, new values array, expected result
+                       array(
+                               array( 0 => '1dArray' ),
+                               array( 1 => '1dArray' ),
+                               array( 0 => '1dArray', 1 => '1dArray' ),
+                               "Test simple union of two arrays with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 1 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray', 1 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '1dArray' ),
+                               ),
+                               array(
+                                       0 => array( 0 => '2dArray' ),
+                               ),
+                               "Test union of 2d arrays with same keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 1 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ), 1 => array( 0 => '2dArray' ) ),
+                               ),
+                               "Test union of 3d array with different keys in the value array",
+                       ),
+                       array(
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '2dArray' ) ),
+                               ),
+                               array(
+                                       0 => array( 0 => array( 0 => '3dArray' ) ),
+                               ),
+                               "Test union of 3d array with same keys in the value array",
+                       ),
+               );
+       }
+}
index bea496c..4ce51c6 100644 (file)
@@ -21,6 +21,7 @@ class WfTimestampTest extends MediaWikiTestCase {
                        array( -30281104, TS_MW, '19690115123456', 'Negative TS_UNIX to TS_MW' ),
                        array( $t, TS_UNIX, 979562096, 'TS_UNIX to TS_UNIX' ),
                        array( $t, TS_DB, '2001-01-15 12:34:56', 'TS_UNIX to TS_DB' ),
+                       array( $t + .01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ),
 
                        array( $t, TS_ISO_8601_BASIC, '20010115T123456Z', 'TS_ISO_8601_BASIC to TS_DB' ),
 
index d11668b..d4df7b0 100644 (file)
@@ -112,6 +112,8 @@ class WfUrlencodeTest extends MediaWikiTestCase {
                        ### Other tests
                        // slash remain unchanged. %2F seems to break things
                        array( '/', '/' ),
+                       // T105265
+                       array( '~', '~' ),
 
                        // Other 'funnies' chars
                        array( '[]', '%5B%5D' ),
index 823c933..a3efbb8 100644 (file)
@@ -93,12 +93,26 @@ class LinkerTest extends MediaWikiLangTestCase {
         * @covers Linker::formatAutocomments
         * @covers Linker::formatLinksInComment
         */
-       public function testFormatComment( $expected, $comment, $title = false, $local = false ) {
+       public function testFormatComment( $expected, $comment, $title = false, $local = false, $wikiId = null ) {
+               $conf = new SiteConfiguration();
+               $conf->settings = array(
+                       'wgServer' => array(
+                               'enwiki' => '//en.example.org',
+                               'dewiki' => '//de.example.org',
+                       ),
+                       'wgArticlePath' => array(
+                               'enwiki' => '/w/$1',
+                               'dewiki' => '/w/$1',
+                       ),
+               );
+               $conf->suffixes = array( 'wiki' );
+
                $this->setMwGlobals( array(
                        'wgScript' => '/wiki/index.php',
                        'wgArticlePath' => '/wiki/$1',
                        'wgWellFormedXml' => true,
                        'wgCapitalLinks' => true,
+                       'wgConf' => $conf,
                ) );
 
                if ( $title === false ) {
@@ -108,11 +122,13 @@ class LinkerTest extends MediaWikiLangTestCase {
 
                $this->assertEquals(
                        $expected,
-                       Linker::formatComment( $comment, $title, $local )
+                       Linker::formatComment( $comment, $title, $local, $wikiId )
                );
        }
 
-       public static function provideCasesForFormatComment() {
+       public function provideCasesForFormatComment() {
+               $wikiId = 'enwiki'; // $wgConf has a fake entry for this
+
                return array(
                        // Linker::formatComment
                        array(
@@ -127,6 +143,10 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "&#039;&#039;&#039;not bolded&#039;&#039;&#039;",
                                "'''not bolded'''",
                        ),
+                       array(
+                               "try &lt;script&gt;evil&lt;/scipt&gt; things",
+                               "try <script>evil</scipt> things",
+                       ),
                        // Linker::formatAutocomments
                        array(
                                '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
@@ -156,6 +176,14 @@ class LinkerTest extends MediaWikiLangTestCase {
                                '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing /*: </span> T70361</span>',
                                "/* autocomment containing /* */ T70361"
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.22quotes.22" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &quot;quotes&quot;</span></span>',
+                               "/* autocomment containing \"quotes\" */"
+                       ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.3Cscript.3Etags.3C.2Fscript.3E" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &lt;script&gt;tags&lt;/script&gt;</span></span>',
+                               "/* autocomment containing <script>tags</script> */"
+                       ),
                        array(
                                '<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
                                "/* autocomment */",
@@ -166,6 +194,16 @@ class LinkerTest extends MediaWikiLangTestCase {
                                "/* autocomment */",
                                null
                        ),
+                       array(
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false
+                       ),
+                       array(
+                               '<a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               "/* autocomment */",
+                               false, false, $wikiId
+                       ),
                        // Linker::formatLinksInComment
                        array(
                                'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
@@ -191,6 +229,28 @@ class LinkerTest extends MediaWikiLangTestCase {
                                'abc <a href="/wiki/index.php?title=/subpage&amp;action=edit&amp;redlink=1" class="new" title="/subpage (page does not exist)">/subpage</a> def',
                                "abc [[/subpage]] def",
                        ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=%22evil!%22&amp;action=edit&amp;redlink=1" class="new" title="&quot;evil!&quot; (page does not exist)">&quot;evil!&quot;</a> def',
+                               "abc [[\"evil!\"]] def",
+                       ),
+                       array(
+                               'abc [[&lt;script&gt;very evil&lt;/script&gt;]] def',
+                               "abc [[<script>very evil</script>]] def",
+                       ),
+                       array(
+                               'abc [[|]] def',
+                               "abc [[|]] def",
+                       ),
+                       array(
+                               'abc <a href="/wiki/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> def',
+                               "abc [[link]] def",
+                               false, false
+                       ),
+                       array(
+                               'abc <a class="external" rel="nofollow" href="//en.example.org/w/Link">link</a> def',
+                               "abc [[link]] def",
+                               false, false, $wikiId
+                       )
                );
        }
 
index 99ec2e4..9c953a6 100644 (file)
@@ -21,6 +21,17 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertEquals( $key, $message->getKey() );
                $this->assertEquals( $params, $message->getParams() );
                $this->assertEquals( $expectedLang, $message->getLanguage() );
+
+               $messageSpecifier = $this->getMockForAbstractClass( 'MessageSpecifier' );
+               $messageSpecifier->expects( $this->any() )
+                       ->method( 'getKey' )->will( $this->returnValue( $key ) );
+               $messageSpecifier->expects( $this->any() )
+                       ->method( 'getParams' )->will( $this->returnValue( $params ) );
+               $message = new Message( $messageSpecifier, array(), $language );
+
+               $this->assertEquals( $key, $message->getKey() );
+               $this->assertEquals( $params, $message->getParams() );
+               $this->assertEquals( $expectedLang, $message->getLanguage() );
        }
 
        public static function provideConstructor() {
@@ -548,4 +559,26 @@ class MessageTest extends MediaWikiLangTestCase {
        public function testInLanguageThrows() {
                wfMessage( 'foo' )->inLanguage( 123 );
        }
+
+       /**
+        * @covers Message::serialize
+        * @covers Message::unserialize
+        */
+       public function testSerialization() {
+               $msg = new Message( 'parentheses' );
+               $msg->rawParams( '<a>foo</a>' );
+               $msg->title( Title::newFromText( 'Testing' ) );
+               $this->assertEquals( '(<a>foo</a>)', $msg->parse(), 'Sanity check' );
+               $msg = unserialize( serialize( $msg ) );
+               $this->assertEquals( '(<a>foo</a>)', $msg->parse() );
+               $title = TestingAccessWrapper::newFromObject( $msg )->title;
+               $this->assertInstanceOf( 'Title', $title );
+               $this->assertEquals( 'Testing', $title->getFullText() );
+
+               $msg = new Message( 'mainpage' );
+               $msg->inLanguage( 'de' );
+               $this->assertEquals( 'Hauptseite', $msg->plain(), 'Sanity check' );
+               $msg = unserialize( serialize( $msg ) );
+               $this->assertEquals( 'Hauptseite', $msg->plain() );
+       }
 }
index 7dddf77..f0d905e 100644 (file)
@@ -141,53 +141,36 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load module script only
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script>if(window.mw){
-document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.foo\u0026amp;only=scripts\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
-}</script>
-'
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.foo\u0026only=scripts\u0026skin=fallback");'
+                                       . "\n} );</script>"
                        ),
                        array(
                                // Don't condition wrap raw modules (like the startup module)
                                array( 'test.raw', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback&amp;*"></script>
-'
+                               '<script async src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback"></script>'
                        ),
                        // Load module styles only
                        // This also tests the order the modules are put into the url
                        array(
                                array( array( 'test.baz', 'test.foo', 'test.bar' ), ResourceLoaderModule::TYPE_STYLES ),
-                               '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback&amp;*">
-'
+
+                               '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback">'
                        ),
                        // Load private module (only=scripts)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script>if(window.mw){
-mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});
-
-}</script>
-'
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . "mw.test.baz({token:123});mw.loader.state({\"test.quux\":\"ready\"});\n"
+                                       . "} );</script>"
                        ),
                        // Load private module (combined)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
-                               '<script>if(window.mw){
-mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]});
-
-}</script>
-'
-                       ),
-                       // Load module script with ESI
-                       array(
-                               array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS, true ),
-                               '<script><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=fallback&amp;*" /></script>
-'
-                       ),
-                       // Load module styles with ESI
-                       array(
-                               array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
-                               '<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=styles&amp;skin=fallback&amp;*" /></style>
-',
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . "mw.loader.implement(\"test.quux\",function($,jQuery){"
+                                       . "mw.test.baz({token:123});},{\"css\":[\".mw-icon{transition:none}"
+                                       . "\"]});\n} );</script>"
                        ),
                        // Load no modules
                        array(
@@ -197,19 +180,17 @@ mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"
                        // noscript group
                        array(
                                array( 'test.noscript', ResourceLoaderModule::TYPE_STYLES ),
-                               '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.noscript&amp;only=styles&amp;skin=fallback&amp;*"></noscript>
-'
+                               '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.noscript&amp;only=styles&amp;skin=fallback"></noscript>'
                        ),
                        // Load two modules in separate groups
                        array(
                                array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
-                               '<script>if(window.mw){
-document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.bar\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
-}</script>
-<script>if(window.mw){
-document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.foo\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");
-}</script>
-'
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.bar\u0026skin=fallback");'
+                                       . "\n} );</script>\n"
+                                       . "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.foo\u0026skin=fallback");'
+                                       . "\n} );</script>"
                        ),
                );
        }
@@ -226,7 +207,6 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
        public function testMakeResourceLoaderLink( $args, $expectedHtml ) {
                $this->setMwGlobals( array(
                        'wgResourceLoaderDebug' => false,
-                       'wgResourceLoaderUseESI' => true,
                        'wgLoadScript' => 'http://127.0.0.1:8080/w/load.php',
                        // Affects whether CDATA is inserted
                        'wgWellFormedXml' => false,
@@ -276,10 +256,89 @@ document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\
                        ) ),
                ) );
                $links = $method->invokeArgs( $out, $args );
-               // Strip comments to avoid variation due to wgDBname in WikiID and cache key
-               $actualHtml = preg_replace( '#/\*[^*]+\*/#', '', $links['html'] );
+               $actualHtml = implode( "\n", $links['html'] );
                $this->assertEquals( $expectedHtml, $actualHtml );
        }
+
+       /**
+        * @dataProvider provideVaryHeaders
+        * @covers OutputPage::addVaryHeader
+        * @covers OutputPage::getVaryHeader
+        * @covers OutputPage::getXVO
+        */
+       public function testVaryHeaders( $calls, $vary, $xvo ) {
+               // get rid of default Vary fields
+               $outputPage = $this->getMockBuilder( 'OutputPage' )
+                       ->setConstructorArgs( array( new RequestContext() ) )
+                       ->setMethods( array( 'getCacheVaryCookies' ) )
+                       ->getMock();
+               $outputPage->expects( $this->any() )
+                       ->method( 'getCacheVaryCookies' )
+                       ->will( $this->returnValue( array() ) );
+               TestingAccessWrapper::newFromObject( $outputPage )->mVaryHeader = array();
+
+               foreach ( $calls as $call ) {
+                       call_user_func_array( array( $outputPage, 'addVaryHeader' ), $call );
+               }
+               $this->assertEquals( $vary, $outputPage->getVaryHeader(), 'Vary:' );
+               $this->assertEquals( $xvo, $outputPage->getXVO(), 'X-Vary-Options:' );
+       }
+
+       public function provideVaryHeaders() {
+               // note: getXVO() automatically adds Vary: Cookie
+               return array(
+                       array( // single header
+                               array(
+                                       array( 'Cookie' ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie',
+                       ),
+                       array( // non-unique headers
+                               array(
+                                       array( 'Cookie' ),
+                                       array( 'Accept-Language' ),
+                                       array( 'Cookie' ),
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie,Accept-Language',
+                       ),
+                       array( // two headers with single options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Accept-Language', array( 'string-contains=en' ) ),
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid,Accept-Language;string-contains=en',
+                       ),
+                       array( // one header with multiple options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid', 'string-contains=userId' ) ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid;string-contains=userId',
+                       ),
+                       array( // Duplicate option
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Accept-Language', array( 'string-contains=en', 'string-contains=en' ) ),
+
+
+                               ),
+                               'Vary: Cookie, Accept-Language',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid,Accept-Language;string-contains=en',
+                       ),
+                       array( // Same header, different options
+                               array(
+                                       array( 'Cookie', array( 'string-contains=phpsessid' ) ),
+                                       array( 'Cookie', array( 'string-contains=userId' ) ),
+                               ),
+                               'Vary: Cookie',
+                               'X-Vary-Options: Cookie;string-contains=phpsessid;string-contains=userId',
+                       ),
+               );
+       }
 }
 
 /**
@@ -303,4 +362,3 @@ class NullMessageBlobStore extends MessageBlobStore {
        public function clear() {
        }
 }
-
index d63541b..afd10e9 100644 (file)
@@ -6,6 +6,11 @@
 class PrefixSearchTest extends MediaWikiLangTestCase {
 
        public function addDBData() {
+               if ( !$this->isWikitextNS( NS_MAIN ) ) {
+                       // tests are skipped if NS_MAIN is not wikitext
+                       return;
+               }
+
                $this->insertPage( 'Sandbox' );
                $this->insertPage( 'Bar' );
                $this->insertPage( 'Example' );
index c615c46..d3dc512 100644 (file)
@@ -6,6 +6,11 @@
  */
 class SanitizerTest extends MediaWikiTestCase {
 
+       protected function tearDown() {
+               MWTidy::destroySingleton();
+               parent::tearDown();
+       }
+
        /**
         * @covers Sanitizer::decodeCharReferences
         */
@@ -93,9 +98,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @param bool $escaped Whether sanitizer let the tag in or escape it (ie: '&lt;video&gt;')
         */
        public function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
-               $this->setMwGlobals( array(
-                       'wgUseTidy' => false
-               ) );
+               MWTidy::setInstance( false );
 
                if ( $escaped ) {
                        $this->assertEquals( "&lt;$tag&gt;",
@@ -157,7 +160,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @covers Sanitizer::removeHTMLtags
         */
        public function testRemoveHTMLtags( $input, $output, $msg = null ) {
-               $GLOBALS['wgUseTidy'] = false;
+               MWTidy::setInstance( false );
                $this->assertEquals( $output, Sanitizer::removeHTMLtags( $input ), $msg );
        }
 
@@ -360,5 +363,4 @@ class SanitizerTest extends MediaWikiTestCase {
                        array( '&lt;script&gt;foo&lt;/script&gt;', '<script>foo</script>' ),
                );
        }
-
 }
index 81854ff..3b37f4a 100644 (file)
@@ -57,7 +57,20 @@ class TemplateParserTest extends MediaWikiTestCase {
                                array(),
                                false,
                                'RuntimeException',
-                       )
+                       ),
+                       array(
+                               'has_partial',
+                               array(
+                                       'planet' => 'world',
+                               ),
+                               "Partial hello world!\n in here\n",
+                       ),
+                       array(
+                               'bad_partial',
+                               array(),
+                               false,
+                               'Exception',
+                       ),
                );
        }
 }
index 84c0f9b..63d8971 100644 (file)
@@ -34,16 +34,42 @@ class TestingAccessWrapper {
                return $methodReflection->invokeArgs( $this->object, $args );
        }
 
-       public function __set( $name, $value ) {
+       /**
+        * ReflectionClass::getProperty() fails if the private property is defined
+        * in a parent class. This works more like ReflectionClass::getMethod().
+        */
+       private function getProperty( $name ) {
                $classReflection = new ReflectionClass( $this->object );
-               $propertyReflection = $classReflection->getProperty( $name );
+               try {
+                       return $classReflection->getProperty( $name );
+               } catch ( ReflectionException $ex ) {
+                       while ( true ) {
+                               $classReflection = $classReflection->getParentClass();
+                               if ( !$classReflection ) {
+                                       throw $ex;
+                               }
+                               try {
+                                       $propertyReflection = $classReflection->getProperty( $name );
+                               } catch ( ReflectionException $ex2 ) {
+                                       continue;
+                               }
+                               if ( $propertyReflection->isPrivate() ) {
+                                       return $propertyReflection;
+                               } else {
+                                       throw $ex;
+                               }
+                       }
+               }
+       }
+
+       public function __set( $name, $value ) {
+               $propertyReflection = $this->getProperty( $name );
                $propertyReflection->setAccessible( true );
                $propertyReflection->setValue( $this->object, $value );
        }
 
        public function __get( $name ) {
-               $classReflection = new ReflectionClass( $this->object );
-               $propertyReflection = $classReflection->getProperty( $name );
+               $propertyReflection = $this->getProperty( $name );
                $propertyReflection->setAccessible( true );
                return $propertyReflection->getValue( $this->object );
        }
index 7e5b91a..fc54afa 100644 (file)
@@ -14,18 +14,36 @@ class TestingAccessWrapperTest extends MediaWikiTestCase {
 
        function testGetProperty() {
                $this->assertSame( 1, $this->wrapped->property );
+               $this->assertSame( 42, $this->wrapped->privateProperty );
+               $this->assertSame( 9000, $this->wrapped->privateParentProperty );
        }
 
        function testSetProperty() {
                $this->wrapped->property = 10;
                $this->assertSame( 10, $this->wrapped->property );
                $this->assertSame( 10, $this->raw->getProperty() );
+
+               $this->wrapped->privateProperty = 11;
+               $this->assertSame( 11, $this->wrapped->privateProperty );
+               $this->assertSame( 11, $this->raw->getPrivateProperty() );
+
+               $this->wrapped->privateParentProperty = 12;
+               $this->assertSame( 12, $this->wrapped->privateParentProperty );
+               $this->assertSame( 12, $this->raw->getPrivateParentProperty() );
        }
 
        function testCallMethod() {
                $this->wrapped->incrementPropertyValue();
                $this->assertSame( 2, $this->wrapped->property );
                $this->assertSame( 2, $this->raw->getProperty() );
+
+               $this->wrapped->incrementPrivatePropertyValue();
+               $this->assertSame( 43, $this->wrapped->privateProperty );
+               $this->assertSame( 43, $this->raw->getPrivateProperty() );
+
+               $this->wrapped->incrementPrivateParentPropertyValue();
+               $this->assertSame( 9001, $this->wrapped->privateParentProperty );
+               $this->assertSame( 9001, $this->raw->getPrivateParentProperty() );
        }
 
        function testCallMethodTwoArgs() {
diff --git a/tests/phpunit/includes/WikiMapTest.php b/tests/phpunit/includes/WikiMapTest.php
new file mode 100644 (file)
index 0000000..9233416
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @covers WikiMap
+ */
+
+class WikiMapTest extends MediaWikiLangTestCase {
+
+       public function setUp() {
+               parent::setUp();
+
+               $conf = new SiteConfiguration();
+               $conf->settings = array(
+                       'wgServer' => array(
+                               'enwiki' => 'http://en.example.org',
+                               'ruwiki' => '//ru.example.org',
+                       ),
+                       'wgArticlePath' => array(
+                               'enwiki' => '/w/$1',
+                               'ruwiki' => '/wiki/$1',
+                       ),
+               );
+               $conf->suffixes = array( 'wiki' );
+               $this->setMwGlobals( array(
+                       'wgConf' => $conf,
+               ) );
+       }
+
+       public function provideGetWiki() {
+               $enwiki = new WikiReference( 'wiki', 'en', 'http://en.example.org', '/w/$1' );
+               $ruwiki = new WikiReference( 'wiki', 'ru', '//ru.example.org', '/wiki/$1' );
+
+               return array(
+                       'unknown' => array( false, 'xyzzy' ),
+                       'enwiki' => array( $enwiki, 'enwiki' ),
+                       'ruwiki' => array( $ruwiki, 'ruwiki' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetWiki
+        */
+       public function testGetWiki( $expected, $wikiId ) {
+               $this->assertEquals( $expected, WikiMap::getWiki( $wikiId ) );
+       }
+
+       public function provideGetWikiName() {
+               return array(
+                       'unknown' => array( 'xyzzy', 'xyzzy' ),
+                       'enwiki' => array( 'en.example.org', 'enwiki' ),
+                       'ruwiki' => array( 'ru.example.org', 'ruwiki' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetWikiName
+        */
+       public function testGetWikiName( $expected, $wikiId ) {
+               $this->assertEquals( $expected, WikiMap::getWikiName( $wikiId ) );
+       }
+
+       public function provideMakeForeignLink() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( '<a class="external" rel="nofollow" href="http://en.example.org/w/Foo">Foo</a>', 'enwiki', 'Foo',  ),
+                       'ruwiki' => array( '<a class="external" rel="nofollow" href="//ru.example.org/wiki/%D0%A4%D1%83">вар</a>', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMakeForeignLink
+        */
+       public function testMakeForeignLink( $expected, $wikiId, $page, $text = null ) {
+               $this->assertEquals( $expected, WikiMap::makeForeignLink( $wikiId, $page, $text ) );
+       }
+
+       public function provideForeignUserLink() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( '<a class="external" rel="nofollow" href="http://en.example.org/w/User:Foo">User:Foo</a>', 'enwiki', 'Foo',  ),
+                       'ruwiki' => array( '<a class="external" rel="nofollow" href="//ru.example.org/wiki/User:%D0%A4%D1%83">вар</a>', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideForeignUserLink
+        */
+       public function testForeignUserLink( $expected, $wikiId, $user, $text = null ) {
+               $this->assertEquals( $expected, WikiMap::foreignUserLink( $wikiId, $user, $text ) );
+       }
+
+       public function provideGetForeignURL() {
+               return array(
+                       'unknown' => array( false, 'xyzzy', 'Foo' ),
+                       'enwiki' => array( 'http://en.example.org/w/Foo', 'enwiki', 'Foo',  ),
+                       'ruwiki with fragement' => array( '//ru.example.org/wiki/%D0%A4%D1%83#%D0%B2%D0%B0%D1%80', 'ruwiki', 'Фу', 'вар' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetForeignURL
+        */
+       public function testGetForeignURL( $expected, $wikiId, $page, $fragment = null ) {
+               $this->assertEquals( $expected, WikiMap::getForeignURL( $wikiId, $page, $fragment ) );
+       }
+
+}
+
diff --git a/tests/phpunit/includes/WikiReferenceTest.php b/tests/phpunit/includes/WikiReferenceTest.php
new file mode 100644 (file)
index 0000000..4fe2e85
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @covers WikiReference
+ */
+
+class WikiReferenceTest extends PHPUnit_Framework_TestCase {
+
+       public function provideGetDisplayName() {
+               return array(
+                       'http' => array( 'foo.bar', 'http://foo.bar' ),
+                       'https' => array( 'foo.bar', 'http://foo.bar' ),
+
+                       // apparently, this is the expected behavior
+                       'invalid' => array( 'purple kittens', 'purple kittens' ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetDisplayName
+        */
+       public function testGetDisplayName( $expected, $canonicalServer ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, '/wiki/$1' );
+               $this->assertEquals( $expected, $reference->getDisplayName() );
+       }
+
+       public function testGetCanonicalServer() {
+               $reference = new WikiReference( 'wiki', 'xx', 'https://acme.com', '/wiki/$1', '//acme.com' );
+               $this->assertEquals( 'https://acme.com', $reference->getCanonicalServer() );
+       }
+
+       public function provideGetCanonicalUrl() {
+               return array(
+                       'no fragement' => array( 'https://acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', null ),
+                       'empty fragement' => array( 'https://acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', '' ),
+                       'fragment' => array( 'https://acme.com/wiki/Foo#Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar' ),
+                       'double fragment' => array( 'https://acme.com/wiki/Foo#Bar%23Xus', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar#Xus' ),
+                       'escaped fragement' => array( 'https://acme.com/wiki/Foo%23Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo#Bar', null ),
+                       'empty path' => array( 'https://acme.com/Foo', 'https://acme.com', '//acme.com', '/$1', 'Foo', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetCanonicalUrl
+        */
+       public function testGetCanonicalUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getCanonicalUrl( $page, $fragmentId ) );
+       }
+
+       /**
+        * @dataProvider provideGetCanonicalUrl
+        * @note getUrl is an alias for getCanonicalUrl
+        */
+       public function testGetUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getUrl( $page, $fragmentId ) );
+       }
+
+       public function provideGetFullUrl() {
+               return array(
+                       'no fragement' => array( '//acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', null ),
+                       'empty fragement' => array( '//acme.com/wiki/Foo', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', '' ),
+                       'fragment' => array( '//acme.com/wiki/Foo#Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar' ),
+                       'double fragment' => array( '//acme.com/wiki/Foo#Bar%23Xus', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo', 'Bar#Xus' ),
+                       'escaped fragement' => array( '//acme.com/wiki/Foo%23Bar', 'https://acme.com', '//acme.com', '/wiki/$1', 'Foo#Bar', null ),
+                       'empty path' => array( '//acme.com/Foo', 'https://acme.com', '//acme.com', '/$1', 'Foo', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetFullUrl
+        */
+       public function testGetFullUrl( $expected, $canonicalServer, $server, $path, $page, $fragmentId ) {
+               $reference = new WikiReference( 'wiki', 'xx', $canonicalServer, $path, $server );
+               $this->assertEquals( $expected, $reference->getFullUrl( $page, $fragmentId ) );
+       }
+
+}
+
index 880572b..575efd6 100644 (file)
@@ -53,7 +53,7 @@ class ApiBlockTest extends ApiTestCase {
                        'action' => 'block',
                        'user' => 'UTApiBlockee',
                        'reason' => 'Some reason',
-                       'token' => $tokens['blocktoken'] ), null, false, self::$users['sysop']->user );
+                       'token' => $tokens['blocktoken'] ), null, false, self::$users['sysop']->getUser() );
 
                $block = Block::newFromTarget( 'UTApiBlockee' );
 
@@ -77,7 +77,7 @@ class ApiBlockTest extends ApiTestCase {
                        ),
                        null,
                        false,
-                       self::$users['sysop']->user
+                       self::$users['sysop']->getUser()
                );
        }
 }
index e006bf7..61a8ad1 100644 (file)
@@ -262,18 +262,18 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // conflicting edit to redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit, following the redirect
@@ -284,7 +284,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'basetimestamp' => $baseTime,
                        'section' => 'new',
                        'redirect' => true,
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no problems expected when following redirect" );
@@ -308,18 +308,18 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // conflicting edit to redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit, following the redirect but without creating a section
@@ -330,7 +330,7 @@ class ApiEditPageTest extends ApiTestCase {
                                'text' => 'nix bar!',
                                'basetimestamp' => $baseTime,
                                'redirect' => true,
-                       ), null, self::$users['sysop']->user );
+                       ), null, self::$users['sysop']->getUser() );
 
                        $this->fail( 'redirect-appendonly error expected' );
                } catch ( UsageException $ex ) {
@@ -350,13 +350,13 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // conflicting edit
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $page, '20120101020202' );
 
                // try to save edit, expect conflict
@@ -366,7 +366,7 @@ class ApiEditPageTest extends ApiTestCase {
                                'title' => $name,
                                'text' => 'nix bar!',
                                'basetimestamp' => $baseTime,
-                       ), null, self::$users['sysop']->user );
+                       ), null, self::$users['sysop']->getUser() );
 
                        $this->fail( 'edit conflict expected' );
                } catch ( UsageException $ex ) {
@@ -389,13 +389,13 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // conflicting edit
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $page, '20120101020202' );
 
                // try to save edit, expect no conflict
@@ -405,7 +405,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => 'nix bar!',
                        'basetimestamp' => $baseTime,
                        'section' => 'new',
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no edit conflict expected here" );
@@ -432,17 +432,17 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // new edit to content
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit; should work, following the redirect.
@@ -452,7 +452,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => 'nix bar!',
                        'section' => 'new',
                        'redirect' => true,
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no edit conflict expected here" );
index 88a99e9..7dfd14f 100644 (file)
@@ -23,7 +23,7 @@ class ApiLoginTest extends ApiTestCase {
                global $wgServer;
 
                $user = self::$users['sysop'];
-               $user->user->logOut();
+               $user->getUser()->logOut();
 
                if ( !isset( $wgServer ) ) {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
@@ -68,7 +68,7 @@ class ApiLoginTest extends ApiTestCase {
                }
 
                $user = self::$users['sysop'];
-               $user->user->logOut();
+               $user->getUser()->logOut();
 
                $ret = $this->doApiRequest( array(
                                "action" => "login",
index ee1a954..94b741d 100644 (file)
@@ -79,4 +79,173 @@ class ApiMainTest extends ApiTestCase {
                        );
                }
        }
+
+       /**
+        * Test HTTP precondition headers
+        *
+        * @covers ApiMain::checkConditionalRequestHeaders
+        * @dataProvider provideCheckConditionalRequestHeaders
+        * @param array $headers HTTP headers
+        * @param array $conditions Return data for ApiBase::getConditionalRequestData
+        * @param int $status Expected response status
+        * @param bool $post Request is a POST
+        */
+       public function testCheckConditionalRequestHeaders( $headers, $conditions, $status, $post = false ) {
+               $request = new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ), $post );
+               $request->setHeaders( $headers );
+               $request->response()->statusHeader( 200 ); // Why doesn't it default?
+
+               $api = new ApiMain( $request );
+               $priv = TestingAccessWrapper::newFromObject( $api );
+               $priv->mInternalMode = false;
+
+               $module = $this->getMockBuilder( 'ApiBase' )
+                       ->setConstructorArgs( array( $api, 'mock' ) )
+                       ->setMethods( array( 'getConditionalRequestData' ) )
+                       ->getMockForAbstractClass();
+               $module->expects( $this->any() )
+                       ->method( 'getConditionalRequestData' )
+                       ->will( $this->returnCallback( function ( $condition ) use ( $conditions ) {
+                               return isset( $conditions[$condition] ) ? $conditions[$condition] : null;
+                       } ) );
+
+               $ret = $priv->checkConditionalRequestHeaders( $module );
+
+               $this->assertSame( $status, $request->response()->getStatusCode() );
+               $this->assertSame( $status === 200, $ret );
+       }
+
+       public static function provideCheckConditionalRequestHeaders() {
+               $now = time();
+
+               return array(
+                       // Non-existing from module is ignored
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array(), 200 ),
+                       array( array( 'If-Modified-Since' => 'Tue, 18 Aug 2015 00:00:00 GMT' ), array(), 200 ),
+
+                       // No headers
+                       array(
+                               array(),
+                               array(
+                                       'etag' => '""',
+                                       'last-modified' => '20150815000000',
+                               ),
+                               200
+                       ),
+
+                       // Basic If-None-Match
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"bar"' ), 304 ),
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"baz"' ), 200 ),
+                       array( array( 'If-None-Match' => '"foo"' ), array( 'etag' => 'W/"foo"' ), 304 ),
+                       array( array( 'If-None-Match' => 'W/"foo"' ), array( 'etag' => '"foo"' ), 304 ),
+                       array( array( 'If-None-Match' => 'W/"foo"' ), array( 'etag' => 'W/"foo"' ), 304 ),
+
+                       // Pointless, but supported
+                       array( array( 'If-None-Match' => '*' ), array(), 304 ),
+
+                       // Basic If-Modified-Since
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now ) ), 304 ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now + 1 ) ), 200 ),
+
+                       // If-Modified-Since ignored when If-None-Match is given too
+                       array( array( 'If-None-Match' => '""', 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'etag' => '"x"', 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200 ),
+                       array( array( 'If-None-Match' => '""', 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Ignored for POST
+                       array( array( 'If-None-Match' => '"foo", "bar"' ), array( 'etag' => '"bar"' ), 200, true ),
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200, true ),
+
+                       // Other date formats allowed by the RFC
+                       array( array( 'If-Modified-Since' => gmdate( 'l, d-M-y H:i:s', $now ) . ' GMT' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+                       array( array( 'If-Modified-Since' => gmdate( 'D M j H:i:s Y', $now ) ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Old browser extension to HTTP/1.0
+                       array( array( 'If-Modified-Since' => wfTimestamp( TS_RFC2822, $now ) . '; length=123' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 304 ),
+
+                       // Invalid date formats should be ignored
+                       array( array( 'If-Modified-Since' => gmdate( 'Y-m-d H:i:s', $now ) . ' GMT' ),
+                               array( 'last-modified' => wfTimestamp( TS_MW, $now - 1 ) ), 200 ),
+               );
+       }
+
+       /**
+        * Test conditional headers output
+        * @dataProvider provideConditionalRequestHeadersOutput
+        * @param array $conditions Return data for ApiBase::getConditionalRequestData
+        * @param array $headers Expected output headers
+        * @param bool $isError $isError flag
+        * @param bool $post Request is a POST
+        */
+       public function testConditionalRequestHeadersOutput( $conditions, $headers, $isError = false, $post = false ) {
+               $request = new FauxRequest( array( 'action' => 'query', 'meta' => 'siteinfo' ), $post );
+               $response = $request->response();
+
+               $api = new ApiMain( $request );
+               $priv = TestingAccessWrapper::newFromObject( $api );
+               $priv->mInternalMode = false;
+
+               $module = $this->getMockBuilder( 'ApiBase' )
+                       ->setConstructorArgs( array( $api, 'mock' ) )
+                       ->setMethods( array( 'getConditionalRequestData' ) )
+                       ->getMockForAbstractClass();
+               $module->expects( $this->any() )
+                       ->method( 'getConditionalRequestData' )
+                       ->will( $this->returnCallback( function ( $condition ) use ( $conditions ) {
+                               return isset( $conditions[$condition] ) ? $conditions[$condition] : null;
+                       } ) );
+               $priv->mModule = $module;
+
+               $priv->sendCacheHeaders( $isError );
+
+               foreach ( array( 'Last-Modified', 'ETag' ) as $header ) {
+                       $this->assertEquals(
+                               isset( $headers[$header] ) ? $headers[$header] : null,
+                               $response->getHeader( $header ),
+                               $header
+                       );
+               }
+       }
+
+       public static function provideConditionalRequestHeadersOutput() {
+               return array(
+                       array(
+                               array(),
+                               array()
+                       ),
+                       array(
+                               array( 'etag' => '"foo"' ),
+                               array( 'ETag' => '"foo"' )
+                       ),
+                       array(
+                               array( 'last-modified' => '20150818000102' ),
+                               array( 'Last-Modified' => 'Tue, 18 Aug 2015 00:01:02 GMT' )
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array( 'ETag' => '"foo"', 'Last-Modified' => 'Tue, 18 Aug 2015 00:01:02 GMT' )
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array(),
+                               true,
+                       ),
+                       array(
+                               array( 'etag' => '"foo"', 'last-modified' => '20150818000102' ),
+                               array(),
+                               false,
+                               true,
+                       ),
+               );
+       }
+
 }
index 6c3ce60..08a984e 100644 (file)
@@ -14,9 +14,13 @@ class ApiMessageTest extends MediaWikiTestCase {
 
                $msg = TestingAccessWrapper::newFromObject( $msg );
                $msg2 = TestingAccessWrapper::newFromObject( $msg2 );
-               foreach ( array( 'interface', 'useDatabase', 'title' ) as $key ) {
-                       $this->assertSame( $msg->$key, $msg2->$key, $key );
-               }
+               $this->assertSame( $msg->interface, $msg2->interface, 'interface' );
+               $this->assertSame( $msg->useDatabase, $msg2->useDatabase, 'useDatabase' );
+               $this->assertSame(
+                       $msg->title ? $msg->title->getFullText() : null,
+                       $msg2->title ? $msg2->title->getFullText() : null,
+                       'title'
+               );
        }
 
        /**
@@ -30,6 +34,11 @@ class ApiMessageTest extends MediaWikiTestCase {
                $this->assertEquals( 'code', $msg2->getApiCode() );
                $this->assertEquals( array( 'data' ), $msg2->getApiData() );
 
+               $msg2 = unserialize( serialize( $msg2 ) );
+               $this->compareMessages( $msg, $msg2 );
+               $this->assertEquals( 'code', $msg2->getApiCode() );
+               $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
                $msg = new Message( array( 'foo', 'bar' ), array( 'baz' ) );
                $msg2 = new ApiMessage( array( array( 'foo', 'bar' ), 'baz' ), 'code', array( 'data' ) );
                $this->compareMessages( $msg, $msg2 );
@@ -63,6 +72,11 @@ class ApiMessageTest extends MediaWikiTestCase {
                $this->assertEquals( 'code', $msg2->getApiCode() );
                $this->assertEquals( array( 'data' ), $msg2->getApiData() );
 
+               $msg2 = unserialize( serialize( $msg2 ) );
+               $this->compareMessages( $msg, $msg2 );
+               $this->assertEquals( 'code', $msg2->getApiCode() );
+               $this->assertEquals( array( 'data' ), $msg2->getApiData() );
+
                $msg = new RawMessage( 'foo', array( 'baz' ) );
                $msg2 = new ApiRawMessage( array( 'foo', 'baz' ), 'code', array( 'data' ) );
                $this->compareMessages( $msg, $msg2 );
index f894f87..cff2328 100644 (file)
@@ -181,6 +181,19 @@ class ApiResultTest extends MediaWikiTestCase {
                        );
                }
 
+               ApiResult::setValue( $arr, null, NAN, ApiResult::NO_VALIDATE );
+
+               try {
+                       ApiResult::setValue( $arr, null, NAN, ApiResult::NO_SIZE_CHECK );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
+
                $arr = array();
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
@@ -408,6 +421,19 @@ class ApiResultTest extends MediaWikiTestCase {
                        );
                }
 
+               $result->addValue( null, null, NAN, ApiResult::NO_VALIDATE );
+
+               try {
+                       $result->addValue( null, null, NAN, ApiResult::NO_SIZE_CHECK );
+                       $this->fail( 'Expected exception not thrown' );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame(
+                               'Cannot add non-finite floats to ApiResult',
+                               $ex->getMessage(),
+                               'Expected exception'
+                       );
+               }
+
                $result->reset();
                $result->addParsedLimit( 'foo', 12 );
                $this->assertSame( array(
@@ -444,6 +470,12 @@ class ApiResultTest extends MediaWikiTestCase {
                $result->removeValue( null, 'foo' );
                $this->assertTrue( $result->addValue( null, 'foo', '1' ) );
 
+               $result = new ApiResult( 10 );
+               $obj = new ApiResultTestSerializableObject( 'ok' );
+               $obj->foobar = 'foobaz';
+               $this->assertTrue( $result->addValue( null, 'foo', $obj ) );
+               $this->assertSame( 2, $result->getSize() );
+
                $result = new ApiResult( 8388608 );
                $result2 = new ApiResult( 8388608 );
                $result2->addValue( null, 'foo', 'bar' );
@@ -674,6 +706,10 @@ class ApiResultTest extends MediaWikiTestCase {
                                ApiResult::META_TYPE => 'BCkvp',
                                ApiResult::META_KVP_KEY_NAME => 'key',
                        ),
+                       'kvpmerge' => array( 'x' => 'a', 'y' => array( 'b' ), 'z' => array( 'c' => 'd' ),
+                               ApiResult::META_TYPE => 'kvp',
+                               ApiResult::META_KVP_MERGE => true,
+                       ),
                        'emptyDefault' => array( '_dummy' => 1 ),
                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                        '_dummy' => 1,
@@ -858,6 +894,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'assoc',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               'x' => 'a',
+                                               'y' => array( 'b', ApiResult::META_TYPE => 'array' ),
+                                               'z' => array( 'c' => 'd', ApiResult::META_TYPE => 'assoc' ),
+                                               ApiResult::META_TYPE => 'assoc',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -889,6 +932,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'assoc',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => (object)array(
+                                               'x' => 'a',
+                                               'y' => array( 'b', ApiResult::META_TYPE => 'array' ),
+                                               'z' => (object)array( 'c' => 'd', ApiResult::META_TYPE => 'assoc' ),
+                                               ApiResult::META_TYPE => 'assoc',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -920,6 +970,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               $kvp( 'name', 'x', 'value', 'a' ),
+                                               $kvp( 'name', 'y', 'value', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -951,6 +1008,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               $kvp( 'name', 'x', '*', 'a' ),
+                                               $kvp( 'name', 'y', '*', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -986,6 +1050,13 @@ class ApiResultTest extends MediaWikiTestCase {
                                                ApiResult::META_TYPE => 'array',
                                                ApiResult::META_KVP_KEY_NAME => 'key',
                                        ),
+                                       'kvpmerge' => array(
+                                               (object)$kvp( 'name', 'x', 'value', 'a' ),
+                                               (object)$kvp( 'name', 'y', 'value', array( 'b', ApiResult::META_TYPE => 'array' ) ),
+                                               (object)array( 'name' => 'z', 'c' => 'd', ApiResult::META_TYPE => 'assoc', ApiResult::META_PRESERVE_KEYS => array( 'name' ) ),
+                                               ApiResult::META_TYPE => 'array',
+                                               ApiResult::META_KVP_MERGE => true,
+                                       ),
                                        'emptyDefault' => array( '_dummy' => 1, ApiResult::META_TYPE => 'array' ),
                                        'emptyAssoc' => (object)array( '_dummy' => 1, ApiResult::META_TYPE => 'assoc' ),
                                        '_dummy' => 1,
@@ -1025,6 +1096,11 @@ class ApiResultTest extends MediaWikiTestCase {
                                                (object)array( 'key' => 'x', 'value' => 'a' ),
                                                (object)array( 'key' => 'y', 'value' => 'b' ),
                                        ),
+                                       'kvpmerge' => array(
+                                               (object)array( 'name' => 'x', 'value' => 'a' ),
+                                               (object)array( 'name' => 'y', 'value' => array( 'b' ) ),
+                                               (object)array( 'name' => 'z', 'c' => 'd' ),
+                                       ),
                                        'emptyDefault' => array(),
                                        'emptyAssoc' => (object)array(),
                                        '_dummy' => 1,
index b03836e..362d647 100644 (file)
@@ -25,7 +25,7 @@ class ApiRevisionDeleteTest extends ApiTestCase {
        }
 
        public function testHidingRevisions() {
-               $user = self::$users['sysop']->user;
+               $user = self::$users['sysop']->getUser();
                $revid = array_shift( $this->revs );
                $out = $this->doApiRequest( array(
                        'action' => 'revisiondelete',
@@ -80,7 +80,7 @@ class ApiRevisionDeleteTest extends ApiTestCase {
        }
 
        public function testUnhidingOutput() {
-               $user = self::$users['sysop']->user;
+               $user = self::$users['sysop']->getUser();
                $revid = array_shift( $this->revs );
                // Hide revisions
                $this->doApiRequest( array(
index e9dff9f..a374f09 100644 (file)
@@ -25,7 +25,7 @@ class ApiUnblockTest extends ApiTestCase {
                        ),
                        null,
                        false,
-                       self::$users['sysop']->user
+                       self::$users['sysop']->getUser()
                );
        }
 }
index b7f7d10..c852d72 100644 (file)
@@ -80,7 +80,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                try {
                        $this->doApiRequestWithToken( array(
                                'action' => 'upload',
-                       ), $session, self::$users['uploader']->user );
+                       ), $session, self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                        $this->assertEquals( "One of the parameters filekey, file, url, statuskey is required",
@@ -126,7 +126,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -165,7 +165,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->user );
+                       $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $this->assertContains( 'The file you submitted was empty', $e->getMessage() );
                        $exception = true;
@@ -215,7 +215,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -232,7 +232,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -286,7 +286,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -311,7 +311,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -331,7 +331,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
         */
        public function testUploadStash( $session ) {
                $this->setMwGlobals( array(
-                       'wgUser' => self::$users['uploader']->user, // @todo FIXME: still used somewhere
+                       'wgUser' => self::$users['uploader']->getUser(), // @todo FIXME: still used somewhere
                ) );
 
                $extension = 'png';
@@ -368,7 +368,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -397,7 +397,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -415,7 +415,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
        public function testUploadChunks( $session ) {
                $this->setMwGlobals( array(
                        // @todo FIXME: still used somewhere
-                       'wgUser' => self::$users['uploader']->user,
+                       'wgUser' => self::$users['uploader']->getUser(),
                ) );
 
                $chunkSize = 1048576;
@@ -473,7 +473,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                                // Upload fist chunk ( and get the session key )
                                try {
                                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                                               self::$users['uploader']->user );
+                                               self::$users['uploader']->getUser() );
                                } catch ( UsageException $e ) {
                                        $this->markTestIncomplete( $e->getMessage() );
                                }
@@ -501,7 +501,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                        // Upload current chunk
                        try {
                                list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                                       self::$users['uploader']->user );
+                                       self::$users['uploader']->getUser() );
                        } catch ( UsageException $e ) {
                                $this->markTestIncomplete( $e->getMessage() );
                        }
@@ -541,7 +541,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
index 9c59e65..5302b36 100644 (file)
@@ -124,4 +124,26 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideNormalizeKey
+        */
+       public function testNormalizeKey( $key, $expected ) {
+               $actual = MessageCache::normalizeKey( $key );
+               $this->assertEquals( $expected, $actual );
+       }
+
+       public function provideNormalizeKey() {
+               return array(
+                       array( 'Foo', 'foo' ),
+                       array( 'foo', 'foo' ),
+                       array( 'fOo', 'fOo' ),
+                       array( 'FOO', 'fOO' ),
+                       array( 'Foo bar', 'foo_bar' ),
+                       array( 'Ćab', 'ćab' ),
+                       array( 'Ćab_e 3', 'ćab_e_3' ),
+                       array( 'ĆAB', 'ćAB' ),
+                       array( 'ćab', 'ćab' ),
+                       array( 'ćaB', 'ćaB' ),
+               );
+       }
 }
index ab35453..60235b8 100644 (file)
@@ -243,7 +243,9 @@ class RecentChangeTest extends MediaWikiTestCase {
                        $this->context->msg( 'movedarticleprotection', 'SomeTitle', 'OldTitle' )
                                ->plain() . $sep . $this->user_comment,
                        'protect', 'move_prot',
-                       array( 'OldTitle' ),
+                       array(
+                               '4::oldtitle' => 'OldTitle'
+                       ),
                        $this->user_comment
                );
        }
diff --git a/tests/phpunit/includes/content/CssContentHandlerTest.php b/tests/phpunit/includes/content/CssContentHandlerTest.php
new file mode 100644 (file)
index 0000000..e1785a9
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+class CssContentHandlerTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider provideMakeRedirectContent
+        * @covers CssContentHandler::makeRedirectContent
+        */
+       public function testMakeRedirectContent( $title, $expected ) {
+               $this->setMwGlobals( array(
+                       'wgServer' => '//example.org',
+                       'wgScript' => '/w/index.php',
+               ) );
+               $ch = new CssContentHandler();
+               $content = $ch->makeRedirectContent( Title::newFromText( $title ) );
+               $this->assertInstanceOf( 'CssContent', $content );
+               $this->assertEquals( $expected, $content->serialize( CONTENT_FORMAT_CSS ) );
+       }
+
+       /**
+        * Keep this in sync with CssContentTest::provideGetRedirectTarget()
+        */
+       public static function provideMakeRedirectContent() {
+               return array(
+                       array( 'MediaWiki:MonoBook.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=MediaWiki:MonoBook.css&action=raw&ctype=text/css);" ),
+                       array( 'User:FooBar/common.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=User:FooBar/common.css&action=raw&ctype=text/css);" ),
+                       array( 'Gadget:FooBaz.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ),
+               );
+       }
+}
index 40484d3..c4d87c2 100644 (file)
@@ -4,6 +4,8 @@
  * @group ContentHandler
  * @group Database
  *        ^--- needed, because we do need the database to test link updates
+ *
+ * @FIXME this should not extend JavaScriptContentTest.
  */
 class CssContentTest extends JavaScriptContentTest {
 
@@ -68,7 +70,48 @@ class CssContentTest extends JavaScriptContentTest {
                $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() );
        }
 
-       public static function dataEquals() {
+       /**
+        * Redirects aren't supported
+        */
+       public static function provideUpdateRedirect() {
+               return array(
+                       array(
+                               '#REDIRECT [[Someplace]]',
+                               '#REDIRECT [[Someplace]]',
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideGetRedirectTarget
+        */
+       public function testGetRedirectTarget( $title, $text ) {
+               $this->setMwGlobals( array(
+                       'wgServer' => '//example.org',
+                       'wgScriptPath' => '/w',
+                       'wgScript' => '/w/index.php',
+               ) );
+               $content = new CssContent( $text );
+               $target = $content->getRedirectTarget();
+               $this->assertEquals( $title, $target ? $target->getPrefixedText() : null );
+       }
+
+       /**
+        * Keep this in sync with CssContentHandlerTest::provideMakeRedirectContent()
+        */
+       public static function provideGetRedirectTarget() {
+               return array(
+                       array( 'MediaWiki:MonoBook.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=MediaWiki:MonoBook.css&action=raw&ctype=text/css);" ),
+                       array( 'User:FooBar/common.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=User:FooBar/common.css&action=raw&ctype=text/css);" ),
+                       array( 'Gadget:FooBaz.css', "/* #REDIRECT */@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ),
+                       # No #REDIRECT comment
+                       array( null, "@import url(//example.org/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ),
+                       # Wrong domain
+                       array( null, "/* #REDIRECT */@import url(//example.com/w/index.php?title=Gadget:FooBaz.css&action=raw&ctype=text/css);" ),
+               );
+       }
+
+               public static function dataEquals() {
                return array(
                        array( new CssContent( 'hallo' ), null, false ),
                        array( new CssContent( 'hallo' ), new CssContent( 'hallo' ), true ),
diff --git a/tests/phpunit/includes/content/JavaScriptContentHandlerTest.php b/tests/phpunit/includes/content/JavaScriptContentHandlerTest.php
new file mode 100644 (file)
index 0000000..0f41020
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+class JavaScriptContentHandlerTest extends MediaWikiTestCase {
+
+       /**
+        * @dataProvider provideMakeRedirectContent
+        * @covers JavaScriptContentHandler::makeRedirectContent
+        */
+       public function testMakeRedirectContent( $title, $expected ) {
+               $this->setMwGlobals( array(
+                       'wgServer' => '//example.org',
+                       'wgScript' => '/w/index.php',
+               ) );
+               $ch = new JavaScriptContentHandler();
+               $content = $ch->makeRedirectContent( Title::newFromText( $title ) );
+               $this->assertInstanceOf( 'JavaScriptContent', $content );
+               $this->assertEquals( $expected, $content->serialize( CONTENT_FORMAT_JAVASCRIPT ) );
+       }
+
+       /**
+        * Keep this in sync with JavaScriptContentTest::provideGetRedirectTarget()
+        */
+       public static function provideMakeRedirectContent() {
+               return array(
+                       array( 'MediaWiki:MonoBook.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       array( 'User:FooBar/common.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=User:FooBar/common.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       array( 'Gadget:FooBaz.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=Gadget:FooBaz.js\u0026action=raw\u0026ctype=text/javascript");' ),
+               );
+       }
+}
index 7193ec9..0ee2712 100644 (file)
@@ -251,16 +251,31 @@ class JavaScriptContentTest extends TextContentTest {
 
        /**
         * @covers JavaScriptContent::updateRedirect
+        * @dataProvider provideUpdateRedirect
         */
-       public function testUpdateRedirect() {
+       public function testUpdateRedirect( $oldText, $expectedText) {
+               $this->setMwGlobals( array(
+                       'wgServer' => '//example.org',
+                       'wgScriptPath' => '/w/index.php',
+               ) );
                $target = Title::newFromText( "testUpdateRedirect_target" );
 
-               $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+               $content = new JavaScriptContent( $oldText );
                $newContent = $content->updateRedirect( $target );
 
-               $this->assertTrue(
-                       $content->equals( $newContent ),
-                       "content should be unchanged since it's not wikitext"
+               $this->assertEquals( $expectedText, $newContent->getNativeData() );
+       }
+
+       public static function provideUpdateRedirect() {
+               return array(
+                       array(
+                               '#REDIRECT [[Someplace]]',
+                               '#REDIRECT [[Someplace]]',
+                       ),
+                       array(
+                               '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");',
+                               '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=TestUpdateRedirect_target\u0026action=raw\u0026ctype=text/javascript");'
+                       )
                );
        }
 
@@ -290,4 +305,32 @@ class JavaScriptContentTest extends TextContentTest {
                        array( new JavaScriptContent( "hallo" ), new JavaScriptContent( "HALLO" ), false ),
                );
        }
+
+       /**
+        * @dataProvider provideGetRedirectTarget
+        */
+       public function testGetRedirectTarget( $title, $text ) {
+               $this->setMwGlobals( array(
+                       'wgServer' => '//example.org',
+                       'wgScriptPath' => '/w/index.php',
+               ) );
+               $content = new JavaScriptContent( $text );
+               $target = $content->getRedirectTarget();
+               $this->assertEquals( $title, $target ? $target->getPrefixedText() : null );
+       }
+
+       /**
+        * Keep this in sync with JavaScriptContentHandlerTest::provideMakeRedirectContent()
+        */
+       public static function provideGetRedirectTarget() {
+               return array(
+                       array( 'MediaWiki:MonoBook.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=MediaWiki:MonoBook.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       array( 'User:FooBar/common.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=User:FooBar/common.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       array( 'Gadget:FooBaz.js', '/* #REDIRECT */mw.loader.load("//example.org/w/index.php?title=Gadget:FooBaz.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       // No #REDIRECT comment
+                       array( null, 'mw.loader.load("//example.org/w/index.php?title=MediaWiki:NoRedirect.js\u0026action=raw\u0026ctype=text/javascript");' ),
+                       // Different domain
+                       array( null, '/* #REDIRECT */mw.loader.load("//example.com/w/index.php?title=MediaWiki:OtherWiki.js\u0026action=raw\u0026ctype=text/javascript");' ),
+               );
+       }
 }
index 33861f1..492fec6 100644 (file)
@@ -4,7 +4,6 @@
  * @group ContentHandler
  */
 class TextContentHandlerTest extends MediaWikiLangTestCase {
-
        public function testSupportsDirectEditing() {
                $handler = new TextContentHandler();
                $this->assertTrue( $handler->supportsDirectEditing(), 'direct editing is supported' );
index dd61f85..fe26375 100644 (file)
@@ -27,10 +27,16 @@ class TextContentTest extends MediaWikiLangTestCase {
                                CONTENT_MODEL_JAVASCRIPT,
                        ),
                        'wgUseTidy' => false,
-                       'wgAlwaysUseTidy' => false,
                        'wgCapitalLinks' => true,
                        'wgHooks' => array(), // bypass hook ContentGetParserOutput that force custom rendering
                ) );
+
+               MWTidy::destroySingleton();
+       }
+
+       protected function tearDown() {
+               MWTidy::destroySingleton();
+               parent::tearDown();
        }
 
        public function newContent( $text ) {
index 451d82a..3db9172 100644 (file)
@@ -189,18 +189,34 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
        public function testDuplicateTableStructure() {
                $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $db->query( 'CREATE TABLE foo(foo, barfoo)' );
+               $db->query( 'CREATE INDEX index1 ON foo(foo)' );
+               $db->query( 'CREATE UNIQUE INDEX index2 ON foo(barfoo)' );
 
                $db->duplicateTableStructure( 'foo', 'bar' );
                $this->assertEquals( 'CREATE TABLE "bar"(foo, barfoo)',
                        $db->selectField( 'sqlite_master', 'sql', array( 'name' => 'bar' ) ),
                        'Normal table duplication'
                );
+               $indexList = $db->query( 'PRAGMA INDEX_LIST("bar")' );
+               $index = $indexList->next();
+               $this->assertEquals( 'bar_index1', $index->name );
+               $this->assertEquals( '0', $index->unique );
+               $index = $indexList->next();
+               $this->assertEquals( 'bar_index2', $index->name );
+               $this->assertEquals( '1', $index->unique );
 
                $db->duplicateTableStructure( 'foo', 'baz', true );
                $this->assertEquals( 'CREATE TABLE "baz"(foo, barfoo)',
                        $db->selectField( 'sqlite_temp_master', 'sql', array( 'name' => 'baz' ) ),
                        'Creation of temporary duplicate'
                );
+               $indexList = $db->query( 'PRAGMA INDEX_LIST("baz")' );
+               $index = $indexList->next();
+               $this->assertEquals( 'baz_index1', $index->name );
+               $this->assertEquals( '0', $index->unique );
+               $index = $indexList->next();
+               $this->assertEquals( 'baz_index2', $index->name );
+               $this->assertEquals( '1', $index->unique );
                $this->assertEquals( 0,
                        $db->selectField( 'sqlite_master', 'COUNT(*)', array( 'name' => 'baz' ) ),
                        'Create a temporary duplicate only'
index 338d931..764560d 100644 (file)
@@ -68,25 +68,6 @@ class ORMTableTest extends MediaWikiTestCase {
                $this->assertInstanceOf( $class, $class::singleton() );
                $this->assertTrue( $class::singleton() === $class::singleton() );
        }
-
-       /**
-        * @since 1.21
-        */
-       public function testIgnoreErrorsOverride() {
-               $table = $this->getTable();
-
-               $db = $table->getReadDbConnection();
-               $db->ignoreErrors( true );
-
-               try {
-                       $table->rawSelect( "this is invalid" );
-                       $this->fail( "An invalid query should trigger a DBQueryError even if ignoreErrors is enabled." );
-               } catch ( DBQueryError $ex ) {
-                       $this->assertTrue( true, "just making phpunit happy" );
-               }
-
-               $db->ignoreErrors( false );
-       }
 }
 
 /**
diff --git a/tests/phpunit/includes/debug/logger/LegacyLoggerTest.php b/tests/phpunit/includes/debug/logger/LegacyLoggerTest.php
new file mode 100644 (file)
index 0000000..1b3ce2c
--- /dev/null
@@ -0,0 +1,175 @@
+<?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
+ */
+
+namespace MediaWiki\Logger;
+
+use MediaWikiTestCase;
+use Psr\Log\LogLevel;
+
+class LegacyLoggerTest extends MediaWikiTestCase {
+
+       /**
+        * @covers LegacyLogger::interpolate
+        * @dataProvider provideInterpolate
+        */
+       public function testInterpolate( $message, $context, $expect ) {
+               $this->assertEquals(
+                       $expect, LegacyLogger::interpolate( $message, $context ) );
+       }
+
+       public function provideInterpolate() {
+               $e = new \Exception( 'boom!' );
+               $d = new \DateTime();
+               return array(
+                       array(
+                               'no-op',
+                               array(),
+                               'no-op',
+                       ),
+                       array(
+                               'Hello {world}!',
+                               array(
+                                       'world' => 'World',
+                               ),
+                               'Hello World!',
+                       ),
+                       array(
+                               '{greeting} {user}',
+                               array(
+                                       'greeting' => 'Goodnight',
+                                       'user' => 'Moon',
+                               ),
+                               'Goodnight Moon',
+                       ),
+                       array(
+                               'Oops {key_not_set}',
+                               array(),
+                               'Oops {key_not_set}',
+                       ),
+                       array(
+                               '{ not interpolated }',
+                               array(
+                                       'not interpolated' => 'This should NOT show up in the message',
+                               ),
+                               '{ not interpolated }',
+                       ),
+                       array(
+                               '{null}',
+                               array(
+                                       'null' => null,
+                               ),
+                               '[Null]',
+                       ),
+                       array(
+                               '{bool}',
+                               array(
+                                       'bool' => true,
+                               ),
+                               'true',
+                       ),
+                       array(
+                               '{float}',
+                               array(
+                                       'float' => 1.23,
+                               ),
+                               '1.23',
+                       ),
+                       array(
+                               '{array}',
+                               array(
+                                       'array' => array( 1, 2, 3 ),
+                               ),
+                               '[Array(3)]',
+                       ),
+                       array(
+                               '{exception}',
+                               array(
+                                       'exception' => $e,
+                               ),
+                               '[Exception ' . get_class( $e ) . '( ' .
+                               $e->getFile() . ':' . $e->getLine() . ') ' .
+                               $e->getMessage() . ']',
+                       ),
+                       array(
+                               '{datetime}',
+                               array(
+                                       'datetime' => $d,
+                               ),
+                               $d->format( 'c' ),
+                       ),
+                       array(
+                               '{object}',
+                               array(
+                                       'object' => new \stdClass,
+                               ),
+                               '[Object stdClass]',
+                       ),
+               );
+       }
+
+       /**
+        * @covers LegacyLogger::shouldEmit
+        * @dataProvider provideShouldEmit
+        */
+       public function testShouldEmit( $level, $config, $expected ) {
+               $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
+               $this->assertEquals(
+                       $expected,
+                       LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
+               );
+       }
+
+       public static function provideShouldEmit() {
+               $dest = array( 'destination' => 'foobar' );
+               $tests = array(
+                       array(
+                               LogLevel::DEBUG,
+                               $dest,
+                               true
+                       ),
+                       array(
+                               LogLevel::WARNING,
+                               $dest + array( 'level' => LogLevel::INFO ),
+                               true,
+                       ),
+                       array(
+                               LogLevel::INFO,
+                               $dest + array( 'level' => LogLevel::CRITICAL ),
+                               false,
+                       ),
+               );
+
+               if ( class_exists( '\Monolog\Logger' ) ) {
+                       $tests[] = array(
+                               \Monolog\Logger::INFO,
+                               $dest + array( 'level' => LogLevel::INFO ),
+                               true,
+                       );
+                       $tests[] = array(
+                               \Monolog\Logger::WARNING,
+                               $dest + array( 'level' => LogLevel::EMERGENCY ),
+                               false,
+                       );
+               }
+
+               return $tests;
+       }
+
+}
diff --git a/tests/phpunit/includes/debug/logger/MonologSpiTest.php b/tests/phpunit/includes/debug/logger/MonologSpiTest.php
new file mode 100644 (file)
index 0000000..aa0a54f
--- /dev/null
@@ -0,0 +1,136 @@
+<?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
+ */
+
+namespace MediaWiki\Logger;
+
+use MediaWikiTestCase;
+use TestingAccessWrapper;
+
+class MonologSpiTest extends MediaWikiTestCase {
+
+       /**
+        * @covers MonologSpi::mergeConfig
+        */
+       public function testMergeConfig() {
+               $base = array(
+                       'loggers' => array(
+                               '@default' => array(
+                                       'processors' => array( 'constructor' ),
+                                       'handlers' => array( 'constructor' ),
+                               ),
+                       ),
+                       'processors' => array(
+                               'constructor' => array(
+                                       'class' => 'constructor',
+                               ),
+                       ),
+                       'handlers' => array(
+                               'constructor' => array(
+                                       'class' => 'constructor',
+                                       'formatter' => 'constructor',
+                               ),
+                       ),
+                       'formatters' => array(
+                               'constructor' => array(
+                                       'class' => 'constructor',
+                               ),
+                       ),
+               );
+
+               $fixture = new MonologSpi( $base );
+               $this->assertSame(
+                       $base,
+                       TestingAccessWrapper::newFromObject( $fixture )->config
+               );
+
+               $fixture->mergeConfig( array(
+                       'loggers' => array(
+                               'merged' => array(
+                                       'processors' => array( 'merged' ),
+                                       'handlers' => array( 'merged' ),
+                               ),
+                       ),
+                       'processors' => array(
+                               'merged' => array(
+                                       'class' => 'merged',
+                               ),
+                       ),
+                       'magic' => array(
+                               'idkfa' => array( 'xyzzy' ),
+                       ),
+                       'handlers' => array(
+                               'merged' => array(
+                                       'class' => 'merged',
+                                       'formatter' => 'merged',
+                               ),
+                       ),
+                       'formatters' => array(
+                               'merged' => array(
+                                       'class' => 'merged',
+                               ),
+                       ),
+               ) );
+               $this->assertSame(
+                       array(
+                               'loggers' => array(
+                                       '@default' => array(
+                                               'processors' => array( 'constructor' ),
+                                               'handlers' => array( 'constructor' ),
+                                       ),
+                                       'merged' => array(
+                                               'processors' => array( 'merged' ),
+                                               'handlers' => array( 'merged' ),
+                                       ),
+                               ),
+                               'processors' => array(
+                                       'constructor' => array(
+                                               'class' => 'constructor',
+                                       ),
+                                       'merged' => array(
+                                               'class' => 'merged',
+                                       ),
+                               ),
+                               'handlers' => array(
+                                       'constructor' => array(
+                                               'class' => 'constructor',
+                                               'formatter' => 'constructor',
+                                       ),
+                                       'merged' => array(
+                                               'class' => 'merged',
+                                               'formatter' => 'merged',
+                                       ),
+                               ),
+                               'formatters' => array(
+                                       'constructor' => array(
+                                               'class' => 'constructor',
+                                       ),
+                                       'merged' => array(
+                                               'class' => 'merged',
+                                       ),
+                               ),
+                               'magic' => array(
+                                       'idkfa' => array( 'xyzzy' ),
+                               ),
+                       ),
+                       TestingAccessWrapper::newFromObject( $fixture )->config
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php b/tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php
new file mode 100644 (file)
index 0000000..6ee54d3
--- /dev/null
@@ -0,0 +1,75 @@
+<?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
+ */
+
+namespace MediaWiki\Logger\Monolog;
+
+use InvalidArgumentException;
+use LengthException;
+use LogicException;
+use MediaWikiTestCase;
+use TestingAccessWrapper;
+
+class LineFormatterTest extends MediaWikiTestCase {
+
+       public function setUp() {
+               if ( !class_exists( 'Monolog\Formatter\LineFormatter' ) ) {
+                       $this->markTestSkipped( 'This test requires monolog to be installed' );
+               }
+               parent::setUp();
+       }
+
+       /**
+        * @covers LineFormatter::normalizeException
+        */
+       public function testNormalizeExceptionNoTrace() {
+               $fixture = new LineFormatter();
+               $fixture->includeStacktraces( false );
+               $fixture = TestingAccessWrapper::newFromObject( $fixture );
+               $boom = new InvalidArgumentException( 'boom', 0,
+                       new LengthException( 'too long', 0,
+                               new LogicException( 'Spock wuz here' )
+                       )
+               );
+               $out = $fixture->normalizeException( $boom );
+               $this->assertContains( "\n[Exception InvalidArgumentException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LengthException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LogicException]", $out );
+               $this->assertNotContains( "\n  #0", $out );
+       }
+
+       /**
+        * @covers LineFormatter::normalizeException
+        */
+       public function testNormalizeExceptionTrace() {
+               $fixture = new LineFormatter();
+               $fixture->includeStacktraces( true );
+               $fixture = TestingAccessWrapper::newFromObject( $fixture );
+               $boom = new InvalidArgumentException( 'boom', 0,
+                       new LengthException( 'too long', 0,
+                               new LogicException( 'Spock wuz here' )
+                       )
+               );
+               $out = $fixture->normalizeException( $boom );
+               $this->assertContains( "\n[Exception InvalidArgumentException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LengthException]", $out );
+               $this->assertContains( "\nCaused by: [Exception LogicException]", $out );
+               $this->assertContains( "\n  #0", $out );
+       }
+}
diff --git a/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php b/tests/phpunit/includes/debug/logging/LegacyLoggerTest.php
deleted file mode 100644 (file)
index 415fa04..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-namespace MediaWiki\Logger;
-
-use MediaWikiTestCase;
-use Psr\Log\LogLevel;
-
-class LegacyLoggerTest extends MediaWikiTestCase {
-
-       /**
-        * @covers LegacyLogger::interpolate
-        * @dataProvider provideInterpolate
-        */
-       public function testInterpolate( $message, $context, $expect ) {
-               $this->assertEquals(
-                       $expect, LegacyLogger::interpolate( $message, $context ) );
-       }
-
-       public function provideInterpolate() {
-               return array(
-                       array(
-                               'no-op',
-                               array(),
-                               'no-op',
-                       ),
-                       array(
-                               'Hello {world}!',
-                               array(
-                                       'world' => 'World',
-                               ),
-                               'Hello World!',
-                       ),
-                       array(
-                               '{greeting} {user}',
-                               array(
-                                       'greeting' => 'Goodnight',
-                                       'user' => 'Moon',
-                               ),
-                               'Goodnight Moon',
-                       ),
-                       array(
-                               'Oops {key_not_set}',
-                               array(),
-                               'Oops {key_not_set}',
-                       ),
-                       array(
-                               '{ not interpolated }',
-                               array(
-                                       'not interpolated' => 'This should NOT show up in the message',
-                               ),
-                               '{ not interpolated }',
-                       ),
-               );
-       }
-
-       /**
-        * @covers LegacyLogger::shouldEmit
-        * @dataProvider provideShouldEmit
-        */
-       public function testShouldEmit( $level, $config, $expected ) {
-               $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) );
-               $this->assertEquals(
-                       $expected,
-                       LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() )
-               );
-       }
-
-       public static function provideShouldEmit() {
-               $dest = array( 'destination' => 'foobar' );
-               $tests = array(
-                       array(
-                               LogLevel::DEBUG,
-                               $dest,
-                               true
-                       ),
-                       array(
-                               LogLevel::WARNING,
-                               $dest + array( 'level' => LogLevel::INFO ),
-                               true,
-                       ),
-                       array(
-                               LogLevel::INFO,
-                               $dest + array( 'level' => LogLevel::CRITICAL ),
-                               false,
-                       ),
-               );
-
-               if ( class_exists( '\Monolog\Logger' ) ) {
-                       $tests[] = array(
-                               \Monolog\Logger::INFO,
-                               $dest + array( 'level' => LogLevel::INFO ),
-                               true,
-                       );
-                       $tests[] = array(
-                               \Monolog\Logger::WARNING,
-                               $dest + array( 'level' => LogLevel::EMERGENCY ),
-                               false,
-                       );
-               }
-
-               return $tests;
-       }
-
-}
diff --git a/tests/phpunit/includes/filebackend/SwiftFileBackendTest.php b/tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
new file mode 100644 (file)
index 0000000..a618889
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * @group FileRepo
+ * @group FileBackend
+ * @group medium
+ */
+class SwiftFileBackendTest extends MediaWikiTestCase {
+       /** @var TestingAccessWrapper Proxy to SwiftFileBackend */
+       private $backend;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->backend = TestingAccessWrapper::newFromObject(
+                       new SwiftFileBackend( array(
+                               'name'             => 'local-swift-testing',
+                               'class'            => 'SwiftFileBackend',
+                               'wikiId'           => 'unit-testing',
+                               'lockManager'      => LockManagerGroup::singleton()->get( 'fsLockManager' ),
+                               'swiftAuthUrl'     => 'http://127.0.0.1:8080/auth', // unused
+                               'swiftUser'        => 'test:tester',
+                               'swiftKey'         => 'testing',
+                               'swiftTempUrlKey'  => 'b3968d0207b54ece87cccc06515a89d4' // unused
+                       ) )
+               );
+       }
+
+       /**
+        * @dataProvider provider_testSanitzeHdrs
+        * @covers SwiftFileBackend::sanitzeHdrs
+        * @covers SwiftFileBackend::getCustomHeaders
+        */
+       public function testSanitzeHdrs( $raw, $sanitized ) {
+               $hdrs = $this->backend->sanitizeHdrs( array( 'headers' => $raw ) );
+
+               $this->assertEquals( $hdrs, $sanitized, 'sanitizeHdrs() has expected result' );
+       }
+
+       public static function provider_testSanitzeHdrs() {
+               return array(
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-disposition' => 'inline',
+                                       'content-duration' => 35.6363,
+                                       'content-Custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               ),
+                               array(
+                                       'content-disposition' => 'inline',
+                                       'content-duration' => 35.6363,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               )
+                       ),
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-Disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
+                                       'content-duration' => 35.6363,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               ),
+                               array(
+                                       'content-disposition' => 'inline;filename=xxx',
+                                       'content-duration' => 35.6363,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               )
+                       ),
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-disposition' => 'filename='. str_repeat( 'o', 1024 ) . ';inline',
+                                       'content-duration' => 35.6363,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               ),
+                               array(
+                                       'content-disposition' => '',
+                                       'content-duration' => 35.6363,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello'
+                               )
+                       )
+               );
+       }
+
+       /**
+        * @dataProvider provider_testGetMetadataHeaders
+        * @covers SwiftFileBackend::getMetadataHeaders
+        */
+       public function testGetMetadataHeaders( $raw, $sanitized ) {
+               $hdrs = $this->backend->getMetadataHeaders( $raw );
+
+               $this->assertEquals( $hdrs, $sanitized, 'getMetadataHeaders() has expected result' );
+       }
+
+       public static function provider_testGetMetadataHeaders() {
+               return array(
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello',
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1Base36' => 'a3deadfg...',
+                               ),
+                               array(
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1base36' => 'a3deadfg...',
+                               )
+                       )
+               );
+       }
+
+       /**
+        * @dataProvider provider_testGetMetadata
+        * @covers SwiftFileBackend::getMetadata
+        */
+       public function testGetMetadata( $raw, $sanitized ) {
+               $hdrs = $this->backend->getMetadata( $raw );
+
+               $this->assertEquals( $hdrs, $sanitized, 'getMetadata() has expected result' );
+       }
+
+       public static function provider_testGetMetadata() {
+               return array(
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello',
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1Base36' => 'a3deadfg...',
+                               ),
+                               array(
+                                       'custom' => 5,
+                                       'sha1base36' => 'a3deadfg...',
+                               )
+                       )
+               );
+       }
+}
\ No newline at end of file
diff --git a/tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php b/tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php
new file mode 100644 (file)
index 0000000..681e368
--- /dev/null
@@ -0,0 +1,138 @@
+<?php
+
+class FileBackendDBRepoWrapperTest extends MediaWikiTestCase {
+       protected $backendName = 'foo-backend';
+       protected $repoName = 'pureTestRepo';
+
+       /**
+        * @dataProvider getBackendPathsProvider
+        * @covers FileBackendDBRepoWrapper::getBackendPaths
+        */
+       public function testGetBackendPaths(
+               $mocks,
+               $latest,
+               $dbReadsExpected,
+               $dbReturnValue,
+               $originalPath,
+               $expectedBackendPath,
+               $message ) {
+               list( $dbMock, $backendMock, $wrapperMock ) = $mocks;
+
+               $dbMock->expects( $dbReadsExpected )
+                       ->method( 'selectField' )
+                       ->will( $this->returnValue( $dbReturnValue ) );
+
+               $newPaths = $wrapperMock->getBackendPaths( array( $originalPath ), $latest );
+
+               $this->assertEquals(
+                       $expectedBackendPath,
+                       $newPaths[0],
+                       $message );
+       }
+
+       public function getBackendPathsProvider() {
+               $prefix = 'mwstore://' . $this->backendName . '/' . $this->repoName;
+               $mocksForCaching = $this->getMocks();
+
+               return array(
+                       array(
+                               $mocksForCaching,
+                               false,
+                               $this->once(),
+                               '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               $prefix . '-public/f/o/foobar.jpg',
+                               $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               'Public path translated correctly',
+                       ),
+                       array(
+                               $mocksForCaching,
+                               false,
+                               $this->never(),
+                               '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               $prefix . '-public/f/o/foobar.jpg',
+                               $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               'LRU cache leveraged',
+                       ),
+                       array(
+                               $this->getMocks(),
+                               true,
+                               $this->once(),
+                               '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               $prefix . '-public/f/o/foobar.jpg',
+                               $prefix . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               'Latest obtained',
+                       ),
+                       array(
+                               $this->getMocks(),
+                               true,
+                               $this->never(),
+                               '96246614d75ba1703bdfd5d7660bb57407aaf5d9',
+                               $prefix . '-deleted/f/o/foobar.jpg',
+                               $prefix . '-original/f/o/o/foobar',
+                               'Deleted path translated correctly',
+                       ),
+                       array(
+                               $this->getMocks(),
+                               true,
+                               $this->once(),
+                               null,
+                               $prefix . '-public/b/a/baz.jpg',
+                               $prefix . '-public/b/a/baz.jpg',
+                               'Path left untouched if no sha1 can be found',
+                       ),
+               );
+       }
+
+       /**
+        * @covers FileBackendDBRepoWrapper::getFileContentsMulti
+        */
+       public function testGetFileContentsMulti() {
+               list( $dbMock, $backendMock, $wrapperMock ) = $this->getMocks();
+
+               $sha1Path = 'mwstore://' . $this->backendName . '/' . $this->repoName
+                       . '-original/9/6/2/96246614d75ba1703bdfd5d7660bb57407aaf5d9';
+               $filenamePath = 'mwstore://' . $this->backendName . '/' . $this->repoName
+                       . '-public/f/o/foobar.jpg';
+
+               $dbMock->expects( $this->once() )
+                       ->method( 'selectField' )
+                       ->will( $this->returnValue( '96246614d75ba1703bdfd5d7660bb57407aaf5d9' ) );
+
+               $backendMock->expects( $this->once() )
+                       ->method( 'getFileContentsMulti')
+                       ->will( $this->returnValue( array( $sha1Path => 'foo' ) ) );
+
+               $result = $wrapperMock->getFileContentsMulti( array( 'srcs' => array( $filenamePath ) ) );
+
+               $this->assertEquals(
+                       array( $filenamePath => 'foo' ),
+                       $result,
+                       'File contents paths translated properly'
+               );
+       }
+
+       protected function getMocks() {
+               $dbMock = $this->getMockBuilder( 'DatabaseMysql' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $backendMock = $this->getMock( 'FSFileBackend',
+                       array(),
+                       array( array(
+                               'name' => $this->backendName,
+                               'wikiId' => wfWikiId()
+                       ) ) );
+
+               $wrapperMock = $this->getMock( 'FileBackendDBRepoWrapper',
+                       array( 'getDB' ),
+                       array( array(
+                               'backend' => $backendMock,
+                               'repoName' => $this->repoName,
+                               'dbHandleFactory' => null
+                       ) ) );
+
+               $wrapperMock->expects( $this->any() )->method( 'getDB' )->will( $this->returnValue( $dbMock ) );
+
+               return array( $dbMock, $backendMock, $wrapperMock );
+       }
+}
diff --git a/tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php b/tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php
new file mode 100644 (file)
index 0000000..551d3a7
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+class MigrateFileRepoLayoutTest extends MediaWikiTestCase {
+       protected $tmpPrefix;
+       protected $migratorMock;
+       protected $tmpFilepath;
+       protected $text = 'testing';
+
+       protected function setUp() {
+               parent::setUp();
+
+               $filename = 'Foo.png';
+
+               $this->tmpPrefix = wfTempDir() . '/migratefilelayout-test-' . time() . '-' . mt_rand();
+
+               $backend = new FSFileBackend( array(
+                       'name' => 'local-migratefilerepolayouttest',
+                       'wikiId' => wfWikiID(),
+                       'containerPaths' => array(
+                               'migratefilerepolayouttest-original' => "{$this->tmpPrefix}-original",
+                               'migratefilerepolayouttest-public' => "{$this->tmpPrefix}-public",
+                               'migratefilerepolayouttest-thumb' => "{$this->tmpPrefix}-thumb",
+                               'migratefilerepolayouttest-temp' => "{$this->tmpPrefix}-temp",
+                               'migratefilerepolayouttest-deleted' => "{$this->tmpPrefix}-deleted",
+                       )
+               ) );
+
+               $dbMock = $this->getMockBuilder( 'DatabaseMysql' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $imageRow = new stdClass;
+               $imageRow->img_name = $filename;
+               $imageRow->img_sha1 = sha1( $this->text );
+
+               $dbMock->expects( $this->any() )
+                       ->method( 'select' )
+                       ->will( $this->onConsecutiveCalls(
+                               new FakeResultWrapper( array( $imageRow ) ), // image
+                               new FakeResultWrapper( array() ), // image
+                               new FakeResultWrapper( array() ) // filearchive
+                       ) );
+
+               $repoMock = $this->getMock( 'LocalRepo',
+                       array( 'getMasterDB' ),
+                       array( array(
+                               'name' => 'migratefilerepolayouttest',
+                               'backend' => $backend
+                       ) ) );
+
+               $repoMock->expects( $this->any() )->method( 'getMasterDB' )->will( $this->returnValue( $dbMock ) );
+
+               $this->migratorMock = $this->getMock( 'MigrateFileRepoLayout', array( 'getRepo' ) );
+               $this->migratorMock->expects( $this->any() )->method( 'getRepo' )->will( $this->returnValue( $repoMock ) );
+
+               $this->tmpFilepath = TempFSFile::factory( 'migratefilelayout-test-', 'png' )->getPath();
+
+               file_put_contents( $this->tmpFilepath, $this->text );
+
+               $hashPath = $repoMock->getHashPath( $filename );
+
+               $status = $repoMock->store( $this->tmpFilepath, 'public', $hashPath . $filename, FileRepo::OVERWRITE );
+       }
+
+       protected function deleteFilesRecursively( $directory ) {
+               foreach ( glob( $directory . '/*' ) as $file ) {
+               if ( is_dir( $file ) ) {
+                       $this->deleteFilesRecursively( $file );
+               } else {
+                       unlink( $file );
+               }
+               }
+
+               rmdir( $directory );
+       }
+
+       protected function tearDown() {
+               foreach ( glob( $this->tmpPrefix . '*' ) as $directory ) {
+                       $this->deleteFilesRecursively( $directory );
+               }
+
+               unlink( $this->tmpFilepath );
+
+               parent::tearDown();
+       }
+
+       public function testMigration() {
+               $this->migratorMock->loadParamsAndArgs( null, array( 'oldlayout' => 'name', 'newlayout' => 'sha1' ) );
+
+               ob_start();
+
+               $this->migratorMock->execute();
+
+               ob_end_clean();
+
+               $sha1 = sha1( $this->text );
+
+               $expectedOriginalFilepath = $this->tmpPrefix
+                       . '-original/'
+                       . substr( $sha1, 0, 1 )
+                       . '/'
+                       . substr( $sha1, 1, 1 )
+                       . '/'
+                       . substr( $sha1, 2, 1 )
+                       . '/'
+                       . $sha1 ;
+
+               $this->assertEquals( file_get_contents( $expectedOriginalFilepath ), $this->text, 'New sha1 file should be exist and have the right contents' );
+
+               $expectedPublicFilepath = $this->tmpPrefix . '-public/f/f8/Foo.png';
+
+               $this->assertEquals( file_get_contents( $expectedPublicFilepath ), $this->text, 'Existing name file should still and have the right contents' );
+       }
+}
index 6142f96..7841f30 100644 (file)
@@ -102,12 +102,12 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Without trailing slash',
                                array( 'foo { prop: url(../bar.png); }', false, 'http://example.org/quux', false ),
-                               'foo { prop: url(http://example.org/quux/../bar.png); }',
+                               'foo { prop: url(http://example.org/bar.png); }',
                        ),
                        array(
                                'With trailing slash on remote (bug 27052)',
                                array( 'foo { prop: url(../bar.png); }', false, 'http://example.org/quux/', false ),
-                               'foo { prop: url(http://example.org/quux/../bar.png); }',
+                               'foo { prop: url(http://example.org/bar.png); }',
                        ),
                        array(
                                'Guard against stripping double slashes from query',
@@ -133,12 +133,7 @@ class CSSMinTest extends MediaWikiTestCase {
                $remotePath = 'http://localhost/w/';
 
                $realOutput = CSSMin::remap( $input, $localPath, $remotePath );
-
-               $this->assertEquals(
-                       $expectedOutput,
-                       preg_replace( '/\d+-\d+-\d+T\d+:\d+:\d+Z/', 'timestamp', $realOutput ),
-                       "CSSMin::remap: $message"
-               );
+               $this->assertEquals( $expectedOutput, $realOutput, "CSSMin::remap: $message" );
        }
 
        public static function provideIsRemoteUrl() {
@@ -197,7 +192,7 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Regular file',
                                'foo { background: url(red.gif); }',
-                               'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                               'foo { background: url(http://localhost/w/red.gif?34ac6); }',
                        ),
                        array(
                                'Regular file (missing)',
@@ -242,12 +237,12 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Embedded file',
                                'foo { /* @embed */ background: url(red.gif); }',
-                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?34ac6)!ie; }",
                        ),
                        array(
                                'Embedded file, other comments before the rule',
                                "foo { /* Bar. */ /* @embed */ background: url(red.gif); }",
-                               "foo { /* Bar. */ background: url($red); /* Bar. */ background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                               "foo { /* Bar. */ background: url($red); /* Bar. */ background: url(http://localhost/w/red.gif?34ac6)!ie; }",
                        ),
                        array(
                                'Can not re-embed data: URIs',
@@ -268,12 +263,12 @@ class CSSMinTest extends MediaWikiTestCase {
                                'Embedded file (inline @embed)',
                                'foo { background: /* @embed */ url(red.gif); }',
                                "foo { background: url($red); "
-                                       . "background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                                       . "background: url(http://localhost/w/red.gif?34ac6)!ie; }",
                        ),
                        array(
                                'Can not embed large files',
                                'foo { /* @embed */ background: url(large.png); }',
-                               "foo { background: url(http://localhost/w/large.png?timestamp); }",
+                               "foo { background: url(http://localhost/w/large.png?e3d1f); }",
                        ),
                        array(
                                'SVG files are embedded without base64 encoding and unnecessary IE 6 and 7 fallback',
@@ -283,55 +278,55 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Two regular files in one rule',
                                'foo { background: url(red.gif), url(green.gif); }',
-                               'foo { background: url(http://localhost/w/red.gif?timestamp), '
-                                       . 'url(http://localhost/w/green.gif?timestamp); }',
+                               'foo { background: url(http://localhost/w/red.gif?34ac6), '
+                                       . 'url(http://localhost/w/green.gif?13651); }',
                        ),
                        array(
                                'Two embedded files in one rule',
                                'foo { /* @embed */ background: url(red.gif), url(green.gif); }',
                                "foo { background: url($red), url($green); "
-                                       . "background: url(http://localhost/w/red.gif?timestamp), "
-                                       . "url(http://localhost/w/green.gif?timestamp)!ie; }",
+                                       . "background: url(http://localhost/w/red.gif?34ac6), "
+                                       . "url(http://localhost/w/green.gif?13651)!ie; }",
                        ),
                        array(
                                'Two embedded files in one rule (inline @embed)',
                                'foo { background: /* @embed */ url(red.gif), /* @embed */ url(green.gif); }',
                                "foo { background: url($red), url($green); "
-                                       . "background: url(http://localhost/w/red.gif?timestamp), "
-                                       . "url(http://localhost/w/green.gif?timestamp)!ie; }",
+                                       . "background: url(http://localhost/w/red.gif?34ac6), "
+                                       . "url(http://localhost/w/green.gif?13651)!ie; }",
                        ),
                        array(
                                'Two embedded files in one rule (inline @embed), one too large',
                                'foo { background: /* @embed */ url(red.gif), /* @embed */ url(large.png); }',
-                               "foo { background: url($red), url(http://localhost/w/large.png?timestamp); "
-                                       . "background: url(http://localhost/w/red.gif?timestamp), "
-                                       . "url(http://localhost/w/large.png?timestamp)!ie; }",
+                               "foo { background: url($red), url(http://localhost/w/large.png?e3d1f); "
+                                       . "background: url(http://localhost/w/red.gif?34ac6), "
+                                       . "url(http://localhost/w/large.png?e3d1f)!ie; }",
                        ),
                        array(
                                'Practical example with some noise',
                                'foo { /* @embed */ background: #f9f9f9 url(red.gif) 0 0 no-repeat; }',
                                "foo { background: #f9f9f9 url($red) 0 0 no-repeat; "
-                                       . "background: #f9f9f9 url(http://localhost/w/red.gif?timestamp) 0 0 no-repeat!ie; }",
+                                       . "background: #f9f9f9 url(http://localhost/w/red.gif?34ac6) 0 0 no-repeat!ie; }",
                        ),
                        array(
                                'Does not mess with other properties',
                                'foo { color: red; background: url(red.gif); font-size: small; }',
-                               'foo { color: red; background: url(http://localhost/w/red.gif?timestamp); font-size: small; }',
+                               'foo { color: red; background: url(http://localhost/w/red.gif?34ac6); font-size: small; }',
                        ),
                        array(
                                'Spacing and miscellanea not changed (1)',
                                'foo {   background:    url(red.gif);  }',
-                               'foo {   background:    url(http://localhost/w/red.gif?timestamp);  }',
+                               'foo {   background:    url(http://localhost/w/red.gif?34ac6);  }',
                        ),
                        array(
                                'Spacing and miscellanea not changed (2)',
                                'foo {background:url(red.gif)}',
-                               'foo {background:url(http://localhost/w/red.gif?timestamp)}',
+                               'foo {background:url(http://localhost/w/red.gif?34ac6)}',
                        ),
                        array(
                                'Spaces within url() parentheses are ignored',
                                'foo { background: url( red.gif ); }',
-                               'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                               'foo { background: url(http://localhost/w/red.gif?34ac6); }',
                        ),
                        array(
                                '@import rule to local file (should we remap this?)',
@@ -351,22 +346,22 @@ class CSSMinTest extends MediaWikiTestCase {
                        array(
                                'Simple case with comments after url',
                                'foo { prop: url(red.gif)/* some {funny;} comment */ ; }',
-                               'foo { prop: url(http://localhost/w/red.gif?timestamp)/* some {funny;} comment */ ; }',
+                               'foo { prop: url(http://localhost/w/red.gif?34ac6)/* some {funny;} comment */ ; }',
                        ),
                        array(
                                'Embedded file with comment before url',
                                'foo { /* @embed */ background: /* some {funny;} comment */ url(red.gif); }',
-                               "foo { background: /* some {funny;} comment */ url($red); background: /* some {funny;} comment */ url(http://localhost/w/red.gif?timestamp)!ie; }",
+                               "foo { background: /* some {funny;} comment */ url($red); background: /* some {funny;} comment */ url(http://localhost/w/red.gif?34ac6)!ie; }",
                        ),
                        array(
                                'Embedded file with comments inside and outside the rule',
                                'foo { /* @embed */ background: url(red.gif) /* some {foo;} comment */; /* some {bar;} comment */ }',
-                               "foo { background: url($red) /* some {foo;} comment */; background: url(http://localhost/w/red.gif?timestamp) /* some {foo;} comment */!ie; /* some {bar;} comment */ }",
+                               "foo { background: url($red) /* some {foo;} comment */; background: url(http://localhost/w/red.gif?34ac6) /* some {foo;} comment */!ie; /* some {bar;} comment */ }",
                        ),
                        array(
                                'Embedded file with comment outside the rule',
                                'foo { /* @embed */ background: url(red.gif); /* some {funny;} comment */ }',
-                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; /* some {funny;} comment */ }",
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?34ac6)!ie; /* some {funny;} comment */ }",
                        ),
                        array(
                                'Rule with two urls, each with comments',
index e96953e..57668e5 100644 (file)
@@ -170,4 +170,37 @@ class IEUrlExtensionTest extends PHPUnit_Framework_TestCase {
                        'Two dots'
                );
        }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testScriptQuery() {
+               $this->assertEquals(
+                       'php',
+                       IEUrlExtension::findIE6Extension( 'example.php?foo=a&bar=b' ),
+                       'Script with query'
+               );
+       }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testEscapedScriptQuery() {
+               $this->assertEquals(
+                       '',
+                       IEUrlExtension::findIE6Extension( 'example%2Ephp?foo=a&bar=b' ),
+                       'Script with urlencoded dot and query'
+               );
+       }
+
+       /**
+        * @covers IEUrlExtension::findIE6Extension
+        */
+       public function testEscapedScriptQueryDot() {
+               $this->assertEquals(
+                       'y',
+                       IEUrlExtension::findIE6Extension( 'example%2Ephp?foo=a.x&bar=b.y' ),
+                       'Script with urlencoded dot and query with dot'
+               );
+       }
 }
diff --git a/tests/phpunit/includes/libs/IPSetTest.php b/tests/phpunit/includes/libs/IPSetTest.php
deleted file mode 100644 (file)
index 5bbacef..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-
-/**
- * @group IPSet
- */
-class IPSetTest extends PHPUnit_Framework_TestCase {
-       /**
-        * Provides test cases for IPSetTest::testIPSet
-        *
-        * Returns an array of test cases. Each case is an array of (description,
-        * config, tests).  Description is just text output for failure messages,
-        * config is an array constructor argument for IPSet, and the tests are
-        * an array of IP => expected (boolean) result against the config dataset.
-        */
-       public static function provideIPSets() {
-               return array(
-                       array(
-                               'old_list_subset',
-                               array(
-                                       '208.80.152.162',
-                                       '10.64.0.123',
-                                       '10.64.0.124',
-                                       '10.64.0.125',
-                                       '10.64.0.126',
-                                       '10.64.0.127',
-                                       '10.64.0.128',
-                                       '10.64.0.129',
-                                       '10.64.32.104',
-                                       '10.64.32.105',
-                                       '10.64.32.106',
-                                       '10.64.32.107',
-                                       '91.198.174.45',
-                                       '91.198.174.46',
-                                       '91.198.174.47',
-                                       '91.198.174.57',
-                                       '2620:0:862:1:A6BA:DBFF:FE30:CFB3',
-                                       '91.198.174.58',
-                                       '2620:0:862:1:A6BA:DBFF:FE38:FFDA',
-                                       '208.80.152.16',
-                                       '208.80.152.17',
-                                       '208.80.152.18',
-                                       '208.80.152.19',
-                                       '91.198.174.102',
-                                       '91.198.174.103',
-                                       '91.198.174.104',
-                                       '91.198.174.105',
-                                       '91.198.174.106',
-                                       '91.198.174.107',
-                                       '91.198.174.81',
-                                       '2620:0:862:1:26B6:FDFF:FEF5:B2D4',
-                                       '91.198.174.82',
-                                       '2620:0:862:1:26B6:FDFF:FEF5:ABB4',
-                                       '10.20.0.113',
-                                       '2620:0:862:102:26B6:FDFF:FEF5:AD9C',
-                                       '10.20.0.114',
-                                       '2620:0:862:102:26B6:FDFF:FEF5:7C38',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.64.0.122' => false,
-                                       '10.64.0.123' => true,
-                                       '10.64.0.124' => true,
-                                       '10.64.0.129' => true,
-                                       '10.64.0.130' => false,
-                                       '91.198.174.81' => true,
-                                       '91.198.174.80' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:FFFF:FFFF:FFFF:FFFF' => false,
-                                       '2001:db8::1234' => false,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb3' => false,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb4' => true,
-                                       '2620:0:862:1:26b6:fdff:fef5:abb5' => false,
-                               ),
-                       ),
-                       array(
-                               'new_cidr_set',
-                               array(
-                                       '208.80.154.0/26',
-                                       '2620:0:861:1::/64',
-                                       '208.80.154.128/26',
-                                       '2620:0:861:2::/64',
-                                       '208.80.154.64/26',
-                                       '2620:0:861:3::/64',
-                                       '208.80.155.96/27',
-                                       '2620:0:861:4::/64',
-                                       '10.64.0.0/22',
-                                       '2620:0:861:101::/64',
-                                       '10.64.16.0/22',
-                                       '2620:0:861:102::/64',
-                                       '10.64.32.0/22',
-                                       '2620:0:861:103::/64',
-                                       '10.64.48.0/22',
-                                       '2620:0:861:107::/64',
-                                       '91.198.174.0/25',
-                                       '2620:0:862:1::/64',
-                                       '10.20.0.0/24',
-                                       '2620:0:862:102::/64',
-                                       '10.128.0.0/24',
-                                       '2620:0:863:101::/64',
-                                       '10.2.4.26',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => true,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => true,
-                                       '10.128.0.0' => true,
-                                       '10.64.17.55' => true,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => true,
-                               ),
-                       ),
-                       array(
-                               'empty_set',
-                               array(),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => false,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => false,
-                                       '10.128.0.0' => false,
-                                       '10.64.17.55' => false,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => false,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => false,
-                               ),
-                       ),
-                       array(
-                               'edge_cases',
-                               array(
-                                       '0.0.0.0',
-                                       '255.255.255.255',
-                                       '::',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
-                                       '10.10.10.10/25', // host bits intentional
-                               ),
-                               array(
-                                       '0.0.0.0' => true,
-                                       '255.255.255.255' => true,
-                                       '10.2.4.25' => false,
-                                       '10.2.4.26' => false,
-                                       '10.2.4.27' => false,
-                                       '10.20.0.255' => false,
-                                       '10.128.0.0' => false,
-                                       '10.64.17.55' => false,
-                                       '10.64.20.0' => false,
-                                       '10.64.27.207' => false,
-                                       '10.64.31.255' => false,
-                                       '0::0' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true,
-                                       '2001:DB8::1' => false,
-                                       '2620:0:861:106::45' => false,
-                                       '2620:0:862:103::' => false,
-                                       '2620:0:862:102:10:20:0:113' => false,
-                                       '10.10.9.255' => false,
-                                       '10.10.10.0' => true,
-                                       '10.10.10.1' => true,
-                                       '10.10.10.10' => true,
-                                       '10.10.10.126' => true,
-                                       '10.10.10.127' => true,
-                                       '10.10.10.128' => false,
-                                       '10.10.10.177' => false,
-                                       '10.10.10.255' => false,
-                                       '10.10.11.0' => false,
-                               ),
-                       ),
-                       array(
-                               'exercise_optimizer',
-                               array(
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffe:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffd:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffc:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffb:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fffa:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8000/113',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:0/113',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff8:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff7:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff6:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff5:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff4:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff3:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff2:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff1:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff0:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffef:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffee:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffec:0/111',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffeb:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffea:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe9:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe8:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe7:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe6:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe5:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe4:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe3:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe2:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe1:0/112',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffe0:0/110',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:0/107',
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0/107',
-                               ),
-                               array(
-                                       '0.0.0.0' => false,
-                                       '255.255.255.255' => false,
-                                       '::' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ff9f:ffff' => false,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffa0:0' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffc0:1234' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffed:ffff' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff4:4444' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:fff9:8080' => true,
-                                       'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' => true,
-                               ),
-                       ),
-               );
-       }
-
-       /**
-        * Validates IPSet loading and matching code
-        *
-        * @covers IPSet
-        * @dataProvider provideIPSets
-        */
-       public function testIPSet( $desc, array $cfg, array $tests ) {
-               $ipset = new IPSet( $cfg );
-               foreach ( $tests as $ip => $expected ) {
-                       $result = $ipset->match( $ip );
-                       $this->assertEquals( $expected, $result, "Incorrect match() result for $ip in dataset $desc" );
-               }
-       }
-}
index 13908b9..d23534e 100644 (file)
@@ -140,6 +140,13 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase {
                        array( "5..toString();", "5..toString();" ),
                        array( "5...toString();", false ),
                        array( "5.\n.toString();", '5..toString();' ),
+
+                       // Boolean minification (!0 / !1)
+                       array( "var a = { b: true };", "var a={b:!0};" ),
+                       array( "var a = { true: 12 };", "var a={true:12};", false ),
+                       array( "a.true = 12;", "a.true=12;", false ),
+                       array( "a.foo = true;", "a.foo=!0;" ),
+                       array( "a.foo = false;", "a.foo=!1;" ),
                );
        }
 
@@ -147,15 +154,17 @@ class JavaScriptMinifierTest extends PHPUnit_Framework_TestCase {
         * @dataProvider provideCases
         * @covers JavaScriptMinifier::minify
         */
-       public function testJavaScriptMinifierOutput( $code, $expectedOutput ) {
+       public function testJavaScriptMinifierOutput( $code, $expectedOutput, $expectedValid = true ) {
                $minified = JavaScriptMinifier::minify( $code );
 
                // JSMin+'s parser will throw an exception if output is not valid JS.
                // suppression of warnings needed for stupid crap
-               MediaWiki\suppressWarnings();
-               $parser = new JSParser();
-               MediaWiki\restoreWarnings();
-               $parser->parse( $minified, 'minify-test.js', 1 );
+               if ( $expectedValid ) {
+                       MediaWiki\suppressWarnings();
+                       $parser = new JSParser();
+                       MediaWiki\restoreWarnings();
+                       $parser->parse( $minified, 'minify-test.js', 1 );
+               }
 
                $this->assertEquals(
                        $expectedOutput,
index a9d3cc1..aea037e 100644 (file)
@@ -29,10 +29,17 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
                        'args' => array( function() {
                                return 'unwrapped';
                        }, ),
+                       'calls' => array(
+                               'setter' => array( function() {
+                                       return 'unwrapped';
+                               }, ),
+                       ),
                        'closure_expansion' => false,
                ) );
                $this->assertInstanceOf( 'Closure', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0]() );
+               $this->assertInstanceOf( 'Closure', $obj->setterArgs[0] );
+               $this->assertSame( 'unwrapped', $obj->setterArgs[0]() );
        }
 
        /**
@@ -44,25 +51,43 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
                        'args' => array( function() {
                                return 'unwrapped';
                        }, ),
+                       'calls' => array(
+                               'setter' => array( function() {
+                                       return 'unwrapped';
+                               }, ),
+                       ),
                        'closure_expansion' => true,
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0] );
+               $this->assertInternalType( 'string', $obj->setterArgs[0] );
+               $this->assertSame( 'unwrapped', $obj->setterArgs[0] );
 
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
                        'args' => array( function() {
                                return 'unwrapped';
                        }, ),
+                       'calls' => array(
+                               'setter' => array( function() {
+                                       return 'unwrapped';
+                               }, ),
+                       ),
                ) );
                $this->assertInternalType( 'string', $obj->args[0] );
                $this->assertSame( 'unwrapped', $obj->args[0] );
+               $this->assertInternalType( 'string', $obj->setterArgs[0] );
+               $this->assertSame( 'unwrapped', $obj->setterArgs[0] );
        }
 }
 
 class ObjectFactoryTest_Fixture {
        public $args;
+       public $setterArgs;
        public function __construct( /*...*/ ) {
                $this->args = func_get_args();
        }
+       public function setter( /*...*/ ) {
+               $this->setterArgs = func_get_args();
+       }
 }
diff --git a/tests/phpunit/includes/libs/SamplingStatsdClientTest.php b/tests/phpunit/includes/libs/SamplingStatsdClientTest.php
new file mode 100644 (file)
index 0000000..be6732d
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+class SamplingStatsdClientTest extends PHPUnit_Framework_TestCase {
+       /**
+        * @dataProvider samplingDataProvider
+        */
+       public function testSampling( $data, $sampleRate, $seed, $expectWrite ) {
+               $sender = $this->getMock( 'Liuggio\StatsdClient\Sender\SenderInterface' );
+               $sender->expects( $this->any() )->method( 'open' )->will( $this->returnValue( true ) );
+               if ( $expectWrite ) {
+                       $sender->expects( $this->once() )->method( 'write' )
+                               ->with( $this->anything(), $this->equalTo( $data ) );
+               } else {
+                       $sender->expects( $this->never() )->method( 'write' );
+               }
+               mt_srand( $seed );
+               $client = new SamplingStatsdClient( $sender );
+               $client->send( $data, $sampleRate );
+       }
+
+       public function samplingDataProvider() {
+               $unsampled = new StatsdData();
+               $unsampled->setKey( 'foo' );
+               $unsampled->setValue( 1 );
+
+               $sampled = new StatsdData();
+               $sampled->setKey( 'foo' );
+               $sampled->setValue( 1 );
+               $sampled->setSampleRate( '0.1' );
+
+               return array(
+                       // $data, $sampleRate, $seed, $expectWrite
+                       array( $unsampled, 1, 0 /*0.44*/, $unsampled ),
+                       array( $sampled, 1, 0 /*0.44*/, null ),
+                       array( $sampled, 1, 4 /*0.03*/, $sampled ),
+                       array( $unsampled, 0.1, 4 /*0.03*/, $sampled ),
+                       array( $sampled, 0.5, 0 /*0.44*/, null ),
+                       array( $sampled, 0.5, 4 /*0.03*/, $sampled ),
+               );
+       }
+}
index cab6794..e88452b 100644 (file)
@@ -48,6 +48,7 @@ abstract class LogFormatterTestCase extends MediaWikiLangTestCase {
        }
 
        private static function removeSomeHtml( $html ) {
+               $html = str_replace( '&quot;', '"', $html );
                return trim( preg_replace( '/<(a|span)[^>]*>([^<]*)<\/\1>/', '$2', $html ) );
        }
 
diff --git a/tests/phpunit/includes/logging/ProtectLogFormatterTest.php b/tests/phpunit/includes/logging/ProtectLogFormatterTest.php
new file mode 100644 (file)
index 0000000..611b2df
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+class ProtectLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideMoveProtLogDatabaseRows() {
+               return array(
+                       // Current format
+                       array(
+                               array(
+                                       'type' => 'protect',
+                                       'action' => 'move_prot',
+                                       'comment' => 'Move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'NewPage',
+                                       'params' => array(
+                                               '4::oldtitle' => 'OldPage',
+                                       ),
+                               ),
+                               array(
+                                       'text' => 'User moved protection settings from OldPage to NewPage',
+                                       'api' => array(
+                                               'oldtitle_ns' => 0,
+                                               'oldtitle_title' => 'OldPage',
+                                       ),
+                               ),
+                       ),
+
+                       // Legacy format
+                       array(
+                               array(
+                                       'type' => 'protect',
+                                       'action' => 'move_prot',
+                                       'comment' => 'Move comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'NewPage',
+                                       'params' => array(
+                                               'OldPage',
+                                       ),
+                               ),
+                               array(
+                                       'legacy' => true,
+                                       'text' => 'User moved protection settings from OldPage to NewPage',
+                                       'api' => array(
+                                               'oldtitle_ns' => 0,
+                                               'oldtitle_title' => 'OldPage',
+                                       ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideMoveProtLogDatabaseRows
+        */
+       public function testMoveProtLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}
index 4516bb4..b684006 100644 (file)
@@ -1,8 +1,10 @@
 <?php
 /**
  * @author Matthias Mullie <mmullie@wikimedia.org>
+ * @group BagOStuff
  */
 class BagOStuffTest extends MediaWikiTestCase {
+       /** @var BagOStuff */
        private $cache;
 
        protected function setUp() {
@@ -136,20 +138,48 @@ class BagOStuffTest extends MediaWikiTestCase {
        public function testGetMulti() {
                $value1 = array( 'this' => 'is', 'a' => 'test' );
                $value2 = array( 'this' => 'is', 'another' => 'test' );
+               $value3 = array( 'testing a key that may be encoded when sent to cache backend' );
 
                $key1 = wfMemcKey( 'test1' );
                $key2 = wfMemcKey( 'test2' );
+               $key3 = wfMemcKey( 'will-%-encode' ); // internally, MemcachedBagOStuffs will encode to will-%25-encode
 
                $this->cache->add( $key1, $value1 );
                $this->cache->add( $key2, $value2 );
+               $this->cache->add( $key3, $value3 );
 
                $this->assertEquals(
-                       $this->cache->getMulti( array( $key1, $key2 ) ),
-                       array( $key1 => $value1, $key2 => $value2 )
+                       array( $key1 => $value1, $key2 => $value2, $key3 => $value3 ),
+                       $this->cache->getMulti( array( $key1, $key2, $key3 ) )
                );
 
                // cleanup
                $this->cache->delete( $key1 );
                $this->cache->delete( $key2 );
+               $this->cache->delete( $key3 );
+       }
+
+       /**
+        * @covers BagOStuff::getScopedLock
+        */
+       public function testGetScopedLock() {
+               $key = wfMemcKey( 'test' );
+               $value1 = $this->cache->getScopedLock( $key, 0 );
+               $value2 = $this->cache->getScopedLock( $key, 0 );
+
+               $this->assertType( 'ScopedCallback', $value1, 'First call returned lock' );
+               $this->assertNull( $value2, 'Duplicate call returned no lock' );
+
+               unset( $value1 );
+
+               $value3 = $this->cache->getScopedLock( $key, 0 );
+               $this->assertType( 'ScopedCallback', $value3, 'Lock returned callback after release' );
+               unset( $value3 );
+
+               $value1 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
+               $value2 = $this->cache->getScopedLock( $key, 0, 5, 'reentry' );
+
+               $this->assertType( 'ScopedCallback', $value1, 'First reentrant call returned lock' );
+               $this->assertType( 'ScopedCallback', $value1, 'Second reentrant call returned lock' );
        }
 }
index 10f64be..9b4eca7 100644 (file)
@@ -224,6 +224,7 @@ class WANObjectCacheTest extends MediaWikiTestCase {
 
        /**
         * @covers WANObjectCache::touchCheckKey()
+        * @covers WANObjectCache::resetCheckKey()
         * @covers WANObjectCache::getCheckKeyTime()
         */
        public function testTouchKeys() {
@@ -250,5 +251,13 @@ class WANObjectCacheTest extends MediaWikiTestCase {
 
                $t4 = $this->cache->getCheckKeyTime( $key );
                $this->assertEquals( $t3, $t4, 'Check key time did not change' );
+
+               usleep( 1 );
+               $this->cache->resetCheckKey( $key );
+               $t5 = $this->cache->getCheckKeyTime( $key );
+               $this->assertGreaterThan( $t4, $t5, 'Check key time increased' );
+
+               $t6 = $this->cache->getCheckKeyTime( $key );
+               $this->assertEquals( $t5, $t6, 'Check key time did not change' );
        }
 }
index df891f5..96ae3be 100644 (file)
@@ -91,7 +91,7 @@ class MediaWikiParserTest {
                        // enough to cause there to be separate names for different
                        // things, which is good enough for our purposes.
                        $extensionName = basename( dirname( $fileName ) );
-                       $testsName = $extensionName . '' . basename( $fileName, '.txt' );
+                       $testsName = $extensionName . '__' . basename( $fileName, '.txt' );
                        $escapedFileName = strtr( $fileName, array( "'" => "\\'", '\\' => '\\\\' ) );
                        $parserTestClassName = ucfirst( $testsName );
                        // Official spec for class names: http://php.net/manual/en/language.oop5.basic.php
index c7a3103..0d2129b 100644 (file)
@@ -160,10 +160,10 @@ class NewParserTest extends MediaWikiTestCase {
                $this->djVuSupport = new DjVuSupport();
                // Tidy support
                $this->tidySupport = new TidySupport();
+               $tmpGlobals['wgTidyConfig'] = null;
                $tmpGlobals['wgUseTidy'] = false;
-               $tmpGlobals['wgAlwaysUseTidy'] = false;
                $tmpGlobals['wgDebugTidy'] = false;
-               $tmpGlobals['wgTidyConf'] = $IP . '/includes/tidy.conf';
+               $tmpGlobals['wgTidyConf'] = $IP . '/includes/tidy/tidy.conf';
                $tmpGlobals['wgTidyOpts'] = '';
                $tmpGlobals['wgTidyInternal'] = $this->tidySupport->isInternal();
 
@@ -185,6 +185,8 @@ class NewParserTest extends MediaWikiTestCase {
                $wgNamespaceAliases['Image'] = $this->savedWeirdGlobals['image_alias'];
                $wgNamespaceAliases['Image_talk'] = $this->savedWeirdGlobals['image_talk_alias'];
 
+               MWTidy::destroySingleton();
+
                // Restore backends
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
@@ -454,6 +456,7 @@ class NewParserTest extends MediaWikiTestCase {
                        $GLOBALS[$var] = $val;
                }
 
+               MWTidy::destroySingleton();
                MagicWord::clearCache();
 
                # The entries saved into RepoGroup cache with previous globals will be wrong.
index 3605e50..4af3898 100644 (file)
@@ -19,12 +19,6 @@ class TagHookTest extends MediaWikiTestCase {
                return array( array( "foo<bar" ), array( "foo>bar" ), array( "foo\nbar" ), array( "foo\rbar" ) );
        }
 
-       protected function setUp() {
-               parent::setUp();
-
-               $this->setMwGlobals( 'wgAlwaysUseTidy', false );
-       }
-
        /**
         * @dataProvider provideValidNames
         * @covers Parser::setHook
index f656a74..5db2908 100644 (file)
@@ -7,8 +7,7 @@ class TidyTest extends MediaWikiTestCase {
 
        protected function setUp() {
                parent::setUp();
-               $check = MWTidy::tidy( '' );
-               if ( strpos( $check, '<!--' ) !== false ) {
+               if ( !MWTidy::isEnabled() ) {
                        $this->markTestSkipped( 'Tidy not found' );
                }
        }
index a79c9a8..1cb8a5d 100644 (file)
@@ -38,6 +38,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        public static function provideRegisterHooks() {
+               $merge = array( ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive' );
                // Format:
                // Current $wgHooks
                // Content in extension.json
@@ -47,19 +48,19 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                        array(
                                array(),
                                self::$default,
-                               array(),
+                               $merge,
                        ),
                        // No current hooks, adding one for "FooBaz"
                        array(
                                array(),
                                array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
-                               array( 'FooBaz' => array( 'FooBazCallback' ) ),
+                               array( 'FooBaz' => array( 'FooBazCallback' ) ) + $merge,
                        ),
                        // Hook for "FooBaz", adding another one
                        array(
                                array( 'FooBaz' => array( 'PriorCallback' ) ),
                                array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
-                               array( 'FooBaz' => array( 'PriorCallback', 'FooBazCallback' ) ),
+                               array( 'FooBaz' => array( 'PriorCallback', 'FooBazCallback' ) ) + $merge,
                        ),
                        // Hook for "BarBaz", adding one for "FooBaz"
                        array(
@@ -68,7 +69,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array(
                                        'BarBaz' => array( 'BarBazCallback' ),
                                        'FooBaz' => array( 'FooBazCallback' ),
-                               ),
+                               ) + $merge,
                        ),
                        // Callbacks for FooBaz wrapped in an array
                        array(
@@ -76,7 +77,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array( 'Hooks' => array( 'FooBaz' => array( 'Callback1' ) ) ) + self::$default,
                                array(
                                        'FooBaz' => array( 'Callback1' ),
-                               ),
+                               ) + $merge,
                        ),
                        // Multiple callbacks for FooBaz hook
                        array(
@@ -84,7 +85,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array( 'Hooks' => array( 'FooBaz' => array( 'Callback1', 'Callback2' ) ) ) + self::$default,
                                array(
                                        'FooBaz' => array( 'Callback1', 'Callback2' ),
-                               ),
+                               ) + $merge,
                        ),
                );
        }
@@ -112,11 +113,20 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                '@IGNORED' => 'yes',
                        ),
                ) + self::$default;
+               $info2 = array(
+                       'config' => array(
+                               '_prefix' => 'eg',
+                               'Bar' => 'somevalue'
+                       ),
+               ) + self::$default;
                $processor->extractInfo( $this->dir, $info, 1 );
+               $processor->extractInfo( $this->dir, $info2, 1 );
                $extracted = $processor->getExtractedInfo();
                $this->assertEquals( 'somevalue', $extracted['globals']['wgBar'] );
                $this->assertEquals( 10, $extracted['globals']['wgFoo'] );
                $this->assertArrayNotHasKey( 'wg@IGNORED', $extracted['globals'] );
+               // Custom prefix:
+               $this->assertEquals( 'somevalue', $extracted['globals']['egBar'] );
        }
 
        public static function provideExtracttExtensionMessagesFiles() {
index 515ce11..b8b1b06 100644 (file)
@@ -101,6 +101,50 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                        ),
                                )
                        ),
+                       array(
+                               'Global already set, 1d array that appends',
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'foobar',
+                                               'foo'
+                                       ),
+                               ),
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'barbaz',
+                                       ),
+                               ),
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'barbaz',
+                                               'foobar',
+                                               'foo',
+                                       ),
+                               )
+                       ),
+                       array(
+                               'Global already set, 2d array with integer keys',
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => true,
+                                               102 => false
+                                       ),
+                               ),
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => false,
+                                               500 => true,
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_plus',
+                                       ),
+                               ),
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => false,
+                                               102 => false,
+                                               500 => true,
+                                       ),
+                               )
+                       ),
                        array(
                                'No global already set, $wgHooks',
                                array(
@@ -111,6 +155,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                'FooBarEvent' => array(
                                                        'FooBarClass::onFooBarEvent'
                                                ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive'
                                        ),
                                ),
                                array(
@@ -138,6 +183,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                'FooBarEvent' => array(
                                                        'BazBarClass::onFooBarEvent',
                                                ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive',
                                        ),
                                ),
                                array(
@@ -173,7 +219,8 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                        'right' => true,
                                                        'somethingtwo' => false,
                                                        'nonduplicated' => true,
-                                               )
+                                               ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_plus_2d',
                                        ),
                                ),
                                array(
index 136ca6e..41653fb 100644 (file)
@@ -3,10 +3,9 @@
 class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
 
        /**
-        * @covers ResourceLoaderModule::getDefinitionSummary
-        * @covers ResourceLoaderFileModule::getDefinitionSummary
+        * @covers ResourceLoaderModule::getVersionHash
         */
-       public function testDefinitionSummary() {
+       public function testGetVersionHash() {
                $context = $this->getResourceLoaderContext();
 
                $baseParams = array(
@@ -16,15 +15,13 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                );
 
                $module = new ResourceLoaderFileModule( $baseParams );
-
-               $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) );
+               $version = json_encode( $module->getVersionHash( $context ) );
 
                // Exactly the same
                $module = new ResourceLoaderFileModule( $baseParams );
-
                $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       $version,
+                       json_encode( $module->getVersionHash( $context ) ),
                        'Instance is insignificant'
                );
 
@@ -32,10 +29,9 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                $module = new ResourceLoaderFileModule( array(
                        'dependencies' => array( 'mediawiki', 'jquery' ),
                ) + $baseParams );
-
                $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       $version,
+                       json_encode( $module->getVersionHash( $context ) ),
                        'Order of dependencies is insignificant'
                );
 
@@ -43,10 +39,9 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                $module = new ResourceLoaderFileModule( array(
                        'messages' => array( 'world', 'hello' ),
                ) + $baseParams );
-
                $this->assertEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       $version,
+                       json_encode( $module->getVersionHash( $context ) ),
                        'Order of messages is insignificant'
                );
 
@@ -54,19 +49,17 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                $module = new ResourceLoaderFileModule( array(
                        'scripts' => array( 'bar.js', 'foo.js' ),
                ) + $baseParams );
-
                $this->assertNotEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       $version,
+                       json_encode( $module->getVersionHash( $context ) ),
                        'Order of scripts is significant'
                );
 
                // Subclass
                $module = new ResourceLoaderFileModuleTestModule( $baseParams );
-
                $this->assertNotEquals(
-                       $jsonSummary,
-                       json_encode( $module->getDefinitionSummary( $context ) ),
+                       $version,
+                       json_encode( $module->getVersionHash( $context ) ),
                        'Class is significant'
                );
        }
index 490f5c6..cb91614 100644 (file)
@@ -10,7 +10,8 @@ class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase {
                                'out' => '
 mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [] );'
+} );
+mw.loader.register( [] );'
                        ) ),
                        array( array(
                                'msg' => 'Basic registry',
@@ -20,7 +21,8 @@ mw.loader.addSource( {
                                'out' => '
 mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse"
@@ -37,7 +39,8 @@ mw.loader.addSource( {
                                'out' => '
 mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse"
@@ -65,7 +68,8 @@ mw.loader.addSource( {
                                'out' => '
 mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse"
@@ -87,7 +91,8 @@ mw.loader.addSource( {
 mw.loader.addSource( {
     "local": "/w/load.php",
     "example": "http://example.org/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse",
@@ -123,7 +128,8 @@ mw.loader.addSource( {
                                'out' => '
 mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.x.core",
         "wvTifjse"
@@ -219,7 +225,8 @@ mw.loader.addSource( {
 mw.loader.addSource( {
     "local": "/w/load.php",
     "example": "http://example.org/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse"
@@ -342,7 +349,7 @@ mw.loader.addSource( {
                $rl->register( $modules );
                $module = new ResourceLoaderStartUpModule();
                $this->assertEquals(
-'mw.loader.addSource({"local":"/w/load.php"});'
+'mw.loader.addSource({"local":"/w/load.php"});' . "\n"
 . 'mw.loader.register(['
 . '["test.blank","wvTifjse"],'
 . '["test.min","wvTifjse",[0],null,null,'
@@ -364,7 +371,8 @@ mw.loader.addSource( {
                $this->assertEquals(
 'mw.loader.addSource( {
     "local": "/w/load.php"
-} );mw.loader.register( [
+} );
+mw.loader.register( [
     [
         "test.blank",
         "wvTifjse"
index cc20e7f..b683885 100644 (file)
@@ -6,15 +6,6 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                parent::setUp();
 
                $this->setMwGlobals( array(
-                       'wgResourceLoaderLESSFunctions' => array(
-                               'test-sum' => function ( $frame, $less ) {
-                                       $sum = 0;
-                                       foreach ( $frame[2] as $arg ) {
-                                               $sum += (int)$arg[1];
-                                       }
-                                       return $sum;
-                               },
-                       ),
                        'wgResourceLoaderLESSImportPaths' => array(
                                dirname( dirname( __DIR__ ) ) . '/data/less/common',
                        ),
index 673ba54..48ef524 100644 (file)
@@ -130,4 +130,28 @@ class DBSiteStoreTest extends MediaWikiTestCase {
                $sites = $store->getSites();
                $this->assertEquals( 0, $sites->count() );
        }
+
+       /**
+        * @covers DBSiteStore::getSites
+        */
+       public function testGetSitesDefaultOrder() {
+               $store = new DBSiteStore();
+               $siteB = new Site();
+               $siteB->setGlobalId( 'B' );
+               $siteA = new Site();
+               $siteA->setGlobalId( 'A' );
+               $store->saveSites( array( $siteB, $siteA ) );
+
+               $sites = $store->getSites();
+               $siteIdentifiers = array();
+               /** @var Site $site */
+               foreach ( $sites as $site ) {
+                       $siteIdentifiers[] = $site->getGlobalId();
+               }
+               $this->assertSame( array( 'A', 'B' ), $siteIdentifiers );
+
+               // Note: SiteList::getGlobalIdentifiers uses an other internal state. Iteration must be
+               // tested separately.
+               $this->assertSame( array( 'A', 'B' ), $sites->getGlobalIdentifiers() );
+       }
 }
index 5482b97..7e60fdd 100644 (file)
@@ -141,4 +141,107 @@ class SpecialSearchTest extends MediaWikiTestCase {
                        "Search term '{$term}' should not be expanded in Special:Search <title>"
                );
        }
+
+       public function provideRewriteQueryWithSuggestion() {
+               return array(
+                       array(
+                               'With results and a suggestion does not run suggested query',
+                               '/Did you mean: <a[^>]+>first suggestion/',
+                               array(
+                                       new SpecialSearchTestMockResultSet( 'first suggestion', array(
+                                               SearchResult::newFromTitle( Title::newMainPage() ),
+                                       ) ),
+                                       new SpecialSearchTestMockResultSet( 'was never run', array() ),
+                               ),
+                       ),
+
+                       array(
+                               'With no results and a suggestion responds with suggested query results',
+                               '/Showing results for <a[^>]+>first suggestion/',
+                               array(
+                                       new SpecialSearchTestMockResultSet( 'first suggestion', array() ),
+                                       new SpecialSearchTestMockResultSet( 'second suggestion', array(
+                                               SearchResult::newFromTitle( Title::newMainPage() ),
+                                       ) ),
+                               ),
+                       ),
+
+                       array(
+                               'When both queries have no results user gets no results',
+                               '/There were no results matching the query/',
+                               array(
+                                       new SpecialSearchTestMockResultSet( 'first suggestion', array() ),
+                                       new SpecialSearchTestMockResultSet( 'second suggestion', array() ),
+                               ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideRewriteQueryWithSuggestion
+        */
+       public function testRewriteQueryWithSuggestion( $message, $expectRegex, $fromResults ) {
+               $mockSearchEngine = $this->mockSearchEngine( $fromResults );
+               $search = $this->getMockBuilder( 'SpecialSearch' )
+                       ->setMethods( array( 'getSearchEngine' ) )
+                       ->getMock();
+               $search->expects( $this->any() )
+                       ->method( 'getSearchEngine' )
+                       ->will( $this->returnValue( $mockSearchEngine ) );
+
+               $search->getContext()->setTitle( Title::makeTitle( NS_SPECIAL, 'Search' ) );
+               $search->load();
+               $search->showResults( 'this is a fake search' );
+
+               $html = $search->getContext()->getOutput()->getHTML();
+               foreach ( (array)$expectRegex as $regex ) {
+                       $this->assertRegExp( $regex, $html, $message );
+               }
+       }
+
+       protected function mockSearchEngine( array $returnValues ) {
+               $mock = $this->getMockBuilder( 'SearchEngine' )
+                       ->setMethods( array( 'searchText' ) )
+                       ->getMock();
+
+               $mock->expects( $this->any() )
+                       ->method( 'searchText' )
+                       ->will( call_user_func_array(
+                               array( $this, 'onConsecutiveCalls' ),
+                               array_map( array( $this, 'returnValue' ), $returnValues )
+                       ) );
+
+               return $mock;
+       }
+}
+
+class SpecialSearchTestMockResultSet extends SearchResultSet {
+       protected $results;
+       protected $suggestion;
+
+       public function __construct( $suggestion = null, array $results = array(), $containedSyntax = false) {
+               $this->results = $results;
+               $this->suggestion = $suggestion;
+               $this->containedSyntax = $containedSyntax;
+       }
+
+       public function numRows() {
+               return count( $this->results );
+       }
+
+       public function getTotalHits() {
+               return $this->numRows();
+       }
+
+       public function hasSuggestion() {
+               return $this->suggestion !== null;
+       }
+
+       public function getSuggestionQuery() {
+               return $this->suggestion;
+       }
+
+       public function getSuggestionSnippet() {
+               return $this->suggestion;
+       }
 }
index d5d1188..8f9eabe 100644 (file)
@@ -20,7 +20,7 @@ class UploadStashTest extends MediaWikiTestCase {
                parent::setUp();
 
                // Setup a file for bug 29408
-               $this->bug29408File = __DIR__ . '/bug29408';
+               $this->bug29408File = wfTempDir() . '/bug29408';
                file_put_contents( $this->bug29408File, "\x00" );
 
                self::$users = array(
diff --git a/tests/phpunit/includes/utils/BatchRowUpdateTest.php b/tests/phpunit/includes/utils/BatchRowUpdateTest.php
new file mode 100644 (file)
index 0000000..a2b35f3
--- /dev/null
@@ -0,0 +1,243 @@
+<?php
+
+/**
+ * Tests for BatchRowUpdate and its components
+ *
+ * @group db
+ */
+class BatchRowUpdateTest extends MediaWikiTestCase {
+
+       public function testWriterBasicFunctionality() {
+               $db = $this->mockDb();
+               $writer = new BatchRowWriter( $db, 'echo_event' );
+
+               $updates = array(
+                       self::mockUpdate( array( 'something' => 'changed' ) ),
+                       self::mockUpdate( array( 'otherthing' => 'changed' ) ),
+                       self::mockUpdate( array( 'and' => 'something', 'else' => 'changed' ) ),
+               );
+
+               $db->expects( $this->exactly( count( $updates ) ) )
+                       ->method( 'update' );
+
+               $writer->write( $updates );
+       }
+
+       static protected function mockUpdate( array $changes ) {
+               static $i = 0;
+               return array(
+                       'primaryKey' => array( 'event_id' => $i++ ),
+                       'changes' => $changes,
+               );
+       }
+
+       public function testReaderBasicIterate() {
+               $db = $this->mockDb();
+               $batchSize = 2;
+               $reader = new BatchRowIterator( $db, 'some_table', 'id_field', $batchSize );
+
+               $response = $this->genSelectResult( $batchSize, /*numRows*/ 5, function() {
+                       static $i = 0;
+                       return array( 'id_field' => ++$i );
+               } );
+               $db->expects( $this->exactly( count( $response ) ) )
+                       ->method( 'select' )
+                       ->will( $this->consecutivelyReturnFromSelect( $response ) );
+
+               $pos = 0;
+               foreach ( $reader as $rows ) {
+                       $this->assertEquals( $response[$pos], $rows, "Testing row in position $pos" );
+                       $pos++;
+               }
+               // -1 is because the final array() marks the end and isnt included
+               $this->assertEquals( count( $response ) - 1, $pos );
+       }
+
+       static public function provider_readerGetPrimaryKey() {
+               $row = array(
+                       'id_field' => 42,
+                       'some_col' => 'dvorak',
+                       'other_col' => 'samurai',
+               );
+               return array(
+
+                       array(
+                               'Must return single column pk when requested',
+                               array( 'id_field' => 42 ),
+                               $row
+                       ),
+
+                       array(
+                               'Must return multiple column pks when requested',
+                               array( 'id_field' => 42, 'other_col' => 'samurai' ),
+                               $row
+                       ),
+
+               );
+       }
+
+       /**
+        * @dataProvider provider_readerGetPrimaryKey
+        */
+       public function testReaderGetPrimaryKey( $message, array $expected, array $row ) {
+               $reader = new BatchRowIterator( $this->mockDb(), 'some_table', array_keys( $expected ), 8675309 );
+               $this->assertEquals( $expected, $reader->extractPrimaryKeys( (object) $row ), $message );
+       }
+
+       static public function provider_readerSetFetchColumns() {
+               return array(
+
+                       array(
+                               'Must merge primary keys into select conditions',
+                               // Expected column select
+                               array( 'foo', 'bar' ),
+                               // primary keys
+                               array( 'foo' ),
+                               // setFetchColumn
+                               array( 'bar' )
+                       ),
+
+                       array(
+                               'Must not merge primary keys into the all columns selector',
+                               // Expected column select
+                               array( '*' ),
+                               // primary keys
+                               array( 'foo' ),
+                               // setFetchColumn
+                               array( '*' ),
+                       ),
+
+                       array(
+                               'Must not duplicate primary keys into column selector',
+                               // Expected column select.
+                               // TODO: figure out how to only assert the array_values portion and not the keys
+                               array( 0 => 'foo', 1 => 'bar', 3 => 'baz' ),
+                               // primary keys
+                               array( 'foo', 'bar', ),
+                               // setFetchColumn
+                               array( 'bar', 'baz' ),
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provider_readerSetFetchColumns
+        */
+       public function testReaderSetFetchColumns( $message, array $columns, array $primaryKeys, array $fetchColumns ) {
+               $db = $this->mockDb();
+               $db->expects( $this->once() )
+                       ->method( 'select' )
+                       ->with( 'some_table', $columns ) // only testing second parameter of DatabaseBase::select
+                       ->will( $this->returnValue( new ArrayIterator( array() ) ) );
+
+               $reader = new BatchRowIterator( $db, 'some_table', $primaryKeys, 22 );
+               $reader->setFetchColumns( $fetchColumns );
+               // triggers first database select
+               $reader->rewind();
+       }
+
+       static public function provider_readerSelectConditions() {
+               return array(
+
+                       array(
+                               "With single primary key must generate id > 'value'",
+                               // Expected second iteration
+                               array( "( id_field > '3' )" ),
+                               // Primary key(s)
+                               'id_field',
+                       ),
+
+                       array(
+                               'With multiple primary keys the first conditions must use >= and the final condition must use >',
+                               // Expected second iteration
+                               array( "( id_field = '3' AND foo > '103' ) OR ( id_field > '3' )" ),
+                               // Primary key(s)
+                               array( 'id_field', 'foo' ),
+                       ),
+
+               );
+       }
+
+       /**
+        * Slightly hackish to use reflection, but asserting different parameters
+        * to consecutive calls of DatabaseBase::select in phpunit is error prone
+        *
+        * @dataProvider provider_readerSelectConditions
+        */
+       public function testReaderSelectConditionsMultiplePrimaryKeys( $message, $expectedSecondIteration, $primaryKeys, $batchSize = 3 ) {
+               $results = $this->genSelectResult( $batchSize, $batchSize * 3, function() {
+                       static $i = 0, $j = 100, $k = 1000;
+                       return array( 'id_field' => ++$i, 'foo' => ++$j, 'bar' => ++$k );
+               } );
+               $db = $this->mockDbConsecutiveSelect( $results );
+
+               $conditions = array( 'bar' => 42, 'baz' => 'hai' );
+               $reader = new BatchRowIterator( $db, 'some_table', $primaryKeys, $batchSize );
+               $reader->addConditions( $conditions );
+
+               $buildConditions = new ReflectionMethod( $reader, 'buildConditions' );
+               $buildConditions->setAccessible( true );
+
+               // On first iteration only the passed conditions must be used
+               $this->assertEquals( $conditions, $buildConditions->invoke( $reader ),
+                       'First iteration must return only the conditions passed in addConditions' );
+               $reader->rewind();
+
+               // Second iteration must use the maximum primary key of last set
+               $this->assertEquals(
+                       $conditions + $expectedSecondIteration,
+                       $buildConditions->invoke( $reader ),
+                       $message
+               );
+       }
+
+       protected function mockDbConsecutiveSelect( array $retvals ) {
+               $db = $this->mockDb();
+               $db->expects( $this->any() )
+                       ->method( 'select' )
+                       ->will( $this->consecutivelyReturnFromSelect( $retvals ) );
+               $db->expects( $this->any() )
+                       ->method( 'addQuotes' )
+                       ->will( $this->returnCallback( function( $value ) {
+                               return "'$value'"; // not real quoting: doesn't matter in test
+                       } ) );
+
+               return $db;
+       }
+
+       protected function consecutivelyReturnFromSelect( array $results ) {
+               $retvals = array();
+               foreach ( $results as $rows ) {
+                       // The DatabaseBase::select method returns iterators, so we do too.
+                       $retvals[] = $this->returnValue( new ArrayIterator( $rows ) );
+               }
+
+               return call_user_func_array( array( $this, 'onConsecutiveCalls' ), $retvals );
+       }
+
+
+       protected function genSelectResult( $batchSize, $numRows, $rowGenerator ) {
+               $res = array();
+               for ( $i = 0; $i < $numRows; $i += $batchSize ) {
+                       $rows = array();
+                       for ( $j = 0; $j < $batchSize && $i + $j < $numRows; $j++ ) {
+                               $rows [] = (object) call_user_func( $rowGenerator );
+                       }
+                       $res[] = $rows;
+               }
+               $res[] = array(); // termination condition requires empty result for last row
+               return $res;
+       }
+
+       protected function mockDb() {
+               // Cant mock from DatabaseType or DatabaseBase, they dont
+               // have the full gamut of methods
+               $databaseMysql = $this->getMockBuilder( 'DatabaseMysql' )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $databaseMysql->expects( $this->any() )
+                       ->method( 'isOpen' )
+                       ->will( $this->returnValue( true ) );
+               return $databaseMysql;
+       }
+}
index ade8fc4..4fca002 100644 (file)
@@ -1030,7 +1030,7 @@ class LanguageTest extends LanguageClassesTestCase {
                return array(
                        array(
                                0,
-                               "0 B",
+                               "0 bytes",
                                "Zero bytes"
                        ),
                        array(
@@ -1046,7 +1046,7 @@ class LanguageTest extends LanguageClassesTestCase {
                        array(
                                1024 * 1024 * 1024,
                                "1 GB",
-                               "1 gigabytes"
+                               "1 gigabyte"
                        ),
                        array(
                                pow( 1024, 4 ),
index efde4c0..587d6d0 100755 (executable)
@@ -55,7 +55,7 @@ class PHPUnitMaintClass extends Maintenance {
        public function finalSetup() {
                parent::finalSetup();
 
-               global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
+               global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgMainWANCache;
                global $wgLanguageConverterCacheType, $wgUseDatabaseMessages;
                global $wgLocaltimezone, $wgLocalisationCacheConf;
                global $wgDevelopmentWarnings;
@@ -67,6 +67,7 @@ class PHPUnitMaintClass extends Maintenance {
                $wgDevelopmentWarnings = true;
 
                $wgMainCacheType = CACHE_NONE;
+               $wgMainWANCache = CACHE_NONE;
                $wgMessageCacheType = CACHE_NONE;
                $wgParserCacheType = CACHE_NONE;
                $wgLanguageConverterCacheType = CACHE_NONE;
index 97eddee..0a29af5 100644 (file)
@@ -31,6 +31,7 @@ return array(
                        'mediawiki.page.ready',
                        'mediawiki.page.startup',
                        'test.sinonjs',
+                       'dom-level2-shim',
                ),
                'position' => 'top',
                'targets' => array( 'desktop', 'mobile' ),
@@ -67,8 +68,11 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.RegExp.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js',
@@ -79,11 +83,14 @@ return array(
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js',
                        'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js',
                ),
                'dependencies' => array(
                        'jquery.accessKeyLabel',
@@ -106,10 +113,15 @@ return array(
                        'mediawiki.api.category',
                        'mediawiki.api.options',
                        'mediawiki.api.parse',
+                       'mediawiki.api.upload',
                        'mediawiki.api.watch',
+                       'mediawiki.ForeignApi.core',
+                       'mediawiki.ForeignUpload',
+                       'mediawiki.ForeignStructuredUpload',
                        'mediawiki.jqueryMsg',
                        'mediawiki.messagePoster',
                        'mediawiki.RegExp',
+                       'mediawiki.storage',
                        'mediawiki.Title',
                        'mediawiki.toc',
                        'mediawiki.Uri',
@@ -120,6 +132,7 @@ return array(
                        'mediawiki.language',
                        'mediawiki.cldr',
                        'mediawiki.cookie',
+                       'mediawiki.experiments',
                        'test.mediawiki.qunit.testrunner',
                ),
        )
index 61ebbf8..0fcaa5f 100644 (file)
@@ -133,8 +133,7 @@ class GenerateJqueryMsgData extends Maintenance {
                                . "// languages, and parser modes. Intended for use by a unit test framework by looping\n"
                                . "// through the object and comparing its parser return value with the 'result' property.\n"
                                . '// Last generated with ' . basename( __FILE__ ) . ' at ' . gmdate( 'r' ) . "\n"
-                               // This file will contain unquoted JSON strings as javascript native object literals,
-                               // flip the quotemark convention for this file.
+                               . "//jscs:disable\n"
                                . "\n"
                                . 'mediaWiki.libs.phpParserData = ' . FormatJson::encode( $phpParserData, true ) . ";\n";
 
index 4ab5f14..498acc1 100644 (file)
@@ -1,7 +1,8 @@
 // This file stores the output from the PHP parser for various messages, arguments,
 // languages, and parser modes. Intended for use by a unit test framework by looping
 // through the object and comparing its parser return value with the 'result' property.
-// Last generated with generateJqueryMsgData.php at Thu, 30 Jan 2014 04:04:41 +0000
+// Last generated with generateJqueryMsgData.php at Fri, 10 Jul 2015 11:44:08 +0000
+//jscs:disable
 
 mediaWiki.libs.phpParserData = {
     "messages": {
index b828357..01f9625 100644 (file)
@@ -3,20 +3,17 @@
 ( function ( $, mw, QUnit ) {
        'use strict';
 
-       var mwTestIgnore, mwTester,
-               addons,
-               ELEMENT_NODE = 1,
-               TEXT_NODE = 3;
+       var mwTestIgnore, mwTester, addons;
 
        /**
         * Add bogus to url to prevent IE crazy caching
         *
-        * @param value {String} a relative path (eg. 'data/foo.js'
+        * @param {String} value a relative path (eg. 'data/foo.js'
         * or 'data/test.php?foo=bar').
         * @return {String} Such as 'data/foo.js?131031765087663960'
         */
        QUnit.fixurl = function ( value ) {
-               return value + (/\?/.test( value ) ? '&' : '?')
+               return value + ( /\?/.test( value ) ? '&' : '?' )
                        + String( new Date().getTime() )
                        + String( parseInt( Math.random() * 100000, 10 ) );
        };
@@ -69,7 +66,7 @@
        sinon.config = {
                injectIntoThis: true,
                injectInto: null,
-               properties: ['spy', 'stub', 'mock', 'sandbox'],
+               properties: [ 'spy', 'stub', 'mock', 'sandbox' ],
                // Don't fake timers by default
                useFakeTimers: false,
                useFakeServer: false
        /**
         * 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]
+        *
+        * @param {Object} [localEnv]
         * @example (see test suite at the bottom of this file)
         * </code>
         */
                                },
 
                                teardown: function () {
-                                       var timers, active;
+                                       var timers, pending, $activeLen;
 
                                        localEnv.teardown.call( this );
 
                                                $.each( $.timers, function ( i, timer ) {
                                                        var node = timer.elem;
                                                        mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' +
-                                                               mw.html.element( node.nodeName.toLowerCase(), $(node).getAttrs() )
+                                                               mw.html.element( node.nodeName.toLowerCase(), $( node ).getAttrs() )
                                                        );
                                                } );
                                                // Force animations to stop to give the next test a clean start
                                        }
 
                                        // Test should use fake XHR, wait for requests, or call abort()
-                                       if ( $.active !== undefined && $.active !== 0 ) {
-                                               active = $.grep( ajaxRequests, function ( ajax ) {
+                                       $activeLen = $.active;
+                                       if ( $activeLen !== undefined && $activeLen !== 0 ) {
+                                               pending = $.grep( ajaxRequests, function ( ajax ) {
                                                        return ajax.xhr.state() === 'pending';
                                                } );
-                                               if ( active.length !== $.active ) {
+                                               if ( pending.length !== $activeLen ) {
                                                        mw.log.warn( 'Pending requests does not match jQuery.active count' );
                                                }
                                                // Force requests to stop to give the next test a clean start
-                                               $.each( active, function ( i, ajax ) {
-                                                       mw.log.warn( 'Unfinished AJAX request #' + i, ajax.options );
+                                               $.each( pending, function ( i, ajax ) {
+                                                       mw.log.warn( 'Pending AJAX request #' + i, ajax.options );
                                                        ajax.xhr.abort();
                                                } );
                                                ajaxRequests = [];
 
-                                               throw new Error( 'Unfinished AJAX requests: ' + active.length );
+                                               throw new Error( 'Pending AJAX requests: ' + pending.length + ' (active: ' + $activeLen + ')' );
                                        }
                                }
                        };
        function getDomStructure( node ) {
                var $node, children, processedChildren, i, len, el;
                $node = $( node );
-               if ( node.nodeType === ELEMENT_NODE ) {
+               if ( node.nodeType === Node.ELEMENT_NODE ) {
                        children = $node.contents();
                        processedChildren = [];
                        for ( i = 0, len = children.length; i < len; i++ ) {
-                               el = children[i];
-                               if ( el.nodeType === ELEMENT_NODE || el.nodeType === TEXT_NODE ) {
+                               el = children[ i ];
+                               if ( el.nodeType === Node.ELEMENT_NODE || el.nodeType === Node.TEXT_NODE ) {
                                        processedChildren.push( getDomStructure( el ) );
                                }
                        }
         * @param {string} html HTML markup for one or more nodes.
         */
        function getHtmlStructure( html ) {
-               var el = $( '<div>' ).append( html )[0];
+               var el = $( '<div>' ).append( html )[ 0 ];
                return getDomStructure( el );
        }
 
                        missing = [];
 
                for ( i = 0, len = modules.length; i < len; i++ ) {
-                       state = mw.loader.getState( modules[i] );
+                       state = mw.loader.getState( modules[ i ] );
                        if ( state === 'error' ) {
-                               error.push( modules[i] );
+                               error.push( modules[ i ] );
                        } else if ( state === 'missing' ) {
-                               missing.push( modules[i] );
+                               missing.push( modules[ i ] );
                        }
                }
 
index 4484467..cf34fc1 100644 (file)
@@ -1,7 +1,7 @@
 ( function ( $ ) {
        QUnit.module( 'jquery.accessKeyLabel', QUnit.newMwEnvironment( {
                messages: {
-                       'brackets': '[$1]',
+                       brackets: '[$1]',
                        'word-separator': ' '
                }
        } ) );
@@ -9,23 +9,23 @@
        var getAccessKeyPrefixTestData = [
                        // ua string, platform string, expected prefix
                        // Internet Explorer
-                       ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-'],
+                       [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ],
                        // Firefox
-                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-'],
-                       ['Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-'],
-                       ['Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-'],
+                       [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ],
+                       [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ],
+                       [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ],
                        // Safari / Konqueror
-                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-'],
-                       ['Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-'],
-                       ['Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-'],
+                       [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-' ],
+                       [ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-' ],
+                       [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ],
                        // Opera
-                       ['Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-'],
-                       ['Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'shift-esc-'],
+                       [ 'Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-' ],
+                       [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'shift-esc-' ],
                        // Chrome
-                       ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-'],
-                       ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-']
+                       [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-' ],
+                       [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ]
                ],
                // strings appended to title to make sure updateTooltipAccessKeys handles them correctly
                updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
@@ -39,9 +39,9 @@
                var i;
                for ( i = 0; i < getAccessKeyPrefixTestData.length; i++ ) {
                        assert.equal( $.fn.updateTooltipAccessKeys.getAccessKeyPrefix( {
-                               userAgent: getAccessKeyPrefixTestData[i][0],
-                               platform: getAccessKeyPrefixTestData[i][1]
-                       } ), getAccessKeyPrefixTestData[i][2], 'Correct prefix for ' + getAccessKeyPrefixTestData[i][0] );
+                               userAgent: getAccessKeyPrefixTestData[ i ][ 0 ],
+                               platform: getAccessKeyPrefixTestData[ i ][ 1 ]
+                       } ), getAccessKeyPrefixTestData[ i ][ 2 ], 'Correct prefix for ' + getAccessKeyPrefixTestData[ i ][ 0 ] );
                }
        } );
 
                        // (no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
                        result = /^Title \[(.+)[aA]\]$/.exec( title );
                assert.ok( result, 'title should match expected structure.' );
-               assert.notEqual( result[1], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
+               assert.notEqual( result[ 1 ], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
        } );
 
        QUnit.test( 'updateTooltipAccessKeys - no access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
                var i, oldTitle, $input, newTitle;
                for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
-                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
                        $input = $( makeInput( oldTitle ) );
                        $( '#qunit-fixture' ).append( $input );
                        newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
@@ -70,7 +70,7 @@
                $.fn.updateTooltipAccessKeys.setTestMode( true );
                var i, oldTitle, $input, newTitle;
                for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
-                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[ i ];
                        $input = $( makeInput( oldTitle, 'a' ) );
                        $( '#qunit-fixture' ).append( $input );
                        newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
index e8c5121..a1b2e5c 100644 (file)
@@ -11,7 +11,7 @@
 
        function findDivergenceIndex( a, b ) {
                var i = 0;
-               while ( i < a.length && i < b.length && a[i] === b[i] ) {
+               while ( i < a.length && i < b.length && a[ i ] === b[ i ] ) {
                        i++;
                }
                return i;
@@ -41,7 +41,7 @@
                // Add two characters using scary black magic
                spanText = $span.text();
                d = findDivergenceIndex( origText, spanText );
-               spanTextNew = spanText.slice( 0, d ) + origText[d] + origText[d] + '...';
+               spanTextNew = spanText.slice( 0, d ) + origText[ d ] + origText[ d ] + '...';
 
                assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
 
index c8e8ac7..9afd793 100644 (file)
@@ -10,7 +10,7 @@
 
                $canvas.animate( { backgroundColor: '#000' }, 10 ).promise().then( function () {
                        var endColors = $.colorUtil.getRGB( $canvas.css( 'background-color' ) );
-                       assert.deepEqual( endColors, [0, 0, 0], 'end state' );
+                       assert.deepEqual( endColors, [ 0, 0, 0 ], 'end state' );
                } );
 
                this.clock.tick( 20 );
index 39ae363..00de895 100644 (file)
@@ -4,25 +4,25 @@
        QUnit.test( 'getRGB', 18, function ( assert ) {
                assert.strictEqual( $.colorUtil.getRGB(), undefined, 'No arguments' );
                assert.strictEqual( $.colorUtil.getRGB( '' ), undefined, 'Empty string' );
-               assert.deepEqual( $.colorUtil.getRGB( [0, 100, 255] ), [0, 100, 255], 'Parse array of rgb values' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [0, 100, 255], 'Parse simple rgb string' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [0, 100, 255], 'Parse simple rgb string with spaces' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [0, 51, 102], 'Parse rgb string with percentages' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [0, 51, 102], 'Parse rgb string with percentages and spaces' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [242, 221, 238], 'Hex string: 6 char lowercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [242, 221, 238], 'Hex string: 6 char uppercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [242, 221, 238], 'Hex string: 6 char mixed' );
-               assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [238, 238, 238], 'Hex string: 3 char lowercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [238, 238, 238], 'Hex string: 3 char uppercase' );
-               assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [238, 238, 238], 'Hex string: 3 char mixed' );
-               assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [255, 255, 255], 'Zero rgba for Safari 3; Transparent (whitespace)' );
+               assert.deepEqual( $.colorUtil.getRGB( [ 0, 100, 255 ] ), [ 0, 100, 255 ], 'Parse array of rgb values' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0,100,255)' ), [ 0, 100, 255 ], 'Parse simple rgb string' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0, 100, 255)' ), [ 0, 100, 255 ], 'Parse simple rgb string with spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%,20%,40%)' ), [ 0, 51, 102 ], 'Parse rgb string with percentages' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgb(0%, 20%, 40%)' ), [ 0, 51, 102 ], 'Parse rgb string with percentages and spaces' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2ddee' ), [ 242, 221, 238 ], 'Hex string: 6 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DDEE' ), [ 242, 221, 238 ], 'Hex string: 6 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#f2DdEe' ), [ 242, 221, 238 ], 'Hex string: 6 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eee' ), [ 238, 238, 238 ], 'Hex string: 3 char lowercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#EEE' ), [ 238, 238, 238 ], 'Hex string: 3 char uppercase' );
+               assert.deepEqual( $.colorUtil.getRGB( '#eEe' ), [ 238, 238, 238 ], 'Hex string: 3 char mixed' );
+               assert.deepEqual( $.colorUtil.getRGB( 'rgba(0, 0, 0, 0)' ), [ 255, 255, 255 ], 'Zero rgba for Safari 3; Transparent (whitespace)' );
 
                // Perhaps this is a bug in colorUtil, but it is the current behavior so, let's keep
                // track of it, so we will know in case it would ever change.
                assert.strictEqual( $.colorUtil.getRGB( 'rgba(0,0,0,0)' ), undefined, 'Zero rgba without whitespace' );
 
-               assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [144, 238, 144], 'Color names (lightGreen)' );
-               assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [255, 255, 255], 'Color names (transparent)' );
+               assert.deepEqual( $.colorUtil.getRGB( 'lightGreen' ), [ 144, 238, 144 ], 'Color names (lightGreen)' );
+               assert.deepEqual( $.colorUtil.getRGB( 'transparent' ), [ 255, 255, 255 ], 'Color names (transparent)' );
                assert.strictEqual( $.colorUtil.getRGB( 'mediaWiki' ), undefined, 'Inexisting color name' );
        } );
 
@@ -37,9 +37,9 @@
 
                // Re-create the rgbToHsl return array items, limited to two decimals.
                hsl = $.colorUtil.rgbToHsl( 144, 238, 144 );
-               ret = [ dualDecimals( hsl[0] ), dualDecimals( hsl[1] ), dualDecimals( hsl[2] ) ];
+               ret = [ dualDecimals( hsl[ 0 ] ), dualDecimals( hsl[ 1 ] ), dualDecimals( hsl[ 2 ] ) ];
 
-               assert.deepEqual( ret, [0.33, 0.73, 0.75], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
+               assert.deepEqual( ret, [ 0.33, 0.73, 0.75 ], 'rgb(144, 238, 144): hsl(0.33, 0.73, 0.75)' );
        } );
 
        QUnit.test( 'hslToRgb', 1, function ( assert ) {
@@ -47,9 +47,9 @@
                rgb = $.colorUtil.hslToRgb( 0.3, 0.7, 0.8 );
 
                // Re-create the hslToRgb return array items, rounded to whole numbers.
-               ret = [ Math.round( rgb[0] ), Math.round( rgb[1] ), Math.round( rgb[2] ) ];
+               ret = [ Math.round( rgb[ 0 ] ), Math.round( rgb[ 1 ] ), Math.round( rgb[ 2 ] ) ];
 
-               assert.deepEqual( ret, [183, 240, 168], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
+               assert.deepEqual( ret, [ 183, 240, 168 ], 'hsl(0.3, 0.7, 0.8): rgb(183, 240, 168)' );
        } );
 
        QUnit.test( 'getColorBrightness', 2, function ( assert ) {
index 906369e..8c62876 100644 (file)
@@ -6,6 +6,22 @@
                assert.equal( typeof devicePixelRatio, 'number', '$.devicePixelRatio() returns a number' );
        } );
 
+       QUnit.test( 'bracketedDevicePixelRatio', 1, function ( assert ) {
+               var devicePixelRatio = $.devicePixelRatio();
+               assert.equal( typeof devicePixelRatio, 'number', '$.bracketedDevicePixelRatio() returns a number' );
+       } );
+
+       QUnit.test( 'bracketDevicePixelRatio', 8, function ( assert ) {
+               assert.equal( $.bracketDevicePixelRatio( 0.75 ), 1, '0.75 gives 1' );
+               assert.equal( $.bracketDevicePixelRatio( 1 ), 1, '1 gives 1' );
+               assert.equal( $.bracketDevicePixelRatio( 1.25 ), 1.5, '1.25 gives 1.5' );
+               assert.equal( $.bracketDevicePixelRatio( 1.5 ), 1.5, '1.5 gives 1.5' );
+               assert.equal( $.bracketDevicePixelRatio( 1.75 ), 2, '1.75 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 2 ), 2, '2 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 2.5 ), 2, '2.5 gives 2' );
+               assert.equal( $.bracketDevicePixelRatio( 3 ), 2, '3 gives 2' );
+       } );
+
        QUnit.test( 'matchSrcSet', 6, function ( assert ) {
                var srcset = 'onefive.png 1.5x, two.png 2x';
 
index 3ef2790..c503fc9 100644 (file)
@@ -76,8 +76,8 @@
                html = '<div><span title-msg="title"><html:msg key="label" /></span></div>';
                $lc = $( html ).localize( {
                        keys: {
-                               'title': 'foo-' + x + '-title',
-                               'label': 'foo-' + x + '-label'
+                               title: 'foo-' + x + '-title',
+                               label: 'foo-' + x + '-label'
                        }
                } ).find( 'span' );
 
@@ -88,7 +88,7 @@
                html = '<div><span><html:msg key="foo-welcome" /></span></div>';
                $lc = $( html ).localize( {
                        params: {
-                               'foo-welcome': [sitename, 'yesterday']
+                               'foo-welcome': [ sitename, 'yesterday' ]
                        }
                } ).find( 'span' );
 
                $lc = $( html ).localize( {
                        prefix: 'foo-',
                        keys: {
-                               'title': x + '-title',
-                               'label': x + '-label'
+                               title: x + '-title',
+                               label: x + '-label'
                        },
                        params: {
-                               'title': [sitename, '3 minutes ago'],
-                               'label': [sitename, '3 minutes ago']
+                               title: [ sitename, '3 minutes ago' ],
+                               label: [ sitename, '3 minutes ago' ]
 
                        }
                } ).find( 'span' );
index 8040581..c51e409 100644 (file)
                this.clock.tick( 500 );
        } );
 
+       QUnit.test( 'cloned collapsibles can be made collapsible again', 2, function ( assert ) {
+               var test = this,
+                       $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' + loremIpsum + '</div>'
+                       ),
+                       $clone = $collapsible.clone() // clone without data and events
+                               .appendTo( '#qunit-fixture' ).makeCollapsible(),
+                       $content = $clone.find( '.mw-collapsible-content' );
+
+               assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
+
+               $clone.on( 'afterCollapse.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
+               } );
+
+               $clone.find( '.mw-collapsible-toggle a' ).trigger( 'click' );
+               test.clock.tick( 500 );
+       } );
 }( mediaWiki, jQuery ) );
index 911e9d0..029edd5 100644 (file)
@@ -8,7 +8,7 @@
                teardown: function () {
                        this.restoreWarnings();
                }
-       }) );
+       } ) );
 
        QUnit.test( 'String functions', 7, function ( assert ) {
                assert.equal( $.trimLeft( '  foo bar  ' ), 'foo bar  ', 'trimLeft' );
@@ -52,9 +52,9 @@
        } );
 
        QUnit.test( 'Comparison functions', 5, function ( assert ) {
-               assert.ok( $.compareArray( [0, 'a', [], [2, 'b'] ], [0, 'a', [], [2, 'b'] ] ),
+               assert.ok( $.compareArray( [ 0, 'a', [], [ 2, 'b' ] ], [ 0, 'a', [], [ 2, 'b' ] ] ),
                        'compareArray: Two deep arrays that are excactly the same' );
-               assert.ok( !$.compareArray( [1], [2] ), 'compareArray: Two different arrays (false)' );
+               assert.ok( !$.compareArray( [ 1 ], [ 2 ] ), 'compareArray: Two different arrays (false)' );
 
                assert.ok( $.compareObject( {}, {} ), 'compareObject: Two empty objects' );
                assert.ok( $.compareObject( { foo: 1 }, { foo: 1 } ), 'compareObject: Two the same objects' );
index 78c185f..5d0ddeb 100644 (file)
@@ -1,13 +1,13 @@
-( function ($) {
+( function ( $ ) {
 
-       QUnit.module('jquery.placeholder', QUnit.newMwEnvironment());
+       QUnit.module( 'jquery.placeholder', QUnit.newMwEnvironment() );
 
-       QUnit.test('caches results of feature tests', 2, function (assert) {
-               assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input');
-               assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea');
-       });
+       QUnit.test( 'caches results of feature tests', 2, function ( assert ) {
+               assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input' );
+               assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea' );
+       } );
 
-       if ($.fn.placeholder.input && $.fn.placeholder.textarea) {
+       if ( $.fn.placeholder.input && $.fn.placeholder.textarea ) {
                return;
        }
 
                        '<input id="input-type-password" type="password" placeholder="e.g. hunter2">' +
                        '<textarea id="textarea" name="message" placeholder="Your message goes here"></textarea>' +
                '</form>',
-       testElement = function ($el, assert) {
+       testElement = function ( $el, assert ) {
 
-               var el = $el[0],
-                       placeholder = el.getAttribute('placeholder');
+               var el = $el[ 0 ],
+                       placeholder = el.getAttribute( 'placeholder' );
 
-               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+               assert.strictEqual( $el.placeholder(), $el, 'should be chainable' );
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // test on focus
                $el.focus();
-               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+               assert.strictEqual( el.value, '', '`value` should be the empty string on focus' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( !$el.hasClass( 'placeholder' ), 'should not have `placeholder` class on focus' );
 
                // and unfocus (blur) again
                $el.blur();
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // change the value
-               $el.val('lorem ipsum');
-               assert.strictEqual($el.prop('value'), 'lorem ipsum', '`$el.val(string)` should change the `value` property');
-               assert.strictEqual(el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute');
-               assert.ok(!$el.hasClass('placeholder'), '`$el.val(string)` should remove `placeholder` class');
+               $el.val( 'lorem ipsum' );
+               assert.strictEqual( $el.prop( 'value' ), 'lorem ipsum', '`$el.val(string)` should change the `value` property' );
+               assert.strictEqual( el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute' );
+               assert.ok( !$el.hasClass( 'placeholder' ), '`$el.val(string)` should remove `placeholder` class' );
 
                // and clear it again
-               $el.val('');
-               assert.strictEqual($el.prop('value'), '', '`$el.val("")` should change the `value` property');
-               assert.strictEqual(el.value, placeholder, '`$el.val("")` should change the `value` attribute');
-               assert.ok($el.hasClass('placeholder'), '`$el.val("")` should re-enable `placeholder` class');
+               $el.val( '' );
+               assert.strictEqual( $el.prop( 'value' ), '', '`$el.val("")` should change the `value` property' );
+               assert.strictEqual( el.value, placeholder, '`$el.val("")` should change the `value` attribute' );
+               assert.ok( $el.hasClass( 'placeholder' ), '`$el.val("")` should re-enable `placeholder` class' );
 
                // make sure the placeholder property works as expected.
-               assert.strictEqual($el.prop('placeholder'), placeholder, '$el.prop(`placeholder`) should return the placeholder value');
-               $el.placeholder('new placeholder');
-               assert.strictEqual(el.getAttribute('placeholder'), 'new placeholder', '$el.placeholder(<string>) should set the placeholder value');
-               assert.strictEqual(el.value, 'new placeholder', '$el.placeholder(<string>) should update the displayed placeholder value');
-               $el.placeholder(placeholder);
+               assert.strictEqual( $el.prop( 'placeholder' ), placeholder, '$el.prop(`placeholder`) should return the placeholder value' );
+               $el.placeholder( 'new placeholder' );
+               assert.strictEqual( el.getAttribute( 'placeholder' ), 'new placeholder', '$el.placeholder(<string>) should set the placeholder value' );
+               assert.strictEqual( el.value, 'new placeholder', '$el.placeholder(<string>) should update the displayed placeholder value' );
+               $el.placeholder( placeholder );
        };
 
-       QUnit.test('emulates placeholder for <input type=text>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-text'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=text>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-text' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=search>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-search'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=search>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-search' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=email>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-email'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=email>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-email' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=url>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-url'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=url>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-url' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=tel>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#input-type-tel'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <input type=tel>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#input-type-tel' ), assert );
+       } );
 
-       QUnit.test('emulates placeholder for <input type=password>', 13, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
+       QUnit.test( 'emulates placeholder for <input type=password>', 13, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
 
                var selector = '#input-type-password',
-                       $el = $(selector),
-                       el = $el[0],
-                       placeholder = el.getAttribute('placeholder');
+                       $el = $( selector ),
+                       el = $el[ 0 ],
+                       placeholder = el.getAttribute( 'placeholder' );
 
-               assert.strictEqual($el.placeholder(), $el, 'should be chainable');
+               assert.strictEqual( $el.placeholder(), $el, 'should be chainable' );
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
                // test on focus
                $el.focus();
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, '', '`value` should be the empty string on focus');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus');
+               assert.strictEqual( el.value, '', '`value` should be the empty string on focus' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( !$el.hasClass( 'placeholder' ), 'should not have `placeholder` class on focus' );
 
                // and unfocus (blur) again
                $el.blur();
 
                // Re-select the element, as it gets replaced by another one in some browsers
-               $el = $(selector);
-               el = $el[0];
+               $el = $( selector );
+               el = $el[ 0 ];
 
-               assert.strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`');
-               assert.strictEqual($el.prop('value'), '', 'propHooks works properly');
-               assert.strictEqual($el.val(), '', 'valHooks works properly');
-               assert.ok($el.hasClass('placeholder'), 'should have `placeholder` class');
+               assert.strictEqual( el.value, placeholder, 'should set `placeholder` text as `value`' );
+               assert.strictEqual( $el.prop( 'value' ), '', 'propHooks works properly' );
+               assert.strictEqual( $el.val(), '', 'valHooks works properly' );
+               assert.ok( $el.hasClass( 'placeholder' ), 'should have `placeholder` class' );
 
-       });
+       } );
 
-       QUnit.test('emulates placeholder for <textarea></textarea>', 22, function (assert) {
-               $('<div>').html(html).appendTo($('#qunit-fixture'));
-               testElement($('#textarea'), assert);
-       });
+       QUnit.test( 'emulates placeholder for <textarea></textarea>', 22, function ( assert ) {
+               $( '<div>' ).html( html ).appendTo( $( '#qunit-fixture' ) );
+               testElement( $( '#textarea' ), assert );
+       } );
 
-}(jQuery));
+}( jQuery ) );
index 00d4a08..032551d 100644 (file)
                setup: function () {
                        this.liveMonths = mw.language.months;
                        mw.language.months = {
-                               'keys': {
-                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
-                                               'july', 'august', 'september', 'october', 'november', 'december'],
-                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
-                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
-                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               keys: {
+                                       names: [ 'january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december' ],
+                                       genitive: [ 'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen' ],
+                                       abbrev: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
                                },
-                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                               names: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
                        };
                },
                teardown: function () {
@@ -36,8 +36,8 @@
                        /* default date format of the content language */
                        wgDefaultDateFormat: 'dmy',
                        /* These two are important for numeric interpretations */
-                       wgSeparatorTransformTable: ['', ''],
-                       wgDigitTransformTable: ['', '']
+                       wgSeparatorTransformTable: [ '', '' ],
+                       wgDigitTransformTable: [ '', '' ]
                }
        } ) );
 
                QUnit.test( msg, data.length * 2, function ( assert ) {
                        var extractedR, extractedF, parser;
 
-                       if (callback !== undefined ) {
+                       if ( callback !== undefined ) {
                                callback();
                        }
 
                        parser = $.tablesorter.getParser( parserId );
                        $.each( data, function ( index, testcase ) {
-                               extractedR = parser.is( testcase[0] );
-                               extractedF = parser.format( testcase[0] );
+                               extractedR = parser.is( testcase[ 0 ] );
+                               extractedF = parser.format( testcase[ 0 ] );
 
-                               assert.strictEqual( extractedR, testcase[1], 'Detect: ' + testcase[3] );
-                               assert.strictEqual( extractedF, testcase[2], 'Sortkey: ' + testcase[3] );
+                               assert.strictEqual( extractedR, testcase[ 1 ], 'Detect: ' + testcase[ 3 ] );
+                               assert.strictEqual( extractedF, testcase[ 2 ], 'Sortkey: ' + testcase[ 3 ] );
                        } );
 
                } );
 
        ipv4 = [
                // Some randomly generated fake IPs
-               ['0.0.0.0', true, 0, 'An IP address' ],
-               ['255.255.255.255', true, 255255255255, 'An IP address' ],
-               ['45.238.27.109', true, 45238027109, 'An IP address' ],
-               ['1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
-               ['238.27.1', false, 238027001, 'A malformed IP Address' ],
-               ['1', false, 1, 'A super malformed IP Address' ],
-               ['Just text', false, 0, 'A line with just text' ],
-               ['45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
-               ['45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
+               [ '0.0.0.0', true, 0, 'An IP address' ],
+               [ '255.255.255.255', true, 255255255255, 'An IP address' ],
+               [ '45.238.27.109', true, 45238027109, 'An IP address' ],
+               [ '1.238.27.1', true, 1238027001, 'An IP address with small numbers' ],
+               [ '238.27.1', false, 238027001, 'A malformed IP Address' ],
+               [ '1', false, 1, 'A super malformed IP Address' ],
+               [ 'Just text', false, 0, 'A line with just text' ],
+               [ '45.238.27.109Postfix', false, 45238027109, 'An IP address with a connected postfix' ],
+               [ '45.238.27.109 postfix', false, 45238027109, 'An IP address with a seperated postfix' ]
        ];
        parserTest( 'IPv4', 'IPAddress', ipv4 );
 
        simpleMDYDatesInMDY = [
-               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
-               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
-               ['1/17/2010',           true, 20100117, 'Numeric middle endian date'],
-               ['01/17/2010',          true, 20100117, 'Numeric middle endian date with padding on month'],
-               ['01/07/2010',          true, 20100107, 'Numeric middle endian date with padding on day'],
-               ['01/07/0010',          true, 20100107, 'Numeric middle endian date with padding on year'],
-               ['5.12.1990',           true, 19900512, 'Numeric middle endian date with . separator']
+               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010',          true, 20100117, 'Numeric middle endian date' ],
+               [ '01/17/2010',         true, 20100117, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010',         true, 20100107, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010',         true, 20100107, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990',          true, 19900512, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using mdy content language', 'date', simpleMDYDatesInMDY );
 
        simpleMDYDatesInDMY = [
-               ['January 17, 2010',    true, 20100117, 'Long middle endian date'],
-               ['Jan 17, 2010',        true, 20100117, 'Short middle endian date'],
-               ['1/17/2010',           true, 20101701, 'Numeric middle endian date'],
-               ['01/17/2010',          true, 20101701, 'Numeric middle endian date with padding on month'],
-               ['01/07/2010',          true, 20100701, 'Numeric middle endian date with padding on day'],
-               ['01/07/0010',          true, 20100701, 'Numeric middle endian date with padding on year'],
-               ['5.12.1990',           true, 19901205, 'Numeric middle endian date with . separator']
+               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010',          true, 20101701, 'Numeric middle endian date' ],
+               [ '01/17/2010',         true, 20101701, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010',         true, 20100701, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010',         true, 20100701, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990',          true, 19901205, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
                mw.config.set( {
-                       'wgDefaultDateFormat': 'dmy',
-                       'wgPageContentLanguage': 'de'
+                       wgDefaultDateFormat: 'dmy',
+                       wgPageContentLanguage: 'de'
                } );
        } );
 
        oldMDYDates = [
-               ['January 19, 1400 BC',         false, '99999999', 'BC'],
-               ['January 19, 1400BC',          false, '99999999', 'Connected BC'],
-               ['January, 19 1400 B.C.',       false, '99999999', 'B.C.'],
-               ['January 19, 1400 AD',         false, '99999999', 'AD'],
-               ['January, 19 10',                      true, 20100119, 'AD'],
-               ['January, 19 1',                       false, '99999999', 'AD']
+               [ 'January 19, 1400 BC',                false, '99999999', 'BC' ],
+               [ 'January 19, 1400BC',         false, '99999999', 'Connected BC' ],
+               [ 'January, 19 1400 B.C.',      false, '99999999', 'B.C.' ],
+               [ 'January 19, 1400 AD',                false, '99999999', 'AD' ],
+               [ 'January, 19 10',                     true, 20100119, 'AD' ],
+               [ 'January, 19 1',                      false, '99999999', 'AD' ]
        ];
        parserTest( 'Very old MDY dates', 'date', oldMDYDates );
 
        complexMDYDates = [
-               ['January, 19 2010',    true, 20100119, 'Comma after month'],
-               ['January 19, 2010',    true, 20100119, 'Comma after day'],
-               ['January/19/2010',             true, 20100119, 'Forward slash separator'],
-               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
-               ['April 21 1991',               true, 19910421, 'Space separation'],
-               ['04 22 1991',                  true, 19910422, 'Month with 0 padding'],
-               ['December 12 \'10',    true, 20101212, ''],
-               ['Dec 12 \'10',                 true, 20101212, ''],
-               ['Dec. 12 \'10',                true, 20101212, '']
+               [ 'January, 19 2010',   true, 20100119, 'Comma after month' ],
+               [ 'January 19, 2010',   true, 20100119, 'Comma after day' ],
+               [ 'January/19/2010',            true, 20100119, 'Forward slash separator' ],
+               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
+               [ 'April 21 1991',              true, 19910421, 'Space separation' ],
+               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
+               [ 'December 12 \'10',   true, 20101212, '' ],
+               [ 'Dec 12 \'10',                        true, 20101212, '' ],
+               [ 'Dec. 12 \'10',               true, 20101212, '' ]
        ];
        parserTest( 'MDY Dates', 'date', complexMDYDates );
 
        clobberedDates = [
-               ['January, 19 2010 - January, 20 2010', false, '99999999', 'Date range with hyphen'],
-               ['January, 19 2010 — January, 20 2010',       false, '99999999', 'Date range with mdash'],
-               ['prefixJanuary, 19 2010',      false, '99999999', 'Connected prefix'],
-               ['prefix January, 19 2010',     false, '99999999', 'Prefix'],
-               ['December 12 2010postfix',     false, '99999999', 'ConnectedPostfix'],
-               ['December 12 2010 postfix',    false, '99999999', 'Postfix'],
-               ['A simple text',               false, '99999999', 'Plain text in date sort'],
-               ['04l22l1991',                  false, '99999999', 'l char as separator'],
-               ['January\\19\\2010',   false, '99999999', 'backslash as date separator']
+               [ 'January, 19 2010 - January, 20 2010',        false, '99999999', 'Date range with hyphen' ],
+               [ 'January, 19 2010 — January, 20 2010',      false, '99999999', 'Date range with mdash' ],
+               [ 'prefixJanuary, 19 2010',     false, '99999999', 'Connected prefix' ],
+               [ 'prefix January, 19 2010',    false, '99999999', 'Prefix' ],
+               [ 'December 12 2010postfix',    false, '99999999', 'ConnectedPostfix' ],
+               [ 'December 12 2010 postfix',   false, '99999999', 'Postfix' ],
+               [ 'A simple text',              false, '99999999', 'Plain text in date sort' ],
+               [ '04l22l1991',                 false, '99999999', 'l char as separator' ],
+               [ 'January\\19\\2010',  false, '99999999', 'backslash as date separator' ]
        ];
        parserTest( 'Clobbered Dates', 'date', clobberedDates );
 
        MYDates = [
-               ['December 2010',       false, '99999999', 'Plain month year'],
-               ['Dec 2010',            false, '99999999', 'Abreviated month year'],
-               ['12 2010',                     false, '99999999', 'Numeric month year']
+               [ 'December 2010',      false, '99999999', 'Plain month year' ],
+               [ 'Dec 2010',           false, '99999999', 'Abreviated month year' ],
+               [ '12 2010',                    false, '99999999', 'Numeric month year' ]
        ];
        parserTest( 'MY Dates', 'date', MYDates );
 
        YDates = [
-               ['2010',        false, '99999999', 'Plain 4-digit year'],
-               ['876',         false, '99999999', '3-digit year'],
-               ['76',          false, '99999999', '2-digit year'],
-               ['\'76',        false, '99999999', '2-digit millenium bug year'],
-               ['2010 BC',     false, '99999999', '4-digit year BC']
+               [ '2010',       false, '99999999', 'Plain 4-digit year' ],
+               [ '876',                false, '99999999', '3-digit year' ],
+               [ '76',         false, '99999999', '2-digit year' ],
+               [ '\'76',       false, '99999999', '2-digit millenium bug year' ],
+               [ '2010 BC',    false, '99999999', '4-digit year BC' ]
        ];
        parserTest( 'Y Dates', 'date', YDates );
 
        currencyData = [
-               ['1.02 $',      true, 1.02, ''],
-               ['$ 3.00',      true, 3, ''],
-               ['€ 2,99',    true, 299, ''],
-               ['$ 1.00',      true, 1, ''],
-               ['$3.50',       true, 3.50, ''],
-               ['$ 1.50',      true, 1.50, ''],
-               ['€ 0.99',    true, 0.99, ''],
-               ['$ 299.99',    true, 299.99, ''],
-               ['$ 2,299.99',  true, 2299.99, ''],
-               ['$ 2,989',     true, 2989, ''],
-               ['$ 2 299.99',  true, 2299.99, ''],
-               ['$ 2 989',     true, 2989, ''],
-               ['$ 2.989',     true, 2.989, '']
+               [ '1.02 $',     true, 1.02, '' ],
+               [ '$ 3.00',     true, 3, '' ],
+               [ '€ 2,99',   true, 299, '' ],
+               [ '$ 1.00',     true, 1, '' ],
+               [ '$3.50',      true, 3.50, '' ],
+               [ '$ 1.50',     true, 1.50, '' ],
+               [ '€ 0.99',   true, 0.99, '' ],
+               [ '$ 299.99',   true, 299.99, '' ],
+               [ '$ 2,299.99', true, 2299.99, '' ],
+               [ '$ 2,989',    true, 2989, '' ],
+               [ '$ 2 299.99', true, 2299.99, '' ],
+               [ '$ 2 989',    true, 2989, '' ],
+               [ '$ 2.989',    true, 2.989, '' ]
        ];
        parserTest( 'Currency', 'currency', currencyData );
 
        transformedCurrencyData = [
-               ['1.02 $',      true, 102, ''],
-               ['$ 3.00',      true, 300, ''],
-               ['€ 2,99',    true, 2.99, ''],
-               ['$ 1.00',      true, 100, ''],
-               ['$3.50',       true, 350, ''],
-               ['$ 1.50',      true, 150, ''],
-               ['€ 0.99',    true, 99, ''],
-               ['$ 299.99',    true, 29999, ''],
-               ['$ 2\'299,99', true, 2299.99, ''],
-               ['$ 2,989',     true, 2.989, ''],
-               ['$ 2 299.99',  true, 229999, ''],
-               ['2 989 $',     true, 2989, ''],
-               ['299.99 $',    true, 29999, ''],
-               ['2\'299,99 $', true, 2299.99, ''],
-               ['2,989 $',     true, 2.989, ''],
-               ['2 299.99 $',  true, 229999, ''],
-               ['2 989 $',     true, 2989, '']
+               [ '1.02 $',     true, 102, '' ],
+               [ '$ 3.00',     true, 300, '' ],
+               [ '€ 2,99',   true, 2.99, '' ],
+               [ '$ 1.00',     true, 100, '' ],
+               [ '$3.50',      true, 350, '' ],
+               [ '$ 1.50',     true, 150, '' ],
+               [ '€ 0.99',   true, 99, '' ],
+               [ '$ 299.99',   true, 29999, '' ],
+               [ '$ 2\'299,99',        true, 2299.99, '' ],
+               [ '$ 2,989',    true, 2.989, '' ],
+               [ '$ 2 299.99', true, 229999, '' ],
+               [ '2 989 $',    true, 2989, '' ],
+               [ '299.99 $',   true, 29999, '' ],
+               [ '2\'299,99 $',        true, 2299.99, '' ],
+               [ '2,989 $',    true, 2.989, '' ],
+               [ '2 299.99 $', true, 229999, '' ],
+               [ '2 989 $',    true, 2989, '' ]
        ];
        parserTest( 'Currency with european separators', 'currency', transformedCurrencyData, function () {
                mw.config.set( {
                        // We expect 22'234.444,22
                        // Map from ascii separators => localized separators
-                       wgSeparatorTransformTable: [',  .       ,', '\' ,       .'],
-                       wgDigitTransformTable: ['', '']
+                       wgSeparatorTransformTable: [ ', .       ,', '\' ,       .' ],
+                       wgDigitTransformTable: [ '', '' ]
                } );
        } );
 
index acd98a6..d4d0ce1 100644 (file)
@@ -1,5 +1,19 @@
 ( function ( $, mw ) {
-       var header,
+       var header = [ 'Planet', 'Radius (km)' ],
+
+               // Data set "planets"
+               mercury = [ 'Mercury', '2439.7' ],
+               venus = [ 'Venus', '6051.8' ],
+               earth = [ 'Earth', '6371.0' ],
+               mars = [ 'Mars', '3390.0' ],
+               jupiter = [ 'Jupiter', '69911' ],
+               saturn = [ 'Saturn', '58232' ],
+               planets = [ mercury, venus, earth, mars, jupiter, saturn ],
+               planetsAscName = [ earth, jupiter, mars, mercury, saturn, venus ],
+               planetsAscRadius = [ mercury, mars, venus, earth, saturn, jupiter ],
+               planetsRowspan,
+               planetsRowspanII,
+               planetsAscNameLegacy,
 
                // Data set "simple"
                a1 = [ 'A', '1' ],
                b1 = [ 'B', '1' ],
                b2 = [ 'B', '2' ],
                b3 = [ 'B', '3' ],
-               simple = [a2, b3, a1, a3, b2, b1],
-               simpleAsc = [a1, a2, a3, b1, b2, b3],
-               simpleDescasc = [b1, b2, b3, a1, a2, a3],
+               simple = [ a2, b3, a1, a3, b2, b1 ],
+               simpleAsc = [ a1, a2, a3, b1, b2, b3 ],
+               simpleDescasc = [ b1, b2, b3, a1, a2, a3 ],
 
                // Data set "colspan"
+               header4 = [ 'column1a', 'column1b', 'column1c', 'column2' ],
                aaa1 = [ 'A', 'A', 'A', '1' ],
                aab5 = [ 'A', 'A', 'B', '5' ],
                abc3 = [ 'A', 'B', 'C', '3' ],
                caa4 = [ 'C', 'A', 'A', '4' ],
                colspanInitial = [ aab5, aaa1, abc3, bbc2, caa4 ],
 
-               // Data set "planets"
-               mercury = [ 'Mercury', '2439.7' ],
-               venus = [ 'Venus', '6051.8' ],
-               earth = [ 'Earth', '6371.0' ],
-               mars = [ 'Mars', '3390.0' ],
-               jupiter = [ 'Jupiter', '69911' ],
-               saturn = [ 'Saturn', '58232' ],
-               planets = [mercury, venus, earth, mars, jupiter, saturn],
-               planetsAscName = [earth, jupiter, mars, mercury, saturn, venus],
-               planetsAscRadius = [mercury, mars, venus, earth, saturn, jupiter],
-               planetsRowspan,
-               planetsRowspanII,
-               planetsAscNameLegacy,
-
                // Data set "ipv4"
                ipv4 = [
                        // Some randomly generated fake IPs
-                       ['45.238.27.109'],
-                       ['44.172.9.22'],
-                       ['247.240.82.209'],
-                       ['204.204.132.158'],
-                       ['170.38.91.162'],
-                       ['197.219.164.9'],
-                       ['45.68.154.72'],
-                       ['182.195.149.80']
+                       [ '45.238.27.109' ],
+                       [ '44.172.9.22' ],
+                       [ '247.240.82.209' ],
+                       [ '204.204.132.158' ],
+                       [ '170.38.91.162' ],
+                       [ '197.219.164.9' ],
+                       [ '45.68.154.72' ],
+                       [ '182.195.149.80' ]
                ],
                ipv4Sorted = [
                        // Sort order should go octet by octet
-                       ['44.172.9.22'],
-                       ['45.68.154.72'],
-                       ['45.238.27.109'],
-                       ['170.38.91.162'],
-                       ['182.195.149.80'],
-                       ['197.219.164.9'],
-                       ['204.204.132.158'],
-                       ['247.240.82.209']
+                       [ '44.172.9.22' ],
+                       [ '45.68.154.72' ],
+                       [ '45.238.27.109' ],
+                       [ '170.38.91.162' ],
+                       [ '182.195.149.80' ],
+                       [ '197.219.164.9' ],
+                       [ '204.204.132.158' ],
+                       [ '247.240.82.209' ]
                ],
 
                // Data set "umlaut"
                umlautWords = [
-                       ['Günther'],
-                       ['Peter'],
-                       ['Björn'],
-                       ['Bjorn'],
-                       ['Apfel'],
-                       ['Äpfel'],
-                       ['Strasse'],
-                       ['Sträßschen']
+                       [ 'Günther' ],
+                       [ 'Peter' ],
+                       [ 'Björn' ],
+                       [ 'Bjorn' ],
+                       [ 'Apfel' ],
+                       [ 'Äpfel' ],
+                       [ 'Strasse' ],
+                       [ 'Sträßschen' ]
                ],
                umlautWordsSorted = [
-                       ['Äpfel'],
-                       ['Apfel'],
-                       ['Björn'],
-                       ['Bjorn'],
-                       ['Günther'],
-                       ['Peter'],
-                       ['Sträßschen'],
-                       ['Strasse']
+                       [ 'Äpfel' ],
+                       [ 'Apfel' ],
+                       [ 'Björn' ],
+                       [ 'Bjorn' ],
+                       [ 'Günther' ],
+                       [ 'Peter' ],
+                       [ 'Sträßschen' ],
+                       [ 'Strasse' ]
                ],
 
                complexMDYDates = [
-                       ['January, 19 2010'],
-                       ['April 21 1991'],
-                       ['04 22 1991'],
-                       ['5.12.1990'],
-                       ['December 12 \'10']
+                       [ 'January, 19 2010' ],
+                       [ 'April 21 1991' ],
+                       [ '04 22 1991' ],
+                       [ '5.12.1990' ],
+                       [ 'December 12 \'10' ]
                ],
                complexMDYSorted = [
-                       ['5.12.1990'],
-                       ['April 21 1991'],
-                       ['04 22 1991'],
-                       ['January, 19 2010'],
-                       ['December 12 \'10']
+                       [ '5.12.1990' ],
+                       [ 'April 21 1991' ],
+                       [ '04 22 1991' ],
+                       [ 'January, 19 2010' ],
+                       [ 'December 12 \'10' ]
                ],
 
                currencyUnsorted = [
-                       ['1.02 $'],
-                       ['$ 3.00'],
-                       ['€ 2,99'],
-                       ['$ 1.00'],
-                       ['$3.50'],
-                       ['$ 1.50'],
-                       ['€ 0.99']
+                       [ '1.02 $' ],
+                       [ '$ 3.00' ],
+                       [ '€ 2,99' ],
+                       [ '$ 1.00' ],
+                       [ '$3.50' ],
+                       [ '$ 1.50' ],
+                       [ '€ 0.99' ]
                ],
                currencySorted = [
-                       ['€ 0.99'],
-                       ['$ 1.00'],
-                       ['1.02 $'],
-                       ['$ 1.50'],
-                       ['$ 3.00'],
-                       ['$3.50'],
+                       [ '€ 0.99' ],
+                       [ '$ 1.00' ],
+                       [ '1.02 $' ],
+                       [ '$ 1.50' ],
+                       [ '$ 3.00' ],
+                       [ '$3.50' ],
                        // Comma's sort after dots
                        // Not intentional but test to detect changes
-                       ['€ 2,99']
+                       [ '€ 2,99' ]
                ],
 
                numbers = [
-                       [ '12'    ],
-                       [  '7'    ],
-                       [ '13,000'],
-                       [  '9'    ],
-                       [ '14'    ],
-                       [  '8.0'  ]
+                       [ '12' ],
+                       [ '7' ],
+                       [ '13,000' ],
+                       [ '9' ],
+                       [ '14' ],
+                       [ '8.0' ]
                ],
                numbersAsc = [
-                       [  '7'    ],
-                       [  '8.0'  ],
-                       [  '9'    ],
-                       [ '12'    ],
-                       [ '14'    ],
-                       [ '13,000']
+                       [ '7' ],
+                       [ '8.0' ],
+                       [ '9' ],
+                       [ '12' ],
+                       [ '14' ],
+                       [ '13,000' ]
                ],
 
                correctDateSorting1 = [
-                       ['01 January 2010'],
-                       ['05 February 2010'],
-                       ['16 January 2010']
+                       [ '01 January 2010' ],
+                       [ '05 February 2010' ],
+                       [ '16 January 2010' ]
                ],
                correctDateSortingSorted1 = [
-                       ['01 January 2010'],
-                       ['16 January 2010'],
-                       ['05 February 2010']
+                       [ '01 January 2010' ],
+                       [ '16 January 2010' ],
+                       [ '05 February 2010' ]
                ],
 
                correctDateSorting2 = [
-                       ['January 01 2010'],
-                       ['February 05 2010'],
-                       ['January 16 2010']
+                       [ 'January 01 2010' ],
+                       [ 'February 05 2010' ],
+                       [ 'January 16 2010' ]
                ],
                correctDateSortingSorted2 = [
-                       ['January 01 2010'],
-                       ['January 16 2010'],
-                       ['February 05 2010']
+                       [ 'January 01 2010' ],
+                       [ 'January 16 2010' ],
+                       [ 'February 05 2010' ]
                ];
 
        QUnit.module( 'jquery.tablesorter', QUnit.newMwEnvironment( {
                setup: function () {
                        this.liveMonths = mw.language.months;
                        mw.language.months = {
-                               'keys': {
-                                       'names': ['january', 'february', 'march', 'april', 'may_long', 'june',
-                                               'july', 'august', 'september', 'october', 'november', 'december'],
-                                       'genitive': ['january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
-                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen'],
-                                       'abbrev': ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+                               keys: {
+                                       names: [ 'january', 'february', 'march', 'april', 'may_long', 'june',
+                                               'july', 'august', 'september', 'october', 'november', 'december' ],
+                                       genitive: [ 'january-gen', 'february-gen', 'march-gen', 'april-gen', 'may-gen', 'june-gen',
+                                               'july-gen', 'august-gen', 'september-gen', 'october-gen', 'november-gen', 'december-gen' ],
+                                       abbrev: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun',
+                                               'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
                                },
-                               'names': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'genitive': ['January', 'February', 'March', 'April', 'May', 'June',
-                                               'July', 'August', 'September', 'October', 'November', 'December'],
-                               'abbrev': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+                               names: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               genitive: [ 'January', 'February', 'March', 'April', 'May', 'June',
+                                               'July', 'August', 'September', 'October', 'November', 'December' ],
+                               abbrev: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+                                               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]
                        };
                },
                teardown: function () {
                },
                config: {
                        wgDefaultDateFormat: 'dmy',
-                       wgSeparatorTransformTable: ['', ''],
-                       wgDigitTransformTable: ['', ''],
+                       wgSeparatorTransformTable: [ '', '' ],
+                       wgDigitTransformTable: [ '', '' ],
                        wgPageContentLanguage: 'en'
                }
        } ) );
         *
         * @param {String[]} header
         * @param {String[][]} data
-        * @return jQuery
+        * @return {jQuery}
         */
        function tableCreate( header, data ) {
                var i,
                for ( i = 0; i < data.length; i++ ) {
                        /*jshint loopfunc: true */
                        $tr = $( '<tr>' );
-                       $.each( data[i], function ( j, str ) {
+                       $.each( data[ i ], function ( j, str ) {
                                var $td = $( '<td>' );
                                $td.text( str ).appendTo( $tr );
                        } );
         * Extract text from table.
         *
         * @param {jQuery} $table
-        * @return String[][]
+        * @return {String[][]}
         */
        function tableExtract( $table ) {
                var data = [];
        }
 
        // Sample data set using planets named and their radius
-       header = [ 'Planet', 'Radius (km)'];
 
        tableTest(
                'Basic planet table: sorting initially - ascending by name',
                        $table.find( '.headerSort:eq(1)' ).click().click();
                }
        );
-
-       header = [ 'column1', 'column2' ];
-
        tableTest(
                'Sorting multiple columns by passing sort list',
                header,
 
                        // Pretend to click while pressing the multi-sort key
                        var event = $.Event( 'click' );
-                       event[$table.data( 'tablesorter' ).config.sortMultiSortKey] = true;
+                       event[ $table.data( 'tablesorter' ).config.sortMultiSortKey ] = true;
                        $table.find( '.headerSort:eq(1)' ).trigger( event );
                }
        );
        } );
 
        // Sorting with colspans
-       header = [ 'column1a', 'column1b', 'column1c', 'column2' ];
 
        tableTest( 'Sorting with colspanned headers: spanned column',
-               header,
+               header4,
                colspanInitial,
                [ aaa1, aab5, abc3, bbc2, caa4 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: sort spanned column twice',
-               header,
+               header4,
                colspanInitial,
                [ caa4, bbc2, abc3, aab5, aaa1 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: subsequent column',
-               header,
+               header4,
                colspanInitial,
                [ aaa1, bbc2, abc3, caa4, aab5 ],
                function ( $table ) {
                }
        );
        tableTest( 'Sorting with colspanned headers: sort subsequent column twice',
-               header,
+               header4,
                colspanInitial,
                [ aab5, caa4, abc3, bbc2, aaa1 ],
                function ( $table ) {
                }
        );
 
-       tableTest(
-               'Basic planet table: one unsortable column',
-               header,
-               planets,
-               planets,
-               function ( $table ) {
-                       $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
+       QUnit.test( 'Basic planet table: one unsortable column', 3, function ( assert ) {
+               var $table = tableCreate( header, planets ),
+                       $cell;
+               $table.find( 'tr:eq(0) > th:eq(0)' ).addClass( 'unsortable' );
 
-                       $table.tablesorter();
-                       $table.find( 'tr:eq(0) > th:eq(0)' ).click();
-               }
-       );
+               $table.tablesorter();
+               $table.find( 'tr:eq(0) > th:eq(0)' ).click();
+
+               assert.deepEqual(
+                       tableExtract( $table ),
+                       planets,
+                       'table not sorted'
+               );
+
+               $cell = $table.find( 'tr:eq(0) > th:eq(0)' );
+               $table.find( 'tr:eq(0) > th:eq(1)' ).click();
+
+               assert.equal(
+                       $cell.hasClass( 'headerSortUp' ) || $cell.hasClass( 'headerSortDown' ),
+                       false,
+                       'after sort: no class headerSortUp or headerSortDown'
+               );
+
+               assert.equal(
+                       $cell.attr( 'title' ),
+                       undefined,
+                       'after sort: no title tag added'
+               );
+
+       } );
 
        // Regression tests!
        tableTest(
                'Bug 28775: German-style (dmy) short numeric dates',
-               ['Date'],
+               [ 'Date' ],
                [
                        // German-style dates are day-month-year
-                       ['11.11.2011'],
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011']
+                       [ '11.11.2011' ],
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ]
                ],
                [
                        // Sorted by ascending date
-                       ['03.08.2011'],
-                       ['02.10.2011'],
-                       ['01.11.2011'],
-                       ['09.11.2011'],
-                       ['11.11.2011']
+                       [ '03.08.2011' ],
+                       [ '02.10.2011' ],
+                       [ '01.11.2011' ],
+                       [ '09.11.2011' ],
+                       [ '11.11.2011' ]
                ],
                function ( $table ) {
                        mw.config.set( 'wgDefaultDateFormat', 'dmy' );
 
        tableTest(
                'Bug 28775: American-style (mdy) short numeric dates',
-               ['Date'],
+               [ 'Date' ],
                [
                        // American-style dates are month-day-year
-                       ['11.11.2011'],
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011']
+                       [ '11.11.2011' ],
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ]
                ],
                [
                        // Sorted by ascending date
-                       ['01.11.2011'],
-                       ['02.10.2011'],
-                       ['03.08.2011'],
-                       ['09.11.2011'],
-                       ['11.11.2011']
+                       [ '01.11.2011' ],
+                       [ '02.10.2011' ],
+                       [ '03.08.2011' ],
+                       [ '09.11.2011' ],
+                       [ '11.11.2011' ]
                ],
                function ( $table ) {
                        mw.config.set( 'wgDefaultDateFormat', 'mdy' );
 
        tableTest(
                'Bug 17141: IPv4 address sorting',
-               ['IP'],
+               [ 'IP' ],
                ipv4,
                ipv4Sorted,
                function ( $table ) {
        );
        tableTest(
                'Bug 17141: IPv4 address sorting (reverse)',
-               ['IP'],
+               [ 'IP' ],
                ipv4,
                reversed( ipv4Sorted ),
                function ( $table ) {
 
        tableTest(
                'Accented Characters with custom collation',
-               ['Name'],
+               [ 'Name' ],
                umlautWords,
                umlautWordsSorted,
                function ( $table ) {
                        mw.config.set( 'tableSorterCollation', {
-                               'ä': 'ae',
-                               'ö': 'oe',
-                               'ß': 'ss',
-                               'ü': 'ue'
+                               ä: 'ae',
+                               ö: 'oe',
+                               ß: 'ss',
+                               ü: 'ue'
                        } );
 
                        $table.tablesorter();
 
        tableTest(
                'Complex date parsing I',
-               ['date'],
+               [ 'date' ],
                complexMDYDates,
                complexMDYSorted,
                function ( $table ) {
 
        tableTest(
                'Currency parsing I',
-               ['currency'],
+               [ 'currency' ],
                currencyUnsorted,
                currencySorted,
                function ( $table ) {
        );
 
        planetsAscNameLegacy = planetsAscName.slice( 0 );
-       planetsAscNameLegacy[4] = planetsAscNameLegacy[5];
+       planetsAscNameLegacy[ 4 ] = planetsAscNameLegacy[ 5 ];
        planetsAscNameLegacy.pop();
 
        tableTest(
                $table.find( '.headerSort:eq(0)' ).click();
 
                assert.equal(
-                       $table.data( 'tablesorter' ).config.parsers[0].id,
+                       $table.data( 'tablesorter' ).config.parsers[ 0 ].id,
                        'number',
                        'Correctly detected column content skipping sortbottom'
                );
        } );
 
        tableTest( 'bug 8115: sort numbers with commas (ascending)',
-               ['Numbers'], numbers, numbersAsc,
+               [ 'Numbers' ], numbers, numbersAsc,
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click();
        );
 
        tableTest( 'bug 8115: sort numbers with commas (descending)',
-               ['Numbers'], numbers, reversed( numbersAsc ),
+               [ 'Numbers' ], numbers, reversed( numbersAsc ),
                function ( $table ) {
                        $table.tablesorter();
                        $table.find( '.headerSort:eq(0)' ).click().click();
 
        tableTest(
                'Correct date sorting I',
-               ['date'],
+               [ 'date' ],
                correctDateSorting1,
                correctDateSortingSorted1,
                function ( $table ) {
 
        tableTest(
                'Correct date sorting II',
-               ['date'],
+               [ 'date' ],
                correctDateSorting2,
                correctDateSortingSorted2,
                function ( $table ) {
                                '</tbody></table>' );
 
                        $table.tablesorter();
-                       assert.equal( $table.find( 'tr:eq(1) th:eq(1)').data('headerIndex'),
+                       assert.equal( $table.find( 'tr:eq(1) th:eq(1)' ).data( 'headerIndex' ),
                                2,
                                'Incorrect index of sort header'
                        );
        tableTestHTML(
                'Rowspan exploding with colspanned cells (2)',
                '<table class="sortable">' +
-                       '<thead><tr><th id="sortme">n</th><th>foo</th><th>bar</th><th>baz</th><th>quux</th></tr></thead>' +
+                       '<thead><tr><th>n</th><th>foo</th><th>bar</th><th>baz</th><th id="sortme">n2</th></tr></thead>' +
                        '<tbody>' +
-                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>quux</td></tr>' +
-                       '<tr><td>2</td><td colspan="2">foobar</td><td>quux</td></tr>' +
+                       '<tr><td>1</td><td>foo</td><td>bar</td><td rowspan="2">baz</td><td>2</td></tr>' +
+                       '<tr><td>2</td><td colspan="2">foobar</td><td>1</td></tr>' +
                        '</tbody></table>',
                [
-                       [ '1', 'foo', 'bar', 'baz', 'quux' ],
-                       [ '2', 'foobar', 'baz', 'quux' ]
+                       [ '2', 'foobar', 'baz', '1' ],
+                       [ '1', 'foo', 'bar', 'baz', '2' ]
                ]
        );
 
                ]
        );
 
+       QUnit.test( 'bug 105731 - incomplete rows in table body', 3, function ( assert ) {
+               var $table, parsers;
+               $table = $(
+                       '<table class="sortable">' +
+                               '<tr><th>A</th><th>B</th></tr>' +
+                               '<tr><td>3</td></tr>' +
+                               '<tr><td>1</td><td>2</td></tr>' +
+                               '</table>'
+               );
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+               // now the first row have 2 columns
+               $table.find( '.headerSort:eq(1)' ).click();
+
+               parsers = $table.data( 'tablesorter' ).config.parsers;
+
+               assert.equal(
+                       parsers.length,
+                       2,
+                       'detectParserForColumn() detect 2 parsers'
+               );
+
+               assert.equal(
+                       parsers[ 1 ].id,
+                       'number',
+                       'detectParserForColumn() detect parser.id "number" for second column'
+               );
+
+               assert.equal(
+                       parsers[ 1 ].format( $table.find( 'tbody > tr > td:eq(1)' ).text() ),
+                       0,
+                       'empty cell is sorted as number 0'
+               );
+
+       } );
 }( jQuery, mediaWiki ) );
index 4bf44b0..2e6f05e 100644 (file)
@@ -5,13 +5,13 @@
        /**
         * Test factory for $.fn.textSelection( 'encapsulateText' )
         *
-        * @param options {object} associative array containing:
-        *   description {string}
-        *   input {string}
-        *   output {string}
-        *   start {int} starting char for selection
-        *   end {int} ending char for selection
-        *   params {object} add'l parameters for $().textSelection( 'encapsulateText' )
+        * @param {Object} options Associative configuration array
+        * @param {string} options.description Description
+        * @param {string} options.input Input
+        * @param {string} options.output Output
+        * @param {int} options.start Starting char for selection
+        * @param {int} options.end Ending char for selection
+        * @param {object} options.params Additional parameters for $().textSelection( 'encapsulateText' )
         */
        function encapsulateTest( options ) {
                var opt = $.extend( {
                        }
 
                        pos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true } );
-                       among( pos[0], options.start, 'Caret start should be where we set it.' );
-                       among( pos[1], options.end, 'Caret end should be where we set it.' );
+                       among( pos[ 0 ], options.start, 'Caret start should be where we set it.' );
+                       among( pos[ 1 ], options.end, 'Caret end should be where we set it.' );
                } );
        }
 
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js
new file mode 100644 (file)
index 0000000..9d0fdf5
--- /dev/null
@@ -0,0 +1,39 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.ForeignApi', QUnit.newMwEnvironment( {
+               setup: function () {
+                       this.server = this.sandbox.useFakeServer();
+                       this.server.respondImmediately = true;
+                       this.clock = this.sandbox.useFakeTimers();
+               },
+               teardown: function () {
+                       // https://github.com/jquery/jquery/issues/2453
+                       this.clock.tick();
+               }
+       } ) );
+
+       QUnit.test( 'origin is included in GET requests', function ( assert ) {
+               QUnit.expect( 1 );
+               var api = new mw.ForeignApi( '//localhost:4242/w/api.php' );
+
+               this.server.respond( function ( request ) {
+                       assert.ok( request.url.match( /origin=/ ), 'origin is included in GET requests' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+
+               api.get( {} );
+       } );
+
+       QUnit.test( 'origin is included in POST requests', function ( assert ) {
+               QUnit.expect( 2 );
+               var api = new mw.ForeignApi( '//localhost:4242/w/api.php' );
+
+               this.server.respond( function ( request ) {
+                       assert.ok( request.requestBody.match( /origin=/ ), 'origin is included in POST request body' );
+                       assert.ok( request.url.match( /origin=/ ), 'origin is included in POST request URL, too' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+
+               api.post( {} );
+       } );
+
+}( mediaWiki ) );
index de79198..8033458 100644 (file)
@@ -14,7 +14,7 @@
        function sequence( responses ) {
                var i = 0;
                return function ( request ) {
-                       var response = responses[i];
+                       var response = responses[ i ];
                        if ( response ) {
                                i++;
                                request.respond.apply( request, response );
@@ -24,7 +24,7 @@
 
        function sequenceBodies( status, headers, bodies ) {
                jQuery.each( bodies, function ( i, body ) {
-                       bodies[i] = [ status, headers, body ];
+                       bodies[ i ] = [ status, headers, body ];
                } );
                return sequence( bodies );
        }
                api.get( { test: [ 'foo', 'bar', 'baz' ] } );
        } );
 
+       QUnit.test( 'Omitting false booleans', function ( assert ) {
+               QUnit.expect( 2 );
+               var api = new mw.Api();
+
+               this.server.respond( function ( request ) {
+                       assert.ok( !request.url.match( /foo/ ), 'foo query parameter is not present' );
+                       assert.ok( request.url.match( /bar=true/ ), 'bar query parameter is present with value true' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+
+               api.get( { foo: false, bar: true } );
+       } );
+
        QUnit.test( 'getToken() - cached', function ( assert ) {
                QUnit.expect( 2 );
                var api = new mw.Api();
                } );
 
                assert.equal( this.server.requests.length, 2, 'Request made' );
-               assert.equal( this.server.requests[0].requestHeaders['X-Foo'], 'Bar', 'Header sent' );
+               assert.equal( this.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
        } );
 
        QUnit.test( 'postWithToken() - badtoken', function ( assert ) {
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js
new file mode 100644 (file)
index 0000000..030e703
--- /dev/null
@@ -0,0 +1,34 @@
+( function ( mw, $ ) {
+       QUnit.module( 'mediawiki.api.upload', QUnit.newMwEnvironment( {} ) );
+
+       QUnit.test( 'Basic functionality', function ( assert ) {
+               QUnit.expect( 2 );
+               var api = new mw.Api();
+               assert.ok( api.upload );
+               // The below will return a rejected deferred, but that's OK.
+               assert.ok( api.upload() );
+       } );
+
+       QUnit.test( 'Set up iframe upload', function ( assert ) {
+               QUnit.expect( 5 );
+               var $iframe, $form, $input,
+                       api = new mw.Api();
+
+               this.sandbox.stub( api, 'getEditToken', function () {
+                       return $.Deferred().promise();
+               } );
+
+               api.uploadWithIframe( $( '<input>' )[ 0 ], { filename: 'Testing API upload.jpg' } );
+
+               $iframe = $( 'iframe' );
+               $form = $( 'form.mw-api-upload-form' );
+               $input = $form.find( 'input[name=filename]' );
+
+               assert.ok( $form.length > 0 );
+               assert.ok( $input.length > 0 );
+               assert.ok( $iframe.length > 0 );
+               assert.strictEqual( $form.prop( 'target' ), $iframe.prop( 'id' ) );
+               assert.strictEqual( $input.val(), 'Testing API upload.jpg' );
+       } );
+
+}( mediaWiki, jQuery ) );
index 5965ab7..64a5184 100644 (file)
                } );
 
                api.watch( [ 'Foo' ] ).done( function ( items ) {
-                       assert.equal( items[0].title, 'Foo' );
+                       assert.equal( items[ 0 ].title, 'Foo' );
                } );
 
                api.watch( [ 'Foo', 'Bar' ] ).done( function ( items ) {
-                       assert.equal( items[0].title, 'Foo' );
-                       assert.equal( items[1].title, 'Bar' );
+                       assert.equal( items[ 0 ].title, 'Foo' );
+                       assert.equal( items[ 1 ].title, 'Bar' );
                } );
 
                // Requests are POST, match requestBody instead of url
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignStructuredUpload.test.js
new file mode 100644 (file)
index 0000000..3007416
--- /dev/null
@@ -0,0 +1,30 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.ForeignStructuredUpload', QUnit.newMwEnvironment( {} ) );
+
+       QUnit.test( 'Constructor check', function ( assert ) {
+               QUnit.expect( 3 );
+               var upload = new mw.ForeignStructuredUpload();
+
+               assert.ok( upload, 'The ForeignUpload constructor is working.' );
+               assert.ok( upload.descriptions, 'The descriptions array was initialized properly' );
+               assert.ok( upload.categories, 'The categories array was initialized properly' );
+       } );
+
+       QUnit.test( 'getText', function ( assert ) {
+               QUnit.expect( 1 );
+
+               var upload = new mw.ForeignStructuredUpload();
+
+               // Set basic information
+               upload.addDescription( 'en', 'Test description one two three' );
+               upload.addDescription( 'en-x-piglatin', 'Esttay escriptionday unway ootay eethray' );
+               upload.setDate( '1776-07-04' );
+               upload.addCategories( [ 'Test 1', 'Test 2' ] );
+               upload.addCategories( [ 'Test 3' ] );
+
+               // Fake the user
+               this.sandbox.stub( upload, 'getUser' ).returns( 'Test user' );
+
+               assert.strictEqual( upload.getText().trim(), '{{Information\n|description={{en|Test description one two three}}\n{{en-x-piglatin|Esttay escriptionday unway ootay eethray}}\n|date=1776-07-04\n|source=Test user\n|author=Test user\n}}\n\n\n\n[[Category:Test 1]]\n[[Category:Test 2]]\n[[Category:Test 3]]' );
+       } );
+}( mediaWiki ) );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.ForeignUpload.test.js
new file mode 100644 (file)
index 0000000..98b9678
--- /dev/null
@@ -0,0 +1,12 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.ForeignUpload', QUnit.newMwEnvironment( {} ) );
+
+       QUnit.test( 'Constructor check', function ( assert ) {
+               QUnit.expect( 3 );
+               var upload = new mw.ForeignUpload();
+
+               assert.ok( upload, 'The ForeignUpload constructor is working.' );
+               assert.strictEqual( upload.targetHost, 'commons.wikimedia.org', 'Default target host is correct' );
+               assert.ok( upload.api instanceof mw.ForeignApi, 'API is correctly configured to point at a foreign wiki.' );
+       } );
+}( mediaWiki ) );
index 284f21a..641a5a5 100644 (file)
                                // testing custom / localized namespace
                                100: 'Penguins'
                        },
+                       // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
                        wgNamespaceIds: {
-                               'media': -2,
-                               'special': -1,
+                               media: -2,
+                               special: -1,
                                '': 0,
-                               'talk': 1,
-                               'user': 2,
-                               'user_talk': 3,
-                               'wikipedia': 4,
-                               'wikipedia_talk': 5,
-                               'file': 6,
-                               'file_talk': 7,
-                               'mediawiki': 8,
-                               'mediawiki_talk': 9,
-                               'template': 10,
-                               'template_talk': 11,
-                               'help': 12,
-                               'help_talk': 13,
-                               'category': 14,
-                               'category_talk': 15,
-                               'image': 6,
-                               'image_talk': 7,
-                               'project': 4,
-                               'project_talk': 5,
+                               talk: 1,
+                               user: 2,
+                               user_talk: 3,
+                               wikipedia: 4,
+                               wikipedia_talk: 5,
+                               file: 6,
+                               file_talk: 7,
+                               mediawiki: 8,
+                               mediawiki_talk: 9,
+                               template: 10,
+                               template_talk: 11,
+                               help: 12,
+                               help_talk: 13,
+                               category: 14,
+                               category_talk: 15,
+                               image: 6,
+                               image_talk: 7,
+                               project: 4,
+                               project_talk: 5,
                                // Testing custom namespaces and aliases
-                               'penguins': 100,
-                               'antarctic_waterfowl': 100
+                               penguins: 100,
+                               antarctic_waterfowl: 100
                        },
+                       // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
                        wgCaseSensitiveNamespaces: []
                }
        } ) );
        QUnit.test( 'constructor', cases.invalid.length, function ( assert ) {
                var i, title;
                for ( i = 0; i < cases.valid.length; i++ ) {
-                       title = new mw.Title( cases.valid[i] );
+                       title = new mw.Title( cases.valid[ i ] );
                }
                for ( i = 0; i < cases.invalid.length; i++ ) {
                        /*jshint loopfunc:true */
-                       title = cases.invalid[i];
+                       title = cases.invalid[ i ];
                        assert.throws( function () {
                                return new mw.Title( title );
-                       }, cases.invalid[i] );
+                       }, cases.invalid[ i ] );
                }
        } );
 
                var i;
                for ( i = 0; i < cases.valid.length; i++ ) {
                        assert.equal(
-                               $.type( mw.Title.newFromText( cases.valid[i] ) ),
+                               $.type( mw.Title.newFromText( cases.valid[ i ] ) ),
                                'object',
-                               cases.valid[i]
+                               cases.valid[ i ]
                        );
                }
                for ( i = 0; i < cases.invalid.length; i++ ) {
                        assert.equal(
-                               $.type( mw.Title.newFromText( cases.invalid[i] ) ),
+                               $.type( mw.Title.newFromText( cases.invalid[ i ] ) ),
                                'null',
-                               cases.invalid[i]
+                               cases.invalid[ i ]
                        );
                }
        } );
                assert.equal( title.toString(), 'Article', 'Default config: No sensitive namespaces by default. First-letter becomes uppercase' );
 
                // $wgCapitalLinks = false;
-               mw.config.set( 'wgCaseSensitiveNamespaces', [0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15] );
+               mw.config.set( 'wgCaseSensitiveNamespaces', [ 0, -2, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15 ] );
 
                title = new mw.Title( 'article' );
                assert.equal( title.toString(), 'article', '$wgCapitalLinks=false: Article namespace is sensitive, first-letter case stays lowercase' );
                assert.strictEqual( title.exists(), null, 'Return null with empty existance registry' );
 
                // Basic registry, checks default to boolean
-               mw.Title.exist.set( ['Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules'], true );
-               mw.Title.exist.set( ['Does_not_exist', 'User:John', 'Foobar'], false );
+               mw.Title.exist.set( [ 'Does_exist', 'User_talk:NeilK', 'Wikipedia:Sandbox_rules' ], true );
+               mw.Title.exist.set( [ 'Does_not_exist', 'User:John', 'Foobar' ], false );
 
                title = new mw.Title( 'Project:Sandbox rules' );
                assert.assertTrue( title.exists(), 'Return true for page titles marked as existing' );
 
                title = new mw.Title( 'Foobar' );
                assert.equal( title.getUrl(), '/wiki/Foobar', 'Basic functionality, getUrl uses mw.util.getUrl' );
-               assert.equal( title.getUrl({ action: 'edit' }), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
+               assert.equal( title.getUrl( { action: 'edit' } ), '/wiki/Foobar?action=edit', 'Basic functionality, \'params\' parameter' );
 
                title = new mw.Title( 'John Doe', 3 );
                assert.equal( title.getUrl(), '/wiki/User_talk:John_Doe', 'Escaping in title and namespace for urls' );
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
                        title = mw.Title.newFromImg( { src: thisCase.url } );
 
                        if ( thisCase.nameText !== undefined ) {
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
 
                        title = mw.Title.newFromText( thisCase.text );
                        assert.equal( title.getRelativeText( thisCase.relativeTo ), thisCase.expectedResult );
                }
        } );
 
-       QUnit.test( 'newFromUserInput', 8, function ( assert ) {
+       QUnit.test( 'normalizeExtension', 5, function ( assert ) {
+               var extension, i, thisCase, prefix,
+                       cases = [
+                               {
+                                       extension: 'png',
+                                       expected: 'png',
+                                       description: 'Extension already in canonical form'
+                               },
+                               {
+                                       extension: 'PNG',
+                                       expected: 'png',
+                                       description: 'Extension lowercased in canonical form'
+                               },
+                               {
+                                       extension: 'jpeg',
+                                       expected: 'jpg',
+                                       description: 'Extension changed in canonical form'
+                               },
+                               {
+                                       extension: 'JPEG',
+                                       expected: 'jpg',
+                                       description: 'Extension lowercased and changed in canonical form'
+                               },
+                               {
+                                       extension: '~~~',
+                                       expected: '',
+                                       description: 'Extension invalid and discarded'
+                               }
+                       ];
+
+               for ( i = 0; i < cases.length; i++ ) {
+                       thisCase = cases[ i ];
+                       extension = mw.Title.normalizeExtension( thisCase.extension );
+
+                       prefix = '[' + thisCase.description + '] ';
+                       assert.equal( extension, thisCase.expected, prefix + 'Extension as expected' );
+               }
+       } );
+
+       QUnit.test( 'newFromUserInput', 12, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
                                {
                                        title: 'DCS0001557854455.JPG',
-                                       defaultNamespace: 0,
-                                       options: {
-                                               fileExtension: 'PNG'
-                                       },
                                        expected: 'DCS0001557854455.JPG',
                                        description: 'Title in normal namespace without anything invalid but with "file extension"'
                                },
                                {
                                        title: 'MediaWiki:Msg-awesome',
-                                       defaultNamespace: undefined,
                                        expected: 'MediaWiki:Msg-awesome',
                                        description: 'Full title (page in MediaWiki namespace) supplied as string'
                                },
                                        },
                                        expected: 'File:The/Mw/Sound.kml',
                                        description: 'Page in File-namespace without explicit options'
+                               },
+                               {
+                                       title: 'File:Foo.JPEG',
+                                       expected: 'File:Foo.JPEG',
+                                       description: 'Page in File-namespace with non-canonical extension'
+                               },
+                               {
+                                       title: 'File:Foo.JPEG  ',
+                                       expected: 'File:Foo.JPEG',
+                                       description: 'Page in File-namespace with trailing whitespace'
                                }
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
+                       thisCase = cases[ i ];
                        title = mw.Title.newFromUserInput( thisCase.title, thisCase.defaultNamespace, thisCase.options );
 
                        if ( thisCase.expected !== undefined ) {
                }
        } );
 
-       QUnit.test( 'newFromFileName', 62, function ( assert ) {
+       QUnit.test( 'newFromFileName', 54, function ( assert ) {
                var title, i, thisCase, prefix,
                        cases = [
                                {
                                        fileName: 'DCS0001557854455.JPG',
                                        typeOfName: 'Standard camera output',
                                        nameText: 'DCS0001557854455',
-                                       prefixedText: 'File:DCS0001557854455.JPG',
-                                       extensionDesired: 'jpg'
+                                       prefixedText: 'File:DCS0001557854455.JPG'
                                },
                                {
                                        fileName: 'File:Sample.png',
                                        fileName: 'Treppe 2222 Test upload.jpg',
                                        typeOfName: 'File name with spaces in it and lower case file extension',
                                        nameText: 'Treppe 2222 Test upload',
-                                       prefixedText: 'File:Treppe 2222 Test upload.jpg',
-                                       extensionDesired: 'JPG'
+                                       prefixedText: 'File:Treppe 2222 Test upload.jpg'
                                },
                                {
                                        fileName: 'I contain a \ttab.jpg',
                                        nameText: 'Dot. dot',
                                        prefixedText: 'File:Dot. dot. dot'
                                },
-                               {
-                                       fileName: 'dot. dot ._dot',
-                                       typeOfName: 'File name with different file extension desired',
-                                       nameText: 'Dot. dot . dot',
-                                       prefixedText: 'File:Dot. dot . dot.png',
-                                       extensionDesired: 'png'
-                               },
-                               {
-                                       fileName: 'fileWOExt',
-                                       typeOfName: 'File W/O extension with extension desired',
-                                       nameText: 'FileWOExt',
-                                       prefixedText: 'File:FileWOExt.png',
-                                       extensionDesired: 'png'
-                               },
                                {
                                        fileName: '𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕𠴕𠵼𠵿𠸎𠸏𠹷𠺝𠺢𠻗𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂𠻹𠻺𠼭𠼮𠽌𠾴𠾼𠿪𡁜𡁯𡁵𡁶𡁻𡃁𡃉𡇙𢃇𢞵𢫕𢭃𢯊𢱑𢱕𢳂.png',
                                        typeOfName: 'File name longer than 240 bytes',
                        ];
 
                for ( i = 0; i < cases.length; i++ ) {
-                       thisCase = cases[i];
-                       title = mw.Title.newFromFileName( thisCase.fileName, thisCase.extensionDesired );
+                       thisCase = cases[ i ];
+                       title = mw.Title.newFromFileName( thisCase.fileName );
 
                        if ( thisCase.nameText !== undefined ) {
                                prefix = '[' + thisCase.typeOfName + '] ';
index ba36655..51374bd 100644 (file)
@@ -11,7 +11,7 @@
                }
        } ) );
 
-       $.each( [true, false], function ( i, strictMode ) {
+       $.each( [ true, false ], function ( i, strictMode ) {
                QUnit.test( 'Basic construction and properties (' + ( strictMode ? '' : 'non-' ) + 'strict mode)', 2, function ( assert ) {
                        var uriString, uri;
                        uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
@@ -76,8 +76,8 @@
                } );
 
                assert.strictEqual( uri.query.n, '1', 'Simple parameter with overrideKeys:false' );
-               assert.strictEqual( uri.query.m[0], 'foo', 'Order of multi-value parameters with overrideKeys:true' );
-               assert.strictEqual( uri.query.m[1], 'bar', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m[ 0 ], 'foo', 'Order of multi-value parameters with overrideKeys:true' );
+               assert.strictEqual( uri.query.m[ 1 ], 'bar', 'Order of multi-value parameters with overrideKeys:true' );
                assert.strictEqual( uri.query.m.length, 2, 'Number of mult-value field is correct' );
 
                uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
 
                assert.deepEqual(
                        original.query,
-                       { 'one': '1', 'two': '2' },
+                       { one: '1', two: '2' },
                        'Properties is deep cloned (bug 37708)'
                );
        } );
                                host: 'example.com',
                                port: undefined,
                                path: '/wiki/Foo',
-                               query: { 'v': '2' },
+                               query: { v: '2' },
                                fragment: undefined
                        },
                        'basic object properties'
index 779a0ed..399db91 100644 (file)
@@ -65,9 +65,9 @@
                QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
                        for ( var i = 0; i < tests.length; i++ ) {
                                assert.equal(
-                                       mw.language.convertPlural( tests[i][0], tests[i][1] ),
-                                       tests[i][2],
-                                       tests[i][3]
+                                       mw.language.convertPlural( tests[ i ][ 0 ], tests[ i ][ 1 ] ),
+                                       tests[ i ][ 2 ],
+                                       tests[ i ][ 3 ]
                                );
                        }
                } );
index f5f199e..7a13f0f 100644 (file)
                } );
 
                call = $.cookie.lastCall.args;
-               assert.strictEqual( call[0], 'myPrefixfoo' );
+               assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
                assert.deepEqual( call[ 2 ], {
                        expires: expiryDate,
                        domain: 'myDomain',
                } );
 
                call = $.cookie.lastCall.args;
-               assert.strictEqual( call[0], 'myPrefixfoo' );
+               assert.strictEqual( call[ 0 ], 'myPrefixfoo' );
                assert.deepEqual( call[ 2 ], {
                        expires: date,
                        domain: 'myDomain',
index 7c3f1ec..587c893 100644 (file)
@@ -7,7 +7,7 @@
                        errorUrl = 'http://example.com',
                        errorLine = '123',
                        errorColumn = '45',
-                       errorObject = new Error( 'Foo'),
+                       errorObject = new Error( 'Foo' ),
                        oldHandler = this.sandbox.stub();
 
                this.sandbox.stub( mw, 'track' );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js
new file mode 100644 (file)
index 0000000..774b205
--- /dev/null
@@ -0,0 +1,63 @@
+( function ( mw ) {
+
+       var getBucket = mw.experiments.getBucket;
+
+       function createExperiment() {
+               return {
+                       name: 'experiment',
+                       enabled: true,
+                       buckets: {
+                               control: 0.25,
+                               A: 0.25,
+                               B: 0.25,
+                               C: 0.25
+                       }
+               };
+       }
+
+       QUnit.module( 'mediawiki.experiments' );
+
+       QUnit.test( 'getBucket( experiment, token )', 4, function ( assert ) {
+               var experiment = createExperiment(),
+                       token = '123457890';
+
+               assert.equal(
+                       getBucket( experiment, token ),
+                       getBucket( experiment, token ),
+                       'It returns the same bucket for the same experiment-token pair.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.buckets = {
+                       A: 0.314159265359
+               };
+
+               assert.equal(
+                       'A',
+                       getBucket( experiment, token ),
+                       'It returns the bucket if only one is defined.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.enabled = false;
+
+               assert.equal(
+                       'control',
+                       getBucket( experiment, token ),
+                       'It returns "control" if the experiment is disabled.'
+               );
+
+               // --------
+               experiment = createExperiment();
+               experiment.buckets = {};
+
+               assert.equal(
+                       'control',
+                       getBucket( experiment, token ),
+                       'It returns "control" if the experiment doesn\'t have any buckets.'
+               );
+       } );
+
+}( mediaWiki ) );
index d9fd6a7..e7f4517 100644 (file)
@@ -70,7 +70,7 @@
         */
        function getMwLanguage( langCode ) {
                if ( !hasOwn.call( mwLanguageCache, langCode ) ) {
-                       mwLanguageCache[langCode] = $.ajax( {
+                       mwLanguageCache[ langCode ] = $.ajax( {
                                url: mw.util.wikiScript( 'load' ),
                                data: {
                                        skin: mw.config.get( 'skin' ),
                                return mw.language;
                        } );
                }
-               return mwLanguageCache[langCode];
+               return mwLanguageCache[ langCode ];
        }
 
        /**
         * @param {Function[]} tasks List of functions that perform tasks
         *  that may be asynchronous. Invoke the callback parameter when done.
         * @param {Function} complete Called when all tasks are done, or when the sequence is aborted.
-        * @return
         */
        function process( tasks, complete ) {
+               /*jshint latedef:false */
                function abort() {
                        tasks.splice( 0, tasks.length );
                        next();
        QUnit.test( 'Curly brace transformation', 16, function ( assert ) {
                var oldUserLang = mw.config.get( 'wgUserLanguage' );
 
-               assertBothModes( assert, ['gender-msg', 'Bob', 'male'], 'Bob: blue', 'gender is resolved' );
+               assertBothModes( assert, [ 'gender-msg', 'Bob', 'male' ], 'Bob: blue', 'gender is resolved' );
 
-               assertBothModes( assert, ['plural-msg', 5], 'Found 5 items', 'plural is resolved' );
+               assertBothModes( assert, [ 'plural-msg', 5 ], 'Found 5 items', 'plural is resolved' );
 
-               assertBothModes( assert, ['grammar-msg'], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'grammar is resolved' );
+               assertBothModes( assert, [ 'grammar-msg' ], 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'grammar is resolved' );
 
                mw.config.set( 'wgUserLanguage', 'en' );
-               assertBothModes( assert, ['formatnum-msg', '987654321.654321'], '987,654,321.654', 'formatnum is resolved' );
+               assertBothModes( assert, [ 'formatnum-msg', '987654321.654321' ], '987,654,321.654', 'formatnum is resolved' );
 
                // Test non-{{ wikitext, where behavior differs
 
                        'curly-brace': '{{int:message}}',
                        'single-square-bracket': '[https://www.mediawiki.org/ MediaWiki]',
                        'double-square-bracket': '[[Some page]]',
-                       'regular': 'Other message'
+                       regular: 'Other message'
                } );
 
                oldGMF = mw.jqueryMsg.getMessageFunction;
                        outerCalled = false;
                        innerCalled = false;
                        message = mw.message( key );
-                       message[format]();
+                       message[ format ]();
                        assert.strictEqual( outerCalled, shouldCall, 'Outer function called for ' + key );
                        assert.strictEqual( innerCalled, shouldCall, 'Inner function called for ' + key );
                }
        QUnit.test( 'HTML', 26, function ( assert ) {
                mw.messages.set( 'jquerymsg-italics-msg', '<i>Very</i> important' );
 
-               assertBothModes( assert, ['jquerymsg-italics-msg'], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
+               assertBothModes( assert, [ 'jquerymsg-italics-msg' ], mw.messages.get( 'jquerymsg-italics-msg' ), 'Simple italics unchanged' );
 
                mw.messages.set( 'jquerymsg-bold-msg', '<b>Strong</b> speaker' );
-               assertBothModes( assert, ['jquerymsg-bold-msg'], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
+               assertBothModes( assert, [ 'jquerymsg-bold-msg' ], mw.messages.get( 'jquerymsg-bold-msg' ), 'Simple bold unchanged' );
 
                mw.messages.set( 'jquerymsg-bold-italics-msg', 'It is <b><i>key</i></b>' );
-               assertBothModes( assert, ['jquerymsg-bold-italics-msg'], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
+               assertBothModes( assert, [ 'jquerymsg-bold-italics-msg' ], mw.messages.get( 'jquerymsg-bold-italics-msg' ), 'Bold and italics nesting order preserved' );
 
                mw.messages.set( 'jquerymsg-italics-bold-msg', 'It is <i><b>vital</b></i>' );
-               assertBothModes( assert, ['jquerymsg-italics-bold-msg'], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
+               assertBothModes( assert, [ 'jquerymsg-italics-bold-msg' ], mw.messages.get( 'jquerymsg-italics-bold-msg' ), 'Italics and bold nesting order preserved' );
 
                mw.messages.set( 'jquerymsg-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' );
 
index 3328ce3..3b5915a 100644 (file)
@@ -61,7 +61,7 @@
                        expected = repeat( '\n', n ) + 'some text';
 
                        $textarea = $( '<textarea>\n' + expected + '</textarea>' );
-                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + (n + 1) + ')' );
+                       assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (HTML contained ' + ( n + 1 ) + ')' );
 
                        $textarea = $( '<textarea>' ).val( expected );
                        assert.equal( $textarea.val(), expected, 'Expecting ' + n + ' newlines (from DOM set with ' + n + ')' );
index 670914e..399290c 100644 (file)
@@ -11,7 +11,7 @@
                },
                messages: {
                        // mw.language.listToText test
-                       'and': ' and',
+                       and: ' and',
                        'comma-separator': ', ',
                        'word-separator': ' '
                }
@@ -51,9 +51,9 @@
 
                        for ( var i = 0; i < test.length; i++ ) {
                                assert.equal(
-                                       mw.language.convertGrammar( test[i].word, test[i].grammarForm ),
-                                       test[i].expected,
-                                       test[i].description
+                                       mw.language.convertGrammar( test[ i ].word, test[ i ].grammarForm ),
+                                       test[ i ].expected,
+                                       test[ i ].description
                                );
                        }
                } );
 
        QUnit.test( 'List to text test', 4, function ( assert ) {
                assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
-               assert.equal( mw.language.listToText( ['a'] ), 'a', 'Single item' );
-               assert.equal( mw.language.listToText( ['a', 'b'] ), 'a and b', 'Two items' );
-               assert.equal( mw.language.listToText( ['a', 'b', 'c'] ), 'a, b and c', 'More than two items' );
+               assert.equal( mw.language.listToText( [ 'a' ] ), 'a', 'Single item' );
+               assert.equal( mw.language.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
+               assert.equal( mw.language.listToText( [ 'a', 'b', 'c' ] ), 'a, b and c', 'More than two items' );
        } );
 }( mediaWiki, jQuery ) );
index 61bab03..288b527 100644 (file)
@@ -12,7 +12,7 @@
 
                mw.messagePoster.factory.register( TEST_MODEL, testMessagePosterConstructor );
                assert.strictEqual(
-                       mw.messagePoster.factory.contentModelToClass[TEST_MODEL],
+                       mw.messagePoster.factory.contentModelToClass[ TEST_MODEL ],
                        testMessagePosterConstructor,
                        'Constructor is registered'
                );
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js
new file mode 100644 (file)
index 0000000..c25641d
--- /dev/null
@@ -0,0 +1,53 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.storage: normal case.', {
+               setup: function () {
+                       this.sandbox.stub( mw.storage, 'isLocalStorageSupported', true );
+                       this.spy = this.sandbox.spy( localStorage, 'setItem' );
+                       this.sandbox.stub( localStorage, 'getItem' )
+                               .withArgs( 'foo' ).returns( 'test' )
+                               .withArgs( 'bar' ).returns( null );
+               }
+       } );
+
+       QUnit.test( 'set/get with localStorage', 4, function ( assert ) {
+               mw.storage.set( 'foo', 'test' );
+               assert.strictEqual( this.spy.calledOnce, true, 'Check localStorage called.' );
+               assert.strictEqual( this.spy.calledWith( 'foo', 'test' ), true,
+                       'Check prefixed.' );
+               assert.strictEqual( mw.storage.get( 'foo' ), 'test', 'Check value gets stored.' );
+               assert.strictEqual( mw.storage.get( 'bar' ), null, 'Unset values are null.' );
+       } );
+
+       QUnit.module( 'mediawiki.storage: localStorage does not exist', {
+               setup: function () {
+                       this.sandbox.stub( mw.storage, 'isLocalStorageSupported', false );
+                       this.sandbox.stub( localStorage, 'setItem' ).throws();
+               }
+       } );
+
+       QUnit.test( 'set/get without localStorage', 3, function ( assert ) {
+               assert.strictEqual( mw.storage.set( 'foo', 'test' ), false,
+                       'When localStorage not available save fails.' );
+
+               assert.strictEqual( mw.storage.remove( 'foo', 'test' ), false,
+                       'When localStorage not available remove fails.' );
+
+               assert.strictEqual( mw.storage.get( 'foo' ), false,
+                               'Inability to retrieve values return false to differentiate from null (not set).' );
+       } );
+
+       QUnit.module( 'mediawiki.storage: localStorage exhausted', {
+               setup: function () {
+                       this.sandbox.stub( mw.storage, 'isLocalStorageSupported', true );
+                       this.sandbox.stub( localStorage, 'setItem' ).throws();
+                       this.sandbox.stub( localStorage, 'getItem' ).returns( null );
+               }
+       } );
+
+       QUnit.test( 'set/get without localStorage', 2, function ( assert ) {
+               assert.strictEqual( mw.storage.set( 'foo', 'test' ), false,
+                       'When localStorage not available inform user with false.' );
+               assert.strictEqual( mw.storage.get( 'foo' ), null, 'No value registered.' );
+       } );
+
+}( mediaWiki ) );
index 77fecb3..111d85b 100644 (file)
 
                // Multiple values at once
                someValues = {
-                       'foo': 'bar',
-                       'lorem': 'ipsum',
-                       'MediaWiki': true
+                       foo: 'bar',
+                       lorem: 'ipsum',
+                       MediaWiki: true
                };
                assert.strictEqual( conf.set( someValues ), true, 'Map.set returns boolean true if multiple values were set by passing an object' );
-               assert.deepEqual( conf.get( ['foo', 'lorem'] ), {
-                       'foo': 'bar',
-                       'lorem': 'ipsum'
+               assert.deepEqual( conf.get( [ 'foo', 'lorem' ] ), {
+                       foo: 'bar',
+                       lorem: 'ipsum'
                }, 'Map.get returns multiple values correctly as an object' );
 
                assert.deepEqual( conf, new mw.Map( conf.values ), 'new mw.Map maps over existing values-bearing object' );
 
-               assert.deepEqual( conf.get( ['foo', 'notExist'] ), {
-                       'foo': 'bar',
-                       'notExist': null
+               assert.deepEqual( conf.get( [ 'foo', 'notExist' ] ), {
+                       foo: 'bar',
+                       notExist: null
                }, 'Map.get return includes keys that were not found as null values' );
 
                // Interacting with globals and accessing the values object
                this.restoreWarnings();
 
                // Change value via global Map
-               globalConf.set('anotherGlobalMapChecker', 'Again');
+               globalConf.set( 'anotherGlobalMapChecker', 'Again' );
                assert.equal( globalConf.get( 'anotherGlobalMapChecker' ), 'Again', 'Change in global Map reflected via get()' );
                this.suppressWarnings();
                assert.equal( window.anotherGlobalMapChecker, 'Again', 'Change in global Map reflected window object' );
                                len = formats.length;
 
                        for ( i = 0; i < len; i++ ) {
-                               format = formats[i];
-                               assert.equal( mw.message.apply( null, messageArguments )[format](), expectedResult, assertMessage + ' when format is ' + format );
+                               format = formats[ i ];
+                               assert.equal( mw.message.apply( null, messageArguments )[ format ](), expectedResult, assertMessage + ' when format is ' + format );
                        }
                }
 
                assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
 
                assert.ok( mw.messages.set( 'multiple-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
+               assertMultipleFormats( [ 'multiple-curly-brace' ], [ 'text', 'parse' ], '"' + siteName + '" is the home of Other Message', 'Curly brace format works correctly' );
                assert.equal( mw.message( 'multiple-curly-brace' ).plain(), mw.messages.get( 'multiple-curly-brace' ), 'Plain format works correctly for curly brace message' );
                assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + siteName + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
 
                assert.ok( mw.messages.set( 'multiple-square-brackets-and-ampersand', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['multiple-square-brackets-and-ampersand'], ['plain', 'text'], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
+               assertMultipleFormats( [ 'multiple-square-brackets-and-ampersand' ], [ 'plain', 'text' ], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
                assert.equal( mw.message( 'multiple-square-brackets-and-ampersand' ).escaped(), 'Visit the [[Project:Community portal|community portal]] &amp; [[Project:Help desk|help desk]]', 'Escaped format works correctly for square bracket message' );
                assert.htmlEqual( mw.message( 'multiple-square-brackets-and-ampersand' ).parse(), 'Visit the ' +
                        '<a title="Project:Community portal" href="/wiki/Project:Community_portal">community portal</a>' +
                        ' &amp; <a title="Project:Help desk" href="/wiki/Project:Help_desk">help desk</a>', 'Internal links work with parse' );
 
-               assertMultipleFormats( ['mediawiki-test-version-entrypoints-index-php'], ['plain', 'text', 'escaped'], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
+               assertMultipleFormats( [ 'mediawiki-test-version-entrypoints-index-php' ], [ 'plain', 'text', 'escaped' ], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
                assert.htmlEqual( mw.message( 'mediawiki-test-version-entrypoints-index-php' ).parse(), '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>', 'External link works correctly in parse mode' );
 
-               assertMultipleFormats( ['external-link-replace', 'http://example.org/?x=y&z'], ['plain', 'text'], 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
+               assertMultipleFormats( [ 'external-link-replace', 'http://example.org/?x=y&z' ], [ 'plain', 'text' ], 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
                assert.equal( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).escaped(), 'Foo [http://example.org/?x=y&amp;z bar]', 'In escaped mode, parameters are substituted and ampersand is escaped, but external link is not processed' );
                assert.htmlEqual( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).parse(), 'Foo <a href="http://example.org/?x=y&amp;z">bar</a>', 'External link with replacement works in parse mode without double-escaping' );
 
                goodbye = mw.message( 'goodbye' );
                assert.strictEqual( goodbye.exists(), false, 'Message.exists returns false for nonexistent messages' );
 
-               assertMultipleFormats( ['goodbye'], ['plain', 'text'], '<goodbye>', 'Message.toString returns <key> if key does not exist' );
+               assertMultipleFormats( [ 'goodbye' ], [ 'plain', 'text' ], '<goodbye>', 'Message.toString returns <key> if key does not exist' );
                // bug 30684
-               assertMultipleFormats( ['goodbye'], ['parse', 'escaped'], '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if key does not exist' );
+               assertMultipleFormats( [ 'goodbye' ], [ 'parse', 'escaped' ], '&lt;goodbye&gt;', 'Message.toString returns properly escaped &lt;key&gt; if key does not exist' );
 
                assert.ok( mw.messages.set( 'plural-test-msg', 'There {{PLURAL:$1|is|are}} $1 {{PLURAL:$1|result|results}}' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['plural-test-msg', 6], ['text', 'parse', 'escaped'], 'There are 6 results', 'plural get resolved' );
+               assertMultipleFormats( [ 'plural-test-msg', 6 ], [ 'text', 'parse', 'escaped' ], 'There are 6 results', 'plural get resolved' );
                assert.equal( mw.message( 'plural-test-msg', 6 ).plain(), 'There {{PLURAL:6|is|are}} 6 {{PLURAL:6|result|results}}', 'Parameter is substituted but plural is not resolved in plain' );
 
                assert.ok( mw.messages.set( 'plural-test-msg-explicit', 'There {{plural:$1|is one car|are $1 cars|0=are no cars|12=are a dozen cars}}' ), 'mw.messages.set: Register message with explicit plural forms' );
-               assertMultipleFormats( ['plural-test-msg-explicit', 12], ['text', 'parse', 'escaped'], 'There are a dozen cars', 'explicit plural get resolved' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit', 12 ], [ 'text', 'parse', 'escaped' ], 'There are a dozen cars', 'explicit plural get resolved' );
 
                assert.ok( mw.messages.set( 'plural-test-msg-explicit-beginning', 'Basket has {{plural:$1|0=no eggs|12=a dozen eggs|6=half a dozen eggs|one egg|$1 eggs}}' ), 'mw.messages.set: Register message with explicit plural forms' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 1], ['text', 'parse', 'escaped'], 'Basket has one egg', 'explicit plural given at beginning get resolved for singular' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 4], ['text', 'parse', 'escaped'], 'Basket has 4 eggs', 'explicit plural given at beginning get resolved for plural' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 6], ['text', 'parse', 'escaped'], 'Basket has half a dozen eggs', 'explicit plural given at beginning get resolved for 6' );
-               assertMultipleFormats( ['plural-test-msg-explicit-beginning', 0], ['text', 'parse', 'escaped'], 'Basket has no eggs', 'explicit plural given at beginning get resolved for 0' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 1 ], [ 'text', 'parse', 'escaped' ], 'Basket has one egg', 'explicit plural given at beginning get resolved for singular' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 4 ], [ 'text', 'parse', 'escaped' ], 'Basket has 4 eggs', 'explicit plural given at beginning get resolved for plural' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 6 ], [ 'text', 'parse', 'escaped' ], 'Basket has half a dozen eggs', 'explicit plural given at beginning get resolved for 6' );
+               assertMultipleFormats( [ 'plural-test-msg-explicit-beginning', 0 ], [ 'text', 'parse', 'escaped' ], 'Basket has no eggs', 'explicit plural given at beginning get resolved for 0' );
 
-               assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary'], ['plain', 'text'], mw.messages.get( 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ), 'Double square brackets with no parameters unchanged' );
+               assertMultipleFormats( [ 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-test-pagetriage-del-talk-page-notify-summary' ), 'Double square brackets with no parameters unchanged' );
 
-               assertMultipleFormats( ['mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName], ['plain', 'text'], 'Notifying author of deletion nomination for [[' + specialCharactersPageName + ']]', 'Double square brackets with one parameter' );
+               assertMultipleFormats( [ 'mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName ], [ 'plain', 'text' ], 'Notifying author of deletion nomination for [[' + specialCharactersPageName + ']]', 'Double square brackets with one parameter' );
 
                assert.equal( mw.message( 'mediawiki-test-pagetriage-del-talk-page-notify-summary', specialCharactersPageName ).escaped(), 'Notifying author of deletion nomination for [[' + mw.html.escape( specialCharactersPageName ) + ']]', 'Double square brackets with one parameter, when escaped' );
 
                assert.ok( mw.messages.set( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result', '<a href=\'#\' title=\'{{#special:mypage}}\'>Username</a> (<a href=\'#\' title=\'{{#special:mytalk}}\'>talk</a>)' ), 'mw.messages.set: Register' );
                assert.equal( mw.message( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ).plain(), mw.messages.get( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ), 'HTML message with curly braces is not changed in plain mode' );
 
-               assertMultipleFormats( ['gender-plural-msg', 'male', 1], ['text', 'parse', 'escaped'], 'he is awesome', 'Gender and plural are resolved' );
+               assertMultipleFormats( [ 'gender-plural-msg', 'male', 1 ], [ 'text', 'parse', 'escaped' ], 'he is awesome', 'Gender and plural are resolved' );
                assert.equal( mw.message( 'gender-plural-msg', 'male', 1 ).plain(), '{{GENDER:male|he|she|they}} {{PLURAL:1|is|are}} awesome', 'Parameters are substituted, but gender and plural are not resolved in plain mode' );
 
                assert.equal( mw.message( 'grammar-msg' ).plain(), mw.messages.get( 'grammar-msg' ), 'Grammar is not resolved in plain mode' );
-               assertMultipleFormats( ['grammar-msg'], ['text', 'parse'], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
+               assertMultipleFormats( [ 'grammar-msg' ], [ 'text', 'parse' ], 'Przeszukaj ' + siteName, 'Grammar is resolved' );
                assert.equal( mw.message( 'grammar-msg' ).escaped(), 'Przeszukaj ' + siteName, 'Grammar is resolved in escaped mode' );
 
-               assertMultipleFormats( ['formatnum-msg', '987654321.654321'], ['text', 'parse', 'escaped'], '987,654,321.654', 'formatnum is resolved' );
+               assertMultipleFormats( [ 'formatnum-msg', '987654321.654321' ], [ 'text', 'parse', 'escaped' ], '987,654,321.654', 'formatnum is resolved' );
                assert.equal( mw.message( 'formatnum-msg' ).plain(), mw.messages.get( 'formatnum-msg' ), 'formatnum is not resolved in plain mode' );
 
-               assertMultipleFormats( ['int-msg'], ['text', 'parse', 'escaped'], 'Some Other Message', 'int is resolved' );
+               assertMultipleFormats( [ 'int-msg' ], [ 'text', 'parse', 'escaped' ], 'Some Other Message', 'int is resolved' );
                assert.equal( mw.message( 'int-msg' ).plain(), mw.messages.get( 'int-msg' ), 'int is not resolved in plain mode' );
 
                assert.ok( mw.messages.set( 'mediawiki-italics-msg', '<i>Very</i> important' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-italics-msg'], ['plain', 'text', 'parse'], mw.messages.get( 'mediawiki-italics-msg' ), 'Simple italics unchanged' );
+               assertMultipleFormats( [ 'mediawiki-italics-msg' ], [ 'plain', 'text', 'parse' ], mw.messages.get( 'mediawiki-italics-msg' ), 'Simple italics unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-italics-msg' ).escaped(),
                        '&lt;i&gt;Very&lt;/i&gt; important',
                );
 
                assert.ok( mw.messages.set( 'mediawiki-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-italics-with-link'], ['plain', 'text'], mw.messages.get( 'mediawiki-italics-with-link' ), 'Italics with link unchanged' );
+               assertMultipleFormats( [ 'mediawiki-italics-with-link' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-italics-with-link' ), 'Italics with link unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-italics-with-link' ).escaped(),
                        'An &lt;i&gt;italicized [[link|wiki-link]]&lt;/i&gt;',
                );
 
                assert.ok( mw.messages.set( 'mediawiki-script-msg', '<script  >alert( "Who put this script here?" );</script>' ), 'mw.messages.set: Register' );
-               assertMultipleFormats( ['mediawiki-script-msg'], ['plain', 'text'], mw.messages.get( 'mediawiki-script-msg' ), 'Script unchanged' );
+               assertMultipleFormats( [ 'mediawiki-script-msg' ], [ 'plain', 'text' ], mw.messages.get( 'mediawiki-script-msg' ), 'Script unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-script-msg' ).escaped(),
                        '&lt;script  &gt;alert( "Who put this script here?" );&lt;/script&gt;',
         * The sync style load test (for @import). This is, in a way, also an open bug for
         * ResourceLoader ("execute js after styles are loaded"), but browsers don't offer a
         * way to get a callback from when a stylesheet is loaded (that is, including any
-        * @import rules inside). To work around this, we'll have a little time loop to check
+        * `@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
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.callback', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
+               mw.loader.implement( 'test.callback', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ] );
 
                mw.loader.using( 'test.callback', function () {
 
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'hasOwnProperty', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )], {}, {} );
+               mw.loader.implement( 'hasOwnProperty', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ], {}, {} );
 
                mw.loader.using( 'hasOwnProperty', function () {
 
                        isAwesomeDone = true;
                };
 
-               mw.loader.implement( 'test.promise', [QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' )] );
+               mw.loader.implement( 'test.promise', [ QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/callMwLoaderTestCallback.js' ) ] );
 
                mw.loader.using( 'test.promise' )
                .done( function () {
                                QUnit.start();
                        },
                        {
-                               'all': '.mw-test-implement-a { float: right; }'
+                               all: '.mw-test-implement-a { float: right; }'
                        }
                );
 
                                } );
                        },
                        {
-                               'url': {
-                                       'print': [urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' )],
-                                       'screen': [
+                               url: {
+                                       print: [ urlStyleTest( '.mw-test-implement-b1', 'text-align', 'center' ) ],
+                                       screen: [
                                                // bug 40834: Make sure it actually works with more than 1 stylesheet reference
                                                urlStyleTest( '.mw-test-implement-b2', 'float', 'left' ),
                                                urlStyleTest( '.mw-test-implement-b3', 'float', 'right' )
                                QUnit.start();
                        },
                        {
-                               'all': '.mw-test-implement-c { float: right; }'
+                               all: '.mw-test-implement-c { float: right; }'
                        }
                );
 
                                } );
                        },
                        {
-                               'all': [urlStyleTest( '.mw-test-implement-d', 'float', 'right' )],
-                               'print': [urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' )]
+                               all: [ urlStyleTest( '.mw-test-implement-d', 'float', 'right' ) ],
+                               print: [ urlStyleTest( '.mw-test-implement-d2', 'text-align', 'center' ) ]
                        }
                );
 
        } );
 
        // @import (bug 31676)
-       QUnit.asyncTest( 'mw.loader.implement( styles has @import)', 5, function ( assert ) {
+       QUnit.asyncTest( 'mw.loader.implement( styles has @import)', 7, function ( assert ) {
                var isJsExecuted, $element;
 
                mw.loader.implement(
                        'test.implement.import',
                        function () {
-                               assert.strictEqual( isJsExecuted, undefined, 'javascript not executed multiple times' );
+                               assert.strictEqual( isJsExecuted, undefined, 'script not executed multiple times' );
                                isJsExecuted = true;
 
-                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'ready', 'module state is "ready" while implement() is executing javascript' );
+                               assert.equal( mw.loader.getState( 'test.implement.import' ), 'executing', 'module state during implement() script execution' );
 
                                $element = $( '<div class="mw-test-implement-import">Foo bar</div>' ).appendTo( '#qunit-fixture' );
 
-                               assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'Messages are loaded before javascript execution' );
+                               assert.equal( mw.msg( 'test-foobar' ), 'Hello Foobar, $1!', 'messages load before script execution' );
 
                                assertStyleAsync( assert, $element, 'float', 'right', function () {
                                        assert.equal( $element.css( 'text-align' ), 'center',
                                } );
                        },
                        {
-                               'css': [
+                               css: [
                                        '@import url(\''
                                                + urlStyleTest( '.mw-test-implement-import', 'float', 'right' )
                                                + '\');\n'
                        }
                );
 
-               mw.loader.load( 'test.implement' );
+               mw.loader.using( 'test.implement.import' ).always( function () {
+                       assert.strictEqual( isJsExecuted, true, 'script executed' );
+                       assert.equal( mw.loader.getState( 'test.implement.import' ), 'ready', 'module state after script execution' );
+               } );
+       } );
+
+       QUnit.asyncTest( 'mw.loader.implement( dependency with styles )', 4, function ( assert ) {
+               var $element = $( '<div class="mw-test-implement-e"></div>' ).appendTo( '#qunit-fixture' ),
+                       $element2 = $( '<div class="mw-test-implement-e2"></div>' ).appendTo( '#qunit-fixture' );
+
+               assert.notEqual(
+                       $element.css( 'float' ),
+                       'right',
+                       'style is clear'
+               );
+               assert.notEqual(
+                       $element2.css( 'float' ),
+                       'left',
+                       'style is clear'
+               );
+
+               mw.loader.register( [
+                       [ 'test.implement.e', '0', [ 'test.implement.e2' ] ],
+                       [ 'test.implement.e2', '0' ]
+               ] );
 
+               mw.loader.implement(
+                       'test.implement.e',
+                       function () {
+                               assert.equal(
+                                       $element.css( 'float' ),
+                                       'right',
+                                       'Depending module\'s style is applied'
+                               );
+                               QUnit.start();
+                       },
+                       {
+                               all: '.mw-test-implement-e { float: right; }'
+                       }
+               );
+
+               mw.loader.implement(
+                       'test.implement.e2',
+                       function () {
+                               assert.equal(
+                                       $element2.css( 'float' ),
+                                       'left',
+                                       'Dependency\'s style is applied'
+                               );
+                       },
+                       {
+                               all: '.mw-test-implement-e2 { float: left; }'
+                       }
+               );
+
+               mw.loader.load( [
+                       'test.implement.e'
+               ] );
        } );
 
        QUnit.test( 'mw.loader.implement( only scripts )', 1, function ( assert ) {
        QUnit.asyncTest( 'mw.loader.implement( only messages )', 2, function ( assert ) {
                assert.assertFalse( mw.messages.exists( 'bug_29107' ), 'Verify that the test message doesn\'t exist yet' );
 
-               mw.loader.implement( 'test.implement.msgs', [], {}, { 'bug_29107': 'loaded' } );
+               // jscs: disable requireCamelCaseOrUpperCaseIdentifiers
+               mw.loader.implement( 'test.implement.msgs', [], {}, { bug_29107: 'loaded' } );
+               // jscs: enable requireCamelCaseOrUpperCaseIdentifiers
                mw.loader.using( 'test.implement.msgs', function () {
                        QUnit.start();
                        assert.ok( mw.messages.exists( 'bug_29107' ), 'Bug 29107: messages-only module should implement ok' );
                this.sandbox.stub( mw, 'track' );
 
                mw.loader.register( [
-                       ['test.module1', '0'],
-                       ['test.module2', '0', ['test.module1']],
-                       ['test.module3', '0', ['test.module2']]
+                       [ 'test.module1', '0' ],
+                       [ 'test.module2', '0', [ 'test.module1' ] ],
+                       [ 'test.module3', '0', [ 'test.module2' ] ]
                ] );
                mw.loader.implement( 'test.module1', function () {
                        throw new Error( 'expected' );
 
        QUnit.test( 'mw.loader out-of-order implementation', 9, function ( assert ) {
                mw.loader.register( [
-                       ['test.module4', '0'],
-                       ['test.module5', '0', ['test.module4']],
-                       ['test.module6', '0', ['test.module5']]
+                       [ 'test.module4', '0' ],
+                       [ 'test.module5', '0', [ 'test.module4' ] ],
+                       [ 'test.module6', '0', [ 'test.module5' ] ]
                ] );
                mw.loader.implement( 'test.module4', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
 
        QUnit.test( 'mw.loader missing dependency', 13, function ( assert ) {
                mw.loader.register( [
-                       ['test.module7', '0'],
-                       ['test.module8', '0', ['test.module7']],
-                       ['test.module9', '0', ['test.module8']]
+                       [ 'test.module7', '0' ],
+                       [ 'test.module8', '0', [ 'test.module7' ] ],
+                       [ 'test.module9', '0', [ 'test.module8' ] ]
                ] );
                mw.loader.implement( 'test.module8', function () {} );
                assert.strictEqual( mw.loader.getState( 'test.module7' ), 'registered', 'Expected "registered" state for test.module7' );
                assert.strictEqual( mw.loader.getState( 'test.module8' ), 'error', 'Expected "error" state for test.module8' );
                assert.strictEqual( mw.loader.getState( 'test.module9' ), 'error', 'Expected "error" state for test.module9' );
                mw.loader.using(
-                       ['test.module7'],
+                       [ 'test.module7' ],
                        function () {
                                assert.ok( false, 'Success fired despite missing dependency' );
                                assert.ok( true, 'QUnit expected() count dummy' );
                        },
                        function ( e, dependencies ) {
                                assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
-                               assert.deepEqual( dependencies, ['test.module7'], 'Error callback called with module test.module7' );
+                               assert.deepEqual( dependencies, [ 'test.module7' ], 'Error callback called with module test.module7' );
                        }
                );
                mw.loader.using(
-                       ['test.module9'],
+                       [ 'test.module9' ],
                        function () {
                                assert.ok( false, 'Success fired despite missing dependency' );
                                assert.ok( true, 'QUnit expected() count dummy' );
                                dependencies.sort();
                                assert.deepEqual(
                                        dependencies,
-                                       ['test.module7', 'test.module8', 'test.module9'],
+                                       [ 'test.module7', 'test.module8', 'test.module9' ],
                                        'Error callback called with all three modules as dependencies'
                                );
                        }
        QUnit.asyncTest( 'mw.loader dependency handling', 5, function ( assert ) {
                mw.loader.register( [
                        // [module, version, dependencies, group, source]
-                       ['testMissing', '1', [], null, 'testloader'],
-                       ['testUsesMissing', '1', ['testMissing'], null, 'testloader'],
-                       ['testUsesNestedMissing', '1', ['testUsesMissing'], null, 'testloader']
+                       [ 'testMissing', '1', [], null, 'testloader' ],
+                       [ 'testUsesMissing', '1', [ 'testMissing' ], null, 'testloader' ],
+                       [ 'testUsesNestedMissing', '1', [ 'testUsesMissing' ], null, 'testloader' ]
                ] );
 
                function verifyModuleStates() {
                        assert.equal( mw.loader.getState( 'testUsesNestedMissing' ), 'error', 'Module with indirect missing dependency must have state "error"' );
                }
 
-               mw.loader.using( ['testUsesNestedMissing'],
+               mw.loader.using( [ 'testUsesNestedMissing' ],
                        function () {
                                assert.ok( false, 'Error handler should be invoked.' );
                                assert.ok( true ); // Dummy to reach QUnit expect()
                                // As soon as server spits out state('testMissing', 'missing');
                                // it will bubble up and trigger the error callback.
                                // Therefor the badmodules array is not testUsesMissing or testUsesNestedMissing.
-                               assert.deepEqual( badmodules, ['testMissing'], 'Bad modules as expected.' );
+                               assert.deepEqual( badmodules, [ 'testMissing' ], 'Bad modules as expected.' );
 
                                verifyModuleStates();
 
        QUnit.asyncTest( 'mw.loader skin-function handling', 5, function ( assert ) {
                mw.loader.register( [
                        // [module, version, dependencies, group, source, skip]
-                       ['testSkipped', '1', [], null, 'testloader', 'return true;'],
-                       ['testNotSkipped', '1', [], null, 'testloader', 'return false;'],
-                       ['testUsesSkippable', '1', ['testSkipped', 'testNotSkipped'], null, 'testloader']
+                       [ 'testSkipped', '1', [], null, 'testloader', 'return true;' ],
+                       [ 'testNotSkipped', '1', [], null, 'testloader', 'return false;' ],
+                       [ 'testUsesSkippable', '1', [ 'testSkipped', 'testNotSkipped' ], null, 'testloader' ]
                ] );
 
                function verifyModuleStates() {
                        assert.equal( mw.loader.getState( 'testUsesSkippable' ), 'ready', 'Module is ready when skippable dependencies are ready' );
                }
 
-               mw.loader.using( ['testUsesSkippable'],
+               mw.loader.using( [ 'testUsesSkippable' ],
                        function () {
                                assert.ok( true, 'Success handler should be invoked.' );
                                assert.ok( true ); // Dummy to match error handler and reach QUnit expect()
                // This bug was actually already fixed in 1.18 and later when discovered in 1.17.
                // Test is for regressions!
 
-               // Forge an URL to the test callback script
+               // Forge a URL to the test callback script
                var target = QUnit.fixurl(
                        mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
                );
                mw.loader.load( target );
        } );
 
+       QUnit.asyncTest( 'mw.loader( "/absolute-path" )', 2, function ( assert ) {
+               // Forge a URL to the test callback script
+               var target = QUnit.fixurl(
+                       mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/qunitOkCall.js'
+               );
+
+               // Confirm that mw.loader.load() works with absolute-paths (relative to current hostname)
+               assert.equal( target.slice( 0, 1 ), '/', 'URL is relative to document root' );
+
+               // Async!
+               // The target calls QUnit.start
+               mw.loader.load( target );
+       } );
+
+       QUnit.asyncTest( 'mw.loader() executing race (T112232)', 2, function ( assert ) {
+               var done = false;
+
+               // The red herring schedules its CSS buffer first. In T112232, a bug in the
+               // state machine would cause the job for testRaceLoadMe to run with an earlier job.
+               mw.loader.implement(
+                       'testRaceRedHerring',
+                       function () {},
+                       { css: [ '.mw-testRaceRedHerring {}' ] }
+               );
+               mw.loader.implement(
+                       'testRaceLoadMe',
+                       function () {
+                               done = true;
+                       },
+                       { css: [ '.mw-testRaceLoadMe { float: left; }' ] }
+               );
+
+               mw.loader.load( [ 'testRaceRedHerring', 'testRaceLoadMe' ] );
+               mw.loader.using( 'testRaceLoadMe', function () {
+                       assert.strictEqual( done, true, 'script ran' );
+                       assert.strictEqual( mw.loader.getState( 'testRaceLoadMe' ), 'ready', 'state' );
+               } ).always( QUnit.start );
+       } );
+
        QUnit.test( 'mw.html', 13, function ( assert ) {
                assert.throws( function () {
                        mw.html.escape();
 
                mw.hook( 'test.hook.data' ).add( function ( data1, data2 ) {
                        assert.equal( data1, 'example', 'Fire with data (string param)' );
-                       assert.deepEqual( data2, ['two'], 'Fire with data (array param)' );
+                       assert.deepEqual( data2, [ 'two' ], 'Fire with data (array param)' );
                } );
-               mw.hook( 'test.hook.data' ).fire( 'example', ['two'] );
+               mw.hook( 'test.hook.data' ).fire( 'example', [ 'two' ] );
 
                hook = mw.hook( 'test.hook.chainable' );
                assert.strictEqual( hook.add(), hook, 'hook.add is chainable' );
                add = hook.add;
                fire = hook.fire;
                add( function ( x, y ) {
-                       assert.deepEqual( [x, y], ['x', 'y'], 'Detached (contextless) with data' );
+                       assert.deepEqual( [ x, y ], [ 'x', 'y' ], 'Detached (contextless) with data' );
                } );
                fire( 'x', 'y' );
 
                                assert.equal( chr, 'z', 'Adding callback later invokes right away with last data' );
                        } );
 
-               assert.deepEqual( chars, ['x', 'y', 'z'], 'Multiple callbacks with multiple fires' );
+               assert.deepEqual( chars, [ 'x', 'y', 'z' ], 'Multiple callbacks with multiple fires' );
 
                chars = [];
                callback = function ( chr ) {
 
                assert.deepEqual(
                        chars,
-                       ['x', 'x', 'x', 'x', 'y', 'z'],
+                       [ 'x', 'x', 'x', 'x', 'y', 'z' ],
                        '"add" and "remove" support variadic arguments. ' +
                                '"add" does not filter unique. ' +
                                '"remove" removes all equal by reference. ' +
index 8a3e100..c1f1484 100644 (file)
@@ -2,54 +2,54 @@
        var
                // Based on IPTest.php > testisIPv4
                IPV4_CASES = [
-                       [false, false, 'Boolean false is not an IP'],
-                       [false, true, 'Boolean true is not an IP'],
-                       [false, '', 'Empty string is not an IP'],
-                       [false, 'abc', '"abc" is not an IP'],
-                       [false, ':', 'Colon is not an IP'],
-                       [false, '124.24.52', 'IPv4 not enough quads'],
-                       [false, '24.324.52.13', 'IPv4 out of range'],
-                       [false, '.24.52.13', 'IPv4 starts with period'],
-
-                       [true, '124.24.52.13', '124.24.52.134 is a valid IP'],
-                       [true, '1.24.52.13', '1.24.52.13 is a valid IP'],
-                       [false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs']
+                       [ false, false, 'Boolean false is not an IP' ],
+                       [ false, true, 'Boolean true is not an IP' ],
+                       [ false, '', 'Empty string is not an IP' ],
+                       [ false, 'abc', '"abc" is not an IP' ],
+                       [ false, ':', 'Colon is not an IP' ],
+                       [ false, '124.24.52', 'IPv4 not enough quads' ],
+                       [ false, '24.324.52.13', 'IPv4 out of range' ],
+                       [ false, '.24.52.13', 'IPv4 starts with period' ],
+
+                       [ true, '124.24.52.13', '124.24.52.134 is a valid IP' ],
+                       [ true, '1.24.52.13', '1.24.52.13 is a valid IP' ],
+                       [ false, '74.24.52.13/20', 'IPv4 ranges are not recognized as valid IPs' ]
                ],
 
                // Based on IPTest.php > testisIPv6
                IPV6_CASES = [
-                       [false, ':fc:100::', 'IPv6 starting with lone ":"'],
-                       [false, 'fc:100:::', 'IPv6 ending with a ":::"'],
-                       [false, 'fc:300', 'IPv6 with only 2 words'],
-                       [false, 'fc:100:300', 'IPv6 with only 3 words'],
-
-                       [false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"'],
-                       [false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"'],
-
-                       [false, ':::'],
-                       [false, '::0:', 'IPv6 ending in a lone ":"'],
-
-                       [true,  '::', 'IPv6 zero address'],
-
-                       [false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
-                       [false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words'],
-
-                       [false, ':fc::100', 'IPv6 starting with lone ":"'],
-                       [false, 'fc::100:', 'IPv6 ending with lone ":"'],
-                       [false, 'fc:::100', 'IPv6 with ":::" in the middle'],
-
-                       [true,  'fc::100', 'IPv6 with "::" and 2 words'],
-                       [true,  'fc::100:a', 'IPv6 with "::" and 3 words'],
-                       [true,  'fc::100:a:d', 'IPv6 with "::" and 4 words'],
-                       [true,  'fc::100:a:d:1', 'IPv6 with "::" and 5 words'],
-                       [true,  'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words'],
-                       [true,  'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words'],
-                       [true,  '2001::df', 'IPv6 with "::" and 2 words'],
-                       [true,  '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words'],
-                       [true,  '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words'],
-
-                       [false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words'],
-                       [false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words']
+                       [ false, ':fc:100::', 'IPv6 starting with lone ":"' ],
+                       [ false, 'fc:100:::', 'IPv6 ending with a ":::"' ],
+                       [ false, 'fc:300', 'IPv6 with only 2 words' ],
+                       [ false, 'fc:100:300', 'IPv6 with only 3 words' ],
+
+                       [ false, 'fc:100:a:d:1:e:ac:0::', 'IPv6 with 8 words ending with "::"' ],
+                       [ false, 'fc:100:a:d:1:e:ac:0:1::', 'IPv6 with 9 words ending with "::"' ],
+
+                       [ false, ':::' ],
+                       [ false, '::0:', 'IPv6 ending in a lone ":"' ],
+
+                       [ true,  '::', 'IPv6 zero address' ],
+
+                       [ false, '::fc:100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
+                       [ false, '::fc:100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ],
+
+                       [ false, ':fc::100', 'IPv6 starting with lone ":"' ],
+                       [ false, 'fc::100:', 'IPv6 ending with lone ":"' ],
+                       [ false, 'fc:::100', 'IPv6 with ":::" in the middle' ],
+
+                       [ true,  'fc::100', 'IPv6 with "::" and 2 words' ],
+                       [ true,  'fc::100:a', 'IPv6 with "::" and 3 words' ],
+                       [ true,  'fc::100:a:d', 'IPv6 with "::" and 4 words' ],
+                       [ true,  'fc::100:a:d:1', 'IPv6 with "::" and 5 words' ],
+                       [ true,  'fc::100:a:d:1:e', 'IPv6 with "::" and 6 words' ],
+                       [ true,  'fc::100:a:d:1:e:ac', 'IPv6 with "::" and 7 words' ],
+                       [ true,  '2001::df', 'IPv6 with "::" and 2 words' ],
+                       [ true,  '2001:5c0:1400:a::df', 'IPv6 with "::" and 5 words' ],
+                       [ true,  '2001:5c0:1400:a::df:2', 'IPv6 with "::" and 6 words' ],
+
+                       [ false, 'fc::100:a:d:1:e:ac:0', 'IPv6 with "::" and 8 words' ],
+                       [ false, 'fc::100:a:d:1:e:ac:0:1', 'IPv6 with 9 words' ]
                ];
 
        Array.prototype.push.apply( IPV6_CASES,
@@ -70,7 +70,7 @@
                        '::fc:100:a:d:1:e:ac',
                        'fc:100:a:d:1:e:ac:0'
                ], function ( el ) {
-                       return [[ true, el, el + ' is a valid IP' ]];
+                       return [ [ true, el, el + ' is a valid IP' ] ];
                } )
        );
 
@@ -83,7 +83,7 @@
                },
                messages: {
                        // Used by accessKeyLabel in test for addPortletLink
-                       'brackets': '[$1]',
+                       brackets: '[$1]',
                        'word-separator': ' '
                }
        } ) );
@@ -92,7 +92,7 @@
                assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
        } );
 
-       QUnit.test( 'wikiUrlencode', 10, function ( assert ) {
+       QUnit.test( 'wikiUrlencode', 11, function ( assert ) {
                assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
                // See also wfUrlencodeTest.php#provideURLS
                $.each( {
                        ':': ':',
                        ';@$-_.!*': ';@$-_.!*',
                        '/': '/',
+                       '~': '~',
                        '[]': '%5B%5D',
                        '<>': '%3C%3E',
                        '\'': '%27'
 
        QUnit.test( 'wikiScript', 4, function ( assert ) {
                mw.config.set( {
-                       'wgScript': '/w/i.php', // customized wgScript for bug 39103
-                       'wgLoadScript': '/w/l.php', // customized wgLoadScript for bug 39103
-                       'wgScriptPath': '/w',
-                       'wgScriptExtension': '.php'
+                       wgScript: '/w/i.php', // customized wgScript for bug 39103
+                       wgLoadScript: '/w/l.php', // customized wgLoadScript for bug 39103
+                       wgScriptPath: '/w',
+                       wgScriptExtension: '.php'
                } );
 
                assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ),
                url = 'http://example.org/#&foo=bad';
                assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (bug 27427)' );
 
-               url = 'example.org?' + $.param( { 'TEST': 'a b+c' } );
+               url = 'example.org?' + $.param( { TEST: 'a b+c' } );
                assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'Bug 30441: getParamValue must understand "+" encoding of space' );
 
-               url = 'example.org?' + $.param( { 'TEST': 'a b+c d' } ); // check for sloppy code from r95332 :)
+               url = 'example.org?' + $.param( { TEST: 'a b+c d' } ); // check for sloppy code from r95332 :)
                assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'Bug 30441: getParamValue must understand "+" encoding of space (multiple spaces)' );
        } );
 
                );
 
                assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
-               assert.strictEqual( $tbMW.next()[0], tbRL, 'Link is in the correct position (nextnode as Node object)' );
+               assert.strictEqual( $tbMW.next()[ 0 ], tbRL, 'Link is in the correct position (nextnode as Node object)' );
 
                cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
                $cuQuux = $( cuQuux );
                tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
 
-               assert.strictEqual( $( tbRLDM ).next()[0], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
+               assert.strictEqual( $( tbRLDM ).next()[ 0 ], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
 
                caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
 
                assert.strictEqual( $( caFoo ).find( 'span' ).length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
 
                addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
-               assert.strictEqual( $( addedAfter ).next()[0], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
+               assert.strictEqual( $( addedAfter ).next()[ 0 ], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
 
                // test case - nonexistent id as next node
                tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
 
-               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
+               assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
 
                // test case - empty jquery object as next node
                tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
 
-               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[0], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
+               assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
        } );
 
        QUnit.test( 'validateEmail', 6, function ( assert ) {
 
        QUnit.test( 'isIPv6Address', 40, function ( assert ) {
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPv4Address', 11, function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPAddress', 51, function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
 
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[1] ), ipCase[0], ipCase[2] );
+                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 }( mediaWiki, jQuery ) );
index b530bb5..d39d43b 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -163,7 +163,7 @@ function wfStreamThumb( array $params ) {
 
        // Check if the file is hidden
        if ( $img->isDeleted( File::DELETED_FILE ) ) {
-               wfThumbError( 404, "The source file '$fileName' does not exist." );
+               wfThumbErrorText( 404, "The source file '$fileName' does not exist." );
                return;
        }
 
@@ -190,6 +190,7 @@ function wfStreamThumb( array $params ) {
                                if ( $targetFile->exists() ) {
                                        $newThumbName = $targetFile->thumbName( $params );
                                        if ( $isOld ) {
+                                               /** @var array $bits */
                                                $newThumbUrl = $targetFile->getArchiveThumbUrl(
                                                        $bits[0] . '!' . $targetFile->getName(), $newThumbName );
                                        } else {
@@ -213,14 +214,15 @@ function wfStreamThumb( array $params ) {
                        if ( count( $varyHeader ) ) {
                                $response->header( 'Vary: ' . implode( ', ', $varyHeader ) );
                        }
+                       $response->header( 'Content-Length: 0' );
                        return;
                }
 
                // If its not a redirect that has a target as a local file, give 404.
-               wfThumbError( 404, "The source file '$fileName' does not exist." );
+               wfThumbErrorText( 404, "The source file '$fileName' does not exist." );
                return;
        } elseif ( $img->getPath() === false ) {
-               wfThumbError( 500, "The source file '$fileName' is not locally accessible." );
+               wfThumbErrorText( 400, "The source file '$fileName' is not locally accessible." );
                return;
        }
 
@@ -282,7 +284,7 @@ function wfStreamThumb( array $params ) {
                        }
                        return;
                } else {
-                       wfThumbError( 404, "The given path of the specified thumbnail is incorrect;
+                       wfThumbErrorText( 404, "The given path of the specified thumbnail is incorrect;
                                expected '" . $img->getThumbRel( $thumbName ) . "' but got '" .
                                rawurldecode( $rel404 ) . "'." );
                        return;
@@ -301,31 +303,39 @@ function wfStreamThumb( array $params ) {
        // Stream the file if it exists already...
        $thumbPath = $img->getThumbPath( $thumbName );
        if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+               $starttime = microtime( true );
                $success = $img->getRepo()->streamFile( $thumbPath, $headers );
+               $streamtime = microtime( true ) - $starttime;
+
                if ( !$success ) {
                        wfThumbError( 500, 'Could not stream the file' );
+               } else {
+                       RequestContext::getMain()->getStats()->timing( 'media.thumbnail.stream', $streamtime );
                }
                return;
        }
 
        $user = RequestContext::getMain()->getUser();
        if ( !wfThumbIsStandard( $img, $params ) && $user->pingLimiter( 'renderfile-nonstandard' ) ) {
-               wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+               wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
                return;
        } elseif ( $user->pingLimiter( 'renderfile' ) ) {
-               wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+               wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
                return;
        }
 
-       // Actually generate a new thumbnail
        list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath );
-       /** @var MediaTransformOutput|bool $thumb */
+
+       /** @var MediaTransformOutput|MediaTransformError|bool $thumb */
 
        // Check for thumbnail generation errors...
        $msg = wfMessage( 'thumbnail_error' );
        $errorCode = 500;
        if ( !$thumb ) {
                $errorMsg = $errorMsg ?: $msg->rawParams( 'File::transform() returned false' )->escaped();
+               if ( $errorMsg instanceof MessageSpecifier && $errorMsg->getKey() === 'thumbnail_image-failure-limit' ) {
+                       $errorCode = 429;
+               }
        } elseif ( $thumb->isError() ) {
                $errorMsg = $thumb->getHtmlMsg();
        } elseif ( !$thumb->hasFile() ) {
@@ -406,7 +416,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
                                'fallback' => function () {
                                        return wfMessage( 'generic-pool-error' )->parse();
                                },
-                               'error' => function ( $status ) {
+                               'error' => function ( Status $status ) {
                                        return $status->getHTML();
                                }
                        )
@@ -421,6 +431,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
                // Tried to select a page on a non-paged file?
        }
 
+       /** @noinspection PhpUnusedLocalVariableInspection */
        $done = true; // no PHP fatal occured
 
        if ( !$thumb || $thumb->isError() ) {
@@ -491,7 +502,7 @@ function wfExtractThumbRequestInfo( $thumbRel ) {
  */
 function wfExtractThumbParams( $file, $params ) {
        if ( !isset( $params['thumbName'] ) ) {
-               throw new MWException( "No thumbnail name passed to wfExtractThumbParams" );
+               throw new InvalidArgumentException( "No thumbnail name passed to wfExtractThumbParams" );
        }
 
        $thumbname = $params['thumbName'];
@@ -530,7 +541,7 @@ function wfExtractThumbParams( $file, $params ) {
 
        // As a last ditch fallback, use the traditional common parameters
        if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
-               list( /* all */, $pagefull, $pagenum, $size ) = $matches;
+               list( /* all */, /* pagefull */, $pagenum, $size ) = $matches;
                $params['width'] = $size;
                if ( $pagenum ) {
                        $params['page'] = $pagenum;
@@ -540,22 +551,32 @@ function wfExtractThumbParams( $file, $params ) {
        return null;
 }
 
+
+/**
+ * Output a thumbnail generation error message
+ *
+ * @param int $status
+ * @param string $msgText Plain text (will be html escaped)
+ * @return void
+ */
+function wfThumbErrorText( $status, $msgText ) {
+       wfThumbError( $status, htmlspecialchars( $msgText ) );
+}
+
 /**
  * Output a thumbnail generation error message
  *
  * @param int $status
- * @param string $msg HTML
+ * @param string $msgHtml HTML
  * @return void
  */
-function wfThumbError( $status, $msg ) {
+function wfThumbError( $status, $msgHtml ) {
        global $wgShowHostnames;
 
        header( 'Cache-Control: no-cache' );
        header( 'Content-Type: text/html; charset=utf-8' );
-       if ( $status == 400 ) {
-               HttpStatus::header( 400 );
-       } elseif ( $status == 404 ) {
-               HttpStatus::header( 404 );
+       if ( $status == 400 || $status == 404 || $status == 429 ) {
+               HttpStatus::header( $status );
        } elseif ( $status == 403 ) {
                HttpStatus::header( 403 );
                header( 'Vary: Cookie' );
@@ -579,7 +600,7 @@ function wfThumbError( $status, $msg ) {
 <body>
 <h1>Error generating thumbnail</h1>
 <p>
-$msg
+$msgHtml
 </p>
 $debug
 </body>